diff --git a/OTRExporter b/OTRExporter index 8f7167290..717ae7866 160000 --- a/OTRExporter +++ b/OTRExporter @@ -1 +1 @@ -Subproject commit 8f71672901987bc3dbf6256e64e228db36a686f5 +Subproject commit 717ae786632e3f3e5f32a12dc0ecd86958593a8b diff --git a/docs/BUILDING.md b/docs/BUILDING.md index 4e37a27e9..d9c232491 100644 --- a/docs/BUILDING.md +++ b/docs/BUILDING.md @@ -3,28 +3,30 @@ ## Windows Requires: - * At least 8GB of RAM (machines with 4GB have seen compiler failures) - * 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 - * The `MSVC v143 - VS 2022 C++ build tools` component of Visual Studio - * Python 3 (can be installed manually or as part of Visual Studio) - * Git (can be installed manually or as part of Visual Studio) - * Cmake (can be installed via chocolatey or manually) + +- At least 8GB of RAM (machines with 4GB have seen compiler failures) +- 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 +- The `MSVC v143 - VS 2022 C++ build tools` component of Visual Studio +- Python 3 (can be installed manually or as part of Visual Studio) +- Git (can be installed manually or as part of Visual Studio) +- Cmake (can be installed via chocolatey or manually) During installation, check the "Desktop development with C++" feature set: ![image](https://user-images.githubusercontent.com/30329717/183511274-d11aceea-7900-46ec-acb6-3f2cc110021a.png) -Doing so should also check one of the Windows SDKs by default. Then, in the installation details in the right-hand column, make sure you also check the v143 toolset. This is often done by default. +Doing so should also check one of the Windows SDKs by default. Then, in the installation details in the right-hand column, make sure you also check the v143 toolset. This is often done by default. It is recommended that you install Python and Git standalone, the install process in VS Installer has given some issues in the past. 1. Clone the Ship of Harkinian repository -_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. 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_ + ```powershell # Navigate to the Shipwright repo within powershell. ie: cd "C:\yourpath\Shipwright" cd Shipwright @@ -45,16 +47,20 @@ cd Shipwright ``` ### Developing SoH + With the cmake build system you have two options for working on the project: #### Visual Studio + To develop using Visual Studio you only need to use cmake to generate the solution file: + ```powershell # Generates Ship.sln at `build/x64` for Visual Studio 2022 & 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 17 2022" -T v143 -A x64 ``` #### Visual Studio Code or another editor + To develop using Visual Studio Code or another editor you only need to open the repository in it. To build you'll need to follow the instructions from the building section. @@ -62,9 +68,10 @@ _Note: If you're using Visual Studio Code, the [CMake Tools plugin](https://mark _Experimental: You can also use another build system entirely rather than MSVC like [Ninja](https://ninja-build.org/) for possibly better performance._ - ### Generating the distributable + After compiling the project you can generate the distributable by running: + ```powershell # Go to build folder cd "build/x64" @@ -73,21 +80,27 @@ cd "build/x64" ``` ### 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 + ### Install dependencies + #### Debian/Ubuntu + ```sh # using gcc apt-get install gcc g++ git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libboost-dev libopengl-dev @@ -95,7 +108,9 @@ apt-get install gcc g++ git cmake ninja-build lsb-release libsdl2-dev libpng-dev # or using clang apt-get install clang git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libboost-dev libopengl-dev ``` + #### Arch + ```sh # using gcc pacman -S gcc git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net boost @@ -103,7 +118,9 @@ pacman -S gcc git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyx # or using clang pacman -S clang git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net boost ``` + #### Fedora + ```sh # using gcc dnf install gcc gcc-c++ git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools nlohmann-json-devel tinyxml2-devel spdlog-devel boost-devel @@ -111,7 +128,9 @@ dnf install gcc gcc-c++ git cmake ninja-build lsb_release SDL2-devel libpng-deve # or using clang dnf install clang git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools nlohmann-json-devel tinyxml2-devel spdlog-devel boost-devel ``` + #### openSUSE + ```sh # using gcc zypper in gcc gcc-c++ git cmake ninja SDL2-devel libpng16-devel libzip-devel libzip-tools nlohmann_json-devel tinyxml2-devel spdlog-devel @@ -150,7 +169,9 @@ cmake --build build-cmake ``` ### Generate a distributable + After compiling the project you can generate a distributable by running of the following: + ```bash # Go to build folder cd build-cmake @@ -161,18 +182,23 @@ cpack -G External (creates appimage) ``` ### 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 ``` ## macOS + 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!** @@ -208,7 +234,9 @@ cmake --build build-cmake ``` ### Generating a distributable + After compiling the project you can generate a distributable by running of the following: + ```bash # Go to build folder cd build-cmake @@ -217,21 +245,25 @@ 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 + 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 3. Clone the Ship of Harkinian repository 4. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice @@ -251,8 +283,9 @@ cmake --build build-switch --target soh_nro ``` ## Wii U + 1. Requires that your build machine is setup with the tools necessary for your platform above -2. Requires that you have the Wii U build tools installed +2. Requires that you have the Wii U build tools installed 3. Clone the Ship of Harkinian repository 4. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice @@ -265,13 +298,14 @@ cmake --build build-cmake --target ExtractAssets # Setup cmake project for building for Wii U cmake -H. -Bbuild-wiiu -GNinja -DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/WiiU.cmake # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging) # Build project and generate rpx -cmake --build build-wiiu --target soh # --target soh_wuhb (for building .wuhb) +cmake --build build-wiiu --target soh # --target soh_wuhb (for building .wuhb) # Now you can run the executable in ./build-wiiu/soh/soh.rpx or the Wii U Homebrew Bundle in ./build-wiiu/soh/soh.wuhb # To develop the project open the repository in VSCode (or your preferred editor) ``` # Compatible Roms + See [`supportedHashes.json`](supportedHashes.json) ## Getting CI to work on your fork @@ -281,7 +315,9 @@ The CI works via [Github Actions](https://github.com/features/actions) where we To get this step working on your fork, you'll need to add a machine to your own repository as a self-hosted runner via "Settings > Actions > Runners" in your repository settings. Make sure to add the 'asset-builder' tag to your newly added runner to assign it to run this step. To setup your runner as a service read the docs [here](https://docs.github.com/en/actions/hosting-your-own-runners/configuring-the-self-hosted-runner-application-as-a-service?platform=linux). ### Runner on Windows + You'll have to enable the ability to run unsigned scripts through PowerShell. To do this, open Powershell as administrator and run `set-executionpolicy remotesigned`. Most dependencies get installed as part of the CI process. You will also need to separately install 7z and add it to the PATH so `7z` can be run as a command. [Chocolatey](https://chocolatey.org/) or other package managers can be used to install it easily. ### Runner on UNIX systems + If you're on macOS or Linux take a look at `macports-deps.txt` or `apt-deps.txt` to see the dependencies expected to be on your machine. diff --git a/mods/custom_mod_files_go_here.txt b/mods/custom_mod_files_go_here.txt new file mode 100644 index 000000000..e69de29bb diff --git a/soh/assets/custom/accessibility/texts/kaleidoscope_eng.json b/soh/assets/custom/accessibility/texts/kaleidoscope_eng.json index a89c12889..6b0890997 100644 --- a/soh/assets/custom/accessibility/texts/kaleidoscope_eng.json +++ b/soh/assets/custom/accessibility/texts/kaleidoscope_eng.json @@ -16,7 +16,7 @@ "continue_game": "Continue playing?", "assigned_to": "Assigned to $0", "0": "Deku Stick - $0", - "1": "Deku Nut - $0", + "1": "Deez Nuts - $0", "2": "Bomb - $0", "3": "Fairy Bow - $0", "4": "Fire Arrow", @@ -30,7 +30,7 @@ "12": "Ice Arrow", "13": "Farore's Wind", "14": "Boomerang", - "15": "Lens of Truth", + "15": "Lens of Truthz", "16": "Magic Beans - $0", "17": "Megaton Hammer", "18": "Light Arrow", @@ -171,6 +171,8 @@ "153": "STICK UPGRADE 30", "154": "NUT UPGRADE 30", "155": "NUT UPGRADE 40", + "156": "Glider", + "161": "Glider", "255": "", "256": "Haunted Wasteland", "257": "Gerudos Fortress", @@ -230,4 +232,4 @@ "311": "Lon Lon Ranch", "312": "Question Mark", "313": "Ganon's Castle" -} +} \ No newline at end of file diff --git a/soh/assets/custom/accessibility/texts/kaleidoscope_fra.json b/soh/assets/custom/accessibility/texts/kaleidoscope_fra.json index 116c19a41..154236bca 100644 --- a/soh/assets/custom/accessibility/texts/kaleidoscope_fra.json +++ b/soh/assets/custom/accessibility/texts/kaleidoscope_fra.json @@ -171,6 +171,7 @@ "153": "AMÉLIORATION BÂTON MOJO 30", "154": "AMÉLIORATION NOIX MOJO 30", "155": "AMÉLIORATION NOIX MOJO 40", + "161": "Planeur", "255": "", "256": "Désert Hanté", "257": "Forteresse Gerudo", @@ -230,4 +231,4 @@ "311": "Ranch Lon Lon", "312": "Point d'interrogation", "313": "Château de Ganon" -} +} \ No newline at end of file diff --git a/soh/assets/custom/accessibility/texts/kaleidoscope_ger.json b/soh/assets/custom/accessibility/texts/kaleidoscope_ger.json index 649790da3..10eab13db 100644 --- a/soh/assets/custom/accessibility/texts/kaleidoscope_ger.json +++ b/soh/assets/custom/accessibility/texts/kaleidoscope_ger.json @@ -171,6 +171,7 @@ "153": "STAB UPGRADE 30", "154": "NUß UPGRADE 30", "155": "NUß UPGRADE 40", + "161": "Gleiter", "255": "", "256": "Gespensterwüste", "257": "Gerudo-Festung", @@ -230,4 +231,4 @@ "311": "Lon Lon-Farm", "312": "Fragezeichen", "313": "Teufelsturm" -} +} \ No newline at end of file diff --git a/soh/assets/custom/customitems/glider/Wing_Zng_Alb b/soh/assets/custom/customitems/glider/Wing_Zng_Alb new file mode 100644 index 000000000..cbb893b03 Binary files /dev/null and b/soh/assets/custom/customitems/glider/Wing_Zng_Alb differ diff --git a/soh/assets/custom/customitems/glider/gGliderDL b/soh/assets/custom/customitems/glider/gGliderDL new file mode 100644 index 000000000..02feaa5ad --- /dev/null +++ b/soh/assets/custom/customitems/glider/gGliderDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/customitems/glider/gGliderDL_tri_0 b/soh/assets/custom/customitems/glider/gGliderDL_tri_0 new file mode 100644 index 000000000..953bac429 --- /dev/null +++ b/soh/assets/custom/customitems/glider/gGliderDL_tri_0 @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/customitems/glider/gGliderDL_vtx_0 b/soh/assets/custom/customitems/glider/gGliderDL_vtx_0 new file mode 100644 index 000000000..7cd99a77e --- /dev/null +++ b/soh/assets/custom/customitems/glider/gGliderDL_vtx_0 @@ -0,0 +1,628 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/customitems/glider/gGliderDL_vtx_cull b/soh/assets/custom/customitems/glider/gGliderDL_vtx_cull new file mode 100644 index 000000000..34d2f790b --- /dev/null +++ b/soh/assets/custom/customitems/glider/gGliderDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/customitems/glider/mat_gGliderDL_m_Wing_f3d_002 b/soh/assets/custom/customitems/glider/mat_gGliderDL_m_Wing_f3d_002 new file mode 100644 index 000000000..520003f0b --- /dev/null +++ b/soh/assets/custom/customitems/glider/mat_gGliderDL_m_Wing_f3d_002 @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/customitems/icon_item_static/gGliderIconTex.rgba32.png b/soh/assets/custom/customitems/icon_item_static/gGliderIconTex.rgba32.png new file mode 100644 index 000000000..12e66e2a4 Binary files /dev/null and b/soh/assets/custom/customitems/icon_item_static/gGliderIconTex.rgba32.png differ diff --git a/soh/assets/custom/customitems/item_name_static/gBlankItemNameENGTex.ia4.png b/soh/assets/custom/customitems/item_name_static/gBlankItemNameENGTex.ia4.png new file mode 100644 index 000000000..cefd9eac7 Binary files /dev/null and b/soh/assets/custom/customitems/item_name_static/gBlankItemNameENGTex.ia4.png differ diff --git a/soh/assets/custom/customitems/item_name_static/gGliderItemNameENGTex.ia4.png b/soh/assets/custom/customitems/item_name_static/gGliderItemNameENGTex.ia4.png new file mode 100644 index 000000000..42b24f5c5 Binary files /dev/null and b/soh/assets/custom/customitems/item_name_static/gGliderItemNameENGTex.ia4.png differ diff --git a/soh/assets/objects/gameplay_keep/gameplay_keep.h b/soh/assets/objects/gameplay_keep/gameplay_keep.h index 638125397..49a8d2458 100644 --- a/soh/assets/objects/gameplay_keep/gameplay_keep.h +++ b/soh/assets/objects/gameplay_keep/gameplay_keep.h @@ -201,44 +201,64 @@ static const ALIGN_ASSET(2) char gPlayerAnim_demo_link_twait[] = dgPlayerAnim_de #define dgPlayerAnim_kolink_odoroki_demo "__OTR__objects/gameplay_keep/gPlayerAnim_kolink_odoroki_demo" static const ALIGN_ASSET(2) char gPlayerAnim_kolink_odoroki_demo[] = dgPlayerAnim_kolink_odoroki_demo; -#define dgPlayerAnim_link_anchor_LLside_kiru_endL "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_LLside_kiru_endL" +#define dgPlayerAnim_link_anchor_LLside_kiru_endL \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_LLside_kiru_endL" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_LLside_kiru_endL[] = dgPlayerAnim_link_anchor_LLside_kiru_endL; -#define dgPlayerAnim_link_anchor_LLside_kiru_finsh_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_LLside_kiru_finsh_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_LLside_kiru_finsh_endR[] = dgPlayerAnim_link_anchor_LLside_kiru_finsh_endR; +#define dgPlayerAnim_link_anchor_LLside_kiru_finsh_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_LLside_kiru_finsh_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_LLside_kiru_finsh_endR[] = + dgPlayerAnim_link_anchor_LLside_kiru_finsh_endR; -#define dgPlayerAnim_link_anchor_LRside_kiru_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_LRside_kiru_endR" +#define dgPlayerAnim_link_anchor_LRside_kiru_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_LRside_kiru_endR" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_LRside_kiru_endR[] = dgPlayerAnim_link_anchor_LRside_kiru_endR; -#define dgPlayerAnim_link_anchor_LRside_kiru_finsh_endL "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_LRside_kiru_finsh_endL" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_LRside_kiru_finsh_endL[] = dgPlayerAnim_link_anchor_LRside_kiru_finsh_endL; +#define dgPlayerAnim_link_anchor_LRside_kiru_finsh_endL \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_LRside_kiru_finsh_endL" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_LRside_kiru_finsh_endL[] = + dgPlayerAnim_link_anchor_LRside_kiru_finsh_endL; -#define dgPlayerAnim_link_anchor_Lnormal_kiru_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Lnormal_kiru_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Lnormal_kiru_endR[] = dgPlayerAnim_link_anchor_Lnormal_kiru_endR; +#define dgPlayerAnim_link_anchor_Lnormal_kiru_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Lnormal_kiru_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Lnormal_kiru_endR[] = + dgPlayerAnim_link_anchor_Lnormal_kiru_endR; -#define dgPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR[] = dgPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR; +#define dgPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR[] = + dgPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR; -#define dgPlayerAnim_link_anchor_Lpierce_kiru_endL "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Lpierce_kiru_endL" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Lpierce_kiru_endL[] = dgPlayerAnim_link_anchor_Lpierce_kiru_endL; +#define dgPlayerAnim_link_anchor_Lpierce_kiru_endL \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Lpierce_kiru_endL" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Lpierce_kiru_endL[] = + dgPlayerAnim_link_anchor_Lpierce_kiru_endL; -#define dgPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR[] = dgPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR; +#define dgPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR[] = + dgPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR; -#define dgPlayerAnim_link_anchor_Lrolling_kiru_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Lrolling_kiru_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Lrolling_kiru_endR[] = dgPlayerAnim_link_anchor_Lrolling_kiru_endR; +#define dgPlayerAnim_link_anchor_Lrolling_kiru_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Lrolling_kiru_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Lrolling_kiru_endR[] = + dgPlayerAnim_link_anchor_Lrolling_kiru_endR; #define dgPlayerAnim_link_anchor_Lside_kiru_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Lside_kiru_endR" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Lside_kiru_endR[] = dgPlayerAnim_link_anchor_Lside_kiru_endR; -#define dgPlayerAnim_link_anchor_Lside_kiru_finsh_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Lside_kiru_finsh_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Lside_kiru_finsh_endR[] = dgPlayerAnim_link_anchor_Lside_kiru_finsh_endR; +#define dgPlayerAnim_link_anchor_Lside_kiru_finsh_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Lside_kiru_finsh_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Lside_kiru_finsh_endR[] = + dgPlayerAnim_link_anchor_Lside_kiru_finsh_endR; #define dgPlayerAnim_link_anchor_Rside_kiru_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Rside_kiru_endR" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Rside_kiru_endR[] = dgPlayerAnim_link_anchor_Rside_kiru_endR; -#define dgPlayerAnim_link_anchor_Rside_kiru_finsh_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Rside_kiru_finsh_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Rside_kiru_finsh_endR[] = dgPlayerAnim_link_anchor_Rside_kiru_finsh_endR; +#define dgPlayerAnim_link_anchor_Rside_kiru_finsh_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_Rside_kiru_finsh_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_Rside_kiru_finsh_endR[] = + dgPlayerAnim_link_anchor_Rside_kiru_finsh_endR; #define dgPlayerAnim_link_anchor_anchor2fighter "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_anchor2fighter" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_anchor2fighter[] = dgPlayerAnim_link_anchor_anchor2fighter; @@ -261,35 +281,50 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_bom_side_walkR[] = dgPl #define dgPlayerAnim_link_anchor_defense_hit "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_defense_hit" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_defense_hit[] = dgPlayerAnim_link_anchor_defense_hit; -#define dgPlayerAnim_link_anchor_defense_long_hitL "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_defense_long_hitL" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_defense_long_hitL[] = dgPlayerAnim_link_anchor_defense_long_hitL; +#define dgPlayerAnim_link_anchor_defense_long_hitL \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_defense_long_hitL" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_defense_long_hitL[] = + dgPlayerAnim_link_anchor_defense_long_hitL; -#define dgPlayerAnim_link_anchor_defense_long_hitR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_defense_long_hitR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_defense_long_hitR[] = dgPlayerAnim_link_anchor_defense_long_hitR; +#define dgPlayerAnim_link_anchor_defense_long_hitR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_defense_long_hitR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_defense_long_hitR[] = + dgPlayerAnim_link_anchor_defense_long_hitR; #define dgPlayerAnim_link_anchor_front_hitR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_front_hitR" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_front_hitR[] = dgPlayerAnim_link_anchor_front_hitR; -#define dgPlayerAnim_link_anchor_jump_kiru_finsh_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_jump_kiru_finsh_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_jump_kiru_finsh_endR[] = dgPlayerAnim_link_anchor_jump_kiru_finsh_endR; +#define dgPlayerAnim_link_anchor_jump_kiru_finsh_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_jump_kiru_finsh_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_jump_kiru_finsh_endR[] = + dgPlayerAnim_link_anchor_jump_kiru_finsh_endR; #define dgPlayerAnim_link_anchor_landingR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_landingR" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_landingR[] = dgPlayerAnim_link_anchor_landingR; -#define dgPlayerAnim_link_anchor_normal_kiru_finsh_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_normal_kiru_finsh_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_normal_kiru_finsh_endR[] = dgPlayerAnim_link_anchor_normal_kiru_finsh_endR; +#define dgPlayerAnim_link_anchor_normal_kiru_finsh_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_normal_kiru_finsh_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_normal_kiru_finsh_endR[] = + dgPlayerAnim_link_anchor_normal_kiru_finsh_endR; -#define dgPlayerAnim_link_anchor_pierce_kiru_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_pierce_kiru_endR" +#define dgPlayerAnim_link_anchor_pierce_kiru_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_pierce_kiru_endR" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_pierce_kiru_endR[] = dgPlayerAnim_link_anchor_pierce_kiru_endR; -#define dgPlayerAnim_link_anchor_pierce_kiru_finsh_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_pierce_kiru_finsh_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_pierce_kiru_finsh_endR[] = dgPlayerAnim_link_anchor_pierce_kiru_finsh_endR; +#define dgPlayerAnim_link_anchor_pierce_kiru_finsh_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_pierce_kiru_finsh_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_pierce_kiru_finsh_endR[] = + dgPlayerAnim_link_anchor_pierce_kiru_finsh_endR; -#define dgPlayerAnim_link_anchor_power_kiru_wait_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_power_kiru_wait_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_power_kiru_wait_endR[] = dgPlayerAnim_link_anchor_power_kiru_wait_endR; +#define dgPlayerAnim_link_anchor_power_kiru_wait_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_power_kiru_wait_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_power_kiru_wait_endR[] = + dgPlayerAnim_link_anchor_power_kiru_wait_endR; -#define dgPlayerAnim_link_anchor_rolling_kiru_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_rolling_kiru_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_rolling_kiru_endR[] = dgPlayerAnim_link_anchor_rolling_kiru_endR; +#define dgPlayerAnim_link_anchor_rolling_kiru_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_rolling_kiru_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_rolling_kiru_endR[] = + dgPlayerAnim_link_anchor_rolling_kiru_endR; #define dgPlayerAnim_link_anchor_side_walkL "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_side_walkL" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_side_walkL[] = dgPlayerAnim_link_anchor_side_walkL; @@ -303,8 +338,10 @@ static const ALIGN_ASSET(2) char gPlayerAnim_002578[] = dgPlayerAnim_002578; #define dgPlayerAnim_link_anchor_waitL2defense "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitL2defense" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitL2defense[] = dgPlayerAnim_link_anchor_waitL2defense; -#define dgPlayerAnim_link_anchor_waitL2defense_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitL2defense_long" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitL2defense_long[] = dgPlayerAnim_link_anchor_waitL2defense_long; +#define dgPlayerAnim_link_anchor_waitL2defense_long \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitL2defense_long" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitL2defense_long[] = + dgPlayerAnim_link_anchor_waitL2defense_long; #define dgPlayerAnim_link_anchor_waitL "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitL" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitL[] = dgPlayerAnim_link_anchor_waitL; @@ -312,14 +349,18 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitL[] = dgPlayerAnim_ #define dgPlayerAnim_link_anchor_waitL_defense "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitL_defense" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitL_defense[] = dgPlayerAnim_link_anchor_waitL_defense; -#define dgPlayerAnim_link_anchor_waitL_defense_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitL_defense_wait" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitL_defense_wait[] = dgPlayerAnim_link_anchor_waitL_defense_wait; +#define dgPlayerAnim_link_anchor_waitL_defense_wait \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitL_defense_wait" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitL_defense_wait[] = + dgPlayerAnim_link_anchor_waitL_defense_wait; #define dgPlayerAnim_0025A8 "__OTR__objects/gameplay_keep/gPlayerAnim_0025A8" static const ALIGN_ASSET(2) char gPlayerAnim_0025A8[] = dgPlayerAnim_0025A8; -#define dgPlayerAnim_link_anchor_waitL_pierce_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitL_pierce_kiru" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitL_pierce_kiru[] = dgPlayerAnim_link_anchor_waitL_pierce_kiru; +#define dgPlayerAnim_link_anchor_waitL_pierce_kiru \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitL_pierce_kiru" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitL_pierce_kiru[] = + dgPlayerAnim_link_anchor_waitL_pierce_kiru; #define dgPlayerAnim_0025B8 "__OTR__objects/gameplay_keep/gPlayerAnim_0025B8" static const ALIGN_ASSET(2) char gPlayerAnim_0025B8[] = dgPlayerAnim_0025B8; @@ -327,8 +368,10 @@ static const ALIGN_ASSET(2) char gPlayerAnim_0025B8[] = dgPlayerAnim_0025B8; #define dgPlayerAnim_link_anchor_waitR2defense "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitR2defense" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitR2defense[] = dgPlayerAnim_link_anchor_waitR2defense; -#define dgPlayerAnim_link_anchor_waitR2defense_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitR2defense_long" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitR2defense_long[] = dgPlayerAnim_link_anchor_waitR2defense_long; +#define dgPlayerAnim_link_anchor_waitR2defense_long \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitR2defense_long" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitR2defense_long[] = + dgPlayerAnim_link_anchor_waitR2defense_long; #define dgPlayerAnim_link_anchor_waitR "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitR" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitR[] = dgPlayerAnim_link_anchor_waitR; @@ -336,14 +379,18 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitR[] = dgPlayerAnim_ #define dgPlayerAnim_link_anchor_waitR_defense "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitR_defense" static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitR_defense[] = dgPlayerAnim_link_anchor_waitR_defense; -#define dgPlayerAnim_link_anchor_waitR_defense_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitR_defense_wait" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitR_defense_wait[] = dgPlayerAnim_link_anchor_waitR_defense_wait; +#define dgPlayerAnim_link_anchor_waitR_defense_wait \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitR_defense_wait" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitR_defense_wait[] = + dgPlayerAnim_link_anchor_waitR_defense_wait; #define dgPlayerAnim_0025E8 "__OTR__objects/gameplay_keep/gPlayerAnim_0025E8" static const ALIGN_ASSET(2) char gPlayerAnim_0025E8[] = dgPlayerAnim_0025E8; -#define dgPlayerAnim_link_anchor_waitR_pierce_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitR_pierce_kiru" -static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitR_pierce_kiru[] = dgPlayerAnim_link_anchor_waitR_pierce_kiru; +#define dgPlayerAnim_link_anchor_waitR_pierce_kiru \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_anchor_waitR_pierce_kiru" +static const ALIGN_ASSET(2) char gPlayerAnim_link_anchor_waitR_pierce_kiru[] = + dgPlayerAnim_link_anchor_waitR_pierce_kiru; #define dgPlayerAnim_link_boom_catch "__OTR__objects/gameplay_keep/gPlayerAnim_link_boom_catch" static const ALIGN_ASSET(2) char gPlayerAnim_link_boom_catch[] = dgPlayerAnim_link_boom_catch; @@ -387,7 +434,8 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_bottle_drink_demo[] = dgPlayer #define dgPlayerAnim_link_bottle_drink_demo_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_bottle_drink_demo_end" static const ALIGN_ASSET(2) char gPlayerAnim_link_bottle_drink_demo_end[] = dgPlayerAnim_link_bottle_drink_demo_end; -#define dgPlayerAnim_link_bottle_drink_demo_start "__OTR__objects/gameplay_keep/gPlayerAnim_link_bottle_drink_demo_start" +#define dgPlayerAnim_link_bottle_drink_demo_start \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_bottle_drink_demo_start" static const ALIGN_ASSET(2) char gPlayerAnim_link_bottle_drink_demo_start[] = dgPlayerAnim_link_bottle_drink_demo_start; #define dgPlayerAnim_link_bottle_drink_demo_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_bottle_drink_demo_wait" @@ -519,8 +567,10 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_demo_kakeyori_mimawasi[] = dgP #define dgPlayerAnim_link_demo_kakeyori_miokuri "__OTR__objects/gameplay_keep/gPlayerAnim_link_demo_kakeyori_miokuri" static const ALIGN_ASSET(2) char gPlayerAnim_link_demo_kakeyori_miokuri[] = dgPlayerAnim_link_demo_kakeyori_miokuri; -#define dgPlayerAnim_link_demo_kakeyori_miokuri_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_demo_kakeyori_miokuri_wait" -static const ALIGN_ASSET(2) char gPlayerAnim_link_demo_kakeyori_miokuri_wait[] = dgPlayerAnim_link_demo_kakeyori_miokuri_wait; +#define dgPlayerAnim_link_demo_kakeyori_miokuri_wait \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_demo_kakeyori_miokuri_wait" +static const ALIGN_ASSET(2) char gPlayerAnim_link_demo_kakeyori_miokuri_wait[] = + dgPlayerAnim_link_demo_kakeyori_miokuri_wait; #define dgPlayerAnim_link_demo_kakeyori_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_demo_kakeyori_wait" static const ALIGN_ASSET(2) char gPlayerAnim_link_demo_kakeyori_wait[] = dgPlayerAnim_link_demo_kakeyori_wait; @@ -591,85 +641,126 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_derth_rebirth[] = dgPlayerAnim #define dgPlayerAnim_link_fighter_LLside_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LLside_kiru" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_LLside_kiru[] = dgPlayerAnim_link_fighter_LLside_kiru; -#define dgPlayerAnim_link_fighter_LLside_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LLside_kiru_end" +#define dgPlayerAnim_link_fighter_LLside_kiru_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LLside_kiru_end" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_LLside_kiru_end[] = dgPlayerAnim_link_fighter_LLside_kiru_end; -#define dgPlayerAnim_link_fighter_LLside_kiru_finsh "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LLside_kiru_finsh" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_LLside_kiru_finsh[] = dgPlayerAnim_link_fighter_LLside_kiru_finsh; +#define dgPlayerAnim_link_fighter_LLside_kiru_finsh \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LLside_kiru_finsh" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_LLside_kiru_finsh[] = + dgPlayerAnim_link_fighter_LLside_kiru_finsh; -#define dgPlayerAnim_link_fighter_LLside_kiru_finsh_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LLside_kiru_finsh_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_LLside_kiru_finsh_end[] = dgPlayerAnim_link_fighter_LLside_kiru_finsh_end; +#define dgPlayerAnim_link_fighter_LLside_kiru_finsh_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LLside_kiru_finsh_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_LLside_kiru_finsh_end[] = + dgPlayerAnim_link_fighter_LLside_kiru_finsh_end; #define dgPlayerAnim_link_fighter_LRside_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LRside_kiru" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_LRside_kiru[] = dgPlayerAnim_link_fighter_LRside_kiru; -#define dgPlayerAnim_link_fighter_LRside_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LRside_kiru_end" +#define dgPlayerAnim_link_fighter_LRside_kiru_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LRside_kiru_end" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_LRside_kiru_end[] = dgPlayerAnim_link_fighter_LRside_kiru_end; -#define dgPlayerAnim_link_fighter_LRside_kiru_finsh "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LRside_kiru_finsh" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_LRside_kiru_finsh[] = dgPlayerAnim_link_fighter_LRside_kiru_finsh; +#define dgPlayerAnim_link_fighter_LRside_kiru_finsh \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LRside_kiru_finsh" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_LRside_kiru_finsh[] = + dgPlayerAnim_link_fighter_LRside_kiru_finsh; -#define dgPlayerAnim_link_fighter_LRside_kiru_finsh_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LRside_kiru_finsh_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_LRside_kiru_finsh_end[] = dgPlayerAnim_link_fighter_LRside_kiru_finsh_end; +#define dgPlayerAnim_link_fighter_LRside_kiru_finsh_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_LRside_kiru_finsh_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_LRside_kiru_finsh_end[] = + dgPlayerAnim_link_fighter_LRside_kiru_finsh_end; #define dgPlayerAnim_link_fighter_Lnormal_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lnormal_kiru" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lnormal_kiru[] = dgPlayerAnim_link_fighter_Lnormal_kiru; -#define dgPlayerAnim_link_fighter_Lnormal_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lnormal_kiru_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lnormal_kiru_end[] = dgPlayerAnim_link_fighter_Lnormal_kiru_end; +#define dgPlayerAnim_link_fighter_Lnormal_kiru_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lnormal_kiru_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lnormal_kiru_end[] = + dgPlayerAnim_link_fighter_Lnormal_kiru_end; -#define dgPlayerAnim_link_fighter_Lnormal_kiru_finsh "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lnormal_kiru_finsh" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lnormal_kiru_finsh[] = dgPlayerAnim_link_fighter_Lnormal_kiru_finsh; +#define dgPlayerAnim_link_fighter_Lnormal_kiru_finsh \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lnormal_kiru_finsh" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lnormal_kiru_finsh[] = + dgPlayerAnim_link_fighter_Lnormal_kiru_finsh; -#define dgPlayerAnim_link_fighter_Lnormal_kiru_finsh_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lnormal_kiru_finsh_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lnormal_kiru_finsh_end[] = dgPlayerAnim_link_fighter_Lnormal_kiru_finsh_end; +#define dgPlayerAnim_link_fighter_Lnormal_kiru_finsh_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lnormal_kiru_finsh_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lnormal_kiru_finsh_end[] = + dgPlayerAnim_link_fighter_Lnormal_kiru_finsh_end; #define dgPlayerAnim_link_fighter_Lpierce_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpierce_kiru" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpierce_kiru[] = dgPlayerAnim_link_fighter_Lpierce_kiru; -#define dgPlayerAnim_link_fighter_Lpierce_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpierce_kiru_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpierce_kiru_end[] = dgPlayerAnim_link_fighter_Lpierce_kiru_end; - -#define dgPlayerAnim_link_fighter_Lpierce_kiru_finsh "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpierce_kiru_finsh" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpierce_kiru_finsh[] = dgPlayerAnim_link_fighter_Lpierce_kiru_finsh; - -#define dgPlayerAnim_link_fighter_Lpierce_kiru_finsh_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpierce_kiru_finsh_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpierce_kiru_finsh_end[] = dgPlayerAnim_link_fighter_Lpierce_kiru_finsh_end; - -#define dgPlayerAnim_link_fighter_Lpower_jump_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_jump_kiru" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_jump_kiru[] = dgPlayerAnim_link_fighter_Lpower_jump_kiru; - -#define dgPlayerAnim_link_fighter_Lpower_jump_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_jump_kiru_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_jump_kiru_end[] = dgPlayerAnim_link_fighter_Lpower_jump_kiru_end; - -#define dgPlayerAnim_link_fighter_Lpower_jump_kiru_hit "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_jump_kiru_hit" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_jump_kiru_hit[] = dgPlayerAnim_link_fighter_Lpower_jump_kiru_hit; - -#define dgPlayerAnim_link_fighter_Lpower_kiru_side_walk "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_side_walk" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_kiru_side_walk[] = dgPlayerAnim_link_fighter_Lpower_kiru_side_walk; - -#define dgPlayerAnim_link_fighter_Lpower_kiru_start "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_start" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_kiru_start[] = dgPlayerAnim_link_fighter_Lpower_kiru_start; - -#define dgPlayerAnim_link_fighter_Lpower_kiru_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_wait" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_kiru_wait[] = dgPlayerAnim_link_fighter_Lpower_kiru_wait; - -#define dgPlayerAnim_link_fighter_Lpower_kiru_wait_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_wait_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_kiru_wait_end[] = dgPlayerAnim_link_fighter_Lpower_kiru_wait_end; - -#define dgPlayerAnim_link_fighter_Lpower_kiru_walk "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_walk" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_kiru_walk[] = dgPlayerAnim_link_fighter_Lpower_kiru_walk; +#define dgPlayerAnim_link_fighter_Lpierce_kiru_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpierce_kiru_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpierce_kiru_end[] = + dgPlayerAnim_link_fighter_Lpierce_kiru_end; + +#define dgPlayerAnim_link_fighter_Lpierce_kiru_finsh \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpierce_kiru_finsh" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpierce_kiru_finsh[] = + dgPlayerAnim_link_fighter_Lpierce_kiru_finsh; + +#define dgPlayerAnim_link_fighter_Lpierce_kiru_finsh_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpierce_kiru_finsh_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpierce_kiru_finsh_end[] = + dgPlayerAnim_link_fighter_Lpierce_kiru_finsh_end; + +#define dgPlayerAnim_link_fighter_Lpower_jump_kiru \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_jump_kiru" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_jump_kiru[] = + dgPlayerAnim_link_fighter_Lpower_jump_kiru; + +#define dgPlayerAnim_link_fighter_Lpower_jump_kiru_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_jump_kiru_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_jump_kiru_end[] = + dgPlayerAnim_link_fighter_Lpower_jump_kiru_end; + +#define dgPlayerAnim_link_fighter_Lpower_jump_kiru_hit \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_jump_kiru_hit" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_jump_kiru_hit[] = + dgPlayerAnim_link_fighter_Lpower_jump_kiru_hit; + +#define dgPlayerAnim_link_fighter_Lpower_kiru_side_walk \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_side_walk" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_kiru_side_walk[] = + dgPlayerAnim_link_fighter_Lpower_kiru_side_walk; + +#define dgPlayerAnim_link_fighter_Lpower_kiru_start \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_start" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_kiru_start[] = + dgPlayerAnim_link_fighter_Lpower_kiru_start; + +#define dgPlayerAnim_link_fighter_Lpower_kiru_wait \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_wait" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_kiru_wait[] = + dgPlayerAnim_link_fighter_Lpower_kiru_wait; + +#define dgPlayerAnim_link_fighter_Lpower_kiru_wait_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_wait_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_kiru_wait_end[] = + dgPlayerAnim_link_fighter_Lpower_kiru_wait_end; + +#define dgPlayerAnim_link_fighter_Lpower_kiru_walk \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_walk" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lpower_kiru_walk[] = + dgPlayerAnim_link_fighter_Lpower_kiru_walk; #define dgPlayerAnim_link_fighter_Lrolling_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lrolling_kiru" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lrolling_kiru[] = dgPlayerAnim_link_fighter_Lrolling_kiru; -#define dgPlayerAnim_link_fighter_Lrolling_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lrolling_kiru_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lrolling_kiru_end[] = dgPlayerAnim_link_fighter_Lrolling_kiru_end; +#define dgPlayerAnim_link_fighter_Lrolling_kiru_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lrolling_kiru_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lrolling_kiru_end[] = + dgPlayerAnim_link_fighter_Lrolling_kiru_end; #define dgPlayerAnim_link_fighter_Lside_jump "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_jump" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lside_jump[] = dgPlayerAnim_link_fighter_Lside_jump; -#define dgPlayerAnim_link_fighter_Lside_jump_endL "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_jump_endL" +#define dgPlayerAnim_link_fighter_Lside_jump_endL \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_jump_endL" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lside_jump_endL[] = dgPlayerAnim_link_fighter_Lside_jump_endL; #define dgPlayerAnim_link_fighter_Lside_jump_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_jump_end" @@ -681,16 +772,21 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lside_kiru[] = dgPlaye #define dgPlayerAnim_link_fighter_Lside_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_kiru_end" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lside_kiru_end[] = dgPlayerAnim_link_fighter_Lside_kiru_end; -#define dgPlayerAnim_link_fighter_Lside_kiru_finsh "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_kiru_finsh" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lside_kiru_finsh[] = dgPlayerAnim_link_fighter_Lside_kiru_finsh; +#define dgPlayerAnim_link_fighter_Lside_kiru_finsh \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_kiru_finsh" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lside_kiru_finsh[] = + dgPlayerAnim_link_fighter_Lside_kiru_finsh; -#define dgPlayerAnim_link_fighter_Lside_kiru_finsh_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_kiru_finsh_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lside_kiru_finsh_end[] = dgPlayerAnim_link_fighter_Lside_kiru_finsh_end; +#define dgPlayerAnim_link_fighter_Lside_kiru_finsh_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_kiru_finsh_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Lside_kiru_finsh_end[] = + dgPlayerAnim_link_fighter_Lside_kiru_finsh_end; #define dgPlayerAnim_link_fighter_Rside_jump "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_jump" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Rside_jump[] = dgPlayerAnim_link_fighter_Rside_jump; -#define dgPlayerAnim_link_fighter_Rside_jump_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_jump_endR" +#define dgPlayerAnim_link_fighter_Rside_jump_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_jump_endR" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Rside_jump_endR[] = dgPlayerAnim_link_fighter_Rside_jump_endR; #define dgPlayerAnim_link_fighter_Rside_jump_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_jump_end" @@ -702,31 +798,42 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Rside_kiru[] = dgPlaye #define dgPlayerAnim_link_fighter_Rside_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_kiru_end" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Rside_kiru_end[] = dgPlayerAnim_link_fighter_Rside_kiru_end; -#define dgPlayerAnim_link_fighter_Rside_kiru_finsh "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_kiru_finsh" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Rside_kiru_finsh[] = dgPlayerAnim_link_fighter_Rside_kiru_finsh; +#define dgPlayerAnim_link_fighter_Rside_kiru_finsh \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_kiru_finsh" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Rside_kiru_finsh[] = + dgPlayerAnim_link_fighter_Rside_kiru_finsh; -#define dgPlayerAnim_link_fighter_Rside_kiru_finsh_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_kiru_finsh_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Rside_kiru_finsh_end[] = dgPlayerAnim_link_fighter_Rside_kiru_finsh_end; +#define dgPlayerAnim_link_fighter_Rside_kiru_finsh_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_kiru_finsh_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Rside_kiru_finsh_end[] = + dgPlayerAnim_link_fighter_Rside_kiru_finsh_end; #define dgPlayerAnim_link_fighter_Wrolling_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Wrolling_kiru" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Wrolling_kiru[] = dgPlayerAnim_link_fighter_Wrolling_kiru; -#define dgPlayerAnim_link_fighter_Wrolling_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Wrolling_kiru_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Wrolling_kiru_end[] = dgPlayerAnim_link_fighter_Wrolling_kiru_end; +#define dgPlayerAnim_link_fighter_Wrolling_kiru_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_Wrolling_kiru_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_Wrolling_kiru_end[] = + dgPlayerAnim_link_fighter_Wrolling_kiru_end; #define dgPlayerAnim_link_fighter_backturn_jump "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_backturn_jump" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_backturn_jump[] = dgPlayerAnim_link_fighter_backturn_jump; -#define dgPlayerAnim_link_fighter_backturn_jump_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_backturn_jump_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_backturn_jump_endR[] = dgPlayerAnim_link_fighter_backturn_jump_endR; +#define dgPlayerAnim_link_fighter_backturn_jump_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_backturn_jump_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_backturn_jump_endR[] = + dgPlayerAnim_link_fighter_backturn_jump_endR; -#define dgPlayerAnim_link_fighter_backturn_jump_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_backturn_jump_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_backturn_jump_end[] = dgPlayerAnim_link_fighter_backturn_jump_end; +#define dgPlayerAnim_link_fighter_backturn_jump_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_backturn_jump_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_backturn_jump_end[] = + dgPlayerAnim_link_fighter_backturn_jump_end; #define dgPlayerAnim_link_fighter_damage_run "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_damage_run" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_damage_run[] = dgPlayerAnim_link_fighter_damage_run; -#define dgPlayerAnim_link_fighter_damage_run_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_damage_run_long" +#define dgPlayerAnim_link_fighter_damage_run_long \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_damage_run_long" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_damage_run_long[] = dgPlayerAnim_link_fighter_damage_run_long; #define dgPlayerAnim_link_fighter_defense "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_defense" @@ -735,11 +842,15 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_defense[] = dgPlayerAn #define dgPlayerAnim_link_fighter_defense_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_defense_long" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_defense_long[] = dgPlayerAnim_link_fighter_defense_long; -#define dgPlayerAnim_link_fighter_defense_long_hit "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_defense_long_hit" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_defense_long_hit[] = dgPlayerAnim_link_fighter_defense_long_hit; +#define dgPlayerAnim_link_fighter_defense_long_hit \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_defense_long_hit" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_defense_long_hit[] = + dgPlayerAnim_link_fighter_defense_long_hit; -#define dgPlayerAnim_link_fighter_defense_long_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_defense_long_wait" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_defense_long_wait[] = dgPlayerAnim_link_fighter_defense_long_wait; +#define dgPlayerAnim_link_fighter_defense_long_wait \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_defense_long_wait" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_defense_long_wait[] = + dgPlayerAnim_link_fighter_defense_long_wait; #define dgPlayerAnim_link_fighter_defense_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_defense_wait" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_defense_wait[] = dgPlayerAnim_link_fighter_defense_wait; @@ -750,7 +861,8 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_fighter2long[] = dgPla #define dgPlayerAnim_link_fighter_front_jump "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_front_jump" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_front_jump[] = dgPlayerAnim_link_fighter_front_jump; -#define dgPlayerAnim_link_fighter_front_jump_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_front_jump_endR" +#define dgPlayerAnim_link_fighter_front_jump_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_front_jump_endR" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_front_jump_endR[] = dgPlayerAnim_link_fighter_front_jump_endR; #define dgPlayerAnim_link_fighter_front_jump_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_front_jump_end" @@ -762,17 +874,22 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_heavy_run_long[] = dgP #define dgPlayerAnim_link_fighter_jump_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_jump_kiru" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_jump_kiru[] = dgPlayerAnim_link_fighter_jump_kiru; -#define dgPlayerAnim_link_fighter_jump_kiru_finsh "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_jump_kiru_finsh" +#define dgPlayerAnim_link_fighter_jump_kiru_finsh \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_jump_kiru_finsh" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_jump_kiru_finsh[] = dgPlayerAnim_link_fighter_jump_kiru_finsh; -#define dgPlayerAnim_link_fighter_jump_kiru_finsh_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_jump_kiru_finsh_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_jump_kiru_finsh_end[] = dgPlayerAnim_link_fighter_jump_kiru_finsh_end; +#define dgPlayerAnim_link_fighter_jump_kiru_finsh_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_jump_kiru_finsh_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_jump_kiru_finsh_end[] = + dgPlayerAnim_link_fighter_jump_kiru_finsh_end; #define dgPlayerAnim_link_fighter_jump_rollkiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_jump_rollkiru" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_jump_rollkiru[] = dgPlayerAnim_link_fighter_jump_rollkiru; -#define dgPlayerAnim_link_fighter_landing_roll_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_landing_roll_long" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_landing_roll_long[] = dgPlayerAnim_link_fighter_landing_roll_long; +#define dgPlayerAnim_link_fighter_landing_roll_long \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_landing_roll_long" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_landing_roll_long[] = + dgPlayerAnim_link_fighter_landing_roll_long; #define dgPlayerAnim_link_fighter_normal2fighter "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_normal2fighter" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_normal2fighter[] = dgPlayerAnim_link_fighter_normal2fighter; @@ -783,52 +900,76 @@ static const ALIGN_ASSET(2) char gPlayerAnim_002A78[] = dgPlayerAnim_002A78; #define dgPlayerAnim_link_fighter_normal_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_normal_kiru[] = dgPlayerAnim_link_fighter_normal_kiru; -#define dgPlayerAnim_link_fighter_normal_kiru_endR "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru_endR" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_normal_kiru_endR[] = dgPlayerAnim_link_fighter_normal_kiru_endR; +#define dgPlayerAnim_link_fighter_normal_kiru_endR \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru_endR" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_normal_kiru_endR[] = + dgPlayerAnim_link_fighter_normal_kiru_endR; -#define dgPlayerAnim_link_fighter_normal_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru_end" +#define dgPlayerAnim_link_fighter_normal_kiru_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru_end" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_normal_kiru_end[] = dgPlayerAnim_link_fighter_normal_kiru_end; -#define dgPlayerAnim_link_fighter_normal_kiru_finsh "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru_finsh" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_normal_kiru_finsh[] = dgPlayerAnim_link_fighter_normal_kiru_finsh; +#define dgPlayerAnim_link_fighter_normal_kiru_finsh \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru_finsh" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_normal_kiru_finsh[] = + dgPlayerAnim_link_fighter_normal_kiru_finsh; -#define dgPlayerAnim_link_fighter_normal_kiru_finsh_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru_finsh_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_normal_kiru_finsh_end[] = dgPlayerAnim_link_fighter_normal_kiru_finsh_end; +#define dgPlayerAnim_link_fighter_normal_kiru_finsh_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru_finsh_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_normal_kiru_finsh_end[] = + dgPlayerAnim_link_fighter_normal_kiru_finsh_end; #define dgPlayerAnim_link_fighter_pierce_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_pierce_kiru" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_pierce_kiru[] = dgPlayerAnim_link_fighter_pierce_kiru; -#define dgPlayerAnim_link_fighter_pierce_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_pierce_kiru_end" +#define dgPlayerAnim_link_fighter_pierce_kiru_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_pierce_kiru_end" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_pierce_kiru_end[] = dgPlayerAnim_link_fighter_pierce_kiru_end; -#define dgPlayerAnim_link_fighter_pierce_kiru_finsh "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_pierce_kiru_finsh" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_pierce_kiru_finsh[] = dgPlayerAnim_link_fighter_pierce_kiru_finsh; +#define dgPlayerAnim_link_fighter_pierce_kiru_finsh \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_pierce_kiru_finsh" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_pierce_kiru_finsh[] = + dgPlayerAnim_link_fighter_pierce_kiru_finsh; -#define dgPlayerAnim_link_fighter_pierce_kiru_finsh_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_pierce_kiru_finsh_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_pierce_kiru_finsh_end[] = dgPlayerAnim_link_fighter_pierce_kiru_finsh_end; +#define dgPlayerAnim_link_fighter_pierce_kiru_finsh_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_pierce_kiru_finsh_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_pierce_kiru_finsh_end[] = + dgPlayerAnim_link_fighter_pierce_kiru_finsh_end; -#define dgPlayerAnim_link_fighter_power_jump_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_jump_kiru_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_power_jump_kiru_end[] = dgPlayerAnim_link_fighter_power_jump_kiru_end; +#define dgPlayerAnim_link_fighter_power_jump_kiru_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_jump_kiru_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_power_jump_kiru_end[] = + dgPlayerAnim_link_fighter_power_jump_kiru_end; #define dgPlayerAnim_002AD0 "__OTR__objects/gameplay_keep/gPlayerAnim_002AD0" static const ALIGN_ASSET(2) char gPlayerAnim_002AD0[] = dgPlayerAnim_002AD0; -#define dgPlayerAnim_link_fighter_power_kiru_side_walk "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_side_walk" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_power_kiru_side_walk[] = dgPlayerAnim_link_fighter_power_kiru_side_walk; +#define dgPlayerAnim_link_fighter_power_kiru_side_walk \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_side_walk" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_power_kiru_side_walk[] = + dgPlayerAnim_link_fighter_power_kiru_side_walk; -#define dgPlayerAnim_link_fighter_power_kiru_startL "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_startL" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_power_kiru_startL[] = dgPlayerAnim_link_fighter_power_kiru_startL; +#define dgPlayerAnim_link_fighter_power_kiru_startL \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_startL" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_power_kiru_startL[] = + dgPlayerAnim_link_fighter_power_kiru_startL; -#define dgPlayerAnim_link_fighter_power_kiru_start "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_start" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_power_kiru_start[] = dgPlayerAnim_link_fighter_power_kiru_start; +#define dgPlayerAnim_link_fighter_power_kiru_start \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_start" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_power_kiru_start[] = + dgPlayerAnim_link_fighter_power_kiru_start; -#define dgPlayerAnim_link_fighter_power_kiru_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_wait" +#define dgPlayerAnim_link_fighter_power_kiru_wait \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_wait" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_power_kiru_wait[] = dgPlayerAnim_link_fighter_power_kiru_wait; -#define dgPlayerAnim_link_fighter_power_kiru_wait_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_wait_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_power_kiru_wait_end[] = dgPlayerAnim_link_fighter_power_kiru_wait_end; +#define dgPlayerAnim_link_fighter_power_kiru_wait_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_wait_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_power_kiru_wait_end[] = + dgPlayerAnim_link_fighter_power_kiru_wait_end; -#define dgPlayerAnim_link_fighter_power_kiru_walk "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_walk" +#define dgPlayerAnim_link_fighter_power_kiru_walk \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_walk" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_power_kiru_walk[] = dgPlayerAnim_link_fighter_power_kiru_walk; #define dgPlayerAnim_link_fighter_reboundR "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_reboundR" @@ -846,8 +987,10 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_rebound_long[] = dgPla #define dgPlayerAnim_link_fighter_rolling_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_rolling_kiru" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_rolling_kiru[] = dgPlayerAnim_link_fighter_rolling_kiru; -#define dgPlayerAnim_link_fighter_rolling_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_rolling_kiru_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_rolling_kiru_end[] = dgPlayerAnim_link_fighter_rolling_kiru_end; +#define dgPlayerAnim_link_fighter_rolling_kiru_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_rolling_kiru_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_rolling_kiru_end[] = + dgPlayerAnim_link_fighter_rolling_kiru_end; #define dgPlayerAnim_link_fighter_run "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_run" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_run[] = dgPlayerAnim_link_fighter_run; @@ -861,10 +1004,12 @@ static const ALIGN_ASSET(2) char gPlayerAnim_002B48[] = dgPlayerAnim_002B48; #define dgPlayerAnim_002B50 "__OTR__objects/gameplay_keep/gPlayerAnim_002B50" static const ALIGN_ASSET(2) char gPlayerAnim_002B50[] = dgPlayerAnim_002B50; -#define dgPlayerAnim_link_fighter_side_walkL_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_side_walkL_long" +#define dgPlayerAnim_link_fighter_side_walkL_long \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_side_walkL_long" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_side_walkL_long[] = dgPlayerAnim_link_fighter_side_walkL_long; -#define dgPlayerAnim_link_fighter_side_walkR_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_side_walkR_long" +#define dgPlayerAnim_link_fighter_side_walkR_long \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_side_walkR_long" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_side_walkR_long[] = dgPlayerAnim_link_fighter_side_walkR_long; #define dgPlayerAnim_link_fighter_side_walk_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_side_walk_long" @@ -885,25 +1030,33 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_turn_kiruR_end[] = dgP #define dgPlayerAnim_link_fighter_upper_kiruR "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_upper_kiruR" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_upper_kiruR[] = dgPlayerAnim_link_fighter_upper_kiruR; -#define dgPlayerAnim_link_fighter_upper_pierce_kiru "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_upper_pierce_kiru" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_upper_pierce_kiru[] = dgPlayerAnim_link_fighter_upper_pierce_kiru; +#define dgPlayerAnim_link_fighter_upper_pierce_kiru \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_upper_pierce_kiru" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_upper_pierce_kiru[] = + dgPlayerAnim_link_fighter_upper_pierce_kiru; -#define dgPlayerAnim_link_fighter_upper_pierce_kiru_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_upper_pierce_kiru_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_upper_pierce_kiru_end[] = dgPlayerAnim_link_fighter_upper_pierce_kiru_end; +#define dgPlayerAnim_link_fighter_upper_pierce_kiru_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_upper_pierce_kiru_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_upper_pierce_kiru_end[] = + dgPlayerAnim_link_fighter_upper_pierce_kiru_end; -#define dgPlayerAnim_link_fighter_wait2waitL_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_wait2waitL_long" +#define dgPlayerAnim_link_fighter_wait2waitL_long \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_wait2waitL_long" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_wait2waitL_long[] = dgPlayerAnim_link_fighter_wait2waitL_long; -#define dgPlayerAnim_link_fighter_wait2waitR_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_wait2waitR_long" +#define dgPlayerAnim_link_fighter_wait2waitR_long \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_wait2waitR_long" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_wait2waitR_long[] = dgPlayerAnim_link_fighter_wait2waitR_long; -#define dgPlayerAnim_link_fighter_waitL2wait_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_waitL2wait_long" +#define dgPlayerAnim_link_fighter_waitL2wait_long \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_waitL2wait_long" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_waitL2wait_long[] = dgPlayerAnim_link_fighter_waitL2wait_long; #define dgPlayerAnim_link_fighter_waitL_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_waitL_long" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_waitL_long[] = dgPlayerAnim_link_fighter_waitL_long; -#define dgPlayerAnim_link_fighter_waitR2wait_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_waitR2wait_long" +#define dgPlayerAnim_link_fighter_waitR2wait_long \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_waitR2wait_long" static const ALIGN_ASSET(2) char gPlayerAnim_link_fighter_waitR2wait_long[] = dgPlayerAnim_link_fighter_waitR2wait_long; #define dgPlayerAnim_link_fighter_waitR_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_fighter_waitR_long" @@ -1182,7 +1335,8 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_defense[] = dgPlayerAni #define dgPlayerAnim_link_normal_defense_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_defense_end" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_defense_end[] = dgPlayerAnim_link_normal_defense_end; -#define dgPlayerAnim_link_normal_defense_end_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_defense_end_free" +#define dgPlayerAnim_link_normal_defense_end_free \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_defense_end_free" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_defense_end_free[] = dgPlayerAnim_link_normal_defense_end_free; #define dgPlayerAnim_link_normal_defense_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_defense_free" @@ -1197,26 +1351,36 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_defense_kiru[] = dgPlay #define dgPlayerAnim_link_normal_defense_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_defense_wait" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_defense_wait[] = dgPlayerAnim_link_normal_defense_wait; -#define dgPlayerAnim_link_normal_defense_wait_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_defense_wait_free" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_defense_wait_free[] = dgPlayerAnim_link_normal_defense_wait_free; +#define dgPlayerAnim_link_normal_defense_wait_free \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_defense_wait_free" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_defense_wait_free[] = + dgPlayerAnim_link_normal_defense_wait_free; #define dgPlayerAnim_link_normal_down_slope_slip "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_down_slope_slip" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_down_slope_slip[] = dgPlayerAnim_link_normal_down_slope_slip; -#define dgPlayerAnim_link_normal_down_slope_slip_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_down_slope_slip_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_down_slope_slip_end[] = dgPlayerAnim_link_normal_down_slope_slip_end; +#define dgPlayerAnim_link_normal_down_slope_slip_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_down_slope_slip_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_down_slope_slip_end[] = + dgPlayerAnim_link_normal_down_slope_slip_end; -#define dgPlayerAnim_link_normal_down_slope_slip_end_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_down_slope_slip_end_free" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_down_slope_slip_end_free[] = dgPlayerAnim_link_normal_down_slope_slip_end_free; +#define dgPlayerAnim_link_normal_down_slope_slip_end_free \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_down_slope_slip_end_free" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_down_slope_slip_end_free[] = + dgPlayerAnim_link_normal_down_slope_slip_end_free; -#define dgPlayerAnim_link_normal_down_slope_slip_end_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_down_slope_slip_end_long" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_down_slope_slip_end_long[] = dgPlayerAnim_link_normal_down_slope_slip_end_long; +#define dgPlayerAnim_link_normal_down_slope_slip_end_long \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_down_slope_slip_end_long" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_down_slope_slip_end_long[] = + dgPlayerAnim_link_normal_down_slope_slip_end_long; #define dgPlayerAnim_link_normal_electric_shock "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_electric_shock" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_electric_shock[] = dgPlayerAnim_link_normal_electric_shock; -#define dgPlayerAnim_link_normal_electric_shock_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_electric_shock_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_electric_shock_end[] = dgPlayerAnim_link_normal_electric_shock_end; +#define dgPlayerAnim_link_normal_electric_shock_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_electric_shock_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_electric_shock_end[] = + dgPlayerAnim_link_normal_electric_shock_end; #define dgPlayerAnim_link_normal_fall "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_fall" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_fall[] = dgPlayerAnim_link_normal_fall; @@ -1236,8 +1400,10 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_fighter2free[] = dgPlay #define dgPlayerAnim_link_normal_free2bom "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_free2bom" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_free2bom[] = dgPlayerAnim_link_normal_free2bom; -#define dgPlayerAnim_link_normal_free2fighter_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_free2fighter_free" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_free2fighter_free[] = dgPlayerAnim_link_normal_free2fighter_free; +#define dgPlayerAnim_link_normal_free2fighter_free \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_free2fighter_free" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_free2fighter_free[] = + dgPlayerAnim_link_normal_free2fighter_free; #define dgPlayerAnim_link_normal_free2freeB "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_free2freeB" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_free2freeB[] = dgPlayerAnim_link_normal_free2freeB; @@ -1302,20 +1468,26 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_jump[] = dgPlayerAnim_l #define dgPlayerAnim_link_normal_jump_climb_hold "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_hold" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_jump_climb_hold[] = dgPlayerAnim_link_normal_jump_climb_hold; -#define dgPlayerAnim_link_normal_jump_climb_hold_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_hold_free" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_jump_climb_hold_free[] = dgPlayerAnim_link_normal_jump_climb_hold_free; +#define dgPlayerAnim_link_normal_jump_climb_hold_free \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_hold_free" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_jump_climb_hold_free[] = + dgPlayerAnim_link_normal_jump_climb_hold_free; #define dgPlayerAnim_link_normal_jump_climb_up "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_up" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_jump_climb_up[] = dgPlayerAnim_link_normal_jump_climb_up; -#define dgPlayerAnim_link_normal_jump_climb_up_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_up_free" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_jump_climb_up_free[] = dgPlayerAnim_link_normal_jump_climb_up_free; +#define dgPlayerAnim_link_normal_jump_climb_up_free \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_up_free" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_jump_climb_up_free[] = + dgPlayerAnim_link_normal_jump_climb_up_free; #define dgPlayerAnim_link_normal_jump_climb_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_wait" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_jump_climb_wait[] = dgPlayerAnim_link_normal_jump_climb_wait; -#define dgPlayerAnim_link_normal_jump_climb_wait_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_wait_free" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_jump_climb_wait_free[] = dgPlayerAnim_link_normal_jump_climb_wait_free; +#define dgPlayerAnim_link_normal_jump_climb_wait_free \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_wait_free" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_jump_climb_wait_free[] = + dgPlayerAnim_link_normal_jump_climb_wait_free; #define dgPlayerAnim_link_normal_jump_up "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_jump_up" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_jump_up[] = dgPlayerAnim_link_normal_jump_up; @@ -1329,8 +1501,10 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_landing_free[] = dgPlay #define dgPlayerAnim_link_normal_landing_roll "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_landing_roll" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_landing_roll[] = dgPlayerAnim_link_normal_landing_roll; -#define dgPlayerAnim_link_normal_landing_roll_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_landing_roll_free" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_landing_roll_free[] = dgPlayerAnim_link_normal_landing_roll_free; +#define dgPlayerAnim_link_normal_landing_roll_free \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_landing_roll_free" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_landing_roll_free[] = + dgPlayerAnim_link_normal_landing_roll_free; #define dgPlayerAnim_link_normal_landing_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_landing_wait" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_landing_wait[] = dgPlayerAnim_link_normal_landing_wait; @@ -1347,11 +1521,14 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_long2bom[] = dgPlayerAn #define dgPlayerAnim_link_normal_nocarry_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_nocarry_free" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_nocarry_free[] = dgPlayerAnim_link_normal_nocarry_free; -#define dgPlayerAnim_link_normal_nocarry_free_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_nocarry_free_end" +#define dgPlayerAnim_link_normal_nocarry_free_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_nocarry_free_end" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_nocarry_free_end[] = dgPlayerAnim_link_normal_nocarry_free_end; -#define dgPlayerAnim_link_normal_nocarry_free_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_nocarry_free_wait" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_nocarry_free_wait[] = dgPlayerAnim_link_normal_nocarry_free_wait; +#define dgPlayerAnim_link_normal_nocarry_free_wait \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_nocarry_free_wait" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_nocarry_free_wait[] = + dgPlayerAnim_link_normal_nocarry_free_wait; #define dgPlayerAnim_link_normal_normal2bom "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_normal2bom" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_normal2bom[] = dgPlayerAnim_link_normal_normal2bom; @@ -1359,8 +1536,10 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_normal2bom[] = dgPlayer #define dgPlayerAnim_link_normal_normal2fighter "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_normal2fighter" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_normal2fighter[] = dgPlayerAnim_link_normal_normal2fighter; -#define dgPlayerAnim_link_normal_normal2fighter_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_normal2fighter_free" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_normal2fighter_free[] = dgPlayerAnim_link_normal_normal2fighter_free; +#define dgPlayerAnim_link_normal_normal2fighter_free \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_normal2fighter_free" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_normal2fighter_free[] = + dgPlayerAnim_link_normal_normal2fighter_free; #define dgPlayerAnim_link_normal_normal2free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_normal2free" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_normal2free[] = dgPlayerAnim_link_normal_normal2free; @@ -1419,8 +1598,10 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_put_free[] = dgPlayerAn #define dgPlayerAnim_link_normal_re_dead_attack "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_re_dead_attack" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_re_dead_attack[] = dgPlayerAnim_link_normal_re_dead_attack; -#define dgPlayerAnim_link_normal_re_dead_attack_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_re_dead_attack_wait" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_re_dead_attack_wait[] = dgPlayerAnim_link_normal_re_dead_attack_wait; +#define dgPlayerAnim_link_normal_re_dead_attack_wait \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_re_dead_attack_wait" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_re_dead_attack_wait[] = + dgPlayerAnim_link_normal_re_dead_attack_wait; #define dgPlayerAnim_link_normal_rebound "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_rebound" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_rebound[] = dgPlayerAnim_link_normal_rebound; @@ -1437,17 +1618,23 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_run_jump[] = dgPlayerAn #define dgPlayerAnim_link_normal_run_jump_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_run_jump_end" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_run_jump_end[] = dgPlayerAnim_link_normal_run_jump_end; -#define dgPlayerAnim_link_normal_run_jump_water_fall "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_run_jump_water_fall" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_run_jump_water_fall[] = dgPlayerAnim_link_normal_run_jump_water_fall; +#define dgPlayerAnim_link_normal_run_jump_water_fall \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_run_jump_water_fall" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_run_jump_water_fall[] = + dgPlayerAnim_link_normal_run_jump_water_fall; -#define dgPlayerAnim_link_normal_run_jump_water_fall_wait "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_run_jump_water_fall_wait" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_run_jump_water_fall_wait[] = dgPlayerAnim_link_normal_run_jump_water_fall_wait; +#define dgPlayerAnim_link_normal_run_jump_water_fall_wait \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_run_jump_water_fall_wait" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_run_jump_water_fall_wait[] = + dgPlayerAnim_link_normal_run_jump_water_fall_wait; #define dgPlayerAnim_link_normal_short_landing "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_short_landing" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_short_landing[] = dgPlayerAnim_link_normal_short_landing; -#define dgPlayerAnim_link_normal_short_landing_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_short_landing_free" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_short_landing_free[] = dgPlayerAnim_link_normal_short_landing_free; +#define dgPlayerAnim_link_normal_short_landing_free \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_short_landing_free" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_short_landing_free[] = + dgPlayerAnim_link_normal_short_landing_free; #define dgPlayerAnim_link_normal_side_walkL_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_side_walkL_free" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_side_walkL_free[] = dgPlayerAnim_link_normal_side_walkL_free; @@ -1485,14 +1672,20 @@ static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_throw_free[] = dgPlayer #define dgPlayerAnim_link_normal_up_slope_slip "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_up_slope_slip" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_up_slope_slip[] = dgPlayerAnim_link_normal_up_slope_slip; -#define dgPlayerAnim_link_normal_up_slope_slip_end "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_up_slope_slip_end" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_up_slope_slip_end[] = dgPlayerAnim_link_normal_up_slope_slip_end; +#define dgPlayerAnim_link_normal_up_slope_slip_end \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_up_slope_slip_end" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_up_slope_slip_end[] = + dgPlayerAnim_link_normal_up_slope_slip_end; -#define dgPlayerAnim_link_normal_up_slope_slip_end_free "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_up_slope_slip_end_free" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_up_slope_slip_end_free[] = dgPlayerAnim_link_normal_up_slope_slip_end_free; +#define dgPlayerAnim_link_normal_up_slope_slip_end_free \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_up_slope_slip_end_free" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_up_slope_slip_end_free[] = + dgPlayerAnim_link_normal_up_slope_slip_end_free; -#define dgPlayerAnim_link_normal_up_slope_slip_end_long "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_up_slope_slip_end_long" -static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_up_slope_slip_end_long[] = dgPlayerAnim_link_normal_up_slope_slip_end_long; +#define dgPlayerAnim_link_normal_up_slope_slip_end_long \ + "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_up_slope_slip_end_long" +static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_up_slope_slip_end_long[] = + dgPlayerAnim_link_normal_up_slope_slip_end_long; #define dgPlayerAnim_link_normal_wait2waitL "__OTR__objects/gameplay_keep/gPlayerAnim_link_normal_wait2waitL" static const ALIGN_ASSET(2) char gPlayerAnim_link_normal_wait2waitL[] = dgPlayerAnim_link_normal_wait2waitL; @@ -2850,5 +3043,8 @@ static const ALIGN_ASSET(2) char gFishSkelLimbsLimb_018FB0DL_018950[] = dgFishSk #define dgFishSkelLimbsLimb_018FBCDL_0188B0 "__OTR__objects/gameplay_keep/gFishSkelLimbsLimb_018FBCDL_0188B0" static const ALIGN_ASSET(2) char gFishSkelLimbsLimb_018FBCDL_0188B0[] = dgFishSkelLimbsLimb_018FBCDL_0188B0; +// CUSTOM +#define dgGliderDL "__OTR__customitems/glider/gGliderDL" +static const ALIGN_ASSET(2) char gGliderDL[] = dgGliderDL; #endif // OBJECTS_GAMEPLAY_KEEP_H diff --git a/soh/assets/textures/icon_item_static/icon_item_static.h b/soh/assets/textures/icon_item_static/icon_item_static.h index c32305859..826ca3c1b 100644 --- a/soh/assets/textures/icon_item_static/icon_item_static.h +++ b/soh/assets/textures/icon_item_static/icon_item_static.h @@ -561,4 +561,8 @@ static const ALIGN_ASSET(2) char gPromptCursorLeftDL[] = dgPromptCursorLeftDL; #define dgPromptCursorRightDL "__OTR__textures/icon_item_static/gPromptCursorRightDL" static const ALIGN_ASSET(2) char gPromptCursorRightDL[] = dgPromptCursorRightDL; +// CUSTOM +#define dgGliderIconTex "__OTR__customitems/icon_item_static/gGliderIconTex" +static const ALIGN_ASSET(2) char gGliderIconTex[] = dgGliderIconTex; + #endif // TEXTURES_ICON_ITEM_STATIC_H diff --git a/soh/assets/textures/item_name_static/item_name_static.h b/soh/assets/textures/item_name_static/item_name_static.h index 86af0cab0..4b1c11be5 100644 --- a/soh/assets/textures/item_name_static/item_name_static.h +++ b/soh/assets/textures/item_name_static/item_name_static.h @@ -1110,4 +1110,8 @@ static const ALIGN_ASSET(2) char gUnusedBossKeyItemName21JPNTex[] = dgUnusedBoss #define dgBiggoronsSwordItemNameFRATex "__OTR__textures/item_name_static/gBiggoronsSwordItemNameFRATex" static const ALIGN_ASSET(2) char gBiggoronsSwordItemNameFRATex[] = dgBiggoronsSwordItemNameFRATex; +// CUSTOM +#define dgGliderItemNameENGTex "__OTR__customitems/item_name_static/gGliderItemNameENGTex" +static const ALIGN_ASSET(2) char gGliderItemNameENGTex[] = dgGliderItemNameENGTex; + #endif // TEXTURES_ITEM_NAME_STATIC_H diff --git a/soh/include/tables/actor_table.h b/soh/include/tables/actor_table.h index d05085f4d..7a3eab488 100644 --- a/soh/include/tables/actor_table.h +++ b/soh/include/tables/actor_table.h @@ -480,4 +480,7 @@ /* 0x01D3 */ DEFINE_ACTOR(En_Zl4, ACTOR_EN_ZL4, ALLOCTYPE_NORMAL) /* 0x01D4 */ DEFINE_ACTOR(En_Mm2, ACTOR_EN_MM2, ALLOCTYPE_NORMAL) /* 0x01D5 */ DEFINE_ACTOR(Bg_Jya_Block, ACTOR_BG_JYA_BLOCK, ALLOCTYPE_NORMAL) -/* 0x01D6 */ DEFINE_ACTOR(Obj_Warp2block, ACTOR_OBJ_WARP2BLOCK, ALLOCTYPE_NORMAL) \ No newline at end of file +/* 0x01D6 */ DEFINE_ACTOR(Obj_Warp2block, ACTOR_OBJ_WARP2BLOCK, ALLOCTYPE_NORMAL) + +// CUSTOM +/* 0x0019 */ DEFINE_ACTOR(En_Glider, ACTOR_EN_GLIDER, ALLOCTYPE_NORMAL) \ No newline at end of file diff --git a/soh/include/tables/object_table.h b/soh/include/tables/object_table.h index 97e6aa255..ecf40e14e 100644 --- a/soh/include/tables/object_table.h +++ b/soh/include/tables/object_table.h @@ -409,3 +409,6 @@ /* 0x018F */ DEFINE_OBJECT(object_ouke_haka, OBJECT_OUKE_HAKA) /* 0x0190 */ DEFINE_OBJECT(object_timeblock, OBJECT_TIMEBLOCK) /* 0x0191 */ DEFINE_OBJECT(object_zl4, OBJECT_ZL4) + +// CUSTOM +/* 0x0192 */ DEFINE_OBJECT(object_glider, OBJECT_GLIDER) \ No newline at end of file diff --git a/soh/include/variables.h b/soh/include/variables.h index 27ad4584d..5625a7455 100644 --- a/soh/include/variables.h +++ b/soh/include/variables.h @@ -5,249 +5,248 @@ #include "segment_symbols.h" #ifdef __cplusplus -extern "C" -{ +extern "C" { #endif - extern u32 osTvType; - extern u32 osRomBase; - extern u32 osResetType; - extern u32 osMemSize; - extern u8 osAppNmiBuffer[0x40]; +extern u32 osTvType; +extern u32 osRomBase; +extern u32 osResetType; +extern u32 osMemSize; +extern u8 osAppNmiBuffer[0x40]; - extern u8 D_80009320[]; - extern u8 D_800093F0[]; - extern s8 D_80009430; - extern u32 D_80009460; - extern u32 gDmaMgrDmaBuffSize; - extern vu8 gViConfigUseDefault; - extern u8 gViConfigAdditionalScanLines; - extern u32 gViConfigFeatures; - extern f32 gViConfigXScale; - extern f32 gViConfigYScale; - extern OSPiHandle* gCartHandle; - extern u32 __osPiAccessQueueEnabled; - extern OSViMode osViModePalLan1; - extern s32 osViClock; - extern u32 __osShutdown; - extern OSHWIntr __OSGlobalIntMask; - extern OSThread* __osThreadTail[]; - extern OSThread* __osRunQueue; - extern OSThread* __osActiveQueue; - extern OSThread* __osRunningThread; - extern OSThread* __osFaultedThread; - extern OSPiHandle* __osPiTable; - extern OSPiHandle* __osCurrentHandle[]; - extern OSTimer* __osTimerList; - extern OSViMode osViModeNtscLan1; - extern OSViMode osViModeMpalLan1; - extern OSViContext* __osViCurr; - extern OSViContext* __osViNext; - extern OSViMode osViModeFpalLan1; - extern u32 __additional_scanline; - extern const char gBuildVersion[]; - extern u16 gBuildVersionMajor; - extern u16 gBuildVersionMinor; - extern u16 gBuildVersionPatch; - extern const char gGitBranch[]; - extern const char gGitCommitHash[]; - extern u8 gGitCommitTag[]; - extern u8 gBuildTeam[]; - extern u8 gBuildDate[]; - extern u8 gBuildMakeOption[]; - extern OSMesgQueue gPiMgrCmdQ; - extern OSViMode gViConfigMode; - extern u8 D_80013960; - extern OSMesgQueue __osPiAccessQueue; - extern OSPiHandle __Dom1SpeedParam; - extern OSPiHandle __Dom2SpeedParam; - extern OSTime __osCurrentTime; - extern u32 __osBaseCounter; - extern u32 __osViIntrCount; - extern u32 __osTimerCounter; - extern DmaEntry gDmaDataTable[0x60C]; - extern u64 D_801120C0[]; - extern u8 D_80113070[]; - extern u64 gJpegUCode[]; - extern EffectSsOverlay gEffectSsOverlayTable[EFFECT_SS_TYPE_MAX]; - extern Gfx D_80116280[]; - extern s32 gDbgCamEnabled; - extern GameStateOverlay gGameStateOverlayTable[6]; - extern u8 gWeatherMode; - extern u8 D_8011FB34; - extern u8 D_8011FB38; - extern u8 gSkyboxBlendingEnabled; - extern u16 gTimeIncrement; - extern struct_8011FC1C D_8011FC1C[][9]; - extern SkyboxFile gSkyboxFiles[]; - extern s32 gZeldaArenaLogSeverity; - extern MapData gMapDataTable; - extern s16 gSpoilingItems[3]; - extern s16 gSpoilingItemReverts[3]; - extern FlexSkeletonHeader* gPlayerSkelHeaders[2]; - extern u8 gPlayerModelTypes[PLAYER_MODELGROUP_MAX][PLAYER_MODELGROUPENTRY_MAX]; - extern Gfx* gPlayerLeftHandBgsDLs[]; - extern Gfx* gPlayerLeftHandOpenDLs[]; - extern Gfx* gPlayerLeftHandClosedDLs[]; - extern Gfx* gPlayerLeftHandBoomerangDLs[]; - extern Gfx gCullBackDList[]; - extern Gfx gCullFrontDList[]; - extern Gfx gEmptyDL[]; - extern u32 gBitFlags[32]; - extern u16 gEquipMasks[4]; - extern u16 gEquipNegMasks[4]; - extern u32 gUpgradeMasks[8]; - extern u32 gUpgradeNegMasks[8]; - extern u8 gEquipShifts[4]; - extern u8 gUpgradeShifts[8]; - extern u16 gUpgradeCapacities[8][4]; - extern u32 gGsFlagsMasks[4]; - extern u32 gGsFlagsShifts[4]; - extern void* gItemIcons[0x82]; - extern u8 gItemAgeReqs[]; - extern u8 gSlotAgeReqs[]; - extern u8 gItemSlots[56]; - extern void (*gSceneCmdHandlers[SCENE_CMD_ID_MAX])(PlayState*, SceneCmd*); - extern s16 gLinkObjectIds[2]; - extern u32 gObjectTableSize; - extern RomFile gObjectTable[OBJECT_ID_MAX]; - extern EntranceInfo gEntranceTable[ENTR_MAX]; - extern SceneTableEntry gSceneTable[SCENE_ID_MAX]; - extern u16 gSramSlotOffsets[]; - // 4 16-colors palettes - extern u64 gMojiFontTLUTs[4][4]; // original name: "moji_tlut" - extern u64 gMojiFontTex[]; // original name: "font_ff" - extern KaleidoMgrOverlay gKaleidoMgrOverlayTable[KALEIDO_OVL_MAX]; - extern KaleidoMgrOverlay* gKaleidoMgrCurOvl; - extern u8 gBossMarkState; - extern void* gDebugCutsceneScript; - extern s32 gScreenWidth; - extern s32 gScreenHeight; - extern Mtx gMtxClear; - extern MtxF gMtxFClear; - extern u32 gIsCtrlr2Valid; - extern vu32 gIrqMgrResetStatus; - extern volatile OSTime gIrqMgrRetraceTime; - extern s16* gWaveSamples[9]; - extern f32 gBendPitchOneOctaveFrequencies[256]; - extern f32 gBendPitchTwoSemitonesFrequencies[256]; - extern f32 gNoteFrequencies[]; - extern u8 gDefaultShortNoteVelocityTable[16]; - extern u8 gDefaultShortNoteGateTimeTable[16]; - extern AdsrEnvelope gDefaultEnvelope[4]; - extern NoteSubEu gZeroNoteSub; - extern NoteSubEu gDefaultNoteSub; - extern u16 gHeadsetPanQuantization[64]; - extern s16 D_8012FBA8[]; - extern f32 gHeadsetPanVolume[128]; - extern f32 gStereoPanVolume[128]; - extern f32 gDefaultPanVolume[128]; - extern s16 sLowPassFilterData[16 * 8]; - extern s16 sHighPassFilterData[15 * 8]; - extern s32 gAudioContextInitalized; - extern u8 gIsLargeSoundBank[7]; - extern u8 gChannelsPerBank[4][7]; - extern u8 gUsedChannelsPerBank[4][7]; - extern u8 gMorphaTransposeTable[16]; - extern u8* gFrogsSongPtr; - extern OcarinaNote* gScarecrowCustomSongPtr; - extern u8* gScarecrowSpawnSongPtr; - extern OcarinaSongInfo gOcarinaSongNotes[]; - extern SoundParams* gSoundParams[7]; - extern char D_80133390[]; - extern char D_80133398[]; - extern SoundBankEntry* gSoundBanks[7]; - extern u8 gSfxChannelLayout; - extern Vec3f gSfxDefaultPos; - extern f32 gSfxDefaultFreqAndVolScale; - extern s8 gSfxDefaultReverb; - extern u8 D_801333F0; - extern u8 gAudioSfxSwapOff; - extern u8 D_80133408; - extern u8 D_8013340C; - extern u8 gAudioSpecId; - extern u8 D_80133418; - extern AudioSpec gAudioSpecs[18]; - extern s32 gOverlayLogSeverity; - extern s32 gSystemArenaLogSeverity; - extern u8 __osPfsInodeCacheBank; - extern s32 __osPfsLastChannel; - extern u8 gWalkSpeedToggle1; - extern u8 gWalkSpeedToggle2; - extern f32 iceTrapScale; - extern f32 triforcePieceScale; - extern f32 mysteryItemScale; - - extern const s16 D_8014A6C0[]; +extern u8 D_80009320[]; +extern u8 D_800093F0[]; +extern s8 D_80009430; +extern u32 D_80009460; +extern u32 gDmaMgrDmaBuffSize; +extern vu8 gViConfigUseDefault; +extern u8 gViConfigAdditionalScanLines; +extern u32 gViConfigFeatures; +extern f32 gViConfigXScale; +extern f32 gViConfigYScale; +extern OSPiHandle* gCartHandle; +extern u32 __osPiAccessQueueEnabled; +extern OSViMode osViModePalLan1; +extern s32 osViClock; +extern u32 __osShutdown; +extern OSHWIntr __OSGlobalIntMask; +extern OSThread* __osThreadTail[]; +extern OSThread* __osRunQueue; +extern OSThread* __osActiveQueue; +extern OSThread* __osRunningThread; +extern OSThread* __osFaultedThread; +extern OSPiHandle* __osPiTable; +extern OSPiHandle* __osCurrentHandle[]; +extern OSTimer* __osTimerList; +extern OSViMode osViModeNtscLan1; +extern OSViMode osViModeMpalLan1; +extern OSViContext* __osViCurr; +extern OSViContext* __osViNext; +extern OSViMode osViModeFpalLan1; +extern u32 __additional_scanline; +extern const char gBuildVersion[]; +extern u16 gBuildVersionMajor; +extern u16 gBuildVersionMinor; +extern u16 gBuildVersionPatch; +extern const char gGitBranch[]; +extern const char gGitCommitHash[]; +extern u8 gGitCommitTag[]; +extern u8 gBuildTeam[]; +extern u8 gBuildDate[]; +extern u8 gBuildMakeOption[]; +extern OSMesgQueue gPiMgrCmdQ; +extern OSViMode gViConfigMode; +extern u8 D_80013960; +extern OSMesgQueue __osPiAccessQueue; +extern OSPiHandle __Dom1SpeedParam; +extern OSPiHandle __Dom2SpeedParam; +extern OSTime __osCurrentTime; +extern u32 __osBaseCounter; +extern u32 __osViIntrCount; +extern u32 __osTimerCounter; +extern DmaEntry gDmaDataTable[0x60C]; +extern u64 D_801120C0[]; +extern u8 D_80113070[]; +extern u64 gJpegUCode[]; +extern EffectSsOverlay gEffectSsOverlayTable[EFFECT_SS_TYPE_MAX]; +extern Gfx D_80116280[]; +extern s32 gDbgCamEnabled; +extern GameStateOverlay gGameStateOverlayTable[6]; +extern u8 gWeatherMode; +extern u8 D_8011FB34; +extern u8 D_8011FB38; +extern u8 gSkyboxBlendingEnabled; +extern u16 gTimeIncrement; +extern struct_8011FC1C D_8011FC1C[][9]; +extern SkyboxFile gSkyboxFiles[]; +extern s32 gZeldaArenaLogSeverity; +extern MapData gMapDataTable; +extern s16 gSpoilingItems[3]; +extern s16 gSpoilingItemReverts[3]; +extern FlexSkeletonHeader* gPlayerSkelHeaders[2]; +extern u8 gPlayerModelTypes[PLAYER_MODELGROUP_MAX][PLAYER_MODELGROUPENTRY_MAX]; +extern Gfx* gPlayerLeftHandBgsDLs[]; +extern Gfx* gPlayerLeftHandOpenDLs[]; +extern Gfx* gPlayerLeftHandClosedDLs[]; +extern Gfx* gPlayerLeftHandBoomerangDLs[]; +extern Gfx gCullBackDList[]; +extern Gfx gCullFrontDList[]; +extern Gfx gEmptyDL[]; +extern u32 gBitFlags[32]; +extern u16 gEquipMasks[4]; +extern u16 gEquipNegMasks[4]; +extern u32 gUpgradeMasks[8]; +extern u32 gUpgradeNegMasks[8]; +extern u8 gEquipShifts[4]; +extern u8 gUpgradeShifts[8]; +extern u16 gUpgradeCapacities[8][4]; +extern u32 gGsFlagsMasks[4]; +extern u32 gGsFlagsShifts[4]; +extern void* gItemIcons[162]; +extern u8 gItemAgeReqs[]; +extern u8 gSlotAgeReqs[]; +extern u8 gItemSlots[56]; +extern void (*gSceneCmdHandlers[SCENE_CMD_ID_MAX])(PlayState*, SceneCmd*); +extern s16 gLinkObjectIds[2]; +extern u32 gObjectTableSize; +extern RomFile gObjectTable[OBJECT_ID_MAX]; +extern EntranceInfo gEntranceTable[ENTR_MAX]; +extern SceneTableEntry gSceneTable[SCENE_ID_MAX]; +extern u16 gSramSlotOffsets[]; +// 4 16-colors palettes +extern u64 gMojiFontTLUTs[4][4]; // original name: "moji_tlut" +extern u64 gMojiFontTex[]; // original name: "font_ff" +extern KaleidoMgrOverlay gKaleidoMgrOverlayTable[KALEIDO_OVL_MAX]; +extern KaleidoMgrOverlay* gKaleidoMgrCurOvl; +extern u8 gBossMarkState; +extern void* gDebugCutsceneScript; +extern s32 gScreenWidth; +extern s32 gScreenHeight; +extern Mtx gMtxClear; +extern MtxF gMtxFClear; +extern u32 gIsCtrlr2Valid; +extern vu32 gIrqMgrResetStatus; +extern volatile OSTime gIrqMgrRetraceTime; +extern s16* gWaveSamples[9]; +extern f32 gBendPitchOneOctaveFrequencies[256]; +extern f32 gBendPitchTwoSemitonesFrequencies[256]; +extern f32 gNoteFrequencies[]; +extern u8 gDefaultShortNoteVelocityTable[16]; +extern u8 gDefaultShortNoteGateTimeTable[16]; +extern AdsrEnvelope gDefaultEnvelope[4]; +extern NoteSubEu gZeroNoteSub; +extern NoteSubEu gDefaultNoteSub; +extern u16 gHeadsetPanQuantization[64]; +extern s16 D_8012FBA8[]; +extern f32 gHeadsetPanVolume[128]; +extern f32 gStereoPanVolume[128]; +extern f32 gDefaultPanVolume[128]; +extern s16 sLowPassFilterData[16 * 8]; +extern s16 sHighPassFilterData[15 * 8]; +extern s32 gAudioContextInitalized; +extern u8 gIsLargeSoundBank[7]; +extern u8 gChannelsPerBank[4][7]; +extern u8 gUsedChannelsPerBank[4][7]; +extern u8 gMorphaTransposeTable[16]; +extern u8* gFrogsSongPtr; +extern OcarinaNote* gScarecrowCustomSongPtr; +extern u8* gScarecrowSpawnSongPtr; +extern OcarinaSongInfo gOcarinaSongNotes[]; +extern SoundParams* gSoundParams[7]; +extern char D_80133390[]; +extern char D_80133398[]; +extern SoundBankEntry* gSoundBanks[7]; +extern u8 gSfxChannelLayout; +extern Vec3f gSfxDefaultPos; +extern f32 gSfxDefaultFreqAndVolScale; +extern s8 gSfxDefaultReverb; +extern u8 D_801333F0; +extern u8 gAudioSfxSwapOff; +extern u8 D_80133408; +extern u8 D_8013340C; +extern u8 gAudioSpecId; +extern u8 D_80133418; +extern AudioSpec gAudioSpecs[18]; +extern s32 gOverlayLogSeverity; +extern s32 gSystemArenaLogSeverity; +extern u8 __osPfsInodeCacheBank; +extern s32 __osPfsLastChannel; +extern u8 gWalkSpeedToggle1; +extern u8 gWalkSpeedToggle2; +extern f32 iceTrapScale; +extern f32 triforcePieceScale; +extern f32 mysteryItemScale; + +extern const s16 D_8014A6C0[]; #define gTatumsPerBeat (D_8014A6C0[1]) - extern const AudioContextInitSizes D_8014A6C4; - extern s16 gOcarinaSongItemMap[]; - extern u8 D_80155F50[]; - extern u8 D_80157580[]; - extern u8 D_801579A0[]; - extern u64 gJpegUCodeData[]; +extern const AudioContextInitSizes D_8014A6C4; +extern s16 gOcarinaSongItemMap[]; +extern u8 D_80155F50[]; +extern u8 D_80157580[]; +extern u8 D_801579A0[]; +extern u64 gJpegUCodeData[]; - extern SaveContext gSaveContext; - extern GameInfo* gGameInfo; - extern u16 D_8015FCC0; - extern u16 D_8015FCC2; - extern u16 D_8015FCC4; - extern u8 D_8015FCC8; - extern u8 gCustomLensFlareOn; - extern Vec3f gCustomLensFlarePos; - extern s16 gLensFlareScale; - extern f32 gLensFlareColorIntensity; - extern s16 gLensFlareScreenFillAlpha; - extern LightningStrike gLightningStrike; - extern MapData* gMapData; - extern f32 gBossMarkScale; - extern PauseMapMarksData* gLoadedPauseMarkDataTable; - extern s32 gTrnsnUnkState; - extern Color_RGBA8_u32 gVisMonoColor; - extern PreNmiBuff* gAppNmiBufferPtr; - extern SchedContext gSchedContext; - extern PadMgr gPadMgr; - extern uintptr_t gSegments[NUM_SEGMENTS]; - extern volatile OSTime D_8016A520; - extern volatile OSTime D_8016A528; - extern volatile OSTime D_8016A530; - extern volatile OSTime D_8016A538; - extern volatile OSTime D_8016A540; - extern volatile OSTime D_8016A548; - extern volatile OSTime D_8016A550; - extern volatile OSTime D_8016A558; - extern volatile OSTime gRSPAudioTotalTime; - extern volatile OSTime gRSPGFXTotalTime; - extern volatile OSTime gRSPOtherTotalTime; - extern volatile OSTime gRDPTotalTime; - extern FaultThreadStruct gFaultStruct; +extern SaveContext gSaveContext; +extern GameInfo* gGameInfo; +extern u16 D_8015FCC0; +extern u16 D_8015FCC2; +extern u16 D_8015FCC4; +extern u8 D_8015FCC8; +extern u8 gCustomLensFlareOn; +extern Vec3f gCustomLensFlarePos; +extern s16 gLensFlareScale; +extern f32 gLensFlareColorIntensity; +extern s16 gLensFlareScreenFillAlpha; +extern LightningStrike gLightningStrike; +extern MapData* gMapData; +extern f32 gBossMarkScale; +extern PauseMapMarksData* gLoadedPauseMarkDataTable; +extern s32 gTrnsnUnkState; +extern Color_RGBA8_u32 gVisMonoColor; +extern PreNmiBuff* gAppNmiBufferPtr; +extern SchedContext gSchedContext; +extern PadMgr gPadMgr; +extern uintptr_t gSegments[NUM_SEGMENTS]; +extern volatile OSTime D_8016A520; +extern volatile OSTime D_8016A528; +extern volatile OSTime D_8016A530; +extern volatile OSTime D_8016A538; +extern volatile OSTime D_8016A540; +extern volatile OSTime D_8016A548; +extern volatile OSTime D_8016A550; +extern volatile OSTime D_8016A558; +extern volatile OSTime gRSPAudioTotalTime; +extern volatile OSTime gRSPGFXTotalTime; +extern volatile OSTime gRSPOtherTotalTime; +extern volatile OSTime gRDPTotalTime; +extern FaultThreadStruct gFaultStruct; - extern ActiveSound gActiveSounds[7][MAX_CHANNELS_PER_BANK]; // total size = 0xA8 - extern u8 gSoundBankMuted[]; - extern u8 D_801333F0; - extern u8 gAudioSfxSwapOff; - extern u16 gAudioSfxSwapSource[10]; - extern u16 gAudioSfxSwapTarget[10]; - extern u8 gAudioSfxSwapMode[10]; - extern ActiveSequence gActiveSeqs[4]; - extern AudioContext gAudioContext; - extern void(*D_801755D0)(void); +extern ActiveSound gActiveSounds[7][MAX_CHANNELS_PER_BANK]; // total size = 0xA8 +extern u8 gSoundBankMuted[]; +extern u8 D_801333F0; +extern u8 gAudioSfxSwapOff; +extern u16 gAudioSfxSwapSource[10]; +extern u16 gAudioSfxSwapTarget[10]; +extern u8 gAudioSfxSwapMode[10]; +extern ActiveSequence gActiveSeqs[4]; +extern AudioContext gAudioContext; +extern void (*D_801755D0)(void); - extern u32 __osMalloc_FreeBlockTest_Enable; - extern Arena gSystemArena; - extern OSPifRam __osPifInternalBuff; - extern u8 __osContLastPoll; - extern u8 __osMaxControllers; - extern __OSInode __osPfsInodeCache; - extern OSPifRam gPifMempakBuf; - extern u16 gZBuffer[SCREEN_HEIGHT][SCREEN_WIDTH]; // 0x25800 bytes - extern u64 gGfxSPTaskOutputBuffer[0x3000]; // 0x18000 bytes - extern u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE]; // 0xC00 bytes - extern u8 gGfxSPTaskStack[0x400]; // 0x400 bytes - extern GfxPool gGfxPools[2]; // 0x24820 bytes - extern u8* gAudioHeap; - extern u8* gSystemHeap; - extern GameState* gGameState; +extern u32 __osMalloc_FreeBlockTest_Enable; +extern Arena gSystemArena; +extern OSPifRam __osPifInternalBuff; +extern u8 __osContLastPoll; +extern u8 __osMaxControllers; +extern __OSInode __osPfsInodeCache; +extern OSPifRam gPifMempakBuf; +extern u16 gZBuffer[SCREEN_HEIGHT][SCREEN_WIDTH]; // 0x25800 bytes +extern u64 gGfxSPTaskOutputBuffer[0x3000]; // 0x18000 bytes +extern u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE]; // 0xC00 bytes +extern u8 gGfxSPTaskStack[0x400]; // 0x400 bytes +extern GfxPool gGfxPools[2]; // 0x24820 bytes +extern u8* gAudioHeap; +extern u8* gSystemHeap; +extern GameState* gGameState; #ifdef __cplusplus }; diff --git a/soh/include/z64item.h b/soh/include/z64item.h index 214d82711..f8281f6c3 100644 --- a/soh/include/z64item.h +++ b/soh/include/z64item.h @@ -146,7 +146,11 @@ typedef enum { /* 0x1B */ SLOT_BOOTS_KOKIRI, /* 0x1C */ SLOT_BOOTS_IRON, /* 0x1D */ SLOT_BOOTS_HOVER, - /* 0xFF */ SLOT_NONE = 0xFF + /* 0xFF */ SLOT_NONE = 0xFF, + + // CUSTOM CODE + SLOT_GLIDER = 0xA1, // 161 + } InventorySlot; typedef enum { @@ -308,7 +312,11 @@ typedef enum { /* 0x9B */ ITEM_NUT_UPGRADE_40, /* 0xFC */ ITEM_LAST_USED = 0xFC, /* 0xFE */ ITEM_NONE_FE = 0xFE, - /* 0xFF */ ITEM_NONE = 0xFF + /* 0xFF */ ITEM_NONE = 0xFF, + + // CUSTOM + ITEM_GLIDER = 0xA1, // 161 + } ItemID; typedef enum { @@ -457,7 +465,12 @@ typedef enum { /* 0x7B */ GI_BULLET_BAG_50, /* 0x7C */ GI_ICE_TRAP, // freezes link when opened from a chest /* 0x7D */ GI_TEXT_0, // no model appears over Link, shows text id 0 (pocket egg) - /* 0x84 */ GI_MAX + /* 0x84 */ + GI_MAX, + + // CUSTOM + GI_GLIDER = 0xA1, // 161 + } GetItemID; typedef enum { diff --git a/soh/include/z64player.h b/soh/include/z64player.h index a00d86557..f978aa853 100644 --- a/soh/include/z64player.h +++ b/soh/include/z64player.h @@ -11,22 +11,26 @@ struct Player; #define PLAYER_GET_START_MODE(thisx) (thisx->params & 0xF00) >> 8 typedef enum PlayerStartMode { - /* 0 */ PLAYER_START_MODE_NOTHING, // Update is empty and draw function is NULL, nothing occurs. Useful in cutscenes, for example. + /* 0 */ PLAYER_START_MODE_NOTHING, // Update is empty and draw function is NULL, nothing occurs. Useful in + // cutscenes, for example. /* 1 */ PLAYER_START_MODE_TIME_TRAVEL, // Arriving from time travel. Automatically adjusts by age. - /* 2 */ PLAYER_START_MODE_BLUE_WARP, // Arriving from a blue warp. - /* 3 */ PLAYER_START_MODE_DOOR, // Unused. Use a door immediately if one is nearby. If no door is in usable range, a softlock occurs. - /* 4 */ PLAYER_START_MODE_GROTTO, // Arriving from a grotto, launched upward from the ground. - /* 5 */ PLAYER_START_MODE_WARP_SONG, // Arriving from a warp song. - /* 6 */ PLAYER_START_MODE_FARORES_WIND, // Arriving from a Farores Wind warp. - /* 7 */ PLAYER_START_MODE_KNOCKED_OVER, // Knocked over on the ground and flashing red. - /* 8 */ PLAYER_START_MODE_UNUSED_8, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. - /* 9 */ PLAYER_START_MODE_UNUSED_9, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. - /* 10 */ PLAYER_START_MODE_UNUSED_10, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. - /* 11 */ PLAYER_START_MODE_UNUSED_11, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. - /* 12 */ PLAYER_START_MODE_UNUSED_12, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. - /* 13 */ PLAYER_START_MODE_IDLE, // Idle standing still, or swim if in water. - /* 14 */ PLAYER_START_MODE_MOVE_FORWARD_SLOW, // Take a few steps forward at a slow speed (2.0f), or swim if in water. - /* 15 */ PLAYER_START_MODE_MOVE_FORWARD, // Take a few steps forward, using the speed from the last exit (gSaveContext.entranceSpeed), or swim if in water. + /* 2 */ PLAYER_START_MODE_BLUE_WARP, // Arriving from a blue warp. + /* 3 */ PLAYER_START_MODE_DOOR, // Unused. Use a door immediately if one is nearby. If no door is in usable range, + // a softlock occurs. + /* 4 */ PLAYER_START_MODE_GROTTO, // Arriving from a grotto, launched upward from the ground. + /* 5 */ PLAYER_START_MODE_WARP_SONG, // Arriving from a warp song. + /* 6 */ PLAYER_START_MODE_FARORES_WIND, // Arriving from a Farores Wind warp. + /* 7 */ PLAYER_START_MODE_KNOCKED_OVER, // Knocked over on the ground and flashing red. + /* 8 */ PLAYER_START_MODE_UNUSED_8, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. + /* 9 */ PLAYER_START_MODE_UNUSED_9, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. + /* 10 */ PLAYER_START_MODE_UNUSED_10, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. + /* 11 */ PLAYER_START_MODE_UNUSED_11, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. + /* 12 */ PLAYER_START_MODE_UNUSED_12, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. + /* 13 */ PLAYER_START_MODE_IDLE, // Idle standing still, or swim if in water. + /* 14 */ PLAYER_START_MODE_MOVE_FORWARD_SLOW, // Take a few steps forward at a slow speed (2.0f), or swim if in + // water. + /* 15 */ PLAYER_START_MODE_MOVE_FORWARD, // Take a few steps forward, using the speed from the last exit + // (gSaveContext.entranceSpeed), or swim if in water. /* 16 */ PLAYER_START_MODE_MAX // Note: By default, this param has 4 bits allocated. The max value is 16. } PlayerStartMode; @@ -159,7 +163,11 @@ typedef enum PlayerItemAction { /* 0x40 */ PLAYER_IA_MASK_GERUDO, /* 0x41 */ PLAYER_IA_MASK_TRUTH, /* 0x42 */ PLAYER_IA_LENS_OF_TRUTH, - /* 0x43 */ PLAYER_IA_MAX + + // CUSTOM + PLAYER_IA_GLIDER = 73, + /* 0x43 */ PLAYER_IA_MAX, + } PlayerItemAction; typedef enum PlayerLimb { @@ -251,22 +259,23 @@ typedef enum PlayerDoorType { } PlayerDoorType; typedef enum PlayerModelGroup { - /* 0x00 */ PLAYER_MODELGROUP_0, // unused (except for a bug in `Player_OverrideLimbDrawPause`) - /* 0x01 */ PLAYER_MODELGROUP_CHILD_HYLIAN_SHIELD, //hold sword only. used for holding sword only as child link with hylian shield equipped - /* 0x02 */ PLAYER_MODELGROUP_SWORD_AND_SHIELD, // hold sword and shield or just sword if no shield is equipped - /* 0x03 */ PLAYER_MODELGROUP_DEFAULT, // non-specific models, for items that don't have particular link models - /* 0x04 */ PLAYER_MODELGROUP_4, // unused, same as PLAYER_MODELGROUP_DEFAULT - /* 0x05 */ PLAYER_MODELGROUP_BGS, // biggoron sword + /* 0x00 */ PLAYER_MODELGROUP_0, // unused (except for a bug in `Player_OverrideLimbDrawPause`) + /* 0x01 */ PLAYER_MODELGROUP_CHILD_HYLIAN_SHIELD, // hold sword only. used for holding sword only as child link with + // hylian shield equipped + /* 0x02 */ PLAYER_MODELGROUP_SWORD_AND_SHIELD, // hold sword and shield or just sword if no shield is equipped + /* 0x03 */ PLAYER_MODELGROUP_DEFAULT, // non-specific models, for items that don't have particular link models + /* 0x04 */ PLAYER_MODELGROUP_4, // unused, same as PLAYER_MODELGROUP_DEFAULT + /* 0x05 */ PLAYER_MODELGROUP_BGS, // biggoron sword /* 0x06 */ PLAYER_MODELGROUP_BOW_SLINGSHOT, // bow/slingshot - /* 0x07 */ PLAYER_MODELGROUP_EXPLOSIVES, // bombs, bombchus, same as PLAYER_MODELGROUP_DEFAULT + /* 0x07 */ PLAYER_MODELGROUP_EXPLOSIVES, // bombs, bombchus, same as PLAYER_MODELGROUP_DEFAULT /* 0x08 */ PLAYER_MODELGROUP_BOOMERANG, /* 0x09 */ PLAYER_MODELGROUP_HOOKSHOT, /* 0x0A */ PLAYER_MODELGROUP_10, // stick/fishing pole (which are drawn separately) /* 0x0B */ PLAYER_MODELGROUP_HAMMER, /* 0x0C */ PLAYER_MODELGROUP_OCARINA, // ocarina - /* 0x0D */ PLAYER_MODELGROUP_OOT, // ocarina of time - /* 0x0E */ PLAYER_MODELGROUP_BOTTLE, // bottles (drawn separately) - /* 0x0F */ PLAYER_MODELGROUP_SWORD, // hold sword and no shield, even if one is equipped + /* 0x0D */ PLAYER_MODELGROUP_OOT, // ocarina of time + /* 0x0E */ PLAYER_MODELGROUP_BOTTLE, // bottles (drawn separately) + /* 0x0F */ PLAYER_MODELGROUP_SWORD, // hold sword and no shield, even if one is equipped /* 0x10 */ PLAYER_MODELGROUP_MAX } PlayerModelGroup; @@ -281,29 +290,29 @@ typedef enum PlayerModelGroupEntry { typedef enum PlayerModelType { // left hand - /* 0x00 */ PLAYER_MODELTYPE_LH_OPEN, // empty open hand - /* 0x01 */ PLAYER_MODELTYPE_LH_CLOSED, // empty closed hand - /* 0x02 */ PLAYER_MODELTYPE_LH_SWORD, // holding kokiri/master sword - /* 0x03 */ PLAYER_MODELTYPE_LH_SWORD_2, // unused, same as PLAYER_MODELTYPE_LH_SWORD - /* 0x04 */ PLAYER_MODELTYPE_LH_BGS, // holding bgs/broken giant knife (child: master sword) - /* 0x05 */ PLAYER_MODELTYPE_LH_HAMMER, // holding hammer (child: empty hand) - /* 0x06 */ PLAYER_MODELTYPE_LH_BOOMERANG, // holding boomerang (adult: empty hand) - /* 0x07 */ PLAYER_MODELTYPE_LH_BOTTLE, // holding bottle (bottle drawn separately) - // right hand - /* 0x08 */ PLAYER_MODELTYPE_RH_OPEN, // empty open hand - /* 0x09 */ PLAYER_MODELTYPE_RH_CLOSED, // empty closed hand - /* 0x0A */ PLAYER_MODELTYPE_RH_SHIELD, // holding a shield (including no shield) - /* 0x0B */ PLAYER_MODELTYPE_RH_BOW_SLINGSHOT, // holding bow/slingshot + /* 0x00 */ PLAYER_MODELTYPE_LH_OPEN, // empty open hand + /* 0x01 */ PLAYER_MODELTYPE_LH_CLOSED, // empty closed hand + /* 0x02 */ PLAYER_MODELTYPE_LH_SWORD, // holding kokiri/master sword + /* 0x03 */ PLAYER_MODELTYPE_LH_SWORD_2, // unused, same as PLAYER_MODELTYPE_LH_SWORD + /* 0x04 */ PLAYER_MODELTYPE_LH_BGS, // holding bgs/broken giant knife (child: master sword) + /* 0x05 */ PLAYER_MODELTYPE_LH_HAMMER, // holding hammer (child: empty hand) + /* 0x06 */ PLAYER_MODELTYPE_LH_BOOMERANG, // holding boomerang (adult: empty hand) + /* 0x07 */ PLAYER_MODELTYPE_LH_BOTTLE, // holding bottle (bottle drawn separately) + // right hand + /* 0x08 */ PLAYER_MODELTYPE_RH_OPEN, // empty open hand + /* 0x09 */ PLAYER_MODELTYPE_RH_CLOSED, // empty closed hand + /* 0x0A */ PLAYER_MODELTYPE_RH_SHIELD, // holding a shield (including no shield) + /* 0x0B */ PLAYER_MODELTYPE_RH_BOW_SLINGSHOT, // holding bow/slingshot /* 0x0C */ PLAYER_MODELTYPE_RH_BOW_SLINGSHOT_2, // unused, same as PLAYER_MODELTYPE_RH_BOW_SLINGSHOT - /* 0x0D */ PLAYER_MODELTYPE_RH_OCARINA, // holding ocarina (child: fairy ocarina, adult: OoT) - /* 0x0E */ PLAYER_MODELTYPE_RH_OOT, // holding OoT - /* 0x0F */ PLAYER_MODELTYPE_RH_HOOKSHOT, // holding hookshot (child: empty hand) - // sheath - /* 0x10 */ PLAYER_MODELTYPE_SHEATH_16, // sheathed kokiri/master sword? - /* 0x11 */ PLAYER_MODELTYPE_SHEATH_17, // empty sheath? - /* 0x12 */ PLAYER_MODELTYPE_SHEATH_18, // sword sheathed and shield on back? - /* 0x13 */ PLAYER_MODELTYPE_SHEATH_19, // empty sheath and shield on back? - // waist + /* 0x0D */ PLAYER_MODELTYPE_RH_OCARINA, // holding ocarina (child: fairy ocarina, adult: OoT) + /* 0x0E */ PLAYER_MODELTYPE_RH_OOT, // holding OoT + /* 0x0F */ PLAYER_MODELTYPE_RH_HOOKSHOT, // holding hookshot (child: empty hand) + // sheath + /* 0x10 */ PLAYER_MODELTYPE_SHEATH_16, // sheathed kokiri/master sword? + /* 0x11 */ PLAYER_MODELTYPE_SHEATH_17, // empty sheath? + /* 0x12 */ PLAYER_MODELTYPE_SHEATH_18, // sword sheathed and shield on back? + /* 0x13 */ PLAYER_MODELTYPE_SHEATH_19, // empty sheath and shield on back? + // waist /* 0x14 */ PLAYER_MODELTYPE_WAIST, /* 0x15 */ PLAYER_MODELTYPE_MAX, /* 0xFF */ PLAYER_MODELTYPE_RH_FF = 0xFF // disable shield collider, cutscene-specific @@ -580,9 +589,9 @@ typedef enum PlayerStickDirection { } PlayerStickDirection; typedef enum { - /* 0 */ PLAYER_KNOCKBACK_NONE, // No knockback - /* 1 */ PLAYER_KNOCKBACK_SMALL, // A small hop, remains standing up - /* 2 */ PLAYER_KNOCKBACK_LARGE, // Sent flying in the air and lands laying down on the floor + /* 0 */ PLAYER_KNOCKBACK_NONE, // No knockback + /* 1 */ PLAYER_KNOCKBACK_SMALL, // A small hop, remains standing up + /* 2 */ PLAYER_KNOCKBACK_LARGE, // Sent flying in the air and lands laying down on the floor /* 3 */ PLAYER_KNOCKBACK_LARGE_SHOCK // Same as`PLAYER_KNOCKBACK_LARGE` with a shock effect } PlayerKnockbackType; @@ -654,28 +663,34 @@ typedef enum FlagType { } FlagType; typedef struct PendingFlag { - /* 0x00 */ s32 flagID; // which flag to set when Player_SetPendingFlag is called - /* 0x04 */ FlagType flagType; // type of flag to set when Player_SetPendingFlag is called -} PendingFlag; // size = 0x06 + /* 0x00 */ s32 flagID; // which flag to set when Player_SetPendingFlag is called + /* 0x04 */ FlagType flagType; // type of flag to set when Player_SetPendingFlag is called +} PendingFlag; // size = 0x06 // #endregion -#define PLAYER_STATE1_LOADING (1 << 0) //Transitioning to a new scene +#define PLAYER_STATE1_LOADING (1 << 0) // Transitioning to a new scene #define PLAYER_STATE1_SWINGING_BOTTLE (1 << 1) // Bottle is swung; Bottle is active and can catch things #define PLAYER_STATE1_HOOKSHOT_FALLING (1 << 2) #define PLAYER_STATE1_ITEM_IN_HAND (1 << 3) -#define PLAYER_STATE1_HOSTILE_LOCK_ON (1 << 4) // Currently locked onto a hostile actor. Triggers a "battle" variant of many actions. +#define PLAYER_STATE1_HOSTILE_LOCK_ON \ + (1 << 4) // Currently locked onto a hostile actor. Triggers a "battle" variant of many actions. #define PLAYER_STATE1_INPUT_DISABLED (1 << 5) #define PLAYER_STATE1_TALKING (1 << 6) // Currently talking to an actor. This includes item exchanges. -#define PLAYER_STATE1_DEAD (1 << 7) // Player has died. Note that this gets set when the death cutscene has started, after landing from the air. +#define PLAYER_STATE1_DEAD \ + (1 << 7) // Player has died. Note that this gets set when the death cutscene has started, after landing from the + // air. #define PLAYER_STATE1_START_CHANGING_HELD_ITEM (1 << 8) // Item change process has begun #define PLAYER_STATE1_READY_TO_FIRE (1 << 9) #define PLAYER_STATE1_GETTING_ITEM (1 << 10) -#define PLAYER_STATE1_CARRYING_ACTOR (1 << 11) // Currently carrying an actor +#define PLAYER_STATE1_CARRYING_ACTOR (1 << 11) // Currently carrying an actor #define PLAYER_STATE1_CHARGING_SPIN_ATTACK (1 << 12) // Currently charing a spin attack (by holding down the B button) #define PLAYER_STATE1_HANGING_OFF_LEDGE (1 << 13) #define PLAYER_STATE1_CLIMBING_LEDGE (1 << 14) -#define PLAYER_STATE1_Z_TARGETING (1 << 15) // Either lock-on or parallel is active. This flag is never checked for and is practically unused. -#define PLAYER_STATE1_FRIENDLY_ACTOR_FOCUS (1 << 16) // Currently focusing on a friendly actor. Includes friendly lock-on, talking, and more. Usually does not include hostile actor lock-on, see `PLAYER_STATE1_HOSTILE_LOCK_ON`. +#define PLAYER_STATE1_Z_TARGETING \ + (1 << 15) // Either lock-on or parallel is active. This flag is never checked for and is practically unused. +#define PLAYER_STATE1_FRIENDLY_ACTOR_FOCUS \ + (1 << 16) // Currently focusing on a friendly actor. Includes friendly lock-on, talking, and more. Usually does not + // include hostile actor lock-on, see `PLAYER_STATE1_HOSTILE_LOCK_ON`. #define PLAYER_STATE1_PARALLEL (1 << 17) // "Parallel" mode, Z-Target without an actor lock-on #define PLAYER_STATE1_JUMPING (1 << 18) #define PLAYER_STATE1_FREEFALL (1 << 19) @@ -683,17 +698,20 @@ typedef struct PendingFlag { #define PLAYER_STATE1_CLIMBING_LADDER (1 << 21) #define PLAYER_STATE1_SHIELDING (1 << 22) #define PLAYER_STATE1_ON_HORSE (1 << 23) -#define PLAYER_STATE1_USING_BOOMERANG (1 << 24) // Currently using the boomerang. This includes all phases (aiming, throwing, and catching). +#define PLAYER_STATE1_USING_BOOMERANG \ + (1 << 24) // Currently using the boomerang. This includes all phases (aiming, throwing, and catching). #define PLAYER_STATE1_BOOMERANG_THROWN (1 << 25) // Boomerang has been thrown and is flying in the air #define PLAYER_STATE1_DAMAGED (1 << 26) #define PLAYER_STATE1_IN_WATER (1 << 27) #define PLAYER_STATE1_IN_ITEM_CS (1 << 28) #define PLAYER_STATE1_IN_CUTSCENE (1 << 29) -#define PLAYER_STATE1_LOCK_ON_FORCED_TO_RELEASE (1 << 30) // Lock-on was released automatically, for example by leaving the lock-on leash range -#define PLAYER_STATE1_FLOOR_DISABLED (1 << 31) //Used for grottos +#define PLAYER_STATE1_LOCK_ON_FORCED_TO_RELEASE \ + (1 << 30) // Lock-on was released automatically, for example by leaving the lock-on leash range +#define PLAYER_STATE1_FLOOR_DISABLED (1 << 31) // Used for grottos #define PLAYER_STATE2_DO_ACTION_GRAB (1 << 0) -#define PLAYER_STATE2_CAN_ACCEPT_TALK_OFFER (1 << 1) // Can accept a talk offer. "Speak" or "Check" is shown on the A button. +#define PLAYER_STATE2_CAN_ACCEPT_TALK_OFFER \ + (1 << 1) // Can accept a talk offer. "Speak" or "Check" is shown on the A button. #define PLAYER_STATE2_DO_ACTION_CLIMB (1 << 2) #define PLAYER_STATE2_FOOTSTEP (1 << 3) #define PLAYER_STATE2_MOVING_DYNAPOLY (1 << 4) @@ -705,22 +723,27 @@ typedef struct PendingFlag { #define PLAYER_STATE2_UNDERWATER (1 << 10) #define PLAYER_STATE2_DIVING (1 << 11) #define PLAYER_STATE2_STATIONARY_LADDER (1 << 12) -#define PLAYER_STATE2_LOCK_ON_WITH_SWITCH (1 << 13) // Actor lock-on is active, specifically with Switch Targeting. Hold Targeting checks the state of the Z button instead of this flag. +#define PLAYER_STATE2_LOCK_ON_WITH_SWITCH \ + (1 << 13) // Actor lock-on is active, specifically with Switch Targeting. Hold Targeting checks the state of the Z + // button instead of this flag. #define PLAYER_STATE2_FROZEN (1 << 14) #define PLAYER_STATE2_PAUSE_MOST_UPDATING (1 << 15) #define PLAYER_STATE2_DO_ACTION_ENTER (1 << 16) // Sets the "Enter On A" DoAction -#define PLAYER_STATE2_SPIN_ATTACKING (1 << 17) //w/o magic -#define PLAYER_STATE2_CRAWLING (1 << 18) // Crawling through a crawlspace -#define PLAYER_STATE2_HOPPING (1 << 19) //Sidehop/backflip -#define PLAYER_STATE2_NAVI_ACTIVE (1 << 20) // Navi is visible and active. Could be hovering idle near Link or hovering over other actors. +#define PLAYER_STATE2_SPIN_ATTACKING (1 << 17) // w/o magic +#define PLAYER_STATE2_CRAWLING (1 << 18) // Crawling through a crawlspace +#define PLAYER_STATE2_HOPPING (1 << 19) // Sidehop/backflip +#define PLAYER_STATE2_NAVI_ACTIVE \ + (1 << 20) // Navi is visible and active. Could be hovering idle near Link or hovering over other actors. #define PLAYER_STATE2_NAVI_ALERT (1 << 21) #define PLAYER_STATE2_DO_ACTION_DOWN (1 << 22) #define PLAYER_STATE2_NEAR_OCARINA_ACTOR (1 << 23) #define PLAYER_STATE2_ATTEMPT_PLAY_FOR_ACTOR (1 << 24) #define PLAYER_STATE2_PLAY_FOR_ACTOR (1 << 25) -#define PLAYER_STATE2_REFLECTION (1 << 26) //Handles Dark Link's Reflection +#define PLAYER_STATE2_REFLECTION (1 << 26) // Handles Dark Link's Reflection #define PLAYER_STATE2_OCARINA_PLAYING (1 << 27) -#define PLAYER_STATE2_IDLE_FIDGET (1 << 28) // Playing a fidget idle animation (under typical circumstances, see `Player_ChooseNextIdleAnim` for more info) +#define PLAYER_STATE2_IDLE_FIDGET \ + (1 << 28) // Playing a fidget idle animation (under typical circumstances, see `Player_ChooseNextIdleAnim` for more + // info) #define PLAYER_STATE2_DISABLE_DRAW (1 << 29) #define PLAYER_STATE2_SWORD_LUNGE (1 << 30) #define PLAYER_STATE2_FORCED_VOID_OUT (1 << 31) @@ -731,8 +754,11 @@ typedef struct PendingFlag { #define PLAYER_STATE3_FINISHED_ATTACKING (1 << 3) #define PLAYER_STATE3_CHECK_FLOOR_WATER_COLLISION (1 << 4) #define PLAYER_STATE3_FORCE_PULL_OCARINA (1 << 5) -#define PLAYER_STATE3_RESTORE_NAYRUS_LOVE (1 << 6) // Set by ocarina effects actors when destroyed to signal Nayru's Love may be restored (see `ACTOROVL_ALLOC_ABSOLUTE`) -#define PLAYER_STATE3_FLYING_WITH_HOOKSHOT (1 << 7) // Flying in the air with the hookshot as it pulls Player toward its destination +#define PLAYER_STATE3_RESTORE_NAYRUS_LOVE \ + (1 << 6) // Set by ocarina effects actors when destroyed to signal Nayru's Love may be restored (see + // `ACTOROVL_ALLOC_ABSOLUTE`) +#define PLAYER_STATE3_FLYING_WITH_HOOKSHOT \ + (1 << 7) // Flying in the air with the hookshot as it pulls Player toward its destination typedef void (*PlayerActionFunc)(struct Player*, struct PlayState*); typedef s32 (*UpperActionFunc)(struct Player*, struct PlayState*); @@ -752,13 +778,13 @@ typedef struct Player { /* 0x0000 */ Actor actor; /* 0x014C */ s8 currentTunic; // current tunic from `PlayerTunic` /* 0x014D */ s8 currentSwordItemId; - /* 0x014E */ s8 currentShield; // current shield from `PlayerShield` - /* 0x014F */ s8 currentBoots; // current boots from `PlayerBoots` + /* 0x014E */ s8 currentShield; // current shield from `PlayerShield` + /* 0x014F */ s8 currentBoots; // current boots from `PlayerBoots` /* 0x0150 */ s8 heldItemButton; // Button index for the item currently used /* 0x0151 */ s8 heldItemAction; // Item action for the item currently used - /* 0x0152 */ u8 heldItemId; // Item id for the item currently used - /* 0x0153 */ s8 prevBoots; // previous boots from `PlayerBoots` - /* 0x0154 */ s8 itemAction; // the difference between this and heldItemAction is unclear + /* 0x0152 */ u8 heldItemId; // Item id for the item currently used + /* 0x0153 */ s8 prevBoots; // previous boots from `PlayerBoots` + /* 0x0154 */ s8 itemAction; // the difference between this and heldItemAction is unclear /* 0x0155 */ char unk_155[0x003]; /* 0x0158 */ u8 modelGroup; /* 0x0159 */ u8 nextModelGroup; @@ -809,28 +835,32 @@ typedef struct Player { /* 0x0468 */ char unk_468[0x002]; /* 0x046A */ union { s16 haltActorsDuringCsAction; // If true, halt actors belonging to certain categories during a `csAction` - s16 slidingDoorBgCamIndex; // `BgCamIndex` used during a sliding door cutscene - } cv; // "Cutscene Variable": context dependent variable that has different meanings depending on what function is called + s16 slidingDoorBgCamIndex; // `BgCamIndex` used during a sliding door cutscene + } cv; // "Cutscene Variable": context dependent variable that has different meanings depending on what function is + // called /* 0x046C */ s16 subCamId; /* 0x046E */ char unk_46E[0x02A]; /* 0x0498 */ ColliderCylinder cylinder; /* 0x04E4 */ ColliderQuad meleeWeaponQuads[2]; /* 0x05E4 */ ColliderQuad shieldQuad; - /* 0x0664 */ Actor* focusActor; // Actor that Player and the camera are looking at; Used for lock-on, talking, and more + /* 0x0664 */ Actor* + focusActor; // Actor that Player and the camera are looking at; Used for lock-on, talking, and more /* 0x0668 */ char unk_668[0x004]; - /* 0x066C */ s32 zTargetActiveTimer; // Non-zero values indicate Z-Targeting should update; Values under 5 indicate lock-on is releasing + /* 0x066C */ s32 zTargetActiveTimer; // Non-zero values indicate Z-Targeting should update; Values under 5 indicate + // lock-on is releasing /* 0x0670 */ s32 meleeWeaponEffectIndex; /* 0x0674 */ PlayerActionFunc actionFunc; /* 0x0678 */ PlayerAgeProperties* ageProperties; /* 0x067C */ u32 stateFlags1; /* 0x0680 */ u32 stateFlags2; - /* 0x0684 */ Actor* autoLockOnActor; // Actor that is locked onto automatically without player input; see `Player_SetAutoLockOnActor` + /* 0x0684 */ Actor* autoLockOnActor; // Actor that is locked onto automatically without player input; see + // `Player_SetAutoLockOnActor` /* 0x0688 */ Actor* boomerangActor; /* 0x068C */ Actor* naviActor; /* 0x0690 */ s16 naviTextId; /* 0x0692 */ u8 stateFlags3; /* 0x0693 */ s8 exchangeItemId; - /* 0x0694 */ Actor* talkActor; // Actor offering to talk, or currently talking to, depending on context + /* 0x0694 */ Actor* talkActor; // Actor offering to talk, or currently talking to, depending on context /* 0x0698 */ f32 talkActorDistance; // xz distance away from `talkActor` /* 0x069C */ char unk_69C[0x004]; /* 0x06A0 */ f32 unk_6A0; @@ -853,31 +883,41 @@ typedef struct Player { /* 0x0834 */ s16 unk_834; /* 0x0836 */ s8 unk_836; /* 0x0837 */ u8 putAwayCooldownTimer; - /* 0x0838 */ f32 linearVelocity; // Controls horizontal speed, used for `actor.speed`. Current or target value depending on context. - /* 0x083C */ s16 yaw; // General yaw value, used both for world and shape rotation. Current or target value depending on context. + /* 0x0838 */ f32 linearVelocity; // Controls horizontal speed, used for `actor.speed`. Current or target value + // depending on context. + /* 0x083C */ s16 + yaw; // General yaw value, used both for world and shape rotation. Current or target value depending on context. /* 0x083E */ s16 parallelYaw; // yaw in "parallel" mode, Z-Target without an actor lock-on /* 0x0840 */ u16 underwaterTimer; /* 0x0842 */ s8 meleeWeaponAnimation; /* 0x0843 */ s8 meleeWeaponState; /* 0x0844 */ s8 unk_844; /* 0x0845 */ u8 unk_845; - /* 0x0846 */ u8 controlStickDataIndex; // cycles between 0 - 3. Used to index `controlStickSpinAngles` and `controlStickDirections` - /* 0x0847 */ s8 controlStickSpinAngles[4]; // Stores a modified version of the control stick angle for the last 4 frames. Used for checking spins. - /* 0x084B */ s8 controlStickDirections[4]; // Stores the control stick direction (relative to shape yaw) for the last 4 frames. See `PlayerStickDirection`. + /* 0x0846 */ u8 controlStickDataIndex; // cycles between 0 - 3. Used to index `controlStickSpinAngles` and + // `controlStickDirections` + /* 0x0847 */ s8 controlStickSpinAngles[4]; // Stores a modified version of the control stick angle for the last 4 + // frames. Used for checking spins. + /* 0x084B */ s8 controlStickDirections[4]; // Stores the control stick direction (relative to shape yaw) for the + // last 4 frames. See `PlayerStickDirection`. /* 0x084F */ union { s8 actionVar1; - s8 facingUpSlope; // Player_Action_SlideOnSlope: facing uphill when sliding on a slope - s8 bottleCatchType; // Player_Action_SwingBottle: entry type for `sBottleCatchInfo`, corresponds to actor caught in a bottle - } av1; // "Action Variable 1": context dependent variable that has different meanings depending on what action is currently running + s8 facingUpSlope; // Player_Action_SlideOnSlope: facing uphill when sliding on a slope + s8 bottleCatchType; // Player_Action_SwingBottle: entry type for `sBottleCatchInfo`, corresponds to actor caught + // in a bottle + } av1; // "Action Variable 1": context dependent variable that has different meanings depending on what action is + // currently running /* 0x0850 */ union { s16 actionVar2; - s16 fallDamageStunTimer; // Player_Action_Idle: Prevents any movement and shakes model up and down quickly to indicate fall damage stun - s16 bonked; // Player_Action_Roll: set to true after bonking into a wall or an actor - s16 startedTextbox; // Player_Action_SwingBottle: set to true when the textbox is started - s16 inWater; // Player_Action_SwingBottle: true if a bottle is swung in water. Used to determine which bottle swing animation to use. - } av2; // "Action Variable 2": context dependent variable that has different meanings depending on what action is currently running + s16 fallDamageStunTimer; // Player_Action_Idle: Prevents any movement and shakes model up and down quickly to + // indicate fall damage stun + s16 bonked; // Player_Action_Roll: set to true after bonking into a wall or an actor + s16 startedTextbox; // Player_Action_SwingBottle: set to true when the textbox is started + s16 inWater; // Player_Action_SwingBottle: true if a bottle is swung in water. Used to determine which bottle + // swing animation to use. + } av2; // "Action Variable 2": context dependent variable that has different meanings depending on what action is + // currently running /* 0x0854 */ f32 unk_854; /* 0x0858 */ f32 unk_858; @@ -897,16 +937,18 @@ typedef struct Player { /* 0x0888 */ f32 distToInteractWall; // xyz distance to the interact wall /* 0x088C */ u8 ledgeClimbType; /* 0x088D */ u8 ledgeClimbDelayTimer; - /* 0x088E */ u8 textboxBtnCooldownTimer; // Prevents usage of A/B/C-up when counting down + /* 0x088E */ u8 textboxBtnCooldownTimer; // Prevents usage of A/B/C-up when counting down /* 0x088F */ u8 damageFlickerAnimCounter; // Used to flicker Link after taking damage /* 0x0890 */ u8 unk_890; /* 0x0891 */ u8 bodyShockTimer; /* 0x0892 */ u8 unk_892; /* 0x0893 */ u8 hoverBootsTimer; /* 0x0894 */ s16 fallStartHeight; // last truncated Y position before falling - /* 0x0896 */ s16 fallDistance; // truncated Y distance the player has fallen so far (positive is down) - /* 0x0898 */ s16 floorPitch; // angle of the floor slope in the direction of current world yaw (positive for ascending slope) - /* 0x089A */ s16 floorPitchAlt; // the calculation for this value is bugged and doesn't represent anything meaningful + /* 0x0896 */ s16 fallDistance; // truncated Y distance the player has fallen so far (positive is down) + /* 0x0898 */ s16 + floorPitch; // angle of the floor slope in the direction of current world yaw (positive for ascending slope) + /* 0x089A */ s16 + floorPitchAlt; // the calculation for this value is bugged and doesn't represent anything meaningful /* 0x089C */ s16 unk_89C; /* 0x089E */ u16 floorSfxOffset; /* 0x08A0 */ u8 knockbackDamage; @@ -914,7 +956,8 @@ typedef struct Player { /* 0x08A2 */ s16 knockbackRot; /* 0x08A4 */ f32 knockbackSpeed; /* 0x08A8 */ f32 knockbackYVelocity; - /* 0x08AC */ f32 pushedSpeed; // Pushing player, examples include water currents, floor conveyors, climbing sloped surfaces + /* 0x08AC */ f32 + pushedSpeed; // Pushing player, examples include water currents, floor conveyors, climbing sloped surfaces /* 0x08B0 */ s16 pushedYaw; // Yaw direction of player being pushed /* 0x08B4 */ WeaponInfo meleeWeaponInfo[3]; /* 0x0908 */ Vec3f bodyPartsPos[PLAYER_BODYPART_MAX]; @@ -923,9 +966,11 @@ typedef struct Player { /* 0x0A60 */ u8 bodyIsBurning; /* 0x0A61 */ u8 bodyFlameTimers[PLAYER_BODYPART_MAX]; // one flame per body part /* 0x0A73 */ u8 unk_A73; - /* 0x0A74 */ AfterPutAwayFunc afterPutAwayFunc; // See `Player_SetupWaitForPutAway` and `Player_Action_WaitForPutAway` - /* 0x0A78 */ s8 invincibilityTimer; // prevents damage when nonzero. Positive values are intangibility, negative are invulnerability - /* 0x0A79 */ u8 floorTypeTimer; // counts up every frame the current floor type is the same as the last frame + /* 0x0A74 */ AfterPutAwayFunc + afterPutAwayFunc; // See `Player_SetupWaitForPutAway` and `Player_Action_WaitForPutAway` + /* 0x0A78 */ s8 invincibilityTimer; // prevents damage when nonzero. Positive values are intangibility, negative are + // invulnerability + /* 0x0A79 */ u8 floorTypeTimer; // counts up every frame the current floor type is the same as the last frame /* 0x0A7A */ u8 floorProperty; /* 0x0A7B */ u8 prevFloorType; /* 0x0A7C */ f32 prevControlStickMagnitude; @@ -935,8 +980,8 @@ typedef struct Player { /* 0x0A86 */ s8 unk_A86; /* 0x0A87 */ u8 unk_A87; /* 0x0A88 */ Vec3f unk_A88; // previous body part 0 position - // #region SOH [General] - // Upstream TODO: Rename these to be more obviously SoH specific + // #region SOH [General] + // Upstream TODO: Rename these to be more obviously SoH specific /* */ PendingFlag pendingFlag; /* */ GetItemEntry getItemEntry; // #endregion @@ -946,6 +991,14 @@ typedef struct Player { /* */ u8 ivanFloating; /* */ u8 ivanDamageMultiplier; // #endregion + + // CUSTOM + int numJumps; + bool isGliding; + int glideResetTimer; + bool landedAfterGliding; + int personalUpdraftTimer; + } Player; // size = 0xA94 #endif diff --git a/soh/include/z64save.h b/soh/include/z64save.h index f7873031f..cf24c8209 100644 --- a/soh/include/z64save.h +++ b/soh/include/z64save.h @@ -11,41 +11,45 @@ #include "soh/Enhancements/boss-rush/BossRushTypes.h" typedef enum { - /* 0x0 */ MAGIC_STATE_IDLE, // Regular gameplay + /* 0x0 */ MAGIC_STATE_IDLE, // Regular gameplay /* 0x1 */ MAGIC_STATE_CONSUME_SETUP, // Sets the speed at which magic border flashes - /* 0x2 */ MAGIC_STATE_CONSUME, // Consume magic until target is reached or no more magic is available + /* 0x2 */ MAGIC_STATE_CONSUME, // Consume magic until target is reached or no more magic is available /* 0x3 */ MAGIC_STATE_METER_FLASH_1, // Flashes border and freezes Dark Link /* 0x4 */ MAGIC_STATE_METER_FLASH_2, // Flashes border and draws yellow magic to preview target consumption - /* 0x5 */ MAGIC_STATE_RESET, // Reset colors and return to idle + /* 0x5 */ MAGIC_STATE_RESET, // Reset colors and return to idle /* 0x6 */ MAGIC_STATE_METER_FLASH_3, // Flashes border with no additional behaviour - /* 0x7 */ MAGIC_STATE_CONSUME_LENS, // Magic slowly consumed by lens. + /* 0x7 */ MAGIC_STATE_CONSUME_LENS, // Magic slowly consumed by lens. /* 0x8 */ MAGIC_STATE_STEP_CAPACITY, // Step `magicCapacity` to full capacity - /* 0x9 */ MAGIC_STATE_FILL, // Add magic until magicFillTarget is reached. - /* 0xA */ MAGIC_STATE_ADD // Add requested magic + /* 0x9 */ MAGIC_STATE_FILL, // Add magic until magicFillTarget is reached. + /* 0xA */ MAGIC_STATE_ADD // Add requested magic } MagicState; typedef enum { - /* 0 */ MAGIC_CONSUME_NOW, // Consume Magic immediately without preview - /* 1 */ MAGIC_CONSUME_WAIT_NO_PREVIEW, // Sets consume target but waits to consume. No yellow magic preview to target consumption. Unused - /* 2 */ MAGIC_CONSUME_NOW_ALT, // Identical behaviour to MAGIC_CONSUME_NOW. Unused - /* 3 */ MAGIC_CONSUME_LENS, // Lens consumption - /* 4 */ MAGIC_CONSUME_WAIT_PREVIEW, // Sets consume target but waits to consume. Draws yellow magic to target consumption - /* 5 */ MAGIC_ADD // Sets a target to add magic + /* 0 */ MAGIC_CONSUME_NOW, // Consume Magic immediately without preview + /* 1 */ MAGIC_CONSUME_WAIT_NO_PREVIEW, // Sets consume target but waits to consume. No yellow magic preview to + // target consumption. Unused + /* 2 */ MAGIC_CONSUME_NOW_ALT, // Identical behaviour to MAGIC_CONSUME_NOW. Unused + /* 3 */ MAGIC_CONSUME_LENS, // Lens consumption + /* 4 */ MAGIC_CONSUME_WAIT_PREVIEW, // Sets consume target but waits to consume. Draws yellow magic to target + // consumption + /* 5 */ MAGIC_ADD // Sets a target to add magic } MagicChangeType; #define MAGIC_NORMAL_METER 0x30 #define MAGIC_DOUBLE_METER (2 * MAGIC_NORMAL_METER) typedef struct { - /* 0x00 */ u8 buttonItems[8]; // SOH [Enhancements] Changed from 4 to 8 to support Dpad equips + /* 0x00 */ u8 buttonItems[8]; // SOH [Enhancements] Changed from 4 to 8 to support Dpad equips /* 0x04 */ u8 cButtonSlots[7]; // SOH [Enhancements] Changed from 3 to 7 to support Dpad equips - /* 0x08 */ u16 equipment; // a mask where each nibble corresponds to a type of equipment `EquipmentType`, and each nibble is a piece `EquipValue*` -} ItemEquips; // size = 0x0A + /* 0x08 */ u16 equipment; // a mask where each nibble corresponds to a type of equipment `EquipmentType`, and each + // nibble is a piece `EquipValue*` +} ItemEquips; // size = 0x0A typedef struct { - /* 0x00 */ u8 items[24]; + /* 0x00 */ u8 items[25]; /* 0x18 */ s8 ammo[16]; - /* 0x28 */ u16 equipment; // a mask where each nibble corresponds to a type of equipment `EquipmentType`, and each bit to an owned piece `EquipInv*` + /* 0x28 */ u16 equipment; // a mask where each nibble corresponds to a type of equipment `EquipmentType`, and each + // bit to an owned piece `EquipInv*` /* 0x2C */ u32 upgrades; /* 0x30 */ u32 questItems; /* 0x34 */ u8 dungeonItems[20]; @@ -186,7 +190,8 @@ typedef struct ShipSaveContextData { FaroresWindData backupFW; ShipQuestSaveContextData quest; u8 maskMemory; - //TODO: Move non-rando specific flags to a new sohInf and move the remaining randomizerInf to ShipRandomizerSaveContextData + // TODO: Move non-rando specific flags to a new sohInf and move the remaining randomizerInf to + // ShipRandomizerSaveContextData u16 randomizerInf[(RAND_INF_MAX + 15) / 16]; } ShipSaveContextData; @@ -194,20 +199,20 @@ typedef struct ShipSaveContextData { typedef struct { /* 0x0000 */ s32 entranceIndex; // start of `save` substruct, originally called "memory" - /* 0x0004 */ s32 linkAge; // 0: Adult; 1: Child (see enum `LinkAge`) + /* 0x0004 */ s32 linkAge; // 0: Adult; 1: Child (see enum `LinkAge`) /* 0x0008 */ s32 cutsceneIndex; /* 0x000C */ u16 dayTime; // "zelda_time" /* 0x0010 */ s32 nightFlag; /* 0x0014 */ s32 totalDays; /* 0x0018 */ s32 bgsDayCount; // increments with totalDays, can be cleared with `Environment_ClearBgsDayCount` - /* 0x001C */ char newf[6]; // string "ZELDAZ". start of `info` substruct, originally called "information" + /* 0x001C */ char newf[6]; // string "ZELDAZ". start of `info` substruct, originally called "information" /* 0x0022 */ u16 deaths; /* 0x0024 */ char playerName[8]; /* 0x002C */ s16 n64ddFlag; /* 0x002E */ s16 healthCapacity; // "max_life" - /* 0x0030 */ s16 health; // "now_life" - /* 0x0032 */ s8 magicLevel; // 0 for no magic/new load, 1 for magic, 2 for double magic - /* 0x0033 */ s8 magic; // current magic available for use + /* 0x0030 */ s16 health; // "now_life" + /* 0x0032 */ s8 magicLevel; // 0 for no magic/new load, 1 for magic, 2 for double magic + /* 0x0033 */ s8 magic; // current magic available for use /* 0x0034 */ s16 rupees; /* 0x0036 */ u16 swordHealth; /* 0x0038 */ u16 naviTimer; @@ -231,8 +236,8 @@ typedef struct { /* 0x0EB4 */ char unk_EB4[0x4]; /* 0x0EB8 */ s32 highScores[7]; /* 0x0ED4 */ u16 eventChkInf[14]; // "event_chk_inf" - /* 0x0EF0 */ u16 itemGetInf[4]; // "item_get_inf" - /* 0x0EF8 */ u16 infTable[30]; // "inf_table" + /* 0x0EF0 */ u16 itemGetInf[4]; // "item_get_inf" + /* 0x0EF8 */ u16 infTable[30]; // "inf_table" /* 0x0F34 */ char unk_F34[0x04]; /* 0x0F38 */ u32 worldMapAreaData; // "area_arrival" /* 0x0F3C */ char unk_F3C[0x4]; @@ -244,11 +249,11 @@ typedef struct { /* 0x1346 */ char unk_1346[0x02]; /* 0x1348 */ HorseData horseData; /* 0x1352 */ u16 checksum; // "check_sum" - /* 0x1354 */ s32 fileNum; // "file_no" + /* 0x1354 */ s32 fileNum; // "file_no" /* 0x1358 */ char unk_1358[0x0004]; /* 0x135C */ s32 gameMode; - /* 0x1360 */ s32 sceneSetupIndex; // "counter" // Upstream TODO: sceneLayer - /* 0x1364 */ s32 respawnFlag; // "restart_flag" + /* 0x1360 */ s32 sceneSetupIndex; // "counter" // Upstream TODO: sceneLayer + /* 0x1364 */ s32 respawnFlag; // "restart_flag" /* 0x1368 */ RespawnData respawn[RESPAWN_MODE_MAX]; // "restart_data" /* 0x13BC */ f32 entranceSpeed; /* 0x13C0 */ u16 entranceSound; @@ -269,19 +274,20 @@ typedef struct { /* 0x13DE */ char unk_13DE[0x0002]; /* 0x13E0 */ u8 seqId; /* 0x13E1 */ u8 natureAmbienceId; - /* 0x13E2 */ u8 buttonStatus[9]; // SOH [Enhancements] Changed from 5 to 9 to support Dpad equips - /* 0x13E7 */ u8 unk_13E7; // alpha related - /* 0x13E8 */ u16 unk_13E8; // alpha type? - /* 0x13EA */ u16 unk_13EA; // also alpha type? - /* 0x13EC */ u16 unk_13EC; // alpha type counter? - /* 0x13EE */ u16 unk_13EE; // previous alpha type? - /* 0x13F0 */ s16 magicState; // determines magic meter behavior on each frame - /* 0x13F2 */ s16 prevMagicState; // used to resume the previous state after adding or filling magic - /* 0x13F4 */ s16 magicCapacity; // maximum magic available - /* 0x13F6 */ s16 magicFillTarget; // target used to fill magic. Target can either be full capacity (Magic_Fill, magic upgrades), or the saved magic amount (loading a file, game over) - /* 0x13F8 */ s16 magicTarget; // target for magic to step to when adding or consuming magic - /* 0x13FA */ u16 eventInf[4]; // "event_inf" - /* 0x1402 */ u16 mapIndex; // intended for maps/minimaps but commonly used as the dungeon index + /* 0x13E2 */ u8 buttonStatus[9]; // SOH [Enhancements] Changed from 5 to 9 to support Dpad equips + /* 0x13E7 */ u8 unk_13E7; // alpha related + /* 0x13E8 */ u16 unk_13E8; // alpha type? + /* 0x13EA */ u16 unk_13EA; // also alpha type? + /* 0x13EC */ u16 unk_13EC; // alpha type counter? + /* 0x13EE */ u16 unk_13EE; // previous alpha type? + /* 0x13F0 */ s16 magicState; // determines magic meter behavior on each frame + /* 0x13F2 */ s16 prevMagicState; // used to resume the previous state after adding or filling magic + /* 0x13F4 */ s16 magicCapacity; // maximum magic available + /* 0x13F6 */ s16 magicFillTarget; // target used to fill magic. Target can either be full capacity (Magic_Fill, + // magic upgrades), or the saved magic amount (loading a file, game over) + /* 0x13F8 */ s16 magicTarget; // target for magic to step to when adding or consuming magic + /* 0x13FA */ u16 eventInf[4]; // "event_inf" + /* 0x1402 */ u16 mapIndex; // intended for maps/minimaps but commonly used as the dungeon index /* 0x1404 */ u16 minigameState; /* 0x1406 */ u16 minigameScore; // "yabusame_total" /* 0x1408 */ char unk_1408[0x0001]; @@ -289,8 +295,9 @@ typedef struct { /* 0x140A */ u8 audioSetting; /* 0x140B */ char unk_140B[0x0001]; /* 0x140C */ u8 zTargetSetting; // 0: Switch; 1: Hold - /* 0x140E */ u16 forcedSeqId; // immediately start playing the sequence if set - /* 0x1410 */ u8 cutsceneTransitionControl; // context dependent usage: can either trigger a delayed fade or control fill alpha + /* 0x140E */ u16 forcedSeqId; // immediately start playing the sequence if set + /* 0x1410 */ u8 + cutsceneTransitionControl; // context dependent usage: can either trigger a delayed fade or control fill alpha /* 0x1411 */ char unk_1411[0x0001]; /* 0x1412 */ u16 nextCutsceneIndex; /* 0x1414 */ u8 cutsceneTrigger; @@ -335,7 +342,7 @@ typedef enum { } ChamberCutsceneNum; typedef enum { - /* 0x00 */ HS_HBA, // horseback archery + /* 0x00 */ HS_HBA, // horseback archery /* 0x01 */ HS_POE_POINTS, /* 0x02 */ HS_FISHING, /* 0x03 */ HS_HORSE_RACE, @@ -358,9 +365,9 @@ typedef enum { typedef enum { /* 0 */ SUNSSONG_INACTIVE, - /* 1 */ SUNSSONG_START, // the suns ocarina effect signals that the song has finished playing + /* 1 */ SUNSSONG_START, // the suns ocarina effect signals that the song has finished playing /* 2 */ SUNSSONG_SPEED_TIME, // suns was played where time passes, speed up the advancement of time - /* 3 */ SUNSSONG_SPECIAL // time does not advance, but signals the song was played. used for freezing redeads + /* 3 */ SUNSSONG_SPECIAL // time does not advance, but signals the song was played. used for freezing redeads } SunsSongState; typedef enum { @@ -385,15 +392,12 @@ typedef enum { /* 1 */ LINK_AGE_CHILD } LinkAge; - - /* * * SaveContext flags * */ - /* * SaveContext.eventChkInf */ @@ -480,7 +484,8 @@ typedef enum { #define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX 6 #define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_SHIFT 11 #define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_MASK (1 << EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_SHIFT) -#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO ((EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX << 4) | EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_SHIFT) +#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO \ + ((EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX << 4) | EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_SHIFT) #define EVENTCHKINF_6E 0x6E #define EVENTCHKINF_SPOKE_TO_KAEPORA_BY_LOST_WOODS 0x6F @@ -506,11 +511,9 @@ typedef enum { #define EVENTCHKINF_CARPENTERS_FREE_SHIFT(n) (0 + (n)) #define EVENTCHKINF_CARPENTERS_FREE_MASK(n) (1 << EVENTCHKINF_CARPENTERS_FREE_SHIFT(n)) #define EVENTCHKINF_CARPENTERS_FREE(n) ((EVENTCHKINF_CARPENTERS_FREE_INDEX << 4) | EVENTCHKINF_CARPENTERS_FREE_SHIFT(n)) -#define EVENTCHKINF_CARPENTERS_FREE_MASK_ALL (\ - EVENTCHKINF_CARPENTERS_FREE_MASK(0) \ - | EVENTCHKINF_CARPENTERS_FREE_MASK(1) \ - | EVENTCHKINF_CARPENTERS_FREE_MASK(2) \ - | EVENTCHKINF_CARPENTERS_FREE_MASK(3) ) +#define EVENTCHKINF_CARPENTERS_FREE_MASK_ALL \ + (EVENTCHKINF_CARPENTERS_FREE_MASK(0) | EVENTCHKINF_CARPENTERS_FREE_MASK(1) | EVENTCHKINF_CARPENTERS_FREE_MASK(2) | \ + EVENTCHKINF_CARPENTERS_FREE_MASK(3)) #define GET_EVENTCHKINF_CARPENTERS_FREE_ALL() \ CHECK_FLAG_ALL(gSaveContext.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX], EVENTCHKINF_CARPENTERS_FREE_MASK_ALL) @@ -558,27 +561,33 @@ typedef enum { // 0xD0-0xD6 #define EVENTCHKINF_SONGS_FOR_FROGS_INDEX 13 -#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT 0 -#define EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT 1 -#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT 2 -#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT 3 -#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT 4 -#define EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT 5 +#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT 0 +#define EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT 1 +#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT 2 +#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT 3 +#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT 4 +#define EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT 5 #define EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT 6 -#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT) -#define EVENTCHKINF_SONGS_FOR_FROGS_ZL_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT) -#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT) -#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT) -#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT) -#define EVENTCHKINF_SONGS_FOR_FROGS_SOT_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_ZL_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_SOT_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_STORMS_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT) -#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT) -#define EVENTCHKINF_SONGS_FOR_FROGS_ZL ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT) -#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT) -#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT) -#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT) -#define EVENTCHKINF_SONGS_FOR_FROGS_SOT ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT) -#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR \ + ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_ZL ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA \ + ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS \ + ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA \ + ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_SOT \ + ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS \ + ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT) // 0xDA-0xDE #define EVENTCHKINF_SKULLTULA_REWARD_INDEX 13 @@ -593,7 +602,6 @@ typedef enum { #define EVENTCHKINF_SKULLTULA_REWARD_40_MASK (1 << EVENTCHKINF_SKULLTULA_REWARD_40_SHIFT) #define EVENTCHKINF_SKULLTULA_REWARD_50_MASK (1 << EVENTCHKINF_SKULLTULA_REWARD_50_SHIFT) - /* * SaveContext.itemGetInf */ @@ -652,7 +660,6 @@ typedef enum { #define ITEMGETINF_3B 0x3B #define ITEMGETINF_3F 0x3F - /* * SaveContext.infTable */ @@ -752,13 +759,13 @@ typedef enum { #define INFTABLE_12A 0x12A #define INFTABLE_138 0x138 #define INFTABLE_139 0x139 -#define INFTABLE_140 0x140 // Left her on blue switch in fork room (causes her to spawn in fork room) +#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 // Jumped down hole from hole room #define INFTABLE_RUTO_IN_JJ_TALK_FIRST_TIME 0x142 // in the basement #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 // Entered the room with the sapphire -#define INFTABLE_145 0x145 // Thrown to sapphire (not kidnapped yet) -#define INFTABLE_146 0x146 // Kidnapped +#define INFTABLE_145 0x145 // Thrown to sapphire (not kidnapped yet) +#define INFTABLE_146 0x146 // Kidnapped #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_161 0x161 @@ -813,7 +820,6 @@ typedef enum { #define INFTABLE_1DX_INDEX 29 #define INFTABLE_SWORDLESS 0x1D0 - /* * SaveContext.eventInf */ @@ -873,7 +879,6 @@ typedef enum { gSaveContext.eventInf[EVENTINF_HORSES_INDEX] = \ (gSaveContext.eventInf[EVENTINF_HORSES_INDEX] & ~EVENTINF_HORSES_0F_MASK) | ((v) << EVENTINF_HORSES_0F_SHIFT) - #define EVENTINF_MARATHON_ACTIVE 0x10 // 0x20-0x24 @@ -886,6 +891,4 @@ typedef enum { #define EVENTINF_30 0x30 - - #endif diff --git a/soh/soh/ActorDB.cpp b/soh/soh/ActorDB.cpp index 8b7c43ee6..043ef8b68 100644 --- a/soh/soh/ActorDB.cpp +++ b/soh/soh/ActorDB.cpp @@ -4,7 +4,6 @@ ActorDB* ActorDB::Instance; - #define DEFINE_ACTOR(name, _1, _2) extern "C" ActorInit name##_InitVars; #define DEFINE_ACTOR_INTERNAL(name, _1, _2) extern "C" ActorInit name##_InitVars; #define DEFINE_ACTOR_UNSET(_0) @@ -463,8 +462,11 @@ static constexpr std::pair actorDescriptionData[] = { { ACTOR_EN_MM2, "Running Man (Adult Era)" }, { ACTOR_BG_JYA_BLOCK, "Silver Block (Child Era)" }, { ACTOR_OBJ_WARP2BLOCK, "Navi Infospot (Green, Time Block)" }, + // CUSTOM + { ACTOR_EN_GLIDER, "Glider" }, }; -static std::unordered_map actorDescriptions = std::unordered_map(std::begin(actorDescriptionData), std::end(actorDescriptionData)); +static std::unordered_map actorDescriptions = + std::unordered_map(std::begin(actorDescriptionData), std::end(actorDescriptionData)); ActorDB::ActorDB() { db.reserve(ACTOR_NUMBER_MAX); // reserve size for all initial entries so we don't do it for each @@ -475,7 +477,8 @@ ActorDB::ActorDB() { // Adds an actor at the given index. The name must be unique. ActorDB::Entry& ActorDB::AddEntry(const std::string& name, const std::string& desc, size_t index) { - assert(!nameTable.contains(name)); // TODO this should maybe throw instead. We'll need to think about error handling for mods that try to declare the same actor. + assert(!nameTable.contains(name)); // TODO this should maybe throw instead. We'll need to think about error handling + // for mods that try to declare the same actor. if (db.size() < (index + 1)) { db.resize(index + 1); @@ -513,7 +516,8 @@ ActorDB::Entry& ActorDB::AddEntry(const std::string& name, const std::string& de return entry; } -// Adds an actor with the new ActorDBInit struct. The id assigned to the actor is dynamic. Use the return Entry or RetrieveId to get it. +// Adds an actor with the new ActorDBInit struct. The id assigned to the actor is dynamic. Use the return Entry or +// RetrieveId to get it. ActorDB::Entry& ActorDB::AddEntry(const ActorDBInit& init) { Entry& entry = AddEntry(init.name, init.desc, nextFreeId); @@ -598,7 +602,8 @@ static ActorDBInit EnPartnerInit = { "En_Partner", "Ivan", ACTORCAT_ITEMACTION, - (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER | ACTOR_FLAG_CAN_PRESS_SWITCHES), + (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER | + ACTOR_FLAG_CAN_PRESS_SWITCHES), OBJECT_GAMEPLAY_KEEP, sizeof(EnPartner), (ActorFunc)EnPartner_Init, diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp index 96163f656..cb18aa48a 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp @@ -74,11 +74,11 @@ u8 gAllAmmoItems[] = { }; // Encapsulates what is drawn by the passed-in function within a border -template -void DrawGroupWithBorder(T&& drawFunc, std::string section) { +template void DrawGroupWithBorder(T&& drawFunc, std::string section) { // First group encapsulates the inner portion and border ImGui::BeginChild(std::string("##" + section).c_str(), ImVec2(0, 0), - ImGuiChildFlags_AlwaysAutoResize | ImGuiChildFlags_Borders | ImGuiChildFlags_AutoResizeX | ImGuiChildFlags_AutoResizeY); + ImGuiChildFlags_AlwaysAutoResize | ImGuiChildFlags_Borders | ImGuiChildFlags_AutoResizeX | + ImGuiChildFlags_AutoResizeY); ImGui::BeginGroup(); ImGui::AlignTextToFramePadding(); @@ -90,13 +90,13 @@ void DrawGroupWithBorder(T&& drawFunc, std::string section) { char z2ASCII(int code) { int ret; - if (code < 10) { //Digits + if (code < 10) { // Digits ret = code + 0x30; - } else if (code >= 10 && code < 36) { //Uppercase letters + } else if (code >= 10 && code < 36) { // Uppercase letters ret = code + 0x37; - } else if (code >= 36 && code < 62) { //Lowercase letters + } else if (code >= 36 && code < 62) { // Lowercase letters ret = code + 0x3D; - } else if (code == 62) { //Space + } else if (code == 62) { // Space ret = code - 0x1E; } else if (code == 63 || code == 64) { // _ and . ret = code - 0x12; @@ -104,17 +104,12 @@ char z2ASCII(int code) { ret = code; } return char(ret); - } -typedef enum MagicLevel { - MAGIC_LEVEL_NONE, - MAGIC_LEVEL_SINGLE, - MAGIC_LEVEL_DOUBLE -}; +typedef enum MagicLevel { MAGIC_LEVEL_NONE, MAGIC_LEVEL_SINGLE, MAGIC_LEVEL_DOUBLE }; std::unordered_map magicLevelMap = { - { MAGIC_LEVEL_NONE, "None" }, + { MAGIC_LEVEL_NONE, "None" }, { MAGIC_LEVEL_SINGLE, "Single" }, { MAGIC_LEVEL_DOUBLE, "Double" }, }; @@ -182,18 +177,22 @@ void DrawInfoTab() { gSaveContext.health = gSaveContext.healthCapacity; // Clamp health to new max } int32_t health = (int32_t)gSaveContext.health; - if (SliderInt("Health", &health, intSliderOptionsBase.Tooltip("Current health. 16 units per full heart") - .Min(0).Max(gSaveContext.healthCapacity))) { + if (SliderInt("Health", &health, + intSliderOptionsBase.Tooltip("Current health. 16 units per full heart") + .Min(0) + .Max(gSaveContext.healthCapacity))) { gSaveContext.health = (int16_t)health; } bool isDoubleDefenseAcquired = gSaveContext.isDoubleDefenseAcquired != 0; - if (Checkbox("Double Defense", &isDoubleDefenseAcquired, checkboxOptionsBase.Tooltip("Is double defense unlocked?"))) { + if (Checkbox("Double Defense", &isDoubleDefenseAcquired, + checkboxOptionsBase.Tooltip("Is double defense unlocked?"))) { gSaveContext.isDoubleDefenseAcquired = isDoubleDefenseAcquired; gSaveContext.inventory.defenseHearts = gSaveContext.isDoubleDefenseAcquired ? 20 : 0; // Set to get the border drawn in the UI } - if (Combobox("Magic Level", &gSaveContext.magicLevel, magicLevelMap, comboboxOptionsBase.Tooltip("Current magic level"))) { + if (Combobox("Magic Level", &gSaveContext.magicLevel, magicLevelMap, + comboboxOptionsBase.Tooltip("Current magic level"))) { gSaveContext.isMagicAcquired = gSaveContext.magicLevel > 0; gSaveContext.isDoubleMagicAcquired = gSaveContext.magicLevel == 2; } @@ -203,7 +202,10 @@ void DrawInfoTab() { } int32_t magic = (int32_t)gSaveContext.magic; - if (SliderInt("Magic", &magic, intSliderOptionsBase.Min(0).Max(gSaveContext.magicCapacity).Tooltip("Current magic. 48 units per magic level"))) { + if (SliderInt("Magic", &magic, + intSliderOptionsBase.Min(0) + .Max(gSaveContext.magicCapacity) + .Tooltip("Current magic. 48 units per magic level"))) { gSaveContext.magic = (int8_t)magic; } @@ -212,7 +214,7 @@ void DrawInfoTab() { Tooltip("Current rupees"); PopStyleInput(); - SliderInt("Time", (int32_t*) &gSaveContext.dayTime, intSliderOptionsBase.Min(0).Max(0xFFFF).Tooltip("Time of day")); + SliderInt("Time", (int32_t*)&gSaveContext.dayTime, intSliderOptionsBase.Min(0).Max(0xFFFF).Tooltip("Time of day")); if (Button("Dawn", buttonOptionsBase)) { gSaveContext.dayTime = 0x4000; } @@ -239,7 +241,8 @@ void DrawInfoTab() { Tooltip("Total number of deaths"); PopStyleInput(); - Checkbox("Has BGS", (bool*) &gSaveContext.bgsFlag, checkboxOptionsBase.Tooltip("Is Biggoron sword unlocked? Replaces Giant's knife")); + Checkbox("Has BGS", (bool*)&gSaveContext.bgsFlag, + checkboxOptionsBase.Tooltip("Is Biggoron sword unlocked? Replaces Giant's knife")); PushStyleInput(THEME_COLOR); ImGui::InputScalar("Sword Health", ImGuiDataType_U16, &gSaveContext.swordHealth); @@ -287,98 +290,108 @@ void DrawInfoTab() { PopStyleInput(); Combobox("Audio", &gSaveContext.audioSetting, audioMap, comboboxOptionsBase.Tooltip("Sound setting")); - - Checkbox("64 DD file?", (bool*) &gSaveContext.n64ddFlag, checkboxOptionsBase.Tooltip("WARNING! If you save, your file may be locked! Use caution!")); - - Combobox("Z Target Mode", &gSaveContext.zTargetSetting, zTargetMap, comboboxOptionsBase.Tooltip("Z-Targeting behavior")); + + Checkbox("64 DD file?", (bool*)&gSaveContext.n64ddFlag, + checkboxOptionsBase.Tooltip("WARNING! If you save, your file may be locked! Use caution!")); + + Combobox("Z Target Mode", &gSaveContext.zTargetSetting, zTargetMap, + comboboxOptionsBase.Tooltip("Z-Targeting behavior")); if (IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT)) { PushStyleInput(THEME_COLOR); - ImGui::InputScalar("Triforce Pieces", ImGuiDataType_U8, &gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected); + ImGui::InputScalar("Triforce Pieces", ImGuiDataType_U8, + &gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected); Tooltip("Currently obtained Triforce Pieces. For Triforce Hunt."); PopStyleInput(); } ImGui::PushItemWidth(ImGui::GetFontSize() * 10); - static std::array minigameHS = { "Horseback Archery", - "Big Poe Points", - "Fishing", - "Malon's Obstacle Course", - "Running Man Race", - "?", - "Dampe's Race" }; - + static std::array minigameHS = { "Horseback Archery", "Big Poe Points", + "Fishing", "Malon's Obstacle Course", + "Running Man Race", "?", + "Dampe's Race" }; + if (ImGui::TreeNode("Minigames")) { for (int i = 0; i < 7; i++) { - if(i == 2 && ImGui::TreeNode("Fishing") ){ //fishing has a few more flags to it + if (i == 2 && ImGui::TreeNode("Fishing")) { // fishing has a few more flags to it u8 fishSize = gSaveContext.highScores[i] & 0x7F; PushStyleInput(THEME_COLOR); - if(ImGui::InputScalar("Child Size Record",ImGuiDataType_U8,&fishSize)){ - gSaveContext.highScores[i]&=~0x7F; - gSaveContext.highScores[i]|=fishSize & 0x7F; + if (ImGui::InputScalar("Child Size Record", ImGuiDataType_U8, &fishSize)) { + gSaveContext.highScores[i] &= ~0x7F; + gSaveContext.highScores[i] |= fishSize & 0x7F; } char fishMsg[64]; - std::sprintf(fishMsg,"Weight: %2.0f lbs",((SQ(fishSize)*.0036)+.5)); + std::sprintf(fishMsg, "Weight: %2.0f lbs", ((SQ(fishSize) * .0036) + .5)); Tooltip(fishMsg); PopStyleInput(); - bool FishBool = gSaveContext.highScores[i]&0x80; - if (Checkbox("Cheated as Child", &FishBool, checkboxOptionsBase.Tooltip("Used the Sinking lure to catch it."))) { - gSaveContext.highScores[i] &= ~0x80; - gSaveContext.highScores[i] |= (0x80 * FishBool); + bool FishBool = gSaveContext.highScores[i] & 0x80; + if (Checkbox("Cheated as Child", &FishBool, + checkboxOptionsBase.Tooltip("Used the Sinking lure to catch it."))) { + gSaveContext.highScores[i] &= ~0x80; + gSaveContext.highScores[i] |= (0x80 * FishBool); } - fishSize=(gSaveContext.highScores[i] & 0x7F000000)>>0x18; + fishSize = (gSaveContext.highScores[i] & 0x7F000000) >> 0x18; PushStyleInput(THEME_COLOR); - if(ImGui::InputScalar("Adult Size Record",ImGuiDataType_U8,&fishSize)){ - gSaveContext.highScores[i]&=~0x7F000000; - gSaveContext.highScores[i]|=(fishSize & 0x7F) << 0x18; + if (ImGui::InputScalar("Adult Size Record", ImGuiDataType_U8, &fishSize)) { + gSaveContext.highScores[i] &= ~0x7F000000; + gSaveContext.highScores[i] |= (fishSize & 0x7F) << 0x18; } - std::sprintf(fishMsg,"Weight: %2.0f lbs",((SQ(fishSize)*.0036)+.5)); + std::sprintf(fishMsg, "Weight: %2.0f lbs", ((SQ(fishSize) * .0036) + .5)); Tooltip(fishMsg); PopStyleInput(); FishBool = gSaveContext.highScores[i] & 0x80000000; - if (Checkbox("Cheated as Adult", &FishBool, checkboxOptionsBase.Tooltip("Used the Sinking lure to catch it."))) { - gSaveContext.highScores[i] &= ~0x80000000; - gSaveContext.highScores[i] |= (0x80000000 * FishBool); + if (Checkbox("Cheated as Adult", &FishBool, + checkboxOptionsBase.Tooltip("Used the Sinking lure to catch it."))) { + gSaveContext.highScores[i] &= ~0x80000000; + gSaveContext.highScores[i] |= (0x80000000 * FishBool); } - FishBool = gSaveContext.highScores[i]&0x100; - if (Checkbox("Played as Child", &FishBool, checkboxOptionsBase.Tooltip("Played at least one game as a child"))) { - gSaveContext.highScores[i] &= ~0x100; - gSaveContext.highScores[i] |= (0x100 * FishBool); + FishBool = gSaveContext.highScores[i] & 0x100; + if (Checkbox("Played as Child", &FishBool, + checkboxOptionsBase.Tooltip("Played at least one game as a child"))) { + gSaveContext.highScores[i] &= ~0x100; + gSaveContext.highScores[i] |= (0x100 * FishBool); } - FishBool = gSaveContext.highScores[i]&0x200; - if (Checkbox("Played as Adult", &FishBool, checkboxOptionsBase.Tooltip("Played at least one game as an adult"))) { - gSaveContext.highScores[i] &= ~0x200; - gSaveContext.highScores[i] |= (0x200 * FishBool); + FishBool = gSaveContext.highScores[i] & 0x200; + if (Checkbox("Played as Adult", &FishBool, + checkboxOptionsBase.Tooltip("Played at least one game as an adult"))) { + gSaveContext.highScores[i] &= ~0x200; + gSaveContext.highScores[i] |= (0x200 * FishBool); } - FishBool = gSaveContext.highScores[i]&0x400; - if (Checkbox("Got Prize as Child", &FishBool, checkboxOptionsBase.Tooltip("Got the prize item (Heart Piece, unless rando.)\nunlocks Sinking Lure for Child Link."))) { - gSaveContext.highScores[i] &= ~0x400; - gSaveContext.highScores[i] |= (0x400 * FishBool); + FishBool = gSaveContext.highScores[i] & 0x400; + if (Checkbox( + "Got Prize as Child", &FishBool, + checkboxOptionsBase.Tooltip( + "Got the prize item (Heart Piece, unless rando.)\nunlocks Sinking Lure for Child Link."))) { + gSaveContext.highScores[i] &= ~0x400; + gSaveContext.highScores[i] |= (0x400 * FishBool); } - FishBool = gSaveContext.highScores[i]&0x800; - if (Checkbox("Got Prize as Adult", &FishBool, checkboxOptionsBase.Tooltip("Got the prize item (Golden Scale, unless rando.)\nUnlocks Sinking Lure for Adult Link."))) { - gSaveContext.highScores[i] &= ~0x800; - gSaveContext.highScores[i] |= (0x800 * FishBool); + FishBool = gSaveContext.highScores[i] & 0x800; + if (Checkbox("Got Prize as Adult", &FishBool, + checkboxOptionsBase.Tooltip("Got the prize item (Golden Scale, unless rando.)\nUnlocks " + "Sinking Lure for Adult Link."))) { + gSaveContext.highScores[i] &= ~0x800; + gSaveContext.highScores[i] |= (0x800 * FishBool); } FishBool = gSaveContext.highScores[i] & 0x1000; - if (Checkbox("Stole Owner's Hat", &FishBool, checkboxOptionsBase.Tooltip("The owner's now visibly bald when Adult Link."))) { - gSaveContext.highScores[i] &= ~0x1000; - gSaveContext.highScores[i] |= (0x1000 * FishBool); + if (Checkbox("Stole Owner's Hat", &FishBool, + checkboxOptionsBase.Tooltip("The owner's now visibly bald when Adult Link."))) { + gSaveContext.highScores[i] &= ~0x1000; + gSaveContext.highScores[i] |= (0x1000 * FishBool); } - fishSize=(gSaveContext.highScores[i] & 0xFF0000)>>16; + fishSize = (gSaveContext.highScores[i] & 0xFF0000) >> 16; PushStyleInput(THEME_COLOR); - if(ImGui::InputScalar("Times Played",ImGuiDataType_U8,&fishSize)){ - gSaveContext.highScores[i]&=~0xFF0000; - gSaveContext.highScores[i]|=(fishSize) << 16; + if (ImGui::InputScalar("Times Played", ImGuiDataType_U8, &fishSize)) { + gSaveContext.highScores[i] &= ~0xFF0000; + gSaveContext.highScores[i] |= (fishSize) << 16; } Tooltip("Determines weather and school size during dawn/dusk."); PopStyleInput(); - + ImGui::TreePop(); continue; } - - if (i == 5 || i == 2) { //HS_UNK_05 is unused + + if (i == 5 || i == 2) { // HS_UNK_05 is unused continue; } std::string minigameLbl = minigameHS[i]; @@ -386,10 +399,10 @@ void DrawInfoTab() { ImGui::InputScalar(minigameLbl.c_str(), ImGuiDataType_S32, &gSaveContext.highScores[i], &one, NULL); PopStyleInput(); } - + ImGui::TreePop(); } - + ImGui::PopItemWidth(); } @@ -402,7 +415,9 @@ void DrawBGSItemFlag(uint8_t itemID) { void DrawInventoryTab() { static bool restrictToValid = true; - Checkbox("Restrict to valid items", &restrictToValid, checkboxOptionsBase.Tooltip("Restricts items and ammo to only what is possible to legally acquire in-game")); + Checkbox( + "Restrict to valid items", &restrictToValid, + checkboxOptionsBase.Tooltip("Restricts items and ammo to only what is possible to legally acquire in-game")); for (int32_t y = 0; y < 4; y++) { for (int32_t x = 0; x < 6; x++) { @@ -420,8 +435,10 @@ void DrawInventoryTab() { PushStyleButton(Colors::DarkGray); if (item != ITEM_NONE) { const ItemMapEntry& slotEntry = itemMapping.find(item)->second; - auto ret = ImGui::ImageButton(slotEntry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), - ImVec2(48.0f, 48.0f), ImVec2(0, 0), ImVec2(1, 1)); + auto ret = ImGui::ImageButton( + slotEntry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), + ImVec2(48.0f, 48.0f), ImVec2(0, 0), ImVec2(1, 1)); if (ret) { selectedIndex = index; ImGui::OpenPopup(itemPopupPicker); @@ -437,7 +454,8 @@ void DrawInventoryTab() { ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0)); if (ImGui::BeginPopup(itemPopupPicker)) { PushStyleButton(Colors::DarkGray); - if (ImGui::Button("##itemNonePicker", ImVec2(IMAGE_SIZE, IMAGE_SIZE) + ImGui::GetStyle().FramePadding * 2)) { + if (ImGui::Button("##itemNonePicker", + ImVec2(IMAGE_SIZE, IMAGE_SIZE) + ImGui::GetStyle().FramePadding * 2)) { gSaveContext.inventory.items[selectedIndex] = ITEM_NONE; ImGui::CloseCurrentPopup(); } @@ -468,8 +486,10 @@ void DrawInventoryTab() { } const ItemMapEntry& slotEntry = possibleItems[pickerIndex]; PushStyleButton(Colors::DarkGray); - auto ret = ImGui::ImageButton(slotEntry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), - ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); + auto ret = ImGui::ImageButton( + slotEntry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), + ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); PopStyleButton(); if (ret) { gSaveContext.inventory.items[selectedIndex] = slotEntry.id; @@ -501,7 +521,8 @@ void DrawInventoryTab() { ImGui::PushItemWidth(IMAGE_SIZE); ImGui::BeginGroup(); - ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(itemMapping[item].name), ImVec2(IMAGE_SIZE, IMAGE_SIZE)); + ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(itemMapping[item].name), + ImVec2(IMAGE_SIZE, IMAGE_SIZE)); PushStyleInput(THEME_COLOR); ImGui::InputScalar("##ammoInput", ImGuiDataType_S8, &AMMO(item)); PopStyleInput(); @@ -511,11 +532,11 @@ void DrawInventoryTab() { ImGui::PopID(); } } - + // Trade quest flags are only used when shuffling the trade sequence, so // don't show this if it isn't needed. - if (IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_ADULT_TRADE) - && ImGui::TreeNode("Adult trade quest items")) { + if (IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_ADULT_TRADE) && + ImGui::TreeNode("Adult trade quest items")) { for (int i = ITEM_POCKET_EGG; i <= ITEM_CLAIM_CHECK; i++) { DrawBGSItemFlag(i); } @@ -532,7 +553,7 @@ void DrawFlagTableArray16(const FlagTable& flagTable, uint16_t row, uint16_t& fl bool hasDescription = !!flagTable.flagDescriptions.contains(row * 16 + flagIndex); uint32_t bitMask = 1 << flagIndex; ImVec4 themeColor = ColorValues.at(THEME_COLOR); - ImVec4 colorDark = { themeColor.x * 0.4f, themeColor.y * 0.4f, themeColor.z * 0.4f , themeColor.z }; + ImVec4 colorDark = { themeColor.x * 0.4f, themeColor.y * 0.4f, themeColor.z * 0.4f, themeColor.z }; PushStyleCheckbox(hasDescription ? themeColor : colorDark); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(4.0f, 3.0f)); bool flag = (flags & bitMask) != 0; @@ -560,158 +581,182 @@ void DrawFlagsTab() { if (gPlayState != nullptr) { Player* player = GET_PLAYER(gPlayState); - DrawGroupWithBorder([&]() { - ImGui::Text("stateFlags1"); - DrawFlagArray32("stateFlags1", player->stateFlags1, THEME_COLOR); - }, "stateFlags1"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("stateFlags1"); + DrawFlagArray32("stateFlags1", player->stateFlags1, THEME_COLOR); + }, + "stateFlags1"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("stateFlags2"); - DrawFlagArray32("stateFlags2", player->stateFlags2, THEME_COLOR); - }, "stateFlags2"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("stateFlags2"); + DrawFlagArray32("stateFlags2", player->stateFlags2, THEME_COLOR); + }, + "stateFlags2"); + + DrawGroupWithBorder( + [&]() { + ImGui::Text("stateFlags3"); + DrawFlagArray8("stateFlags3", player->stateFlags3, THEME_COLOR); + }, + "stateFlags3"); - DrawGroupWithBorder([&]() { - ImGui::Text("stateFlags3"); - DrawFlagArray8("stateFlags3", player->stateFlags3, THEME_COLOR); - }, "stateFlags3"); - ImGui::SameLine(); - - DrawGroupWithBorder([&]() { - ImGui::Text("unk_6AE_rotFlags"); - DrawFlagArray16("unk_6AE_rotFlags", player->unk_6AE_rotFlags, THEME_COLOR); - }, "unk_6AE_rotFlags"); + + DrawGroupWithBorder( + [&]() { + ImGui::Text("unk_6AE_rotFlags"); + DrawFlagArray16("unk_6AE_rotFlags", player->unk_6AE_rotFlags, THEME_COLOR); + }, + "unk_6AE_rotFlags"); } ImGui::TreePop(); } if (ImGui::TreeNode("Current Scene")) { if (gPlayState != nullptr) { ActorContext* act = &gPlayState->actorCtx; - DrawGroupWithBorder([&]() { - ImGui::Text("Switch"); - InsertHelpHoverText("Permanently-saved switch flags"); - if (Button("Set All##Switch", buttonOptionsBase.Tooltip(""))) { - act->flags.swch = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Switch", buttonOptionsBase.Tooltip(""))) { - act->flags.swch = 0; - } - DrawFlagArray32("Switch", act->flags.swch, THEME_COLOR); - }, "Switch"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Switch"); + InsertHelpHoverText("Permanently-saved switch flags"); + if (Button("Set All##Switch", buttonOptionsBase.Tooltip(""))) { + act->flags.swch = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Switch", buttonOptionsBase.Tooltip(""))) { + act->flags.swch = 0; + } + DrawFlagArray32("Switch", act->flags.swch, THEME_COLOR); + }, + "Switch"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Temp Switch"); - InsertHelpHoverText("Temporary switch flags. Unset on scene transitions"); - if (Button("Set All##Temp Switch", buttonOptionsBase.Tooltip(""))) { - act->flags.tempSwch = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Temp Switch", buttonOptionsBase.Tooltip(""))) { - act->flags.tempSwch = 0; - } - DrawFlagArray32("Temp Switch", act->flags.tempSwch, THEME_COLOR); - }, "Temp Switch"); - - DrawGroupWithBorder([&]() { - ImGui::Text("Clear"); - InsertHelpHoverText("Permanently-saved room-clear flags"); - if (Button("Set All##Clear", buttonOptionsBase.Tooltip(""))) { - act->flags.clear = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Clear", buttonOptionsBase.Tooltip(""))) { - act->flags.clear = 0; - } - DrawFlagArray32("Clear", act->flags.clear, THEME_COLOR); - }, "Clear"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Temp Switch"); + InsertHelpHoverText("Temporary switch flags. Unset on scene transitions"); + if (Button("Set All##Temp Switch", buttonOptionsBase.Tooltip(""))) { + act->flags.tempSwch = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Temp Switch", buttonOptionsBase.Tooltip(""))) { + act->flags.tempSwch = 0; + } + DrawFlagArray32("Temp Switch", act->flags.tempSwch, THEME_COLOR); + }, + "Temp Switch"); + + DrawGroupWithBorder( + [&]() { + ImGui::Text("Clear"); + InsertHelpHoverText("Permanently-saved room-clear flags"); + if (Button("Set All##Clear", buttonOptionsBase.Tooltip(""))) { + act->flags.clear = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Clear", buttonOptionsBase.Tooltip(""))) { + act->flags.clear = 0; + } + DrawFlagArray32("Clear", act->flags.clear, THEME_COLOR); + }, + "Clear"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Temp Clear"); - InsertHelpHoverText("Temporary room-clear flags. Unset on scene transitions"); - if (Button("Set All##Temp Clear", buttonOptionsBase.Tooltip(""))) { - act->flags.tempClear = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Temp Clear", buttonOptionsBase.Tooltip(""))) { - act->flags.tempClear = 0; - } - DrawFlagArray32("Temp Clear", act->flags.tempClear, THEME_COLOR); - }, "Temp Clear"); - - DrawGroupWithBorder([&]() { - ImGui::Text("Collect"); - InsertHelpHoverText("Permanently-saved collect flags"); - if (Button("Set All##Collect", buttonOptionsBase.Tooltip(""))) { - act->flags.collect = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Collect", buttonOptionsBase.Tooltip(""))) { - act->flags.collect = 0; - } - DrawFlagArray32("Collect", act->flags.collect, THEME_COLOR); - }, "Collect"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Temp Clear"); + InsertHelpHoverText("Temporary room-clear flags. Unset on scene transitions"); + if (Button("Set All##Temp Clear", buttonOptionsBase.Tooltip(""))) { + act->flags.tempClear = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Temp Clear", buttonOptionsBase.Tooltip(""))) { + act->flags.tempClear = 0; + } + DrawFlagArray32("Temp Clear", act->flags.tempClear, THEME_COLOR); + }, + "Temp Clear"); + + DrawGroupWithBorder( + [&]() { + ImGui::Text("Collect"); + InsertHelpHoverText("Permanently-saved collect flags"); + if (Button("Set All##Collect", buttonOptionsBase.Tooltip(""))) { + act->flags.collect = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Collect", buttonOptionsBase.Tooltip(""))) { + act->flags.collect = 0; + } + DrawFlagArray32("Collect", act->flags.collect, THEME_COLOR); + }, + "Collect"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Temp Collect"); - InsertHelpHoverText("Temporary collect flags. Unset on scene transitions"); - if (Button("Set All##Temp Collect", buttonOptionsBase.Tooltip(""))) { - act->flags.tempCollect = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Temp Collect", buttonOptionsBase.Tooltip(""))) { - act->flags.tempCollect = 0; - } - DrawFlagArray32("Temp Collect", act->flags.tempCollect, THEME_COLOR); - }, "Temp Collect"); - - DrawGroupWithBorder([&]() { - ImGui::Text("Chest"); - InsertHelpHoverText("Permanently-saved chest flags"); - if (Button("Set All##Chest", buttonOptionsBase.Tooltip(""))) { - act->flags.chest = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Chest", buttonOptionsBase.Tooltip(""))) { - act->flags.chest = 0; - } - DrawFlagArray32("Chest", act->flags.chest, THEME_COLOR); - }, "Chest"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Temp Collect"); + InsertHelpHoverText("Temporary collect flags. Unset on scene transitions"); + if (Button("Set All##Temp Collect", buttonOptionsBase.Tooltip(""))) { + act->flags.tempCollect = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Temp Collect", buttonOptionsBase.Tooltip(""))) { + act->flags.tempCollect = 0; + } + DrawFlagArray32("Temp Collect", act->flags.tempCollect, THEME_COLOR); + }, + "Temp Collect"); + + DrawGroupWithBorder( + [&]() { + ImGui::Text("Chest"); + InsertHelpHoverText("Permanently-saved chest flags"); + if (Button("Set All##Chest", buttonOptionsBase.Tooltip(""))) { + act->flags.chest = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Chest", buttonOptionsBase.Tooltip(""))) { + act->flags.chest = 0; + } + DrawFlagArray32("Chest", act->flags.chest, THEME_COLOR); + }, + "Chest"); ImGui::SameLine(); ImGui::BeginGroup(); - if (Button("Reload Flags", buttonOptionsBase.Tooltip("Load flags from saved scene flags. Normally happens on scene load"))) { + if (Button("Reload Flags", buttonOptionsBase.Tooltip( + "Load flags from saved scene flags. Normally happens on scene load"))) { act->flags.swch = gSaveContext.sceneFlags[gPlayState->sceneNum].swch; act->flags.clear = gSaveContext.sceneFlags[gPlayState->sceneNum].clear; act->flags.collect = gSaveContext.sceneFlags[gPlayState->sceneNum].collect; act->flags.chest = gSaveContext.sceneFlags[gPlayState->sceneNum].chest; } - if (Button("Save Flags", buttonOptionsBase.Tooltip("Save current scene flags. Normally happens on scene exit"))) { + if (Button("Save Flags", + buttonOptionsBase.Tooltip("Save current scene flags. Normally happens on scene exit"))) { gSaveContext.sceneFlags[gPlayState->sceneNum].swch = act->flags.swch; gSaveContext.sceneFlags[gPlayState->sceneNum].clear = act->flags.clear; gSaveContext.sceneFlags[gPlayState->sceneNum].collect = act->flags.collect; gSaveContext.sceneFlags[gPlayState->sceneNum].chest = act->flags.chest; } - - if (Button("Clear Flags", buttonOptionsBase.Tooltip("Clear current scene flags. Reload scene to see changes"))) { + + if (Button("Clear Flags", + buttonOptionsBase.Tooltip("Clear current scene flags. Reload scene to see changes"))) { act->flags.swch = 0; act->flags.clear = 0; act->flags.collect = 0; act->flags.chest = 0; } - ImGui::EndGroup(); } else { ImGui::Text("Current game state does not have an active scene"); @@ -745,105 +790,121 @@ void DrawFlagsTab() { } } - DrawGroupWithBorder([&]() { - ImGui::Text("Switch"); - InsertHelpHoverText("Switch flags"); - DrawFlagArray32("Switch", gSaveContext.sceneFlags[selectedSceneFlagMap].swch, THEME_COLOR); - }, "Saved Switch"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Switch"); + InsertHelpHoverText("Switch flags"); + DrawFlagArray32("Switch", gSaveContext.sceneFlags[selectedSceneFlagMap].swch, THEME_COLOR); + }, + "Saved Switch"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Clear"); - InsertHelpHoverText("Room-clear flags"); - DrawFlagArray32("Clear", gSaveContext.sceneFlags[selectedSceneFlagMap].clear, THEME_COLOR); - }, "Saved Clear"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Clear"); + InsertHelpHoverText("Room-clear flags"); + DrawFlagArray32("Clear", gSaveContext.sceneFlags[selectedSceneFlagMap].clear, THEME_COLOR); + }, + "Saved Clear"); - DrawGroupWithBorder([&]() { - ImGui::Text("Collect"); - InsertHelpHoverText("Collect flags"); - DrawFlagArray32("Collect", gSaveContext.sceneFlags[selectedSceneFlagMap].collect, THEME_COLOR); - }, "Saved Collect"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Collect"); + InsertHelpHoverText("Collect flags"); + DrawFlagArray32("Collect", gSaveContext.sceneFlags[selectedSceneFlagMap].collect, THEME_COLOR); + }, + "Saved Collect"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Chest"); - InsertHelpHoverText("Chest flags"); - DrawFlagArray32("Chest", gSaveContext.sceneFlags[selectedSceneFlagMap].chest, THEME_COLOR); - }, "Saved Chest"); - - DrawGroupWithBorder([&]() { - ImGui::Text("Rooms"); - InsertHelpHoverText("Flags for visted rooms"); - DrawFlagArray32("Rooms", gSaveContext.sceneFlags[selectedSceneFlagMap].rooms, THEME_COLOR); - }, "Saved Rooms"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Chest"); + InsertHelpHoverText("Chest flags"); + DrawFlagArray32("Chest", gSaveContext.sceneFlags[selectedSceneFlagMap].chest, THEME_COLOR); + }, + "Saved Chest"); + + DrawGroupWithBorder( + [&]() { + ImGui::Text("Rooms"); + InsertHelpHoverText("Flags for visted rooms"); + DrawFlagArray32("Rooms", gSaveContext.sceneFlags[selectedSceneFlagMap].rooms, THEME_COLOR); + }, + "Saved Rooms"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Floors"); - InsertHelpHoverText("Flags for visted floors"); - DrawFlagArray32("Floors", gSaveContext.sceneFlags[selectedSceneFlagMap].floors, THEME_COLOR); - }, "Saved Floors"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Floors"); + InsertHelpHoverText("Flags for visted floors"); + DrawFlagArray32("Floors", gSaveContext.sceneFlags[selectedSceneFlagMap].floors, THEME_COLOR); + }, + "Saved Floors"); ImGui::TreePop(); } - DrawGroupWithBorder([&]() { - size_t selectedGsMap = 0; - ImGui::Text("Gold Skulltulas"); - Combobox("Map##Gold Skulltulas", &selectedGsMap, gsMapping, comboboxOptionsBase.Tooltip("")); + DrawGroupWithBorder( + [&]() { + size_t selectedGsMap = 0; + ImGui::Text("Gold Skulltulas"); + Combobox("Map##Gold Skulltulas", &selectedGsMap, gsMapping, comboboxOptionsBase.Tooltip("")); + + // TODO We should write out descriptions for each one... ugh + ImGui::AlignTextToFramePadding(); + ImGui::Text("Flags"); + uint32_t currentFlags = GET_GS_FLAGS(selectedGsMap); + uint32_t allFlags = gAreaGsFlags[selectedGsMap]; + uint32_t setMask = 1; + // Iterate over bitfield and create a checkbox for each skulltula + while (allFlags != 0) { + bool isThisSet = (currentFlags & 0x1) == 0x1; - // TODO We should write out descriptions for each one... ugh - ImGui::AlignTextToFramePadding(); - ImGui::Text("Flags"); - uint32_t currentFlags = GET_GS_FLAGS(selectedGsMap); - uint32_t allFlags = gAreaGsFlags[selectedGsMap]; - uint32_t setMask = 1; - // Iterate over bitfield and create a checkbox for each skulltula - while (allFlags != 0) { - bool isThisSet = (currentFlags & 0x1) == 0x1; - - ImGui::SameLine(); - ImGui::PushID(allFlags); - PushStyleCheckbox(THEME_COLOR); - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(4.0f, 3.0f)); - if (ImGui::Checkbox("##gs", &isThisSet)) { - if (isThisSet) { - SET_GS_FLAGS(selectedGsMap, setMask); - } else { - // Have to do this roundabout method as the macro does not support clearing flags - uint32_t currentFlagsBase = GET_GS_FLAGS(selectedGsMap); - gSaveContext.gsFlags[selectedGsMap >> 2] &= ~gGsFlagsMasks[selectedGsMap & 3]; - SET_GS_FLAGS(selectedGsMap, currentFlagsBase & ~setMask); + ImGui::SameLine(); + ImGui::PushID(allFlags); + PushStyleCheckbox(THEME_COLOR); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(4.0f, 3.0f)); + if (ImGui::Checkbox("##gs", &isThisSet)) { + if (isThisSet) { + SET_GS_FLAGS(selectedGsMap, setMask); + } else { + // Have to do this roundabout method as the macro does not support clearing flags + uint32_t currentFlagsBase = GET_GS_FLAGS(selectedGsMap); + gSaveContext.gsFlags[selectedGsMap >> 2] &= ~gGsFlagsMasks[selectedGsMap & 3]; + SET_GS_FLAGS(selectedGsMap, currentFlagsBase & ~setMask); + } } - } - ImGui::PopStyleVar(); - PopStyleCheckbox(); + ImGui::PopStyleVar(); + PopStyleCheckbox(); - ImGui::PopID(); + ImGui::PopID(); - allFlags >>= 1; - currentFlags >>= 1; - setMask <<= 1; - } + allFlags >>= 1; + currentFlags >>= 1; + setMask <<= 1; + } - // If playing a Randomizer Save with Shuffle Skull Tokens on anything other than "Off" we don't want to keep - // GS Token Count updated, since Gold Skulltulas killed will not correlate to GS Tokens Collected. - if (!(IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_TOKENS) != RO_TOKENSANITY_OFF)) { - static bool keepGsCountUpdated = true; - Checkbox("Keep GS Count Updated", &keepGsCountUpdated, - checkboxOptionsBase.Tooltip("Automatically adjust the number of gold skulltula tokens acquired based on set flags.")); - int32_t gsCount = 0; - if (keepGsCountUpdated) { - for (int32_t gsFlagIndex = 0; gsFlagIndex < 6; gsFlagIndex++) { - gsCount += std::popcount(static_cast(gSaveContext.gsFlags[gsFlagIndex])); + // If playing a Randomizer Save with Shuffle Skull Tokens on anything other than "Off" we don't want to keep + // GS Token Count updated, since Gold Skulltulas killed will not correlate to GS Tokens Collected. + if (!(IS_RANDO && + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_TOKENS) != RO_TOKENSANITY_OFF)) { + static bool keepGsCountUpdated = true; + Checkbox("Keep GS Count Updated", &keepGsCountUpdated, + checkboxOptionsBase.Tooltip( + "Automatically adjust the number of gold skulltula tokens acquired based on set flags.")); + int32_t gsCount = 0; + if (keepGsCountUpdated) { + for (int32_t gsFlagIndex = 0; gsFlagIndex < 6; gsFlagIndex++) { + gsCount += std::popcount(static_cast(gSaveContext.gsFlags[gsFlagIndex])); + } + gSaveContext.inventory.gsTokens = gsCount; } - gSaveContext.inventory.gsTokens = gsCount; } - } - }, "Gold Skulltulas"); + }, + "Gold Skulltulas"); for (int i = 0; i < flagTables.size(); i++) { const FlagTable& flagTable = flagTables[i]; @@ -853,32 +914,34 @@ void DrawFlagsTab() { if (ImGui::TreeNode(flagTable.name)) { for (int j = 0; j < flagTable.size + 1; j++) { - DrawGroupWithBorder([&]() { - ImGui::Text("%s", fmt::format("{:<2x}", j).c_str()); - switch (flagTable.flagTableType) { - case EVENT_CHECK_INF: - DrawFlagTableArray16(flagTable, j, gSaveContext.eventChkInf[j]); - break; - case ITEM_GET_INF: - DrawFlagTableArray16(flagTable, j, gSaveContext.itemGetInf[j]); - break; - case INF_TABLE: - DrawFlagTableArray16(flagTable, j, gSaveContext.infTable[j]); - break; - case EVENT_INF: - DrawFlagTableArray16(flagTable, j, gSaveContext.eventInf[j]); - break; - case RANDOMIZER_INF: - DrawFlagTableArray16(flagTable, j, gSaveContext.ship.randomizerInf[j]); - break; - } - }, flagTable.name); + DrawGroupWithBorder( + [&]() { + ImGui::Text("%s", fmt::format("{:<2x}", j).c_str()); + switch (flagTable.flagTableType) { + case EVENT_CHECK_INF: + DrawFlagTableArray16(flagTable, j, gSaveContext.eventChkInf[j]); + break; + case ITEM_GET_INF: + DrawFlagTableArray16(flagTable, j, gSaveContext.itemGetInf[j]); + break; + case INF_TABLE: + DrawFlagTableArray16(flagTable, j, gSaveContext.infTable[j]); + break; + case EVENT_INF: + DrawFlagTableArray16(flagTable, j, gSaveContext.eventInf[j]); + break; + case RANDOMIZER_INF: + DrawFlagTableArray16(flagTable, j, gSaveContext.ship.randomizerInf[j]); + break; + } + }, + flagTable.name); } // make some buttons to help with fishsanity debugging uint8_t fsMode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY); - if (flagTable.flagTableType == RANDOMIZER_INF && - fsMode != RO_FISHSANITY_OFF && fsMode != RO_FISHSANITY_OVERWORLD) { + if (flagTable.flagTableType == RANDOMIZER_INF && fsMode != RO_FISHSANITY_OFF && + fsMode != RO_FISHSANITY_OVERWORLD) { if (ImGui::Button("Catch All (Child)")) { for (int k = RAND_INF_CHILD_FISH_1; k <= RAND_INF_CHILD_LOACH_2; k++) { Flags_SetRandomizerInf((RandomizerInf)k); @@ -935,13 +998,14 @@ void DrawUpgradeIcon(const std::string& categoryName, int32_t categoryId, const static const char* upgradePopupPicker = "upgradePopupPicker"; ImGui::PushID(categoryName.c_str()); - - PushStyleButton(Colors::DarkGray); + + PushStyleButton(Colors::DarkGray); uint8_t item = items[CUR_UPG_VALUE(categoryId)]; if (item != ITEM_NONE) { const ItemMapEntry& slotEntry = itemMapping[item]; - if (ImGui::ImageButton(slotEntry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), - ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1))) { + if (ImGui::ImageButton(slotEntry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), + ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1))) { ImGui::OpenPopup(upgradePopupPicker); } } else { @@ -957,18 +1021,21 @@ void DrawUpgradeIcon(const std::string& categoryName, int32_t categoryId, const if ((pickerIndex % 8) != 0) { ImGui::SameLine(); } - + PushStyleButton(Colors::DarkGray); if (items[pickerIndex] == ITEM_NONE) { - if (ImGui::Button("##upgradePopupPicker", ImVec2(IMAGE_SIZE, IMAGE_SIZE) + ImGui::GetStyle().FramePadding * 2)) { + if (ImGui::Button("##upgradePopupPicker", + ImVec2(IMAGE_SIZE, IMAGE_SIZE) + ImGui::GetStyle().FramePadding * 2)) { Inventory_ChangeUpgrade(categoryId, pickerIndex); ImGui::CloseCurrentPopup(); } Tooltip("None"); } else { const ItemMapEntry& slotEntry = itemMapping[items[pickerIndex]]; - auto ret = ImGui::ImageButton(slotEntry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), - ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); + auto ret = ImGui::ImageButton( + slotEntry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), + ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); if (ret) { Inventory_ChangeUpgrade(categoryId, pickerIndex); ImGui::CloseCurrentPopup(); @@ -1003,7 +1070,9 @@ void DrawEquipmentTab() { bool hasEquip = (bitMask & gSaveContext.inventory.equipment) != 0; const ItemMapEntry& entry = itemMapping[equipmentValues[i]]; PushStyleButton(Colors::DarkGray); - auto ret = ImGui::ImageButton(entry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasEquip ? entry.name : entry.nameFaded), + auto ret = ImGui::ImageButton(entry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + hasEquip ? entry.name : entry.nameFaded), ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); if (ret) { if (hasEquip) { @@ -1103,8 +1172,10 @@ void DrawQuestItemButton(uint32_t item) { uint32_t bitMask = 1 << entry.id; bool hasQuestItem = (bitMask & gSaveContext.inventory.questItems) != 0; PushStyleButton(Colors::DarkGray); - auto ret = ImGui::ImageButton(entry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasQuestItem ? entry.name : entry.nameFaded), - ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); + auto ret = ImGui::ImageButton(entry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + hasQuestItem ? entry.name : entry.nameFaded), + ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); if (ret) { if (hasQuestItem) { gSaveContext.inventory.questItems &= ~bitMask; @@ -1122,8 +1193,10 @@ void DrawDungeonItemButton(uint32_t item, uint32_t scene) { uint32_t bitMask = 1 << (entry.id - ITEM_KEY_BOSS); // Bitset starts at ITEM_KEY_BOSS == 0. the rest are sequential bool hasItem = (bitMask & gSaveContext.inventory.dungeonItems[scene]) != 0; PushStyleButton(Colors::DarkGray); - auto ret = ImGui::ImageButton(entry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasItem ? entry.name : entry.nameFaded), - ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); + auto ret = ImGui::ImageButton( + entry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasItem ? entry.name : entry.nameFaded), + ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); if (ret) { if (hasItem) { gSaveContext.inventory.dungeonItems[scene] &= ~bitMask; @@ -1168,7 +1241,9 @@ void DrawQuestStatusTab() { uint32_t bitMask = 1 << entry.id; bool hasQuestItem = (bitMask & gSaveContext.inventory.questItems) != 0; PushStyleButton(Colors::DarkGray); - auto ret = ImGui::ImageButton(entry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasQuestItem ? entry.name : entry.nameFaded), + auto ret = ImGui::ImageButton(entry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + hasQuestItem ? entry.name : entry.nameFaded), ImVec2(32.0f, 48.0f), ImVec2(0, 0), ImVec2(1, 1)); if (ret) { if (hasQuestItem) { @@ -1211,44 +1286,50 @@ void DrawQuestStatusTab() { InsertHelpHoverText("The number of pieces of heart acquired towards the next heart container"); PopStyleCombobox(); - DrawGroupWithBorder([&]() { - ImGui::Text("Dungeon Items"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Dungeon Items"); - static int32_t dungeonItemsScene = SCENE_DEKU_TREE; - PushStyleCombobox(THEME_COLOR); - if (ImGui::BeginCombo("##DungeonSelect", SohUtils::GetSceneName(dungeonItemsScene).c_str())) { - for (int32_t dungeonIndex = SCENE_DEKU_TREE; dungeonIndex < SCENE_JABU_JABU_BOSS + 1; dungeonIndex++) { - if (ImGui::Selectable(SohUtils::GetSceneName(dungeonIndex).c_str(), - dungeonIndex == dungeonItemsScene)) { - dungeonItemsScene = dungeonIndex; + static int32_t dungeonItemsScene = SCENE_DEKU_TREE; + PushStyleCombobox(THEME_COLOR); + if (ImGui::BeginCombo("##DungeonSelect", SohUtils::GetSceneName(dungeonItemsScene).c_str())) { + for (int32_t dungeonIndex = SCENE_DEKU_TREE; dungeonIndex < SCENE_JABU_JABU_BOSS + 1; dungeonIndex++) { + if (ImGui::Selectable(SohUtils::GetSceneName(dungeonIndex).c_str(), + dungeonIndex == dungeonItemsScene)) { + dungeonItemsScene = dungeonIndex; + } } - } - ImGui::EndCombo(); - } - PopStyleCombobox(); - - DrawDungeonItemButton(ITEM_KEY_BOSS, dungeonItemsScene); - ImGui::SameLine(); - DrawDungeonItemButton(ITEM_COMPASS, dungeonItemsScene); - ImGui::SameLine(); - DrawDungeonItemButton(ITEM_DUNGEON_MAP, dungeonItemsScene); + ImGui::EndCombo(); + } + PopStyleCombobox(); - if (dungeonItemsScene != SCENE_JABU_JABU_BOSS) { - float lineHeight = ImGui::GetTextLineHeightWithSpacing(); - ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(itemMapping[ITEM_KEY_SMALL].name), ImVec2(lineHeight, lineHeight)); + DrawDungeonItemButton(ITEM_KEY_BOSS, dungeonItemsScene); ImGui::SameLine(); - PushStyleInput(THEME_COLOR); - if (ImGui::InputScalar("##Keys", ImGuiDataType_S8, gSaveContext.inventory.dungeonKeys + dungeonItemsScene)) { - gSaveContext.ship.stats.dungeonKeys[dungeonItemsScene] = gSaveContext.inventory.dungeonKeys[dungeonItemsScene]; - }; - PopStyleInput(); - } else { - // dungeonItems is size 20 but dungeonKeys is size 19, so there are no keys for the last scene (Barinade's Lair) - ImGui::Text("Barinade's Lair does not have small keys"); - } - }, "Dungeon Items"); + DrawDungeonItemButton(ITEM_COMPASS, dungeonItemsScene); + ImGui::SameLine(); + DrawDungeonItemButton(ITEM_DUNGEON_MAP, dungeonItemsScene); + if (dungeonItemsScene != SCENE_JABU_JABU_BOSS) { + float lineHeight = ImGui::GetTextLineHeightWithSpacing(); + ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + itemMapping[ITEM_KEY_SMALL].name), + ImVec2(lineHeight, lineHeight)); + ImGui::SameLine(); + PushStyleInput(THEME_COLOR); + if (ImGui::InputScalar("##Keys", ImGuiDataType_S8, + gSaveContext.inventory.dungeonKeys + dungeonItemsScene)) { + gSaveContext.ship.stats.dungeonKeys[dungeonItemsScene] = + gSaveContext.inventory.dungeonKeys[dungeonItemsScene]; + }; + PopStyleInput(); + } else { + // dungeonItems is size 20 but dungeonKeys is size 19, so there are no keys for the last scene + // (Barinade's Lair) + ImGui::Text("Barinade's Lair does not have small keys"); + } + }, + "Dungeon Items"); } void DrawPlayerTab() { @@ -1261,7 +1342,7 @@ void DrawPlayerTab() { switch (player->currentSwordItemId) { case ITEM_SWORD_KOKIRI: - curSword = "Kokiri Sword"; + curSword = "Kokiri Sword"; break; case ITEM_SWORD_MASTER: curSword = "Master Sword"; @@ -1327,34 +1408,40 @@ void DrawPlayerTab() { ImGui::PushItemWidth(ImGui::GetFontSize() * 6); PushStyleInput(THEME_COLOR); - DrawGroupWithBorder([&]() { - ImGui::Text("Link's Position"); - ImGui::PushItemWidth(ImGui::GetFontSize() * 12); - ImGui::InputScalar("X##Pos", ImGuiDataType_Float, &player->actor.world.pos.x); - ImGui::InputScalar("Y##Pos", ImGuiDataType_Float, &player->actor.world.pos.y); - ImGui::InputScalar("Z##Pos", ImGuiDataType_Float, &player->actor.world.pos.z); - ImGui::PopItemWidth(); - }, "Link's Position"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Link's Position"); + ImGui::PushItemWidth(ImGui::GetFontSize() * 12); + ImGui::InputScalar("X##Pos", ImGuiDataType_Float, &player->actor.world.pos.x); + ImGui::InputScalar("Y##Pos", ImGuiDataType_Float, &player->actor.world.pos.y); + ImGui::InputScalar("Z##Pos", ImGuiDataType_Float, &player->actor.world.pos.z); + ImGui::PopItemWidth(); + }, + "Link's Position"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Link's Rotation"); - InsertHelpHoverText("For Link's rotation in relation to the world"); - ImGui::PushItemWidth(ImGui::GetFontSize() * 12); - ImGui::InputScalar("X##Rot", ImGuiDataType_S16, &player->actor.world.rot.x); - ImGui::InputScalar("Y##Rot", ImGuiDataType_S16, &player->actor.world.rot.y); - ImGui::InputScalar("Z##Rot", ImGuiDataType_S16, &player->actor.world.rot.z); - ImGui::PopItemWidth(); - }, "Link's Rotation"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Link's Rotation"); + InsertHelpHoverText("For Link's rotation in relation to the world"); + ImGui::PushItemWidth(ImGui::GetFontSize() * 12); + ImGui::InputScalar("X##Rot", ImGuiDataType_S16, &player->actor.world.rot.x); + ImGui::InputScalar("Y##Rot", ImGuiDataType_S16, &player->actor.world.rot.y); + ImGui::InputScalar("Z##Rot", ImGuiDataType_S16, &player->actor.world.rot.z); + ImGui::PopItemWidth(); + }, + "Link's Rotation"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Link's Model Rotation"); - InsertHelpHoverText("For Link's actual model"); - ImGui::PushItemWidth(ImGui::GetFontSize() * 12); - ImGui::InputScalar("X##ModRot", ImGuiDataType_S16, &player->actor.shape.rot.x); - ImGui::InputScalar("Y##ModRot", ImGuiDataType_S16, &player->actor.shape.rot.y); - ImGui::InputScalar("Z##ModRot", ImGuiDataType_S16, &player->actor.shape.rot.z); - ImGui::PopItemWidth(); - }, "Link's Model Rotation"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Link's Model Rotation"); + InsertHelpHoverText("For Link's actual model"); + ImGui::PushItemWidth(ImGui::GetFontSize() * 12); + ImGui::InputScalar("X##ModRot", ImGuiDataType_S16, &player->actor.shape.rot.x); + ImGui::InputScalar("Y##ModRot", ImGuiDataType_S16, &player->actor.shape.rot.y); + ImGui::InputScalar("Z##ModRot", ImGuiDataType_S16, &player->actor.shape.rot.z); + ImGui::PopItemWidth(); + }, + "Link's Model Rotation"); ImGui::InputScalar("Linear Velocity", ImGuiDataType_Float, &player->linearVelocity); InsertHelpHoverText("Link's speed along the XZ plane"); @@ -1385,136 +1472,141 @@ void DrawPlayerTab() { InsertHelpHoverText("This will change Link's age when you load a map"); PopStyleCombobox(); ImGui::Separator(); - - DrawGroupWithBorder([&]() { - PushStyleCombobox(THEME_COLOR); - ImGui::Text("Link's Current Equipment"); - ImGui::PushItemWidth(ImGui::GetFontSize() * 12); - if (ImGui::BeginCombo("Sword", curSword)) { - if (ImGui::Selectable("None")) { - player->currentSwordItemId = ITEM_NONE; - gSaveContext.equips.buttonItems[0] = ITEM_NONE; - Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_NONE); - } - if (ImGui::Selectable("Kokiri Sword")) { - player->currentSwordItemId = ITEM_SWORD_KOKIRI; - gSaveContext.equips.buttonItems[0] = ITEM_SWORD_KOKIRI; - Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_KOKIRI); - } - if (ImGui::Selectable("Master Sword")) { - player->currentSwordItemId = ITEM_SWORD_MASTER; - gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER; - Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER); - } - if (ImGui::Selectable("Biggoron's Sword")) { - if (gSaveContext.bgsFlag) { - if (gSaveContext.swordHealth < 8) { - gSaveContext.swordHealth = 8; - } - player->currentSwordItemId = ITEM_SWORD_BGS; - gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BGS; + + DrawGroupWithBorder( + [&]() { + PushStyleCombobox(THEME_COLOR); + ImGui::Text("Link's Current Equipment"); + ImGui::PushItemWidth(ImGui::GetFontSize() * 12); + if (ImGui::BeginCombo("Sword", curSword)) { + if (ImGui::Selectable("None")) { + player->currentSwordItemId = ITEM_NONE; + gSaveContext.equips.buttonItems[0] = ITEM_NONE; + Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_NONE); } - else { - if (gSaveContext.swordHealth < 8) { - gSaveContext.swordHealth = 8; - } - player->currentSwordItemId = ITEM_SWORD_BGS; - gSaveContext.equips.buttonItems[0] = ITEM_SWORD_KNIFE; + if (ImGui::Selectable("Kokiri Sword")) { + player->currentSwordItemId = ITEM_SWORD_KOKIRI; + gSaveContext.equips.buttonItems[0] = ITEM_SWORD_KOKIRI; + Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_KOKIRI); } + if (ImGui::Selectable("Master Sword")) { + player->currentSwordItemId = ITEM_SWORD_MASTER; + gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER; + Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER); + } + if (ImGui::Selectable("Biggoron's Sword")) { + if (gSaveContext.bgsFlag) { + if (gSaveContext.swordHealth < 8) { + gSaveContext.swordHealth = 8; + } + player->currentSwordItemId = ITEM_SWORD_BGS; + gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BGS; + } else { + if (gSaveContext.swordHealth < 8) { + gSaveContext.swordHealth = 8; + } + player->currentSwordItemId = ITEM_SWORD_BGS; + gSaveContext.equips.buttonItems[0] = ITEM_SWORD_KNIFE; + } - Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_BIGGORON); - } - if (ImGui::Selectable("Fishing Pole")) { - player->currentSwordItemId = ITEM_FISHING_POLE; - gSaveContext.equips.buttonItems[0] = ITEM_FISHING_POLE; - Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER); - } - ImGui::EndCombo(); - - } - if (ImGui::BeginCombo("Shield", curShield)) { - if (ImGui::Selectable("None")) { - player->currentShield = PLAYER_SHIELD_NONE; - Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_NONE); - } - if (ImGui::Selectable("Deku Shield")) { - player->currentShield = PLAYER_SHIELD_DEKU; - Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_DEKU); - } - if (ImGui::Selectable("Hylian Shield")) { - player->currentShield = PLAYER_SHIELD_HYLIAN; - Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_HYLIAN); + Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_BIGGORON); + } + if (ImGui::Selectable("Fishing Pole")) { + player->currentSwordItemId = ITEM_FISHING_POLE; + gSaveContext.equips.buttonItems[0] = ITEM_FISHING_POLE; + Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER); + } + ImGui::EndCombo(); } - if (ImGui::Selectable("Mirror Shield")) { - player->currentShield = PLAYER_SHIELD_MIRROR; - Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_MIRROR); + if (ImGui::BeginCombo("Shield", curShield)) { + if (ImGui::Selectable("None")) { + player->currentShield = PLAYER_SHIELD_NONE; + Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_NONE); + } + if (ImGui::Selectable("Deku Shield")) { + player->currentShield = PLAYER_SHIELD_DEKU; + Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_DEKU); + } + if (ImGui::Selectable("Hylian Shield")) { + player->currentShield = PLAYER_SHIELD_HYLIAN; + Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_HYLIAN); + } + if (ImGui::Selectable("Mirror Shield")) { + player->currentShield = PLAYER_SHIELD_MIRROR; + Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_MIRROR); + } + ImGui::EndCombo(); } - ImGui::EndCombo(); - } - if (ImGui::BeginCombo("Tunic", curTunic)) { - if (ImGui::Selectable("Kokiri Tunic")) { - player->currentTunic = PLAYER_TUNIC_KOKIRI; - Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_KOKIRI); - } - if (ImGui::Selectable("Goron Tunic")) { - player->currentTunic = PLAYER_TUNIC_GORON; - Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_GORON); - } - if (ImGui::Selectable("Zora Tunic")) { - player->currentTunic = PLAYER_TUNIC_ZORA; - Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_ZORA); + if (ImGui::BeginCombo("Tunic", curTunic)) { + if (ImGui::Selectable("Kokiri Tunic")) { + player->currentTunic = PLAYER_TUNIC_KOKIRI; + Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_KOKIRI); + } + if (ImGui::Selectable("Goron Tunic")) { + player->currentTunic = PLAYER_TUNIC_GORON; + Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_GORON); + } + if (ImGui::Selectable("Zora Tunic")) { + player->currentTunic = PLAYER_TUNIC_ZORA; + Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_ZORA); + } + ImGui::EndCombo(); } - ImGui::EndCombo(); - } - if (ImGui::BeginCombo("Boots", curBoots)) { - if (ImGui::Selectable("Kokiri Boots")) { - player->currentBoots = PLAYER_BOOTS_KOKIRI; - Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_KOKIRI); - } - if (ImGui::Selectable("Iron Boots")) { - player->currentBoots = PLAYER_BOOTS_IRON; - Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_IRON); - } - if (ImGui::Selectable("Hover Boots")) { - player->currentBoots = PLAYER_BOOTS_HOVER; - Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_HOVER); + if (ImGui::BeginCombo("Boots", curBoots)) { + if (ImGui::Selectable("Kokiri Boots")) { + player->currentBoots = PLAYER_BOOTS_KOKIRI; + Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_KOKIRI); + } + if (ImGui::Selectable("Iron Boots")) { + player->currentBoots = PLAYER_BOOTS_IRON; + Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_IRON); + } + if (ImGui::Selectable("Hover Boots")) { + player->currentBoots = PLAYER_BOOTS_HOVER; + Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_HOVER); + } + ImGui::EndCombo(); } - ImGui::EndCombo(); - } - ImGui::PopItemWidth(); - PopStyleCombobox(); - }, "Current Equipment"); + ImGui::PopItemWidth(); + PopStyleCombobox(); + }, + "Current Equipment"); ImGui::SameLine(); ImU16 one = 1; - DrawGroupWithBorder([&]() { - ImGui::PushItemWidth(ImGui::GetFontSize() * 6); - PushStyleInput(THEME_COLOR); - ImGui::Text("Current Items"); - ImGui::InputScalar("B Button", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[0], &one, NULL); - ImGui::InputScalar("C Left", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[1], &one, NULL); - ImGui::InputScalar("C Down", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[2], &one, NULL); - ImGui::InputScalar("C Right", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[3], &one, NULL); - PopStyleInput(); - ImGui::PopItemWidth(); - }, "Current Items"); - - if (CVarGetInteger(CVAR_ENHANCEMENT("DpadEquips"), 0)) { - ImGui::SameLine(); - DrawGroupWithBorder([&]() { + DrawGroupWithBorder( + [&]() { ImGui::PushItemWidth(ImGui::GetFontSize() * 6); PushStyleInput(THEME_COLOR); - ImGui::Text("Current D-pad Items"); - // Two spaces at the end for aligning, not elegant but it's working - ImGui::InputScalar("D-pad Up ", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[4], &one, NULL); - ImGui::InputScalar("D-pad Down", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[5], &one, NULL); - ImGui::InputScalar("D-pad Left", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[6], &one, NULL); - ImGui::InputScalar("D-pad Right", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[7], &one, NULL); + ImGui::Text("Current Items"); + ImGui::InputScalar("B Button", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[0], &one, NULL); + ImGui::InputScalar("C Left", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[1], &one, NULL); + ImGui::InputScalar("C Down", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[2], &one, NULL); + ImGui::InputScalar("C Right", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[3], &one, NULL); PopStyleInput(); ImGui::PopItemWidth(); - }, "Current D-pad Items"); + }, + "Current Items"); + + if (CVarGetInteger(CVAR_ENHANCEMENT("DpadEquips"), 0)) { + ImGui::SameLine(); + DrawGroupWithBorder( + [&]() { + ImGui::PushItemWidth(ImGui::GetFontSize() * 6); + PushStyleInput(THEME_COLOR); + ImGui::Text("Current D-pad Items"); + // Two spaces at the end for aligning, not elegant but it's working + ImGui::InputScalar("D-pad Up ", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[4], &one, NULL); + ImGui::InputScalar("D-pad Down", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[5], &one, NULL); + ImGui::InputScalar("D-pad Left", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[6], &one, NULL); + ImGui::InputScalar("D-pad Right", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[7], &one, + NULL); + PopStyleInput(); + ImGui::PopItemWidth(); + }, + "Current D-pad Items"); } ImGui::Text("Player State"); @@ -1524,22 +1616,26 @@ void DrawPlayerTab() { for (int j = 0; j <= 2; j++) { std::string label = fmt::format("State Flags {}", j + 1); - DrawGroupWithBorder([&]() { - ImGui::Text("%s", label.c_str()); - std::vector state = flag_strs[j]; - for (int i = 0; i <= 31; i++) { - bit[i] = ((flags[j] >> i) & 1); - if (bit[i] != 0) { - ImGui::Text("%s", state[i].c_str()); + DrawGroupWithBorder( + [&]() { + ImGui::Text("%s", label.c_str()); + std::vector state = flag_strs[j]; + for (int i = 0; i <= 31; i++) { + bit[i] = ((flags[j] >> i) & 1); + if (bit[i] != 0) { + ImGui::Text("%s", state[i].c_str()); + } } - } - }, label.c_str()); + }, + label.c_str()); ImGui::SameLine(); } - DrawGroupWithBorder([&]() { - ImGui::Text("Sword"); - ImGui::Text(" %d", player->meleeWeaponState); - }, "Sword"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Sword"); + ImGui::Text(" %d", player->meleeWeaponState); + }, + "Sword"); } else { ImGui::Text("Global Context needed for player info!"); @@ -1547,10 +1643,13 @@ void DrawPlayerTab() { } void ResetBaseOptions() { - intSliderOptionsBase.Color(THEME_COLOR).Size({320.0f, 0.0f}).Tooltip(""); + intSliderOptionsBase.Color(THEME_COLOR).Size({ 320.0f, 0.0f }).Tooltip(""); buttonOptionsBase.Color(THEME_COLOR).Size(Sizes::Inline).Tooltip(""); checkboxOptionsBase.Color(THEME_COLOR).Tooltip(""); - comboboxOptionsBase.Color(THEME_COLOR).ComponentAlignment(ComponentAlignments::Left).LabelPosition(LabelPositions::Near).Tooltip(""); + comboboxOptionsBase.Color(THEME_COLOR) + .ComponentAlignment(ComponentAlignments::Left) + .LabelPosition(LabelPositions::Near) + .Tooltip(""); } void SaveEditorWindow::DrawElement() { @@ -1601,4 +1700,5 @@ void SaveEditorWindow::DrawElement() { PopStyleTabs(); } -void SaveEditorWindow::InitElement() {} +void SaveEditorWindow::InitElement() { +} diff --git a/soh/soh/Enhancements/gameplaystats.cpp b/soh/soh/Enhancements/gameplaystats.cpp index e939fa18c..097262803 100644 --- a/soh/soh/Enhancements/gameplaystats.cpp +++ b/soh/soh/Enhancements/gameplaystats.cpp @@ -124,7 +124,7 @@ const char* const sceneMappings[] = { "Goron City", "Lon Lon Ranch", "Outside Ganon's Castle", - //Debug Rooms + // Debug Rooms "Test Map", "Test Room", "Depth Test", @@ -230,15 +230,15 @@ const char* const countMappings[] = { "Start:", }; -#define COLOR_WHITE ImVec4(1.00f, 1.00f, 1.00f, 1.00f) -#define COLOR_RED ImVec4(1.00f, 0.00f, 0.00f, 1.00f) -#define COLOR_GREEN ImVec4(0.10f, 1.00f, 0.10f, 1.00f) -#define COLOR_BLUE ImVec4(0.00f, 0.33f, 1.00f, 1.00f) -#define COLOR_PURPLE ImVec4(0.54f, 0.19f, 0.89f, 1.00f) -#define COLOR_YELLOW ImVec4(1.00f, 1.00f, 0.00f, 1.00f) -#define COLOR_ORANGE ImVec4(1.00f, 0.67f, 0.11f, 1.00f) +#define COLOR_WHITE ImVec4(1.00f, 1.00f, 1.00f, 1.00f) +#define COLOR_RED ImVec4(1.00f, 0.00f, 0.00f, 1.00f) +#define COLOR_GREEN ImVec4(0.10f, 1.00f, 0.10f, 1.00f) +#define COLOR_BLUE ImVec4(0.00f, 0.33f, 1.00f, 1.00f) +#define COLOR_PURPLE ImVec4(0.54f, 0.19f, 0.89f, 1.00f) +#define COLOR_YELLOW ImVec4(1.00f, 1.00f, 0.00f, 1.00f) +#define COLOR_ORANGE ImVec4(1.00f, 0.67f, 0.11f, 1.00f) #define COLOR_LIGHT_BLUE ImVec4(0.00f, 0.88f, 1.00f, 1.00f) -#define COLOR_GREY ImVec4(0.78f, 0.78f, 0.78f, 1.00f) +#define COLOR_GREY ImVec4(0.78f, 0.78f, 0.78f, 1.00f) char itemTimestampDisplayName[TIMESTAMP_MAX][21] = { "" }; ImVec4 itemTimestampDisplayColor[TIMESTAMP_MAX]; @@ -248,14 +248,14 @@ typedef struct { u32 time; ImVec4 color; bool isRoom; -}TimestampInfo; +} TimestampInfo; // Timestamps are an array of structs, each with a name, time, and color // Names and colors are set up at the bottom of this file. // Times are stored in gSaveContext.ship.stats.itemTimestamp. TimestampInfo itemTimestampDisplay[TIMESTAMP_MAX]; TimestampInfo sceneTimestampDisplay[8191]; -//std::vector sceneTimestampDisplay; +// std::vector sceneTimestampDisplay; std::string formatTimestampGameplayStat(uint32_t value) { uint32_t sec = value / 10; @@ -302,37 +302,38 @@ void LoadStatsVersion1() { SaveManager::Instance->LoadData("fileCreatedAt", gSaveContext.ship.stats.fileCreatedAt); SaveManager::Instance->LoadData("playTimer", gSaveContext.ship.stats.playTimer); SaveManager::Instance->LoadData("pauseTimer", gSaveContext.ship.stats.pauseTimer); - SaveManager::Instance->LoadArray("itemTimestamps", ARRAY_COUNT(gSaveContext.ship.stats.itemTimestamp), [](size_t i) { - SaveManager::Instance->LoadData("", gSaveContext.ship.stats.itemTimestamp[i]); - }); - SaveManager::Instance->LoadArray("sceneTimestamps", ARRAY_COUNT(gSaveContext.ship.stats.sceneTimestamps), [&](size_t i) { - SaveManager::Instance->LoadStruct("", [&]() { - int scene, room, sceneTime, roomTime, isRoom; - SaveManager::Instance->LoadData("scene", scene); - SaveManager::Instance->LoadData("room", room); - SaveManager::Instance->LoadData("sceneTime", sceneTime); - SaveManager::Instance->LoadData("roomTime", roomTime); - SaveManager::Instance->LoadData("isRoom", isRoom); - if (scene == 0 && room == 0 && sceneTime == 0 && roomTime == 0 && isRoom == 0) { - return; - } - gSaveContext.ship.stats.sceneTimestamps[i].scene = scene; - gSaveContext.ship.stats.sceneTimestamps[i].room = room; - gSaveContext.ship.stats.sceneTimestamps[i].sceneTime = sceneTime; - gSaveContext.ship.stats.sceneTimestamps[i].roomTime = roomTime; - gSaveContext.ship.stats.sceneTimestamps[i].isRoom = isRoom; + SaveManager::Instance->LoadArray( + "itemTimestamps", ARRAY_COUNT(gSaveContext.ship.stats.itemTimestamp), + [](size_t i) { SaveManager::Instance->LoadData("", gSaveContext.ship.stats.itemTimestamp[i]); }); + SaveManager::Instance->LoadArray( + "sceneTimestamps", ARRAY_COUNT(gSaveContext.ship.stats.sceneTimestamps), [&](size_t i) { + SaveManager::Instance->LoadStruct("", [&]() { + int scene, room, sceneTime, roomTime, isRoom; + SaveManager::Instance->LoadData("scene", scene); + SaveManager::Instance->LoadData("room", room); + SaveManager::Instance->LoadData("sceneTime", sceneTime); + SaveManager::Instance->LoadData("roomTime", roomTime); + SaveManager::Instance->LoadData("isRoom", isRoom); + if (scene == 0 && room == 0 && sceneTime == 0 && roomTime == 0 && isRoom == 0) { + return; + } + gSaveContext.ship.stats.sceneTimestamps[i].scene = scene; + gSaveContext.ship.stats.sceneTimestamps[i].room = room; + gSaveContext.ship.stats.sceneTimestamps[i].sceneTime = sceneTime; + gSaveContext.ship.stats.sceneTimestamps[i].roomTime = roomTime; + gSaveContext.ship.stats.sceneTimestamps[i].isRoom = isRoom; + }); }); - }); SaveManager::Instance->LoadData("tsIdx", gSaveContext.ship.stats.tsIdx); SaveManager::Instance->LoadArray("counts", ARRAY_COUNT(gSaveContext.ship.stats.count), [](size_t i) { SaveManager::Instance->LoadData("", gSaveContext.ship.stats.count[i]); }); - SaveManager::Instance->LoadArray("scenesDiscovered", ARRAY_COUNT(gSaveContext.ship.stats.scenesDiscovered), [](size_t i) { - SaveManager::Instance->LoadData("", gSaveContext.ship.stats.scenesDiscovered[i]); - }); - SaveManager::Instance->LoadArray("entrancesDiscovered", ARRAY_COUNT(gSaveContext.ship.stats.entrancesDiscovered), [](size_t i) { - SaveManager::Instance->LoadData("", gSaveContext.ship.stats.entrancesDiscovered[i]); - }); + SaveManager::Instance->LoadArray( + "scenesDiscovered", ARRAY_COUNT(gSaveContext.ship.stats.scenesDiscovered), + [](size_t i) { SaveManager::Instance->LoadData("", gSaveContext.ship.stats.scenesDiscovered[i]); }); + SaveManager::Instance->LoadArray( + "entrancesDiscovered", ARRAY_COUNT(gSaveContext.ship.stats.entrancesDiscovered), + [](size_t i) { SaveManager::Instance->LoadData("", gSaveContext.ship.stats.entrancesDiscovered[i]); }); } void SaveStats(SaveContext* saveContext, int sectionID, bool fullSave) { @@ -350,30 +351,32 @@ void SaveStats(SaveContext* saveContext, int sectionID, bool fullSave) { SaveManager::Instance->SaveData("fileCreatedAt", saveContext->ship.stats.fileCreatedAt); SaveManager::Instance->SaveData("playTimer", saveContext->ship.stats.playTimer); SaveManager::Instance->SaveData("pauseTimer", saveContext->ship.stats.pauseTimer); - SaveManager::Instance->SaveArray("itemTimestamps", ARRAY_COUNT(saveContext->ship.stats.itemTimestamp), [&](size_t i) { - SaveManager::Instance->SaveData("", saveContext->ship.stats.itemTimestamp[i]); - }); - SaveManager::Instance->SaveArray("sceneTimestamps", ARRAY_COUNT(saveContext->ship.stats.sceneTimestamps), [&](size_t i) { - if (saveContext->ship.stats.sceneTimestamps[i].scene != 254 && saveContext->ship.stats.sceneTimestamps[i].room != 254) { - SaveManager::Instance->SaveStruct("", [&]() { - SaveManager::Instance->SaveData("scene", saveContext->ship.stats.sceneTimestamps[i].scene); - SaveManager::Instance->SaveData("room", saveContext->ship.stats.sceneTimestamps[i].room); - SaveManager::Instance->SaveData("sceneTime", saveContext->ship.stats.sceneTimestamps[i].sceneTime); - SaveManager::Instance->SaveData("roomTime", saveContext->ship.stats.sceneTimestamps[i].roomTime); - SaveManager::Instance->SaveData("isRoom", saveContext->ship.stats.sceneTimestamps[i].isRoom); - }); - } - }); + SaveManager::Instance->SaveArray( + "itemTimestamps", ARRAY_COUNT(saveContext->ship.stats.itemTimestamp), + [&](size_t i) { SaveManager::Instance->SaveData("", saveContext->ship.stats.itemTimestamp[i]); }); + SaveManager::Instance->SaveArray( + "sceneTimestamps", ARRAY_COUNT(saveContext->ship.stats.sceneTimestamps), [&](size_t i) { + if (saveContext->ship.stats.sceneTimestamps[i].scene != 254 && + saveContext->ship.stats.sceneTimestamps[i].room != 254) { + SaveManager::Instance->SaveStruct("", [&]() { + SaveManager::Instance->SaveData("scene", saveContext->ship.stats.sceneTimestamps[i].scene); + SaveManager::Instance->SaveData("room", saveContext->ship.stats.sceneTimestamps[i].room); + SaveManager::Instance->SaveData("sceneTime", saveContext->ship.stats.sceneTimestamps[i].sceneTime); + SaveManager::Instance->SaveData("roomTime", saveContext->ship.stats.sceneTimestamps[i].roomTime); + SaveManager::Instance->SaveData("isRoom", saveContext->ship.stats.sceneTimestamps[i].isRoom); + }); + } + }); SaveManager::Instance->SaveData("tsIdx", saveContext->ship.stats.tsIdx); SaveManager::Instance->SaveArray("counts", ARRAY_COUNT(saveContext->ship.stats.count), [&](size_t i) { SaveManager::Instance->SaveData("", saveContext->ship.stats.count[i]); }); - SaveManager::Instance->SaveArray("scenesDiscovered", ARRAY_COUNT(saveContext->ship.stats.scenesDiscovered), [&](size_t i) { - SaveManager::Instance->SaveData("", saveContext->ship.stats.scenesDiscovered[i]); - }); - SaveManager::Instance->SaveArray("entrancesDiscovered", ARRAY_COUNT(saveContext->ship.stats.entrancesDiscovered), [&](size_t i) { - SaveManager::Instance->SaveData("", saveContext->ship.stats.entrancesDiscovered[i]); - }); + SaveManager::Instance->SaveArray( + "scenesDiscovered", ARRAY_COUNT(saveContext->ship.stats.scenesDiscovered), + [&](size_t i) { SaveManager::Instance->SaveData("", saveContext->ship.stats.scenesDiscovered[i]); }); + SaveManager::Instance->SaveArray( + "entrancesDiscovered", ARRAY_COUNT(saveContext->ship.stats.entrancesDiscovered), + [&](size_t i) { SaveManager::Instance->SaveData("", saveContext->ship.stats.entrancesDiscovered[i]); }); } void GameplayStatsRow(const char* label, const std::string& value, ImVec4 color = COLOR_WHITE, @@ -394,7 +397,7 @@ bool compareTimestampInfoByTime(const TimestampInfo& a, const TimestampInfo& b) return CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.ReverseTimestamps"), 0) ? a.time > b.time : a.time < b.time; } -const char* ResolveSceneID(int sceneID, int roomID){ +const char* ResolveSceneID(int sceneID, int roomID) { if (sceneID == SCENE_GROTTOS) { switch (roomID) { case 0: @@ -427,7 +430,7 @@ const char* ResolveSceneID(int sceneID, int roomID){ return "Big Skulltula Grotto"; }; } else if (sceneID == SCENE_WINDMILL_AND_DAMPES_GRAVE) { - //Only the last room of Dampe's Grave (rm 6) is considered the windmill. + // Only the last room of Dampe's Grave (rm 6) is considered the windmill. return roomID == 6 ? "Windmill" : "Dampe's Grave"; } else if (sceneID < SCENE_ID_MAX) { return sceneMappings[sceneID]; @@ -440,7 +443,7 @@ void DrawGameplayStatsHeader() { ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, { 4.0f, 4.0f }); ImGui::BeginTable("gameplayStatsHeader", 1, ImGuiTableFlags_BordersOuter); ImGui::TableSetupColumn("stat", ImGuiTableColumnFlags_WidthStretch); - //if tag is empty (not a release build) + // if tag is empty (not a release build) if (gGitCommitTag[0] == 0) { GameplayStatsRow("Git Branch:", (char*)gGitBranch); GameplayStatsRow("Git Commit Hash:", (char*)gGitCommitHash); @@ -448,21 +451,31 @@ void DrawGameplayStatsHeader() { GameplayStatsRow("Build Version:", (char*)gBuildVersion); } if (gSaveContext.ship.stats.rtaTiming) { - GameplayStatsRow("Total Time (RTA):", formatTimestampGameplayStat(GAMEPLAYSTAT_TOTAL_TIME), gSaveContext.ship.stats.gameComplete ? COLOR_GREEN : COLOR_WHITE); + GameplayStatsRow("Total Time (RTA):", formatTimestampGameplayStat(GAMEPLAYSTAT_TOTAL_TIME), + gSaveContext.ship.stats.gameComplete ? COLOR_GREEN : COLOR_WHITE); } else { - GameplayStatsRow("Total Game Time:", formatTimestampGameplayStat(GAMEPLAYSTAT_TOTAL_TIME), gSaveContext.ship.stats.gameComplete ? COLOR_GREEN : COLOR_WHITE); + GameplayStatsRow("Total Game Time:", formatTimestampGameplayStat(GAMEPLAYSTAT_TOTAL_TIME), + gSaveContext.ship.stats.gameComplete ? COLOR_GREEN : COLOR_WHITE); } if (CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.ShowAdditionalTimers"), 0)) { // !Only display total game time - GameplayStatsRow("Gameplay Time:", formatTimestampGameplayStat(gSaveContext.ship.stats.playTimer / 2), COLOR_GREY); - GameplayStatsRow("Pause Menu Time:", formatTimestampGameplayStat(gSaveContext.ship.stats.pauseTimer / 3), COLOR_GREY); - GameplayStatsRow("Time in scene:", formatTimestampGameplayStat(gSaveContext.ship.stats.sceneTimer / 2), COLOR_LIGHT_BLUE); - GameplayStatsRow("Time in room:", formatTimestampGameplayStat(gSaveContext.ship.stats.roomTimer / 2), COLOR_LIGHT_BLUE); + GameplayStatsRow("Gameplay Time:", formatTimestampGameplayStat(gSaveContext.ship.stats.playTimer / 2), + COLOR_GREY); + GameplayStatsRow("Pause Menu Time:", formatTimestampGameplayStat(gSaveContext.ship.stats.pauseTimer / 3), + COLOR_GREY); + GameplayStatsRow("Time in scene:", formatTimestampGameplayStat(gSaveContext.ship.stats.sceneTimer / 2), + COLOR_LIGHT_BLUE); + GameplayStatsRow("Time in room:", formatTimestampGameplayStat(gSaveContext.ship.stats.roomTimer / 2), + COLOR_LIGHT_BLUE); } - if (gPlayState != NULL && CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.ShowDebugInfo"), 0)) { // && display debug info + if (gPlayState != NULL && + CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.ShowDebugInfo"), 0)) { // && display debug info GameplayStatsRow("play->sceneNum:", formatHexGameplayStat(gPlayState->sceneNum), COLOR_YELLOW); - GameplayStatsRow("gSaveContext.entranceIndex:", formatHexGameplayStat(gSaveContext.entranceIndex), COLOR_YELLOW); - GameplayStatsRow("gSaveContext.cutsceneIndex:", formatHexOnlyGameplayStat(gSaveContext.cutsceneIndex), COLOR_YELLOW); - GameplayStatsRow("play->roomCtx.curRoom.num:", formatIntGameplayStat(gPlayState->roomCtx.curRoom.num), COLOR_YELLOW); + GameplayStatsRow("gSaveContext.entranceIndex:", formatHexGameplayStat(gSaveContext.entranceIndex), + COLOR_YELLOW); + GameplayStatsRow("gSaveContext.cutsceneIndex:", formatHexOnlyGameplayStat(gSaveContext.cutsceneIndex), + COLOR_YELLOW); + GameplayStatsRow("play->roomCtx.curRoom.num:", formatIntGameplayStat(gPlayState->roomCtx.curRoom.num), + COLOR_YELLOW); } ImGui::EndTable(); ImGui::PopStyleVar(1); @@ -484,12 +497,12 @@ void DrawGameplayStatsTimestampsTab() { for (int i = 0; i < TIMESTAMP_MAX; i++) { // To be shown, the entry must have a non-zero time and a string for its display name if (itemTimestampDisplay[i].time > 0 && strnlen(itemTimestampDisplay[i].name, 21) > 1) { - GameplayStatsRow(itemTimestampDisplay[i].name, formatTimestampGameplayStat(itemTimestampDisplay[i].time), itemTimestampDisplay[i].color); + GameplayStatsRow(itemTimestampDisplay[i].name, formatTimestampGameplayStat(itemTimestampDisplay[i].time), + itemTimestampDisplay[i].color); } } ImGui::EndTable(); ImGui::PopStyleVar(1); - } void DrawGameplayStatsCountsTab() { @@ -520,7 +533,8 @@ void DrawGameplayStatsCountsTab() { ImGui::TableSetupColumn("stat", ImGuiTableColumnFlags_WidthStretch); GameplayStatsRow("Enemies Defeated:", formatIntGameplayStat(enemiesDefeated)); if (enemiesDefeated > 0) { - ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); if (ImGui::TreeNodeEx("Enemy Details...", ImGuiTreeNodeFlags_NoTreePushOnOpen)) { for (int i = COUNT_ENEMIES_DEFEATED_ANUBIS; i <= COUNT_ENEMIES_DEFEATED_WOLFOS; i++) { if (i == COUNT_ENEMIES_DEFEATED_FLOORMASTER) { @@ -537,7 +551,8 @@ void DrawGameplayStatsCountsTab() { GameplayStatsRow("Chests Opened:", formatIntGameplayStat(gSaveContext.ship.stats.count[COUNT_CHESTS_OPENED])); GameplayStatsRow("Ammo Used:", formatIntGameplayStat(ammoUsed)); if (ammoUsed > 0) { - ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); if (ImGui::TreeNodeEx("Ammo Details...", ImGuiTreeNodeFlags_NoTreePushOnOpen)) { for (int i = COUNT_AMMO_USED_STICK; i <= COUNT_AMMO_USED_BEAN; i++) { GameplayStatsRow(countMappings[i], formatIntGameplayStat(gSaveContext.ship.stats.count[i])); @@ -548,8 +563,10 @@ void DrawGameplayStatsCountsTab() { GameplayStatsRow("Sword Swings:", formatIntGameplayStat(gSaveContext.ship.stats.count[COUNT_SWORD_SWINGS])); GameplayStatsRow("Steps Taken:", formatIntGameplayStat(gSaveContext.ship.stats.count[COUNT_STEPS])); // If using MM Bunny Hood enhancement, show how long it's been equipped (not counting pause time) - if (CVarGetInteger(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA || gSaveContext.ship.stats.count[COUNT_TIME_BUNNY_HOOD] > 0) { - GameplayStatsRow("Bunny Hood Time:", formatTimestampGameplayStat(gSaveContext.ship.stats.count[COUNT_TIME_BUNNY_HOOD] / 2)); + if (CVarGetInteger(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA || + gSaveContext.ship.stats.count[COUNT_TIME_BUNNY_HOOD] > 0) { + GameplayStatsRow("Bunny Hood Time:", + formatTimestampGameplayStat(gSaveContext.ship.stats.count[COUNT_TIME_BUNNY_HOOD] / 2)); } GameplayStatsRow("Rolls:", formatIntGameplayStat(gSaveContext.ship.stats.count[COUNT_ROLLS])); GameplayStatsRow("Bonks:", formatIntGameplayStat(gSaveContext.ship.stats.count[COUNT_BONKS])); @@ -561,7 +578,8 @@ void DrawGameplayStatsCountsTab() { GameplayStatsRow("Bushes Cut:", formatIntGameplayStat(gSaveContext.ship.stats.count[COUNT_BUSHES_CUT])); GameplayStatsRow("Buttons Pressed:", formatIntGameplayStat(buttonPresses)); if (buttonPresses > 0) { - ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); if (ImGui::TreeNodeEx("Buttons...", ImGuiTreeNodeFlags_NoTreePushOnOpen)) { for (int i = COUNT_BUTTON_PRESSES_A; i <= COUNT_BUTTON_PRESSES_START; i++) { GameplayStatsRow(countMappings[i], formatIntGameplayStat(gSaveContext.ship.stats.count[i])); @@ -574,16 +592,19 @@ void DrawGameplayStatsCountsTab() { void DrawGameplayStatsBreakdownTab() { for (int i = 0; i < gSaveContext.ship.stats.tsIdx; i++) { - std::string sceneName = ResolveSceneID(gSaveContext.ship.stats.sceneTimestamps[i].scene, gSaveContext.ship.stats.sceneTimestamps[i].room); + std::string sceneName = ResolveSceneID(gSaveContext.ship.stats.sceneTimestamps[i].scene, + gSaveContext.ship.stats.sceneTimestamps[i].room); std::string name; - if (CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.RoomBreakdown"), 0) && gSaveContext.ship.stats.sceneTimestamps[i].scene != SCENE_GROTTOS) { + if (CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.RoomBreakdown"), 0) && + gSaveContext.ship.stats.sceneTimestamps[i].scene != SCENE_GROTTOS) { name = fmt::format("{:s} Room {:d}", sceneName, gSaveContext.ship.stats.sceneTimestamps[i].room); } else { name = sceneName; } strcpy(sceneTimestampDisplay[i].name, name.c_str()); - sceneTimestampDisplay[i].time = CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.RoomBreakdown"), 0) ? - gSaveContext.ship.stats.sceneTimestamps[i].roomTime : gSaveContext.ship.stats.sceneTimestamps[i].sceneTime; + sceneTimestampDisplay[i].time = CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.RoomBreakdown"), 0) + ? gSaveContext.ship.stats.sceneTimestamps[i].roomTime + : gSaveContext.ship.stats.sceneTimestamps[i].sceneTime; sceneTimestampDisplay[i].color = COLOR_GREY; sceneTimestampDisplay[i].isRoom = gSaveContext.ship.stats.sceneTimestamps[i].isRoom; } @@ -599,8 +620,11 @@ void DrawGameplayStatsBreakdownTab() { } } std::string toPass; - if (CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.RoomBreakdown"), 0) && gSaveContext.ship.stats.sceneNum != SCENE_GROTTOS) { - toPass = fmt::format("{:s} Room {:d}", ResolveSceneID(gSaveContext.ship.stats.sceneNum, gSaveContext.ship.stats.roomNum), gSaveContext.ship.stats.roomNum); + if (CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.RoomBreakdown"), 0) && + gSaveContext.ship.stats.sceneNum != SCENE_GROTTOS) { + toPass = fmt::format("{:s} Room {:d}", + ResolveSceneID(gSaveContext.ship.stats.sceneNum, gSaveContext.ship.stats.roomNum), + gSaveContext.ship.stats.roomNum); } else { toPass = ResolveSceneID(gSaveContext.ship.stats.sceneNum, gSaveContext.ship.stats.roomNum); } @@ -611,27 +635,27 @@ void DrawGameplayStatsBreakdownTab() { void DrawGameplayStatsOptionsTab() { UIWidgets::CVarCheckbox("Show in-game total timer", CVAR_ENHANCEMENT("GameplayStats.ShowIngameTimer"), - UIWidgets::CheckboxOptions() - .Tooltip("Keep track of the timer as an in-game HUD element. The position of the " - "timer can be changed in the Cosmetics Editor.") - .Color(THEME_COLOR)); + UIWidgets::CheckboxOptions() + .Tooltip("Keep track of the timer as an in-game HUD element. The position of the " + "timer can be changed in the Cosmetics Editor.") + .Color(THEME_COLOR)); UIWidgets::CVarCheckbox("Show latest timestamps on top", CVAR_ENHANCEMENT("GameplayStats.ReverseTimestamps"), - UIWidgets::CheckboxOptions().Color(THEME_COLOR)); + UIWidgets::CheckboxOptions().Color(THEME_COLOR)); UIWidgets::CVarCheckbox("Room Breakdown", CVAR_ENHANCEMENT("GameplayStats.RoomBreakdown"), - UIWidgets::CheckboxOptions() - .Tooltip("Allows a more in-depth perspective of time spent in a certain map.") - .Color(THEME_COLOR)); + UIWidgets::CheckboxOptions() + .Tooltip("Allows a more in-depth perspective of time spent in a certain map.") + .Color(THEME_COLOR)); UIWidgets::CVarCheckbox("RTA Timing on new files", CVAR_ENHANCEMENT("GameplayStats.RTATiming"), - UIWidgets::CheckboxOptions() - .Tooltip("Timestamps are relative to starting timestamp rather than in game time, " - "usually necessary for races/speedruns.\n\n" - "Starting timestamp is on first non-C-up input after intro cutscene.\n\n" - "NOTE: THIS NEEDS TO BE SET BEFORE CREATING A FILE TO TAKE EFFECT") - .Color(THEME_COLOR)); + UIWidgets::CheckboxOptions() + .Tooltip("Timestamps are relative to starting timestamp rather than in game time, " + "usually necessary for races/speedruns.\n\n" + "Starting timestamp is on first non-C-up input after intro cutscene.\n\n" + "NOTE: THIS NEEDS TO BE SET BEFORE CREATING A FILE TO TAKE EFFECT") + .Color(THEME_COLOR)); UIWidgets::CVarCheckbox("Show additional detail timers", CVAR_ENHANCEMENT("GameplayStats.ShowAdditionalTimers"), - UIWidgets::CheckboxOptions().Color(THEME_COLOR)); + UIWidgets::CheckboxOptions().Color(THEME_COLOR)); UIWidgets::CVarCheckbox("Show Debug Info", CVAR_ENHANCEMENT("GameplayStats.ShowDebugInfo"), - UIWidgets::CheckboxOptions().Color(THEME_COLOR)); + UIWidgets::CheckboxOptions().Color(THEME_COLOR)); } void GameplayStatsWindow::DrawElement() { @@ -693,7 +717,8 @@ void InitStats(bool isDebug) { for (int scenesIdx = 0; scenesIdx < ARRAY_COUNT(gSaveContext.ship.stats.scenesDiscovered); scenesIdx++) { gSaveContext.ship.stats.scenesDiscovered[scenesIdx] = 0; } - for (int entrancesIdx = 0; entrancesIdx < ARRAY_COUNT(gSaveContext.ship.stats.entrancesDiscovered); entrancesIdx++) { + for (int entrancesIdx = 0; entrancesIdx < ARRAY_COUNT(gSaveContext.ship.stats.entrancesDiscovered); + entrancesIdx++) { gSaveContext.ship.stats.entrancesDiscovered[entrancesIdx] = 0; } @@ -722,7 +747,7 @@ void SetupDisplayNames() { strcpy(itemTimestampDisplayName[ITEM_ARROW_ICE], "Ice Arrows: "); strcpy(itemTimestampDisplayName[ITEM_FARORES_WIND], "Farore's Wind: "); strcpy(itemTimestampDisplayName[ITEM_BOOMERANG], "Boomerang: "); - strcpy(itemTimestampDisplayName[ITEM_LENS], "Lens of Truth: "); + strcpy(itemTimestampDisplayName[ITEM_LENS], "Lens of Struth: "); strcpy(itemTimestampDisplayName[ITEM_HAMMER], "Megaton Hammer: "); strcpy(itemTimestampDisplayName[ITEM_ARROW_LIGHT], "Light Arrows: "); strcpy(itemTimestampDisplayName[ITEM_BOTTLE], "Bottle: "); @@ -786,6 +811,8 @@ void SetupDisplayNames() { strcpy(itemTimestampDisplayName[ITEM_SINGLE_MAGIC], "Magic: "); strcpy(itemTimestampDisplayName[ITEM_DOUBLE_DEFENSE], "Double Defense: "); + // CUSTOM + strcpy(itemTimestampDisplayName[ITEM_GLIDER], "Glider: "); // Other events strcpy(itemTimestampDisplayName[TIMESTAMP_DEFEAT_GOHMA], "Gohma Defeated: "); strcpy(itemTimestampDisplayName[TIMESTAMP_DEFEAT_KING_DODONGO], "KD Defeated: "); diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp index d8113edd3..1dc11f356 100644 --- a/soh/soh/Enhancements/randomizer/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/item_list.cpp @@ -29,7 +29,7 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_IRON_BOOTS] = Item(RG_IRON_BOOTS, Text{ "Iron Boots", "Bottes de plomb", "Eisenstiefel" }, ITEMTYPE_EQUIP, GI_BOOTS_IRON, true, LOGIC_IRON_BOOTS, RHT_IRON_BOOTS, ITEM_BOOTS_IRON, OBJECT_GI_BOOTS_2, GID_BOOTS_IRON, 0x53, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_HOVER_BOOTS] = Item(RG_HOVER_BOOTS, Text{ "Hover Boots", "Bottes de airs", "Gleitstiefel" }, ITEMTYPE_EQUIP, GI_BOOTS_HOVER, true, LOGIC_HOVER_BOOTS, RHT_HOVER_BOOTS, ITEM_BOOTS_HOVER, OBJECT_GI_HOVERBOOTS, GID_BOOTS_HOVER, 0x54, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_BOOMERANG] = Item(RG_BOOMERANG, Text{ "Boomerang", "Boomerang", "Bumerang" }, ITEMTYPE_ITEM, GI_BOOMERANG, true, LOGIC_BOOMERANG, RHT_BOOMERANG, ITEM_BOOMERANG, OBJECT_GI_BOOMERANG, GID_BOOMERANG, 0x35, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_LENS_OF_TRUTH] = Item(RG_LENS_OF_TRUTH, Text{ "Lens of Truth", "Monocle de Vérité", "Auge der Wahrheit" }, ITEMTYPE_ITEM, GI_LENS, true, LOGIC_LENS_OF_TRUTH, RHT_LENS_OF_TRUTH, ITEM_LENS, OBJECT_GI_GLASSES, GID_LENS, 0x39, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + itemTable[RG_LENS_OF_TRUTH] = Item(RG_LENS_OF_TRUTH, Text{ "Lens of Struth", "Monocle de Vérité", "Auge der Wahrheit" }, ITEMTYPE_ITEM, GI_LENS, true, LOGIC_LENS_OF_TRUTH, RHT_LENS_OF_TRUTH, ITEM_LENS, OBJECT_GI_GLASSES, GID_LENS, 0x39, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_MEGATON_HAMMER] = Item(RG_MEGATON_HAMMER, Text{ "Megaton Hammer", "Masse des Titans", "Stahlhammer" }, ITEMTYPE_ITEM, GI_HAMMER, true, LOGIC_HAMMER, RHT_MEGATON_HAMMER, ITEM_HAMMER, OBJECT_GI_HAMMER, GID_HAMMER, 0x38, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_STONE_OF_AGONY] = Item(RG_STONE_OF_AGONY, Text{ "Stone of Agony", "Pierre de Souffrance", "Stein des Wissens" }, ITEMTYPE_ITEM, GI_STONE_OF_AGONY, true, LOGIC_STONE_OF_AGONY, RHT_STONE_OF_AGONY, ITEM_STONE_OF_AGONY, OBJECT_GI_MAP, GID_STONE_OF_AGONY, 0x68, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_DINS_FIRE] = Item(RG_DINS_FIRE, Text{ "Din's Fire", "Feu de Din", "Dins Feuerinferno" }, ITEMTYPE_ITEM, GI_DINS_FIRE, true, LOGIC_DINS_FIRE, RHT_DINS_FIRE, ITEM_DINS_FIRE, OBJECT_GI_GODDESS, GID_DINS_FIRE, 0xAD, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); @@ -405,6 +405,8 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_MAGIC_DOUBLE] = Item(RG_MAGIC_DOUBLE, Text{ "Enhanced Magic Meter", "Jauge de Magie améliorée", "Verbessertes Magisches Maß" }, ITEMTYPE_ITEM, 0x8A, true, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_DOUBLE, RG_MAGIC_DOUBLE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0xE8, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); itemTable[RG_TRIFORCE_PIECE] = Item(RG_TRIFORCE_PIECE, Text{ "Triforce Piece", "Triforce Piece", "Triforce-Fragment" }, ITEMTYPE_ITEM, 0xDF, true, LOGIC_TRIFORCE_PIECES, RHT_TRIFORCE_PIECE, RG_TRIFORCE_PIECE, OBJECT_GI_BOMB_2, GID_TRIFORCE_PIECE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_GLIDER] = Item(RG_GLIDER, Text{ "Glider", "Glider", "Glider" }, ITEMTYPE_ITEM, 0xDF, true, LOGIC_TRIFORCE_PIECES, RHT_TRIFORCE_PIECE, RG_TRIFORCE_PIECE, OBJECT_GI_BOMB_2, GID_TRIFORCE_PIECE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + // clang-format on // Init itemNameToEnum diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 8378f25fb..759137ed6 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -6,7 +6,7 @@ #define MAX_TRICK_NAME_SIZE 50 -#define TWO_ACTOR_PARAMS(a, b) ((((a)&0xFFFF) << 16) | ((b)&0xFFFF)) +#define TWO_ACTOR_PARAMS(a, b) ((((a) & 0xFFFF) << 16) | ((b) & 0xFFFF)) // This should probably go in a less rando-specific location // but the best location will probably be in the modding engine @@ -209,7 +209,7 @@ typedef enum { LOGIC_OCARINA_C_UP_BUTTON, LOGIC_OCARINA_C_DOWN_BUTTON, LOGIC_OCARINA_C_LEFT_BUTTON, - LOGIC_OCARINA_C_RIGHT_BUTTON, + LOGIC_OCARINA_C_RIGHT_BUTTON, LOGIC_TRIFORCE_PIECES, LOGIC_MAX } LogicVal; @@ -2336,7 +2336,7 @@ typedef enum { RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1, RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, // End Pots - + // Overworld Crates RC_GV_FREESTANDING_POH_CRATE, RC_GV_NEAR_COW_CRATE, @@ -3467,12 +3467,13 @@ typedef enum { RC_MAX } RandomizerCheck; -// Randomizer tricks and glitches (beta) based on knowledge of what is achievable in Ship of Harkinian randomizer, excludes Item manipulation (e.g. RBA/GIM/SRM) and Wrong Warping and Ganon BK Skip -// TODO Fill and alphabetize (area based tricks must have area in name and come alphetized after general tricks) +// Randomizer tricks and glitches (beta) based on knowledge of what is achievable in Ship of Harkinian randomizer, +// excludes Item manipulation (e.g. RBA/GIM/SRM) and Wrong Warping and Ganon BK Skip +// TODO Fill and alphabetize (area based tricks must have area in name and come alphetized after general tricks) // TODO test commented out tricks to see if consistent with console on SoH // TODO add area specific tricks typedef enum { - RT_VISIBLE_COLLISION, // -- general tricks + RT_VISIBLE_COLLISION, // -- general tricks RT_GROTTOS_WITHOUT_AGONY, RT_FEWER_TUNIC_REQUIREMENTS, RT_RUSTED_SWITCHES, @@ -3482,7 +3483,7 @@ typedef enum { RT_HOVER_BOOST_SIMPLE, RT_BOMBCHU_BEEHIVES, RT_BLUE_FIRE_MUD_WALLS, - RT_KF_ADULT_GS, // -- location tricks + RT_KF_ADULT_GS, // -- location tricks RT_LW_BRIDGE, RT_LW_MIDO_BACKFLIP, RT_LW_GS_BEAN, @@ -3490,7 +3491,7 @@ typedef enum { RT_KAK_MAN_ON_ROOF, RT_KAK_TOWER_GS, RT_KAK_ADULT_WINDMILL_POH, - RT_KAK_CHILD_WINDMILL_POH, + RT_KAK_CHILD_WINDMILL_POH, RT_KAK_ROOFTOP_GS, RT_GY_POH, RT_GY_CHILD_DAMPE_RACE_POH, @@ -3649,7 +3650,7 @@ typedef enum { RT_GANON_MQ_FIRE_TRIAL, RT_GANON_MQ_SHADOW_TRIAL, RT_GANON_MQ_LIGHT_TRIAL, - //RT_ROCS_FEATHER --if implemented with main branch + // RT_ROCS_FEATHER --if implemented with main branch RT_FOREST_TEMPLE_BK_SKIP, RT_FIRE_TEMPLE_BK_SKIP, RT_WATER_TEMPLE_BK_SKIP, @@ -3704,11 +3705,11 @@ typedef enum { RT_WEIRDSHOT, RT_WEIRDSHOT_CHU, RT_WEIRDSHOT_ENEMY, - //RT_FW_VOID_WARP_FAST_TEXT, --untested tricks: - //RT_ACTION_SWAP, - //RT_ACTOR_GLITCH, - //RT_ADULT_TRADE_TTG, - RT_TOT_DOT_SKIP_SWORDLESS, //AREA SPECIFIC GLITCHES + // RT_FW_VOID_WARP_FAST_TEXT, --untested tricks: + // RT_ACTION_SWAP, + // RT_ACTOR_GLITCH, + // RT_ADULT_TRADE_TTG, + RT_TOT_DOT_SKIP_SWORDLESS, // AREA SPECIFIC GLITCHES RT_TOT_DOT_SKIP_SWORD, RT_LLR_STEAL_EPONA, RT_KF_POKEY_SKIP, @@ -3724,7 +3725,7 @@ typedef enum { RT_ZF_JABU_ADULT_HOVERBOOT_BOMB, RT_FOREST_TEMPLE_FOUR_POE_SKIP, RT_FOREST_TEMPLE_JUNGLE_JUMP, - //RT_DARUNIA_CUTSCENE, + // RT_DARUNIA_CUTSCENE, RT_BOTTOM_OF_THE_WELL_SKULL_PUSH, RT_GANONS_CASTLE_BARRIER_SKIP_HOVER, RT_GANONS_CASTLE_GOLD_GAUNTLET_SKIP, @@ -3985,7 +3986,7 @@ typedef enum { RG_LONGSHOT, RG_SCARECROW, - //Overworld keys + // Overworld keys RG_GUARD_HOUSE_KEY, RG_MARKET_BAZAAR_KEY, RG_MARKET_POTION_SHOP_KEY, @@ -4015,7 +4016,10 @@ typedef enum { RG_STICKS, RG_NUTS, RG_EPONA, - RG_MAX + RG_MAX, + + // CUSTOM + RG_GLIDER } RandomizerGet; typedef enum { @@ -5405,7 +5409,7 @@ typedef enum { RHT_CRATE_WATER_TEMPLE, RHT_CRATE_SPIRIT_TEMPLE, RHT_CRATE_SHADOW_TEMPLE, - RHT_CRATE_GERUDO_TRAINING_GROUND, + RHT_CRATE_GERUDO_TRAINING_GROUND, // Ganon Line RHT_GANON_JOKE01, RHT_GANON_JOKE02, @@ -5589,7 +5593,6 @@ typedef enum { RHT_MAX, } RandomizerHintTextKey; - typedef struct { RandomizerGet rgID; RandomizerGet fakeRgID; @@ -5698,16 +5701,16 @@ typedef enum { RSK_STARTING_KOKIRI_SWORD, RSK_STARTING_MASTER_SWORD, RSK_STARTING_ZELDAS_LULLABY, - RSK_STARTING_EPONAS_SONG, - RSK_STARTING_SARIAS_SONG, + RSK_STARTING_EPONAS_SONG, + RSK_STARTING_SARIAS_SONG, RSK_STARTING_SUNS_SONG, RSK_STARTING_SONG_OF_TIME, RSK_STARTING_SONG_OF_STORMS, - RSK_STARTING_MINUET_OF_FOREST, + RSK_STARTING_MINUET_OF_FOREST, RSK_STARTING_BOLERO_OF_FIRE, RSK_STARTING_SERENADE_OF_WATER, - RSK_STARTING_REQUIEM_OF_SPIRIT, - RSK_STARTING_NOCTURNE_OF_SHADOW, + RSK_STARTING_REQUIEM_OF_SPIRIT, + RSK_STARTING_NOCTURNE_OF_SHADOW, RSK_STARTING_PRELUDE_OF_LIGHT, RSK_SHUFFLE_KOKIRI_SWORD, RSK_SHUFFLE_MASTER_SWORD, @@ -5882,8 +5885,8 @@ typedef enum { RSK_MAX } RandomizerSettingKey; -//Generic Settings (any binary option can use this) -// off/on +// Generic Settings (any binary option can use this) +// off/on typedef enum { RO_GENERIC_OFF, RO_GENERIC_ON, @@ -5901,54 +5904,54 @@ typedef enum { RO_GENERIC_SKIP, } RandoOptionGenericSkip; -//Closed Forest settings (On, Deku Only, Off) +// Closed Forest settings (On, Deku Only, Off) typedef enum { RO_CLOSED_FOREST_ON, RO_CLOSED_FOREST_DEKU_ONLY, RO_CLOSED_FOREST_OFF, } RandoOptionForest; -//Door of Time settings (closed, song only, open) +// Door of Time settings (closed, song only, open) typedef enum { RO_DOOROFTIME_CLOSED, RO_DOOROFTIME_SONGONLY, RO_DOOROFTIME_OPEN, } RandoOptionDoorOfTime; -//Zora's Fountain settings (closed, closed as child, open) +// Zora's Fountain settings (closed, closed as child, open) typedef enum { RO_ZF_CLOSED, RO_ZF_CLOSED_CHILD, RO_ZF_OPEN, } RandoOptionZorasFountain; -//Sleeping Waterfall settings (closed, open) +// Sleeping Waterfall settings (closed, open) typedef enum { RO_WATERFALL_CLOSED, RO_WATERFALL_OPEN, } RandoOptionSleepingWaterfall; -//Starting Age settings (child, adult, random) +// Starting Age settings (child, adult, random) typedef enum { RO_AGE_CHILD, RO_AGE_ADULT, RO_AGE_RANDOM, } RandoOptionStartingAge; -//Fortress Carpenters settings (normal, fast, free) +// Fortress Carpenters settings (normal, fast, free) typedef enum { RO_GF_CARPENTERS_NORMAL, RO_GF_CARPENTERS_FAST, RO_GF_CARPENTERS_FREE, } RandoOptionGerudoFortress; -//Kakariko Gate settings (closed/open) +// Kakariko Gate settings (closed/open) typedef enum { RO_KAK_GATE_CLOSED, RO_KAK_GATE_OPEN, } RandoOptionKakarikoGate; -//Rainbow Bridge settings (vanilla, always open, stones, medallions, dungeon rewards, dungeons, tokens) +// Rainbow Bridge settings (vanilla, always open, stones, medallions, dungeon rewards, dungeons, tokens) typedef enum { RO_BRIDGE_VANILLA = 0, RO_BRIDGE_ALWAYS_OPEN, @@ -5967,14 +5970,14 @@ typedef enum { RO_BRIDGE_WILDCARD_REWARD, } RandoOptionBridgeRewards; -//Shopsanity settings (off, specific count, random) +// Shopsanity settings (off, specific count, random) typedef enum { RO_SHOPSANITY_OFF, RO_SHOPSANITY_SPECIFIC_COUNT, RO_SHOPSANITY_RANDOM, } RandoOptionShopsanity; -//Shopsanity count settings (0-7 items) +// Shopsanity count settings (0-7 items) typedef enum { RO_SHOPSANITY_COUNT_ZERO_ITEMS, RO_SHOPSANITY_COUNT_ONE_ITEM, @@ -5987,27 +5990,27 @@ typedef enum { RO_SHOPSANITY_COUNT_EIGHT_ITEMS, } RandoOptionShopsanityCount; -//Shopsanity price ranges +// Shopsanity price ranges typedef enum { RO_PRICE_VANILLA, - RO_PRICE_CHEAP_BALANCED, //Balanced random from 0-95, favoring lower numbers - RO_PRICE_BALANCED, //Random from 0-300, favoring lower numbers + RO_PRICE_CHEAP_BALANCED, // Balanced random from 0-95, favoring lower numbers + RO_PRICE_BALANCED, // Random from 0-300, favoring lower numbers RO_PRICE_FIXED, RO_PRICE_RANGE, RO_PRICE_SET_BY_WALLET, } RandoOptionPrices; -//Scrubsanity settings (off, affordable, expensive, random) +// Scrubsanity settings (off, affordable, expensive, random) typedef enum { RO_SCRUBS_OFF, RO_SCRUBS_ONE_TIME_ONLY, RO_SCRUBS_ALL, } RandoOptionScrubsanity; -//Ammo drop settings (on, "on+bombchu", off) +// Ammo drop settings (on, "on+bombchu", off) typedef enum { RO_AMMO_DROPS_OFF, - //RO_AMMO_DROPS_ON_PLUS_BOMBCHU, + // RO_AMMO_DROPS_ON_PLUS_BOMBCHU, RO_AMMO_DROPS_ON, } RandoOptionAmmoDrops; @@ -6017,7 +6020,7 @@ typedef enum { RO_BOSS_SOULS_ON_PLUS_GANON, } RandoOptionBossSouls; -//Fishsanity settings (off, loach only, pond only, grottos only, both) +// Fishsanity settings (off, loach only, pond only, grottos only, both) typedef enum { RO_FISHSANITY_OFF, RO_FISHSANITY_HYRULE_LOACH, @@ -6026,15 +6029,15 @@ typedef enum { RO_FISHSANITY_BOTH } RandoOptionsFishsanity; -//Infinite Upgrades settings (off, progressive, condensed progressive) +// Infinite Upgrades settings (off, progressive, condensed progressive) typedef enum { RO_INF_UPGRADES_OFF, RO_INF_UPGRADES_PROGRESSIVE, RO_INF_UPGRADES_CONDENSED_PROGRESSIVE, } RandoOptionInfiniteUpgrades; -//Any Dungeon Item (start with, vanilla, own dungeon, any dungeon, -//overworld, anywhere) +// Any Dungeon Item (start with, vanilla, own dungeon, any dungeon, +// overworld, anywhere) typedef enum { RO_DUNGEON_ITEM_LOC_STARTWITH, RO_DUNGEON_ITEM_LOC_VANILLA, @@ -6044,7 +6047,7 @@ typedef enum { RO_DUNGEON_ITEM_LOC_ANYWHERE, } RandoOptionDungeonItemLocation; -//Dungeon reward settings +// Dungeon reward settings typedef enum { RO_DUNGEON_REWARDS_VANILLA, RO_DUNGEON_REWARDS_END_OF_DUNGEON, @@ -6053,7 +6056,7 @@ typedef enum { RO_DUNGEON_REWARDS_ANYWHERE, } RandoOptionDungeonRewards; -//Keyring Settings +// Keyring Settings typedef enum { RO_KEYRINGS_OFF, RO_KEYRINGS_RANDOM, @@ -6067,8 +6070,8 @@ typedef enum { RO_KEYRING_FOR_DUNGEON_ON, } RandoOptionKeyringForDungeon; -//Ganon's Boss Key Settings (vanilla, own dungeon, start with, -//overworld, anywhere, 100 GS reward) +// Ganon's Boss Key Settings (vanilla, own dungeon, start with, +// overworld, anywhere, 100 GS reward) typedef enum { RO_GANON_BOSS_KEY_VANILLA, RO_GANON_BOSS_KEY_OWN_DUNGEON, @@ -6101,42 +6104,42 @@ typedef enum { RO_LACS_WILDCARD_REWARD, } RandoOptionLACSRewards; -//Ganon's Trials +// Ganon's Trials typedef enum { RO_GANONS_TRIALS_SKIP, RO_GANONS_TRIALS_SET_NUMBER, RO_GANONS_TRIALS_RANDOM_NUMBER, } RandoOptionGanonsTrials; -//Shuffle Dungeon Entrance Settings (Off, on, plus ganon) +// Shuffle Dungeon Entrance Settings (Off, on, plus ganon) typedef enum { RO_DUNGEON_ENTRANCE_SHUFFLE_OFF, RO_DUNGEON_ENTRANCE_SHUFFLE_ON, RO_DUNGEON_ENTRANCE_SHUFFLE_ON_PLUS_GANON, } RandoOptionDungeonEntranceShuffle; -//Shuffle Boss Room Entrance Settings (Off, Age Restricted, Full) +// Shuffle Boss Room Entrance Settings (Off, Age Restricted, Full) typedef enum { RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF, RO_BOSS_ROOM_ENTRANCE_SHUFFLE_AGE_RESTRICTED, RO_BOSS_ROOM_ENTRANCE_SHUFFLE_FULL, } RandoOptionBossRoomEntranceShuffle; -//Shuffle Interior Entrance Settings (Off, simple, all) +// Shuffle Interior Entrance Settings (Off, simple, all) typedef enum { RO_INTERIOR_ENTRANCE_SHUFFLE_OFF, RO_INTERIOR_ENTRANCE_SHUFFLE_SIMPLE, RO_INTERIOR_ENTRANCE_SHUFFLE_ALL, } RandoOptionInteriorEntranceShuffle; -//Song shuffle Settings (Song locations, Dungeon rewards, anywhere) +// Song shuffle Settings (Song locations, Dungeon rewards, anywhere) typedef enum { RO_SONG_SHUFFLE_SONG_LOCATIONS, RO_SONG_SHUFFLE_DUNGEON_REWARDS, RO_SONG_SHUFFLE_ANYWHERE, } RandoOptionSongShuffle; -//Shuffle Merchants Settings (Off, Beans Only, All but Beans, All) +// Shuffle Merchants Settings (Off, Beans Only, All but Beans, All) typedef enum { RO_SHUFFLE_MERCHANTS_OFF, RO_SHUFFLE_MERCHANTS_BEANS_ONLY, @@ -6144,14 +6147,14 @@ typedef enum { RO_SHUFFLE_MERCHANTS_ALL } RandoOptionShuffleMerchants; -//Starting Ocarina Settings (off, fairy) +// Starting Ocarina Settings (off, fairy) typedef enum { RO_STARTING_OCARINA_OFF, RO_STARTING_OCARINA_FAIRY, RO_STARTING_OCARINA_TIME, } RandoOptionStartingOcarina; -//Item Pool Settings +// Item Pool Settings typedef enum { RO_ITEM_POOL_PLENTIFUL, RO_ITEM_POOL_BALANCED, @@ -6159,7 +6162,7 @@ typedef enum { RO_ITEM_POOL_MINIMAL, } RandoOptionItemPool; -//Ice Trap Settings +// Ice Trap Settings typedef enum { RO_ICE_TRAPS_OFF, RO_ICE_TRAPS_NORMAL, @@ -6168,8 +6171,8 @@ typedef enum { RO_ICE_TRAPS_ONSLAUGHT, } RandoOptionIceTraps; -//Gossip Stone Hint Settings (no hints, needs nothing, -//needs mask of truth, needs stone of agony) +// Gossip Stone Hint Settings (no hints, needs nothing, +// needs mask of truth, needs stone of agony) typedef enum { RO_GOSSIP_STONES_NONE, RO_GOSSIP_STONES_NEED_NOTHING, @@ -6177,14 +6180,14 @@ typedef enum { RO_GOSSIP_STONES_NEED_STONE, } RandoOptionGossipStones; -//Hint Clarity Settings (obscure, ambiguous, clear) +// Hint Clarity Settings (obscure, ambiguous, clear) typedef enum { RO_HINT_CLARITY_OBSCURE, RO_HINT_CLARITY_AMBIGUOUS, RO_HINT_CLARITY_CLEAR, } RandoOptionHintClarity; -//Hint Distribution Settings (useless, balanced, strong, very strong) +// Hint Distribution Settings (useless, balanced, strong, very strong) typedef enum { RO_HINT_DIST_USELESS, RO_HINT_DIST_BALANCED, @@ -6192,8 +6195,8 @@ typedef enum { RO_HINT_DIST_VERY_STRONG, } RandoOptionHintDistribution; -//Gerudo Fortress Key Settings (vanilla, any dungeon, overworld, -//anywhere) +// Gerudo Fortress Key Settings (vanilla, any dungeon, overworld, +// anywhere) typedef enum { RO_GERUDO_KEYS_VANILLA, RO_GERUDO_KEYS_ANY_DUNGEON, @@ -6201,7 +6204,7 @@ typedef enum { RO_GERUDO_KEYS_ANYWHERE, } RandoOptionGerudoKeys; -//Tokensanity settings (off, dungeons, overworld, all) +// Tokensanity settings (off, dungeons, overworld, all) typedef enum { RO_TOKENSANITY_OFF, RO_TOKENSANITY_DUNGEONS, @@ -6209,7 +6212,7 @@ typedef enum { RO_TOKENSANITY_ALL, } RandoOptionTokensanity; -//Freestanding Hearts/Rupees settings (off, dungeons, overworld, all) +// Freestanding Hearts/Rupees settings (off, dungeons, overworld, all) typedef enum { RO_SHUFFLE_FREESTANDING_OFF, RO_SHUFFLE_FREESTANDING_DUNGEONS, @@ -6241,7 +6244,7 @@ typedef enum { RO_SHUFFLE_CRATES_ALL, } RandoOptionShuffleCrates; -//Link's Pocket Settings (dungeon reward, advancement, anything, nothing) +// Link's Pocket Settings (dungeon reward, advancement, anything, nothing) typedef enum { RO_LINKS_POCKET_DUNGEON_REWARD, RO_LINKS_POCKET_ADVANCEMENT, @@ -6441,13 +6444,13 @@ typedef enum { RE_OCTOROK, } RandomizerEnemy; -//RANDOTODO compare child long jumpslash range with adult short +// RANDOTODO compare child long jumpslash range with adult short typedef enum { ED_CLOSE, - //hammer or kokiri sword + // hammer or kokiri sword ED_SHORT_JUMPSLASH, ED_MASTER_SWORD_JUMPSLASH, - //sticks or BGS + // sticks or BGS ED_LONG_JUMPSLASH, ED_BOMB_THROW, ED_BOOMERANG, diff --git a/soh/soh/Enhancements/randomizer/static_data.cpp b/soh/soh/Enhancements/randomizer/static_data.cpp index 40fdc9c50..3c153a411 100644 --- a/soh/soh/Enhancements/randomizer/static_data.cpp +++ b/soh/soh/Enhancements/randomizer/static_data.cpp @@ -5,189 +5,186 @@ namespace Rando { std::unordered_map StaticData::hintTypeNames = { - {HINT_TYPE_HINT_KEY, CustomMessage("Message")}, - {HINT_TYPE_AREA, CustomMessage("Area")}, - {HINT_TYPE_ITEM, CustomMessage("Item")}, - {HINT_TYPE_TRIAL, CustomMessage("Trial")}, - {HINT_TYPE_ENTRANCE, CustomMessage("Entrance")}, - {HINT_TYPE_ITEM_AREA, CustomMessage("Item Area")}, - {HINT_TYPE_ALTAR_CHILD, CustomMessage("Child Altar")}, - {HINT_TYPE_ALTAR_ADULT, CustomMessage("Adult Altar")}, - {HINT_TYPE_WOTH, CustomMessage("Way of the Hero")}, - {HINT_TYPE_FOOLISH, CustomMessage("Foolish")}, - {HINT_TYPE_MESSAGE, CustomMessage("Hardcoded Message")} + { HINT_TYPE_HINT_KEY, CustomMessage("Message") }, + { HINT_TYPE_AREA, CustomMessage("Area") }, + { HINT_TYPE_ITEM, CustomMessage("Item") }, + { HINT_TYPE_TRIAL, CustomMessage("Trial") }, + { HINT_TYPE_ENTRANCE, CustomMessage("Entrance") }, + { HINT_TYPE_ITEM_AREA, CustomMessage("Item Area") }, + { HINT_TYPE_ALTAR_CHILD, CustomMessage("Child Altar") }, + { HINT_TYPE_ALTAR_ADULT, CustomMessage("Adult Altar") }, + { HINT_TYPE_WOTH, CustomMessage("Way of the Hero") }, + { HINT_TYPE_FOOLISH, CustomMessage("Foolish") }, + { HINT_TYPE_MESSAGE, CustomMessage("Hardcoded Message") } }; -//RANDOTODO When dynamic grotto check names are done, apply it to these hints -//RANDOTODO Translations +// RANDOTODO When dynamic grotto check names are done, apply it to these hints +// RANDOTODO Translations std::unordered_map StaticData::hintNames = { - {RH_NONE, CustomMessage("ERROR HINT")}, - {RH_KF_DEKU_TREE_LEFT_GOSSIP_STONE, CustomMessage("KF Left Near Deku Gossip Stone")}, //RANDOTODO find cardinal direction - {RH_KF_DEKU_TREE_RIGHT_GOSSIP_STONE, CustomMessage("KF Right Near Deku Gossip Stone")}, - {RH_KF_GOSSIP_STONE, CustomMessage("KF Gossip Stone")}, - {RH_KF_STORMS_GROTTO_GOSSIP_STONE, CustomMessage("KF Storms Grotto Gossip Stone")}, - {RH_LW_GOSSIP_STONE, CustomMessage("LW Gossip Stone")}, - {RH_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE, CustomMessage("LW Near Shortcuts Grotto Gossip Stone")}, - {RH_SFM_MAZE_NEAR_LW_GOSSIP_STONE, CustomMessage("SFM Near LW Gossip Stone")}, - {RH_SFM_MAZE_CENTER_GOSSIP_STONE, CustomMessage("SFM Center Gossip Stone")}, - {RH_SFM_SARIA_GOSSIP_STONE, CustomMessage("SFM Near Saria Gossip Stone")}, - {RH_HF_COW_GROTTO_GOSSIP_STONE, CustomMessage("HF Cow Grotto Gossip Stone")}, - {RH_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE, CustomMessage("HF Near Market Grotto Gossip Stone")}, - {RH_HF_OPEN_GROTTO_GOSSIP_STONE, CustomMessage("HF Open Grotto Gossip Stone")}, - {RH_HF_SOUTHEAST_GROTTO_GOSSIP_STONE, CustomMessage("HF Southeast Grotto Gossip Stone")}, - {RH_TOT_LEFT_CENTER_GOSSIP_STONE, CustomMessage("Market Left Center Gossip Stone")}, - {RH_TOT_LEFTMOST_GOSSIP_STONE, CustomMessage("Market Leftmost Center Gossip Stone")}, - {RH_TOT_RIGHT_CENTER_GOSSIP_STONE, CustomMessage("Market Right Center Gossip Stone")}, - {RH_TOT_RIGHTMOST_GOSSIP_STONE, CustomMessage("Market Rightmost Gossip Stone")}, - {RH_HC_MALON_GOSSIP_STONE, CustomMessage("HC Near Malon Gossip Stone")}, - {RH_HC_ROCK_WALL_GOSSIP_STONE, CustomMessage("HC Rock Wall Gossip Stone")}, - {RH_HC_STORMS_GROTTO_GOSSIP_STONE, CustomMessage("HC Storm Grotto Gossip Stone")}, - {RH_KAK_OPEN_GROTTO_GOSSIP_STONE, CustomMessage("Kak Open Grotto Gossip Stone")}, - {RH_GRAVEYARD_GOSSIP_STONE, CustomMessage("Graveyard Gossip Stone")}, - {RH_DMT_GOSSIP_STONE, CustomMessage("DMT Gossip Stone")}, - {RH_DMT_STORMS_GROTTO_GOSSIP_STONE, CustomMessage("DMT Storms Grotto Gossip Stone")}, - {RH_GC_MAZE_GOSSIP_STONE, CustomMessage("GC Maze Gossip Stone")}, - {RH_GC_MEDIGORON_GOSSIP_STONE, CustomMessage("GC Medigoron Gossip Stone")}, - {RH_DMC_GOSSIP_STONE, CustomMessage("DMC Gossip Stone")}, - {RH_DMC_UPPER_GROTTO_GOSSIP_STONE, CustomMessage("DMC Upper Grotto Gossip Stone")}, - {RH_ZR_NEAR_DOMAIN_GOSSIP_STONE, CustomMessage("ZR Near Domain Gossip Stone")}, - {RH_ZR_NEAR_GROTTOS_GOSSIP_STONE, CustomMessage("ZR Near Grottos Gossip Stone")}, - {RH_ZR_OPEN_GROTTO_GOSSIP_STONE, CustomMessage("ZR Open Grotto Gossip Stone")}, - {RH_ZD_GOSSIP_STONE, CustomMessage("ZD Gossip Stone")}, - {RH_ZF_JABU_GOSSIP_STONE, CustomMessage("ZF Near Jabu Gossip Stone")}, - {RH_ZF_FAIRY_GOSSIP_STONE, CustomMessage("ZF Near Fairy Gossip Stone")}, - {RH_LH_LAB_GOSSIP_STONE, CustomMessage("LH Near Lab Gossip Stone")}, - {RH_LH_SOUTHEAST_GOSSIP_STONE, CustomMessage("LH Southeast Gossip Stone")}, - {RH_LH_SOUTHWEST_GOSSIP_STONE, CustomMessage("LH Southwest Gossip Stone")}, - {RH_GV_GOSSIP_STONE, CustomMessage("Gerudo Valley Gossip Stone")}, - {RH_COLOSSUS_GOSSIP_STONE, CustomMessage("Desert Colossus Gossip Stone")}, - {RH_DODONGOS_CAVERN_GOSSIP_STONE, CustomMessage("Dodongo's Cavern Gossip Stone")}, - {RH_GANONDORF_HINT, CustomMessage("Ganondorf Hint")}, - {RH_GANONDORF_JOKE, CustomMessage("Ganondorf Joke")}, - {RH_SHEIK_HINT, CustomMessage("Sheik in Ganons Castle Hint")}, - {RH_DAMPES_DIARY, CustomMessage("Dampe's Diary Hint")}, - {RH_GREG_RUPEE, CustomMessage("Treasure Chest Game Greg Hint")}, - {RH_ALTAR_CHILD, CustomMessage("ToT Altar as Child")}, - {RH_ALTAR_ADULT, CustomMessage("ToT Altar as Adult")}, - {RH_SARIA_HINT, CustomMessage("Saria's Magic Hint")}, - {RH_LOACH_HINT, CustomMessage("Loach Hint")}, - {RH_FISHING_POLE, CustomMessage("Fishing Pole Hint")}, - {RH_MINUET_WARP_LOC, CustomMessage("Minuet of Forest Destination")}, - {RH_BOLERO_WARP_LOC, CustomMessage("Bolero of Fire Destination")}, - {RH_SERENADE_WARP_LOC, CustomMessage("Serenade of Water Destination")}, - {RH_REQUIEM_WARP_LOC, CustomMessage("Requiem of Spirit Destination")}, - {RH_NOCTURNE_WARP_LOC, CustomMessage("Nocturne of Shadow Destination")}, - {RH_PRELUDE_WARP_LOC, CustomMessage("Prelude of Light Destination")}, - {RH_HBA_HINT, CustomMessage("Horseback Archery Hint")}, - {RH_MALON_HINT, CustomMessage("Malon Hint")}, - {RH_CHICKENS_HINT, CustomMessage("Anju's Child Chickens Hint")}, - {RH_BIG_POES_HINT, CustomMessage("Big Poe Reward Hint")}, - {RH_BIGGORON_HINT, CustomMessage("Biggoron Claim Check Hint")}, - {RH_FROGS_HINT, CustomMessage("Final Frogs in River Hint")}, - {RH_OOT_HINT, CustomMessage("Sheik in Temple of Time Hint")}, - {RH_KAK_10_SKULLS_HINT, CustomMessage("10 Skulls Hint")}, - {RH_KAK_20_SKULLS_HINT, CustomMessage("20 Skulls Hint")}, - {RH_KAK_30_SKULLS_HINT, CustomMessage("30 Skulls Hint")}, - {RH_KAK_40_SKULLS_HINT, CustomMessage("40 Skulls Hint")}, - {RH_KAK_50_SKULLS_HINT, CustomMessage("50 Skulls Hint")}, - {RH_KAK_100_SKULLS_HINT, CustomMessage("100 Skulls Hint")}, - {RH_MASK_SHOP_HINT, CustomMessage("Mask Shop Hint")}, + { RH_NONE, CustomMessage("ERROR HINT") }, + { RH_KF_DEKU_TREE_LEFT_GOSSIP_STONE, + CustomMessage("KF Left Near Deku Gossip Stone") }, // RANDOTODO find cardinal direction + { RH_KF_DEKU_TREE_RIGHT_GOSSIP_STONE, CustomMessage("KF Right Near Deku Gossip Stone") }, + { RH_KF_GOSSIP_STONE, CustomMessage("KF Gossip Stone") }, + { RH_KF_STORMS_GROTTO_GOSSIP_STONE, CustomMessage("KF Storms Grotto Gossip Stone") }, + { RH_LW_GOSSIP_STONE, CustomMessage("LW Gossip Stone") }, + { RH_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE, CustomMessage("LW Near Shortcuts Grotto Gossip Stone") }, + { RH_SFM_MAZE_NEAR_LW_GOSSIP_STONE, CustomMessage("SFM Near LW Gossip Stone") }, + { RH_SFM_MAZE_CENTER_GOSSIP_STONE, CustomMessage("SFM Center Gossip Stone") }, + { RH_SFM_SARIA_GOSSIP_STONE, CustomMessage("SFM Near Saria Gossip Stone") }, + { RH_HF_COW_GROTTO_GOSSIP_STONE, CustomMessage("HF Cow Grotto Gossip Stone") }, + { RH_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE, CustomMessage("HF Near Market Grotto Gossip Stone") }, + { RH_HF_OPEN_GROTTO_GOSSIP_STONE, CustomMessage("HF Open Grotto Gossip Stone") }, + { RH_HF_SOUTHEAST_GROTTO_GOSSIP_STONE, CustomMessage("HF Southeast Grotto Gossip Stone") }, + { RH_TOT_LEFT_CENTER_GOSSIP_STONE, CustomMessage("Market Left Center Gossip Stone") }, + { RH_TOT_LEFTMOST_GOSSIP_STONE, CustomMessage("Market Leftmost Center Gossip Stone") }, + { RH_TOT_RIGHT_CENTER_GOSSIP_STONE, CustomMessage("Market Right Center Gossip Stone") }, + { RH_TOT_RIGHTMOST_GOSSIP_STONE, CustomMessage("Market Rightmost Gossip Stone") }, + { RH_HC_MALON_GOSSIP_STONE, CustomMessage("HC Near Malon Gossip Stone") }, + { RH_HC_ROCK_WALL_GOSSIP_STONE, CustomMessage("HC Rock Wall Gossip Stone") }, + { RH_HC_STORMS_GROTTO_GOSSIP_STONE, CustomMessage("HC Storm Grotto Gossip Stone") }, + { RH_KAK_OPEN_GROTTO_GOSSIP_STONE, CustomMessage("Kak Open Grotto Gossip Stone") }, + { RH_GRAVEYARD_GOSSIP_STONE, CustomMessage("Graveyard Gossip Stone") }, + { RH_DMT_GOSSIP_STONE, CustomMessage("DMT Gossip Stone") }, + { RH_DMT_STORMS_GROTTO_GOSSIP_STONE, CustomMessage("DMT Storms Grotto Gossip Stone") }, + { RH_GC_MAZE_GOSSIP_STONE, CustomMessage("GC Maze Gossip Stone") }, + { RH_GC_MEDIGORON_GOSSIP_STONE, CustomMessage("GC Medigoron Gossip Stone") }, + { RH_DMC_GOSSIP_STONE, CustomMessage("DMC Gossip Stone") }, + { RH_DMC_UPPER_GROTTO_GOSSIP_STONE, CustomMessage("DMC Upper Grotto Gossip Stone") }, + { RH_ZR_NEAR_DOMAIN_GOSSIP_STONE, CustomMessage("ZR Near Domain Gossip Stone") }, + { RH_ZR_NEAR_GROTTOS_GOSSIP_STONE, CustomMessage("ZR Near Grottos Gossip Stone") }, + { RH_ZR_OPEN_GROTTO_GOSSIP_STONE, CustomMessage("ZR Open Grotto Gossip Stone") }, + { RH_ZD_GOSSIP_STONE, CustomMessage("ZD Gossip Stone") }, + { RH_ZF_JABU_GOSSIP_STONE, CustomMessage("ZF Near Jabu Gossip Stone") }, + { RH_ZF_FAIRY_GOSSIP_STONE, CustomMessage("ZF Near Fairy Gossip Stone") }, + { RH_LH_LAB_GOSSIP_STONE, CustomMessage("LH Near Lab Gossip Stone") }, + { RH_LH_SOUTHEAST_GOSSIP_STONE, CustomMessage("LH Southeast Gossip Stone") }, + { RH_LH_SOUTHWEST_GOSSIP_STONE, CustomMessage("LH Southwest Gossip Stone") }, + { RH_GV_GOSSIP_STONE, CustomMessage("Gerudo Valley Gossip Stone") }, + { RH_COLOSSUS_GOSSIP_STONE, CustomMessage("Desert Colossus Gossip Stone") }, + { RH_DODONGOS_CAVERN_GOSSIP_STONE, CustomMessage("Dodongo's Cavern Gossip Stone") }, + { RH_GANONDORF_HINT, CustomMessage("Ganondorf Hint") }, + { RH_GANONDORF_JOKE, CustomMessage("Ganondorf Joke") }, + { RH_SHEIK_HINT, CustomMessage("Sheik in Ganons Castle Hint") }, + { RH_DAMPES_DIARY, CustomMessage("Dampe's Diary Hint") }, + { RH_GREG_RUPEE, CustomMessage("Treasure Chest Game Greg Hint") }, + { RH_ALTAR_CHILD, CustomMessage("ToT Altar as Child") }, + { RH_ALTAR_ADULT, CustomMessage("ToT Altar as Adult") }, + { RH_SARIA_HINT, CustomMessage("Saria's Magic Hint") }, + { RH_LOACH_HINT, CustomMessage("Loach Hint") }, + { RH_FISHING_POLE, CustomMessage("Fishing Pole Hint") }, + { RH_MINUET_WARP_LOC, CustomMessage("Minuet of Forest Destination") }, + { RH_BOLERO_WARP_LOC, CustomMessage("Bolero of Fire Destination") }, + { RH_SERENADE_WARP_LOC, CustomMessage("Serenade of Water Destination") }, + { RH_REQUIEM_WARP_LOC, CustomMessage("Requiem of Spirit Destination") }, + { RH_NOCTURNE_WARP_LOC, CustomMessage("Nocturne of Shadow Destination") }, + { RH_PRELUDE_WARP_LOC, CustomMessage("Prelude of Light Destination") }, + { RH_HBA_HINT, CustomMessage("Horseback Archery Hint") }, + { RH_MALON_HINT, CustomMessage("Malon Hint") }, + { RH_CHICKENS_HINT, CustomMessage("Anju's Child Chickens Hint") }, + { RH_BIG_POES_HINT, CustomMessage("Big Poe Reward Hint") }, + { RH_BIGGORON_HINT, CustomMessage("Biggoron Claim Check Hint") }, + { RH_FROGS_HINT, CustomMessage("Final Frogs in River Hint") }, + { RH_OOT_HINT, CustomMessage("Sheik in Temple of Time Hint") }, + { RH_KAK_10_SKULLS_HINT, CustomMessage("10 Skulls Hint") }, + { RH_KAK_20_SKULLS_HINT, CustomMessage("20 Skulls Hint") }, + { RH_KAK_30_SKULLS_HINT, CustomMessage("30 Skulls Hint") }, + { RH_KAK_40_SKULLS_HINT, CustomMessage("40 Skulls Hint") }, + { RH_KAK_50_SKULLS_HINT, CustomMessage("50 Skulls Hint") }, + { RH_KAK_100_SKULLS_HINT, CustomMessage("100 Skulls Hint") }, + { RH_MASK_SHOP_HINT, CustomMessage("Mask Shop Hint") }, }; -std::unordered_map StaticData::gossipStoneCheckToHint { - {RC_COLOSSUS_GOSSIP_STONE, RH_COLOSSUS_GOSSIP_STONE}, - {RC_DMC_GOSSIP_STONE, RH_DMC_GOSSIP_STONE}, - {RC_DMC_UPPER_GROTTO_GOSSIP_STONE, RH_DMC_UPPER_GROTTO_GOSSIP_STONE}, - {RC_DMT_GOSSIP_STONE, RH_DMT_GOSSIP_STONE}, - {RC_DMT_STORMS_GROTTO_GOSSIP_STONE, RH_DMT_STORMS_GROTTO_GOSSIP_STONE}, - {RC_DODONGOS_CAVERN_GOSSIP_STONE, RH_DODONGOS_CAVERN_GOSSIP_STONE}, - {RC_ZF_FAIRY_GOSSIP_STONE, RH_ZF_FAIRY_GOSSIP_STONE}, - {RC_GC_MAZE_GOSSIP_STONE, RH_GC_MAZE_GOSSIP_STONE}, - {RC_GC_MEDIGORON_GOSSIP_STONE, RH_GC_MEDIGORON_GOSSIP_STONE}, - {RC_GV_GOSSIP_STONE, RH_GV_GOSSIP_STONE}, - {RC_GRAVEYARD_GOSSIP_STONE, RH_GRAVEYARD_GOSSIP_STONE}, - {RC_HC_MALON_GOSSIP_STONE, RH_HC_MALON_GOSSIP_STONE}, - {RC_HC_ROCK_WALL_GOSSIP_STONE, RH_HC_ROCK_WALL_GOSSIP_STONE}, - {RC_HC_STORMS_GROTTO_GOSSIP_STONE, RH_HC_STORMS_GROTTO_GOSSIP_STONE}, - {RC_HF_COW_GROTTO_GOSSIP_STONE, RH_HF_COW_GROTTO_GOSSIP_STONE}, - {RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE, RH_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE}, - {RC_HF_OPEN_GROTTO_GOSSIP_STONE, RH_HF_OPEN_GROTTO_GOSSIP_STONE}, - {RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE, RH_HF_SOUTHEAST_GROTTO_GOSSIP_STONE}, - {RC_ZF_JABU_GOSSIP_STONE, RH_ZF_JABU_GOSSIP_STONE}, - {RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE, RH_KF_DEKU_TREE_LEFT_GOSSIP_STONE}, - {RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE, RH_KF_DEKU_TREE_RIGHT_GOSSIP_STONE}, - {RC_KF_GOSSIP_STONE, RH_KF_GOSSIP_STONE}, - {RC_KF_STORMS_GROTTO_GOSSIP_STONE, RH_KF_STORMS_GROTTO_GOSSIP_STONE}, - {RC_KAK_OPEN_GROTTO_GOSSIP_STONE, RH_KAK_OPEN_GROTTO_GOSSIP_STONE}, - {RC_LH_LAB_GOSSIP_STONE, RH_LH_LAB_GOSSIP_STONE}, - {RC_LH_SOUTHEAST_GOSSIP_STONE, RH_LH_SOUTHEAST_GOSSIP_STONE}, - {RC_LH_SOUTHWEST_GOSSIP_STONE, RH_LH_SOUTHWEST_GOSSIP_STONE}, - {RC_LW_GOSSIP_STONE, RH_LW_GOSSIP_STONE}, - {RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE, RH_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE}, - {RC_SFM_MAZE_LOWER_GOSSIP_STONE, RH_SFM_MAZE_NEAR_LW_GOSSIP_STONE}, - {RC_SFM_MAZE_UPPER_GOSSIP_STONE, RH_SFM_MAZE_CENTER_GOSSIP_STONE}, - {RC_SFM_SARIA_GOSSIP_STONE, RH_SFM_SARIA_GOSSIP_STONE}, - {RC_TOT_LEFT_CENTER_GOSSIP_STONE, RH_TOT_LEFT_CENTER_GOSSIP_STONE}, - {RC_TOT_LEFTMOST_GOSSIP_STONE, RH_TOT_LEFTMOST_GOSSIP_STONE}, - {RC_TOT_RIGHT_CENTER_GOSSIP_STONE, RH_TOT_RIGHT_CENTER_GOSSIP_STONE}, - {RC_TOT_RIGHTMOST_GOSSIP_STONE, RH_TOT_RIGHTMOST_GOSSIP_STONE}, - {RC_ZD_GOSSIP_STONE, RH_ZD_GOSSIP_STONE}, - {RC_ZR_NEAR_DOMAIN_GOSSIP_STONE, RH_ZR_NEAR_DOMAIN_GOSSIP_STONE}, - {RC_ZR_NEAR_GROTTOS_GOSSIP_STONE, RH_ZR_NEAR_GROTTOS_GOSSIP_STONE}, - {RC_ZR_OPEN_GROTTO_GOSSIP_STONE, RH_ZR_OPEN_GROTTO_GOSSIP_STONE} +std::unordered_map StaticData::gossipStoneCheckToHint{ + { RC_COLOSSUS_GOSSIP_STONE, RH_COLOSSUS_GOSSIP_STONE }, + { RC_DMC_GOSSIP_STONE, RH_DMC_GOSSIP_STONE }, + { RC_DMC_UPPER_GROTTO_GOSSIP_STONE, RH_DMC_UPPER_GROTTO_GOSSIP_STONE }, + { RC_DMT_GOSSIP_STONE, RH_DMT_GOSSIP_STONE }, + { RC_DMT_STORMS_GROTTO_GOSSIP_STONE, RH_DMT_STORMS_GROTTO_GOSSIP_STONE }, + { RC_DODONGOS_CAVERN_GOSSIP_STONE, RH_DODONGOS_CAVERN_GOSSIP_STONE }, + { RC_ZF_FAIRY_GOSSIP_STONE, RH_ZF_FAIRY_GOSSIP_STONE }, + { RC_GC_MAZE_GOSSIP_STONE, RH_GC_MAZE_GOSSIP_STONE }, + { RC_GC_MEDIGORON_GOSSIP_STONE, RH_GC_MEDIGORON_GOSSIP_STONE }, + { RC_GV_GOSSIP_STONE, RH_GV_GOSSIP_STONE }, + { RC_GRAVEYARD_GOSSIP_STONE, RH_GRAVEYARD_GOSSIP_STONE }, + { RC_HC_MALON_GOSSIP_STONE, RH_HC_MALON_GOSSIP_STONE }, + { RC_HC_ROCK_WALL_GOSSIP_STONE, RH_HC_ROCK_WALL_GOSSIP_STONE }, + { RC_HC_STORMS_GROTTO_GOSSIP_STONE, RH_HC_STORMS_GROTTO_GOSSIP_STONE }, + { RC_HF_COW_GROTTO_GOSSIP_STONE, RH_HF_COW_GROTTO_GOSSIP_STONE }, + { RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE, RH_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE }, + { RC_HF_OPEN_GROTTO_GOSSIP_STONE, RH_HF_OPEN_GROTTO_GOSSIP_STONE }, + { RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE, RH_HF_SOUTHEAST_GROTTO_GOSSIP_STONE }, + { RC_ZF_JABU_GOSSIP_STONE, RH_ZF_JABU_GOSSIP_STONE }, + { RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE, RH_KF_DEKU_TREE_LEFT_GOSSIP_STONE }, + { RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE, RH_KF_DEKU_TREE_RIGHT_GOSSIP_STONE }, + { RC_KF_GOSSIP_STONE, RH_KF_GOSSIP_STONE }, + { RC_KF_STORMS_GROTTO_GOSSIP_STONE, RH_KF_STORMS_GROTTO_GOSSIP_STONE }, + { RC_KAK_OPEN_GROTTO_GOSSIP_STONE, RH_KAK_OPEN_GROTTO_GOSSIP_STONE }, + { RC_LH_LAB_GOSSIP_STONE, RH_LH_LAB_GOSSIP_STONE }, + { RC_LH_SOUTHEAST_GOSSIP_STONE, RH_LH_SOUTHEAST_GOSSIP_STONE }, + { RC_LH_SOUTHWEST_GOSSIP_STONE, RH_LH_SOUTHWEST_GOSSIP_STONE }, + { RC_LW_GOSSIP_STONE, RH_LW_GOSSIP_STONE }, + { RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE, RH_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE }, + { RC_SFM_MAZE_LOWER_GOSSIP_STONE, RH_SFM_MAZE_NEAR_LW_GOSSIP_STONE }, + { RC_SFM_MAZE_UPPER_GOSSIP_STONE, RH_SFM_MAZE_CENTER_GOSSIP_STONE }, + { RC_SFM_SARIA_GOSSIP_STONE, RH_SFM_SARIA_GOSSIP_STONE }, + { RC_TOT_LEFT_CENTER_GOSSIP_STONE, RH_TOT_LEFT_CENTER_GOSSIP_STONE }, + { RC_TOT_LEFTMOST_GOSSIP_STONE, RH_TOT_LEFTMOST_GOSSIP_STONE }, + { RC_TOT_RIGHT_CENTER_GOSSIP_STONE, RH_TOT_RIGHT_CENTER_GOSSIP_STONE }, + { RC_TOT_RIGHTMOST_GOSSIP_STONE, RH_TOT_RIGHTMOST_GOSSIP_STONE }, + { RC_ZD_GOSSIP_STONE, RH_ZD_GOSSIP_STONE }, + { RC_ZR_NEAR_DOMAIN_GOSSIP_STONE, RH_ZR_NEAR_DOMAIN_GOSSIP_STONE }, + { RC_ZR_NEAR_GROTTOS_GOSSIP_STONE, RH_ZR_NEAR_GROTTOS_GOSSIP_STONE }, + { RC_ZR_OPEN_GROTTO_GOSSIP_STONE, RH_ZR_OPEN_GROTTO_GOSSIP_STONE } }; -std::unordered_map StaticData::areaNames = { //RANDOTODO resolve None in area - {RA_NONE, RHT_ISOLATED_PLACE}, //explicit none in area hints means we're disconnected - {RA_LINKS_POCKET, RHT_LINKS_POCKET}, - {RA_KOKIRI_FOREST, RHT_KOKIRI_FOREST}, - {RA_THE_LOST_WOODS, RHT_THE_LOST_WOODS}, - {RA_SACRED_FOREST_MEADOW, RHT_SACRED_FOREST_MEADOW}, - {RA_HYRULE_FIELD, RHT_HYRULE_FIELD}, - {RA_LAKE_HYLIA, RHT_LAKE_HYLIA}, - {RA_GERUDO_VALLEY, RHT_GERUDO_VALLEY}, - {RA_GERUDO_FORTRESS, RHT_GERUDO_FORTRESS}, - {RA_HAUNTED_WASTELAND, RHT_HAUNTED_WASTELAND}, - {RA_DESERT_COLOSSUS, RHT_DESERT_COLOSSUS}, - {RA_THE_MARKET, RHT_THE_MARKET}, - {RA_TEMPLE_OF_TIME, RHT_TEMPLE_OF_TIME}, - {RA_HYRULE_CASTLE, RHT_HYRULE_CASTLE}, - {RA_OUTSIDE_GANONS_CASTLE, RHT_OUTSIDE_GANONS_CASTLE}, - {RA_CASTLE_GROUNDS, RHT_CASTLE_GROUNDS}, - {RA_KAKARIKO_VILLAGE, RHT_KAKARIKO_VILLAGE}, - {RA_THE_GRAVEYARD, RHT_THE_GRAVEYARD}, - {RA_DEATH_MOUNTAIN_TRAIL, RHT_DEATH_MOUNTAIN_TRAIL}, - {RA_GORON_CITY, RHT_GORON_CITY}, - {RA_DEATH_MOUNTAIN_CRATER, RHT_DEATH_MOUNTAIN_CRATER}, - {RA_ZORAS_RIVER, RHT_ZORAS_RIVER}, - {RA_ZORAS_DOMAIN, RHT_ZORAS_DOMAIN}, - {RA_ZORAS_FOUNTAIN, RHT_ZORAS_FOUNTAIN}, - {RA_LON_LON_RANCH, RHT_LON_LON_RANCH}, - {RA_DEKU_TREE, RHT_DEKU_TREE}, - {RA_DODONGOS_CAVERN, RHT_DODONGOS_CAVERN}, - {RA_JABU_JABUS_BELLY, RHT_JABU_JABUS_BELLY}, - {RA_FOREST_TEMPLE, RHT_FOREST_TEMPLE}, - {RA_FIRE_TEMPLE, RHT_FIRE_TEMPLE}, - {RA_WATER_TEMPLE, RHT_WATER_TEMPLE}, - {RA_SPIRIT_TEMPLE, RHT_SPIRIT_TEMPLE}, - {RA_SHADOW_TEMPLE, RHT_SHADOW_TEMPLE}, - {RA_BOTTOM_OF_THE_WELL, RHT_BOTTOM_OF_THE_WELL}, - {RA_ICE_CAVERN, RHT_ICE_CAVERN}, - {RA_GERUDO_TRAINING_GROUND, RHT_GERUDO_TRAINING_GROUND}, - {RA_GANONS_CASTLE, RHT_GANONS_CASTLE} +std::unordered_map StaticData::areaNames = { // RANDOTODO resolve None in area + { RA_NONE, RHT_ISOLATED_PLACE }, // explicit none in area hints means we're disconnected + { RA_LINKS_POCKET, RHT_LINKS_POCKET }, + { RA_KOKIRI_FOREST, RHT_KOKIRI_FOREST }, + { RA_THE_LOST_WOODS, RHT_THE_LOST_WOODS }, + { RA_SACRED_FOREST_MEADOW, RHT_SACRED_FOREST_MEADOW }, + { RA_HYRULE_FIELD, RHT_HYRULE_FIELD }, + { RA_LAKE_HYLIA, RHT_LAKE_HYLIA }, + { RA_GERUDO_VALLEY, RHT_GERUDO_VALLEY }, + { RA_GERUDO_FORTRESS, RHT_GERUDO_FORTRESS }, + { RA_HAUNTED_WASTELAND, RHT_HAUNTED_WASTELAND }, + { RA_DESERT_COLOSSUS, RHT_DESERT_COLOSSUS }, + { RA_THE_MARKET, RHT_THE_MARKET }, + { RA_TEMPLE_OF_TIME, RHT_TEMPLE_OF_TIME }, + { RA_HYRULE_CASTLE, RHT_HYRULE_CASTLE }, + { RA_OUTSIDE_GANONS_CASTLE, RHT_OUTSIDE_GANONS_CASTLE }, + { RA_CASTLE_GROUNDS, RHT_CASTLE_GROUNDS }, + { RA_KAKARIKO_VILLAGE, RHT_KAKARIKO_VILLAGE }, + { RA_THE_GRAVEYARD, RHT_THE_GRAVEYARD }, + { RA_DEATH_MOUNTAIN_TRAIL, RHT_DEATH_MOUNTAIN_TRAIL }, + { RA_GORON_CITY, RHT_GORON_CITY }, + { RA_DEATH_MOUNTAIN_CRATER, RHT_DEATH_MOUNTAIN_CRATER }, + { RA_ZORAS_RIVER, RHT_ZORAS_RIVER }, + { RA_ZORAS_DOMAIN, RHT_ZORAS_DOMAIN }, + { RA_ZORAS_FOUNTAIN, RHT_ZORAS_FOUNTAIN }, + { RA_LON_LON_RANCH, RHT_LON_LON_RANCH }, + { RA_DEKU_TREE, RHT_DEKU_TREE }, + { RA_DODONGOS_CAVERN, RHT_DODONGOS_CAVERN }, + { RA_JABU_JABUS_BELLY, RHT_JABU_JABUS_BELLY }, + { RA_FOREST_TEMPLE, RHT_FOREST_TEMPLE }, + { RA_FIRE_TEMPLE, RHT_FIRE_TEMPLE }, + { RA_WATER_TEMPLE, RHT_WATER_TEMPLE }, + { RA_SPIRIT_TEMPLE, RHT_SPIRIT_TEMPLE }, + { RA_SHADOW_TEMPLE, RHT_SHADOW_TEMPLE }, + { RA_BOTTOM_OF_THE_WELL, RHT_BOTTOM_OF_THE_WELL }, + { RA_ICE_CAVERN, RHT_ICE_CAVERN }, + { RA_GERUDO_TRAINING_GROUND, RHT_GERUDO_TRAINING_GROUND }, + { RA_GANONS_CASTLE, RHT_GANONS_CASTLE } }; std::unordered_map StaticData::trialData = { - {TK_LIGHT_TRIAL, RHT_LIGHT_TRIAL}, - {TK_FOREST_TRIAL, RHT_FOREST_TRIAL}, - {TK_FIRE_TRIAL, RHT_FIRE_TRIAL}, - {TK_WATER_TRIAL, RHT_WATER_TRIAL}, - {TK_SHADOW_TRIAL, RHT_SHADOW_TRIAL}, - {TK_SPIRIT_TRIAL, RHT_SPIRIT_TRIAL} + { TK_LIGHT_TRIAL, RHT_LIGHT_TRIAL }, { TK_FOREST_TRIAL, RHT_FOREST_TRIAL }, { TK_FIRE_TRIAL, RHT_FIRE_TRIAL }, + { TK_WATER_TRIAL, RHT_WATER_TRIAL }, { TK_SHADOW_TRIAL, RHT_SHADOW_TRIAL }, { TK_SPIRIT_TRIAL, RHT_SPIRIT_TRIAL } }; std::unordered_map StaticData::staticHintInfoMap = { - // clang-format off + // clang-format off // RH_GANONDORF_HINT is special cased due to being different based on master sword shuffle // Altar hints are special cased due to special hint marking rules // warp song hints are special cased due to entrances not being done properly yet @@ -213,43 +210,45 @@ std::unordered_map StaticData::staticHintInfoMap {RH_KAK_100_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_100_SKULLS_HINT, true, {RC_KAK_100_GOLD_SKULLTULA_REWARD}, {}, {}, false, 100)}, {RH_MASK_SHOP_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_MASK_SHOP_HINT}, RSK_MASK_SHOP_HINT, true, {RC_DEKU_THEATER_SKULL_MASK, RC_DEKU_THEATER_MASK_OF_TRUTH}, {}, {RC_MASK_SHOP_HINT})} - // clang-format on + // clang-format on }; -std::unordered_map StaticData::PopulateTranslationMap(std::unordered_map input){ - std::unordered_map output = {}; - for (const auto& [key, message] : input) { - std::vector strings = message.GetAllMessages(); - for (std::string string: strings){ - if (output.contains(string)){ - if (output[string] != key){ - //RANDOTODO should this cause an error of some kind? - SPDLOG_DEBUG("\tREPEATED STRING IN " + message.GetEnglish(MF_CLEAN) + "\n\n"); +std::unordered_map +StaticData::PopulateTranslationMap(std::unordered_map input) { + std::unordered_map output = {}; + for (const auto& [key, message] : input) { + std::vector strings = message.GetAllMessages(); + for (std::string string : strings) { + if (output.contains(string)) { + if (output[string] != key) { + // RANDOTODO should this cause an error of some kind? + // SPDLOG_DEBUG("\tREPEATED STRING IN " + message.GetEnglish(MF_CLEAN) + "\n\n"); + } + } else { + output[string] = key; + } } - } else { - output[string] = key; - } } - } - return output; + return output; } -std::unordered_map StaticData::PopulateTranslationMap(std::unordered_map input){ - std::unordered_map output = {}; - for (const auto& [key, text] : input) { - std::vector strings = hintTextTable[text].GetClear().GetAllMessages(); - for (std::string string: strings){ - if (output.contains(string)){ - if (output[string] != key){ - //RANDOTODO should this cause an error of some kind? - SPDLOG_DEBUG("\tREPEATED STRING WITH " + string + "\n\n"); +std::unordered_map +StaticData::PopulateTranslationMap(std::unordered_map input) { + std::unordered_map output = {}; + for (const auto& [key, text] : input) { + std::vector strings = hintTextTable[text].GetClear().GetAllMessages(); + for (std::string string : strings) { + if (output.contains(string)) { + if (output[string] != key) { + // RANDOTODO should this cause an error of some kind? + SPDLOG_DEBUG("\tREPEATED STRING WITH " + string + "\n\n"); + } + } else { + output[string] = key; + } } - } else { - output[string] = key; - } } - } - return output; + return output; } std::unordered_map StaticData::hintNameToEnum = {}; @@ -257,54 +256,51 @@ std::unordered_map StaticData::hintTypeNameToEnum = {}; std::unordered_map StaticData::areaNameToEnum = {}; std::unordered_map StaticData::trialNameToEnum = {}; std::unordered_map StaticData::optionNameToEnum = {}; -std::unordered_map StaticData::locationNameToEnum = {}; //is filled in context based on location table +std::unordered_map + StaticData::locationNameToEnum = {}; // is filled in context based on location table std::unordered_map StaticData::stoneParamsToHint{ - {0x1, RH_ZF_FAIRY_GOSSIP_STONE}, - {0x2, RH_ZF_JABU_GOSSIP_STONE}, - {0x3, RH_LH_LAB_GOSSIP_STONE}, - {0x4, RH_DMT_GOSSIP_STONE}, - {0x5, RH_DMC_GOSSIP_STONE}, - {0x6, RH_TOT_LEFTMOST_GOSSIP_STONE}, - {0x7, RH_TOT_LEFT_CENTER_GOSSIP_STONE}, - {0x8, RH_LH_SOUTHWEST_GOSSIP_STONE}, - {0x9, RH_ZD_GOSSIP_STONE}, - {0xA, RH_GRAVEYARD_GOSSIP_STONE}, - {0xB, RH_HC_ROCK_WALL_GOSSIP_STONE}, - {0xC, RH_ZR_NEAR_DOMAIN_GOSSIP_STONE}, - {0xD, RH_ZR_NEAR_GROTTOS_GOSSIP_STONE}, - {0xE, RH_TOT_RIGHT_CENTER_GOSSIP_STONE }, - {0xF, RH_LH_SOUTHEAST_GOSSIP_STONE}, - {0x10, RH_TOT_RIGHTMOST_GOSSIP_STONE }, - {0x11, RH_GV_GOSSIP_STONE}, - {0x12, RH_HC_MALON_GOSSIP_STONE}, - {0x13, RH_HC_STORMS_GROTTO_GOSSIP_STONE}, - {0x14, RH_DODONGOS_CAVERN_GOSSIP_STONE}, - {0x15, RH_GC_MAZE_GOSSIP_STONE}, - {0x16, RH_SFM_MAZE_NEAR_LW_GOSSIP_STONE}, - {0x17, RH_SFM_MAZE_CENTER_GOSSIP_STONE}, - //generic grottos all use 0x18, grottoChestParamsToHint is used for conversion - {0x19, RH_GC_MEDIGORON_GOSSIP_STONE}, - {0x1A, RH_COLOSSUS_GOSSIP_STONE}, - {0x1B, RH_HF_COW_GROTTO_GOSSIP_STONE}, - {0x1C, RH_SFM_SARIA_GOSSIP_STONE}, - {0x1D, RH_LW_GOSSIP_STONE}, - {0x1E, RH_KF_GOSSIP_STONE}, - {0x1F, RH_KF_DEKU_TREE_LEFT_GOSSIP_STONE}, - {0x20, RH_KF_DEKU_TREE_RIGHT_GOSSIP_STONE}, + { 0x1, RH_ZF_FAIRY_GOSSIP_STONE }, + { 0x2, RH_ZF_JABU_GOSSIP_STONE }, + { 0x3, RH_LH_LAB_GOSSIP_STONE }, + { 0x4, RH_DMT_GOSSIP_STONE }, + { 0x5, RH_DMC_GOSSIP_STONE }, + { 0x6, RH_TOT_LEFTMOST_GOSSIP_STONE }, + { 0x7, RH_TOT_LEFT_CENTER_GOSSIP_STONE }, + { 0x8, RH_LH_SOUTHWEST_GOSSIP_STONE }, + { 0x9, RH_ZD_GOSSIP_STONE }, + { 0xA, RH_GRAVEYARD_GOSSIP_STONE }, + { 0xB, RH_HC_ROCK_WALL_GOSSIP_STONE }, + { 0xC, RH_ZR_NEAR_DOMAIN_GOSSIP_STONE }, + { 0xD, RH_ZR_NEAR_GROTTOS_GOSSIP_STONE }, + { 0xE, RH_TOT_RIGHT_CENTER_GOSSIP_STONE }, + { 0xF, RH_LH_SOUTHEAST_GOSSIP_STONE }, + { 0x10, RH_TOT_RIGHTMOST_GOSSIP_STONE }, + { 0x11, RH_GV_GOSSIP_STONE }, + { 0x12, RH_HC_MALON_GOSSIP_STONE }, + { 0x13, RH_HC_STORMS_GROTTO_GOSSIP_STONE }, + { 0x14, RH_DODONGOS_CAVERN_GOSSIP_STONE }, + { 0x15, RH_GC_MAZE_GOSSIP_STONE }, + { 0x16, RH_SFM_MAZE_NEAR_LW_GOSSIP_STONE }, + { 0x17, RH_SFM_MAZE_CENTER_GOSSIP_STONE }, + // generic grottos all use 0x18, grottoChestParamsToHint is used for conversion + { 0x19, RH_GC_MEDIGORON_GOSSIP_STONE }, + { 0x1A, RH_COLOSSUS_GOSSIP_STONE }, + { 0x1B, RH_HF_COW_GROTTO_GOSSIP_STONE }, + { 0x1C, RH_SFM_SARIA_GOSSIP_STONE }, + { 0x1D, RH_LW_GOSSIP_STONE }, + { 0x1E, RH_KF_GOSSIP_STONE }, + { 0x1F, RH_KF_DEKU_TREE_LEFT_GOSSIP_STONE }, + { 0x20, RH_KF_DEKU_TREE_RIGHT_GOSSIP_STONE }, }; std::unordered_map StaticData::grottoChestParamsToHint{ - {22944, RH_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE}, - {22978, RH_HF_SOUTHEAST_GROTTO_GOSSIP_STONE}, - {22947, RH_HF_OPEN_GROTTO_GOSSIP_STONE}, - {22964, RH_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE}, - {23255, RH_DMT_STORMS_GROTTO_GOSSIP_STONE}, - {22984, RH_KAK_OPEN_GROTTO_GOSSIP_STONE}, - {22985, RH_ZR_OPEN_GROTTO_GOSSIP_STONE}, - {23802, RH_DMC_UPPER_GROTTO_GOSSIP_STONE}, - {22988, RH_KF_STORMS_GROTTO_GOSSIP_STONE} + { 22944, RH_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE }, { 22978, RH_HF_SOUTHEAST_GROTTO_GOSSIP_STONE }, + { 22947, RH_HF_OPEN_GROTTO_GOSSIP_STONE }, { 22964, RH_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE }, + { 23255, RH_DMT_STORMS_GROTTO_GOSSIP_STONE }, { 22984, RH_KAK_OPEN_GROTTO_GOSSIP_STONE }, + { 22985, RH_ZR_OPEN_GROTTO_GOSSIP_STONE }, { 23802, RH_DMC_UPPER_GROTTO_GOSSIP_STONE }, + { 22988, RH_KF_STORMS_GROTTO_GOSSIP_STONE } }; std::array StaticData::hintTextTable = {}; -} +} // namespace Rando diff --git a/soh/soh/Enhancements/timesplits/TimeSplits.cpp b/soh/soh/Enhancements/timesplits/TimeSplits.cpp index 9523a8feb..9bc10c0a3 100644 --- a/soh/soh/Enhancements/timesplits/TimeSplits.cpp +++ b/soh/soh/Enhancements/timesplits/TimeSplits.cpp @@ -17,8 +17,8 @@ #include "soh/SohGui/UIWidgets.hpp" extern "C" { - extern SaveContext gSaveContext; - extern PlayState* gPlayState; +extern SaveContext gSaveContext; +extern PlayState* gPlayState; } using namespace UIWidgets; @@ -79,7 +79,7 @@ std::vector splitObjectList = { { SPLIT_TYPE_ITEM, ITEM_ARROW_ICE, "Ice Arrow", "ITEM_ARROW_ICE", COLOR_WHITE }, { SPLIT_TYPE_ITEM, ITEM_FARORES_WIND, "Farore's Wind", "ITEM_FARORES_WIND", COLOR_WHITE }, { SPLIT_TYPE_ITEM, ITEM_BOOMERANG, "Boomerang", "ITEM_BOOMERANG", COLOR_WHITE }, - { SPLIT_TYPE_ITEM, ITEM_LENS, "Lens of Truth", "ITEM_LENS", COLOR_WHITE }, + { SPLIT_TYPE_ITEM, ITEM_LENS, "Lens of Struth", "ITEM_LENS", COLOR_WHITE }, { SPLIT_TYPE_ITEM, ITEM_BEAN, "Magic Bean", "ITEM_BEAN", COLOR_WHITE }, { SPLIT_TYPE_ITEM, ITEM_HAMMER, "Megaton Hammer", "ITEM_HAMMER", COLOR_WHITE }, { SPLIT_TYPE_ITEM, ITEM_ARROW_LIGHT, "Light Arrow", "ITEM_ARROW_LIGHT", COLOR_WHITE }, @@ -258,12 +258,7 @@ std::string formatTimestampTimeSplit(uint32_t value) { } nlohmann::json ImVec4_to_json(const ImVec4& vec) { - return nlohmann::json{ - {"x", vec.x}, - {"y", vec.y}, - {"z", vec.z}, - {"w", vec.w} - }; + return nlohmann::json{ { "x", vec.x }, { "y", vec.y }, { "z", vec.z }, { "w", vec.w } }; } ImVec4 json_to_ImVec4(const nlohmann::json& jsonVec) { @@ -271,18 +266,16 @@ ImVec4 json_to_ImVec4(const nlohmann::json& jsonVec) { } nlohmann::json SplitObject_to_json(const SplitObject& split) { - return nlohmann::json{ - {"splitType", split.splitType}, - {"splitID", split.splitID}, - {"splitName", split.splitName}, - {"splitImage", split.splitImage}, - {"splitTint", ImVec4_to_json(split.splitTint)}, - {"splitTimeCurrent", split.splitTimeCurrent}, - {"splitTimeBest", split.splitTimeBest}, - {"splitTimePreviousBest", split.splitTimePreviousBest}, - {"splitTimeStatus", SPLIT_STATUS_INACTIVE}, - {"splitSkullTokenCount", split.splitSkullTokenCount} - }; + return nlohmann::json{ { "splitType", split.splitType }, + { "splitID", split.splitID }, + { "splitName", split.splitName }, + { "splitImage", split.splitImage }, + { "splitTint", ImVec4_to_json(split.splitTint) }, + { "splitTimeCurrent", split.splitTimeCurrent }, + { "splitTimeBest", split.splitTimeBest }, + { "splitTimePreviousBest", split.splitTimePreviousBest }, + { "splitTimeStatus", SPLIT_STATUS_INACTIVE }, + { "splitSkullTokenCount", split.splitSkullTokenCount } }; } SplitObject json_to_SplitObject(const nlohmann::json& jsonSplit) { @@ -310,13 +303,13 @@ void TimeSplitsGetImageSize(uint32_t item) { } } -void SplitsPushImageButtonStyle(){ +void SplitsPushImageButtonStyle() { ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(1.0f, 1.0f, 1.0f, 0.0f)); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(1.0f, 1.0f, 1.0f, 0.2f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(1.0f, 1.0f, 1.0f, 0.1f)); } -void SplitsPopImageButtonStyle(){ +void SplitsPopImageButtonStyle() { ImGui::PopStyleColor(3); } @@ -330,13 +323,15 @@ void TimeSplitsUpdateSplitStatus() { index++; } for (size_t i = index; i < splitList.size(); i++) { - if (splitList[i].splitTimeStatus != SPLIT_STATUS_ACTIVE && splitList[i].splitTimeStatus != SPLIT_STATUS_COLLECTED) { + if (splitList[i].splitTimeStatus != SPLIT_STATUS_ACTIVE && + splitList[i].splitTimeStatus != SPLIT_STATUS_COLLECTED) { splitList[i].splitTimeStatus = SPLIT_STATUS_INACTIVE; } } } -void HandleDragAndDrop(std::vector& objectList, int targetIndex, const std::string& itemName, ImGuiDragDropFlags flags = ImGuiDragDropFlags_None) { +void HandleDragAndDrop(std::vector& objectList, int targetIndex, const std::string& itemName, + ImGuiDragDropFlags flags = ImGuiDragDropFlags_None) { if (ImGui::BeginDragDropSource(flags)) { ImGui::SetDragDropPayload("DragMove", &targetIndex, sizeof(uint32_t)); ImGui::Text("Move %s", itemName.c_str()); @@ -442,8 +437,10 @@ void TimeSplitsPopUpContext() { ImGui::TableNextColumn(); SplitsPushImageButtonStyle(); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2.0f, 2.0f)); - ImGui::ImageButton("QUEST_SKULL_TOKEN", Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("QUEST_SKULL_TOKEN"), - ImVec2(32.0f, 32.0f), ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0)); + ImGui::ImageButton( + "QUEST_SKULL_TOKEN", + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("QUEST_SKULL_TOKEN"), + ImVec2(32.0f, 32.0f), ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0)); ImGui::PopStyleVar(); ImGui::TableNextColumn(); SplitsPopImageButtonStyle(); @@ -466,7 +463,8 @@ void TimeSplitsPopUpContext() { ImGui::PopItemWidth(); if (ImGui::Button("Set Tokens")) { - auto findID = std::find_if(splitObjectList.begin(), splitObjectList.end(), [&](const SplitObject& obj) { return obj.splitID == ITEM_SKULL_TOKEN; }); + auto findID = std::find_if(splitObjectList.begin(), splitObjectList.end(), + [&](const SplitObject& obj) { return obj.splitID == ITEM_SKULL_TOKEN; }); SplitObject& buildTokenObject = *findID; std::string tokenStr = " (" + std::to_string(skullTokenCount) + ")"; buildTokenObject.splitName += tokenStr.c_str(); @@ -478,11 +476,12 @@ void TimeSplitsPopUpContext() { popupID = -1; } ImGui::EndTable(); - } else { + } else { int rowIndex = 0; SplitsPushImageButtonStyle(); for (auto item : popupList[popupID]) { - auto findID = std::find_if(splitObjectList.begin(), splitObjectList.end(), [&](const SplitObject& obj) { return obj.splitID == item; }); + auto findID = std::find_if(splitObjectList.begin(), splitObjectList.end(), + [&](const SplitObject& obj) { return obj.splitID == item; }); if (findID == splitObjectList.end()) { continue; } @@ -491,8 +490,10 @@ void TimeSplitsPopUpContext() { ImGui::BeginGroup(); ImGui::PushID(popupObject.splitID); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2.0f, 2.0f)); - auto ret = ImGui::ImageButton(popupObject.splitImage.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(popupObject.splitImage), - ImVec2(32.0f, 32.0f), ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), popupObject.splitTint); + auto ret = ImGui::ImageButton( + popupObject.splitImage.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(popupObject.splitImage), + ImVec2(32.0f, 32.0f), ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), popupObject.splitTint); ImGui::PopStyleVar(); if (ret) { splitList.push_back(popupObject); @@ -510,7 +511,7 @@ void TimeSplitsPopUpContext() { if (popupID <= ITEM_SLINGSHOT && popupID != -1) { ImVec2 imageMin = ImGui::GetItemRectMin(); ImVec2 imageMax = ImGui::GetItemRectMax(); - //ImVec2 imageSize = ImVec2(imageMax.x - imageMin.x, imageMax.y - imageMin.y); UNUSED + // ImVec2 imageSize = ImVec2(imageMax.x - imageMin.x, imageMax.y - imageMin.y); UNUSED ImVec2 textPos = ImVec2(imageMax.x - ImGui::CalcTextSize("00").x - 5, imageMax.y - ImGui::CalcTextSize("00").y - 5); @@ -574,12 +575,12 @@ void TimeSplitsItemSplitEvent(uint32_t type, u8 item) { } if (type == SPLIT_TYPE_ENTRANCE) { if ((item == SCENE_ZORAS_RIVER && gSaveContext.entranceIndex == ENTR_ZORAS_RIVER_UNDERWATER_SHORTCUT) || - (item == SCENE_LOST_WOODS && - (gSaveContext.entranceIndex == ENTR_LOST_WOODS_BRIDGE_EAST_EXIT || gSaveContext.entranceIndex == ENTR_LOST_WOODS_SOUTH_EXIT))) { + (item == SCENE_LOST_WOODS && (gSaveContext.entranceIndex == ENTR_LOST_WOODS_BRIDGE_EAST_EXIT || + gSaveContext.entranceIndex == ENTR_LOST_WOODS_SOUTH_EXIT))) { type = SPLIT_TYPE_MISC; } } - + for (auto& split : splitList) { if (split.splitType == type) { if (item == split.splitID) { @@ -646,14 +647,14 @@ void TimeSplitsDrawSplitsList() { ImGui::BeginChild("SplitTable", ImVec2(0.0f, ImGui::GetWindowHeight() - 128.0f)); ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, ImVec2(4, 0)); if (ImGui::BeginTable("Splits", 5, ImGuiTableFlags_Hideable | ImGuiTableFlags_Reorderable)) { - ImGui::TableSetupColumn("Item Image", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoHeaderLabel, 34.0f); + ImGui::TableSetupColumn("Item Image", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoHeaderLabel, + 34.0f); ImGui::TableSetupColumn("Item Name"); ImGui::TableSetupColumn("Current Time"); ImGui::TableSetupColumn("+/-"); ImGui::TableSetupColumn("Prev. Best"); ImGui::TableHeadersRow(); - SplitsPushImageButtonStyle(); for (auto& split : splitList) { ImGui::TableNextColumn(); @@ -665,8 +666,10 @@ void TimeSplitsDrawSplitsList() { } TimeSplitsGetImageSize(split.splitID); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(imagePadding, imagePadding)); - auto ret = ImGui::ImageButton(split.splitImage.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(split.splitImage), - imageSize, ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), split.splitTint); + auto ret = ImGui::ImageButton( + split.splitImage.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(split.splitImage), imageSize, + ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), split.splitTint); ImGui::PopStyleVar(); if (ret) { TimeSplitsSkipSplit(dragIndex); @@ -679,14 +682,18 @@ void TimeSplitsDrawSplitsList() { ImGui::TableNextColumn(); // Current Time ImGui::Text("%s", (split.splitTimeStatus == SPLIT_STATUS_ACTIVE) - ? formatTimestampTimeSplit(GAMEPLAYSTAT_TOTAL_TIME).c_str() : (split.splitTimeStatus == SPLIT_STATUS_COLLECTED) - ? formatTimestampTimeSplit(split.splitTimeCurrent).c_str() : "--:--:-"); + ? formatTimestampTimeSplit(GAMEPLAYSTAT_TOTAL_TIME).c_str() + : (split.splitTimeStatus == SPLIT_STATUS_COLLECTED) + ? formatTimestampTimeSplit(split.splitTimeCurrent).c_str() + : "--:--:-"); ImGui::TableNextColumn(); // +/- Difference ImGui::TextColored(splitTimeColor, "%s", formatTimestampTimeSplit(splitBestTimeDisplay).c_str()); ImGui::TableNextColumn(); // Previous Best - ImGui::Text("%s", (split.splitTimePreviousBest != 0) ? formatTimestampTimeSplit(split.splitTimePreviousBest).c_str() : "--:--:-"); + ImGui::Text("%s", (split.splitTimePreviousBest != 0) + ? formatTimestampTimeSplit(split.splitTimePreviousBest).c_str() + : "--:--:-"); ImGui::PopID(); ImGui::PopStyleVar(1); @@ -724,12 +731,14 @@ void TimeSplitsDrawItemList(uint32_t type) { ImGui::BeginTable("Item List", tableSize); for (size_t i = 0; i < tableSize; i++) { if (i == 0) { - ImGui::TableSetupColumn("Item Image", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoHeaderLabel, 39.0f); + ImGui::TableSetupColumn("Item Image", + ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoHeaderLabel, 39.0f); } else { if (type > SPLIT_TYPE_QUEST) { ImGui::TableSetupColumn("Item Name"); } else { - ImGui::TableSetupColumn(std::to_string(i).c_str(), ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoHeaderLabel, 39.0f); + ImGui::TableSetupColumn(std::to_string(i).c_str(), + ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoHeaderLabel, 39.0f); } } } @@ -741,8 +750,10 @@ void TimeSplitsDrawItemList(uint32_t type) { TimeSplitsGetImageSize(split.splitID); SplitsPushImageButtonStyle(); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(imagePadding, imagePadding)); - auto ret = ImGui::ImageButton(split.splitImage.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(split.splitImage), - imageSize, ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), split.splitTint); + auto ret = ImGui::ImageButton( + split.splitImage.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(split.splitImage), imageSize, + ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), split.splitTint); ImGui::PopStyleVar(); if (ret) { if (popupList.contains(split.splitID) && (split.splitType < SPLIT_TYPE_BOSS)) { @@ -750,7 +761,6 @@ void TimeSplitsDrawItemList(uint32_t type) { ImGui::OpenPopup("TimeSplitsPopUp"); } else { splitList.push_back(split); - if (splitList.size() == 1) { splitList[0].splitTimeStatus = SPLIT_STATUS_ACTIVE; @@ -763,7 +773,7 @@ void TimeSplitsDrawItemList(uint32_t type) { TimeSplitsPopUpContext(); ImGui::PopID(); - + if (type > SPLIT_TYPE_QUEST) { ImGui::TableNextColumn(); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 7.0f)); @@ -771,7 +781,6 @@ void TimeSplitsDrawItemList(uint32_t type) { ImGui::Text("%s", split.splitName.c_str()); ImGui::PopStyleVar(1); } - } } ImGui::EndTable(); @@ -788,12 +797,20 @@ void TimeSplitsUpdateWindowSize() { void TimeSplitsDrawOptionsMenu() { ImGui::SeparatorText("Window Options"); Color_RGBA8 defaultColor = { 0, 0, 0, 255 }; - if (CVarColorPicker("Background Color", CVAR_ENHANCEMENT("TimeSplits.WindowColor"), defaultColor, true, 0, THEME_COLOR)) { + if (CVarColorPicker("Background Color", CVAR_ENHANCEMENT("TimeSplits.WindowColor"), defaultColor, true, 0, + THEME_COLOR)) { windowColor = VecFromRGBA8(CVarGetColor(CVAR_ENHANCEMENT("TimeSplits.WindowColor.Value"), defaultColor)); } - if (CVarSliderFloat("Window Scale", CVAR_ENHANCEMENT("TimeSplits.WindowScale"), - FloatSliderOptions().Min(1.0f).Max(3.0f).DefaultValue(1.0f).Format("%.1fx").Size({300.0f, 0.0f}).Step(0.1f).Color(THEME_COLOR))) { + if (CVarSliderFloat("Window Scale", CVAR_ENHANCEMENT("TimeSplits.WindowScale"), + FloatSliderOptions() + .Min(1.0f) + .Max(3.0f) + .DefaultValue(1.0f) + .Format("%.1fx") + .Size({ 300.0f, 0.0f }) + .Step(0.1f) + .Color(THEME_COLOR))) { TimeSplitsUpdateWindowSize(); } @@ -868,7 +885,7 @@ void TimeSplitsDrawManageList() { ImGui::BeginChild("PreviewChild"); for (auto& data : splitList) { float availableWidth = ImGui::GetContentRegionAvail().x; - float imageWidth = 38.0f; // Width of your image button + float imageWidth = 38.0f; // Width of your image button float offsetX = (availableWidth - imageWidth) * 0.5f; // Centering offset if (offsetX > 0.0f) { @@ -876,8 +893,10 @@ void TimeSplitsDrawManageList() { } TimeSplitsGetImageSize(data.splitID); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(imagePadding, imagePadding)); - auto ret = ImGui::ImageButton(data.splitImage.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(data.splitImage), - imageSize, ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), data.splitTint); + auto ret = ImGui::ImageButton( + data.splitImage.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(data.splitImage), imageSize, + ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), data.splitTint); ImGui::PopStyleVar(); if (ret) { removeIndex = index; @@ -947,7 +966,7 @@ static bool initialized = false; void TimeSplitWindow::DrawElement() { ImGui::SetWindowFontScale(timeSplitsWindowSize); - + PushStyleTabs(THEME_COLOR); if (ImGui::BeginTabBar("Split Tabs")) { if (ImGui::BeginTabItem("Splits")) { @@ -970,12 +989,14 @@ void TimeSplitWindow::DrawElement() { void TimeSplitWindow::InitElement() { TimeSplitsUpdateWindowSize(); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("SPECIAL_TRIFORCE_PIECE_WHITE", gWTriforcePieceTex, ImVec4(1, 1, 1, 1)); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("SPECIAL_SPLIT_ENTRANCE", gSplitEntranceTex, ImVec4(1, 1, 1, 1)); - Color_RGBA8 defaultColour = {0, 0, 0, 255}; + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("SPECIAL_TRIFORCE_PIECE_WHITE", + gWTriforcePieceTex, ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("SPECIAL_SPLIT_ENTRANCE", gSplitEntranceTex, + ImVec4(1, 1, 1, 1)); + Color_RGBA8 defaultColour = { 0, 0, 0, 255 }; windowColor = VecFromRGBA8(CVarGetColor(CVAR_ENHANCEMENT("TimeSplits.WindowColor.Value"), defaultColour)); InitializeSplitDataFile(); - + GameInteractor::Instance->RegisterGameHook([](u8 item) { if (item != ITEM_SKULL_TOKEN) { uint32_t tempType = SPLIT_TYPE_ITEM; @@ -991,8 +1012,8 @@ void TimeSplitWindow::InitElement() { GameInteractor::Instance->RegisterGameHook([](GetItemEntry itemEntry) { GetItemEntry testItem = itemEntry; - if (itemEntry.itemId == ITEM_SKULL_TOKEN || itemEntry.itemId == ITEM_BOTTLE || itemEntry.itemId == ITEM_POE - || itemEntry.itemId == ITEM_BIG_POE) { + if (itemEntry.itemId == ITEM_SKULL_TOKEN || itemEntry.itemId == ITEM_BOTTLE || itemEntry.itemId == ITEM_POE || + itemEntry.itemId == ITEM_BIG_POE) { uint32_t tempType = SPLIT_TYPE_ITEM; for (auto& data : splitList) { if (data.splitID == itemEntry.itemId) { @@ -1004,9 +1025,8 @@ void TimeSplitWindow::InitElement() { } }); - GameInteractor::Instance->RegisterGameHook([](int16_t contents) { - TimeSplitsItemSplitEvent(SPLIT_TYPE_UPGRADE, contents); - }); + GameInteractor::Instance->RegisterGameHook( + [](int16_t contents) { TimeSplitsItemSplitEvent(SPLIT_TYPE_UPGRADE, contents); }); GameInteractor::Instance->RegisterGameHook([](void* refActor) { Actor* bossActor = (Actor*)refActor; diff --git a/soh/soh/SohGui/ImGuiUtils.cpp b/soh/soh/SohGui/ImGuiUtils.cpp index 435e953f7..d3a456eec 100644 --- a/soh/soh/SohGui/ImGuiUtils.cpp +++ b/soh/soh/SohGui/ImGuiUtils.cpp @@ -3,149 +3,150 @@ #include "assets/soh_assets.h" #include "soh/Enhancements/randomizer/rando_hash.h" -std::map itemMapping = { - ITEM_MAP_ENTRY(ITEM_STICK), - ITEM_MAP_ENTRY(ITEM_NUT), - ITEM_MAP_ENTRY(ITEM_BOMB), - ITEM_MAP_ENTRY(ITEM_BOW), - ITEM_MAP_ENTRY(ITEM_ARROW_FIRE), - ITEM_MAP_ENTRY(ITEM_DINS_FIRE), - ITEM_MAP_ENTRY(ITEM_SLINGSHOT), - ITEM_MAP_ENTRY(ITEM_OCARINA_FAIRY), - ITEM_MAP_ENTRY(ITEM_OCARINA_TIME), - ITEM_MAP_ENTRY(ITEM_BOMBCHU), - ITEM_MAP_ENTRY(ITEM_HOOKSHOT), - ITEM_MAP_ENTRY(ITEM_LONGSHOT), - ITEM_MAP_ENTRY(ITEM_ARROW_ICE), - ITEM_MAP_ENTRY(ITEM_FARORES_WIND), - ITEM_MAP_ENTRY(ITEM_BOOMERANG), - ITEM_MAP_ENTRY(ITEM_LENS), - ITEM_MAP_ENTRY(ITEM_BEAN), - ITEM_MAP_ENTRY(ITEM_HAMMER), - ITEM_MAP_ENTRY(ITEM_ARROW_LIGHT), - ITEM_MAP_ENTRY(ITEM_NAYRUS_LOVE), - ITEM_MAP_ENTRY(ITEM_BOTTLE), - ITEM_MAP_ENTRY(ITEM_POTION_RED), - ITEM_MAP_ENTRY(ITEM_POTION_GREEN), - ITEM_MAP_ENTRY(ITEM_POTION_BLUE), - ITEM_MAP_ENTRY(ITEM_FAIRY), - ITEM_MAP_ENTRY(ITEM_FISH), - ITEM_MAP_ENTRY(ITEM_MILK_BOTTLE), - ITEM_MAP_ENTRY(ITEM_LETTER_RUTO), - ITEM_MAP_ENTRY(ITEM_BLUE_FIRE), - ITEM_MAP_ENTRY(ITEM_BUG), - ITEM_MAP_ENTRY(ITEM_BIG_POE), - ITEM_MAP_ENTRY(ITEM_MILK_HALF), - ITEM_MAP_ENTRY(ITEM_POE), - ITEM_MAP_ENTRY(ITEM_WEIRD_EGG), - ITEM_MAP_ENTRY(ITEM_CHICKEN), - ITEM_MAP_ENTRY(ITEM_LETTER_ZELDA), - ITEM_MAP_ENTRY(ITEM_MASK_KEATON), - ITEM_MAP_ENTRY(ITEM_MASK_SKULL), - ITEM_MAP_ENTRY(ITEM_MASK_SPOOKY), - ITEM_MAP_ENTRY(ITEM_MASK_BUNNY), - ITEM_MAP_ENTRY(ITEM_MASK_GORON), - ITEM_MAP_ENTRY(ITEM_MASK_ZORA), - ITEM_MAP_ENTRY(ITEM_MASK_GERUDO), - ITEM_MAP_ENTRY(ITEM_MASK_TRUTH), - ITEM_MAP_ENTRY(ITEM_SOLD_OUT), - ITEM_MAP_ENTRY(ITEM_POCKET_EGG), - ITEM_MAP_ENTRY(ITEM_POCKET_CUCCO), - ITEM_MAP_ENTRY(ITEM_COJIRO), - ITEM_MAP_ENTRY(ITEM_ODD_MUSHROOM), - ITEM_MAP_ENTRY(ITEM_ODD_POTION), - ITEM_MAP_ENTRY(ITEM_SAW), - ITEM_MAP_ENTRY(ITEM_SWORD_BROKEN), - ITEM_MAP_ENTRY(ITEM_PRESCRIPTION), - ITEM_MAP_ENTRY(ITEM_FROG), - ITEM_MAP_ENTRY(ITEM_EYEDROPS), - ITEM_MAP_ENTRY(ITEM_CLAIM_CHECK), - ITEM_MAP_ENTRY(ITEM_BOW_ARROW_FIRE), - ITEM_MAP_ENTRY(ITEM_BOW_ARROW_ICE), - ITEM_MAP_ENTRY(ITEM_BOW_ARROW_LIGHT), - ITEM_MAP_ENTRY(ITEM_SWORD_KOKIRI), - ITEM_MAP_ENTRY(ITEM_SWORD_MASTER), - ITEM_MAP_ENTRY(ITEM_SWORD_BGS), - ITEM_MAP_ENTRY(ITEM_SHIELD_DEKU), - ITEM_MAP_ENTRY(ITEM_SHIELD_HYLIAN), - ITEM_MAP_ENTRY(ITEM_SHIELD_MIRROR), - ITEM_MAP_ENTRY(ITEM_TUNIC_KOKIRI), - ITEM_MAP_ENTRY(ITEM_TUNIC_GORON), - ITEM_MAP_ENTRY(ITEM_TUNIC_ZORA), - ITEM_MAP_ENTRY(ITEM_BOOTS_KOKIRI), - ITEM_MAP_ENTRY(ITEM_BOOTS_IRON), - ITEM_MAP_ENTRY(ITEM_BOOTS_HOVER), - ITEM_MAP_ENTRY(ITEM_BULLET_BAG_30), - ITEM_MAP_ENTRY(ITEM_BULLET_BAG_40), - ITEM_MAP_ENTRY(ITEM_BULLET_BAG_50), - ITEM_MAP_ENTRY(ITEM_QUIVER_30), - ITEM_MAP_ENTRY(ITEM_QUIVER_40), - ITEM_MAP_ENTRY(ITEM_QUIVER_50), - ITEM_MAP_ENTRY(ITEM_BOMB_BAG_20), - ITEM_MAP_ENTRY(ITEM_BOMB_BAG_30), - ITEM_MAP_ENTRY(ITEM_BOMB_BAG_40), - ITEM_MAP_ENTRY(ITEM_BRACELET), - ITEM_MAP_ENTRY(ITEM_GAUNTLETS_SILVER), - ITEM_MAP_ENTRY(ITEM_GAUNTLETS_GOLD), - ITEM_MAP_ENTRY(ITEM_SCALE_SILVER), - ITEM_MAP_ENTRY(ITEM_SCALE_GOLDEN), - ITEM_MAP_ENTRY(ITEM_SWORD_KNIFE), - ITEM_MAP_ENTRY(ITEM_WALLET_ADULT), - ITEM_MAP_ENTRY(ITEM_WALLET_GIANT), - ITEM_MAP_ENTRY(ITEM_SEEDS), - ITEM_MAP_ENTRY(ITEM_FISHING_POLE), - ITEM_MAP_ENTRY(ITEM_SONG_MINUET), - ITEM_MAP_ENTRY(ITEM_SONG_BOLERO), - ITEM_MAP_ENTRY(ITEM_SONG_SERENADE), - ITEM_MAP_ENTRY(ITEM_SONG_REQUIEM), - ITEM_MAP_ENTRY(ITEM_SONG_NOCTURNE), - ITEM_MAP_ENTRY(ITEM_SONG_PRELUDE), - ITEM_MAP_ENTRY(ITEM_SONG_LULLABY), - ITEM_MAP_ENTRY(ITEM_SONG_EPONA), - ITEM_MAP_ENTRY(ITEM_SONG_SARIA), - ITEM_MAP_ENTRY(ITEM_SONG_SUN), - ITEM_MAP_ENTRY(ITEM_SONG_TIME), - ITEM_MAP_ENTRY(ITEM_SONG_STORMS), - ITEM_MAP_ENTRY(ITEM_MEDALLION_FOREST), - ITEM_MAP_ENTRY(ITEM_MEDALLION_FIRE), - ITEM_MAP_ENTRY(ITEM_MEDALLION_WATER), - ITEM_MAP_ENTRY(ITEM_MEDALLION_SPIRIT), - ITEM_MAP_ENTRY(ITEM_MEDALLION_SHADOW), - ITEM_MAP_ENTRY(ITEM_MEDALLION_LIGHT), - ITEM_MAP_ENTRY(ITEM_KOKIRI_EMERALD), - ITEM_MAP_ENTRY(ITEM_GORON_RUBY), - ITEM_MAP_ENTRY(ITEM_ZORA_SAPPHIRE), - ITEM_MAP_ENTRY(ITEM_STONE_OF_AGONY), - ITEM_MAP_ENTRY(ITEM_GERUDO_CARD), - ITEM_MAP_ENTRY(ITEM_SKULL_TOKEN), - ITEM_MAP_ENTRY(ITEM_HEART_CONTAINER), - ITEM_MAP_ENTRY(ITEM_HEART_PIECE), - ITEM_MAP_ENTRY(ITEM_KEY_BOSS), - ITEM_MAP_ENTRY(ITEM_COMPASS), - ITEM_MAP_ENTRY(ITEM_DUNGEON_MAP), - ITEM_MAP_ENTRY(ITEM_KEY_SMALL), - ITEM_MAP_ENTRY(ITEM_MAGIC_SMALL), - ITEM_MAP_ENTRY(ITEM_MAGIC_LARGE), -}; +std::map itemMapping = { ITEM_MAP_ENTRY(ITEM_STICK), + ITEM_MAP_ENTRY(ITEM_NUT), + ITEM_MAP_ENTRY(ITEM_BOMB), + ITEM_MAP_ENTRY(ITEM_BOW), + ITEM_MAP_ENTRY(ITEM_ARROW_FIRE), + ITEM_MAP_ENTRY(ITEM_DINS_FIRE), + ITEM_MAP_ENTRY(ITEM_SLINGSHOT), + ITEM_MAP_ENTRY(ITEM_OCARINA_FAIRY), + ITEM_MAP_ENTRY(ITEM_OCARINA_TIME), + ITEM_MAP_ENTRY(ITEM_BOMBCHU), + ITEM_MAP_ENTRY(ITEM_HOOKSHOT), + ITEM_MAP_ENTRY(ITEM_LONGSHOT), + ITEM_MAP_ENTRY(ITEM_ARROW_ICE), + ITEM_MAP_ENTRY(ITEM_FARORES_WIND), + ITEM_MAP_ENTRY(ITEM_BOOMERANG), + ITEM_MAP_ENTRY(ITEM_LENS), + ITEM_MAP_ENTRY(ITEM_BEAN), + ITEM_MAP_ENTRY(ITEM_HAMMER), + ITEM_MAP_ENTRY(ITEM_ARROW_LIGHT), + ITEM_MAP_ENTRY(ITEM_NAYRUS_LOVE), + ITEM_MAP_ENTRY(ITEM_BOTTLE), + ITEM_MAP_ENTRY(ITEM_POTION_RED), + ITEM_MAP_ENTRY(ITEM_POTION_GREEN), + ITEM_MAP_ENTRY(ITEM_POTION_BLUE), + ITEM_MAP_ENTRY(ITEM_FAIRY), + ITEM_MAP_ENTRY(ITEM_FISH), + ITEM_MAP_ENTRY(ITEM_MILK_BOTTLE), + ITEM_MAP_ENTRY(ITEM_LETTER_RUTO), + ITEM_MAP_ENTRY(ITEM_BLUE_FIRE), + ITEM_MAP_ENTRY(ITEM_BUG), + ITEM_MAP_ENTRY(ITEM_BIG_POE), + ITEM_MAP_ENTRY(ITEM_MILK_HALF), + ITEM_MAP_ENTRY(ITEM_POE), + ITEM_MAP_ENTRY(ITEM_WEIRD_EGG), + ITEM_MAP_ENTRY(ITEM_CHICKEN), + ITEM_MAP_ENTRY(ITEM_LETTER_ZELDA), + ITEM_MAP_ENTRY(ITEM_MASK_KEATON), + ITEM_MAP_ENTRY(ITEM_MASK_SKULL), + ITEM_MAP_ENTRY(ITEM_MASK_SPOOKY), + ITEM_MAP_ENTRY(ITEM_MASK_BUNNY), + ITEM_MAP_ENTRY(ITEM_MASK_GORON), + ITEM_MAP_ENTRY(ITEM_MASK_ZORA), + ITEM_MAP_ENTRY(ITEM_MASK_GERUDO), + ITEM_MAP_ENTRY(ITEM_MASK_TRUTH), + ITEM_MAP_ENTRY(ITEM_SOLD_OUT), + ITEM_MAP_ENTRY(ITEM_POCKET_EGG), + ITEM_MAP_ENTRY(ITEM_POCKET_CUCCO), + ITEM_MAP_ENTRY(ITEM_COJIRO), + ITEM_MAP_ENTRY(ITEM_ODD_MUSHROOM), + ITEM_MAP_ENTRY(ITEM_ODD_POTION), + ITEM_MAP_ENTRY(ITEM_SAW), + ITEM_MAP_ENTRY(ITEM_SWORD_BROKEN), + ITEM_MAP_ENTRY(ITEM_PRESCRIPTION), + ITEM_MAP_ENTRY(ITEM_FROG), + ITEM_MAP_ENTRY(ITEM_EYEDROPS), + ITEM_MAP_ENTRY(ITEM_CLAIM_CHECK), + ITEM_MAP_ENTRY(ITEM_BOW_ARROW_FIRE), + ITEM_MAP_ENTRY(ITEM_BOW_ARROW_ICE), + ITEM_MAP_ENTRY(ITEM_BOW_ARROW_LIGHT), + ITEM_MAP_ENTRY(ITEM_SWORD_KOKIRI), + ITEM_MAP_ENTRY(ITEM_SWORD_MASTER), + ITEM_MAP_ENTRY(ITEM_SWORD_BGS), + ITEM_MAP_ENTRY(ITEM_SHIELD_DEKU), + ITEM_MAP_ENTRY(ITEM_SHIELD_HYLIAN), + ITEM_MAP_ENTRY(ITEM_SHIELD_MIRROR), + ITEM_MAP_ENTRY(ITEM_TUNIC_KOKIRI), + ITEM_MAP_ENTRY(ITEM_TUNIC_GORON), + ITEM_MAP_ENTRY(ITEM_TUNIC_ZORA), + ITEM_MAP_ENTRY(ITEM_BOOTS_KOKIRI), + ITEM_MAP_ENTRY(ITEM_BOOTS_IRON), + ITEM_MAP_ENTRY(ITEM_BOOTS_HOVER), + ITEM_MAP_ENTRY(ITEM_BULLET_BAG_30), + ITEM_MAP_ENTRY(ITEM_BULLET_BAG_40), + ITEM_MAP_ENTRY(ITEM_BULLET_BAG_50), + ITEM_MAP_ENTRY(ITEM_QUIVER_30), + ITEM_MAP_ENTRY(ITEM_QUIVER_40), + ITEM_MAP_ENTRY(ITEM_QUIVER_50), + ITEM_MAP_ENTRY(ITEM_BOMB_BAG_20), + ITEM_MAP_ENTRY(ITEM_BOMB_BAG_30), + ITEM_MAP_ENTRY(ITEM_BOMB_BAG_40), + ITEM_MAP_ENTRY(ITEM_BRACELET), + ITEM_MAP_ENTRY(ITEM_GAUNTLETS_SILVER), + ITEM_MAP_ENTRY(ITEM_GAUNTLETS_GOLD), + ITEM_MAP_ENTRY(ITEM_SCALE_SILVER), + ITEM_MAP_ENTRY(ITEM_SCALE_GOLDEN), + ITEM_MAP_ENTRY(ITEM_SWORD_KNIFE), + ITEM_MAP_ENTRY(ITEM_WALLET_ADULT), + ITEM_MAP_ENTRY(ITEM_WALLET_GIANT), + ITEM_MAP_ENTRY(ITEM_SEEDS), + ITEM_MAP_ENTRY(ITEM_FISHING_POLE), + ITEM_MAP_ENTRY(ITEM_SONG_MINUET), + ITEM_MAP_ENTRY(ITEM_SONG_BOLERO), + ITEM_MAP_ENTRY(ITEM_SONG_SERENADE), + ITEM_MAP_ENTRY(ITEM_SONG_REQUIEM), + ITEM_MAP_ENTRY(ITEM_SONG_NOCTURNE), + ITEM_MAP_ENTRY(ITEM_SONG_PRELUDE), + ITEM_MAP_ENTRY(ITEM_SONG_LULLABY), + ITEM_MAP_ENTRY(ITEM_SONG_EPONA), + ITEM_MAP_ENTRY(ITEM_SONG_SARIA), + ITEM_MAP_ENTRY(ITEM_SONG_SUN), + ITEM_MAP_ENTRY(ITEM_SONG_TIME), + ITEM_MAP_ENTRY(ITEM_SONG_STORMS), + ITEM_MAP_ENTRY(ITEM_MEDALLION_FOREST), + ITEM_MAP_ENTRY(ITEM_MEDALLION_FIRE), + ITEM_MAP_ENTRY(ITEM_MEDALLION_WATER), + ITEM_MAP_ENTRY(ITEM_MEDALLION_SPIRIT), + ITEM_MAP_ENTRY(ITEM_MEDALLION_SHADOW), + ITEM_MAP_ENTRY(ITEM_MEDALLION_LIGHT), + ITEM_MAP_ENTRY(ITEM_KOKIRI_EMERALD), + ITEM_MAP_ENTRY(ITEM_GORON_RUBY), + ITEM_MAP_ENTRY(ITEM_ZORA_SAPPHIRE), + ITEM_MAP_ENTRY(ITEM_STONE_OF_AGONY), + ITEM_MAP_ENTRY(ITEM_GERUDO_CARD), + ITEM_MAP_ENTRY(ITEM_SKULL_TOKEN), + ITEM_MAP_ENTRY(ITEM_HEART_CONTAINER), + ITEM_MAP_ENTRY(ITEM_HEART_PIECE), + ITEM_MAP_ENTRY(ITEM_KEY_BOSS), + ITEM_MAP_ENTRY(ITEM_COMPASS), + ITEM_MAP_ENTRY(ITEM_DUNGEON_MAP), + ITEM_MAP_ENTRY(ITEM_KEY_SMALL), + ITEM_MAP_ENTRY(ITEM_MAGIC_SMALL), + ITEM_MAP_ENTRY(ITEM_MAGIC_LARGE), + ITEM_MAP_ENTRY(ITEM_GLIDER) }; std::map gregMapping = { - {ITEM_RUPEE_GREEN, {ITEM_RUPEE_GREEN, "ITEM_RUPEE_GREEN", "ITEM_RUPEE_GREEN_Faded", gRupeeCounterIconTex}} + { ITEM_RUPEE_GREEN, { ITEM_RUPEE_GREEN, "ITEM_RUPEE_GREEN", "ITEM_RUPEE_GREEN_Faded", gRupeeCounterIconTex } } }; std::map triforcePieceMapping = { - {RG_TRIFORCE_PIECE, {RG_TRIFORCE_PIECE, "RG_TRIFORCE_PIECE", "RG_TRIFORCE_PIECE_Faded", gTriforcePieceTex}} + { RG_TRIFORCE_PIECE, { RG_TRIFORCE_PIECE, "RG_TRIFORCE_PIECE", "RG_TRIFORCE_PIECE_Faded", gTriforcePieceTex } } }; std::map bossSoulMapping = { - { RG_GOHMA_SOUL, { RG_GOHMA_SOUL, "RG_GOHMA_SOUL", "RG_GOHMA_SOUL_Faded", gBossSoulTex } }, - { RG_KING_DODONGO_SOUL, { RG_KING_DODONGO_SOUL, "RG_KING_DODONGO_SOUL", "RG_KING_DODONGO_SOUL_Faded", gBossSoulTex } }, - { RG_BARINADE_SOUL, { RG_BARINADE_SOUL, "RG_BARINADE_SOUL", "RG_BARINADE_SOUL_Faded", gBossSoulTex } }, - { RG_PHANTOM_GANON_SOUL,{ RG_PHANTOM_GANON_SOUL,"RG_PHANTOM_GANON_SOUL","RG_PHANTOM_GANON_SOUL_Faded", gBossSoulTex } }, - { RG_VOLVAGIA_SOUL, { RG_VOLVAGIA_SOUL, "RG_VOLVAGIA_SOUL", "RG_VOLVAGIA_SOUL_Faded", gBossSoulTex } }, - { RG_MORPHA_SOUL, { RG_MORPHA_SOUL, "RG_MORPHA_SOUL", "RG_MORPHA_SOUL_Faded", gBossSoulTex } }, - { RG_BONGO_BONGO_SOUL, { RG_BONGO_BONGO_SOUL, "RG_BONGO_BONGO_SOUL", "RG_BONGO_BONGO_SOUL_Faded", gBossSoulTex } }, - { RG_TWINROVA_SOUL, { RG_TWINROVA_SOUL, "RG_TWINROVA_SOUL", "RG_TWINROVA_SOUL_Faded", gBossSoulTex } }, - { RG_GANON_SOUL, { RG_GANON_SOUL, "RG_GANON_SOUL", "RG_GANON_SOUL_Faded", gBossSoulTex } }, + { RG_GOHMA_SOUL, { RG_GOHMA_SOUL, "RG_GOHMA_SOUL", "RG_GOHMA_SOUL_Faded", gBossSoulTex } }, + { RG_KING_DODONGO_SOUL, + { RG_KING_DODONGO_SOUL, "RG_KING_DODONGO_SOUL", "RG_KING_DODONGO_SOUL_Faded", gBossSoulTex } }, + { RG_BARINADE_SOUL, { RG_BARINADE_SOUL, "RG_BARINADE_SOUL", "RG_BARINADE_SOUL_Faded", gBossSoulTex } }, + { RG_PHANTOM_GANON_SOUL, + { RG_PHANTOM_GANON_SOUL, "RG_PHANTOM_GANON_SOUL", "RG_PHANTOM_GANON_SOUL_Faded", gBossSoulTex } }, + { RG_VOLVAGIA_SOUL, { RG_VOLVAGIA_SOUL, "RG_VOLVAGIA_SOUL", "RG_VOLVAGIA_SOUL_Faded", gBossSoulTex } }, + { RG_MORPHA_SOUL, { RG_MORPHA_SOUL, "RG_MORPHA_SOUL", "RG_MORPHA_SOUL_Faded", gBossSoulTex } }, + { RG_BONGO_BONGO_SOUL, { RG_BONGO_BONGO_SOUL, "RG_BONGO_BONGO_SOUL", "RG_BONGO_BONGO_SOUL_Faded", gBossSoulTex } }, + { RG_TWINROVA_SOUL, { RG_TWINROVA_SOUL, "RG_TWINROVA_SOUL", "RG_TWINROVA_SOUL_Faded", gBossSoulTex } }, + { RG_GANON_SOUL, { RG_GANON_SOUL, "RG_GANON_SOUL", "RG_GANON_SOUL_Faded", gBossSoulTex } }, }; std::map questMapping = { @@ -164,33 +165,27 @@ std::map questMapping = { }; std::map songMapping = { - SONG_MAP_ENTRY(QUEST_SONG_LULLABY, 224, 107, 255), - SONG_MAP_ENTRY(QUEST_SONG_EPONA, 255, 195, 60), - SONG_MAP_ENTRY(QUEST_SONG_SARIA, 127, 255, 137), - SONG_MAP_ENTRY(QUEST_SONG_SUN, 255, 255, 60), - SONG_MAP_ENTRY(QUEST_SONG_TIME, 119, 236, 255), - SONG_MAP_ENTRY(QUEST_SONG_STORMS, 165, 165, 165), - SONG_MAP_ENTRY(QUEST_SONG_MINUET, 150, 255, 100), - SONG_MAP_ENTRY(QUEST_SONG_BOLERO, 255, 80, 40), - SONG_MAP_ENTRY(QUEST_SONG_SERENADE, 100, 150, 255), - SONG_MAP_ENTRY(QUEST_SONG_REQUIEM, 255, 160, 0), - SONG_MAP_ENTRY(QUEST_SONG_NOCTURNE, 255, 100, 255), - SONG_MAP_ENTRY(QUEST_SONG_PRELUDE, 255, 240, 100), + SONG_MAP_ENTRY(QUEST_SONG_LULLABY, 224, 107, 255), SONG_MAP_ENTRY(QUEST_SONG_EPONA, 255, 195, 60), + SONG_MAP_ENTRY(QUEST_SONG_SARIA, 127, 255, 137), SONG_MAP_ENTRY(QUEST_SONG_SUN, 255, 255, 60), + SONG_MAP_ENTRY(QUEST_SONG_TIME, 119, 236, 255), SONG_MAP_ENTRY(QUEST_SONG_STORMS, 165, 165, 165), + SONG_MAP_ENTRY(QUEST_SONG_MINUET, 150, 255, 100), SONG_MAP_ENTRY(QUEST_SONG_BOLERO, 255, 80, 40), + SONG_MAP_ENTRY(QUEST_SONG_SERENADE, 100, 150, 255), SONG_MAP_ENTRY(QUEST_SONG_REQUIEM, 255, 160, 0), + SONG_MAP_ENTRY(QUEST_SONG_NOCTURNE, 255, 100, 255), SONG_MAP_ENTRY(QUEST_SONG_PRELUDE, 255, 240, 100), }; std::array vanillaSongMapping = { { - VANILLA_SONG_MAP_ENTRY(QUEST_SONG_LULLABY, 255, 255, 255), - VANILLA_SONG_MAP_ENTRY(QUEST_SONG_EPONA, 255, 255, 255), - VANILLA_SONG_MAP_ENTRY(QUEST_SONG_SARIA, 255, 255, 255), - VANILLA_SONG_MAP_ENTRY(QUEST_SONG_SUN, 255, 255, 255), - VANILLA_SONG_MAP_ENTRY(QUEST_SONG_TIME, 255, 255, 255), - VANILLA_SONG_MAP_ENTRY(QUEST_SONG_STORMS, 255, 255, 255), - VANILLA_SONG_MAP_ENTRY(QUEST_SONG_MINUET, 150, 255, 100), - VANILLA_SONG_MAP_ENTRY(QUEST_SONG_BOLERO, 255, 80, 40), + VANILLA_SONG_MAP_ENTRY(QUEST_SONG_LULLABY, 255, 255, 255), + VANILLA_SONG_MAP_ENTRY(QUEST_SONG_EPONA, 255, 255, 255), + VANILLA_SONG_MAP_ENTRY(QUEST_SONG_SARIA, 255, 255, 255), + VANILLA_SONG_MAP_ENTRY(QUEST_SONG_SUN, 255, 255, 255), + VANILLA_SONG_MAP_ENTRY(QUEST_SONG_TIME, 255, 255, 255), + VANILLA_SONG_MAP_ENTRY(QUEST_SONG_STORMS, 255, 255, 255), + VANILLA_SONG_MAP_ENTRY(QUEST_SONG_MINUET, 150, 255, 100), + VANILLA_SONG_MAP_ENTRY(QUEST_SONG_BOLERO, 255, 80, 40), VANILLA_SONG_MAP_ENTRY(QUEST_SONG_SERENADE, 100, 150, 255), - VANILLA_SONG_MAP_ENTRY(QUEST_SONG_REQUIEM, 255, 160, 0), + VANILLA_SONG_MAP_ENTRY(QUEST_SONG_REQUIEM, 255, 160, 0), VANILLA_SONG_MAP_ENTRY(QUEST_SONG_NOCTURNE, 255, 100, 255), - VANILLA_SONG_MAP_ENTRY(QUEST_SONG_PRELUDE, 255, 240, 100), + VANILLA_SONG_MAP_ENTRY(QUEST_SONG_PRELUDE, 255, 240, 100), } }; const char* GetTextureForItemId(uint32_t itemId) { @@ -203,31 +198,41 @@ const char* GetTextureForItemId(uint32_t itemId) { void RegisterImGuiItemIcons() { for (const auto& entry : itemMapping) { - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, ImVec4(1, 1, 1, 1)); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.nameFaded, entry.second.texturePath, ImVec4(1, 1, 1, 0.3f)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, + ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture( + entry.second.nameFaded, entry.second.texturePath, ImVec4(1, 1, 1, 0.3f)); } for (const auto& entry : gregMapping) { ImVec4 gregGreen = ImVec4(42.0f / 255.0f, 169.0f / 255.0f, 40.0f / 255.0f, 1.0f); ImVec4 gregFadedGreen = gregGreen; gregFadedGreen.w = 0.3f; - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, gregGreen); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.nameFaded, entry.second.texturePath, gregFadedGreen); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, + gregGreen); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.nameFaded, + entry.second.texturePath, gregFadedGreen); } for (const auto& entry : triforcePieceMapping) { - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, ImVec4(1, 1, 1, 1)); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.nameFaded, entry.second.texturePath, ImVec4(1, 1, 1, 0.3f)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, + ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture( + entry.second.nameFaded, entry.second.texturePath, ImVec4(1, 1, 1, 0.3f)); } for (const auto& entry : bossSoulMapping) { - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, ImVec4(1, 1, 1, 1)); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.nameFaded, entry.second.texturePath, ImVec4(1, 1, 1, 0.3f)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, + ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture( + entry.second.nameFaded, entry.second.texturePath, ImVec4(1, 1, 1, 0.3f)); } for (const auto& entry : questMapping) { - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, ImVec4(1, 1, 1, 1)); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.nameFaded, entry.second.texturePath, ImVec4(1, 1, 1, 0.3f)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, + ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture( + entry.second.nameFaded, entry.second.texturePath, ImVec4(1, 1, 1, 0.3f)); } for (const auto& [quest, entry] : songMapping) { diff --git a/soh/soh/util.cpp b/soh/soh/util.cpp index 7d3189107..4983fcd1c 100644 --- a/soh/soh/util.cpp +++ b/soh/soh/util.cpp @@ -137,7 +137,7 @@ std::vector itemNames = { "Ice Arrow", "Farore's Wind", "Boomerang", - "Lens of Truth", + "Lens of Struth", "Magic Bean", "Megaton Hammer", "Light Arrow", @@ -244,6 +244,7 @@ std::vector itemNames = { "Small Key", "Small Magic Jar", "Large Magic Jar", + "Glider", "Piece of Heart", "[Removed]", "[Removed]", @@ -281,30 +282,11 @@ std::vector itemNames = { }; std::vector questItemNames = { - "Forest Medallion", - "Fire Medallion", - "Water Medallion", - "Spirit Medallion", - "Shadow Medallion", - "Light Medallion", - "Minuet of Forest", - "Bolero of Fire", - "Serenade of Water", - "Requiem of Spirit", - "Nocturne of Shadow", - "Prelude of Light", - "Zelda's Lullaby", - "Epona's Song", - "Saria's Song", - "Sun's Song", - "Song of Time", - "Song of Storms", - "Kokiri's Emerald", - "Goron's Ruby", - "Zora's Sapphire", - "Stone of Agony", - "Gerudo's Card", - "Gold Skulltula Token", + "Forest Medallion", "Fire Medallion", "Water Medallion", "Spirit Medallion", "Shadow Medallion", + "Light Medallion", "Minuet of Forest", "Bolero of Fire", "Serenade of Water", "Requiem of Spirit", + "Nocturne of Shadow", "Prelude of Light", "Zelda's Lullaby", "Epona's Song", "Saria's Song", + "Sun's Song", "Song of Time", "Song of Storms", "Kokiri's Emerald", "Goron's Ruby", + "Zora's Sapphire", "Stone of Agony", "Gerudo's Card", "Gold Skulltula Token", }; std::array rcareaPrefixes = { @@ -353,11 +335,17 @@ const std::string& SohUtils::GetSceneName(int32_t scene) { } const std::string& SohUtils::GetItemName(int32_t item) { - if (item > itemNames.size()) { - SPDLOG_WARN("Passed invalid item id to SohUtils::GetItemName: ({})", item); - assert(false); - return ""; - } + + // if (item > itemNames.size()) { + + // SPDLOG_DEBUG("Item Size: {}", itemNames.size()); + + // SPDLOG_DEBUG("GetItemName called with item: {}", item); + + // SPDLOG_WARN("Passed invalid item id to SohUtils::GetItemName: ({})", item); + // assert(false); + // return ""; + // } return itemNames[item]; } @@ -390,7 +378,8 @@ void SohUtils::CopyStringToCharArray(char* destination, std::string source, size std::string SohUtils::Sanitize(std::string stringValue) { // Add backslashes. for (auto i = stringValue.begin();;) { - auto const pos = std::find_if(i, stringValue.end(), [](char const c) { return '\\' == c || '\'' == c || '"' == c; }); + auto const pos = + std::find_if(i, stringValue.end(), [](char const c) { return '\\' == c || '\'' == c || '"' == c; }); if (pos == stringValue.end()) { break; } @@ -398,15 +387,17 @@ std::string SohUtils::Sanitize(std::string stringValue) { } // Removes others. - stringValue.erase(std::remove_if(stringValue.begin(), stringValue.end(), [](char const c) { - return '\n' == c || '\r' == c || '\0' == c || '\x1A' == c; }), stringValue.end()); + stringValue.erase(std::remove_if(stringValue.begin(), stringValue.end(), + [](char const c) { return '\n' == c || '\r' == c || '\0' == c || '\x1A' == c; }), + stringValue.end()); return stringValue; } size_t SohUtils::CopyStringToCharBuffer(char* buffer, const std::string& source, const size_t maxBufferSize) { if (!source.empty()) { - // Prevent potential horrible overflow due to implicit conversion of maxBufferSize to an unsigned. Prevents negatives. + // Prevent potential horrible overflow due to implicit conversion of maxBufferSize to an unsigned. Prevents + // negatives. memset(buffer, 0, std::max(0, maxBufferSize)); // Gaurentee that this value will be greater than 0, regardless of passed variables. const size_t copiedCharLen = std::min(std::max(0, maxBufferSize - 1), source.length()); diff --git a/soh/src/code/z_camera.c b/soh/src/code/z_camera.c index 7b95c70af..16d14294c 100644 --- a/soh/src/code/z_camera.c +++ b/soh/src/code/z_camera.c @@ -17,7 +17,7 @@ s32 Camera_UpdateWater(Camera* camera); #define RELOAD_PARAMS \ (camera->animState == 0 || camera->animState == 0xA || camera->animState == 0x14 || R_RELOAD_CAM_PARAMS) -#define PCT(x) ((x)*0.01f) +#define PCT(x) ((x) * 0.01f) #define NEXTSETTING ((values++)->val) #define NEXTPCT PCT(NEXTSETTING) @@ -493,8 +493,7 @@ Vec3s* Camera_GetCamBgDataUnderPlayer(Camera* camera, u16* dataCnt) { Actor_GetWorldPosShapeRot(&playerPosShape, &camera->player->actor); playerPosShape.pos.y += Player_GetHeight(camera->player); - if (BgCheck_EntityRaycastFloor3(&camera->play->colCtx, &floorPoly, &bgId, &playerPosShape.pos) == - BGCHECK_Y_MIN) { + if (BgCheck_EntityRaycastFloor3(&camera->play->colCtx, &floorPoly, &bgId, &playerPosShape.pos) == BGCHECK_Y_MIN) { // no floor return NULL; } @@ -516,8 +515,8 @@ s32 Camera_GetWaterBoxDataIdx(Camera* camera, f32* waterY) { Actor_GetWorldPosShapeRot(&playerPosShape, &camera->player->actor); *waterY = playerPosShape.pos.y; - if (!WaterBox_GetSurface1(camera->play, &camera->play->colCtx, playerPosShape.pos.x, playerPosShape.pos.z, - waterY, &waterBox)) { + if (!WaterBox_GetSurface1(camera->play, &camera->play->colCtx, playerPosShape.pos.x, playerPosShape.pos.z, waterY, + &waterBox)) { // player's position is not in a water box. *waterY = BGCHECK_Y_MIN; return -1; @@ -551,8 +550,7 @@ f32 Camera_GetWaterSurface(Camera* camera, Vec3f* chkPos, s32* envProp) { Actor_GetWorldPosShapeRot(&playerPosRot, &camera->player->actor); waterY = playerPosRot.pos.y; - if (!WaterBox_GetSurface1(camera->play, &camera->play->colCtx, chkPos->x, chkPos->z, &waterY, - &waterBox)) { + if (!WaterBox_GetSurface1(camera->play, &camera->play->colCtx, chkPos->x, chkPos->z, &waterY, &waterBox)) { // chkPos is not within the x/z boundaries of a water box. return BGCHECK_Y_MIN; } @@ -574,9 +572,9 @@ s16 Camera_XZAngle(Vec3f* to, Vec3f* from) { return DEGF_TO_BINANG(RADF_TO_DEGF(Math_FAtan2F(from->x - to->x, from->z - to->z))); } - f32 D_8015CE50; - f32 D_8015CE54; - CamColChk D_8015CE58; +f32 D_8015CE50; +f32 D_8015CE54; +CamColChk D_8015CE58; s16 func_80044ADC(Camera* camera, s16 yaw, s16 arg2) { Vec3f playerPos; Vec3f rotatedPos; @@ -1317,7 +1315,7 @@ s16 Camera_CalcDefaultYaw(Camera* camera, s16 cur, s16 target, f32 arg3, f32 acc return cur + (s16)(angDelta * velocity * velFactor * yawUpdRate); } -//Follow player with collision +// Follow player with collision void func_80046E20(Camera* camera, VecSph* eyeAdjustment, f32 minDist, f32 arg3, f32* arg4, SwingAnimation* anim) { static CamColChk atEyeColChk; static CamColChk eyeAtColChk; @@ -1499,7 +1497,10 @@ s32 Camera_Free(Camera* camera) { newCamX *= (CVarGetFloat(CVAR_SETTING("FreeLook.CameraSensitivity.X"), 1.0f)); newCamY *= (CVarGetFloat(CVAR_SETTING("FreeLook.CameraSensitivity.Y"), 1.0f)); - bool invertXAxis = (CVarGetInteger(CVAR_SETTING("FreeLook.InvertXAxis"), 0) && !CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0)) || (!CVarGetInteger(CVAR_SETTING("FreeLook.InvertXAxis"), 0) && CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0)); + bool invertXAxis = (CVarGetInteger(CVAR_SETTING("FreeLook.InvertXAxis"), 0) && + !CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0)) || + (!CVarGetInteger(CVAR_SETTING("FreeLook.InvertXAxis"), 0) && + CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0)); camera->play->camX += newCamX * (invertXAxis ? -1 : 1); camera->play->camY += newCamY * (CVarGetInteger(CVAR_SETTING("FreeLook.InvertYAxis"), 1) ? 1 : -1); @@ -1761,7 +1762,7 @@ s32 Camera_Normal1(Camera* camera) { } // crit wiggle - if(!CVarGetInteger(CVAR_ENHANCEMENT("DisableCritWiggle"),0)) { + if (!CVarGetInteger(CVAR_ENHANCEMENT("DisableCritWiggle"), 0)) { if (gSaveContext.health <= 16 && ((camera->play->state.frames % 256) == 0)) { wiggleAdj = Rand_ZeroOne() * 10000.0f; camera->inputDir.y = wiggleAdj + camera->inputDir.y; @@ -2381,17 +2382,22 @@ s32 Camera_Jump1(Camera* camera) { camera->animState++; } + // CUSTOM camera to follow close to Glider + // playerPosRot->pos.y - camera->playerGroundY + anim->unk_1C = playerPosRot->pos.y - camera->playerPosDelta.y; + camera->posOffset.y -= camera->playerPosDelta.y; + if (anim->swing.swingUpdateRateTimer != 0) { camera->yawUpdateRateInv = Camera_LERPCeilF(jump1->yawUpateRateTarget + anim->swing.swingUpdateRateTimer, - camera->yawUpdateRateInv, PCT(OREG(26)), 0.1f); + camera->yawUpdateRateInv, PCT(OREG(26)) * 4.0f, 0.1f); camera->pitchUpdateRateInv = Camera_LERPCeilF((f32)R_CAM_DEFA_PHI_UPDRATE + anim->swing.swingUpdateRateTimer, - camera->pitchUpdateRateInv, PCT(OREG(26)), 0.1f); + camera->pitchUpdateRateInv, PCT(OREG(26)) * 4.0f, 0.1f); anim->swing.swingUpdateRateTimer--; } else { camera->yawUpdateRateInv = - Camera_LERPCeilF(jump1->yawUpateRateTarget, camera->yawUpdateRateInv, PCT(OREG(26)), 0.1f); + Camera_LERPCeilF(jump1->yawUpateRateTarget, camera->yawUpdateRateInv, PCT(OREG(26)) * 4.0f, 0.1f); camera->pitchUpdateRateInv = - Camera_LERPCeilF((f32)R_CAM_DEFA_PHI_UPDRATE, camera->pitchUpdateRateInv, PCT(OREG(26)), 0.1f); + Camera_LERPCeilF((f32)R_CAM_DEFA_PHI_UPDRATE, camera->pitchUpdateRateInv, PCT(OREG(26)) * 4.0f, 0.1f); } camera->xzOffsetUpdateRate = Camera_LERPCeilF(PCT(OREG(2)), camera->xzOffsetUpdateRate, PCT(OREG(25)), 0.1f); @@ -3095,7 +3101,7 @@ s32 Camera_Battle1(Camera* camera) { } anim->roll += (((OREG(36) * camera->speedRatio) * (1.0f - distRatio)) - anim->roll) * PCT(OREG(37)); camera->roll = DEGF_TO_BINANG(anim->roll); - camera->fov = Camera_LERPCeilF((player->meleeWeaponState != 0 ? 0.8f + camera->fov = Camera_LERPCeilF((player->meleeWeaponState != 0 ? 0.8f : gSaveContext.health <= 0x10 ? 0.8f : 1.0f) * (fov - ((fov * 0.05f) * distRatio)), @@ -3565,8 +3571,8 @@ s32 Camera_KeepOn3(Camera* camera) { Camera_Vec3fVecSphGeoAdd(&lineChkPointB, &anim->atTarget, &atToEyeAdj); if (!(keep3->flags & 0x80)) { while (i < angleCnt) { - if (!CollisionCheck_LineOCCheck(camera->play, &camera->play->colChkCtx, &anim->atTarget, - &lineChkPointB, colChkActors, 2) && + if (!CollisionCheck_LineOCCheck(camera->play, &camera->play->colChkCtx, &anim->atTarget, &lineChkPointB, + colChkActors, 2) && !Camera_BGCheck(camera, &anim->atTarget, &lineChkPointB)) { break; } @@ -3590,7 +3596,7 @@ s32 Camera_KeepOn3(Camera* camera) { at->y += (anim->atTarget.y - at->y) / anim->animTimer; at->z += (anim->atTarget.z - at->z) / anim->animTimer; // needed to match - //if (!prevTargetPlayerDist) {} + // if (!prevTargetPlayerDist) {} atToEyeAdj.r = ((anim->eyeToAtTarget.x * anim->animTimer) + atToEyeNextDir.r) + 1.0f; atToEyeAdj.yaw = atToEyeNextDir.yaw + (s16)(anim->eyeToAtTarget.y * anim->animTimer); atToEyeAdj.pitch = atToEyeNextDir.pitch + (s16)(anim->eyeToAtTarget.z * anim->animTimer); @@ -3848,8 +3854,8 @@ s32 Camera_KeepOn4(Camera* camera) { if (!(keep4->unk_1C & 1)) { angleCnt = ARRAY_COUNT(D_8011D3B0); for (i = 0; i < angleCnt; i++) { - if (!CollisionCheck_LineOCCheck(camera->play, &camera->play->colChkCtx, &D_8015BD50, - &D_8015BD70, spCC, sp9C) && + if (!CollisionCheck_LineOCCheck(camera->play, &camera->play->colChkCtx, &D_8015BD50, &D_8015BD70, + spCC, sp9C) && !Camera_BGCheck(camera, &D_8015BD50, &D_8015BD70)) { break; } @@ -4541,9 +4547,9 @@ s32 Camera_Subj4(Camera* camera) { } anim->unk_28 = temp_f16; - //camera->player->actor.world.pos = *eyeNext; - //camera->player->actor.world.pos.y = camera->playerGroundY; - //camera->player->actor.shape.rot.y = sp64.yaw; + // camera->player->actor.world.pos = *eyeNext; + // camera->player->actor.world.pos.y = camera->playerGroundY; + // camera->player->actor.shape.rot.y = sp64.yaw; temp_f16 = ((240.0f * temp_f16) * (anim->unk_24 * 0.416667f)); temp_a0 = temp_f16 + anim->unk_30; at->x = eye->x + (Math_SinS(temp_a0) * 10.0f); @@ -4738,7 +4744,8 @@ s32 Camera_Unique1(Camera* camera) { anim->timer--; } - sp8C.yaw = Camera_LERPFloorS(anim->yawTarget, eyeNextAtOffset.yaw, 0.5f, CVarGetInteger(CVAR_ENHANCEMENT("FixHangingLedgeSwingRate"), 0) ? 0xA : 0x2710); + sp8C.yaw = Camera_LERPFloorS(anim->yawTarget, eyeNextAtOffset.yaw, 0.5f, + CVarGetInteger(CVAR_ENHANCEMENT("FixHangingLedgeSwingRate"), 0) ? 0xA : 0x2710); Camera_Vec3fVecSphGeoAdd(eyeNext, at, &sp8C); *eye = *eyeNext; Camera_BGCheck(camera, at, eye); @@ -5249,7 +5256,8 @@ s32 Camera_Unique9(Camera* camera) { D_8011D3AC = anim->curKeyFrame->unk_01 & 0xF; } else if ((anim->curKeyFrame->unk_01 & 0xF0) == 0xC0) { Camera_UpdateInterface(0xF000 | ((anim->curKeyFrame->unk_01 & 0xF) << 8)); - } else if (camera->player->stateFlags1 & PLAYER_STATE1_IN_WATER && player->currentBoots != PLAYER_BOOTS_IRON) { + } else if (camera->player->stateFlags1 & PLAYER_STATE1_IN_WATER && + player->currentBoots != PLAYER_BOOTS_IRON) { func_8002DF38(camera->play, camera->target, 8); osSyncPrintf("camera: demo: player demo set WAIT\n"); } else { @@ -5724,8 +5732,8 @@ s32 Camera_Demo1(Camera* camera) { anim->curFrame = 0.0f; camera->animState++; // "absolute" : "relative" - osSyncPrintf(VT_SGR("1") "%06u:" VT_RST " camera: spline demo: start %s \n", - camera->play->state.frames, *relativeToPlayer == 0 ? "絶対" : "相対"); + osSyncPrintf(VT_SGR("1") "%06u:" VT_RST " camera: spline demo: start %s \n", camera->play->state.frames, + *relativeToPlayer == 0 ? "絶対" : "相対"); if (PREG(93)) { Camera_DebugPrintSplineArray("CENTER", 5, csAtPoints); @@ -7051,8 +7059,7 @@ void func_80057FC4(Camera* camera) { camera->prevSetting = camera->setting = CAM_SET_NORMAL0; break; default: - osSyncPrintf("camera: room type: default set etc (%d)\n", - camera->play->roomCtx.curRoom.behaviorType1); + osSyncPrintf("camera: room type: default set etc (%d)\n", camera->play->roomCtx.curRoom.behaviorType1); Camera_ChangeDoorCam(camera, NULL, -99, 0, 0, 18, 10); camera->prevSetting = camera->setting = CAM_SET_NORMAL0; camera->unk_14C |= 4; @@ -7468,7 +7475,7 @@ void Camera_UpdateDistortion(Camera* camera) { screenPlanePhase += DEGF_TO_BINANG(screenPlanePhaseStep); View_SetDistortionOrientation(&camera->play->view, Math_CosS(depthPhase) * 0.0f, Math_SinS(depthPhase) * 0.0f, - Math_SinS(screenPlanePhase) * 0.0f); + Math_SinS(screenPlanePhase) * 0.0f); View_SetDistortionScale(&camera->play->view, Math_SinS(screenPlanePhase) * (xScale * scaleFactor) + 1.0f, Math_CosS(screenPlanePhase) * (yScale * scaleFactor) + 1.0f, Math_CosS(depthPhase) * (zScale * scaleFactor) + 1.0f); @@ -7524,8 +7531,8 @@ Vec3s Camera_Update(Camera* camera) { spAC = curPlayerPosRot.pos; spAC.y += Player_GetHeight(camera->player); - playerGroundY = BgCheck_EntityRaycastFloor5(camera->play, &camera->play->colCtx, &playerFloorPoly, - &bgId, &camera->player->actor, &spAC); + playerGroundY = BgCheck_EntityRaycastFloor5(camera->play, &camera->play->colCtx, &playerFloorPoly, &bgId, + &camera->player->actor, &spAC); if (playerGroundY != BGCHECK_Y_MIN) { // player is above ground. sOOBTimer = 0; @@ -7631,7 +7638,8 @@ Vec3s Camera_Update(Camera* camera) { } // enable/disable debug cam - if (CVarGetInteger(CVAR_DEVELOPER_TOOLS("DebugEnabled"), 0) && CHECK_BTN_ALL(D_8015BD7C->state.input[2].press.button, BTN_START)) { + if (CVarGetInteger(CVAR_DEVELOPER_TOOLS("DebugEnabled"), 0) && + CHECK_BTN_ALL(D_8015BD7C->state.input[2].press.button, BTN_START)) { gDbgCamEnabled ^= 1; if (gDbgCamEnabled) { DbgCamera_Enable(&D_8015BD80, camera); @@ -7947,7 +7955,7 @@ s16 Camera_ChangeSettingFlags(Camera* camera, s16 setting, s16 flags) { return -5; } - //modified from "==" to "<=" to not crash when "setting" is a negative value + // modified from "==" to "<=" to not crash when "setting" is a negative value if (setting <= CAM_SET_NONE || setting >= CAM_SET_MAX) { osSyncPrintf(VT_COL(RED, WHITE) "camera: error: illegal camera set (%d) !!!!\n" VT_RST, setting); return -99; diff --git a/soh/src/code/z_common_data.c b/soh/src/code/z_common_data.c index 31a25841d..5a58c7f34 100644 --- a/soh/src/code/z_common_data.c +++ b/soh/src/code/z_common_data.c @@ -16,4 +16,7 @@ void SaveContext_Init(void) { gSaveContext.dogIsLost = true; gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; gSaveContext.unk_13EE = 50; + + // CUSTOM forcing glider to be in inventory slot 1 + gSaveContext.inventory.items[1] = ITEM_GLIDER; } diff --git a/soh/src/code/z_inventory.c b/soh/src/code/z_inventory.c index 32110d8d2..78e867758 100644 --- a/soh/src/code/z_inventory.c +++ b/soh/src/code/z_inventory.c @@ -37,136 +37,40 @@ u32 gGsFlagsMasks[] = { 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000 }; u32 gGsFlagsShifts[] = { 0, 8, 16, 24 }; void* gItemIcons[] = { - gItemIconDekuStickTex, - gItemIconDekuNutTex, - gItemIconBombTex, - gItemIconBowTex, - gItemIconArrowFireTex, - gItemIconDinsFireTex, - gItemIconSlingshotTex, - gItemIconOcarinaFairyTex, - gItemIconOcarinaOfTimeTex, - gItemIconBombchuTex, - gItemIconHookshotTex, - gItemIconLongshotTex, - gItemIconArrowIceTex, - gItemIconFaroresWindTex, - gItemIconBoomerangTex, - gItemIconLensOfTruthTex, - gItemIconMagicBeanTex, - gItemIconHammerTex, - gItemIconArrowLightTex, - gItemIconNayrusLoveTex, - gItemIconBottleEmptyTex, - gItemIconBottlePotionRedTex, - gItemIconBottlePotionGreenTex, - gItemIconBottlePotionBlueTex, - gItemIconBottleFairyTex, - gItemIconBottleFishTex, - gItemIconBottleMilkFullTex, - gItemIconBottleRutosLetterTex, - gItemIconBottleBlueFireTex, - gItemIconBottleBugTex, - gItemIconBottleBigPoeTex, - gItemIconBottleMilkHalfTex, - gItemIconBottlePoeTex, - gItemIconWeirdEggTex, - gItemIconChickenTex, - gItemIconZeldasLetterTex, - gItemIconMaskKeatonTex, - gItemIconMaskSkullTex, - gItemIconMaskSpookyTex, - gItemIconMaskBunnyHoodTex, - gItemIconMaskGoronTex, - gItemIconMaskZoraTex, - gItemIconMaskGerudoTex, - gItemIconMaskTruthTex, - gItemIconSoldOutTex, - gItemIconPocketEggTex, - gItemIconPocketCuccoTex, - gItemIconCojiroTex, - gItemIconOddMushroomTex, - gItemIconOddPotionTex, - gItemIconPoachersSawTex, - gItemIconBrokenGoronsSwordTex, - gItemIconPrescriptionTex, - gItemIconEyeballFrogTex, - gItemIconEyeDropsTex, - gItemIconClaimCheckTex, - gItemIconBowFireTex, - gItemIconBowIceTex, - gItemIconBowLightTex, - gItemIconSwordKokiriTex, - gItemIconSwordMasterTex, - gItemIconSwordBiggoronTex, - gItemIconShieldDekuTex, - gItemIconShieldHylianTex, - gItemIconShieldMirrorTex, - gItemIconTunicKokiriTex, - gItemIconTunicGoronTex, - gItemIconTunicZoraTex, - gItemIconBootsKokiriTex, - gItemIconBootsIronTex, - gItemIconBootsHoverTex, - gItemIconBulletBag30Tex, - gItemIconBulletBag40Tex, - gItemIconBulletBag50Tex, - gItemIconQuiver30Tex, - gItemIconQuiver40Tex, - gItemIconQuiver50Tex, - gItemIconBombBag20Tex, - gItemIconBombBag30Tex, - gItemIconBombBag40Tex, - gItemIconGoronsBraceletTex, - gItemIconSilverGauntletsTex, - gItemIconGoldenGauntletsTex, - gItemIconScaleSilverTex, - gItemIconScaleGoldenTex, - gItemIconBrokenGiantsKnifeTex, - gItemIconAdultsWalletTex, - gItemIconGiantsWalletTex, - gItemIconDekuSeedsTex, - gItemIconFishingPoleTex, - gSongNoteTex, - gSongNoteTex, - gSongNoteTex, - gSongNoteTex, - gSongNoteTex, - gSongNoteTex, - gSongNoteTex, - gSongNoteTex, - gSongNoteTex, - gSongNoteTex, - gSongNoteTex, - gSongNoteTex, - gQuestIconMedallionForestTex, - gQuestIconMedallionFireTex, - gQuestIconMedallionWaterTex, - gQuestIconMedallionSpiritTex, - gQuestIconMedallionShadowTex, - gQuestIconMedallionLightTex, - gQuestIconKokiriEmeraldTex, - gQuestIconGoronRubyTex, - gQuestIconZoraSapphireTex, - gQuestIconStoneOfAgonyTex, - gQuestIconGerudosCardTex, - gQuestIconGoldSkulltulaTex, - gQuestIconHeartContainerTex, - gQuestIconHeartPieceTex, - gQuestIconDungeonBossKeyTex, - gQuestIconDungeonCompassTex, - gQuestIconDungeonMapTex, - gQuestIconSmallKeyTex, - gQuestIconMagicJarSmallTex, - gQuestIconMagicJarBigTex, - gHeartPieceIcon1Tex, - gHeartPieceIcon2Tex, - gHeartPieceIcon3Tex, - gOcarinaBtnIconCUpTex, - gOcarinaBtnIconCDownTex, - gOcarinaBtnIconCLeftTex, - gOcarinaBtnIconCRightTex, - gOcarinaBtnIconATex, + gItemIconDekuStickTex, gItemIconDekuNutTex, gItemIconBombTex, gItemIconBowTex, gItemIconArrowFireTex, + gItemIconDinsFireTex, gItemIconSlingshotTex, gItemIconOcarinaFairyTex, gItemIconOcarinaOfTimeTex, + gItemIconBombchuTex, gItemIconHookshotTex, gItemIconLongshotTex, gItemIconArrowIceTex, gItemIconFaroresWindTex, + gItemIconBoomerangTex, gItemIconLensOfTruthTex, gItemIconMagicBeanTex, gItemIconHammerTex, gItemIconArrowLightTex, + gItemIconNayrusLoveTex, gItemIconBottleEmptyTex, gItemIconBottlePotionRedTex, gItemIconBottlePotionGreenTex, + gItemIconBottlePotionBlueTex, gItemIconBottleFairyTex, gItemIconBottleFishTex, gItemIconBottleMilkFullTex, + gItemIconBottleRutosLetterTex, gItemIconBottleBlueFireTex, gItemIconBottleBugTex, gItemIconBottleBigPoeTex, + gItemIconBottleMilkHalfTex, gItemIconBottlePoeTex, gItemIconWeirdEggTex, gItemIconChickenTex, + gItemIconZeldasLetterTex, gItemIconMaskKeatonTex, gItemIconMaskSkullTex, gItemIconMaskSpookyTex, + gItemIconMaskBunnyHoodTex, gItemIconMaskGoronTex, gItemIconMaskZoraTex, gItemIconMaskGerudoTex, + gItemIconMaskTruthTex, gItemIconSoldOutTex, gItemIconPocketEggTex, gItemIconPocketCuccoTex, gItemIconCojiroTex, + gItemIconOddMushroomTex, gItemIconOddPotionTex, gItemIconPoachersSawTex, gItemIconBrokenGoronsSwordTex, + gItemIconPrescriptionTex, gItemIconEyeballFrogTex, gItemIconEyeDropsTex, gItemIconClaimCheckTex, + gItemIconBowFireTex, gItemIconBowIceTex, gItemIconBowLightTex, gItemIconSwordKokiriTex, gItemIconSwordMasterTex, + gItemIconSwordBiggoronTex, gItemIconShieldDekuTex, gItemIconShieldHylianTex, gItemIconShieldMirrorTex, + gItemIconTunicKokiriTex, gItemIconTunicGoronTex, gItemIconTunicZoraTex, gItemIconBootsKokiriTex, + gItemIconBootsIronTex, gItemIconBootsHoverTex, gItemIconBulletBag30Tex, gItemIconBulletBag40Tex, + gItemIconBulletBag50Tex, gItemIconQuiver30Tex, gItemIconQuiver40Tex, gItemIconQuiver50Tex, gItemIconBombBag20Tex, + gItemIconBombBag30Tex, gItemIconBombBag40Tex, gItemIconGoronsBraceletTex, gItemIconSilverGauntletsTex, + gItemIconGoldenGauntletsTex, gItemIconScaleSilverTex, gItemIconScaleGoldenTex, gItemIconBrokenGiantsKnifeTex, + gItemIconAdultsWalletTex, gItemIconGiantsWalletTex, gItemIconDekuSeedsTex, gItemIconFishingPoleTex, gSongNoteTex, + gSongNoteTex, gSongNoteTex, gSongNoteTex, gSongNoteTex, gSongNoteTex, gSongNoteTex, gSongNoteTex, gSongNoteTex, + gSongNoteTex, gSongNoteTex, gSongNoteTex, gQuestIconMedallionForestTex, gQuestIconMedallionFireTex, + gQuestIconMedallionWaterTex, gQuestIconMedallionSpiritTex, gQuestIconMedallionShadowTex, + gQuestIconMedallionLightTex, gQuestIconKokiriEmeraldTex, gQuestIconGoronRubyTex, gQuestIconZoraSapphireTex, + gQuestIconStoneOfAgonyTex, gQuestIconGerudosCardTex, gQuestIconGoldSkulltulaTex, gQuestIconHeartContainerTex, + gQuestIconHeartPieceTex, gQuestIconDungeonBossKeyTex, gQuestIconDungeonCompassTex, gQuestIconDungeonMapTex, + gQuestIconSmallKeyTex, gQuestIconMagicJarSmallTex, gQuestIconMagicJarBigTex, gHeartPieceIcon1Tex, + gHeartPieceIcon2Tex, gHeartPieceIcon3Tex, gOcarinaBtnIconCUpTex, gOcarinaBtnIconCDownTex, gOcarinaBtnIconCLeftTex, + gOcarinaBtnIconCRightTex, gOcarinaBtnIconATex, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + // CUSTOM + gGliderIconTex, // Glider + gGliderIconTex, // Glider }; // Used to map item IDs to inventory slots @@ -205,7 +109,8 @@ u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) { if (equipment == EQUIP_TYPE_TUNIC) { gSaveContext.equips.equipment |= EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4); // non-vanilla: remove goron and zora tunics from item buttons if assignable tunics is on - if (CVarGetInteger(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 0) && equipValue != EQUIP_VALUE_TUNIC_KOKIRI) { + if (CVarGetInteger(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 0) && + equipValue != EQUIP_VALUE_TUNIC_KOKIRI) { ItemID item = (equipValue == EQUIP_VALUE_TUNIC_GORON ? ITEM_TUNIC_GORON : ITEM_TUNIC_ZORA); for (int i = 1; i < ARRAY_COUNT(gSaveContext.equips.buttonItems); i++) { if (gSaveContext.equips.buttonItems[i] == item) { diff --git a/soh/src/code/z_player_lib.c b/soh/src/code/z_player_lib.c index bf7189616..f79671b70 100644 --- a/soh/src/code/z_player_lib.c +++ b/soh/src/code/z_player_lib.c @@ -102,6 +102,13 @@ u8 sActionModelGroups[] = { PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GERUDO PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_TRUTH PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LENS_OF_TRUTH + // CUSTOM + PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_IA_GLIDER +}; + +// CUSTOM +u8 sActionModelGroupsCustom[] = { + PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_IA_GLIDER }; TextTriggerEntry sTextTriggers[] = { @@ -114,133 +121,53 @@ TextTriggerEntry sTextTriggers[] = { // Used to map model groups to model types for [animation, left hand, right hand, sheath, waist] u8 gPlayerModelTypes[PLAYER_MODELGROUP_MAX][PLAYER_MODELGROUPENTRY_MAX] = { /* PLAYER_MODELGROUP_0 */ - { - PLAYER_ANIMTYPE_2, - PLAYER_MODELTYPE_LH_OPEN, - PLAYER_MODELTYPE_RH_SHIELD, - PLAYER_MODELTYPE_SHEATH_16, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_2, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_SHIELD, PLAYER_MODELTYPE_SHEATH_16, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_CHILD_HYLIAN_SHIELD */ - { - PLAYER_ANIMTYPE_1, - PLAYER_MODELTYPE_LH_SWORD, - PLAYER_MODELTYPE_RH_CLOSED, - PLAYER_MODELTYPE_SHEATH_19, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_1, PLAYER_MODELTYPE_LH_SWORD, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_19, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_SWORD_AND_SHIELD */ - { - PLAYER_ANIMTYPE_1, - PLAYER_MODELTYPE_LH_SWORD, - PLAYER_MODELTYPE_RH_SHIELD, - PLAYER_MODELTYPE_SHEATH_17, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_1, PLAYER_MODELTYPE_LH_SWORD, PLAYER_MODELTYPE_RH_SHIELD, PLAYER_MODELTYPE_SHEATH_17, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_DEFAULT */ - { - PLAYER_ANIMTYPE_0, - PLAYER_MODELTYPE_LH_OPEN, - PLAYER_MODELTYPE_RH_OPEN, - PLAYER_MODELTYPE_SHEATH_18, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_18, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_4 */ - { - PLAYER_ANIMTYPE_0, - PLAYER_MODELTYPE_LH_OPEN, - PLAYER_MODELTYPE_RH_OPEN, - PLAYER_MODELTYPE_SHEATH_18, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_18, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_BGS */ - { - PLAYER_ANIMTYPE_3, - PLAYER_MODELTYPE_LH_BGS, - PLAYER_MODELTYPE_RH_CLOSED, - PLAYER_MODELTYPE_SHEATH_19, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_3, PLAYER_MODELTYPE_LH_BGS, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_19, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_BOW_SLINGSHOT */ - { - PLAYER_ANIMTYPE_4, - PLAYER_MODELTYPE_LH_CLOSED, - PLAYER_MODELTYPE_RH_BOW_SLINGSHOT, - PLAYER_MODELTYPE_SHEATH_18, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_4, PLAYER_MODELTYPE_LH_CLOSED, PLAYER_MODELTYPE_RH_BOW_SLINGSHOT, PLAYER_MODELTYPE_SHEATH_18, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_EXPLOSIVES */ - { - PLAYER_ANIMTYPE_5, - PLAYER_MODELTYPE_LH_OPEN, - PLAYER_MODELTYPE_RH_OPEN, - PLAYER_MODELTYPE_SHEATH_18, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_5, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_18, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_BOOMERANG */ - { - PLAYER_ANIMTYPE_0, - PLAYER_MODELTYPE_LH_BOOMERANG, - PLAYER_MODELTYPE_RH_OPEN, - PLAYER_MODELTYPE_SHEATH_18, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_BOOMERANG, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_18, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_HOOKSHOT */ - { - PLAYER_ANIMTYPE_4, - PLAYER_MODELTYPE_LH_OPEN, - PLAYER_MODELTYPE_RH_HOOKSHOT, - PLAYER_MODELTYPE_SHEATH_18, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_4, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_HOOKSHOT, PLAYER_MODELTYPE_SHEATH_18, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_10 */ - { - PLAYER_ANIMTYPE_3, - PLAYER_MODELTYPE_LH_CLOSED, - PLAYER_MODELTYPE_RH_CLOSED, - PLAYER_MODELTYPE_SHEATH_18, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_3, PLAYER_MODELTYPE_LH_CLOSED, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_18, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_HAMMER */ - { - PLAYER_ANIMTYPE_3, - PLAYER_MODELTYPE_LH_HAMMER, - PLAYER_MODELTYPE_RH_CLOSED, - PLAYER_MODELTYPE_SHEATH_18, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_3, PLAYER_MODELTYPE_LH_HAMMER, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_18, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_OCARINA */ - { - PLAYER_ANIMTYPE_0, - PLAYER_MODELTYPE_LH_OPEN, - PLAYER_MODELTYPE_RH_OCARINA, - PLAYER_MODELTYPE_SHEATH_18, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OCARINA, PLAYER_MODELTYPE_SHEATH_18, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_OOT */ - { - PLAYER_ANIMTYPE_0, - PLAYER_MODELTYPE_LH_OPEN, - PLAYER_MODELTYPE_RH_OOT, - PLAYER_MODELTYPE_SHEATH_18, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OOT, PLAYER_MODELTYPE_SHEATH_18, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_BOTTLE */ - { - PLAYER_ANIMTYPE_0, - PLAYER_MODELTYPE_LH_BOTTLE, - PLAYER_MODELTYPE_RH_OPEN, - PLAYER_MODELTYPE_SHEATH_18, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_BOTTLE, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_18, + PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_SWORD */ - { - PLAYER_ANIMTYPE_0, - PLAYER_MODELTYPE_LH_SWORD, - PLAYER_MODELTYPE_RH_OPEN, - PLAYER_MODELTYPE_SHEATH_19, - PLAYER_MODELTYPE_WAIST - }, + { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_SWORD, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_19, + PLAYER_MODELTYPE_WAIST }, }; Gfx* sPlayerRightHandShieldDLs[PLAYER_SHIELD_MAX * 4] = { @@ -268,23 +195,35 @@ Gfx* sPlayerRightHandShieldDLs[PLAYER_SHIELD_MAX * 4] = { Gfx* sSheathWithSwordDLs[(PLAYER_SHIELD_MAX + 2) * 4] = { // PLAYER_SHIELD_NONE - gLinkAdultMasterSwordAndSheathNearDL, gLinkChildSwordAndSheathNearDL, - gLinkAdultMasterSwordAndSheathFarDL, gLinkChildSwordAndSheathFarDL, + gLinkAdultMasterSwordAndSheathNearDL, + gLinkChildSwordAndSheathNearDL, + gLinkAdultMasterSwordAndSheathFarDL, + gLinkChildSwordAndSheathFarDL, // PLAYER_SHIELD_DEKU - gLinkAdultMasterSwordAndSheathNearDL, gLinkChildDekuShieldSwordAndSheathNearDL, - gLinkAdultMasterSwordAndSheathFarDL, gLinkChildDekuShieldSwordAndSheathFarDL, + gLinkAdultMasterSwordAndSheathNearDL, + gLinkChildDekuShieldSwordAndSheathNearDL, + gLinkAdultMasterSwordAndSheathFarDL, + gLinkChildDekuShieldSwordAndSheathFarDL, // PLAYER_SHIELD_HYLIAN - gLinkAdultHylianShieldSwordAndSheathNearDL, gLinkChildHylianShieldSwordAndSheathNearDL, - gLinkAdultHylianShieldSwordAndSheathFarDL, gLinkChildHylianShieldSwordAndSheathFarDL, + gLinkAdultHylianShieldSwordAndSheathNearDL, + gLinkChildHylianShieldSwordAndSheathNearDL, + gLinkAdultHylianShieldSwordAndSheathFarDL, + gLinkChildHylianShieldSwordAndSheathFarDL, // PLAYER_SHIELD_MIRROR - gLinkAdultMirrorShieldSwordAndSheathNearDL, gLinkChildSwordAndSheathNearDL, - gLinkAdultMirrorShieldSwordAndSheathFarDL, gLinkChildSwordAndSheathFarDL, + gLinkAdultMirrorShieldSwordAndSheathNearDL, + gLinkChildSwordAndSheathNearDL, + gLinkAdultMirrorShieldSwordAndSheathFarDL, + gLinkChildSwordAndSheathFarDL, // PLAYER_SHIELD_NONE (child, no sword) - NULL, NULL, - NULL, NULL, + NULL, + NULL, + NULL, + NULL, // PLAYER_SHIELD_DEKU (child, no sword) - NULL, gLinkChildDekuShieldWithMatrixDL, - NULL, gLinkChildDekuShieldWithMatrixDL, + NULL, + gLinkChildDekuShieldWithMatrixDL, + NULL, + gLinkChildDekuShieldWithMatrixDL, }; Gfx* sSheathWithoutSwordDLs[(PLAYER_SHIELD_MAX + 2) * 4] = { @@ -322,11 +261,15 @@ Gfx* sSheathWithoutSwordDLs[(PLAYER_SHIELD_MAX + 2) * 4] = { Gfx* gPlayerLeftHandBgsDLs[] = { // Biggoron Sword - gLinkAdultLeftHandHoldingBgsNearDL, gLinkChildLeftHandHoldingMasterSwordDL, - gLinkAdultLeftHandHoldingBgsFarDL, gLinkChildLeftHandHoldingMasterSwordDL, + gLinkAdultLeftHandHoldingBgsNearDL, + gLinkChildLeftHandHoldingMasterSwordDL, + gLinkAdultLeftHandHoldingBgsFarDL, + gLinkChildLeftHandHoldingMasterSwordDL, // Broken Giant's Knife - gLinkAdultHandHoldingBrokenGiantsKnifeDL, gLinkChildLeftHandHoldingMasterSwordDL, - gLinkAdultHandHoldingBrokenGiantsKnifeFarDL, gLinkChildLeftHandHoldingMasterSwordDL, + gLinkAdultHandHoldingBrokenGiantsKnifeDL, + gLinkChildLeftHandHoldingMasterSwordDL, + gLinkAdultHandHoldingBrokenGiantsKnifeFarDL, + gLinkChildLeftHandHoldingMasterSwordDL, }; Gfx* gPlayerLeftHandOpenDLs[] = { @@ -565,8 +508,9 @@ uint8_t Player_IsCustomLinkModel() { } s32 Player_InBlockingCsMode(PlayState* play, Player* this) { - return (this->stateFlags1 & (PLAYER_STATE1_DEAD | PLAYER_STATE1_IN_CUTSCENE)) || (this->csAction != 0) || (play->transitionTrigger == TRANS_TRIGGER_START) || - (this->stateFlags1 & PLAYER_STATE1_LOADING) || (this->stateFlags3 & PLAYER_STATE3_FLYING_WITH_HOOKSHOT) || + return (this->stateFlags1 & (PLAYER_STATE1_DEAD | PLAYER_STATE1_IN_CUTSCENE)) || (this->csAction != 0) || + (play->transitionTrigger == TRANS_TRIGGER_START) || (this->stateFlags1 & PLAYER_STATE1_LOADING) || + (this->stateFlags3 & PLAYER_STATE3_FLYING_WITH_HOOKSHOT) || ((gSaveContext.magicState != MAGIC_STATE_IDLE) && (Player_ActionToMagicSpell(this, this->itemAction) >= 0)); } @@ -606,14 +550,17 @@ void Player_SetModelsForHoldingShield(Player* this) { if ((this->stateFlags1 & PLAYER_STATE1_SHIELDING) && ((this->itemAction < 0) || (this->itemAction == this->heldItemAction))) { if ((CVarGetInteger(CVAR_CHEAT("ShieldTwoHanded"), 0) && (this->heldItemAction != PLAYER_IA_DEKU_STICK) || - !Player_HoldsTwoHandedWeapon(this)) && !Player_IsChildWithHylianShield(this)) { + !Player_HoldsTwoHandedWeapon(this)) && + !Player_IsChildWithHylianShield(this)) { this->rightHandType = PLAYER_MODELTYPE_RH_SHIELD; - if (LINK_IS_CHILD && (CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) && (this->currentShield == PLAYER_SHIELD_MIRROR)) { + if (LINK_IS_CHILD && (CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) && + (this->currentShield == PLAYER_SHIELD_MIRROR)) { this->rightHandDLists = &sPlayerDListGroups[PLAYER_MODELTYPE_RH_SHIELD][0]; - } else if (LINK_IS_ADULT && (CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) && (this->currentShield == PLAYER_SHIELD_DEKU)) { - this->rightHandDLists = &sPlayerDListGroups[PLAYER_MODELTYPE_RH_SHIELD][1]; - } else { - this->rightHandDLists = &sPlayerDListGroups[PLAYER_MODELTYPE_RH_SHIELD][gSaveContext.linkAge]; + } else if (LINK_IS_ADULT && (CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) && + (this->currentShield == PLAYER_SHIELD_DEKU)) { + this->rightHandDLists = &sPlayerDListGroups[PLAYER_MODELTYPE_RH_SHIELD][1]; + } else { + this->rightHandDLists = &sPlayerDListGroups[PLAYER_MODELTYPE_RH_SHIELD][gSaveContext.linkAge]; } if (this->sheathType == PLAYER_MODELTYPE_SHEATH_18) { this->sheathType = PLAYER_MODELTYPE_SHEATH_16; @@ -623,10 +570,10 @@ void Player_SetModelsForHoldingShield(Player* this) { this->sheathDLists = &sPlayerDListGroups[this->sheathType][gSaveContext.linkAge]; if ((CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) && LINK_IS_CHILD && gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI) { - this->sheathDLists = &sPlayerDListGroups[this->sheathType][0]; + this->sheathDLists = &sPlayerDListGroups[this->sheathType][0]; } else if ((CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) && LINK_IS_ADULT && - gSaveContext.equips.buttonItems[0] == ITEM_SWORD_KOKIRI) { - this->sheathDLists = &sPlayerDListGroups[this->sheathType][1]; + gSaveContext.equips.buttonItems[0] == ITEM_SWORD_KOKIRI) { + this->sheathDLists = &sPlayerDListGroups[this->sheathType][1]; } this->modelAnimType = PLAYER_ANIMTYPE_2; this->itemAction = -1; @@ -642,13 +589,14 @@ void Player_SetModels(Player* this, s32 modelGroup) { if (CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) { if (LINK_IS_CHILD && (this->leftHandType == PLAYER_MODELTYPE_LH_HAMMER || - ((this->leftHandType == PLAYER_MODELTYPE_LH_SWORD || this->leftHandType == PLAYER_MODELTYPE_LH_BGS) && - (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)))) { + ((this->leftHandType == PLAYER_MODELTYPE_LH_SWORD || this->leftHandType == PLAYER_MODELTYPE_LH_BGS) && + (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)))) { this->leftHandDLists = &sPlayerDListGroups[this->leftHandType][0]; } if (LINK_IS_ADULT && (this->leftHandType == PLAYER_MODELTYPE_LH_BOOMERANG || - (this->leftHandType == PLAYER_MODELTYPE_LH_SWORD && gSaveContext.equips.buttonItems[0] == ITEM_SWORD_KOKIRI))) { + (this->leftHandType == PLAYER_MODELTYPE_LH_SWORD && + gSaveContext.equips.buttonItems[0] == ITEM_SWORD_KOKIRI))) { this->leftHandDLists = &sPlayerDListGroups[this->leftHandType][1]; } } @@ -663,7 +611,7 @@ void Player_SetModels(Player* this, s32 modelGroup) { if (CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) { if (LINK_IS_CHILD && (this->rightHandType == PLAYER_MODELTYPE_RH_HOOKSHOT || - (this->rightHandType == PLAYER_MODELTYPE_RH_SHIELD && this->currentShield == PLAYER_SHIELD_MIRROR))) { + (this->rightHandType == PLAYER_MODELTYPE_RH_SHIELD && this->currentShield == PLAYER_SHIELD_MIRROR))) { this->rightHandDLists = &sPlayerDListGroups[this->rightHandType][0]; } if (LINK_IS_ADULT && @@ -671,7 +619,9 @@ void Player_SetModels(Player* this, s32 modelGroup) { this->rightHandDLists = &sPlayerDListGroups[this->rightHandType][1]; } } - if ((CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) && this->rightHandType == 11) { // If holding Bow/Slingshot + if ((CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || + CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) && + this->rightHandType == 11) { // If holding Bow/Slingshot this->rightHandDLists = &sPlayerDListGroups[this->rightHandType][Player_HoldsSlingshot(this)]; } @@ -680,21 +630,28 @@ void Player_SetModels(Player* this, s32 modelGroup) { this->sheathDLists = &sPlayerDListGroups[this->sheathType][gSaveContext.linkAge]; if (CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) { - if (LINK_IS_CHILD && (this->currentShield == PLAYER_SHIELD_HYLIAN && ((gSaveContext.equips.buttonItems[0] == ITEM_SWORD_MASTER) || - (gSaveContext.equips.buttonItems[0] == ITEM_SWORD_BGS)) || (this->currentShield == PLAYER_SHIELD_MIRROR) && (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI))) { + if (LINK_IS_CHILD && (this->currentShield == PLAYER_SHIELD_HYLIAN && + ((gSaveContext.equips.buttonItems[0] == ITEM_SWORD_MASTER) || + (gSaveContext.equips.buttonItems[0] == ITEM_SWORD_BGS)) || + (this->currentShield == PLAYER_SHIELD_MIRROR) && + (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI))) { this->sheathDLists = &sPlayerDListGroups[this->sheathType][0]; - } else if (LINK_IS_CHILD && this->currentShield == PLAYER_SHIELD_MIRROR && gSaveContext.equips.buttonItems[0] == ITEM_SWORD_KOKIRI && - this->sheathType == PLAYER_MODELTYPE_SHEATH_18) { + } else if (LINK_IS_CHILD && this->currentShield == PLAYER_SHIELD_MIRROR && + gSaveContext.equips.buttonItems[0] == ITEM_SWORD_KOKIRI && + this->sheathType == PLAYER_MODELTYPE_SHEATH_18) { this->sheathDLists = &sPlayerDListGroups[this->sheathType][0]; - } else if (LINK_IS_ADULT && (this->currentShield == PLAYER_SHIELD_DEKU && gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER) || - (gSaveContext.equips.buttonItems[0] == ITEM_SWORD_MASTER && this->sheathType == PLAYER_MODELTYPE_SHEATH_18 && this->currentShield == PLAYER_SHIELD_DEKU)) { + } else if (LINK_IS_ADULT && (this->currentShield == PLAYER_SHIELD_DEKU && + gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER) || + (gSaveContext.equips.buttonItems[0] == ITEM_SWORD_MASTER && + this->sheathType == PLAYER_MODELTYPE_SHEATH_18 && this->currentShield == PLAYER_SHIELD_DEKU)) { this->sheathDLists = &sPlayerDListGroups[this->sheathType][1]; - } else if (LINK_IS_CHILD && this->sheathType == PLAYER_MODELTYPE_SHEATH_17 && - ((gSaveContext.equips.buttonItems[0] == ITEM_SWORD_MASTER) || (gSaveContext.equips.buttonItems[0] == ITEM_SWORD_BGS))) { - this->sheathDLists = &sPlayerDListGroups[this->sheathType][0]; - } + } else if (LINK_IS_CHILD && this->sheathType == PLAYER_MODELTYPE_SHEATH_17 && + ((gSaveContext.equips.buttonItems[0] == ITEM_SWORD_MASTER) || + (gSaveContext.equips.buttonItems[0] == ITEM_SWORD_BGS))) { + this->sheathDLists = &sPlayerDListGroups[this->sheathType][0]; + } } - + // Waist this->waistDLists = &sPlayerDListGroups[gPlayerModelTypes[modelGroup][4]][gSaveContext.linkAge]; @@ -756,10 +713,15 @@ void Player_ReleaseLockOn(Player* this) { * TODO: Learn more about this and give a name to PLAYER_STATE1_19 */ void Player_ClearZTargeting(Player* this) { - if ((this->actor.bgCheckFlags & 1) || (this->stateFlags1 & (PLAYER_STATE1_CLIMBING_LADDER | PLAYER_STATE1_ON_HORSE | PLAYER_STATE1_IN_WATER)) || - (!(this->stateFlags1 & (PLAYER_STATE1_JUMPING | PLAYER_STATE1_FREEFALL)) && ((this->actor.world.pos.y - this->actor.floorHeight) < 100.0f))) { - this->stateFlags1 &= ~(PLAYER_STATE1_Z_TARGETING | PLAYER_STATE1_FRIENDLY_ACTOR_FOCUS | PLAYER_STATE1_PARALLEL | PLAYER_STATE1_JUMPING | PLAYER_STATE1_FREEFALL | PLAYER_STATE1_LOCK_ON_FORCED_TO_RELEASE); - } else if (!(this->stateFlags1 & (PLAYER_STATE1_JUMPING | PLAYER_STATE1_FREEFALL | PLAYER_STATE1_CLIMBING_LADDER))) { + if ((this->actor.bgCheckFlags & 1) || + (this->stateFlags1 & (PLAYER_STATE1_CLIMBING_LADDER | PLAYER_STATE1_ON_HORSE | PLAYER_STATE1_IN_WATER)) || + (!(this->stateFlags1 & (PLAYER_STATE1_JUMPING | PLAYER_STATE1_FREEFALL)) && + ((this->actor.world.pos.y - this->actor.floorHeight) < 100.0f))) { + this->stateFlags1 &= + ~(PLAYER_STATE1_Z_TARGETING | PLAYER_STATE1_FRIENDLY_ACTOR_FOCUS | PLAYER_STATE1_PARALLEL | + PLAYER_STATE1_JUMPING | PLAYER_STATE1_FREEFALL | PLAYER_STATE1_LOCK_ON_FORCED_TO_RELEASE); + } else if (!(this->stateFlags1 & + (PLAYER_STATE1_JUMPING | PLAYER_STATE1_FREEFALL | PLAYER_STATE1_CLIMBING_LADDER))) { this->stateFlags1 |= PLAYER_STATE1_FREEFALL; } @@ -818,7 +780,8 @@ s32 Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 y s32 Player_GetStrength(void) { s32 strengthUpgrade = CUR_UPG_VALUE(UPG_STRENGTH); - if (CVarGetInteger(CVAR_ENHANCEMENT("ToggleStrength"), 0) && CVarGetInteger(CVAR_ENHANCEMENT("StrengthDisabled"), 0)) { + if (CVarGetInteger(CVAR_ENHANCEMENT("ToggleStrength"), 0) && + CVarGetInteger(CVAR_ENHANCEMENT("StrengthDisabled"), 0)) { return PLAYER_STR_NONE; } @@ -872,7 +835,7 @@ s32 Player_HoldsHookshot(Player* this) { } s32 Player_HoldsBow(Player* this) { - switch(this->heldItemAction){ + switch (this->heldItemAction) { case PLAYER_IA_BOW: case PLAYER_IA_BOW_FIRE: case PLAYER_IA_BOW_ICE: @@ -992,9 +955,12 @@ s32 Player_GetEnvironmentalHazard(PlayState* play) { triggerEntry = &sTextTriggers[var]; if ((triggerEntry->flag != 0) && !(gSaveContext.textTriggerFlags & triggerEntry->flag) && - (((var == 0) && (this->currentTunic != PLAYER_TUNIC_GORON && CVarGetInteger(CVAR_CHEAT("SuperTunic"), 0) == 0 && CVarGetInteger(CVAR_ENHANCEMENT("DisableTunicWarningText"), 0) == 0)) || + (((var == 0) && + (this->currentTunic != PLAYER_TUNIC_GORON && CVarGetInteger(CVAR_CHEAT("SuperTunic"), 0) == 0 && + CVarGetInteger(CVAR_ENHANCEMENT("DisableTunicWarningText"), 0) == 0)) || (((var == 1) || (var == 3)) && (this->currentBoots == PLAYER_BOOTS_IRON) && - (this->currentTunic != PLAYER_TUNIC_ZORA && CVarGetInteger(CVAR_CHEAT("SuperTunic"), 0) == 0 && CVarGetInteger(CVAR_ENHANCEMENT("DisableTunicWarningText"), 0) == 0)))) { + (this->currentTunic != PLAYER_TUNIC_ZORA && CVarGetInteger(CVAR_CHEAT("SuperTunic"), 0) == 0 && + CVarGetInteger(CVAR_ENHANCEMENT("DisableTunicWarningText"), 0) == 0)))) { Message_StartTextbox(play, triggerEntry->textId, NULL); gSaveContext.textTriggerFlags |= triggerEntry->flag; } @@ -1016,7 +982,7 @@ u8 sEyeMouthIndexes[][2] = { */ #if defined(MODDING) || defined(_MSC_VER) || defined(__GNUC__) -//TODO: Formatting +// TODO: Formatting void* sEyeTextures[2][8] = { { gLinkAdultEyesOpenTex, gLinkAdultEyesHalfTex, gLinkAdultEyesClosedfTex, gLinkAdultEyesRollLeftTex, gLinkAdultEyesRollRightTex, gLinkAdultEyesShockTex, gLinkAdultEyesUnk1Tex, gLinkAdultEyesUnk2Tex }, @@ -1067,13 +1033,12 @@ Color_RGB8 sGauntletColors[] = { }; Gfx* sBootDListGroups[][2] = { - { gLinkAdultLeftIronBootDL, gLinkAdultRightIronBootDL }, // PLAYER_BOOTS_IRON - { gLinkAdultLeftHoverBootDL, gLinkAdultRightHoverBootDL }, // PLAYER_BOOTS_HOVER + { gLinkAdultLeftIronBootDL, gLinkAdultRightIronBootDL }, // PLAYER_BOOTS_IRON + { gLinkAdultLeftHoverBootDL, gLinkAdultRightHoverBootDL }, // PLAYER_BOOTS_HOVER }; -void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, s32 lod, s32 tunic, - s32 boots, s32 face, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, - void* data) { +void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, s32 lod, s32 tunic, s32 boots, + s32 face, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, void* data) { Color_RGB8* color; s32 eyeIndex = (jointTable[22].x & 0xF) - 1; s32 mouthIndex = (jointTable[22].x >> 4) - 1; @@ -1129,7 +1094,8 @@ void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dL SkelAnime_DrawFlexLod(play, skeleton, jointTable, dListCount, overrideLimbDraw, postLimbDraw, data, lod); - if (((CVarGetInteger(CVAR_ENHANCEMENT("FirstPersonGauntlets"), 0) && LINK_IS_ADULT) || (overrideLimbDraw != Player_OverrideLimbDrawGameplayFirstPerson)) && + if (((CVarGetInteger(CVAR_ENHANCEMENT("FirstPersonGauntlets"), 0) && LINK_IS_ADULT) || + (overrideLimbDraw != Player_OverrideLimbDrawGameplayFirstPerson)) && (overrideLimbDraw != Player_OverrideLimbDrawGameplayCrawling) && (gSaveContext.gameMode != GAMEMODE_END_CREDITS)) { if (LINK_IS_ADULT) { @@ -1139,21 +1105,27 @@ void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dL gDPPipeSync(POLY_OPA_DISP++); color = &sGauntletColors[strengthUpgrade - 2]; - if (strengthUpgrade == PLAYER_STR_SILVER_G && CVarGetInteger(CVAR_COSMETIC("Gloves.SilverGauntlets.Changed"), 0)) { - sTemp = CVarGetColor24(CVAR_COSMETIC("Gloves.SilverGauntlets.Value"), sGauntletColors[PLAYER_STR_SILVER_G - 2]); + if (strengthUpgrade == PLAYER_STR_SILVER_G && + CVarGetInteger(CVAR_COSMETIC("Gloves.SilverGauntlets.Changed"), 0)) { + sTemp = CVarGetColor24(CVAR_COSMETIC("Gloves.SilverGauntlets.Value"), + sGauntletColors[PLAYER_STR_SILVER_G - 2]); color = &sTemp; - } else if (strengthUpgrade == PLAYER_STR_GOLD_G && CVarGetInteger(CVAR_COSMETIC("Gloves.GoldenGauntlets.Changed"), 0)) { - sTemp = CVarGetColor24(CVAR_COSMETIC("Gloves.GoldenGauntlets.Value"), sGauntletColors[PLAYER_STR_GOLD_G - 2]); + } else if (strengthUpgrade == PLAYER_STR_GOLD_G && + CVarGetInteger(CVAR_COSMETIC("Gloves.GoldenGauntlets.Changed"), 0)) { + sTemp = CVarGetColor24(CVAR_COSMETIC("Gloves.GoldenGauntlets.Value"), + sGauntletColors[PLAYER_STR_GOLD_G - 2]); color = &sTemp; } gDPSetEnvColor(POLY_OPA_DISP++, color->r, color->g, color->b, 0); gSPDisplayList(POLY_OPA_DISP++, gLinkAdultLeftGauntletPlate1DL); gSPDisplayList(POLY_OPA_DISP++, gLinkAdultRightGauntletPlate1DL); - gSPDisplayList(POLY_OPA_DISP++, - (sLeftHandType == PLAYER_MODELTYPE_LH_OPEN) ? gLinkAdultLeftGauntletPlate2DL : gLinkAdultLeftGauntletPlate3DL); - gSPDisplayList(POLY_OPA_DISP++, - (sRightHandType == PLAYER_MODELTYPE_RH_OPEN) ? gLinkAdultRightGauntletPlate2DL : gLinkAdultRightGauntletPlate3DL); + gSPDisplayList(POLY_OPA_DISP++, (sLeftHandType == PLAYER_MODELTYPE_LH_OPEN) + ? gLinkAdultLeftGauntletPlate2DL + : gLinkAdultLeftGauntletPlate3DL); + gSPDisplayList(POLY_OPA_DISP++, (sRightHandType == PLAYER_MODELTYPE_RH_OPEN) + ? gLinkAdultRightGauntletPlate2DL + : gLinkAdultRightGauntletPlate3DL); } if (boots != 0) { @@ -1186,8 +1158,8 @@ f32 D_80126068[] = { 5.0f, 3.0f }; Vec3f D_80126070 = { 0.0f, -300.0f, 0.0f }; -void func_8008F87C(PlayState* play, Player* this, SkelAnime* skelAnime, Vec3f* pos, Vec3s* rot, - s32 thighLimbIndex, s32 shinLimbIndex, s32 footLimbIndex) { +void func_8008F87C(PlayState* play, Player* this, SkelAnime* skelAnime, Vec3f* pos, Vec3s* rot, s32 thighLimbIndex, + s32 shinLimbIndex, s32 footLimbIndex) { Vec3f spA4; Vec3f sp98; Vec3f footprintPos; @@ -1279,18 +1251,21 @@ void func_8008F87C(PlayState* play, Player* this, SkelAnime* skelAnime, Vec3f* p } } -s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) { +s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + void* thisx) { Player* this = (Player*)thisx; - - if (CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0) && CVarGetInteger(CVAR_ENHANCEMENT("ScaleAdultEquipmentAsChild"), 0) && LINK_IS_CHILD) { + + if (CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0) && + CVarGetInteger(CVAR_ENHANCEMENT("ScaleAdultEquipmentAsChild"), 0) && LINK_IS_CHILD) { if (limbIndex == PLAYER_LIMB_L_HAND) { - if ((gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI && sLeftHandType == PLAYER_MODELTYPE_LH_SWORD) || + if ((gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI && + sLeftHandType == PLAYER_MODELTYPE_LH_SWORD) || (sLeftHandType == PLAYER_MODELTYPE_LH_BGS) || (sLeftHandType == PLAYER_MODELTYPE_LH_HAMMER)) { Matrix_Scale(0.8, 0.8, 0.8, MTXMODE_APPLY); } } if (limbIndex == PLAYER_LIMB_R_HAND) { - if ((this->currentShield == PLAYER_SHIELD_MIRROR && sRightHandType == PLAYER_MODELTYPE_RH_SHIELD) || + if ((this->currentShield == PLAYER_SHIELD_MIRROR && sRightHandType == PLAYER_MODELTYPE_RH_SHIELD) || sRightHandType == PLAYER_MODELTYPE_RH_HOOKSHOT || (sRightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT && Player_HoldsBow(this))) { Matrix_Scale(0.8, 0.8, 0.8, MTXMODE_APPLY); @@ -1307,10 +1282,8 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** Matrix_Translate(218, -100, 62, MTXMODE_APPLY); Matrix_Scale(0.8, 0.8, 0.8, MTXMODE_APPLY); } - if ((this->currentShield == PLAYER_SHIELD_DEKU && - gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI && - (this->sheathType == PLAYER_MODELTYPE_SHEATH_16 || - this->sheathType == PLAYER_MODELTYPE_SHEATH_17))) { + if ((this->currentShield == PLAYER_SHIELD_DEKU && gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI && + (this->sheathType == PLAYER_MODELTYPE_SHEATH_16 || this->sheathType == PLAYER_MODELTYPE_SHEATH_17))) { Matrix_Translate(218, -100, 62, MTXMODE_APPLY); Matrix_Scale(0.8, 0.8, 0.8, MTXMODE_APPLY); } @@ -1354,7 +1327,8 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** if (scale > 1.2f) { Matrix_Translate(-((LINK_IS_ADULT ? 320.0f : 200.0f) * scale), 0.0f, 0.0f, MTXMODE_APPLY); } else if (scale < 1.0f) { - Matrix_Translate((LINK_IS_ADULT ? 3600.0f : 2900.0f) * ABS(scale - 1.0f), 0.0f, 0.0f, MTXMODE_APPLY); + Matrix_Translate((LINK_IS_ADULT ? 3600.0f : 2900.0f) * ABS(scale - 1.0f), 0.0f, 0.0f, + MTXMODE_APPLY); } } rot->x += this->headLimbRot.z; @@ -1395,20 +1369,22 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** return false; } -s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) { +s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + void* thisx) { Player* this = (Player*)thisx; - if (!Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, thisx)) - { + if (!Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, thisx)) { if (limbIndex == PLAYER_LIMB_L_HAND) { Gfx** dLists = this->leftHandDLists; if ((sLeftHandType == PLAYER_MODELTYPE_LH_BGS) && (gSaveContext.swordHealth <= 0.0f)) { dLists += 4; - } else if ((sLeftHandType == PLAYER_MODELTYPE_LH_BOOMERANG) && (this->stateFlags1 & PLAYER_STATE1_BOOMERANG_THROWN)) { + } else if ((sLeftHandType == PLAYER_MODELTYPE_LH_BOOMERANG) && + (this->stateFlags1 & PLAYER_STATE1_BOOMERANG_THROWN)) { dLists = &gPlayerLeftHandOpenDLs[gSaveContext.linkAge]; sLeftHandType = PLAYER_MODELTYPE_LH_OPEN; - } else if ((this->leftHandType == PLAYER_MODELTYPE_LH_OPEN) && (this->actor.speedXZ > 2.0f) && !(this->stateFlags1 & PLAYER_STATE1_IN_WATER)) { + } else if ((this->leftHandType == PLAYER_MODELTYPE_LH_OPEN) && (this->actor.speedXZ > 2.0f) && + !(this->stateFlags1 & PLAYER_STATE1_IN_WATER)) { dLists = &gPlayerLeftHandClosedDLs[gSaveContext.linkAge]; sLeftHandType = PLAYER_MODELTYPE_LH_CLOSED; } @@ -1419,7 +1395,8 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx** if (sRightHandType == PLAYER_MODELTYPE_RH_SHIELD) { dLists += this->currentShield * 4; - } else if ((this->rightHandType == PLAYER_MODELTYPE_RH_OPEN) && (this->actor.speedXZ > 2.0f) && !(this->stateFlags1 & PLAYER_STATE1_IN_WATER)) { + } else if ((this->rightHandType == PLAYER_MODELTYPE_RH_OPEN) && (this->actor.speedXZ > 2.0f) && + !(this->stateFlags1 & PLAYER_STATE1_IN_WATER)) { dLists = &sPlayerRightHandClosedDLs[gSaveContext.linkAge]; sRightHandType = PLAYER_MODELTYPE_RH_CLOSED; } @@ -1434,9 +1411,14 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx** (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)) { dLists += PLAYER_SHIELD_MAX * 4; } - } else if (!CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0) || (CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0) && - ((gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER && gSaveContext.equips.buttonItems[0] != ITEM_SWORD_BGS) && this->currentShield == PLAYER_SHIELD_DEKU))) { - if (!LINK_IS_ADULT && ((this->sheathType == PLAYER_MODELTYPE_SHEATH_16) || (this->sheathType == PLAYER_MODELTYPE_SHEATH_17)) && + } else if (!CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0) || + (CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0) && + ((gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER && + gSaveContext.equips.buttonItems[0] != ITEM_SWORD_BGS) && + this->currentShield == PLAYER_SHIELD_DEKU))) { + if (!LINK_IS_ADULT && + ((this->sheathType == PLAYER_MODELTYPE_SHEATH_16) || + (this->sheathType == PLAYER_MODELTYPE_SHEATH_17)) && (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)) { dLists = &sSheathWithSwordDLs[PLAYER_SHIELD_MAX * 4]; } @@ -1448,9 +1430,8 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx** *dList = NULL; } - } else if (limbIndex == PLAYER_LIMB_WAIST) { - + if (!Player_IsCustomLinkModel()) { *dList = ResourceMgr_LoadGfxByName( this->waistDLists[sDListsLodOffset]); // NOTE: This needs to be disabled when using custom @@ -1467,7 +1448,8 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx** return false; } -s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) { +s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + void* thisx) { Player* this = (Player*)thisx; if (!Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, thisx)) { @@ -1477,7 +1459,9 @@ s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, G *dList = sFirstPersonLeftForearmDLs[gSaveContext.linkAge]; } else if (limbIndex == PLAYER_LIMB_L_HAND) { s32 handOutDlIndex = gSaveContext.linkAge; - if ((CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) && LINK_IS_ADULT && Player_HoldsSlingshot(this)) { + if ((CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || + CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) && + LINK_IS_ADULT && Player_HoldsSlingshot(this)) { handOutDlIndex = 1; } *dList = sFirstPersonLeftHandDLs[handOutDlIndex]; @@ -1487,7 +1471,8 @@ s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, G *dList = sFirstPersonForearmDLs[gSaveContext.linkAge]; } else if (limbIndex == PLAYER_LIMB_R_HAND) { s32 firstPersonWeaponIndex = gSaveContext.linkAge; - if (CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) { + if (CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || + CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) { if (Player_HoldsBow(this)) { firstPersonWeaponIndex = 0; } else if (Player_HoldsSlingshot(this)) { @@ -1504,7 +1489,8 @@ s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, G return false; } -s32 Player_OverrideLimbDrawGameplayCrawling(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) { +s32 Player_OverrideLimbDrawGameplayCrawling(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + void* thisx) { if (!Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, thisx)) { *dList = NULL; } @@ -1512,8 +1498,7 @@ s32 Player_OverrideLimbDrawGameplayCrawling(PlayState* play, s32 limbIndex, Gfx* return false; } -u8 func_80090480(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* newTip, - Vec3f* newBase) { +u8 func_80090480(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* newTip, Vec3f* newBase) { if (weaponInfo->active == 0) { if (collider != NULL) { Collider_ResetQuadAT(play, &collider->base); @@ -1588,7 +1573,8 @@ void func_800906D4(PlayState* play, Player* this, Vec3f* newTipPos) { &this->meleeWeaponInfo[0].base); } - if ((this->meleeWeaponState > 0) && ((this->meleeWeaponAnimation < 0x18) || (this->stateFlags2 & PLAYER_STATE2_SPIN_ATTACKING))) { + if ((this->meleeWeaponState > 0) && + ((this->meleeWeaponAnimation < 0x18) || (this->stateFlags2 & PLAYER_STATE2_SPIN_ATTACKING))) { func_80090480(play, &this->meleeWeaponQuads[0], &this->meleeWeaponInfo[1], &newTipPos[1], &newBasePos[1]); func_80090480(play, &this->meleeWeaponQuads[1], &this->meleeWeaponInfo[2], &newTipPos[2], &newBasePos[2]); } @@ -1670,7 +1656,8 @@ void Player_DrawGetItemImpl(PlayState* play, Player* this, Vec3f* refPos, s32 dr } void Player_DrawGetItem(PlayState* play, Player* this) { - //if (!this->giObjectLoading || !osRecvMesg(&this->giObjectLoadQueue, NULL, OS_MESG_NOBLOCK)) // OTRTODO: Do something about osRecvMesg here... + // if (!this->giObjectLoading || !osRecvMesg(&this->giObjectLoadQueue, NULL, OS_MESG_NOBLOCK)) // OTRTODO: Do + // something about osRecvMesg here... { this->giObjectLoading = false; Player_DrawGetItemImpl(play, this, &sGetItemRefPos, ABS(this->unk_862)); @@ -1725,7 +1712,8 @@ void Player_DrawHookshotReticle(PlayState* play, Player* this, f32 hookshotRange gSPTexture(OVERLAY_DISP++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gDPLoadTextureBlock(OVERLAY_DISP++, gLinkAdultHookshotReticleTex, G_IM_FMT_I, G_IM_SIZ_8b, 64, 64, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 6, 6, G_TX_NOLOD, G_TX_NOLOD); - if (SurfaceType_IsHookshotSurface(&play->colCtx, colPoly, bgId) && CVarGetInteger(CVAR_ENHANCEMENT("HookshotableReticle"), false)) { + if (SurfaceType_IsHookshotSurface(&play->colCtx, colPoly, bgId) && + CVarGetInteger(CVAR_ENHANCEMENT("HookshotableReticle"), false)) { const Color_RGBA8 defaultColor = { .r = 0, .g = 255, .b = 0, .a = 255 }; const Color_RGBA8 color = CVarGetColor(CVAR_COSMETIC("HookshotReticle.Target.Value"), defaultColor); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, color.r, color.g, color.b, color.a); @@ -1748,7 +1736,8 @@ f32 sMeleeWeaponLengths[] = { }; f32 sSwordTypes[] = { - TRAIL_TYPE_REST, TRAIL_TYPE_MASTER_SWORD, TRAIL_TYPE_KOKIRI_SWORD, TRAIL_TYPE_BIGGORON_SWORD, TRAIL_TYPE_REST, TRAIL_TYPE_HAMMER, + TRAIL_TYPE_REST, TRAIL_TYPE_MASTER_SWORD, TRAIL_TYPE_KOKIRI_SWORD, + TRAIL_TYPE_BIGGORON_SWORD, TRAIL_TYPE_REST, TRAIL_TYPE_HAMMER, }; Gfx* sBottleDLists[] = { gLinkAdultBottleDL, gLinkChildBottleDL }; @@ -1762,7 +1751,7 @@ Color_RGB8 sBottleColors[] = { Vec3f sLeftHandArrowVec3 = { 398.0f, 1419.0f, 244.0f }; BowStringData sBowStringData[] = { - { gLinkAdultBowStringDL, { 0.0f, -360.4f, 0.0f } }, // bow + { gLinkAdultBowStringDL, { 0.0f, -360.4f, 0.0f } }, // bow { gLinkChildSlingshotStringDL, { 606.0f, 236.0f, 0.0f } }, // slingshot }; @@ -1832,8 +1821,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve Matrix_RotateZYX(-0x8000, 0, 0x4000, MTXMODE_APPLY); Matrix_Scale(1.0f, this->unk_85C, 1.0f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gLinkChildLinkDekuStickDL); CLOSE_DISPS(play->state.gfxCtx); @@ -1844,7 +1832,8 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve D_80126080.x = 1500.0f; } else { D_80126080.x = sMeleeWeaponLengths[Player_GetMeleeWeaponHeld(this)]; - EffectBlure_ChangeType(Effect_GetByIndex(this->meleeWeaponEffectIndex), sSwordTypes[Player_GetMeleeWeaponHeld(this)]); + EffectBlure_ChangeType(Effect_GetByIndex(this->meleeWeaponEffectIndex), + sSwordTypes[Player_GetMeleeWeaponHeld(this)]); } func_80090A28(this, spE4); @@ -1854,8 +1843,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve OPEN_DISPS(play->state.gfxCtx); - gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetEnvColor(POLY_XLU_DISP++, bottleColor->r, bottleColor->g, bottleColor->b, 0); gSPDisplayList(POLY_XLU_DISP++, sBottleDLists[(gSaveContext.linkAge)]); @@ -1892,9 +1880,11 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve if (this->rightHandType == PLAYER_MODELTYPE_RH_FF) { Matrix_Get(&this->shieldMf); - } else if ((this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT) || (this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT_2)) { + } else if ((this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT) || + (this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT_2)) { s32 stringModelToUse = gSaveContext.linkAge; - if (CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) { + if (CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || + CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) { stringModelToUse = Player_HoldsSlingshot(this); } BowStringData* stringData = &sBowStringData[stringModelToUse]; @@ -1930,8 +1920,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve Matrix_RotateZ(this->unk_858 * -0.2f, MTXMODE_APPLY); } - gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, stringData->dList); Matrix_Pop(); @@ -1943,8 +1932,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve } if (this->actor.scale.y >= 0.0f) { - if ((this->heldItemAction == PLAYER_IA_HOOKSHOT) || - (this->heldItemAction == PLAYER_IA_LONGSHOT)) { + if ((this->heldItemAction == PLAYER_IA_HOOKSHOT) || (this->heldItemAction == PLAYER_IA_LONGSHOT)) { Matrix_MultVec3f(&D_80126184, &this->unk_3C8); if (heldActor != NULL) { @@ -1960,16 +1948,16 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve if (func_8002DD78(this) != 0) { Matrix_Translate(500.0f, 300.0f, 0.0f, MTXMODE_APPLY); Player_DrawHookshotReticle( - play, this, ((this->heldItemAction == PLAYER_IA_HOOKSHOT) ? 38600.0f : 77600.0f) * CVarGetFloat(CVAR_CHEAT("HookshotReachMultiplier"), 1.0f)); + play, this, + ((this->heldItemAction == PLAYER_IA_HOOKSHOT) ? 38600.0f : 77600.0f) * + CVarGetFloat(CVAR_CHEAT("HookshotReachMultiplier"), 1.0f)); } } - // #region SOH [Enhancement] - } else if (CVarGetInteger(CVAR_ENHANCEMENT("BowReticle"), 0) && ( - (this->heldItemAction == PLAYER_IA_BOW_FIRE) || - (this->heldItemAction == PLAYER_IA_BOW_ICE) || - (this->heldItemAction == PLAYER_IA_BOW_LIGHT) || - (this->heldItemAction == PLAYER_IA_BOW) || + // #region SOH [Enhancement] + } else if (CVarGetInteger(CVAR_ENHANCEMENT("BowReticle"), 0) && + ((this->heldItemAction == PLAYER_IA_BOW_FIRE) || (this->heldItemAction == PLAYER_IA_BOW_ICE) || + (this->heldItemAction == PLAYER_IA_BOW_LIGHT) || (this->heldItemAction == PLAYER_IA_BOW) || (this->heldItemAction == PLAYER_IA_SLINGSHOT))) { if (heldActor != NULL) { MtxF sp44; @@ -1983,13 +1971,15 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve Player_DrawHookshotReticle(play, this, RETICLE_MAX); } } - } else if (CVarGetInteger(CVAR_ENHANCEMENT("BoomerangReticle"), 0) && (this->heldItemAction == PLAYER_IA_BOOMERANG)) { + } else if (CVarGetInteger(CVAR_ENHANCEMENT("BoomerangReticle"), 0) && + (this->heldItemAction == PLAYER_IA_BOOMERANG)) { if (Player_HoldsBoomerang(this)) { if (LINK_IS_ADULT) { Matrix_RotateZYX(BoomerangViewAdult.x, BoomerangViewAdult.y, BoomerangViewAdult.z, MTXMODE_APPLY); } else { - Matrix_RotateZYX(BoomerangViewChild.x, BoomerangViewChild.y, BoomerangViewChild.z, MTXMODE_APPLY); + Matrix_RotateZYX(BoomerangViewChild.x, BoomerangViewChild.y, BoomerangViewChild.z, + MTXMODE_APPLY); } if (Player_AimsBoomerang(this)) { @@ -1997,11 +1987,12 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve Player_DrawHookshotReticle(play, this, RETICLE_MAX); } } - // #endregion + // #endregion } if ((this->unk_862 != 0) || ((func_8002DD6C(this) == 0) && (heldActor != NULL))) { - if (!(this->stateFlags1 & PLAYER_STATE1_GETTING_ITEM) && (this->unk_862 != 0) && (this->exchangeItemId != EXCH_ITEM_NONE)) { + if (!(this->stateFlags1 & PLAYER_STATE1_GETTING_ITEM) && (this->unk_862 != 0) && + (this->exchangeItemId != EXCH_ITEM_NONE)) { Math_Vec3f_Copy(&sGetItemRefPos, &this->leftHandPos); } else { sGetItemRefPos.x = (this->bodyPartsPos[15].x + this->leftHandPos.x) * 0.5f; @@ -2016,7 +2007,8 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve } } else if (this->actor.scale.y >= 0.0f) { if (limbIndex == PLAYER_LIMB_SHEATH) { - if ((this->rightHandType != PLAYER_MODELTYPE_RH_SHIELD) && (this->rightHandType != PLAYER_MODELTYPE_RH_FF)) { + if ((this->rightHandType != PLAYER_MODELTYPE_RH_SHIELD) && + (this->rightHandType != PLAYER_MODELTYPE_RH_FF)) { if (Player_IsChildWithHylianShield(this)) { Player_UpdateShieldCollider(play, this, &this->shieldQuad, sSheathLimbModelShieldQuadVertices); } @@ -2052,13 +2044,13 @@ u32 func_80091738(PlayState* play, u8* segment, SkelAnime* skelAnime) { gSegments[4] = VIRTUAL_TO_PHYSICAL(segment + 0x3800); gSegments[6] = VIRTUAL_TO_PHYSICAL(segment + 0x8800); - SkelAnime_InitLink(play, skelAnime, gPlayerSkelHeaders[gSaveContext.linkAge], &gPlayerAnim_link_normal_wait, 9, - ptr, ptr, PLAYER_LIMB_MAX); + SkelAnime_InitLink(play, skelAnime, gPlayerSkelHeaders[gSaveContext.linkAge], &gPlayerAnim_link_normal_wait, 9, ptr, + ptr, PLAYER_LIMB_MAX); return size + 0x8800 + 0x90; } -u8 sPauseModelGroupBySword[] = { +u8 sPauseModelGroupBySword[] = { PLAYER_MODELGROUP_SWORD_AND_SHIELD, // PLAYER_SWORD_KOKIRI PLAYER_MODELGROUP_SWORD_AND_SHIELD, // PLAYER_SWORD_MASTER PLAYER_MODELGROUP_BGS, // PLAYER_SWORD_BIGGORON @@ -2068,13 +2060,15 @@ s32 Player_OverrideLimbDrawPause(PlayState* play, s32 limbIndex, Gfx** dList, Ve u8* playerSwordAndShield = arg; // SOH: Ensure positive value from playerSwordAndShield[] to avoid OOB array access. // This can occur in the case where playerSwordAndShield[0] is PLAYER_SWORD_NONE - u8 modelGroup = sPauseModelGroupBySword[playerSwordAndShield[0] > 0 ? playerSwordAndShield[0] - PLAYER_SWORD_KOKIRI : 0]; + u8 modelGroup = + sPauseModelGroupBySword[playerSwordAndShield[0] > 0 ? playerSwordAndShield[0] - PLAYER_SWORD_KOKIRI : 0]; s32 type; s32 dListOffset = 0; Gfx** dLists; size_t ptrSize = sizeof(uint32_t); - if ((modelGroup == PLAYER_MODELGROUP_SWORD_AND_SHIELD) && !LINK_IS_ADULT && (playerSwordAndShield[1] == PLAYER_SHIELD_HYLIAN)) { + if ((modelGroup == PLAYER_MODELGROUP_SWORD_AND_SHIELD) && !LINK_IS_ADULT && + (playerSwordAndShield[1] == PLAYER_SHIELD_HYLIAN)) { modelGroup = PLAYER_MODELGROUP_CHILD_HYLIAN_SHIELD; } @@ -2082,7 +2076,7 @@ s32 Player_OverrideLimbDrawPause(PlayState* play, s32 limbIndex, Gfx** dList, Ve type = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_LEFT_HAND]; sLeftHandType = type; - // SOH: Handle unexpected swordless case. Previously OOB array access is avoided, but we want the + // SOH: Handle unexpected swordless case. Previously OOB array access is avoided, but we want the // hand model-type to be set to open (otherwise it is set to holding sword model-type) if (playerSwordAndShield[0] == PLAYER_SWORD_NONE) { type = PLAYER_MODELTYPE_LH_OPEN; @@ -2104,7 +2098,7 @@ s32 Player_OverrideLimbDrawPause(PlayState* play, s32 limbIndex, Gfx** dList, Ve } } else if (limbIndex == PLAYER_LIMB_WAIST) { type = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_WAIST]; - + if (Player_IsCustomLinkModel()) { return 0; } @@ -2224,8 +2218,11 @@ void Player_DrawPauseImpl(PlayState* play, void* gameplayKeep, void* linkObject, playerSwordAndShield[0] = sword; playerSwordAndShield[1] = shield; - Matrix_SetTranslateRotateYXZ(pos->x - ((CVarGetInteger(CVAR_ENHANCEMENT("PauseMenuAnimatedLink"), 0) && LINK_AGE_IN_YEARS == YEARS_ADULT) ? 25 : 0), - pos->y - (CVarGetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0) ? 16 : 0), pos->z, rot); + Matrix_SetTranslateRotateYXZ( + pos->x - ((CVarGetInteger(CVAR_ENHANCEMENT("PauseMenuAnimatedLink"), 0) && LINK_AGE_IN_YEARS == YEARS_ADULT) + ? 25 + : 0), + pos->y - (CVarGetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0) ? 16 : 0), pos->z, rot); Matrix_Scale(scale * (mirrorWorldActive ? -1 : 1), scale, scale, MTXMODE_APPLY); gSPSegment(POLY_OPA_DISP++, 0x04, gameplayKeep); @@ -2246,7 +2243,7 @@ void Player_DrawPauseImpl(PlayState* play, void* gameplayKeep, void* linkObject, if (CVarGetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0)) { Matrix_SetTranslateRotateYXZ(pos->x - (LINK_AGE_IN_YEARS == YEARS_ADULT ? 25 : 0), - pos->y + 280 + (LINK_AGE_IN_YEARS == YEARS_ADULT ? 48 : 0), pos->z, rot); + pos->y + 280 + (LINK_AGE_IN_YEARS == YEARS_ADULT ? 48 : 0), pos->z, rot); Matrix_Scale(scale * (mirrorWorldActive ? -1 : 1), scale * 1, scale * 1, MTXMODE_APPLY); Pause_DrawTriforceSpot(play, 1); @@ -2266,8 +2263,8 @@ void Player_DrawPauseImpl(PlayState* play, void* gameplayKeep, void* linkObject, CLOSE_DISPS(play->state.gfxCtx); } -void Player_DrawPause(PlayState* play, u8* segment, SkelAnime* skelAnime, Vec3f* pos, Vec3s* rot, f32 scale, - s32 sword, s32 tunic, s32 shield, s32 boots) { +void Player_DrawPause(PlayState* play, u8* segment, SkelAnime* skelAnime, Vec3f* pos, Vec3s* rot, f32 scale, s32 sword, + s32 tunic, s32 shield, s32 boots) { Input* p1Input = &play->state.input[0]; Vec3f eye = { 0.0f, 0.0f, -400.0f }; Vec3f at = { 0.0f, 0.0f, 0.0f }; @@ -2279,12 +2276,14 @@ void Player_DrawPause(PlayState* play, u8* segment, SkelAnime* skelAnime, Vec3f* gSegments[4] = VIRTUAL_TO_PHYSICAL(segment + 0x3800); gSegments[6] = VIRTUAL_TO_PHYSICAL(segment + 0x8800); - uintptr_t* PauseMenuAnimSet[4] = { - // IDLE // Two Handed // No shield // Kid Hylian Shield - gPlayerAnim_link_normal_wait, gPlayerAnim_link_fighter_wait_long, gPlayerAnim_link_normal_wait_free, gPlayerAnim_link_normal_wait_free + uintptr_t* PauseMenuAnimSet[4] = { // IDLE // Two Handed // No shield // + // Kid Hylian Shield + gPlayerAnim_link_normal_wait, gPlayerAnim_link_fighter_wait_long, + gPlayerAnim_link_normal_wait_free, gPlayerAnim_link_normal_wait_free }; - if (CVarGetInteger(CVAR_ENHANCEMENT("PauseMenuAnimatedLink"), 0) || CVarGetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0)) { + if (CVarGetInteger(CVAR_ENHANCEMENT("PauseMenuAnimatedLink"), 0) || + CVarGetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0)) { uintptr_t anim = 0; // Initialise anim s16 EquipedStance; diff --git a/soh/src/overlays/actors/ovl_En_Glider/z_en_glider.c b/soh/src/overlays/actors/ovl_En_Glider/z_en_glider.c new file mode 100644 index 000000000..7f7af573a --- /dev/null +++ b/soh/src/overlays/actors/ovl_En_Glider/z_en_glider.c @@ -0,0 +1,134 @@ +/* + * File: z_En_Glider.c + * Overlay: ovl_En_Glider + * Description: Glider + */ + +#include "z_en_glider.h" +#include "objects/gameplay_keep/gameplay_keep.h" +#include "soh/ResourceManagerHelpers.h" + +// #include "vt.h" +// #include "soh/frame_interpolation.h" + +#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED) + +void EnGlider_Init(Actor* thisx, PlayState* play); +void EnGlider_Destroy(Actor* thisx, PlayState* play); +void EnGlider_Update(Actor* thisx, PlayState* play); +void EnGlider_Draw(Actor* thisx, PlayState* play); +void EnGlider_ResetAction(EnGlider* this, PlayState* play); + +const ActorInit En_Glider_InitVars = { + ACTOR_EN_GLIDER, + ACTORCAT_PROP, + FLAGS, + OBJECT_GLIDER, + sizeof(EnGlider), + (ActorFunc)EnGlider_Init, + (ActorFunc)EnGlider_Destroy, + (ActorFunc)EnGlider_Update, + (ActorFunc)EnGlider_Draw, +}; + +static ColliderCylinderInit sCylinderInit = { + // damages enemies + { + COLTYPE_NONE, + AT_ON | AT_TYPE_PLAYER, + AC_NONE, + OC1_NONE, + OC2_TYPE_PLAYER, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK2, + { 0x00100000, 0x00, 0x00 }, // Glider damage type - only collides with wind zones 0x00100000 + { 0xFFCFFFFF, 0x00, 0x00 }, + TOUCH_ON | TOUCH_NEAREST | TOUCH_SFX_NONE, + BUMP_NONE, + OCELEM_NONE, + }, + { 23, 46, 0, { 0, 0, 0 } }, +}; + +static CollisionCheckInfoInit2 sColChkInit = { 1, 0, 0, 0, MASS_IMMOVABLE }; + +static InitChainEntry sInitChain[] = { + ICHAIN_U8(targetMode, 6, ICHAIN_CONTINUE), + ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE), + ICHAIN_F32(targetArrowOffset, 0, ICHAIN_STOP), +}; + +s32 EnGlider_CheckCollider(EnGlider* this, PlayState* play) { + if (this->collider.base.acFlags & AC_HIT) { + this->collider.base.acFlags &= ~AC_HIT; + return true; + } + + if (this->collider.base.ocFlags2 & OC2_HIT_PLAYER) { + this->collider.base.ocFlags2 &= ~OC2_HIT_PLAYER; + return true; + } + return false; +} + +void EnGlider_Init(Actor* thisx, PlayState* play) { + EnGlider* this = (EnGlider*)thisx; + ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); + Collider_InitCylinder(play, &this->collider); + Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); + Actor_ProcessInitChain(&this->actor, sInitChain); + this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED; + Actor_SetScale(&this->actor, 1.0f); + this->actionFunc = EnGlider_ResetAction; +} + +void EnGlider_Destroy(Actor* thisx, PlayState* play) { + EnGlider* this = (EnGlider*)thisx; + Collider_DestroyCylinder(play, &this->collider); + ResourceMgr_UnregisterSkeleton(&this->skelAnime); +} + +void EnGlider_ResetAction(EnGlider* this, PlayState* play) { +} + +void EnGlider_Update(Actor* thisx, PlayState* play) { + + EnGlider* this = (EnGlider*)thisx; + Player* player = GET_PLAYER(play); + s32 atTouched; + Actor* hitActor; + + EnGlider_CheckCollider(this, play); + + this->actionFunc(this, play); + Actor_SetFocus(&this->actor, this->unk_304); + Actor_MoveXZGravity(&this->actor); + + atTouched = (this->collider.base.atFlags & AT_HIT); + if (atTouched && (this->collider.info.atHitInfo->elemType != ELEMTYPE_UNK4)) { + hitActor = this->collider.base.at; + // if (hitActor->id == ACTOR_WIND_ZONE) { + // this->wz = hitActor; + // this->inWindZone = true; + // } else { + // this->wz = NULL; + // this->inWindZone = false; + // } + } else { + // this->wz = NULL; + // this->inWindZone = false; + } + // if (this->inWindZone) { + // this->wzDistY = this->actor.world.pos.y - this->wz->actor.world.pos.y; + // } + + Collider_UpdateCylinder(&this->actor, &this->collider); + CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); + CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); +} + +void EnGlider_Draw(Actor* thisx, PlayState* play) { + Gfx_DrawDListOpa(play, gGliderDL); +} \ No newline at end of file diff --git a/soh/src/overlays/actors/ovl_En_Glider/z_en_glider.h b/soh/src/overlays/actors/ovl_En_Glider/z_en_glider.h new file mode 100644 index 000000000..9b0c2e69f --- /dev/null +++ b/soh/src/overlays/actors/ovl_En_Glider/z_en_glider.h @@ -0,0 +1,80 @@ +#ifndef Z_EN_GLIDER_H +#define Z_EN_GLIDER_H + +#include +#include "global.h" + +struct EnGlider; + +typedef void (*EnGliderActionFunc)(struct EnGlider*, PlayState*); + +typedef struct EnGlider { + /* 0x0000 */ Actor actor; + /* 0x014C */ SkelAnime skelAnime; + /* 0x0190 */ Vec3s jointTable[16]; + /* 0x01F0 */ Vec3s morphTable[16]; + /* 0x0250 */ EnGliderActionFunc actionFunc; + /* 0x0254 */ s16 timer1; + /* 0x0256 */ s16 timer2; + /* 0x0258 */ s16 timer3; + /* 0x025A */ s16 timer4; + /* 0x025C */ s16 timer5; + /* 0x025E */ s16 timer6; + /* 0x0260 */ s16 sfxTimer1; + /* 0x0262 */ s16 sfxTimer2; + /* 0x0264 */ s16 sfxTimer3; + /* 0x0266 */ s16 timer7; + /* 0x0268 */ s16 timer8; + /* 0x026A */ s16 timer9; + /* 0x026C */ f32 unk_26C[10]; + /* 0x0294 */ s16 unk_294; + /* 0x0296 */ s16 unk_296; + /* 0x0298 */ s16 unk_298; + /* 0x029A */ s16 unk_29A; + /* 0x029C */ s16 unk_29C; + /* 0x029E */ s16 unk_29E; + /* 0x02A0 */ s16 unk_2A0; + /* 0x02A2 */ s16 unk_2A2; + /* 0x02A4 */ s16 unk_2A4; + /* 0x02A6 */ s16 unk_2A6; + /* 0x02A8 */ s16 unk_2A8; + /* 0x02AA */ s16 unk_2AA; + /* 0x02AC */ Vec3f unk_2AC; + /* 0x02B8 */ Vec3f unk_2B8; + /* 0x02C4 */ f32 unk_2C4; + /* 0x02C8 */ f32 unk_2C8; + /* 0x02CC */ f32 unk_2CC; + /* 0x02D0 */ f32 unk_2D0; + /* 0x02D4 */ f32 unk_2D4; + /* 0x02D8 */ f32 unk_2D8; + /* 0x02DC */ f32 unk_2DC; + /* 0x02E0 */ f32 unk_2E0; + /* 0x02E4 */ s16 unk_2E4; + /* 0x02E6 */ s16 unk_2E6; + /* 0x02E8 */ s16 path; + /* 0x02EA */ s16 waypoint; + /* 0x02EC */ s16 unk_2EC; + /* 0x02EE */ s16 unk_2EE; + /* 0x02F0 */ Vec3f unk_2F0; + /* 0x02FC */ f32 unk_2FC; + /* 0x0300 */ f32 unk_300; + /* 0x0304 */ f32 unk_304; + /* 0x0308 */ u8 unk_308; + /* 0x030C */ ColliderCylinder collider; + bool inWindZone; + float wzDistY; + +} EnGlider; // size = 0x07B8 + +#ifdef __cplusplus +#define this thisx +extern "C" { +#endif + +#ifdef __cplusplus +#undef this +}; +#undef this +#endif + +#endif diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c index 312a74215..2d6be152c 100644 --- a/soh/src/overlays/actors/ovl_player_actor/z_player.c +++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c @@ -34,6 +34,8 @@ #include "soh/OTRGlobals.h" #include "soh/ResourceManagerHelpers.h" +#include "overlays/actors/ovl_En_Glider/z_en_glider.h" + #include #include #include @@ -86,10 +88,10 @@ typedef enum AnimSfxType { #define ANIMSFX_SHIFT_TYPE(type) ((type) << 11) -#define ANIMSFX_DATA(type, frame) ((ANIMSFX_SHIFT_TYPE(type) | ((frame)&0x7FF))) +#define ANIMSFX_DATA(type, frame) ((ANIMSFX_SHIFT_TYPE(type) | ((frame) & 0x7FF))) -#define ANIMSFX_GET_TYPE(data) ((data)&0x7800) -#define ANIMSFX_GET_FRAME(data) ((data)&0x7FF) +#define ANIMSFX_GET_TYPE(data) ((data) & 0x7800) +#define ANIMSFX_GET_FRAME(data) ((data) & 0x7FF) typedef struct AnimSfxEntry { /* 0x00 */ u16 sfxId; @@ -344,7 +346,12 @@ void Player_Action_80850C68(Player* this, PlayState* play); void Player_Action_80850E84(Player* this, PlayState* play); void Player_Action_CsAction(Player* this, PlayState* play); -#pragma region [SoH] +// CUSTOM +void ItemSpawnGlider(PlayState* play, Player* this); +void DespawnHeldGlider(PlayState* play, Player* this); +s32 Glide(PlayState* play, Player* this); + +#pragma region[SoH] u8 gWalkSpeedToggle1; u8 gWalkSpeedToggle2; @@ -356,9 +363,8 @@ s32 spawn_boomerang_ivan(EnPartner* this, PlayState* play) { f32 posX = (Math_SinS(this->actor.shape.rot.y) * 1.0f) + this->actor.world.pos.x; f32 posZ = (Math_CosS(this->actor.shape.rot.y) * 1.0f) + this->actor.world.pos.z; s32 yaw = this->actor.shape.rot.y; - EnBoom* boomerang = - (EnBoom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOOM, posX, this->actor.world.pos.y + 7.0f, posZ, - this->actor.focus.rot.x, yaw, 0, 0, true); + EnBoom* boomerang = (EnBoom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOOM, posX, this->actor.world.pos.y + 7.0f, + posZ, this->actor.focus.rot.x, yaw, 0, 0, true); this->boomerangActor = &boomerang->actor; if (boomerang != NULL) { @@ -1238,6 +1244,9 @@ static s8 sItemActions[] = { PLAYER_IA_SWORD_KOKIRI, // ITEM_SWORD_KOKIRI PLAYER_IA_SWORD_MASTER, // ITEM_SWORD_MASTER PLAYER_IA_SWORD_BIGGORON, // ITEM_SWORD_BIGGORON + // CUSTOM + PLAYER_IA_GLIDER, // ITEM_GLIDER + PLAYER_IA_MAX }; static s32 (*sItemActionUpdateFuncs[])(Player* this, PlayState* play) = { @@ -1308,6 +1317,7 @@ static s32 (*sItemActionUpdateFuncs[])(Player* this, PlayState* play) = { func_8083485C, // PLAYER_IA_MASK_GERUDO func_8083485C, // PLAYER_IA_MASK_TRUTH func_8083485C, // PLAYER_IA_LENS_OF_TRUTH + func_8083485C, // PLAYER_IA_GLIDER }; static void (*sItemActionInitFuncs[])(PlayState* play, Player* this) = { @@ -1378,6 +1388,8 @@ static void (*sItemActionInitFuncs[])(PlayState* play, Player* this) = { Player_InitDefaultIA, // PLAYER_IA_MASK_GERUDO Player_InitDefaultIA, // PLAYER_IA_MASK_TRUTH Player_InitDefaultIA, // PLAYER_IA_LENS_OF_TRUTH + // CUSTOM + Player_InitDefaultIA, // PLAYER_IA_GLIDER }; typedef enum ItemChangeType { @@ -1692,7 +1704,8 @@ void func_80832440(PlayState* play, Player* this) { func_80832340(play, this); func_8005B1A4(Play_GetCamera(play, 0)); - this->stateFlags1 &= ~(PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_FIRST_PERSON | PLAYER_STATE1_CLIMBING_LADDER); + this->stateFlags1 &= ~(PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_FIRST_PERSON | + PLAYER_STATE1_CLIMBING_LADDER); this->stateFlags2 &= ~(PLAYER_STATE2_MOVING_DYNAPOLY | PLAYER_STATE2_GRABBED_BY_ENEMY | PLAYER_STATE2_CRAWLING); this->actor.shape.rot.x = 0; @@ -1863,8 +1876,7 @@ void Player_ProcessAnimSfxList(Player* this, AnimSfxEntry* entry) { } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_WALKING)) { Player_PlaySteppingSfx(this, 0.0f); } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_UNKNOWN)) { - func_800F4010(&this->actor.projectedPos, - NA_SE_PL_WALK_LADDER + this->ageProperties->unk_94, 0.0f); + func_800F4010(&this->actor.projectedPos, NA_SE_PL_WALK_LADDER + this->ageProperties->unk_94, 0.0f); } } @@ -2230,6 +2242,8 @@ void Player_InitItemActionWithAnim(PlayState* play, Player* this, s8 itemAction) // This is redundant, the same two flags get unset in // `Player_InitItemAction` called below. + + osSyncPrintf("ItemAction: %d\n", itemAction); this->stateFlags1 &= ~(PLAYER_STATE1_ITEM_IN_HAND | PLAYER_STATE1_USING_BOOMERANG); for (animGroup = 0; animGroup < PLAYER_ANIMGROUP_MAX; animGroup++) { @@ -2247,13 +2261,15 @@ void Player_InitItemActionWithAnim(PlayState* play, Player* this, s8 itemAction) } s8 Player_ItemToItemAction(s32 item) { + //print + osSyncPrintf("Item: %d\n", item); if (GameInteractor_Should(VB_ITEM_ACTION_BE_NONE, item >= ITEM_NONE_FE, item)) { return PLAYER_IA_NONE; } else if (item == ITEM_LAST_USED) { return PLAYER_IA_SWORD_CS; } else if (item == ITEM_FISHING_POLE) { return PLAYER_IA_FISHING_POLE; - } else { + }else { return sItemActions[item]; } } @@ -2339,8 +2355,13 @@ void Player_InitItemAction(PlayState* play, Player* this, s8 itemAction) { this->modelGroup = this->nextModelGroup; this->stateFlags1 &= ~(PLAYER_STATE1_ITEM_IN_HAND | PLAYER_STATE1_USING_BOOMERANG); - - sItemActionInitFuncs[itemAction](play, this); + lusprintf(__FILE__, __LINE__, 2, "ItemAction: %d\n", this->heldItemAction); + // CUSTOM + if (this->heldItemAction == PLAYER_IA_GLIDER) { + ItemSpawnGlider(play, this); + } else { + sItemActionInitFuncs[itemAction](play, this); + } Player_SetModelGroup(this, this->modelGroup); } @@ -2350,8 +2371,7 @@ void func_80833A20(Player* this, s32 newMeleeWeaponState) { u16 voiceSfx; if (this->meleeWeaponState == 0) { - if ((this->heldItemAction == PLAYER_IA_SWORD_BIGGORON) && - (gSaveContext.swordHealth > 0.0f)) { + if ((this->heldItemAction == PLAYER_IA_SWORD_BIGGORON) && (gSaveContext.swordHealth > 0.0f)) { itemSfx = NA_SE_IT_HAMMER_SWING; } else { itemSfx = NA_SE_IT_SWORD_SWING; @@ -2594,7 +2614,7 @@ void Player_StartChangingHeldItem(Player* this, PlayState* play) { nextAnimType = gPlayerModelTypes[this->nextModelGroup][PLAYER_MODELGROUPENTRY_ANIM]; itemChangeType = sItemChangeTypes[gPlayerModelTypes[this->modelGroup][PLAYER_MODELGROUPENTRY_ANIM]][nextAnimType]; - + if ((heldItemAction == PLAYER_IA_BOTTLE) || (heldItemAction == PLAYER_IA_BOOMERANG) || ((heldItemAction == PLAYER_IA_NONE) && ((this->heldItemAction == PLAYER_IA_BOTTLE) || (this->heldItemAction == PLAYER_IA_BOOMERANG)))) { @@ -2630,7 +2650,9 @@ void Player_StartChangingHeldItem(Player* this, PlayState* play) { } void Player_UpdateItems(Player* this, PlayState* play) { - if ((this->actor.category == ACTORCAT_PLAYER) && (CVarGetInteger(CVAR_ENHANCEMENT("QuickPutaway"), 0) || !(this->stateFlags1 & PLAYER_STATE1_START_CHANGING_HELD_ITEM)) && + if ((this->actor.category == ACTORCAT_PLAYER) && + (CVarGetInteger(CVAR_ENHANCEMENT("QuickPutaway"), 0) || + !(this->stateFlags1 & PLAYER_STATE1_START_CHANGING_HELD_ITEM)) && ((this->heldItemAction == this->itemAction) || (this->stateFlags1 & PLAYER_STATE1_SHIELDING)) && (gSaveContext.health != 0) && (play->csCtx.state == CS_STATE_IDLE) && (this->csAction == 0) && (play->shootingGalleryStatus == 0) && (play->activeCamera == MAIN_CAM) && @@ -2646,7 +2668,7 @@ void Player_UpdateItems(Player* this, PlayState* play) { // Determine projectile type for bow or slingshot s32 func_80834380(PlayState* play, Player* this, s32* itemPtr, s32* typePtr) { bool useBow = LINK_IS_ADULT; - if(CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0)){ + if (CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0)) { useBow = this->heldItemAction != PLAYER_IA_SLINGSHOT; } if (useBow) { @@ -2745,11 +2767,11 @@ LinkAnimationHeader* func_808346C4(PlayState* play, Player* this) { Player_DetachHeldActor(play, this); if (this->unk_870 < 0.5f) { - return D_808543A4[Player_HoldsTwoHandedWeapon(this) && - !(CVarGetInteger(CVAR_CHEAT("ShieldTwoHanded"), 0) && (this->heldItemAction != PLAYER_IA_DEKU_STICK))]; + return D_808543A4[Player_HoldsTwoHandedWeapon(this) && !(CVarGetInteger(CVAR_CHEAT("ShieldTwoHanded"), 0) && + (this->heldItemAction != PLAYER_IA_DEKU_STICK))]; } else { - return D_808543AC[Player_HoldsTwoHandedWeapon(this) && - !(CVarGetInteger(CVAR_CHEAT("ShieldTwoHanded"), 0) && (this->heldItemAction != PLAYER_IA_DEKU_STICK))]; + return D_808543AC[Player_HoldsTwoHandedWeapon(this) && !(CVarGetInteger(CVAR_CHEAT("ShieldTwoHanded"), 0) && + (this->heldItemAction != PLAYER_IA_DEKU_STICK))]; } } @@ -2759,8 +2781,8 @@ s32 func_80834758(PlayState* play, Player* this) { if (!(this->stateFlags1 & (PLAYER_STATE1_SHIELDING | PLAYER_STATE1_ON_HORSE | PLAYER_STATE1_IN_CUTSCENE)) && (play->shootingGalleryStatus == 0) && (this->heldItemAction == this->itemAction) && - (this->currentShield != PLAYER_SHIELD_NONE) && !Player_IsChildWithHylianShield(this) && Player_IsZTargeting(this) && - CHECK_BTN_ALL(sControlInput->cur.button, BTN_R)) { + (this->currentShield != PLAYER_SHIELD_NONE) && !Player_IsChildWithHylianShield(this) && + Player_IsZTargeting(this) && CHECK_BTN_ALL(sControlInput->cur.button, BTN_R)) { anim = func_808346C4(play, this); frame = Animation_GetLastFrame(anim); @@ -2936,14 +2958,12 @@ int func_80834E7C(PlayState* play) { buttonsToCheck |= BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT; } return (play->shootingGalleryStatus != 0) && - ((play->shootingGalleryStatus < 0) || - CHECK_BTN_ANY(sControlInput->cur.button, buttonsToCheck)); + ((play->shootingGalleryStatus < 0) || CHECK_BTN_ANY(sControlInput->cur.button, buttonsToCheck)); } s32 func_80834EB8(Player* this, PlayState* play) { if ((this->unk_6AD == 0) || (this->unk_6AD == 2)) { - if (Player_IsZTargeting(this) || - (Camera_CheckValidMode(Play_GetCamera(play, 0), 7) == 0)) { + if (Player_IsZTargeting(this) || (Camera_CheckValidMode(Play_GetCamera(play, 0), 7) == 0)) { return 1; } this->unk_6AD = 2; @@ -3140,8 +3160,8 @@ s32 func_80835588(Player* this, PlayState* play) { void Player_SetParallel(Player* this) { this->stateFlags1 |= PLAYER_STATE1_PARALLEL; - if (!(this->skelAnime.moveFlags & 0x80) && - (this->actor.bgCheckFlags & 0x200) && (sShapeYawToTouchedWall < 0x2000)) { + if (!(this->skelAnime.moveFlags & 0x80) && (this->actor.bgCheckFlags & 0x200) && + (sShapeYawToTouchedWall < 0x2000)) { // snap to the wall this->yaw = this->actor.shape.rot.y = this->actor.wallYaw + 0x8000; } @@ -3187,6 +3207,28 @@ s32 Player_UpperAction_CarryActor(Player* this, PlayState* play) { this->actor.gravity = -0.5f; this->fallStartHeight = this->actor.world.pos.y; } + lusprintf(__FILE__, __LINE__, 2, "Held actor ID: %d", heldActor->id); + if (heldActor->id == ACTOR_EN_GLIDER) { + + lusprintf(__FILE__, __LINE__, 2, "Glider detected\n"); + EnGlider* glider = (EnGlider*)heldActor; + if (glider->inWindZone == false) { + this->actor.minVelocityY = -2.0f; + this->actor.gravity = -0.25f; + this->fallStartHeight = this->actor.world.pos.y; + } else { + float max = 8.0f; + this->actor.minVelocityY = -2.0f; + float g = 10.0f * (1.0f / glider->wzDistY); + if (g > max) + g = max; + if ((this->actor.velocity.y + g) > max) { + g = max - this->actor.velocity.y; + } + this->actor.gravity = g; + this->fallStartHeight = this->actor.world.pos.y; + } + } return true; } @@ -3237,7 +3279,7 @@ s32 func_808358F0(Player* this, PlayState* play) { } else { // #region SOH [Enhancement] if (!CVarGetInteger(CVAR_ENHANCEMENT("BoomerangReticle"), 0)) { - // #endregion + // #endregion LinkAnimation_Update(play, &this->upperSkelAnime); } } @@ -3329,7 +3371,8 @@ s32 Player_SetupAction(PlayState* play, Player* this, PlayerActionFunc actionFun this->actionFunc = actionFunc; - if ((this->itemAction != this->heldItemAction) && (!(flags & 1) || !(this->stateFlags1 & PLAYER_STATE1_SHIELDING))) { + if ((this->itemAction != this->heldItemAction) && + (!(flags & 1) || !(this->stateFlags1 & PLAYER_STATE1_SHIELDING))) { func_8008EC70(this); } @@ -3340,10 +3383,11 @@ s32 Player_SetupAction(PlayState* play, Player* this, PlayerActionFunc actionFun Player_FinishAnimMovement(this); - this->stateFlags1 &= ~(PLAYER_STATE1_HOOKSHOT_FALLING | PLAYER_STATE1_TALKING | PLAYER_STATE1_DAMAGED | PLAYER_STATE1_IN_ITEM_CS | PLAYER_STATE1_IN_CUTSCENE | - PLAYER_STATE1_FLOOR_DISABLED); + this->stateFlags1 &= ~(PLAYER_STATE1_HOOKSHOT_FALLING | PLAYER_STATE1_TALKING | PLAYER_STATE1_DAMAGED | + PLAYER_STATE1_IN_ITEM_CS | PLAYER_STATE1_IN_CUTSCENE | PLAYER_STATE1_FLOOR_DISABLED); this->stateFlags2 &= ~(PLAYER_STATE2_HOPPING | PLAYER_STATE2_OCARINA_PLAYING | PLAYER_STATE2_IDLE_FIDGET); - this->stateFlags3 &= ~(PLAYER_STATE3_MIDAIR | PLAYER_STATE3_FINISHED_ATTACKING | PLAYER_STATE3_FLYING_WITH_HOOKSHOT); + this->stateFlags3 &= + ~(PLAYER_STATE3_MIDAIR | PLAYER_STATE3_FINISHED_ATTACKING | PLAYER_STATE3_FLYING_WITH_HOOKSHOT); this->av1.actionVar1 = 0; this->av2.actionVar2 = 0; @@ -3426,7 +3470,20 @@ void Player_UseItem(PlayState* play, Player* this, s32 item) { s32 temp; s32 nextAnimType; + lusprintf(__FILE__, __LINE__, 2, "Using item %d", item); + + if(item == 161) { + lusprintf(__FILE__, __LINE__, 2, "GLIDER"); + itemAction = PLAYER_IA_GLIDER; + }else{ itemAction = Player_ItemToItemAction(item); + } + + osSyncPrintf("3 ItemAction: %d\n", itemAction); + LOG_STRING("4 ItemAction"); + //try all logging possibilities + //log in stdllib + lusprintf(__FILE__, __LINE__, 2, "ItemAction: %d", itemAction); if (((this->heldItemAction == this->itemAction) && (!(this->stateFlags1 & PLAYER_STATE1_SHIELDING) || (Player_ActionToMeleeWeapon(itemAction) != 0) || @@ -3442,7 +3499,8 @@ void Player_UseItem(PlayState* play, Player* this, s32 item) { ((itemAction == PLAYER_IA_MAGIC_BEAN) && (AMMO(ITEM_BEAN) == 0)) || (temp = Player_ActionToExplosive(this, itemAction), ((temp >= 0) && ((AMMO(sExplosiveInfos[temp].itemId) == 0) || - (play->actorCtx.actorLists[ACTORCAT_EXPLOSIVE].length >= 3 && !CVarGetInteger(CVAR_ENHANCEMENT("RemoveExplosiveLimit"), 0))))))) { + (play->actorCtx.actorLists[ACTORCAT_EXPLOSIVE].length >= 3 && + !CVarGetInteger(CVAR_ENHANCEMENT("RemoveExplosiveLimit"), 0))))))) { // Prevent some items from being used if player is out of ammo. // Also prevent explosives from being used if there are 3 or more active (outside of bombchu bowling) Sfx_PlaySfxCentered(NA_SE_SY_ERROR); @@ -3458,8 +3516,11 @@ void Player_UseItem(PlayState* play, Player* this, s32 item) { } else { Sfx_PlaySfxCentered(NA_SE_SY_ERROR); } + } else if (itemAction == 73) { + // Handle Deku Nuts + lusprintf(__FILE__, __LINE__, 2, "GLIDER"); + Glide(play, this); } else if (itemAction == PLAYER_IA_DEKU_NUT) { - // Handle Deku Nuts if (AMMO(ITEM_NUT) != 0) { func_8083C61C(play, this); } else { @@ -3487,7 +3548,7 @@ void Player_UseItem(PlayState* play, Player* this, s32 item) { func_808328EC(this, NA_SE_PL_CHANGE_ARMS); } else if (((itemAction >= PLAYER_IA_OCARINA_FAIRY) && (itemAction <= PLAYER_IA_OCARINA_OF_TIME)) || - (itemAction >= PLAYER_IA_BOTTLE_FISH)) { + (itemAction >= PLAYER_IA_BOTTLE_FISH)) { // Handle "cutscene items" if (!Player_CheckHostileLockOn(this) || ((itemAction >= PLAYER_IA_BOTTLE_POTION_RED) && (itemAction <= PLAYER_IA_BOTTLE_FAIRY))) { @@ -3496,7 +3557,7 @@ void Player_UseItem(PlayState* play, Player* this, s32 item) { this->itemAction = itemAction; } } else if ((itemAction != this->heldItemAction) || - ((this->heldActor == NULL) && (Player_ActionToExplosive(this, itemAction) >= 0))) { + ((this->heldActor == NULL) && (Player_ActionToExplosive(this, itemAction) >= 0))) { // Handle using a new held item this->nextModelGroup = Player_ActionToModelGroup(this, itemAction); nextAnimType = gPlayerModelTypes[this->nextModelGroup][PLAYER_MODELGROUPENTRY_ANIM]; @@ -3505,9 +3566,9 @@ void Player_UseItem(PlayState* play, Player* this, s32 item) { (item != this->heldItemId) && (sItemChangeTypes[gPlayerModelTypes[this->modelGroup][PLAYER_MODELGROUPENTRY_ANIM]][nextAnimType] != PLAYER_ITEM_CHG_0) && - (!CVarGetInteger(CVAR_ENHANCEMENT("SeparateArrows"), 0) || - itemAction < PLAYER_IA_BOW || itemAction > PLAYER_IA_BOW_0E || - this->heldItemAction < PLAYER_IA_BOW || this->heldItemAction > PLAYER_IA_BOW_0E)) { + (!CVarGetInteger(CVAR_ENHANCEMENT("SeparateArrows"), 0) || itemAction < PLAYER_IA_BOW || + itemAction > PLAYER_IA_BOW_0E || this->heldItemAction < PLAYER_IA_BOW || + this->heldItemAction > PLAYER_IA_BOW_0E)) { // Start the held item change process this->heldItemId = item; this->stateFlags1 |= PLAYER_STATE1_START_CHANGING_HELD_ITEM; @@ -3515,6 +3576,8 @@ void Player_UseItem(PlayState* play, Player* this, s32 item) { // Init new held item for use Player_DestroyHookshot(this); Player_DetachHeldActor(play, this); + + osSyncPrintf("ItemAction: %d\n", itemAction); Player_InitItemActionWithAnim(play, this, itemAction); } } else { @@ -3523,6 +3586,7 @@ void Player_UseItem(PlayState* play, Player* this, s32 item) { } } } + } void func_80836448(PlayState* play, Player* this, LinkAnimationHeader* anim) { @@ -3673,7 +3737,8 @@ void Player_UpdateShapeYaw(Player* this, PlayState* play) { Math_ScaledStepToS(&this->actor.shape.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &this->focusActor->focus.pos), 4000); } else if ((this->stateFlags1 & PLAYER_STATE1_PARALLEL) && - !(this->stateFlags2 & (PLAYER_STATE2_DISABLE_ROTATION_Z_TARGET | PLAYER_STATE2_DISABLE_ROTATION_ALWAYS))) { + !(this->stateFlags2 & + (PLAYER_STATE2_DISABLE_ROTATION_Z_TARGET | PLAYER_STATE2_DISABLE_ROTATION_ALWAYS))) { Math_ScaledStepToS(&this->actor.shape.rot.y, this->parallelYaw, 4000); } } else if (!(this->stateFlags2 & PLAYER_STATE2_DISABLE_ROTATION_ALWAYS)) { @@ -4027,7 +4092,8 @@ s32 Player_GetMovementSpeedAndYaw(Player* this, f32* outSpeedTarget, s16* outYaw *outYawTarget = this->actor.shape.rot.y; if (this->focusActor != NULL) { - if ((play->actorCtx.targetCtx.unk_4B != 0) && !(this->stateFlags2 & PLAYER_STATE2_DISABLE_ROTATION_ALWAYS)) { + if ((play->actorCtx.targetCtx.unk_4B != 0) && + !(this->stateFlags2 & PLAYER_STATE2_DISABLE_ROTATION_ALWAYS)) { *outYawTarget = Math_Vec3f_Yaw(&this->actor.world.pos, &this->focusActor->focus.pos); return false; } @@ -4447,8 +4513,7 @@ void func_80837948(PlayState* play, Player* this, s32 arg2) { if ((arg2 >= PLAYER_MWA_FLIPSLASH_START) && (arg2 <= PLAYER_MWA_JUMPSLASH_FINISH)) { if (CVarGetInteger(CVAR_GENERAL("RestoreQPA"), 1) && temp == -1) { dmgFlags = 0x16171617; - } - else { + } else { dmgFlags = D_80854488[temp][1]; } } else { @@ -4585,9 +4650,9 @@ void func_80837C0C(PlayState* play, Player* this, s32 damageResponseType, f32 sp Player_PlayVoiceSfx(this, NA_SE_VO_LI_DAMAGE_S); } else if ((damageResponseType == PLAYER_HIT_RESPONSE_KNOCKBACK_LARGE) || - (damageResponseType == PLAYER_HIT_RESPONSE_KNOCKBACK_SMALL) || - !(this->actor.bgCheckFlags & 1) || - (this->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_CLIMBING_LADDER))) { + (damageResponseType == PLAYER_HIT_RESPONSE_KNOCKBACK_SMALL) || !(this->actor.bgCheckFlags & 1) || + (this->stateFlags1 & + (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_CLIMBING_LADDER))) { Player_SetupAction(play, this, Player_Action_8084377C, 0); this->stateFlags3 |= PLAYER_STATE3_MIDAIR; @@ -4728,13 +4793,15 @@ s32 func_808382DC(Player* this, PlayState* play) { if (this->unk_A86 != 0) { if (!Player_InBlockingCsMode(play, this)) { - Player_InflictDamageModified(play, -16 * (1 << CVarGetInteger(CVAR_ENHANCEMENT("VoidDamageMult"), 0)), false); + Player_InflictDamageModified(play, -16 * (1 << CVarGetInteger(CVAR_ENHANCEMENT("VoidDamageMult"), 0)), + false); this->unk_A86 = 0; } } else { sp68 = ((Player_GetHeight(this) - 8.0f) < (this->unk_6C4 * this->actor.scale.y)); - if (sp68 || (this->actor.bgCheckFlags & 0x100) || (sFloorType == 9) || (this->stateFlags2 & PLAYER_STATE2_FORCED_VOID_OUT)) { + if (sp68 || (this->actor.bgCheckFlags & 0x100) || (sFloorType == 9) || + (this->stateFlags2 & PLAYER_STATE2_FORCED_VOID_OUT)) { Player_PlayVoiceSfx(this, NA_SE_VO_LI_DAMAGE_S); if (sp68) { @@ -4819,13 +4886,14 @@ s32 func_808382DC(Player* this, PlayState* play) { LinkAnimation_PlayOnce(play, &this->upperSkelAnime, anim); } else { Player_AnimPlayOnce(play, this, - D_808543C4[Player_HoldsTwoHandedWeapon(this) && - !(CVarGetInteger(CVAR_CHEAT("ShieldTwoHanded"), 0) && - (this->heldItemAction != PLAYER_IA_DEKU_STICK))]); + D_808543C4[Player_HoldsTwoHandedWeapon(this) && + !(CVarGetInteger(CVAR_CHEAT("ShieldTwoHanded"), 0) && + (this->heldItemAction != PLAYER_IA_DEKU_STICK))]); } } - if (!(this->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_CLIMBING_LADDER))) { + if (!(this->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | + PLAYER_STATE1_CLIMBING_LADDER))) { this->linearVelocity = -18.0f; this->yaw = this->actor.shape.rot.y; } @@ -4877,8 +4945,9 @@ s32 func_808382DC(Player* this, PlayState* play) { ((sp48 >= 0) && SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) && (this->floorTypeTimer >= D_808544F4[sp48])) || - ((sp48 >= 0) && ((this->currentTunic != PLAYER_TUNIC_GORON && CVarGetInteger(CVAR_CHEAT("SuperTunic"), 0) == 0) || - (this->floorTypeTimer >= D_808544F4[sp48])))) { + ((sp48 >= 0) && + ((this->currentTunic != PLAYER_TUNIC_GORON && CVarGetInteger(CVAR_CHEAT("SuperTunic"), 0) == 0) || + (this->floorTypeTimer >= D_808544F4[sp48])))) { this->floorTypeTimer = 0; this->actor.colChkInfo.damage = 4; func_80837C0C(play, this, PLAYER_HIT_RESPONSE_NONE, 4.0f, 5.0f, this->actor.shape.rot.y, 20); @@ -4893,6 +4962,7 @@ s32 func_808382DC(Player* this, PlayState* play) { } void func_80838940(Player* this, LinkAnimationHeader* anim, f32 arg2, PlayState* play, u16 sfxId) { + this->numJumps++; // Autojump counts as first manual jump Player_SetupAction(play, this, Player_Action_8084411C, 1); if (anim != NULL) { @@ -4934,8 +5004,8 @@ s32 Player_ActionHandler_12(Player* this, PlayState* play) { } else if ((this->currentBoots != PLAYER_BOOTS_IRON) || (this->ledgeClimbType > 2)) { return 0; } - } else if (!(this->actor.bgCheckFlags & 1) || - ((this->ageProperties->unk_14 <= this->yDistToLedge) && (this->stateFlags1 & PLAYER_STATE1_IN_WATER))) { + } else if (!(this->actor.bgCheckFlags & 1) || ((this->ageProperties->unk_14 <= this->yDistToLedge) && + (this->stateFlags1 & PLAYER_STATE1_IN_WATER))) { return 0; } @@ -5067,7 +5137,7 @@ static s16 sReturnEntranceGroupData[] = { // ENTR_RETURN_2 /* 3 */ ENTR_KAKARIKO_VILLAGE_OUTSIDE_POTION_SHOP_FRONT, // from Potion Shop in Kakariko - /* 4 */ ENTR_MARKET_DAY_OUTSIDE_POTION_SHOP, // from Potion Shop in Market + /* 4 */ ENTR_MARKET_DAY_OUTSIDE_POTION_SHOP, // from Potion Shop in Market // ENTR_RETURN_BAZAAR /* 5 */ ENTR_KAKARIKO_VILLAGE_OUTSIDE_BAZAAR, @@ -5075,16 +5145,16 @@ static s16 sReturnEntranceGroupData[] = { // ENTR_RETURN_4 /* 7 */ ENTR_KAKARIKO_VILLAGE_OUTSIDE_SKULKLTULA_HOUSE, // from House of Skulltulas - /* 8 */ ENTR_BACK_ALLEY_DAY_OUTSIDE_BOMBCHU_SHOP, // from Bombchu Shop + /* 8 */ ENTR_BACK_ALLEY_DAY_OUTSIDE_BOMBCHU_SHOP, // from Bombchu Shop // ENTR_RETURN_SHOOTING_GALLERY /* 9 */ ENTR_KAKARIKO_VILLAGE_OUTSIDE_SHOOTING_GALLERY, /* 10 */ ENTR_MARKET_DAY_OUTSIDE_SHOOTING_GALLERY, // ENTR_RETURN_GREAT_FAIRYS_FOUNTAIN_SPELLS - /* 11 */ ENTR_ZORAS_FOUNTAIN_OUTSIDE_GREAT_FAIRY, // from Farores Wind Fairy Fountain - /* 12 */ ENTR_CASTLE_GROUNDS_GREAT_FAIRY_EXIT, // from Dins Fire Fairy Fountain (as child) - /* 13 */ ENTR_DESERT_COLOSSUS_GREAT_FAIRY_EXIT, // from Nayrus Love Fairy Fountain + /* 11 */ ENTR_ZORAS_FOUNTAIN_OUTSIDE_GREAT_FAIRY, // from Farores Wind Fairy Fountain + /* 12 */ ENTR_CASTLE_GROUNDS_GREAT_FAIRY_EXIT, // from Dins Fire Fairy Fountain (as child) + /* 13 */ ENTR_DESERT_COLOSSUS_GREAT_FAIRY_EXIT, // from Nayrus Love Fairy Fountain }; /** @@ -5109,9 +5179,10 @@ s32 Player_HandleExitsAndVoids(PlayState* play, Player* this, CollisionPoly* pol if (this->actor.category == ACTORCAT_PLAYER) { exitIndex = 0; - if (!(this->stateFlags1 & PLAYER_STATE1_DEAD) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (this->csAction == 0) && - !(this->stateFlags1 & PLAYER_STATE1_LOADING) && - (((poly != NULL) && (exitIndex = SurfaceType_GetSceneExitIndex(&play->colCtx, poly, bgId), exitIndex != 0)) || + if (!(this->stateFlags1 & PLAYER_STATE1_DEAD) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && + (this->csAction == 0) && !(this->stateFlags1 & PLAYER_STATE1_LOADING) && + (((poly != NULL) && + (exitIndex = SurfaceType_GetSceneExitIndex(&play->colCtx, poly, bgId), exitIndex != 0)) || (func_8083816C(sFloorType) && (this->floorProperty == 12)))) { sp34 = this->unk_A84 - (s32)this->actor.world.pos.y; @@ -5140,10 +5211,14 @@ s32 Player_HandleExitsAndVoids(PlayState* play, Player* this, CollisionPoly* pol } else if (play->nextEntranceIndex >= ENTR_RETURN_YOUSEI_IZUMI_YOKO) { // handle dynamic exits if (IS_RANDO) { - play->nextEntranceIndex = Entrance_OverrideDynamicExit(sReturnEntranceGroupIndices[play->nextEntranceIndex - ENTR_RETURN_YOUSEI_IZUMI_YOKO] + play->curSpawn); + play->nextEntranceIndex = Entrance_OverrideDynamicExit( + sReturnEntranceGroupIndices[play->nextEntranceIndex - ENTR_RETURN_YOUSEI_IZUMI_YOKO] + + play->curSpawn); } else { play->nextEntranceIndex = - sReturnEntranceGroupData[sReturnEntranceGroupIndices[play->nextEntranceIndex - ENTR_RETURN_YOUSEI_IZUMI_YOKO] + play->curSpawn]; + sReturnEntranceGroupData[sReturnEntranceGroupIndices[play->nextEntranceIndex - + ENTR_RETURN_YOUSEI_IZUMI_YOKO] + + play->curSpawn]; } Scene_SetTransitionForNextEntrance(play); @@ -5313,7 +5388,8 @@ s32 Player_ActionHandler_1(Player* this, PlayState* play) { if ((this->doorType != PLAYER_DOORTYPE_NONE) && (!(this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) || ((this->heldActor != NULL) && (this->heldActor->id == ACTOR_EN_RU1)))) { - if ((CHECK_BTN_ALL(sControlInput->press.button, BTN_A) || (Player_Action_8084F9A0 == this->actionFunc)) && GameInteractor_Should(VB_BE_ABLE_TO_OPEN_DOORS, true)) { + if ((CHECK_BTN_ALL(sControlInput->press.button, BTN_A) || (Player_Action_8084F9A0 == this->actionFunc)) && + GameInteractor_Should(VB_BE_ABLE_TO_OPEN_DOORS, true)) { doorActor = this->doorActor; if (this->doorType <= PLAYER_DOORTYPE_AJAR) { @@ -5362,9 +5438,10 @@ s32 Player_ActionHandler_1(Player* this, PlayState* play) { } if (doorShutter->dyna.actor.category == ACTORCAT_DOOR) { - this->cv.slidingDoorBgCamIndex = play->transiActorCtx.list[(u16)doorShutter->dyna.actor.params >> 10] - .sides[(doorDirection > 0) ? 0 : 1] - .effects; + this->cv.slidingDoorBgCamIndex = + play->transiActorCtx.list[(u16)doorShutter->dyna.actor.params >> 10] + .sides[(doorDirection > 0) ? 0 : 1] + .effects; Actor_DisableLens(play); } @@ -5421,7 +5498,8 @@ s32 Player_ActionHandler_1(Player* this, PlayState* play) { this->stateFlags1 |= PLAYER_STATE1_IN_CUTSCENE; Actor_DisableLens(play); - if (GameInteractor_Should(VB_DOOR_PLAY_SCENE_TRANSITION, ((doorActor->params >> 7) & 7) == 3, doorActor)) { + if (GameInteractor_Should(VB_DOOR_PLAY_SCENE_TRANSITION, ((doorActor->params >> 7) & 7) == 3, + doorActor)) { checkPos.x = doorActor->world.pos.x - (sp6C * sp74); checkPos.y = doorActor->world.pos.y + 10.0f; checkPos.z = doorActor->world.pos.z - (sp6C * sp78); @@ -5438,15 +5516,15 @@ s32 Player_ActionHandler_1(Player* this, PlayState* play) { play->transiActorCtx.list[(u16)doorActor->params >> 10] .sides[(doorDirection > 0) ? 0 : 1] .effects, - 0, 38.0f * sInvWaterSpeedFactor, 26.0f * sInvWaterSpeedFactor, 10.0f * sInvWaterSpeedFactor); + 0, 38.0f * sInvWaterSpeedFactor, 26.0f * sInvWaterSpeedFactor, + 10.0f * sInvWaterSpeedFactor); } } } if ((this->doorType != PLAYER_DOORTYPE_FAKE) && (doorActor->category == ACTORCAT_DOOR)) { - frontRoom = play->transiActorCtx.list[(u16)doorActor->params >> 10] - .sides[(doorDirection > 0) ? 0 : 1] - .room; + frontRoom = + play->transiActorCtx.list[(u16)doorActor->params >> 10].sides[(doorDirection > 0) ? 0 : 1].room; if ((frontRoom >= 0) && (frontRoom != play->roomCtx.curRoom.num)) { func_8009728C(play, &play->roomCtx, frontRoom); @@ -5540,7 +5618,8 @@ void func_8083A0F4(PlayState* play, Player* this) { this->interactRangeActor->parent = &this->actor; Player_SetupAction(play, this, Player_Action_8084F608, 0); this->stateFlags1 |= PLAYER_STATE1_IN_CUTSCENE; - if (!CVarGetInteger(CVAR_ENHANCEMENT("PersistentMasks"), 0) || !CVarGetInteger(CVAR_ENHANCEMENT("AdultMasks"), 0)) { + if (!CVarGetInteger(CVAR_ENHANCEMENT("PersistentMasks"), 0) || + !CVarGetInteger(CVAR_ENHANCEMENT("AdultMasks"), 0)) { gSaveContext.ship.maskMemory = PLAYER_MASK_NONE; } } else { @@ -5618,7 +5697,8 @@ void func_8083A434(PlayState* play, Player* this) { if (this->getItemId == GI_HEART_CONTAINER_2) { this->av2.actionVar2 = 20; - } else if (this->getItemId >= 0 || (this->getItemEntry.objectId != OBJECT_INVALID && this->getItemEntry.getItemId >= 0)) { + } else if (this->getItemId >= 0 || + (this->getItemEntry.objectId != OBJECT_INVALID && this->getItemEntry.getItemId >= 0)) { this->av2.actionVar2 = 1; } else { this->getItemId = -this->getItemId; @@ -5754,7 +5834,8 @@ void func_8083AA10(Player* this, PlayState* play) { this->fallDistance = this->fallStartHeight - (s32)this->actor.world.pos.y; - if (!(this->stateFlags1 & (PLAYER_STATE1_IN_WATER | PLAYER_STATE1_IN_CUTSCENE)) && !(this->actor.bgCheckFlags & 1)) { + if (!(this->stateFlags1 & (PLAYER_STATE1_IN_WATER | PLAYER_STATE1_IN_CUTSCENE)) && + !(this->actor.bgCheckFlags & 1)) { if (!func_80838FB8(play, this)) { if (sPrevFloorProperty == 8) { this->actor.world.pos.x = this->actor.prevPos.x; @@ -5784,9 +5865,9 @@ void func_8083AA10(Player* this, PlayState* play) { this->floorSfxOffset = this->prevFloorSfxOffset; - if ((this->actor.bgCheckFlags & 4) && !(this->stateFlags1 & PLAYER_STATE1_IN_WATER) && (sPrevFloorProperty != 6) && - (sPrevFloorProperty != 9) && (sYDistToFloor > 20.0f) && (this->meleeWeaponState == 0) && (ABS(sp5C) < 0x2000) && - (this->linearVelocity > 3.0f)) { + if ((this->actor.bgCheckFlags & 4) && !(this->stateFlags1 & PLAYER_STATE1_IN_WATER) && + (sPrevFloorProperty != 6) && (sPrevFloorProperty != 9) && (sYDistToFloor > 20.0f) && + (this->meleeWeaponState == 0) && (ABS(sp5C) < 0x2000) && (this->linearVelocity > 3.0f)) { if ((sPrevFloorProperty == 11) && !(this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR)) { @@ -5824,7 +5905,8 @@ s32 func_8083AD4C(PlayState* play, Player* this) { if (func_8002DD6C(this)) { bool shouldUseBowCamera = LINK_IS_ADULT; - if(CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) { + if (CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || + CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) { shouldUseBowCamera = this->heldItemAction != PLAYER_IA_SLINGSHOT; } @@ -5833,7 +5915,7 @@ s32 func_8083AD4C(PlayState* play, Player* this) { // #region SOH [Enhancement] if (CVarGetInteger(CVAR_ENHANCEMENT("BoomerangFirstPerson"), 0)) { camMode = CAM_MODE_FIRSTPERSON; - // #endregion + // #endregion } else { camMode = CAM_MODE_BOOMERANG; } @@ -5886,6 +5968,86 @@ void func_8083AE40(Player* this, s16 objectId) { } } +// CUSTOM +void ItemSpawnGlider(PlayState* play, Player* this) { + Actor* spawnedActor; + + if (this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) { + lusprintf(__FILE__, __LINE__, 2, "Putting away glider"); + Player_PutAwayHeldItem(play, this); + return; + } + lusprintf(__FILE__, __LINE__, 2, "Spawning glider"); + spawnedActor = + Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_GLIDER, this->actor.world.pos.x, + this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, 0); + + this->interactRangeActor = spawnedActor; + this->heldActor = spawnedActor; + this->getItemId = GI_NONE; + this->getItemEntry = (GetItemEntry)GET_ITEM_NONE; + this->unk_3BC.y = spawnedActor->shape.rot.y - this->actor.shape.rot.y; + this->stateFlags1 |= PLAYER_STATE1_CARRYING_ACTOR; + lusprintf(__FILE__, __LINE__, 2, "Picked up glider"); +} + +void DespawnHeldGlider(PlayState* play, Player* this) { + lusprintf(__FILE__, __LINE__, 2, "Despawning glider: %d", this->heldActor->id); + Actor* heldActor = this->heldActor; + if (heldActor->id == ACTOR_EN_GLIDER) { + lusprintf(__FILE__, __LINE__, 2, "Despawning Glider"); + // heldActor->scale = (Vec3f){ 0.0f, 0.0f, 0.0f }; + // func_80834644(play, this); + Player_FinishItemChange(play, this); + this->glideResetTimer = 5; + this->isGliding = false; + } +} + +s32 Glide(PlayState* play, Player* this) { + s32 nextAnimType; + this->personalUpdraftTimer = 0; + lusprintf(__FILE__, __LINE__, 2, "Glide"); + + if (this->numJumps == 0) { + lusprintf(__FILE__, __LINE__, 2, "First Jump"); + func_80838940(this, gPlayerAnim_link_normal_run_jump, 6.7f, play, NA_SE_VO_LI_AUTO_JUMP); // First Jump + } else if ((this->numJumps >= 1) & (this->glideResetTimer == 0)) { + lusprintf(__FILE__, __LINE__, 2, "Second Jump"); + this->nextModelGroup = Player_ActionToModelGroup(this, PLAYER_IA_GLIDER); + nextAnimType = gPlayerModelTypes[this->nextModelGroup][PLAYER_MODELGROUPENTRY_ANIM]; + lusprintf(__FILE__, __LINE__, 2, "heldItemId %d", this->heldItemId); + lusprintf(__FILE__, __LINE__, 2, "heldItemAction %d", this->heldItemAction); + + if ((this->heldItemAction >= 0) && (ITEM_GLIDER != this->heldItemId) && + (sItemChangeTypes[gPlayerModelTypes[this->modelGroup][PLAYER_MODELGROUPENTRY_ANIM]][nextAnimType] != + PLAYER_ITEM_CHG_0)) { + lusprintf(__FILE__, __LINE__, 2, "Changing to glider"); + this->heldItemId = ITEM_GLIDER; + this->stateFlags1 |= PLAYER_STATE1_START_CHANGING_HELD_ITEM; + } else { + Player_DestroyHookshot(this); + Player_DetachHeldActor(play, this); + lusprintf(__FILE__, __LINE__, 2, "Play should now hold the glider"); + Player_InitItemActionWithAnim(play, this, PLAYER_IA_GLIDER); + this->isGliding = true; + } + + if (this->landedAfterGliding) { + lusprintf(__FILE__, __LINE__, 2, "Landed after gliding"); + this->landedAfterGliding = false; + this->actor.velocity.y += 8.0f; + if (this->actor.velocity.y >= 4.0f) + this->actor.velocity.y = 4.0f; + } else { + lusprintf(__FILE__, __LINE__, 2, "Not landed after gliding"); + this->actor.velocity.y += 2.0f; + if (this->actor.velocity.y >= 0.0f) + this->actor.velocity.y = 0.0f; + } + } +} + void func_8083AF44(PlayState* play, Player* this, s32 magicSpell) { Player_SetupActionPreserveItemAction(play, this, Player_Action_808507F4, 0); @@ -5917,8 +6079,8 @@ void func_8083AF44(PlayState* play, Player* this, s32 magicSpell) { } void func_8083B010(Player* this) { - this->actor.focus.rot.x = this->actor.focus.rot.z = this->headLimbRot.x = this->headLimbRot.y = this->headLimbRot.z = this->upperLimbRot.x = - this->upperLimbRot.y = this->upperLimbRot.z = 0; + this->actor.focus.rot.x = this->actor.focus.rot.z = this->headLimbRot.x = this->headLimbRot.y = + this->headLimbRot.z = this->upperLimbRot.x = this->upperLimbRot.y = this->upperLimbRot.z = 0; this->actor.focus.rot.y = this->actor.shape.rot.y; } @@ -6008,7 +6170,8 @@ s32 Player_ActionHandler_13(Player* this, PlayState* play) { func_8083AE40(this, giEntry.objectId); } - this->stateFlags1 |= PLAYER_STATE1_TALKING | PLAYER_STATE1_IN_ITEM_CS | PLAYER_STATE1_IN_CUTSCENE; + this->stateFlags1 |= + PLAYER_STATE1_TALKING | PLAYER_STATE1_IN_ITEM_CS | PLAYER_STATE1_IN_CUTSCENE; if (sp2C >= 0) { sp2C = sp2C + 1; @@ -6048,7 +6211,8 @@ s32 Player_ActionHandler_13(Player* this, PlayState* play) { this->exchangeItemId = sp2C; if (this->av1.actionVar1 < 0) { - Player_AnimChangeOnceMorph(play, this, GET_PLAYER_ANIM(PLAYER_ANIMGROUP_check, this->modelAnimType)); + Player_AnimChangeOnceMorph(play, this, + GET_PLAYER_ANIM(PLAYER_ANIMGROUP_check, this->modelAnimType)); } else { Player_AnimPlayOnce(play, this, D_80854548[this->av1.actionVar1]); } @@ -6119,7 +6283,7 @@ s32 Player_ActionHandler_Talk(Player* this, PlayState* play) { canTalkToLockOnWithCUp = (lockOnActor != NULL) && (CHECK_FLAG_ALL(lockOnActor->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_TALK_WITH_C_UP) || - (lockOnActor->naviEnemyId != 0xFF)); + (lockOnActor->naviEnemyId != 0xFF)); if (canTalkToLockOnWithCUp || (this->naviTextId != 0)) { // If `naviTextId` is negative and outside the 0x2XX range, talk to Navi instantly @@ -6144,14 +6308,16 @@ s32 Player_ActionHandler_Talk(Player* this, PlayState* play) { if ((talkOfferActor != NULL) || (cUpTalkActor != NULL)) { if ((lockOnActor == NULL) || (lockOnActor == talkOfferActor) || (lockOnActor == cUpTalkActor)) { if (!(this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) || - ((this->heldActor != NULL) && (forceTalkToNavi || (talkOfferActor == this->heldActor) || (cUpTalkActor == this->heldActor) || - ((talkOfferActor != NULL) && (talkOfferActor->flags & ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED))))) { + ((this->heldActor != NULL) && + (forceTalkToNavi || (talkOfferActor == this->heldActor) || (cUpTalkActor == this->heldActor) || + ((talkOfferActor != NULL) && (talkOfferActor->flags & ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED))))) { if ((this->actor.bgCheckFlags & 1) || (this->stateFlags1 & PLAYER_STATE1_ON_HORSE) || (func_808332B8(this) && !(this->stateFlags2 & PLAYER_STATE2_UNDERWATER))) { if (talkOfferActor != NULL) { this->stateFlags2 |= PLAYER_STATE2_CAN_ACCEPT_TALK_OFFER; - if (CHECK_BTN_ALL(sControlInput->press.button, BTN_A) || (talkOfferActor->flags & ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED)) { + if (CHECK_BTN_ALL(sControlInput->press.button, BTN_A) || + (talkOfferActor->flags & ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED)) { cUpTalkActor = NULL; } else if (cUpTalkActor == NULL) { return 0; @@ -6163,7 +6329,9 @@ s32 Player_ActionHandler_Talk(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_NAVI_ALERT; } - if (!CHECK_BTN_ALL(sControlInput->press.button, CVarGetInteger(CVAR_ENHANCEMENT("NaviOnL"), 0) ? BTN_L : BTN_CUP) && !forceTalkToNavi) { + if (!CHECK_BTN_ALL(sControlInput->press.button, + CVarGetInteger(CVAR_ENHANCEMENT("NaviOnL"), 0) ? BTN_L : BTN_CUP) && + !forceTalkToNavi) { return 0; } @@ -6182,10 +6350,11 @@ s32 Player_ActionHandler_Talk(Player* this, PlayState* play) { // `sSavedCurrentMask` saves the current mask just before the current action runs on this frame. // This saved mask value is then restored just before starting a conversation. // - // This handles an edge case where a conversation is started on the same frame that a mask was taken on or off. - // Because Player updates early before most actors, the text ID being offered comes from the previous frame. - // If a mask was taken on or off the same frame this function runs, the wrong text will be used. - // This is especially important to prevent unwanted behavior with regards to mask trading. + // This handles an edge case where a conversation is started on the same frame that a mask was taken + // on or off. Because Player updates early before most actors, the text ID being offered comes from + // the previous frame. If a mask was taken on or off the same frame this function runs, the wrong + // text will be used. This is especially important to prevent unwanted behavior with regards to mask + // trading. this->currentMask = sSavedCurrentMask; Player_StartTalking(play, talkOfferActor); return true; @@ -6216,12 +6385,13 @@ s32 Player_ActionHandler_0(Player* this, PlayState* play) { return 1; } - if ((this->focusActor != NULL) && (CHECK_FLAG_ALL(this->focusActor->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_TALK_WITH_C_UP) || - (this->focusActor->naviEnemyId != 0xFF))) { + if ((this->focusActor != NULL) && + (CHECK_FLAG_ALL(this->focusActor->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_TALK_WITH_C_UP) || + (this->focusActor->naviEnemyId != 0xFF))) { this->stateFlags2 |= PLAYER_STATE2_NAVI_ALERT; - } else if ((this->naviTextId == 0 || CVarGetInteger(CVAR_ENHANCEMENT("NaviOnL"), 0)) && !Player_CheckHostileLockOn(this) && CHECK_BTN_ALL(sControlInput->press.button, BTN_CUP) && - (YREG(15) != 0x10) && - (YREG(15) != 0x20) && !func_8083B8F4(this, play)) { + } else if ((this->naviTextId == 0 || CVarGetInteger(CVAR_ENHANCEMENT("NaviOnL"), 0)) && + !Player_CheckHostileLockOn(this) && CHECK_BTN_ALL(sControlInput->press.button, BTN_CUP) && + (YREG(15) != 0x10) && (YREG(15) != 0x20) && !func_8083B8F4(this, play)) { Sfx_PlaySfxCentered(NA_SE_SY_ERROR); } @@ -6284,7 +6454,8 @@ s32 Player_TryRoll(Player* this, PlayState* play) { } void func_8083BCD0(Player* this, PlayState* play, s32 controlStickDirection) { - func_80838940(this, D_80853D4C[controlStickDirection][0], !(controlStickDirection & 1) ? 5.8f : 3.5f, play, NA_SE_VO_LI_SWORD_N); + func_80838940(this, D_80853D4C[controlStickDirection][0], !(controlStickDirection & 1) ? 5.8f : 3.5f, play, + NA_SE_VO_LI_SWORD_N); if (controlStickDirection) {} @@ -6498,8 +6669,8 @@ void func_8083C50C(Player* this) { s32 Player_ActionHandler_8(Player* this, PlayState* play) { if (CHECK_BTN_ALL(sControlInput->cur.button, BTN_B)) { - if (!(this->stateFlags1 & PLAYER_STATE1_SHIELDING) && (Player_GetMeleeWeaponHeld(this) != 0) && (this->unk_844 == 1) && - (this->heldItemAction != PLAYER_IA_DEKU_STICK)) { + if (!(this->stateFlags1 & PLAYER_STATE1_SHIELDING) && (Player_GetMeleeWeaponHeld(this) != 0) && + (this->unk_844 == 1) && (this->heldItemAction != PLAYER_IA_DEKU_STICK)) { if ((this->heldItemAction != PLAYER_IA_SWORD_BIGGORON) || (gSaveContext.swordHealth > 0.0f)) { func_808377DC(play, this); return 1; @@ -6604,8 +6775,8 @@ s32 func_8083C910(PlayState* play, Player* this, f32 arg2) { f32 sp28; sp28 = this->actor.world.pos.y; - if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &sp28, - &sp2C) != 0) { + if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &sp28, &sp2C) != + 0) { sp28 -= this->actor.world.pos.y; if (this->ageProperties->unk_24 <= sp28) { Player_SetupAction(play, this, Player_Action_8084D7C4, 0); @@ -6691,8 +6862,8 @@ void Player_SetupTurnInPlace(PlayState* play, Player* this, s16 yaw) { this->turnRate = 1200; this->turnRate *= sWaterSpeedFactor; // slow turn rate by half when in water - LinkAnimation_Change(play, &this->skelAnime, D_80853914[PLAYER_ANIMGROUP_45_turn][this->modelAnimType], 1.0f, - 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f); + LinkAnimation_Change(play, &this->skelAnime, D_80853914[PLAYER_ANIMGROUP_45_turn][this->modelAnimType], 1.0f, 0.0f, + 0.0f, ANIMMODE_LOOP, -6.0f); } void func_8083CE0C(Player* this, PlayState* play) { @@ -6799,22 +6970,26 @@ s32 func_8083D12C(PlayState* play, Player* this, Input* arg2) { Player_SetupAction(play, this, Player_Action_8084E1EC, 1); if (this->stateFlags1 & PLAYER_STATE1_GETTING_ITEM) { - this->stateFlags1 |= PLAYER_STATE1_GETTING_ITEM | PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_CUTSCENE; + this->stateFlags1 |= + PLAYER_STATE1_GETTING_ITEM | PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_CUTSCENE; } this->av2.actionVar2 = 2; } func_80832340(play, this); - // Skip take breath animation on surface if Link didn't grab an item while underwater and the setting is enabled - if (CVarGetInteger(CVAR_ENHANCEMENT("SkipSwimDeepEndAnim"), 0) && !(this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR)) { + // Skip take breath animation on surface if Link didn't grab an item while underwater and the setting is + // enabled + if (CVarGetInteger(CVAR_ENHANCEMENT("SkipSwimDeepEndAnim"), 0) && + !(this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR)) { int lastAnimFrame = Animation_GetLastFrame(&gPlayerAnim_link_swimer_swim_deep_end); LinkAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_swimer_swim_deep_end, 1.0f, - lastAnimFrame, lastAnimFrame, ANIMMODE_ONCE, -6.0f); + lastAnimFrame, lastAnimFrame, ANIMMODE_ONCE, -6.0f); } else { Player_AnimChangeOnceMorph(play, this, - (this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) ? &gPlayerAnim_link_swimer_swim_get - : &gPlayerAnim_link_swimer_swim_deep_end); + (this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) + ? &gPlayerAnim_link_swimer_swim_get + : &gPlayerAnim_link_swimer_swim_deep_end); } if (func_8083CFA8(play, this, this->actor.velocity.y, 500)) { @@ -6849,8 +7024,8 @@ void func_8083D36C(PlayState* play, Player* this) { } else { Player_SetupAction(play, this, Player_Action_8084D610, 1); Player_AnimChangeOnceMorph(play, this, - (this->actor.bgCheckFlags & 1) ? &gPlayerAnim_link_swimer_wait2swim_wait - : &gPlayerAnim_link_swimer_land2swim_wait); + (this->actor.bgCheckFlags & 1) ? &gPlayerAnim_link_swimer_wait2swim_wait + : &gPlayerAnim_link_swimer_land2swim_wait); } } @@ -6894,7 +7069,8 @@ void func_8083D53C(PlayState* play, Player* this) { func_8083D36C(play, this); return; } - } else if ((this->stateFlags1 & PLAYER_STATE1_IN_WATER) && (this->actor.yDistToWater < this->ageProperties->unk_24)) { + } else if ((this->stateFlags1 & PLAYER_STATE1_IN_WATER) && + (this->actor.yDistToWater < this->ageProperties->unk_24)) { if ((this->skelAnime.moveFlags == 0) && (this->currentBoots != PLAYER_BOOTS_IRON)) { Player_SetupTurnInPlace(play, this, this->actor.shape.rot.y); } @@ -7095,11 +7271,17 @@ void func_8083DFE0(Player* this, f32* arg1, s16* arg2) { } } - if (CVarGetInteger(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_VANILLA) == BUNNY_HOOD_FAST_AND_JUMP && this->currentMask == PLAYER_MASK_BUNNY) { + maxSpeed *= 4.0f; + + lusprintf(__FILE__, __LINE__, 2, "Velocity: %f", this->actor.velocity.x); + + if (CVarGetInteger(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_VANILLA) == BUNNY_HOOD_FAST_AND_JUMP && + this->currentMask == PLAYER_MASK_BUNNY) { maxSpeed *= 1.5f; - } - - if (CVarGetInteger(CVAR_SETTING("WalkModifier.Enabled"), 0) && !CVarGetInteger(CVAR_SETTING("WalkModifier.DoesntChangeJump"), 0)) { + } + + if (CVarGetInteger(CVAR_SETTING("WalkModifier.Enabled"), 0) && + !CVarGetInteger(CVAR_SETTING("WalkModifier.DoesntChangeJump"), 0)) { if (CVarGetInteger(CVAR_SETTING("WalkModifier.SpeedToggle"), 0)) { if (gWalkSpeedToggle1) { maxSpeed *= CVarGetFloat(CVAR_SETTING("WalkModifier.Mapping1"), 1.0f); @@ -7246,14 +7428,15 @@ void func_8083E4C4(PlayState* play, Player* this, GetItemEntry* giEntry) { if (!(giEntry->field & 0x80)) { Item_DropCollectible(play, &this->actor.world.pos, dropType | 0x8000); - if ((dropType != 4) && (dropType != 8) && (dropType != 9) && (dropType != 0xA) && (dropType != 0) && (dropType != 1) && (dropType != 2) && - (dropType != 0x14) && (dropType != 0x13)) { + if ((dropType != 4) && (dropType != 8) && (dropType != 9) && (dropType != 0xA) && (dropType != 0) && + (dropType != 1) && (dropType != 2) && (dropType != 0x14) && (dropType != 0x13)) { Item_Give(play, giEntry->itemId); } } else { Item_Give(play, giEntry->itemId); } - Sfx_PlaySfxCentered((this->getItemId < 0 || this->getItemEntry.getItemId < 0) ? NA_SE_SY_GET_BOXITEM : NA_SE_SY_GET_ITEM); + Sfx_PlaySfxCentered((this->getItemId < 0 || this->getItemEntry.getItemId < 0) ? NA_SE_SY_GET_BOXITEM + : NA_SE_SY_GET_ITEM); } s32 Player_ActionHandler_2(Player* this, PlayState* play) { @@ -7265,8 +7448,8 @@ s32 Player_ActionHandler_2(Player* this, PlayState* play) { return 1; } - if (iREG(67) || (((interactedActor = this->interactRangeActor) != NULL) && - func_8002D53C(play, &play->actorCtx.titleCtx))) { + if (iREG(67) || + (((interactedActor = this->interactRangeActor) != NULL) && func_8002D53C(play, &play->actorCtx.titleCtx))) { if (iREG(67) || (this->getItemId > GI_NONE)) { if (iREG(67)) { this->getItemId = iREG(68); @@ -7294,31 +7477,32 @@ s32 Player_ActionHandler_2(Player* this, PlayState* play) { return 1; } - // Show the cutscene for picking up an item. In vanilla, this happens in bombchu bowling alley (because getting bombchus need to show the cutscene) - // and whenever the player doesn't have the item yet. In rando, we're overruling this because we need to keep showing the cutscene - // because those items can be randomized and thus it's important to keep showing the cutscene. - uint8_t showItemCutscene = play->sceneNum == SCENE_BOMBCHU_BOWLING_ALLEY || Item_CheckObtainability(giEntry.itemId) == ITEM_NONE || IS_RANDO; + // Show the cutscene for picking up an item. In vanilla, this happens in bombchu bowling alley (because + // getting bombchus need to show the cutscene) and whenever the player doesn't have the item yet. In + // rando, we're overruling this because we need to keep showing the cutscene because those items can be + // randomized and thus it's important to keep showing the cutscene. + uint8_t showItemCutscene = play->sceneNum == SCENE_BOMBCHU_BOWLING_ALLEY || + Item_CheckObtainability(giEntry.itemId) == ITEM_NONE || IS_RANDO; // Only skip cutscenes for drops when they're items/consumables from bushes/rocks/enemies. - uint8_t isDropToSkip = - ( - interactedActor->id == ACTOR_EN_ITEM00 && - interactedActor->params != ITEM00_HEART_PIECE && - interactedActor->params != ITEM00_SMALL_KEY && - interactedActor->params != ITEM00_SOH_GIVE_ITEM_ENTRY && - interactedActor->params != ITEM00_SOH_GIVE_ITEM_ENTRY_GI - ) || - interactedActor->id == ACTOR_EN_KAREBABA || - interactedActor->id == ACTOR_EN_DEKUBABA; - - // Skip cutscenes from picking up consumables with "Fast Pickup Text" enabled, even when the player never picked it up before. - // But only for bushes/rocks/enemies because otherwise it can lead to softlocks in deku mask theatre and potentially other places. + uint8_t isDropToSkip = + (interactedActor->id == ACTOR_EN_ITEM00 && interactedActor->params != ITEM00_HEART_PIECE && + interactedActor->params != ITEM00_SMALL_KEY && + interactedActor->params != ITEM00_SOH_GIVE_ITEM_ENTRY && + interactedActor->params != ITEM00_SOH_GIVE_ITEM_ENTRY_GI) || + interactedActor->id == ACTOR_EN_KAREBABA || interactedActor->id == ACTOR_EN_DEKUBABA; + + // Skip cutscenes from picking up consumables with "Fast Pickup Text" enabled, even when the player + // never picked it up before. But only for bushes/rocks/enemies because otherwise it can lead to + // softlocks in deku mask theatre and potentially other places. uint8_t skipItemCutscene = CVarGetInteger(CVAR_ENHANCEMENT("FastDrops"), 0) && isDropToSkip; - // Same as above but for rando. Rando is different because we want to enable cutscenes for items that the player already has because - // those items could be a randomized item coming from scrubs, freestanding PoH's and keys. So we need to once again overrule - // this specifically for items coming from bushes/rocks/enemies when the player has already picked that item up. - uint8_t skipItemCutsceneRando = IS_RANDO && Item_CheckObtainability(giEntry.itemId) != ITEM_NONE && isDropToSkip; + // Same as above but for rando. Rando is different because we want to enable cutscenes for items that + // the player already has because those items could be a randomized item coming from scrubs, + // freestanding PoH's and keys. So we need to once again overrule this specifically for items coming + // from bushes/rocks/enemies when the player has already picked that item up. + uint8_t skipItemCutsceneRando = + IS_RANDO && Item_CheckObtainability(giEntry.itemId) != ITEM_NONE && isDropToSkip; // Show cutscene when picking up a item. if (showItemCutscene && !skipItemCutscene && !skipItemCutsceneRando) { @@ -7332,7 +7516,8 @@ s32 Player_ActionHandler_2(Player* this, PlayState* play) { func_80835EA4(play, 9); } - this->stateFlags1 |= PLAYER_STATE1_GETTING_ITEM | PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_CUTSCENE; + this->stateFlags1 |= + PLAYER_STATE1_GETTING_ITEM | PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_CUTSCENE; func_80832224(this); return 1; } @@ -7342,7 +7527,8 @@ s32 Player_ActionHandler_2(Player* this, PlayState* play) { this->getItemId = GI_NONE; this->getItemEntry = (GetItemEntry)GET_ITEM_NONE; } - } else if (CHECK_BTN_ALL(sControlInput->press.button, BTN_A) && !(this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) && + } else if (CHECK_BTN_ALL(sControlInput->press.button, BTN_A) && + !(this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) && !(this->stateFlags2 & PLAYER_STATE2_UNDERWATER)) { if (this->getItemId != GI_NONE) { GetItemEntry giEntry; @@ -7363,7 +7549,8 @@ s32 Player_ActionHandler_2(Player* this, PlayState* play) { if (GameInteractor_Should(VB_GIVE_ITEM_FROM_CHEST, true, chest)) { Player_SetupWaitForPutAway(play, this, func_8083A434); } - this->stateFlags1 |= PLAYER_STATE1_GETTING_ITEM | PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_CUTSCENE; + this->stateFlags1 |= + PLAYER_STATE1_GETTING_ITEM | PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_CUTSCENE; func_8083AE40(this, giEntry.objectId); this->actor.world.pos.x = @@ -7374,7 +7561,7 @@ s32 Player_ActionHandler_2(Player* this, PlayState* play) { func_80832224(this); bool vanillaPlaySlowChestCS = (giEntry.itemId != ITEM_NONE) && (giEntry.gi >= 0) && - (Item_CheckObtainability(giEntry.itemId) == ITEM_NONE); + (Item_CheckObtainability(giEntry.itemId) == ITEM_NONE); if (GameInteractor_Should(VB_PLAY_SLOW_CHEST_CS, vanillaPlaySlowChestCS, chest)) { Player_AnimPlayOnceAdjusted(play, this, this->ageProperties->unk_98); @@ -7390,7 +7577,8 @@ s32 Player_ActionHandler_2(Player* this, PlayState* play) { } if ((this->heldActor == NULL) || Player_HoldsHookshot(this)) { - if (GameInteractor_Should(VB_SHOW_MASTER_SWORD_TO_PLACE_IN_PEDESTAL, (interactedActor->id == ACTOR_BG_TOKI_SWD) && LINK_IS_ADULT)) { + if (GameInteractor_Should(VB_SHOW_MASTER_SWORD_TO_PLACE_IN_PEDESTAL, + (interactedActor->id == ACTOR_BG_TOKI_SWD) && LINK_IS_ADULT)) { s32 sp24 = this->itemAction; this->itemAction = PLAYER_IA_NONE; @@ -7444,10 +7632,10 @@ s32 Player_ActionHandler_9(Player* this, PlayState* play) { if (CVarGetInteger(CVAR_ENHANCEMENT("DpadEquips"), 0) != 0) { buttonsToCheck |= BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT; } - if (GameInteractor_Should(VB_THROW_OR_PUT_DOWN_HELD_ITEM, ( - (this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) && (this->heldActor != NULL) && - CHECK_BTN_ANY(sControlInput->press.button, buttonsToCheck) - ), sControlInput)) { + if (GameInteractor_Should(VB_THROW_OR_PUT_DOWN_HELD_ITEM, + ((this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) && (this->heldActor != NULL) && + CHECK_BTN_ANY(sControlInput->press.button, buttonsToCheck)), + sControlInput)) { if (!func_80835644(play, this, this->heldActor)) { if (!func_8083EAF0(this, this->heldActor)) { Player_SetupAction(play, this, Player_Action_808464B0, 1); @@ -7620,7 +7808,7 @@ s32 Player_TryEnteringCrawlspace(Player* this, PlayState* play, u32 interactWall // Perpendicular (sideways) XZ-Distance from player pos to crawlspace line // Uses y-component of crossproduct formula for the distance from a point to a line xVertex2 = ((this->actor.world.pos.x - xVertex1) * COLPOLY_GET_NORMAL(wallPoly->normal.z)) - - ((this->actor.world.pos.z - zVertex1) * COLPOLY_GET_NORMAL(wallPoly->normal.x)); + ((this->actor.world.pos.z - zVertex1) * COLPOLY_GET_NORMAL(wallPoly->normal.x)); if (fabsf(xVertex2) < 8.0f) { // Give do-action prompt to "Enter on A" for the crawlspace @@ -7647,7 +7835,7 @@ s32 Player_TryEnteringCrawlspace(Player* this, PlayState* play, u32 interactWall Animation_GetLastFrame(&gPlayerAnim_link_child_tunnel_start), ANIMMODE_ONCE, 0.0f); Player_StartAnimMovement(play, this, 0x9D); - // #endregion + // #endregion } else { Player_AnimPlayOnce(play, this, &gPlayerAnim_link_child_tunnel_start); Player_StartAnimMovement(play, this, 0x9D); @@ -7681,8 +7869,8 @@ s32 func_8083F360(PlayState* play, Player* this, f32 arg1, f32 arg2, f32 arg3, f sp60.z = this->actor.world.pos.z + (arg3 * yawCos); sp60.y = sp6C.y = this->actor.world.pos.y + arg1; - if (BgCheck_EntityLineTest1(&play->colCtx, &sp6C, &sp60, &sp54, &this->actor.wallPoly, true, false, false, - true, &wallBgId)) { + if (BgCheck_EntityLineTest1(&play->colCtx, &sp6C, &sp60, &sp54, &this->actor.wallPoly, true, false, false, true, + &wallBgId)) { wallPoly = this->actor.wallPoly; this->actor.bgCheckFlags |= 0x200; @@ -7744,7 +7932,7 @@ s32 Player_TryLeavingCrawlspace(Player* this, PlayState* play) { 0.0f); Player_StartAnimMovement(play, this, 0x9D); OnePointCutscene_Init(play, 9601, 999, NULL, MAIN_CAM); - // #endregion + // #endregion } else { Player_AnimPlayOnce(play, this, &gPlayerAnim_link_child_tunnel_end); Player_StartAnimMovement(play, this, 0x9D); @@ -7757,14 +7945,15 @@ s32 Player_TryLeavingCrawlspace(Player* this, PlayState* play) { if (CVarGetInteger(CVAR_ENHANCEMENT("CrawlSpeed"), 1) > 1) { LinkAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_child_tunnel_start, -1.0f * ((CVarGetInteger(CVAR_ENHANCEMENT("CrawlSpeed"), 1) + 1.0f) / 2.0f), - Animation_GetLastFrame(&gPlayerAnim_link_child_tunnel_start), 0.0f, ANIMMODE_ONCE, 0.0f); + Animation_GetLastFrame(&gPlayerAnim_link_child_tunnel_start), 0.0f, + ANIMMODE_ONCE, 0.0f); Player_StartAnimMovement(play, this, 0x9D); OnePointCutscene_Init(play, 9602, 999, NULL, MAIN_CAM); - // #endregion - } - else { + // #endregion + } else { LinkAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_child_tunnel_start, -1.0f, - Animation_GetLastFrame(&gPlayerAnim_link_child_tunnel_start), 0.0f, ANIMMODE_ONCE, 0.0f); + Animation_GetLastFrame(&gPlayerAnim_link_child_tunnel_start), 0.0f, + ANIMMODE_ONCE, 0.0f); Player_StartAnimMovement(play, this, 0x9D); OnePointCutscene_Init(play, 9602, 999, NULL, MAIN_CAM); } @@ -7794,14 +7983,16 @@ void func_8083F72C(Player* this, LinkAnimationHeader* anim, PlayState* play) { s32 Player_ActionHandler_5(Player* this, PlayState* play) { DynaPolyActor* wallPolyActor; - if (!(this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) && (this->actor.bgCheckFlags & 0x200) && (sShapeYawToTouchedWall < 0x3000)) { + if (!(this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) && (this->actor.bgCheckFlags & 0x200) && + (sShapeYawToTouchedWall < 0x3000)) { if (((this->linearVelocity > 0.0f) && func_8083EC18(this, play, sTouchedWallFlags)) || Player_TryEnteringCrawlspace(this, play, sTouchedWallFlags)) { return 1; } - if (!func_808332B8(this) && ((this->linearVelocity == 0.0f) || !(this->stateFlags2 & PLAYER_STATE2_DO_ACTION_CLIMB)) && + if (!func_808332B8(this) && + ((this->linearVelocity == 0.0f) || !(this->stateFlags2 & PLAYER_STATE2_DO_ACTION_CLIMB)) && (sTouchedWallFlags & 0x40) && (this->actor.bgCheckFlags & 1) && (this->yDistToLedge >= 39.0f)) { this->stateFlags2 |= PLAYER_STATE2_DO_ACTION_GRAB; @@ -7929,8 +8120,9 @@ s32 func_8083FD78(Player* this, f32* arg1, s16* arg2, PlayState* play) { } // #region SOH [Enhancement] - if (CVarGetInteger(CVAR_SETTING("Controls.RightStickAim"), 0) || !CVarGetInteger(CVAR_SETTING("Controls.InvertZAimingYAxis"), 1)) { - + if (CVarGetInteger(CVAR_SETTING("Controls.RightStickAim"), 0) || + !CVarGetInteger(CVAR_SETTING("Controls.InvertZAimingYAxis"), 1)) { + if (this->focusActor != NULL) { func_8083DB98(this, 1); } else { @@ -7951,11 +8143,13 @@ s32 func_8083FD78(Player* this, f32* arg1, s16* arg2, PlayState* play) { relStickY = sControlInput->rel.stick_y; } - Math_SmoothStepToS(&this->actor.focus.rot.x, - relStickY * (CVarGetInteger(CVAR_SETTING("Controls.InvertZAimingYAxis"), 1) ? 1 : -1) * 240.0f, 14, 4000, 30); + Math_SmoothStepToS( + &this->actor.focus.rot.x, + relStickY * (CVarGetInteger(CVAR_SETTING("Controls.InvertZAimingYAxis"), 1) ? 1 : -1) * 240.0f, 14, + 4000, 30); func_80836AB8(this, 1); } - // #endregion + // #endregion } else { if (this->focusActor != NULL) { func_8083DB98(this, 1); @@ -8063,7 +8257,8 @@ void func_8084029C(Player* this, f32 arg1) { if ((this->currentBoots == PLAYER_BOOTS_HOVER || (CVarGetInteger(CVAR_ENHANCEMENT("IvanCoopModeEnabled"), 0) && this->ivanFloating)) && !(this->actor.bgCheckFlags & 1) && - (this->hoverBootsTimer != 0 || (CVarGetInteger(CVAR_ENHANCEMENT("IvanCoopModeEnabled"), 0) && this->ivanFloating))) { + (this->hoverBootsTimer != 0 || + (CVarGetInteger(CVAR_ENHANCEMENT("IvanCoopModeEnabled"), 0) && this->ivanFloating))) { func_8002F8F0(&this->actor, NA_SE_PL_HOBBERBOOTS_LV - SFX_FLAG); } else if (func_8084021C(this->unk_868, arg1, 29.0f, 10.0f) || func_8084021C(this->unk_868, arg1, 29.0f, 24.0f)) { Player_PlaySteppingSfx(this, this->linearVelocity); @@ -8112,7 +8307,8 @@ void Player_Action_80840450(Player* this, PlayState* play) { Player_DecelerateToZero(this); if (!Player_TryActionHandlerList(play, this, sActionHandlerList1, true)) { - if (!Player_UpdateHostileLockOn(this) && (!Player_FriendlyLockOnOrParallel(this) || (func_80834B5C != this->upperActionFunc))) { + if (!Player_UpdateHostileLockOn(this) && + (!Player_FriendlyLockOnOrParallel(this) || (func_80834B5C != this->upperActionFunc))) { func_8083CF10(this, play); return; } @@ -8477,8 +8673,8 @@ void func_80841138(Player* this, PlayState* play) { temp1 = R_UPDATE_RATE * 0.5f; func_8084029C(this, REG(35) / 1000.0f); - LinkAnimation_LoadToJoint(play, &this->skelAnime, GET_PLAYER_ANIM(PLAYER_ANIMGROUP_back_walk, this->modelAnimType), - this->unk_868); + LinkAnimation_LoadToJoint(play, &this->skelAnime, + GET_PLAYER_ANIM(PLAYER_ANIMGROUP_back_walk, this->modelAnimType), this->unk_868); this->unk_864 += 1 * temp1; if (this->unk_864 >= 1.0f) { this->unk_864 = 1.0f; @@ -8489,8 +8685,8 @@ void func_80841138(Player* this, PlayState* play) { if (temp2 < 0.0f) { temp1 = 1.0f; func_8084029C(this, (REG(35) / 1000.0f) + ((REG(36) / 1000.0f) * this->linearVelocity)); - LinkAnimation_LoadToJoint(play, &this->skelAnime, GET_PLAYER_ANIM(PLAYER_ANIMGROUP_back_walk, this->modelAnimType), - this->unk_868); + LinkAnimation_LoadToJoint(play, &this->skelAnime, + GET_PLAYER_ANIM(PLAYER_ANIMGROUP_back_walk, this->modelAnimType), this->unk_868); } else { temp1 = (REG(37) / 1000.0f) * temp2; if (temp1 < 1.0f) { @@ -8499,8 +8695,8 @@ void func_80841138(Player* this, PlayState* play) { temp1 = 1.0f; func_8084029C(this, 1.2f + ((REG(38) / 1000.0f) * temp2)); } - LinkAnimation_LoadToMorph(play, &this->skelAnime, GET_PLAYER_ANIM(PLAYER_ANIMGROUP_back_walk, this->modelAnimType), - this->unk_868); + LinkAnimation_LoadToMorph(play, &this->skelAnime, + GET_PLAYER_ANIM(PLAYER_ANIMGROUP_back_walk, this->modelAnimType), this->unk_868); LinkAnimation_LoadToJoint(play, &this->skelAnime, &gPlayerAnim_link_normal_back_run, this->unk_868 * (16.0f / 29.0f)); } @@ -8616,8 +8812,10 @@ void Player_Action_808417FC(Player* this, PlayState* play) { void func_80841860(PlayState* play, Player* this) { f32 frame; // fake match? see Player_InitItemActionWithAnim - LinkAnimationHeader* sp38 = D_80853914[0][this->modelAnimType + PLAYER_ANIMGROUP_side_walkL * ARRAY_COUNT(D_80853914[0])]; - LinkAnimationHeader* sp34 = D_80853914[0][this->modelAnimType + PLAYER_ANIMGROUP_side_walkR * ARRAY_COUNT(D_80853914[0])]; + LinkAnimationHeader* sp38 = + D_80853914[0][this->modelAnimType + PLAYER_ANIMGROUP_side_walkL * ARRAY_COUNT(D_80853914[0])]; + LinkAnimationHeader* sp34 = + D_80853914[0][this->modelAnimType + PLAYER_ANIMGROUP_side_walkR * ARRAY_COUNT(D_80853914[0])]; this->skelAnime.animation = sp38; @@ -8748,11 +8946,11 @@ void func_80841CC4(Player* this, s32 arg1, PlayState* play) { if ((this->modelAnimType == PLAYER_ANIMTYPE_3) || ((this->unk_89C == 0) && (this->unk_6C4 <= 0.0f))) { if (arg1 == 0) { - LinkAnimation_LoadToJoint(play, &this->skelAnime, GET_PLAYER_ANIM(PLAYER_ANIMGROUP_walk, this->modelAnimType), - this->unk_868); + LinkAnimation_LoadToJoint(play, &this->skelAnime, + GET_PLAYER_ANIM(PLAYER_ANIMGROUP_walk, this->modelAnimType), this->unk_868); } else { - LinkAnimation_LoadToMorph(play, &this->skelAnime, GET_PLAYER_ANIM(PLAYER_ANIMGROUP_walk, this->modelAnimType), - this->unk_868); + LinkAnimation_LoadToMorph(play, &this->skelAnime, + GET_PLAYER_ANIM(PLAYER_ANIMGROUP_walk, this->modelAnimType), this->unk_868); } return; } @@ -8821,8 +9019,7 @@ void func_80841EE4(Player* this, PlayState* play) { func_80841CC4(this, 1, play); - LinkAnimation_LoadToJoint(play, &this->skelAnime, func_80833438(this), - this->unk_868 * (20.0f / 29.0f)); + LinkAnimation_LoadToJoint(play, &this->skelAnime, func_80833438(this), this->unk_868 * (20.0f / 29.0f)); } } @@ -8856,10 +9053,16 @@ void Player_Action_80842180(Player* this, PlayState* play) { } } - if (CVarGetInteger(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA && this->currentMask == PLAYER_MASK_BUNNY) { + // CUSTOM speed boost + if (CHECK_BTN_ALL(sControlInput->cur.button, BTN_L)) { + sp2C *= 2.0f; + } + + if (CVarGetInteger(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA && + this->currentMask == PLAYER_MASK_BUNNY) { sp2C *= 1.5f; } - + if (CVarGetInteger(CVAR_SETTING("WalkModifier.Enabled"), 0)) { if (CVarGetInteger(CVAR_SETTING("WalkModifier.SpeedToggle"), 0)) { if (gWalkSpeedToggle1) { @@ -8902,7 +9105,8 @@ void Player_Action_8084227C(Player* this, PlayState* play) { Player_GetMovementSpeedAndYaw(this, &sp2C, &sp2A, SPEED_MODE_LINEAR, play); if (!func_8083C484(this, &sp2C, &sp2A)) { - if ((Player_FriendlyLockOnOrParallel(this) && (sp2C != 0.0f) && (func_8083FD78(this, &sp2C, &sp2A, play) <= 0)) || + if ((Player_FriendlyLockOnOrParallel(this) && (sp2C != 0.0f) && + (func_8083FD78(this, &sp2C, &sp2A, play) <= 0)) || (!Player_FriendlyLockOnOrParallel(this) && (func_8083FC68(this, sp2C, sp2A) <= 0))) { func_80839F90(this, play); return; @@ -9056,7 +9260,8 @@ s32 func_808428D8(Player* this, PlayState* play) { } s32 func_80842964(Player* this, PlayState* play) { - return Player_ActionHandler_13(this, play) || Player_ActionHandler_Talk(this, play) || Player_ActionHandler_2(this, play); + return Player_ActionHandler_13(this, play) || Player_ActionHandler_Talk(this, play) || + Player_ActionHandler_2(this, play); } void Player_RequestQuake(PlayState* play, s32 speed, s32 y, s32 countdown) { @@ -9083,8 +9288,7 @@ s32 func_80842AC4(PlayState* play, Player* this) { if ((this->heldItemAction == PLAYER_IA_DEKU_STICK) && (this->unk_85C > 0.5f)) { if (GameInteractor_Should(VB_DEKU_STICK_BREAK, AMMO(ITEM_STICK) != 0)) { - EffectSsStick_Spawn(play, &this->bodyPartsPos[PLAYER_BODYPART_R_HAND], - this->actor.shape.rot.y + 0x8000); + EffectSsStick_Spawn(play, &this->bodyPartsPos[PLAYER_BODYPART_R_HAND], this->actor.shape.rot.y + 0x8000); this->unk_85C = 0.5f; func_80842A88(play, this); Player_PlaySfx(this, NA_SE_IT_WOODSTICK_BROKEN); @@ -9159,10 +9363,12 @@ s32 func_80842DF4(PlayState* play, Player* this) { if (this->meleeWeaponState > 0) { if (this->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) { - if (!(this->meleeWeaponQuads[0].base.atFlags & AT_BOUNCED) && !(this->meleeWeaponQuads[1].base.atFlags & AT_BOUNCED)) { + if (!(this->meleeWeaponQuads[0].base.atFlags & AT_BOUNCED) && + !(this->meleeWeaponQuads[1].base.atFlags & AT_BOUNCED)) { if (this->skelAnime.curFrame >= 2.0f) { - phi_f2 = Math_Vec3f_DistXYZAndStoreDiff(&this->meleeWeaponInfo[0].tip, &this->meleeWeaponInfo[0].base, &sp50); + phi_f2 = Math_Vec3f_DistXYZAndStoreDiff(&this->meleeWeaponInfo[0].tip, + &this->meleeWeaponInfo[0].base, &sp50); if (phi_f2 != 0.0f) { phi_f2 = (phi_f2 + 10.0f) / phi_f2; } @@ -9265,8 +9471,10 @@ void Player_Action_80843188(Player* this, PlayState* play) { s16 sp46; f32 sp40; - sp54 = sControlInput->rel.stick_y * 100 * (CVarGetInteger(CVAR_SETTING("Controls.InvertShieldAimingYAxis"), 1) ? 1 : -1); - sp50 = sControlInput->rel.stick_x * (CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0) ? 120 : -120) * (CVarGetInteger(CVAR_SETTING("Controls.InvertShieldAimingXAxis"), 0) ? -1 : 1); + sp54 = sControlInput->rel.stick_y * 100 * + (CVarGetInteger(CVAR_SETTING("Controls.InvertShieldAimingYAxis"), 1) ? 1 : -1); + sp50 = sControlInput->rel.stick_x * (CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0) ? 120 : -120) * + (CVarGetInteger(CVAR_SETTING("Controls.InvertShieldAimingXAxis"), 0) ? -1 : 1); sp4E = this->actor.shape.rot.y - Camera_GetInputDirYaw(GET_ACTIVE_CAM(play)); GameInteractor_ExecuteOnPlayerShieldControl(&sp50, &sp54); @@ -9345,7 +9553,8 @@ void Player_Action_808435C4(Player* this, PlayState* play) { if (this->av1.actionVar1 == 0) { sUpperBodyIsBusy = Player_UpdateUpperBody(this, play); - if ((func_80834B5C == this->upperActionFunc) || (Player_TryActionInterrupt(play, this, &this->upperSkelAnime, 4.0f) > 0)) { + if ((func_80834B5C == this->upperActionFunc) || + (Player_TryActionInterrupt(play, this, &this->upperSkelAnime, 4.0f) > 0)) { Player_SetupAction(play, this, Player_Action_80840450, 1); } } else { @@ -9410,8 +9619,8 @@ void Player_Action_8084377C(Player* this, PlayState* play) { } Player_AnimPlayOnce(play, this, - (this->yaw != this->actor.shape.rot.y) ? &gPlayerAnim_link_normal_front_downB - : &gPlayerAnim_link_normal_back_downB); + (this->yaw != this->actor.shape.rot.y) ? &gPlayerAnim_link_normal_front_downB + : &gPlayerAnim_link_normal_back_downB); Player_PlayVoiceSfx(this, NA_SE_VO_LI_FREEZE); } } @@ -9436,8 +9645,8 @@ void Player_Action_80843954(Player* this, PlayState* play) { } Player_AnimPlayOnceAdjusted(play, this, - (this->yaw != this->actor.shape.rot.y) ? &gPlayerAnim_link_normal_front_down_wake - : &gPlayerAnim_link_normal_back_down_wake); + (this->yaw != this->actor.shape.rot.y) ? &gPlayerAnim_link_normal_front_down_wake + : &gPlayerAnim_link_normal_back_down_wake); this->yaw = this->actor.shape.rot.y; } } @@ -9579,14 +9788,15 @@ s32 func_80843E64(PlayState* play, Player* this) { impactInfo = &D_80854600[impactIndex]; - if (Player_InflictDamageModified(play, impactInfo->damage * (1 << CVarGetInteger(CVAR_ENHANCEMENT("FallDamageMult"), 0)), - false)) { + if (Player_InflictDamageModified( + play, impactInfo->damage * (1 << CVarGetInteger(CVAR_ENHANCEMENT("FallDamageMult"), 0)), false)) { return -1; } Player_SetIntangibility(this, 40); Player_RequestQuake(play, 32967, 2, 30); - Player_RequestRumble(this, impactInfo->rumbleStrength, impactInfo->rumbleDuration, impactInfo->rumbleDecreaseRate, 0); + Player_RequestRumble(this, impactInfo->rumbleStrength, impactInfo->rumbleDuration, + impactInfo->rumbleDecreaseRate, 0); Player_PlaySfx(this, NA_SE_PL_BODY_HIT); Player_PlayVoiceSfx(this, impactInfo->sfxId); @@ -9649,6 +9859,13 @@ void Player_Action_8084411C(Player* this, PlayState* play) { CHECK_BTN_ANY(sControlInput->press.button, buttonsToCheck)) { func_8084409C(play, this, this->linearVelocity + 2.0f, this->actor.velocity.y + 2.0f); } + + // CUSTOM + if (!func_80835644(play, this, heldActor) && (heldActor->id == ACTOR_EN_GLIDER) && + CHECK_BTN_ANY(sControlInput->press.button, buttonsToCheck)) { + lusprintf(__FILE__, __LINE__, 2, "Despawning Glider"); + DespawnHeldGlider(play, this); + } } LinkAnimation_Update(play, &this->skelAnime); @@ -9659,7 +9876,8 @@ void Player_Action_8084411C(Player* this, PlayState* play) { Player_UpdateUpperBody(this, play); - if (((this->stateFlags2 & PLAYER_STATE2_HOPPING) && (this->av1.actionVar1 == 2)) || !func_8083BBA0(this, play)) { + if (((this->stateFlags2 & PLAYER_STATE2_HOPPING) && (this->av1.actionVar1 == 2)) || + !func_8083BBA0(this, play)) { if (this->actor.velocity.y < 0.0f) { if (this->av2.actionVar2 >= 0) { if ((this->actor.bgCheckFlags & 8) || (this->av2.actionVar2 == 0) || (this->fallDistance > 0)) { @@ -9668,8 +9886,8 @@ void Player_Action_8084411C(Player* this, PlayState* play) { this->stateFlags1 &= ~PLAYER_STATE1_HOOKSHOT_FALLING; } - LinkAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_normal_landing, 1.0f, 0.0f, - 0.0f, ANIMMODE_ONCE, 8.0f); + LinkAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_normal_landing, 1.0f, 0.0f, 0.0f, + ANIMMODE_ONCE, 8.0f); this->av2.actionVar2 = -1; } } else { @@ -9680,8 +9898,10 @@ void Player_Action_8084411C(Player* this, PlayState* play) { if (!GameInteractor_GetDisableLedgeGrabsActive() && (this->actor.bgCheckFlags & 0x200) && !(this->stateFlags2 & PLAYER_STATE2_HOPPING) && - !(this->stateFlags1 & (PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_WATER)) && (this->linearVelocity > 0.0f)) { - if ((this->yDistToLedge >= 150.0f) && (this->controlStickDirections[this->controlStickDataIndex] == 0)) { + !(this->stateFlags1 & (PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_WATER)) && + (this->linearVelocity > 0.0f)) { + if ((this->yDistToLedge >= 150.0f) && + (this->controlStickDirections[this->controlStickDataIndex] == 0)) { func_8083EC18(this, play, sTouchedWallFlags); } else if ((this->ledgeClimbType >= 2) && (this->yDistToLedge < 150.0f) && (((this->actor.world.pos.y - this->actor.floorHeight) + this->yDistToLedge) > @@ -10212,7 +10432,8 @@ void Player_Action_WaitForPutAway(Player* this, PlayState* play) { // The other conditions listed will force the put away delay function to run instantly if carrying an actor. // This is necessary because the UpperAction for carrying actors will always return true while holding // the actor, so `!Player_UpdateUpperBody` could never pass. - if (((this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) && (this->heldActor != NULL) && (this->getItemId == GI_NONE)) || + if (((this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) && (this->heldActor != NULL) && + (this->getItemId == GI_NONE)) || !Player_UpdateUpperBody(this, play)) { this->afterPutAwayFunc(play, this); } @@ -10540,7 +10761,8 @@ void Player_Action_80846578(Player* this, PlayState* play) { Player_DecelerateToZero(this); if (LinkAnimation_Update(play, &this->skelAnime) || - ((this->skelAnime.curFrame >= 8.0f) && Player_GetMovementSpeedAndYaw(this, &sp34, &sp32, SPEED_MODE_CURVED, play))) { + ((this->skelAnime.curFrame >= 8.0f) && + Player_GetMovementSpeedAndYaw(this, &sp34, &sp32, SPEED_MODE_CURVED, play))) { func_80839F90(this, play); return; } @@ -10656,8 +10878,8 @@ void Player_StartMode_TimeTravel(PlayState* play, Player* this) { this->stateFlags1 |= PLAYER_STATE1_IN_CUTSCENE; Math_Vec3f_Copy(&this->actor.world.pos, &D_808546F4); this->yaw = this->actor.shape.rot.y = -0x8000; - LinkAnimation_Change(play, &this->skelAnime, this->ageProperties->unk_A0, 2.0f / 3.0f, 0.0f, 0.0f, - ANIMMODE_ONCE, 0.0f); + LinkAnimation_Change(play, &this->skelAnime, this->ageProperties->unk_A0, 2.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_ONCE, + 0.0f); Player_StartAnimMovement(play, this, 0x28F); if (LINK_IS_ADULT) { func_80846720(play, this, 0); @@ -10720,8 +10942,8 @@ void Player_InitCommon(Player* this, PlayState* play, FlexSkeletonHeader* skelHe this->yaw = this->actor.world.rot.y; func_80834644(play, this); - SkelAnime_InitLink(play, &this->skelAnime, skelHeader, GET_PLAYER_ANIM(PLAYER_ANIMGROUP_wait, this->modelAnimType), 9, - this->jointTable, this->morphTable, PLAYER_LIMB_MAX); + SkelAnime_InitLink(play, &this->skelAnime, skelHeader, GET_PLAYER_ANIM(PLAYER_ANIMGROUP_wait, this->modelAnimType), + 9, this->jointTable, this->morphTable, PLAYER_LIMB_MAX); this->skelAnime.baseTransl = sSkeletonBaseTransl; SkelAnime_InitLink(play, &this->upperSkelAnime, skelHeader, Player_GetIdleAnim(this), 9, this->upperJointTable, this->upperMorphTable, PLAYER_LIMB_MAX); @@ -10792,7 +11014,7 @@ void Player_Init(Actor* thisx, PlayState* play2) { Player_UseItem(play, this, ITEM_NONE); Player_SetEquipmentData(play, this); this->prevBoots = this->currentBoots; - //keep masks thru loading zones + // keep masks thru loading zones if (CVarGetInteger(CVAR_ENHANCEMENT("PersistentMasks"), 0)) { if (INV_CONTENT(ITEM_TRADE_CHILD) == ITEM_SOLD_OUT) { gSaveContext.ship.maskMemory = PLAYER_MASK_NONE; @@ -10838,10 +11060,11 @@ void Player_Init(Actor* thisx, PlayState* play2) { if ((gSaveContext.sceneSetupIndex < 4) && (gEntranceTable[((void)0, gSaveContext.entranceIndex) + ((void)0, gSaveContext.sceneSetupIndex)].field & ENTRANCE_INFO_DISPLAY_TITLE_CARD_FLAG) && - ((play->sceneNum != SCENE_DODONGOS_CAVERN) || (Flags_GetEventChkInf(EVENTCHKINF_ENTERED_DODONGOS_CAVERN))) && - ((play->sceneNum != SCENE_BOMBCHU_SHOP) || (Flags_GetEventChkInf(EVENTCHKINF_USED_DODONGOS_CAVERN_BLUE_WARP)))) { - TitleCard_InitPlaceName(play, &play->actorCtx.titleCtx, this->giObjectSegment, 160, 120, 144, - 24, 20); + ((play->sceneNum != SCENE_DODONGOS_CAVERN) || + (Flags_GetEventChkInf(EVENTCHKINF_ENTERED_DODONGOS_CAVERN))) && + ((play->sceneNum != SCENE_BOMBCHU_SHOP) || + (Flags_GetEventChkInf(EVENTCHKINF_USED_DODONGOS_CAVERN_BLUE_WARP)))) { + TitleCard_InitPlaceName(play, &play->actorCtx.titleCtx, this->giObjectSegment, 160, 120, 144, 24, 20); } } gSaveContext.showTitleCard = true; @@ -10993,7 +11216,8 @@ void Player_UpdateInterface(PlayState* play, Player* this) { } else if ((this->stateFlags2 & PLAYER_STATE2_DO_ACTION_CLIMB) || (!(this->stateFlags1 & PLAYER_STATE1_ON_HORSE) && (this->rideActor != NULL))) { doAction = DO_ACTION_CLIMB; - } else if ((this->stateFlags1 & PLAYER_STATE1_ON_HORSE) && !EN_HORSE_CHECK_4((EnHorse*)this->rideActor) && + } else if ((this->stateFlags1 & PLAYER_STATE1_ON_HORSE) && + !EN_HORSE_CHECK_4((EnHorse*)this->rideActor) && (Player_Action_8084D3E4 != this->actionFunc)) { if ((this->stateFlags2 & PLAYER_STATE2_CAN_ACCEPT_TALK_OFFER) && (this->talkActor != NULL)) { if (this->talkActor->category == ACTORCAT_NPC) { @@ -11011,7 +11235,8 @@ void Player_UpdateInterface(PlayState* play, Player* this) { doAction = DO_ACTION_CHECK; } } else if ((this->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LADDER)) || - ((this->stateFlags1 & PLAYER_STATE1_ON_HORSE) && (this->stateFlags2 & PLAYER_STATE2_DO_ACTION_DOWN))) { + ((this->stateFlags1 & PLAYER_STATE1_ON_HORSE) && + (this->stateFlags2 & PLAYER_STATE2_DO_ACTION_DOWN))) { doAction = DO_ACTION_DOWN; } else if (this->stateFlags2 & PLAYER_STATE2_DO_ACTION_ENTER) { doAction = DO_ACTION_ENTER; @@ -11108,7 +11333,8 @@ s32 Player_UpdateHoverBoots(Player* this) { } canHoverOnGround = - (this->currentBoots == PLAYER_BOOTS_HOVER || (CVarGetInteger(CVAR_ENHANCEMENT("IvanCoopModeEnabled"), 0) && this->ivanFloating)) && + (this->currentBoots == PLAYER_BOOTS_HOVER || + (CVarGetInteger(CVAR_ENHANCEMENT("IvanCoopModeEnabled"), 0) && this->ivanFloating)) && ((this->actor.yDistToWater >= 0.0f) || (func_80838144(sFloorType) >= 0) || func_8083816C(sFloorType)); if (canHoverOnGround && (this->actor.bgCheckFlags & 1) && (this->hoverBootsTimer != 0)) { @@ -11171,7 +11397,8 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { if (this->stateFlags1 & PLAYER_STATE1_FLOOR_DISABLED) { this->actor.bgCheckFlags &= ~1; flags = 0x38; - } else if ((this->stateFlags1 & PLAYER_STATE1_LOADING) && ((this->unk_A84 - (s32)this->actor.world.pos.y) >= 100)) { + } else if ((this->stateFlags1 & PLAYER_STATE1_LOADING) && + ((this->unk_A84 - (s32)this->actor.world.pos.y) >= 100)) { flags = 0x39; } else if (!(this->stateFlags1 & PLAYER_STATE1_LOADING) && ((Player_Action_80845EF8 == this->actionFunc) || (Player_Action_80845CA4 == this->actionFunc))) { @@ -11225,8 +11452,7 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { Audio_SetCodeReverb(SurfaceType_GetEcho(&play->colCtx, floorPoly, this->actor.floorBgId)); if (this->actor.floorBgId == BGCHECK_SCENE) { - func_80074CE8(play, - SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, this->actor.floorBgId)); + func_80074CE8(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, this->actor.floorBgId)); } else { DynaPoly_SetPlayerAbove(&play->colCtx, this->actor.floorBgId); } @@ -11259,7 +11485,8 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { sInteractWallCheckOffset.z = this->ageProperties->wallCheckRadius + 10.0f; if (!(this->stateFlags2 & PLAYER_STATE2_CRAWLING) && - Player_PosVsWallLineTest(play, this, &sInteractWallCheckOffset, &wallPoly, &wallBgId, &sInteractWallCheckResult)) { + Player_PosVsWallLineTest(play, this, &sInteractWallCheckOffset, &wallPoly, &wallBgId, + &sInteractWallCheckResult)) { this->actor.bgCheckFlags |= 0x200; if (this->actor.wallPoly != wallPoly) { this->actor.wallPoly = wallPoly; @@ -11272,14 +11499,15 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { sTouchedWallFlags = func_80041DB8(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId); - // conflicts arise from these two being enabled at once, and with ClimbEverything on, FixVineFall is redundant anyway + // conflicts arise from these two being enabled at once, and with ClimbEverything on, FixVineFall is redundant + // anyway if (CVarGetInteger(CVAR_ENHANCEMENT("FixVineFall"), 0) && !CVarGetInteger(CVAR_CHEAT("ClimbEverything"), 0)) { /* This fixes the "started climbing a wall and then immediately fell off" bug. - * The main idea is if a climbing wall is detected, double-check that it will - * still be valid once climbing begins by doing a second raycast with a small - * margin to make sure it still hits a climbable poly. Then update the flags - * in sTouchedWallFlags again and proceed as normal. - */ + * The main idea is if a climbing wall is detected, double-check that it will + * still be valid once climbing begins by doing a second raycast with a small + * margin to make sure it still hits a climbable poly. Then update the flags + * in sTouchedWallFlags again and proceed as normal. + */ if (sTouchedWallFlags & 8) { Vec3f checkPosA; Vec3f checkPosB; @@ -11288,18 +11516,18 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { s32 hitWall; /* Angle the raycast slightly out towards the side based on the angle of - * attack the player takes coming at the climb wall. This is necessary because - * the player's XZ position actually wobbles very slightly while climbing - * due to small rounding errors in the sin/cos lookup tables. This wobble - * can cause wall checks while climbing to be slightly left or right of - * the wall check to start the climb. By adding this buffer it accounts for - * any possible wobble. The end result is the player has to be further than - * some epsilon distance from the edge of the climbing poly to actually - * start the climb. I divide it by 2 to make that epsilon slightly smaller, - * mainly for visuals. Using the full yawDiff leaves a noticeable gap on - * the edges that can't be climbed. But with the half distance it looks like - * the player is climbing right on the edge, and still works. - */ + * attack the player takes coming at the climb wall. This is necessary because + * the player's XZ position actually wobbles very slightly while climbing + * due to small rounding errors in the sin/cos lookup tables. This wobble + * can cause wall checks while climbing to be slightly left or right of + * the wall check to start the climb. By adding this buffer it accounts for + * any possible wobble. The end result is the player has to be further than + * some epsilon distance from the edge of the climbing poly to actually + * start the climb. I divide it by 2 to make that epsilon slightly smaller, + * mainly for visuals. Using the full yawDiff leaves a noticeable gap on + * the edges that can't be climbed. But with the half distance it looks like + * the player is climbing right on the edge, and still works. + */ yawCos = Math_CosS(this->actor.wallYaw - (yawDiff / 2) + 0x8000); yawSin = Math_SinS(this->actor.wallYaw - (yawDiff / 2) + 0x8000); checkPosA.x = this->actor.world.pos.x + (-20.0f * yawSin); @@ -11308,8 +11536,8 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { checkPosB.z = this->actor.world.pos.z + (50.0f * yawCos); checkPosB.y = checkPosA.y = this->actor.world.pos.y + 26.0f; - hitWall = BgCheck_EntityLineTest1(&play->colCtx, &checkPosA, &checkPosB, - &sInteractWallCheckResult, &wallPoly, true, false, false, true, &wallBgId); + hitWall = BgCheck_EntityLineTest1(&play->colCtx, &checkPosA, &checkPosB, &sInteractWallCheckResult, + &wallPoly, true, false, false, true, &wallBgId); if (hitWall) { this->actor.wallPoly = wallPoly; @@ -11359,7 +11587,8 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { f32 ceillingPosY; s32 wallYawDiff; - this->distToInteractWall = Math3D_UDistPlaneToPos(wallPolyNormalX, wallPolyNormalY, wallPolyNormalZ, wallPoly->dist, &this->actor.world.pos); + this->distToInteractWall = Math3D_UDistPlaneToPos(wallPolyNormalX, wallPolyNormalY, wallPolyNormalZ, + wallPoly->dist, &this->actor.world.pos); #define vLedgeCheckOffsetXZ float0 @@ -11374,12 +11603,14 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { if ((this->yDistToLedge < 18.0f) || BgCheck_EntityCheckCeiling(&play->colCtx, &ceillingPosY, &this->actor.world.pos, - (ledgePosY - this->actor.world.pos.y) + 20.0f, &poly, &bgId, &this->actor)) { + (ledgePosY - this->actor.world.pos.y) + 20.0f, &poly, &bgId, + &this->actor)) { this->yDistToLedge = 399.96002f; } else { sInteractWallCheckOffset.y = (ledgePosY + 5.0f) - this->actor.world.pos.y; - if (Player_PosVsWallLineTest(play, this, &sInteractWallCheckOffset, &poly, &bgId, &sInteractWallCheckResult) && + if (Player_PosVsWallLineTest(play, this, &sInteractWallCheckOffset, &poly, &bgId, + &sInteractWallCheckResult) && (wallYawDiff = this->actor.wallYaw - Math_Atan2S(poly->normal.z, poly->normal.x), ABS(wallYawDiff) < 0x4000) && !func_80041E18(&play->colCtx, poly, bgId)) { @@ -11448,7 +11679,8 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { sin = Math_SinS(this->actor.shape.rot.y); cos = Math_CosS(this->actor.shape.rot.y); - sFloorShapePitch = Math_Atan2S(1.0f, (-(floorPolyNormalX * sin) - (floorPolyNormalZ * cos)) * invFloorPolyNormalY); + sFloorShapePitch = + Math_Atan2S(1.0f, (-(floorPolyNormalX * sin) - (floorPolyNormalZ * cos)) * invFloorPolyNormalY); Player_HandleSlopes(play, this, floorPoly); } @@ -11508,7 +11740,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { } else { camMode = CAM_MODE_FOLLOWBOOMERANG; } - // #endregion + // #endregion } else { camMode = CAM_MODE_FOLLOWBOOMERANG; } @@ -11528,7 +11760,8 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { camMode = CAM_MODE_TARGET; } } else if (this->stateFlags1 & (PLAYER_STATE1_JUMPING | PLAYER_STATE1_CLIMBING_LADDER)) { - if ((Player_Action_80845668 == this->actionFunc) || (this->stateFlags1 & PLAYER_STATE1_CLIMBING_LADDER)) { + if ((Player_Action_80845668 == this->actionFunc) || + (this->stateFlags1 & PLAYER_STATE1_CLIMBING_LADDER)) { camMode = CAM_MODE_CLIMB; } else { camMode = CAM_MODE_JUMP; @@ -11726,19 +11959,21 @@ void Player_DetectRumbleSecrets(Player* this) { s16 PosY_VSOA; if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) != 0) { PosY_VSOA = CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosY"), 0) + Y_Margins_VSOA; - if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == ANCHOR_LEFT) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.UseMargins"), 0) != 0) { X_Margins_VSOA = Left_Margins; }; - PosX_VSOA = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosX"), 0) + X_Margins_VSOA); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == ANCHOR_RIGHT) { + PosX_VSOA = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosX"), 0) + + X_Margins_VSOA); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.UseMargins"), 0) != 0) { X_Margins_VSOA = Right_Margins; }; - PosX_VSOA = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosX"), 0) + X_Margins_VSOA); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == ANCHOR_NONE) { + PosX_VSOA = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosX"), 0) + + X_Margins_VSOA); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == ANCHOR_NONE) { PosX_VSOA = CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == HIDDEN) { + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == HIDDEN) { PosX_VSOA = -9999; } } else { @@ -11755,20 +11990,24 @@ void Player_DetectRumbleSecrets(Player* this) { OPEN_DISPS(gPlayState->state.gfxCtx); gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, stoneOfAgonyColor.r, stoneOfAgonyColor.g, stoneOfAgonyColor.b, DefaultIconA); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, stoneOfAgonyColor.r, stoneOfAgonyColor.g, stoneOfAgonyColor.b, + DefaultIconA); gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); if (this->unk_6A0 > 4000000.0f) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, stoneOfAgonyColor.r, stoneOfAgonyColor.g, stoneOfAgonyColor.b, 255); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, stoneOfAgonyColor.r, stoneOfAgonyColor.g, stoneOfAgonyColor.b, + 255); } else { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, stoneOfAgonyColor.r, stoneOfAgonyColor.g, stoneOfAgonyColor.b, DefaultIconA); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, stoneOfAgonyColor.r, stoneOfAgonyColor.g, stoneOfAgonyColor.b, + DefaultIconA); } if (temp == 0 || temp <= 0.1f) { /*Fail check, it is used to draw off the icon when link is standing out range but do not refresh unk_6A0. Also used to make a default value in my case.*/ - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, stoneOfAgonyColor.r, stoneOfAgonyColor.g, stoneOfAgonyColor.b, DefaultIconA); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, stoneOfAgonyColor.r, stoneOfAgonyColor.g, stoneOfAgonyColor.b, + DefaultIconA); } gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); gDPSetOtherMode(OVERLAY_DISP++, @@ -11789,9 +12028,11 @@ void Player_DetectRumbleSecrets(Player* this) { if (this->unk_6A0 > 4000000.0f) { this->unk_6A0 = 0.0f; - if (CVarGetInteger(CVAR_ENHANCEMENT("VisualAgony"), 0) && !this->stateFlags1 && !GameInteractor_NoUIActive()) { + if (CVarGetInteger(CVAR_ENHANCEMENT("VisualAgony"), 0) && !this->stateFlags1 && + !GameInteractor_NoUIActive()) { // This audio is placed here and not in previous CVar check to prevent ears ra.. :) - Audio_PlaySoundGeneral(NA_SE_SY_MESSAGE_WOMAN, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale); + Audio_PlaySoundGeneral(NA_SE_SY_MESSAGE_WOMAN, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale); } Player_RequestRumble(this, 120, 20, 10, 0); } @@ -11889,6 +12130,37 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { sControlInput = input; + // CUSTOM + if (this->glideResetTimer > 0) + this->glideResetTimer--; + if (this->actor.bgCheckFlags & 1) { + if (this->numJumps != 0) + this->meleeWeaponState = 0; + this->numJumps = 0; + this->landedAfterGliding = true; + if (this->isGliding) { + if (this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) { + DespawnHeldGlider(play, this); + } + this->isGliding = false; + this->glideResetTimer = 0; + } + } + + if (this->stateFlags1 & PLAYER_STATE1_CLIMBING_LADDER) { //1_21 //When climbing somthing - set to already jumped once + this->meleeWeaponState = 0; + this->numJumps = 1; + } + + if (this->stateFlags2 & PLAYER_STATE2_DISABLE_ROTATION_ALWAYS) { //2_6 //When hanging from a ledge- set to already jumped once + this->meleeWeaponState = 0; + this->numJumps = 1; + } + if (this->stateFlags1 & PLAYER_STATE1_IN_WATER) { + this->meleeWeaponState = 0; + this->numJumps = 1; + } + if (this->unk_A86 < 0) { this->unk_A86++; if (this->unk_A86 == 0) { @@ -11939,7 +12211,8 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { Player_UpdateBodyBurn(play, this); } - if ((this->stateFlags3 & PLAYER_STATE3_RESTORE_NAYRUS_LOVE) && (gSaveContext.nayrusLoveTimer != 0) && (gSaveContext.magicState == MAGIC_STATE_IDLE)) { + if ((this->stateFlags3 & PLAYER_STATE3_RESTORE_NAYRUS_LOVE) && (gSaveContext.nayrusLoveTimer != 0) && + (gSaveContext.magicState == MAGIC_STATE_IDLE)) { gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1; Player_SpawnMagicSpell(play, this, 1); this->stateFlags3 &= ~PLAYER_STATE3_RESTORE_NAYRUS_LOVE; @@ -12044,7 +12317,8 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { Actor_UpdateVelocityXZGravity(&this->actor); if ((this->pushedSpeed != 0.0f) && !Player_InCsMode(play) && - !(this->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_CLIMBING_LADDER)) && + !(this->stateFlags1 & + (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_CLIMBING_LADDER)) && (Player_Action_80845668 != this->actionFunc) && (Player_Action_808507F4 != this->actionFunc)) { this->actor.velocity.x += this->pushedSpeed * Math_SinS(this->pushedYaw); this->actor.velocity.z += this->pushedSpeed * Math_CosS(this->pushedYaw); @@ -12109,18 +12383,19 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { func_8083D53C(play, this); if ((this->actor.category == ACTORCAT_PLAYER) && (gSaveContext.health == 0)) { - if (this->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_CLIMBING_LADDER)) { + if (this->stateFlags1 & + (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_CLIMBING_LADDER)) { func_80832440(play, this); func_80837B9C(this, play); } else if ((this->actor.bgCheckFlags & 1) || (this->stateFlags1 & PLAYER_STATE1_IN_WATER)) { func_80836448(play, this, - func_808332B8(this) ? &gPlayerAnim_link_swimer_swim_down + func_808332B8(this) ? &gPlayerAnim_link_swimer_swim_down : (this->bodyShockTimer != 0) ? &gPlayerAnim_link_normal_electric_shock_end - : &gPlayerAnim_link_derth_rebirth); + : &gPlayerAnim_link_derth_rebirth); } } else { - if ((this->actor.parent == NULL) && - ((play->transitionTrigger == TRANS_TRIGGER_START) || (this->unk_A87 != 0) || !func_808382DC(this, play))) { + if ((this->actor.parent == NULL) && ((play->transitionTrigger == TRANS_TRIGGER_START) || + (this->unk_A87 != 0) || !func_808382DC(this, play))) { func_8083AA10(this, play); } else { this->fallStartHeight = this->actor.world.pos.y; @@ -12146,7 +12421,8 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { if (this->csAction != 0) { if ((this->csAction != 7) || - !(this->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_CLIMBING_LADDER | PLAYER_STATE1_DAMAGED))) { + !(this->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | + PLAYER_STATE1_CLIMBING_LADDER | PLAYER_STATE1_DAMAGED))) { this->unk_6AD = 3; } else if (Player_Action_CsAction != this->actionFunc) { func_80852944(play, this, NULL); @@ -12161,10 +12437,13 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { this->stateFlags2 &= ~(PLAYER_STATE2_CAN_ACCEPT_TALK_OFFER | PLAYER_STATE2_NAVI_ALERT); } - this->stateFlags1 &= ~(PLAYER_STATE1_SWINGING_BOTTLE | PLAYER_STATE1_READY_TO_FIRE | PLAYER_STATE1_CHARGING_SPIN_ATTACK | PLAYER_STATE1_SHIELDING); - this->stateFlags2 &= ~(PLAYER_STATE2_DO_ACTION_GRAB | PLAYER_STATE2_DO_ACTION_CLIMB | PLAYER_STATE2_FOOTSTEP | PLAYER_STATE2_DISABLE_ROTATION_Z_TARGET | PLAYER_STATE2_DISABLE_ROTATION_ALWAYS | - PLAYER_STATE2_GRABBING_DYNAPOLY | PLAYER_STATE2_FORCE_SAND_FLOOR_SOUND | PLAYER_STATE2_STATIONARY_LADDER | PLAYER_STATE2_FROZEN | - PLAYER_STATE2_DO_ACTION_ENTER | PLAYER_STATE2_DO_ACTION_DOWN | PLAYER_STATE2_REFLECTION); + this->stateFlags1 &= ~(PLAYER_STATE1_SWINGING_BOTTLE | PLAYER_STATE1_READY_TO_FIRE | + PLAYER_STATE1_CHARGING_SPIN_ATTACK | PLAYER_STATE1_SHIELDING); + this->stateFlags2 &= ~(PLAYER_STATE2_DO_ACTION_GRAB | PLAYER_STATE2_DO_ACTION_CLIMB | PLAYER_STATE2_FOOTSTEP | + PLAYER_STATE2_DISABLE_ROTATION_Z_TARGET | PLAYER_STATE2_DISABLE_ROTATION_ALWAYS | + PLAYER_STATE2_GRABBING_DYNAPOLY | PLAYER_STATE2_FORCE_SAND_FLOOR_SOUND | + PLAYER_STATE2_STATIONARY_LADDER | PLAYER_STATE2_FROZEN | PLAYER_STATE2_DO_ACTION_ENTER | + PLAYER_STATE2_DO_ACTION_DOWN | PLAYER_STATE2_REFLECTION); this->stateFlags3 &= ~PLAYER_STATE3_CHECK_FLOOR_WATER_COLLISION; func_80847298(this); @@ -12180,7 +12459,8 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { sUseHeldItem = sHeldItemButtonIsHeldDown = 0; sSavedCurrentMask = this->currentMask; - if (GameInteractor_Should(VB_EXECUTE_PLAYER_ACTION_FUNC, !(this->stateFlags3 & PLAYER_STATE3_PAUSE_ACTION_FUNC), this, input)) { + if (GameInteractor_Should(VB_EXECUTE_PLAYER_ACTION_FUNC, !(this->stateFlags3 & PLAYER_STATE3_PAUSE_ACTION_FUNC), + this, input)) { this->actionFunc(this, play); } @@ -12246,11 +12526,13 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { Collider_UpdateCylinder(&this->actor, &this->cylinder); if (!(this->stateFlags2 & PLAYER_STATE2_FROZEN)) { - if (!(this->stateFlags1 & (PLAYER_STATE1_DEAD | PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_ON_HORSE))) { + if (!(this->stateFlags1 & (PLAYER_STATE1_DEAD | PLAYER_STATE1_HANGING_OFF_LEDGE | + PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_ON_HORSE))) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->cylinder.base); } - if (!(this->stateFlags1 & (PLAYER_STATE1_DEAD | PLAYER_STATE1_DAMAGED)) && (this->invincibilityTimer <= 0)) { + if (!(this->stateFlags1 & (PLAYER_STATE1_DEAD | PLAYER_STATE1_DAMAGED)) && + (this->invincibilityTimer <= 0)) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->cylinder.base); if (this->invincibilityTimer < 0) { @@ -12297,15 +12579,16 @@ void Player_Update(Actor* thisx, PlayState* play) { if (Player_UpdateNoclip(this, play)) { if (gSaveContext.dogParams < 0) { // Disable object dependency to prevent losing dog in scenes other than market - if (Object_GetIndex(&play->objectCtx, OBJECT_DOG) < 0 && !CVarGetInteger(CVAR_ENHANCEMENT("DogFollowsEverywhere"), 0)) { + if (Object_GetIndex(&play->objectCtx, OBJECT_DOG) < 0 && + !CVarGetInteger(CVAR_ENHANCEMENT("DogFollowsEverywhere"), 0)) { gSaveContext.dogParams = 0; } else { gSaveContext.dogParams &= 0x7FFF; Player_GetRelativePosition(this, &this->actor.world.pos, &D_80854838, &sDogSpawnPos); dogParams = gSaveContext.dogParams; - dog = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_DOG, sDogSpawnPos.x, sDogSpawnPos.y, - sDogSpawnPos.z, 0, this->actor.shape.rot.y, 0, dogParams | 0x8000, true); + dog = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_DOG, sDogSpawnPos.x, sDogSpawnPos.y, sDogSpawnPos.z, + 0, this->actor.shape.rot.y, 0, dogParams | 0x8000, true); if (dog != NULL) { // Room -1 allows actor to cross between rooms, similar to Navi dog->room = CVarGetInteger(CVAR_ENHANCEMENT("DogFollowsEverywhere"), 0) ? -1 : 0; @@ -12331,7 +12614,8 @@ void Player_Update(Actor* thisx, PlayState* play) { } } - if (CVarGetInteger(CVAR_SETTING("WalkModifier.Enabled"), 0) && CVarGetInteger(CVAR_SETTING("WalkModifier.SpeedToggle"), 0)) { + if (CVarGetInteger(CVAR_SETTING("WalkModifier.Enabled"), 0) && + CVarGetInteger(CVAR_SETTING("WalkModifier.SpeedToggle"), 0)) { if (CHECK_BTN_ALL(sControlInput->press.button, BTN_CUSTOM_MODIFIER1)) { gWalkSpeedToggle1 = !gWalkSpeedToggle1; } @@ -12408,9 +12692,9 @@ void Player_Update(Actor* thisx, PlayState* play) { Player* player = GET_PLAYER(play); player->pushedSpeed = 3.0f; // Play fan sound (too annoying) - //func_8002F974(&player->actor, NA_SE_EV_WIND_TRAP - SFX_FLAG); + // func_8002F974(&player->actor, NA_SE_EV_WIND_TRAP - SFX_FLAG); } - + GameInteractor_ExecuteOnPlayerUpdate(); } @@ -12437,12 +12721,13 @@ void Player_DrawGameplay(PlayState* play, Player* this, s32 lod, Gfx* cullDList, gSPSegment(POLY_XLU_DISP++, 0x0C, cullDList); Player_DrawImpl(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, lod, - this->currentTunic, this->currentBoots, this->actor.shape.face, overrideLimbDraw, Player_PostLimbDrawGameplay, - this); + this->currentTunic, this->currentBoots, this->actor.shape.face, overrideLimbDraw, + Player_PostLimbDrawGameplay, this); if ((overrideLimbDraw == Player_OverrideLimbDrawGameplayDefault) && (this->currentMask != PLAYER_MASK_NONE)) { // Fixes a bug in vanilla where ice traps are rendered extremely large while wearing a bunny hood - if (CVarGetInteger(CVAR_GENERAL("FixIceTrapWithBunnyHood"), 1)) Matrix_Push(); + if (CVarGetInteger(CVAR_GENERAL("FixIceTrapWithBunnyHood"), 1)) + Matrix_Push(); Mtx* bunnyEarMtx = Graph_Alloc(play->state.gfxCtx, 2 * sizeof(Mtx)); if (this->currentMask == PLAYER_MASK_BUNNY) { @@ -12455,29 +12740,31 @@ void Player_DrawGameplay(PlayState* play, Player* this, s32 lod, Gfx* cullDList, earRot.x = sBunnyEarKinematics.rot.y + 0x3E2; earRot.y = sBunnyEarKinematics.rot.z + 0xDBE; earRot.z = sBunnyEarKinematics.rot.x - 0x348A; - Matrix_SetTranslateRotateYXZ(97.0f, -1203.0f - CVarGetFloat(CVAR_COSMETIC("BunnyHood.EarLength"), 0.0f), -240.0f - CVarGetFloat(CVAR_COSMETIC("BunnyHood.EarSpread"), 0.0f), &earRot); + Matrix_SetTranslateRotateYXZ(97.0f, -1203.0f - CVarGetFloat(CVAR_COSMETIC("BunnyHood.EarLength"), 0.0f), + -240.0f - CVarGetFloat(CVAR_COSMETIC("BunnyHood.EarSpread"), 0.0f), &earRot); MATRIX_TOMTX(bunnyEarMtx++); // Left ear earRot.x = sBunnyEarKinematics.rot.y - 0x3E2; earRot.y = -0xDBE - sBunnyEarKinematics.rot.z; earRot.z = sBunnyEarKinematics.rot.x - 0x348A; - Matrix_SetTranslateRotateYXZ(97.0f, -1203.0f - CVarGetFloat(CVAR_COSMETIC("BunnyHood.EarLength"), 0.0f), 240.0f + CVarGetFloat(CVAR_COSMETIC("BunnyHood.EarSpread"), 0.0f), &earRot); + Matrix_SetTranslateRotateYXZ(97.0f, -1203.0f - CVarGetFloat(CVAR_COSMETIC("BunnyHood.EarLength"), 0.0f), + 240.0f + CVarGetFloat(CVAR_COSMETIC("BunnyHood.EarSpread"), 0.0f), &earRot); MATRIX_TOMTX(bunnyEarMtx); } - if (this->currentMask != PLAYER_MASK_BUNNY || !CVarGetInteger(CVAR_ENHANCEMENT("HideBunnyHood"), 0)) { gSPDisplayList(POLY_OPA_DISP++, sMaskDlists[this->currentMask - 1]); } - if (CVarGetInteger(CVAR_GENERAL("FixIceTrapWithBunnyHood"), 1)) Matrix_Pop(); + if (CVarGetInteger(CVAR_GENERAL("FixIceTrapWithBunnyHood"), 1)) + Matrix_Pop(); } if ((this->currentBoots == PLAYER_BOOTS_HOVER || (CVarGetInteger(CVAR_ENHANCEMENT("IvanCoopModeEnabled"), 0) && this->ivanFloating)) && - !(this->actor.bgCheckFlags & 1) && - !(this->stateFlags1 & PLAYER_STATE1_ON_HORSE) && (this->hoverBootsTimer != 0)) { + !(this->actor.bgCheckFlags & 1) && !(this->stateFlags1 & PLAYER_STATE1_ON_HORSE) && + (this->hoverBootsTimer != 0)) { s32 sp5C; s32 hoverBootsTimer = this->hoverBootsTimer; @@ -12502,11 +12789,10 @@ void Player_DrawGameplay(PlayState* play, Player* this, s32 lod, Gfx* cullDList, this->actor.world.pos.z, &D_80854864); Matrix_Scale(4.0f, 4.0f, 4.0f, MTXMODE_APPLY); - gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(POLY_XLU_DISP++, 0x08, - Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 16, 32, 1, 0, - (play->gameplayFrames * -15) % 128, 16, 32)); + Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 16, 32, 1, 0, (play->gameplayFrames * -15) % 128, + 16, 32)); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 255, D_8085486C); gDPSetEnvColor(POLY_XLU_DISP++, 120, 90, 30, 128); gSPDisplayList(POLY_XLU_DISP++, gHoverBootsCircleDL); @@ -12566,8 +12852,8 @@ void Player_Draw(Actor* thisx, PlayState* play2) { if (this->invincibilityTimer > 0) { this->damageFlickerAnimCounter += CLAMP(50 - this->invincibilityTimer, 8, 40); - POLY_OPA_DISP = - Gfx_SetFog2(POLY_OPA_DISP, 255, 0, 0, 0, 0, 4000 - (s32)(Math_CosS(this->damageFlickerAnimCounter * 256) * 2000.0f)); + POLY_OPA_DISP = Gfx_SetFog2(POLY_OPA_DISP, 255, 0, 0, 0, 0, + 4000 - (s32)(Math_CosS(this->damageFlickerAnimCounter * 256) * 2000.0f)); } func_8002EBCC(&this->actor, play, 0); @@ -12621,12 +12907,11 @@ void Player_Draw(Actor* thisx, PlayState* play2) { f32 scale = (this->av1.actionVar1 >> 1) * 22.0f; gSPSegment(POLY_XLU_DISP++, 0x08, - Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, (0 - play->gameplayFrames) % 128, 32, 32, 1, - 0, (play->gameplayFrames * -2) % 128, 32, 32)); + Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, (0 - play->gameplayFrames) % 128, 32, 32, 1, 0, + (play->gameplayFrames * -2) % 128, 32, 32)); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); - gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, 255); gSPDisplayList(POLY_XLU_DISP++, gEffIceFragment3DL); } @@ -12657,12 +12942,17 @@ void Player_Destroy(Actor* thisx, PlayState* play) { ResourceMgr_UnregisterSkeleton(&this->upperSkelAnime); } -//first person manipulate player actor +// first person manipulate player actor s16 func_8084ABD8(PlayState* play, Player* this, s32 arg2, s16 arg3) { s32 temp1 = 0; s16 temp2 = 0; s16 temp3 = 0; - s8 invertXAxisMulti = ((CVarGetInteger(CVAR_SETTING("Controls.InvertAimingXAxis"), 0) && !CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0)) || (!CVarGetInteger(CVAR_SETTING("Controls.InvertAimingXAxis"), 0) && CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0))) ? -1 : 1; + s8 invertXAxisMulti = ((CVarGetInteger(CVAR_SETTING("Controls.InvertAimingXAxis"), 0) && + !CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0)) || + (!CVarGetInteger(CVAR_SETTING("Controls.InvertAimingXAxis"), 0) && + CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0))) + ? -1 + : 1; s8 invertYAxisMulti = CVarGetInteger(CVAR_SETTING("Controls.InvertAimingYAxis"), 1) ? 1 : -1; f32 xAxisMulti = CVarGetFloat(CVAR_SETTING("FirstPersonCameraSensitivity.X"), 1.0f); f32 yAxisMulti = CVarGetFloat(CVAR_SETTING("FirstPersonCameraSensitivity.Y"), 1.0f); @@ -12674,7 +12964,8 @@ s16 func_8084ABD8(PlayState* play, Player* this, s32 arg2, s16 arg3) { if (!CVarGetInteger(CVAR_SETTING("MoveInFirstPerson"), 0)) { temp2 += sControlInput->rel.stick_y * 240.0f * invertYAxisMulti * yAxisMulti; } - if (CVarGetInteger(CVAR_SETTING("Controls.RightStickAim"), 0) && fabsf(sControlInput->cur.right_stick_y) > 15.0f) { + if (CVarGetInteger(CVAR_SETTING("Controls.RightStickAim"), 0) && + fabsf(sControlInput->cur.right_stick_y) > 15.0f) { temp2 += sControlInput->cur.right_stick_y * 240.0f * invertYAxisMulti * yAxisMulti; } if (fabsf(sControlInput->cur.gyro_x) > 0.01f) { @@ -12692,7 +12983,8 @@ s16 func_8084ABD8(PlayState* play, Player* this, s32 arg2, s16 arg3) { if (!CVarGetInteger(CVAR_SETTING("MoveInFirstPerson"), 0)) { temp2 += sControlInput->rel.stick_x * -16.0f * invertXAxisMulti * xAxisMulti; } - if (CVarGetInteger(CVAR_SETTING("Controls.RightStickAim"), 0) && fabsf(sControlInput->cur.right_stick_x) > 15.0f) { + if (CVarGetInteger(CVAR_SETTING("Controls.RightStickAim"), 0) && + fabsf(sControlInput->cur.right_stick_x) > 15.0f) { temp2 += sControlInput->cur.right_stick_x * -16.0f * invertXAxisMulti * xAxisMulti; } if (fabsf(sControlInput->cur.gyro_y) > 0.01f) { @@ -12703,14 +12995,17 @@ s16 func_8084ABD8(PlayState* play, Player* this, s32 arg2, s16 arg3) { } else { // First person with weapon // Y Axis temp1 = (this->stateFlags1 & PLAYER_STATE1_ON_HORSE) ? 3500 : 14000; - + if (!CVarGetInteger(CVAR_SETTING("MoveInFirstPerson"), 0)) { temp3 += ((sControlInput->rel.stick_y >= 0) ? 1 : -1) * - (s32)((1.0f - Math_CosS(sControlInput->rel.stick_y * 200)) * 1500.0f) * invertYAxisMulti * yAxisMulti; + (s32)((1.0f - Math_CosS(sControlInput->rel.stick_y * 200)) * 1500.0f) * invertYAxisMulti * + yAxisMulti; } - if (CVarGetInteger(CVAR_SETTING("Controls.RightStickAim"), 0) && fabsf(sControlInput->cur.right_stick_y) > 15.0f) { + if (CVarGetInteger(CVAR_SETTING("Controls.RightStickAim"), 0) && + fabsf(sControlInput->cur.right_stick_y) > 15.0f) { temp3 += ((sControlInput->cur.right_stick_y >= 0) ? 1 : -1) * - (s32)((1.0f - Math_CosS(sControlInput->cur.right_stick_y * 200)) * 1500.0f) * invertYAxisMulti * yAxisMulti; + (s32)((1.0f - Math_CosS(sControlInput->cur.right_stick_y * 200)) * 1500.0f) * invertYAxisMulti * + yAxisMulti; } if (fabsf(sControlInput->cur.gyro_x) > 0.01f) { temp3 += (-sControlInput->cur.gyro_x) * 750.0f; @@ -12724,11 +13019,14 @@ s16 func_8084ABD8(PlayState* play, Player* this, s32 arg2, s16 arg3) { temp3 = 0; if (!CVarGetInteger(CVAR_SETTING("MoveInFirstPerson"), 0)) { temp3 = ((sControlInput->rel.stick_x >= 0) ? 1 : -1) * - (s32)((1.0f - Math_CosS(sControlInput->rel.stick_x * 200)) * -1500.0f) * invertXAxisMulti * xAxisMulti; + (s32)((1.0f - Math_CosS(sControlInput->rel.stick_x * 200)) * -1500.0f) * invertXAxisMulti * + xAxisMulti; } - if (CVarGetInteger(CVAR_SETTING("Controls.RightStickAim"), 0) && fabsf(sControlInput->cur.right_stick_x) > 15.0f) { + if (CVarGetInteger(CVAR_SETTING("Controls.RightStickAim"), 0) && + fabsf(sControlInput->cur.right_stick_x) > 15.0f) { temp3 += ((sControlInput->cur.right_stick_x >= 0) ? 1 : -1) * - (s32)((1.0f - Math_CosS(sControlInput->cur.right_stick_x * 200)) * -1500.0f) * invertXAxisMulti * xAxisMulti; + (s32)((1.0f - Math_CosS(sControlInput->cur.right_stick_x * 200)) * -1500.0f) * invertXAxisMulti * + xAxisMulti; } if (fabsf(sControlInput->cur.gyro_y) > 0.01f) { temp3 += (sControlInput->cur.gyro_y) * 750.0f * invertXAxisMulti; @@ -12739,7 +13037,10 @@ s16 func_8084ABD8(PlayState* play, Player* this, s32 arg2, s16 arg3) { if (CVarGetInteger(CVAR_SETTING("MoveInFirstPerson"), 0)) { f32 movementSpeed = LINK_IS_ADULT ? 9.0f : 8.25f; - if (CVarGetInteger(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA && this->currentMask == PLAYER_MASK_BUNNY) { + + lusprintf(__FILE__, __LINE__, 2, "Movement Speed: %f", movementSpeed); + if (CVarGetInteger(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA && + this->currentMask == PLAYER_MASK_BUNNY) { movementSpeed *= 1.5f; } @@ -12772,7 +13073,7 @@ s16 func_8084ABD8(PlayState* play, Player* this, s32 arg2, s16 arg3) { void func_8084AEEC(Player* this, f32* arg1, f32 arg2, s16 arg3) { f32 temp1; f32 temp2; - + // #region SOH [Enhancement] f32 swimMod = 1.0f; @@ -12783,7 +13084,8 @@ void func_8084AEEC(Player* this, f32* arg1, f32 arg2, s16 arg3) { } else if (gWalkSpeedToggle2) { swimMod *= CVarGetFloat(CVAR_SETTING("WalkModifier.SwimMapping2"), 1.0f); } - // sControlInput is NULL to prevent inputs while surfacing after obtaining an underwater item so we want to ignore it for that case + // sControlInput is NULL to prevent inputs while surfacing after obtaining an underwater item so we want to + // ignore it for that case } else if (sControlInput != NULL) { if (CHECK_BTN_ALL(sControlInput->cur.button, BTN_CUSTOM_MODIFIER1)) { swimMod *= CVarGetFloat(CVAR_SETTING("WalkModifier.SwimMapping1"), 1.0f); @@ -12797,7 +13099,7 @@ void func_8084AEEC(Player* this, f32* arg1, f32 arg2, s16 arg3) { if (*arg1 > temp2) { *arg1 = temp2; } - + if ((0.0f < temp1) && (temp1 < 10.0f)) { temp1 *= 6.0f; } else { @@ -12807,7 +13109,7 @@ void func_8084AEEC(Player* this, f32* arg1, f32 arg2, s16 arg3) { Math_AsymStepToF(arg1, arg2 * 0.8f * swimMod, temp1, (fabsf(*arg1) * 0.02f) + 0.05f); Math_ScaledStepToS(&this->yaw, arg3, 1600); - // #endregion + // #endregion } else { temp1 = this->skelAnime.curFrame - 10.0f; @@ -12830,8 +13132,8 @@ void func_8084AEEC(Player* this, f32* arg1, f32 arg2, s16 arg3) { } // #region SOH [Enhancement] -//Diving uses function func_8084AEEC to calculate changes both xz and y velocity (via func_8084DBC4) -//Provide original calculation for y velocity when swim speed mod is active +// Diving uses function func_8084AEEC to calculate changes both xz and y velocity (via func_8084DBC4) +// Provide original calculation for y velocity when swim speed mod is active void SurfaceWithoutSwimMod(Player* this, f32* arg1, f32 arg2, s16 arg3) { f32 temp1; f32 temp2; @@ -12941,8 +13243,9 @@ void Player_Action_8084B1D8(Player* this, PlayState* play) { } if ((this->csAction != 0) || (this->unk_6AD == 0) || (this->unk_6AD >= 4) || Player_UpdateHostileLockOn(this) || (this->focusActor != NULL) || !func_8083AD4C(play, this) || - (((this->unk_6AD == 2) && (CHECK_BTN_ANY(sControlInput->press.button, BTN_A | BTN_B | BTN_R) || - Player_FriendlyLockOnOrParallel(this) || (!func_8002DD78(this) && !func_808334B4(this)))) || + (((this->unk_6AD == 2) && + (CHECK_BTN_ANY(sControlInput->press.button, BTN_A | BTN_B | BTN_R) || Player_FriendlyLockOnOrParallel(this) || + (!func_8002DD78(this) && !func_808334B4(this)))) || ((this->unk_6AD == 1) && CHECK_BTN_ANY(sControlInput->press.button, buttonsToCheck)))) { func_8083C148(this, play); Sfx_PlaySfxCentered(NA_SE_SY_CAMERA_ZOOM_UP); @@ -12964,7 +13267,8 @@ s32 func_8084B3CC(PlayState* play, Player* this) { if (!func_8002DD6C(this) || Player_HoldsHookshot(this)) { s32 projectileItemToUse = ITEM_BOW; - if(CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) { + if (CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || + CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) { projectileItemToUse = LINK_IS_ADULT ? ITEM_BOW : ITEM_SLINGSHOT; } @@ -13058,7 +13362,8 @@ void Player_Action_8084B78C(Player* this, PlayState* play) { s16 sp32; s32 temp; - this->stateFlags2 |= PLAYER_STATE2_DO_ACTION_GRAB | PLAYER_STATE2_DISABLE_ROTATION_ALWAYS | PLAYER_STATE2_GRABBING_DYNAPOLY; + this->stateFlags2 |= + PLAYER_STATE2_DO_ACTION_GRAB | PLAYER_STATE2_DISABLE_ROTATION_ALWAYS | PLAYER_STATE2_GRABBING_DYNAPOLY; func_8083F524(play, this); if (LinkAnimation_Update(play, &this->skelAnime)) { @@ -13094,7 +13399,8 @@ void Player_Action_8084B898(Player* this, PlayState* play) { s16 sp32; s32 temp; - this->stateFlags2 |= PLAYER_STATE2_DO_ACTION_GRAB | PLAYER_STATE2_DISABLE_ROTATION_ALWAYS | PLAYER_STATE2_GRABBING_DYNAPOLY; + this->stateFlags2 |= + PLAYER_STATE2_DO_ACTION_GRAB | PLAYER_STATE2_DISABLE_ROTATION_ALWAYS | PLAYER_STATE2_GRABBING_DYNAPOLY; if (func_80832CB0(play, this, &gPlayerAnim_link_normal_pushing)) { this->av2.actionVar2 = 1; @@ -13145,7 +13451,8 @@ void Player_Action_8084B9E4(Player* this, PlayState* play) { Vec3f sp38; anim = GET_PLAYER_ANIM(PLAYER_ANIMGROUP_pulling, this->modelAnimType); - this->stateFlags2 |= PLAYER_STATE2_DO_ACTION_GRAB | PLAYER_STATE2_DISABLE_ROTATION_ALWAYS | PLAYER_STATE2_GRABBING_DYNAPOLY; + this->stateFlags2 |= + PLAYER_STATE2_DO_ACTION_GRAB | PLAYER_STATE2_DISABLE_ROTATION_ALWAYS | PLAYER_STATE2_GRABBING_DYNAPOLY; if (func_80832CB0(play, this, anim)) { this->av2.actionVar2 = 1; @@ -13179,8 +13486,7 @@ void Player_Action_8084B9E4(Player* this, PlayState* play) { sp44.x = this->actor.world.pos.x; sp44.z = this->actor.world.pos.z; sp44.y = sp5C.y; - if (!BgCheck_EntityLineTest1(&play->colCtx, &sp44, &sp5C, &sp38, &sp54, true, false, false, true, - &sp50)) { + if (!BgCheck_EntityLineTest1(&play->colCtx, &sp44, &sp5C, &sp38, &sp54, true, false, false, true, &sp50)) { func_8084B840(play, this, -2.0f); return; } @@ -13367,8 +13673,8 @@ void Player_Action_8084BF1C(Player* this, PlayState* play) { sp68 ^= 1; this->skelAnime.prevTransl = this->ageProperties->unk_62[sp68]; anim1 = this->ageProperties->unk_AC[sp68]; - LinkAnimation_Change(play, &this->skelAnime, anim1, -1.0f, Animation_GetLastFrame(anim1), - 0.0f, ANIMMODE_ONCE, 0.0f); + LinkAnimation_Change(play, &this->skelAnime, anim1, -1.0f, Animation_GetLastFrame(anim1), 0.0f, + ANIMMODE_ONCE, 0.0f); } } this->av2.actionVar2 ^= 1; @@ -13381,8 +13687,8 @@ void Player_Action_8084BF1C(Player* this, PlayState* play) { Player_AnimPlayOnce(play, this, anim2); } else { this->skelAnime.prevTransl = this->ageProperties->unk_86[this->av2.actionVar2]; - LinkAnimation_Change(play, &this->skelAnime, anim2, -1.0f, Animation_GetLastFrame(anim2), - 0.0f, ANIMMODE_ONCE, 0.0f); + LinkAnimation_Change(play, &this->skelAnime, anim2, -1.0f, Animation_GetLastFrame(anim2), 0.0f, + ANIMMODE_ONCE, 0.0f); } } else { this->stateFlags2 |= PLAYER_STATE2_STATIONARY_LADDER; @@ -13480,8 +13786,9 @@ void Player_Action_8084C760(Player* this, PlayState* play) { if (!Player_TryLeavingCrawlspace(this, play)) { // #region SOH [Enhancement] if (CVarGetInteger(CVAR_ENHANCEMENT("CrawlSpeed"), 1) > 1) { - this->linearVelocity = sControlInput->rel.stick_y * 0.03f * CVarGetInteger(CVAR_ENHANCEMENT("CrawlSpeed"), 1); - // #endregion + this->linearVelocity = + sControlInput->rel.stick_y * 0.03f * CVarGetInteger(CVAR_ENHANCEMENT("CrawlSpeed"), 1); + // #endregion } else { this->linearVelocity = sControlInput->rel.stick_y * 0.03f; } @@ -13575,8 +13882,8 @@ s32 func_8084C9BC(Player* this, PlayState* play) { Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084D3E4, 0); this->unk_878 = sp34 - rideActor->actor.world.pos.y; Player_AnimPlayOnce(play, this, - (this->mountSide < 0) ? &gPlayerAnim_link_uma_left_down - : &gPlayerAnim_link_uma_right_down); + (this->mountSide < 0) ? &gPlayerAnim_link_uma_left_down + : &gPlayerAnim_link_uma_right_down); return 1; } } @@ -14030,11 +14337,11 @@ void func_8084DBC4(PlayState* play, Player* this, f32 arg2) { Player_GetMovementSpeedAndYaw(this, &sp2C, &sp2A, SPEED_MODE_LINEAR, play); func_8084AEEC(this, &this->linearVelocity, sp2C * 0.5f, sp2A); - // Original implementation of func_8084AEEC (SurfaceWithoutSwimMod) to prevent velocity increases via swim mod which push Link into the air - // #region SOH [Enhancement] + // Original implementation of func_8084AEEC (SurfaceWithoutSwimMod) to prevent velocity increases via swim mod which + // push Link into the air #region SOH [Enhancement] if (CVarGetInteger(CVAR_SETTING("WalkModifier.Enabled"), 0)) { SurfaceWithoutSwimMod(this, &this->actor.velocity.y, arg2, this->yaw); - // #endregion + // #endregion } else { func_8084AEEC(this, &this->actor.velocity.y, arg2, this->yaw); } @@ -14139,8 +14446,7 @@ s32 func_8084DFF4(PlayState* play, Player* this) { this->av1.actionVar1 = 1; equipItem = giEntry.itemId; equipNow = CVarGetInteger(CVAR_ENHANCEMENT("AskToEquip"), 0) && giEntry.modIndex == MOD_NONE && - equipItem >= ITEM_SWORD_KOKIRI && equipItem <= ITEM_TUNIC_ZORA && - CHECK_AGE_REQ_ITEM(equipItem); + equipItem >= ITEM_SWORD_KOKIRI && equipItem <= ITEM_TUNIC_ZORA && CHECK_AGE_REQ_ITEM(equipItem); Message_StartTextbox(play, giEntry.textId, &this->actor); // RANDOTODO: Macro this boolean check. @@ -14163,13 +14469,14 @@ s32 func_8084DFF4(PlayState* play, Player* this) { if (IS_RANDO) { Audio_PlayFanfare_Rando(giEntry); } else if (((giEntry.itemId >= ITEM_RUPEE_GREEN) && (giEntry.itemId <= ITEM_RUPEE_RED)) || - ((giEntry.itemId >= ITEM_RUPEE_PURPLE) && (giEntry.itemId <= ITEM_RUPEE_GOLD)) || - (giEntry.itemId == ITEM_HEART)) { - Audio_PlaySoundGeneral(NA_SE_SY_GET_BOXITEM, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + ((giEntry.itemId >= ITEM_RUPEE_PURPLE) && (giEntry.itemId <= ITEM_RUPEE_GOLD)) || + (giEntry.itemId == ITEM_HEART)) { + Audio_PlaySoundGeneral(NA_SE_SY_GET_BOXITEM, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); } else { if ((giEntry.itemId == ITEM_HEART_CONTAINER) || ((giEntry.itemId == ITEM_HEART_PIECE_2) && - ((gSaveContext.inventory.questItems & 0xF0000000) == 0x40000000))) { + ((gSaveContext.inventory.questItems & 0xF0000000) == 0x40000000))) { temp1 = NA_BGM_HEART_GET | 0x900; } else { temp1 = temp2 = @@ -14181,7 +14488,7 @@ s32 func_8084DFF4(PlayState* play, Player* this) { if (IS_RANDO) { Audio_PlayFanfare_Rando(giEntry); } else if (giEntry.itemId == RG_DOUBLE_DEFENSE || giEntry.itemId == RG_MAGIC_SINGLE || - giEntry.itemId == RG_MAGIC_DOUBLE) { + giEntry.itemId == RG_MAGIC_DOUBLE) { Audio_PlayFanfare(NA_BGM_HEART_GET | 0x900); } else { // Just in case something weird happens with MOD_INDEX @@ -14191,9 +14498,7 @@ s32 func_8084DFF4(PlayState* play, Player* this) { // Just in case something weird happens with modIndex. Audio_PlayFanfare(NA_BGM_ITEM_GET | 0x900); } - } - else if (equipNow && Message_ShouldAdvanceSilent(play) && - Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) { + } else if (equipNow && Message_ShouldAdvanceSilent(play) && Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) { if (play->msgCtx.choiceIndex == 0) { // Equip now? Yes if (equipItem >= ITEM_SWORD_KOKIRI && equipItem <= ITEM_SWORD_BGS) { @@ -14227,8 +14532,8 @@ s32 func_8084DFF4(PlayState* play, Player* this) { } // Set unk_862 to 0 early to not have the game draw non-custom colored models for a split second. - // This unk is what the game normally uses to decide what item to draw when holding up an item above Link's head. - // Only do this when the item actually has a custom draw function. + // This unk is what the game normally uses to decide what item to draw when holding up an item above Link's + // head. Only do this when the item actually has a custom draw function. if (this->getItemEntry.drawFunc != NULL) { this->unk_862 = 0; } @@ -14330,7 +14635,8 @@ void Player_Action_8084E3C4(Player* this, PlayState* play) { func_8083A098(this, &gPlayerAnim_link_normal_okarina_end, play); } - this->stateFlags2 &= ~(PLAYER_STATE2_NEAR_OCARINA_ACTOR | PLAYER_STATE2_ATTEMPT_PLAY_FOR_ACTOR | PLAYER_STATE2_PLAY_FOR_ACTOR); + this->stateFlags2 &= + ~(PLAYER_STATE2_NEAR_OCARINA_ACTOR | PLAYER_STATE2_ATTEMPT_PLAY_FOR_ACTOR | PLAYER_STATE2_PLAY_FOR_ACTOR); this->unk_6A8 = NULL; } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_02) { gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex = sWarpSongEntrances[play->msgCtx.lastPlayedSong]; @@ -14615,7 +14921,8 @@ void Player_Action_SwingBottle(Player* this, PlayState* play) { } } - if (GameInteractor_Should(VB_BOTTLE_ACTOR, i < ARRAY_COUNT(sBottleCatchInfo), this->interactRangeActor)) { + if (GameInteractor_Should(VB_BOTTLE_ACTOR, i < ARRAY_COUNT(sBottleCatchInfo), + this->interactRangeActor)) { // 1 is added because `sBottleCatchInfo` does not have an entry for `BOTTLE_CATCH_NONE` this->av1.bottleCatchType = i + 1; @@ -14818,7 +15125,8 @@ void Player_Action_SlideOnSlope(Player* this, PlayState* play) { xzSpeedIncrStep = 1.0f; } - if (Math_AsymStepToF(&this->linearVelocity, xzSpeedTarget, xzSpeedIncrStep, xzSpeedDecrStep) && (xzSpeedTarget == 0)) { + if (Math_AsymStepToF(&this->linearVelocity, xzSpeedTarget, xzSpeedIncrStep, xzSpeedDecrStep) && + (xzSpeedTarget == 0)) { LinkAnimationHeader* slideAnimation; if (!this->av1.facingUpSlope) { @@ -14894,7 +15202,7 @@ void Player_Action_8084F88C(Player* this, PlayState* play) { play->nextEntranceIndex = ENTR_ICE_CAVERN_ENTRANCE; } else if (this->av1.actionVar1 < 0) { Play_TriggerRespawn(play); - // In ER, handle DMT and other special void outs to respawn from last entrance from grotto + // In ER, handle DMT and other special void outs to respawn from last entrance from grotto if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_ENTRANCES)) { Grotto_ForceRegularVoidOut(); } @@ -15217,8 +15525,10 @@ void Player_Action_808502D0(Player* this, PlayState* play) { Math_ScaledStepToS(&this->actor.focus.rot.x, Math_Atan2S(45.0f, sp2C), 800); func_80836AB8(this, true); - if ((((this->meleeWeaponAnimation == PLAYER_MWA_HAMMER_FORWARD) && LinkAnimation_OnFrame(&this->skelAnime, 7.0f)) || - ((this->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_FINISH) && LinkAnimation_OnFrame(&this->skelAnime, 2.0f))) && + if ((((this->meleeWeaponAnimation == PLAYER_MWA_HAMMER_FORWARD) && + LinkAnimation_OnFrame(&this->skelAnime, 7.0f)) || + ((this->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_FINISH) && + LinkAnimation_OnFrame(&this->skelAnime, 2.0f))) && (sp2C > -40.0f) && (sp2C < 40.0f)) { func_80842A28(play, this); EffectSsBlast_SpawnWhiteShockwave(play, &shockwavePos, &zeroVec, &zeroVec); @@ -15252,7 +15562,7 @@ void Player_Action_8085063C(Player* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { s32 respawnData = gSaveContext.respawn[RESPAWN_MODE_TOP].data; - if (play->msgCtx.choiceIndex == 0) { //Returns to FW + if (play->msgCtx.choiceIndex == 0) { // Returns to FW gSaveContext.respawnFlag = 3; play->transitionTrigger = TRANS_TRIGGER_START; play->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_TOP].entranceIndex; @@ -15261,7 +15571,7 @@ void Player_Action_8085063C(Player* this, PlayState* play) { return; } - if (play->msgCtx.choiceIndex == 1) { //Unsets FW + if (play->msgCtx.choiceIndex == 1) { // Unsets FW gSaveContext.respawn[RESPAWN_MODE_TOP].data = -respawnData; gSaveContext.fw.set = 0; Sfx_PlaySfxAtPos(&gSaveContext.respawn[RESPAWN_MODE_TOP].pos, NA_SE_PL_MAGIC_WIND_VANISH); @@ -15333,13 +15643,15 @@ void Player_Action_808507F4(Player* this, PlayState* play) { u8 isFastFarores = CVarGetInteger(CVAR_ENHANCEMENT("FastFarores"), 0) && this->itemAction == PLAYER_IA_FARORES_WIND; if (LinkAnimation_Update(play, &this->skelAnime)) { if (this->av1.actionVar1 < 0) { - if ((this->itemAction == PLAYER_IA_NAYRUS_LOVE) || isFastFarores || (gSaveContext.magicState == MAGIC_STATE_IDLE)) { + if ((this->itemAction == PLAYER_IA_NAYRUS_LOVE) || isFastFarores || + (gSaveContext.magicState == MAGIC_STATE_IDLE)) { func_80839FFC(this, play); func_8005B1A4(Play_GetCamera(play, 0)); } } else { if (this->av2.actionVar2 == 0) { - LinkAnimation_PlayOnceSetSpeed(play, &this->skelAnime, D_80854A58[this->av1.actionVar1], 0.83f * (isFastFarores ? 2 : 1)); + LinkAnimation_PlayOnceSetSpeed(play, &this->skelAnime, D_80854A58[this->av1.actionVar1], + 0.83f * (isFastFarores ? 2 : 1)); if (Player_SpawnMagicSpell(play, this, this->av1.actionVar1) != NULL) { this->stateFlags1 |= PLAYER_STATE1_IN_ITEM_CS | PLAYER_STATE1_IN_CUTSCENE; @@ -15350,7 +15662,8 @@ void Player_Action_808507F4(Player* this, PlayState* play) { Magic_Reset(play); } } else { - LinkAnimation_PlayLoopSetSpeed(play, &this->skelAnime, D_80854A64[this->av1.actionVar1], 0.83f * (isFastFarores ? 2 : 1)); + LinkAnimation_PlayLoopSetSpeed(play, &this->skelAnime, D_80854A64[this->av1.actionVar1], + 0.83f * (isFastFarores ? 2 : 1)); if (this->av1.actionVar1 == 0) { this->av2.actionVar2 = -10; @@ -15387,7 +15700,8 @@ void Player_Action_808507F4(Player* this, PlayState* play) { this->stateFlags1 &= ~(PLAYER_STATE1_IN_ITEM_CS | PLAYER_STATE1_IN_CUTSCENE); } } else if ((isFastFarores ? 10 : D_80854A7C[this->av1.actionVar1]) < this->av2.actionVar2++) { - LinkAnimation_PlayOnceSetSpeed(play, &this->skelAnime, D_80854A70[this->av1.actionVar1], 0.83f * (isFastFarores ? 2 : 1)); + LinkAnimation_PlayOnceSetSpeed(play, &this->skelAnime, D_80854A70[this->av1.actionVar1], + 0.83f * (isFastFarores ? 2 : 1)); this->yaw = this->actor.shape.rot.y; this->av1.actionVar1 = -1; } @@ -15450,14 +15764,14 @@ void Player_Action_80850C68(Player* this, PlayState* play) { this->skelAnime.curFrame -= this->skelAnime.animLength; } - LinkAnimation_BlendToJoint( - play, &this->skelAnime, &gPlayerAnim_link_fishing_wait, this->skelAnime.curFrame, - (this->unk_858 < 0.0f) ? &gPlayerAnim_link_fishing_reel_left : &gPlayerAnim_link_fishing_reel_right, 5.0f, - fabsf(this->unk_858), this->blendTable); - LinkAnimation_BlendToMorph( - play, &this->skelAnime, &gPlayerAnim_link_fishing_wait, this->skelAnime.curFrame, - (this->unk_85C < 0.0f) ? &gPlayerAnim_link_fishing_reel_up : &gPlayerAnim_link_fishing_reel_down, 5.0f, - fabsf(this->unk_85C), (Vec3s*)D_80858AD8); + LinkAnimation_BlendToJoint(play, &this->skelAnime, &gPlayerAnim_link_fishing_wait, this->skelAnime.curFrame, + (this->unk_858 < 0.0f) ? &gPlayerAnim_link_fishing_reel_left + : &gPlayerAnim_link_fishing_reel_right, + 5.0f, fabsf(this->unk_858), this->blendTable); + LinkAnimation_BlendToMorph(play, &this->skelAnime, &gPlayerAnim_link_fishing_wait, this->skelAnime.curFrame, + (this->unk_85C < 0.0f) ? &gPlayerAnim_link_fishing_reel_up + : &gPlayerAnim_link_fishing_reel_down, + 5.0f, fabsf(this->unk_85C), (Vec3s*)D_80858AD8); LinkAnimation_InterpJointMorph(play, &this->skelAnime, 0.5f); } else if (LinkAnimation_Update(play, &this->skelAnime)) { this->unk_860 = 2; @@ -15671,51 +15985,51 @@ static struct_80854B18 D_80854E50[PLAYER_CSACTION_MAX] = { { 11, NULL }, // PLAYER_CSACTION_55 { 11, NULL }, // PLAYER_CSACTION_56 { 12, &gPlayerAnim_clink_demo_mimawasi_wait }, // PLAYER_CSACTION_57 - { -1, func_80852358 }, // PLAYER_CSACTION_58 - { 11, NULL }, // PLAYER_CSACTION_59 - { 18, D_80854B14 }, // PLAYER_CSACTION_60 - { 11, NULL }, // PLAYER_CSACTION_61 - { 11, NULL }, // PLAYER_CSACTION_62 - { 11, NULL }, // PLAYER_CSACTION_63 - { 11, NULL }, // PLAYER_CSACTION_64 - { -1, func_80852388 }, // PLAYER_CSACTION_65 - { 17, &gPlayerAnim_demo_link_nwait }, // PLAYER_CSACTION_66 - { 12, &gPlayerAnim_d_link_orowait }, // PLAYER_CSACTION_67 - { 12, &gPlayerAnim_demo_link_nwait }, // PLAYER_CSACTION_68 - { 11, NULL }, // PLAYER_CSACTION_69 - { -1, func_808526EC }, // PLAYER_CSACTION_70 - { 17, &gPlayerAnim_sude_nwait }, // PLAYER_CSACTION_71 - { -1, func_808526EC }, // PLAYER_CSACTION_72 - { 17, &gPlayerAnim_sude_nwait }, // PLAYER_CSACTION_73 - { 12, &gPlayerAnim_link_demo_gurad_wait }, // PLAYER_CSACTION_74 - { 12, &gPlayerAnim_link_demo_look_hand_wait }, // PLAYER_CSACTION_75 - { 11, NULL }, // PLAYER_CSACTION_76 - { 12, &gPlayerAnim_link_demo_ue_wait }, // PLAYER_CSACTION_77 - { 12, &gPlayerAnim_Link_m_wait }, // PLAYER_CSACTION_78 - { 13, &gPlayerAnim_Link_ue_wait }, // PLAYER_CSACTION_79 - { 12, &gPlayerAnim_Link_otituku_w }, // PLAYER_CSACTION_80 - { 12, &gPlayerAnim_L_kw }, // PLAYER_CSACTION_81 - { 11, NULL }, // PLAYER_CSACTION_82 - { 11, NULL }, // PLAYER_CSACTION_83 - { 11, NULL }, // PLAYER_CSACTION_84 - { 11, NULL }, // PLAYER_CSACTION_85 - { -1, func_80852648 }, // PLAYER_CSACTION_86 - { 11, NULL }, // PLAYER_CSACTION_87 - { 12, &gPlayerAnim_L_kennasi_w }, // PLAYER_CSACTION_88 - { -1, func_808524D0 }, // PLAYER_CSACTION_89 - { -1, func_80852514 }, // PLAYER_CSACTION_90 - { -1, func_80852554 }, // PLAYER_CSACTION_91 - { -1, func_808525C0 }, // PLAYER_CSACTION_92 - { 11, NULL }, // PLAYER_CSACTION_93 - { 11, NULL }, // PLAYER_CSACTION_94 - { 11, NULL }, // PLAYER_CSACTION_95 - { -1, func_8085283C }, // PLAYER_CSACTION_96 - { -1, func_808528C8 }, // PLAYER_CSACTION_97 - { -1, func_808528C8 }, // PLAYER_CSACTION_98 - { 12, &gPlayerAnim_link_demo_zeldamiru_wait }, // PLAYER_CSACTION_99 - { 12, &gPlayerAnim_link_demo_kenmiru1_wait }, // PLAYER_CSACTION_100 - { 12, &gPlayerAnim_link_demo_kenmiru2_wait }, // PLAYER_CSACTION_101 - { 12, &gPlayerAnim_demo_link_nwait }, // PLAYER_CSACTION_102 + { -1, func_80852358 }, // PLAYER_CSACTION_58 + { 11, NULL }, // PLAYER_CSACTION_59 + { 18, D_80854B14 }, // PLAYER_CSACTION_60 + { 11, NULL }, // PLAYER_CSACTION_61 + { 11, NULL }, // PLAYER_CSACTION_62 + { 11, NULL }, // PLAYER_CSACTION_63 + { 11, NULL }, // PLAYER_CSACTION_64 + { -1, func_80852388 }, // PLAYER_CSACTION_65 + { 17, &gPlayerAnim_demo_link_nwait }, // PLAYER_CSACTION_66 + { 12, &gPlayerAnim_d_link_orowait }, // PLAYER_CSACTION_67 + { 12, &gPlayerAnim_demo_link_nwait }, // PLAYER_CSACTION_68 + { 11, NULL }, // PLAYER_CSACTION_69 + { -1, func_808526EC }, // PLAYER_CSACTION_70 + { 17, &gPlayerAnim_sude_nwait }, // PLAYER_CSACTION_71 + { -1, func_808526EC }, // PLAYER_CSACTION_72 + { 17, &gPlayerAnim_sude_nwait }, // PLAYER_CSACTION_73 + { 12, &gPlayerAnim_link_demo_gurad_wait }, // PLAYER_CSACTION_74 + { 12, &gPlayerAnim_link_demo_look_hand_wait }, // PLAYER_CSACTION_75 + { 11, NULL }, // PLAYER_CSACTION_76 + { 12, &gPlayerAnim_link_demo_ue_wait }, // PLAYER_CSACTION_77 + { 12, &gPlayerAnim_Link_m_wait }, // PLAYER_CSACTION_78 + { 13, &gPlayerAnim_Link_ue_wait }, // PLAYER_CSACTION_79 + { 12, &gPlayerAnim_Link_otituku_w }, // PLAYER_CSACTION_80 + { 12, &gPlayerAnim_L_kw }, // PLAYER_CSACTION_81 + { 11, NULL }, // PLAYER_CSACTION_82 + { 11, NULL }, // PLAYER_CSACTION_83 + { 11, NULL }, // PLAYER_CSACTION_84 + { 11, NULL }, // PLAYER_CSACTION_85 + { -1, func_80852648 }, // PLAYER_CSACTION_86 + { 11, NULL }, // PLAYER_CSACTION_87 + { 12, &gPlayerAnim_L_kennasi_w }, // PLAYER_CSACTION_88 + { -1, func_808524D0 }, // PLAYER_CSACTION_89 + { -1, func_80852514 }, // PLAYER_CSACTION_90 + { -1, func_80852554 }, // PLAYER_CSACTION_91 + { -1, func_808525C0 }, // PLAYER_CSACTION_92 + { 11, NULL }, // PLAYER_CSACTION_93 + { 11, NULL }, // PLAYER_CSACTION_94 + { 11, NULL }, // PLAYER_CSACTION_95 + { -1, func_8085283C }, // PLAYER_CSACTION_96 + { -1, func_808528C8 }, // PLAYER_CSACTION_97 + { -1, func_808528C8 }, // PLAYER_CSACTION_98 + { 12, &gPlayerAnim_link_demo_zeldamiru_wait }, // PLAYER_CSACTION_99 + { 12, &gPlayerAnim_link_demo_kenmiru1_wait }, // PLAYER_CSACTION_100 + { 12, &gPlayerAnim_link_demo_kenmiru2_wait }, // PLAYER_CSACTION_101 + { 12, &gPlayerAnim_demo_link_nwait }, // PLAYER_CSACTION_102 }; void Player_AnimChangeOnceMorphZeroRootYawSpeed(PlayState* play, Player* this, LinkAnimationHeader* anim) { @@ -16356,16 +16670,17 @@ void func_80852648(PlayState* play, Player* this, CsCmdActorCue* cue) { this->heldItemId = ITEM_NONE; this->modelGroup = this->nextModelGroup = Player_ActionToModelGroup(this, PLAYER_IA_NONE); this->leftHandDLists = gPlayerLeftHandOpenDLs; - + // If MS sword is shuffled and not in the players inventory, then we need to unequip the current sword // and set swordless flag to mimic Link having his weapon knocked out of his hand in the Ganon fight - if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_MASTER_SWORD) && !CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER)) { + if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_MASTER_SWORD) && + !CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER)) { Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_NONE); gSaveContext.equips.buttonItems[0] = ITEM_NONE; Flags_SetInfTable(INFTABLE_SWORDLESS); return; } - + Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER); gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER; Inventory_DeleteEquipment(play, EQUIP_TYPE_SWORD); @@ -16412,7 +16727,7 @@ void func_808526EC(PlayState* play, Player* this, CsCmdActorCue* cue) { void func_8085283C(PlayState* play, Player* this, CsCmdActorCue* cue) { if (LinkAnimation_Update(play, &this->skelAnime)) { func_80852944(play, this, cue); - // This is when link picks up the sword in the Ganon fight + // This is when link picks up the sword in the Ganon fight } else if (this->av2.actionVar2 == 0) { Item_Give(play, ITEM_SWORD_MASTER); func_80846720(play, this, 0); @@ -16532,7 +16847,8 @@ void func_80852C50(PlayState* play, Player* this, CsCmdActorCue* cue) { sp24 = sCueToCsActionMap[this->cueId]; func_80852B4C(play, this, linkCsAction, &D_80854E50[ABS(sp24)]); - if (CVarGetInteger(CVAR_ENHANCEMENT("FixEyesOpenWhileSleeping"), 0) && (play->csCtx.linkAction->action == 28 || play->csCtx.linkAction->action == 29)) { + if (CVarGetInteger(CVAR_ENHANCEMENT("FixEyesOpenWhileSleeping"), 0) && + (play->csCtx.linkAction->action == 28 || play->csCtx.linkAction->action == 29)) { this->skelAnime.jointTable[22].x = 8; } } @@ -16680,8 +16996,8 @@ void Player_StartTalking(PlayState* play, Actor* actor) { } else { Player_SetupWaitForPutAway(play, this, Player_SetupTalk); Player_AnimPlayOnceAdjusted(play, this, - (actor->xzDistToPlayer < 40.0f) ? &gPlayerAnim_link_normal_backspace - : &gPlayerAnim_link_normal_talk_free); + (actor->xzDistToPlayer < 40.0f) ? &gPlayerAnim_link_normal_backspace + : &gPlayerAnim_link_normal_talk_free); } if (this->skelAnime.animation == &gPlayerAnim_link_normal_backspace) { diff --git a/soh/src/overlays/gamestates/ovl_select/z_select.c b/soh/src/overlays/gamestates/ovl_select/z_select.c index 532829cbd..99c5f43cb 100644 --- a/soh/src/overlays/gamestates/ovl_select/z_select.c +++ b/soh/src/overlays/gamestates/ovl_select/z_select.c @@ -37,6 +37,8 @@ void Select_LoadGame(SelectContext* this, s32 entranceIndex) { gSaveContext.buttonStatus[buttonIndex] = BTN_ENABLED; } gSaveContext.unk_13E7 = gSaveContext.unk_13E8 = gSaveContext.unk_13EA = gSaveContext.unk_13EC = 0; + + gSaveContext.inventory.items[1] = ITEM_GLIDER; Audio_QueueSeqCmd(SEQ_PLAYER_BGM_MAIN << 24 | NA_BGM_STOP); gSaveContext.entranceIndex = entranceIndex; diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c index f6dab7003..cfc641ace 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c @@ -23,7 +23,6 @@ #include "soh/SaveManager.h" #include "soh/Enhancements/kaleido.h" - static void* sEquipmentFRATexs[] = { gPauseEquipment00FRATex, gPauseEquipment01Tex, gPauseEquipment02Tex, gPauseEquipment03Tex, gPauseEquipment04Tex, gPauseEquipment10FRATex, gPauseEquipment11Tex, gPauseEquipment12Tex, gPauseEquipment13Tex, gPauseEquipment14Tex, @@ -215,8 +214,7 @@ static void* sSaveTexs[] = { sSaveFRATexs, }; -static void* iconNameTextures[] = -{ +static void* iconNameTextures[] = { gDekuStickItemNameENGTex, gDekuNutItemNameENGTex, gBombItemNameENGTex, @@ -589,8 +587,7 @@ static void* iconNameTextures[] = gBiggoronsSwordItemNameFRATex, }; -static void* mapNameTextures[] = -{ +static void* mapNameTextures[] = { gHauntedWastelandPointNameENGTex, gGerudosFortressPointNameENGTex, gGerudoValleyPointNameENGTex, @@ -704,12 +701,18 @@ s16 D_8082AB2C[] = { }; static u8 D_8082AB6C[][ARRAY_COUNT(gSaveContext.buttonStatus)] = { - { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED }, - { BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED }, - { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED }, - { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED }, - { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED }, - { BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED }, + { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, + BTN_DISABLED }, + { BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, + BTN_ENABLED }, + { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, + BTN_DISABLED }, + { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, + BTN_DISABLED }, + { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, + BTN_DISABLED }, + { BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, + BTN_ENABLED }, }; static s16 D_8082AB8C = 0; @@ -736,147 +739,147 @@ static u16 D_8082ABEC[] = { }; u8 gSlotAgeReqs[] = { - AGE_REQ_CHILD, // SLOT_DEKU_STICK - AGE_REQ_NONE, // SLOT_DEKU_NUT - AGE_REQ_NONE, // SLOT_BOMB - AGE_REQ_ADULT, // SLOT_BOW - AGE_REQ_ADULT, // SLOT_ARROW_FIRE - AGE_REQ_NONE, // SLOT_DINS_FIRE - AGE_REQ_CHILD, // SLOT_SLINGSHOT - AGE_REQ_NONE, // SLOT_OCARINA - AGE_REQ_NONE, // SLOT_BOMBCHU - AGE_REQ_ADULT, // SLOT_HOOKSHOT - AGE_REQ_ADULT, // SLOT_ARROW_ICE - AGE_REQ_NONE, // SLOT_FARORES_WIND - AGE_REQ_CHILD, // SLOT_BOOMERANG - AGE_REQ_NONE, // SLOT_LENS_OF_TRUTH - AGE_REQ_CHILD, // SLOT_MAGIC_BEAN - AGE_REQ_ADULT, // SLOT_HAMMER - AGE_REQ_ADULT, // SLOT_ARROW_LIGHT - AGE_REQ_NONE, // SLOT_NAYRUS_LOVE - AGE_REQ_NONE, // SLOT_BOTTLE_1 - AGE_REQ_NONE, // SLOT_BOTTLE_2 - AGE_REQ_NONE, // SLOT_BOTTLE_3 - AGE_REQ_NONE, // SLOT_BOTTLE_4 - AGE_REQ_ADULT, // SLOT_TRADE_ADULT - AGE_REQ_CHILD, // SLOT_TRADE_CHILD + AGE_REQ_CHILD, // SLOT_DEKU_STICK + AGE_REQ_NONE, // SLOT_DEKU_NUT + AGE_REQ_NONE, // SLOT_BOMB + AGE_REQ_ADULT, // SLOT_BOW + AGE_REQ_ADULT, // SLOT_ARROW_FIRE + AGE_REQ_NONE, // SLOT_DINS_FIRE + AGE_REQ_CHILD, // SLOT_SLINGSHOT + AGE_REQ_NONE, // SLOT_OCARINA + AGE_REQ_NONE, // SLOT_BOMBCHU + AGE_REQ_ADULT, // SLOT_HOOKSHOT + AGE_REQ_ADULT, // SLOT_ARROW_ICE + AGE_REQ_NONE, // SLOT_FARORES_WIND + AGE_REQ_CHILD, // SLOT_BOOMERANG + AGE_REQ_NONE, // SLOT_LENS_OF_TRUTH + AGE_REQ_CHILD, // SLOT_MAGIC_BEAN + AGE_REQ_ADULT, // SLOT_HAMMER + AGE_REQ_ADULT, // SLOT_ARROW_LIGHT + AGE_REQ_NONE, // SLOT_NAYRUS_LOVE + AGE_REQ_NONE, // SLOT_BOTTLE_1 + AGE_REQ_NONE, // SLOT_BOTTLE_2 + AGE_REQ_NONE, // SLOT_BOTTLE_3 + AGE_REQ_NONE, // SLOT_BOTTLE_4 + AGE_REQ_ADULT, // SLOT_TRADE_ADULT + AGE_REQ_CHILD, // SLOT_TRADE_CHILD }; u8 gEquipAgeReqs[][4] = { { - AGE_REQ_ADULT, // 0 UPG_QUIVER - AGE_REQ_CHILD, // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_KOKIRI - AGE_REQ_ADULT, // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_MASTER - AGE_REQ_ADULT // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_BIGGORON + AGE_REQ_ADULT, // 0 UPG_QUIVER + AGE_REQ_CHILD, // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_KOKIRI + AGE_REQ_ADULT, // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_MASTER + AGE_REQ_ADULT // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_BIGGORON }, { - AGE_REQ_NONE, // 0 UPG_BOMB_BAG - AGE_REQ_CHILD, // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_DEKU - AGE_REQ_NONE, // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_HYLIAN - AGE_REQ_ADULT // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_MIRROR + AGE_REQ_NONE, // 0 UPG_BOMB_BAG + AGE_REQ_CHILD, // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_DEKU + AGE_REQ_NONE, // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_HYLIAN + AGE_REQ_ADULT // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_MIRROR }, { - AGE_REQ_ADULT, // 0 UPG_STRENGTH - AGE_REQ_NONE, // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_KOKIRI - AGE_REQ_ADULT, // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_GORON - AGE_REQ_ADULT // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_ZORA + AGE_REQ_ADULT, // 0 UPG_STRENGTH + AGE_REQ_NONE, // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_KOKIRI + AGE_REQ_ADULT, // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_GORON + AGE_REQ_ADULT // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_ZORA }, { - AGE_REQ_NONE, // 0 UPG_SCALE - AGE_REQ_NONE, // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_KOKIRI - AGE_REQ_ADULT, // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_IRON - AGE_REQ_ADULT // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_HOVER + AGE_REQ_NONE, // 0 UPG_SCALE + AGE_REQ_NONE, // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_KOKIRI + AGE_REQ_ADULT, // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_IRON + AGE_REQ_ADULT // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_HOVER }, }; u8 gItemAgeReqs[] = { - AGE_REQ_CHILD, // ITEM_DEKU_STICK - AGE_REQ_NONE, // ITEM_DEKU_NUT - AGE_REQ_NONE, // ITEM_BOMB - AGE_REQ_ADULT, // ITEM_BOW - AGE_REQ_ADULT, // ITEM_ARROW_FIRE - AGE_REQ_NONE, // ITEM_DINS_FIRE - AGE_REQ_CHILD, // ITEM_SLINGSHOT - AGE_REQ_NONE, // ITEM_OCARINA_FAIRY - AGE_REQ_NONE, // ITEM_OCARINA_OF_TIME - AGE_REQ_NONE, // ITEM_BOMBCHU - AGE_REQ_ADULT, // ITEM_HOOKSHOT - AGE_REQ_ADULT, // ITEM_LONGSHOT - AGE_REQ_ADULT, // ITEM_ARROW_ICE - AGE_REQ_NONE, // ITEM_FARORES_WIND - AGE_REQ_CHILD, // ITEM_BOOMERANG - AGE_REQ_NONE, // ITEM_LENS_OF_TRUTH - AGE_REQ_CHILD, // ITEM_MAGIC_BEAN - AGE_REQ_ADULT, // ITEM_HAMMER - AGE_REQ_ADULT, // ITEM_ARROW_LIGHT - AGE_REQ_NONE, // ITEM_NAYRUS_LOVE - AGE_REQ_NONE, // ITEM_BOTTLE_EMPTY - AGE_REQ_NONE, // ITEM_BOTTLE_POTION_RED - AGE_REQ_NONE, // ITEM_BOTTLE_POTION_GREEN - AGE_REQ_NONE, // ITEM_BOTTLE_POTION_BLUE - AGE_REQ_NONE, // ITEM_BOTTLE_FAIRY - AGE_REQ_NONE, // ITEM_BOTTLE_FISH - AGE_REQ_NONE, // ITEM_BOTTLE_MILK_FULL - AGE_REQ_NONE, // ITEM_BOTTLE_RUTOS_LETTER - AGE_REQ_NONE, // ITEM_BOTTLE_BLUE_FIRE - AGE_REQ_NONE, // ITEM_BOTTLE_BUG - AGE_REQ_NONE, // ITEM_BOTTLE_BIG_POE - AGE_REQ_NONE, // ITEM_BOTTLE_MILK_HALF - AGE_REQ_NONE, // ITEM_BOTTLE_POE - AGE_REQ_CHILD, // ITEM_WEIRD_EGG - AGE_REQ_CHILD, // ITEM_CHICKEN - AGE_REQ_CHILD, // ITEM_ZELDAS_LETTER - AGE_REQ_CHILD, // ITEM_MASK_KEATON - AGE_REQ_CHILD, // ITEM_MASK_SKULL - AGE_REQ_CHILD, // ITEM_MASK_SPOOKY - AGE_REQ_CHILD, // ITEM_MASK_BUNNY_HOOD - AGE_REQ_CHILD, // ITEM_MASK_GORON - AGE_REQ_CHILD, // ITEM_MASK_ZORA - AGE_REQ_CHILD, // ITEM_MASK_GERUDO - AGE_REQ_CHILD, // ITEM_MASK_TRUTH - AGE_REQ_CHILD, // ITEM_SOLD_OUT - AGE_REQ_ADULT, // ITEM_POCKET_EGG - AGE_REQ_ADULT, // ITEM_POCKET_CUCCO - AGE_REQ_ADULT, // ITEM_COJIRO - AGE_REQ_ADULT, // ITEM_ODD_MUSHROOM - AGE_REQ_ADULT, // ITEM_ODD_POTION - AGE_REQ_ADULT, // ITEM_POACHERS_SAW - AGE_REQ_ADULT, // ITEM_BROKEN_GORONS_SWORD - AGE_REQ_ADULT, // ITEM_PRESCRIPTION - AGE_REQ_ADULT, // ITEM_EYEBALL_FROG - AGE_REQ_ADULT, // ITEM_EYE_DROPS - AGE_REQ_ADULT, // ITEM_CLAIM_CHECK - AGE_REQ_ADULT, // ITEM_BOW_FIRE - AGE_REQ_ADULT, // ITEM_BOW_ICE - AGE_REQ_ADULT, // ITEM_BOW_LIGHT - AGE_REQ_CHILD, // ITEM_SWORD_KOKIRI - AGE_REQ_ADULT, // ITEM_SWORD_MASTER - AGE_REQ_ADULT, // ITEM_SWORD_BIGGORON - AGE_REQ_CHILD, // ITEM_SHIELD_DEKU - AGE_REQ_NONE, // ITEM_SHIELD_HYLIAN - AGE_REQ_ADULT, // ITEM_SHIELD_MIRROR - AGE_REQ_NONE, // ITEM_TUNIC_KOKIRI - AGE_REQ_ADULT, // ITEM_TUNIC_GORON - AGE_REQ_ADULT, // ITEM_TUNIC_ZORA - AGE_REQ_NONE, // ITEM_BOOTS_KOKIRI - AGE_REQ_ADULT, // ITEM_BOOTS_IRON - AGE_REQ_ADULT, // ITEM_BOOTS_HOVER - AGE_REQ_CHILD, // ITEM_BULLET_BAG_30 - AGE_REQ_CHILD, // ITEM_BULLET_BAG_40 - AGE_REQ_CHILD, // ITEM_BULLET_BAG_50 - AGE_REQ_ADULT, // ITEM_QUIVER_30 - AGE_REQ_ADULT, // ITEM_QUIVER_40 - AGE_REQ_ADULT, // ITEM_QUIVER_50 - AGE_REQ_NONE, // ITEM_BOMB_BAG_20 - AGE_REQ_NONE, // ITEM_BOMB_BAG_30 - AGE_REQ_NONE, // ITEM_BOMB_BAG_40 - AGE_REQ_CHILD, // ITEM_STRENGTH_GORONS_BRACELET - AGE_REQ_ADULT, // ITEM_STRENGTH_SILVER_GAUNTLETS - AGE_REQ_ADULT, // ITEM_STRENGTH_GOLD_GAUNTLETS - AGE_REQ_NONE, // ITEM_SCALE_SILVER - AGE_REQ_NONE, // ITEM_SCALE_GOLDEN - AGE_REQ_ADULT, // ITEM_GIANTS_KNIFE + AGE_REQ_CHILD, // ITEM_DEKU_STICK + AGE_REQ_NONE, // ITEM_DEKU_NUT + AGE_REQ_NONE, // ITEM_BOMB + AGE_REQ_ADULT, // ITEM_BOW + AGE_REQ_ADULT, // ITEM_ARROW_FIRE + AGE_REQ_NONE, // ITEM_DINS_FIRE + AGE_REQ_CHILD, // ITEM_SLINGSHOT + AGE_REQ_NONE, // ITEM_OCARINA_FAIRY + AGE_REQ_NONE, // ITEM_OCARINA_OF_TIME + AGE_REQ_NONE, // ITEM_BOMBCHU + AGE_REQ_ADULT, // ITEM_HOOKSHOT + AGE_REQ_ADULT, // ITEM_LONGSHOT + AGE_REQ_ADULT, // ITEM_ARROW_ICE + AGE_REQ_NONE, // ITEM_FARORES_WIND + AGE_REQ_CHILD, // ITEM_BOOMERANG + AGE_REQ_NONE, // ITEM_LENS_OF_TRUTH + AGE_REQ_CHILD, // ITEM_MAGIC_BEAN + AGE_REQ_ADULT, // ITEM_HAMMER + AGE_REQ_ADULT, // ITEM_ARROW_LIGHT + AGE_REQ_NONE, // ITEM_NAYRUS_LOVE + AGE_REQ_NONE, // ITEM_BOTTLE_EMPTY + AGE_REQ_NONE, // ITEM_BOTTLE_POTION_RED + AGE_REQ_NONE, // ITEM_BOTTLE_POTION_GREEN + AGE_REQ_NONE, // ITEM_BOTTLE_POTION_BLUE + AGE_REQ_NONE, // ITEM_BOTTLE_FAIRY + AGE_REQ_NONE, // ITEM_BOTTLE_FISH + AGE_REQ_NONE, // ITEM_BOTTLE_MILK_FULL + AGE_REQ_NONE, // ITEM_BOTTLE_RUTOS_LETTER + AGE_REQ_NONE, // ITEM_BOTTLE_BLUE_FIRE + AGE_REQ_NONE, // ITEM_BOTTLE_BUG + AGE_REQ_NONE, // ITEM_BOTTLE_BIG_POE + AGE_REQ_NONE, // ITEM_BOTTLE_MILK_HALF + AGE_REQ_NONE, // ITEM_BOTTLE_POE + AGE_REQ_CHILD, // ITEM_WEIRD_EGG + AGE_REQ_CHILD, // ITEM_CHICKEN + AGE_REQ_CHILD, // ITEM_ZELDAS_LETTER + AGE_REQ_CHILD, // ITEM_MASK_KEATON + AGE_REQ_CHILD, // ITEM_MASK_SKULL + AGE_REQ_CHILD, // ITEM_MASK_SPOOKY + AGE_REQ_CHILD, // ITEM_MASK_BUNNY_HOOD + AGE_REQ_CHILD, // ITEM_MASK_GORON + AGE_REQ_CHILD, // ITEM_MASK_ZORA + AGE_REQ_CHILD, // ITEM_MASK_GERUDO + AGE_REQ_CHILD, // ITEM_MASK_TRUTH + AGE_REQ_CHILD, // ITEM_SOLD_OUT + AGE_REQ_ADULT, // ITEM_POCKET_EGG + AGE_REQ_ADULT, // ITEM_POCKET_CUCCO + AGE_REQ_ADULT, // ITEM_COJIRO + AGE_REQ_ADULT, // ITEM_ODD_MUSHROOM + AGE_REQ_ADULT, // ITEM_ODD_POTION + AGE_REQ_ADULT, // ITEM_POACHERS_SAW + AGE_REQ_ADULT, // ITEM_BROKEN_GORONS_SWORD + AGE_REQ_ADULT, // ITEM_PRESCRIPTION + AGE_REQ_ADULT, // ITEM_EYEBALL_FROG + AGE_REQ_ADULT, // ITEM_EYE_DROPS + AGE_REQ_ADULT, // ITEM_CLAIM_CHECK + AGE_REQ_ADULT, // ITEM_BOW_FIRE + AGE_REQ_ADULT, // ITEM_BOW_ICE + AGE_REQ_ADULT, // ITEM_BOW_LIGHT + AGE_REQ_CHILD, // ITEM_SWORD_KOKIRI + AGE_REQ_ADULT, // ITEM_SWORD_MASTER + AGE_REQ_ADULT, // ITEM_SWORD_BIGGORON + AGE_REQ_CHILD, // ITEM_SHIELD_DEKU + AGE_REQ_NONE, // ITEM_SHIELD_HYLIAN + AGE_REQ_ADULT, // ITEM_SHIELD_MIRROR + AGE_REQ_NONE, // ITEM_TUNIC_KOKIRI + AGE_REQ_ADULT, // ITEM_TUNIC_GORON + AGE_REQ_ADULT, // ITEM_TUNIC_ZORA + AGE_REQ_NONE, // ITEM_BOOTS_KOKIRI + AGE_REQ_ADULT, // ITEM_BOOTS_IRON + AGE_REQ_ADULT, // ITEM_BOOTS_HOVER + AGE_REQ_CHILD, // ITEM_BULLET_BAG_30 + AGE_REQ_CHILD, // ITEM_BULLET_BAG_40 + AGE_REQ_CHILD, // ITEM_BULLET_BAG_50 + AGE_REQ_ADULT, // ITEM_QUIVER_30 + AGE_REQ_ADULT, // ITEM_QUIVER_40 + AGE_REQ_ADULT, // ITEM_QUIVER_50 + AGE_REQ_NONE, // ITEM_BOMB_BAG_20 + AGE_REQ_NONE, // ITEM_BOMB_BAG_30 + AGE_REQ_NONE, // ITEM_BOMB_BAG_40 + AGE_REQ_CHILD, // ITEM_STRENGTH_GORONS_BRACELET + AGE_REQ_ADULT, // ITEM_STRENGTH_SILVER_GAUNTLETS + AGE_REQ_ADULT, // ITEM_STRENGTH_GOLD_GAUNTLETS + AGE_REQ_NONE, // ITEM_SCALE_SILVER + AGE_REQ_NONE, // ITEM_SCALE_GOLDEN + AGE_REQ_ADULT, // ITEM_GIANTS_KNIFE }; u8 gAreaGsFlags[] = { @@ -897,10 +900,10 @@ static Color_RGB8 sCursorColors[3] = { { 0, 50, 255 }, }; -const Color_RGB8 Cursor_ABTN_ori = {0, 255, 50}; -const Color_RGB8 Cursor_ABTNN64_ori = {0, 50, 255}; -const Color_RGB8 Cursor_CBTN_ori = {255, 255, 0}; -const Color_RGB8 Cursor_StartBTN_ori = {255, 255, 255}; +const Color_RGB8 Cursor_ABTN_ori = { 0, 255, 50 }; +const Color_RGB8 Cursor_ABTNN64_ori = { 0, 50, 255 }; +const Color_RGB8 Cursor_CBTN_ori = { 255, 255, 0 }; +const Color_RGB8 Cursor_StartBTN_ori = { 255, 255, 255 }; Color_RGB8 Cursor_ABTN; Color_RGB8 Cursor_CBTN; @@ -991,7 +994,8 @@ void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, u16 specialPos) { pauseCtx->cursorSpecialPos = specialPos; pauseCtx->pageSwitchTimer = 0; - Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); } void KaleidoScope_DrawQuadTextureRGBA32(GraphicsContext* gfxCtx, void* texture, u16 width, u16 height, u16 point) { @@ -1046,11 +1050,13 @@ void KaleidoScope_SwitchPage(PauseContext* pauseCtx, u8 pt) { if (!pt) { pauseCtx->mode = pauseCtx->pageIndex * 2 + 1; - Audio_PlaySoundGeneral(NA_SE_SY_WIN_SCROLL_LEFT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_WIN_SCROLL_LEFT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT; } else { pauseCtx->mode = pauseCtx->pageIndex * 2; - Audio_PlaySoundGeneral(NA_SE_SY_WIN_SCROLL_RIGHT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_WIN_SCROLL_RIGHT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_LEFT; } @@ -1058,7 +1064,8 @@ void KaleidoScope_SwitchPage(PauseContext* pauseCtx, u8 pt) { gSaveContext.buttonStatus[buttonIndex] = D_8082AB6C[pauseCtx->pageIndex + pt][buttonIndex]; } - if ((CVarGetInteger(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 0) != 0) && (D_8082ABEC[pauseCtx->mode] == PAUSE_EQUIP)) { + if ((CVarGetInteger(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 0) != 0) && + (D_8082ABEC[pauseCtx->mode] == PAUSE_EQUIP)) { gSaveContext.buttonStatus[1] = BTN_ENABLED; gSaveContext.buttonStatus[2] = BTN_ENABLED; gSaveContext.buttonStatus[3] = BTN_ENABLED; @@ -1085,7 +1092,8 @@ void KaleidoScope_HandlePageToggles(PauseContext* pauseCtx, Input* input) { PageLeft_BTN = BTN_L; } - if (CVarGetInteger(CVAR_DEVELOPER_TOOLS("DebugEnabled"), 0) && (pauseCtx->debugState == 0) && CHECK_BTN_ALL(input->press.button, Debug_BTN)) { + if (CVarGetInteger(CVAR_DEVELOPER_TOOLS("DebugEnabled"), 0) && (pauseCtx->debugState == 0) && + CHECK_BTN_ALL(input->press.button, Debug_BTN)) { pauseCtx->debugState = 1; return; } @@ -1381,8 +1389,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateX(-pauseCtx->unk_1F4 / 100.0f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->itemPageVtx, sSelectItemTexs[gSaveContext.language]); @@ -1399,8 +1406,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_RotateZ(pauseCtx->unk_1F8 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(1.57f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->equipPageVtx, sEquipmentTexs[gSaveContext.language]); @@ -1418,12 +1424,11 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_RotateX(pauseCtx->unk_200 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(3.14f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if (pauseCtx->randoQuestMode) { - POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, - sSaveTexs[gSaveContext.language]); + POLY_OPA_DISP = + KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, sSaveTexs[gSaveContext.language]); RandoKaleido_DrawMiscCollectibles(play); } else { POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->questPageVtx, @@ -1442,8 +1447,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_RotateZ(-pauseCtx->unk_1FC / 100.0f, MTXMODE_APPLY); Matrix_RotateY(-1.57f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, sMapTexs[gSaveContext.language]); @@ -1471,8 +1475,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateX(-pauseCtx->unk_1F4 / 100.0f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->itemPageVtx, sSelectItemTexs[gSaveContext.language]); @@ -1486,8 +1489,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_RotateZ(-pauseCtx->unk_1FC / 100.0f, MTXMODE_APPLY); Matrix_RotateY(-1.57f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, sMapTexs[gSaveContext.language]); @@ -1518,8 +1520,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_RotateX(pauseCtx->unk_200 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(3.14f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if (pauseCtx->randoQuestMode) { POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, @@ -1542,8 +1543,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_RotateZ(pauseCtx->unk_1F8 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(1.57f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->equipPageVtx, sEquipmentTexs[gSaveContext.language]); @@ -1593,8 +1593,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_RotateY(1.57f, MTXMODE_APPLY); } - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if ((pauseCtx->state >= 8) && (pauseCtx->state <= 0x11)) { POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, sGameOverTexs); @@ -1611,7 +1610,8 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, VREG(61)); //Save prompt cursor colour + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, + VREG(61)); // Save prompt cursor colour if (pauseCtx->promptChoice == 0) { gSPDisplayList(POLY_OPA_DISP++, gPromptCursorLeftDL); @@ -1639,7 +1639,8 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, VREG(61)); //Continue prompt cursor colour + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, + VREG(61)); // Continue prompt cursor colour if (pauseCtx->promptChoice == 0) { gSPDisplayList(POLY_OPA_DISP++, gPromptCursorLeftDL); @@ -1683,7 +1684,7 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { aButtonColor = (Color_RGB8){ 0, 255, 100 }; } - Color_RGB8 cButtonsColor = {255, 160, 0}; + Color_RGB8 cButtonsColor = { 255, 160, 0 }; if (CVarGetInteger(CVAR_COSMETIC("HUD.CButtons.Changed"), 0)) { cButtonsColor = CVarGetColor24(CVAR_COSMETIC("HUD.CButtons.Value"), cButtonsColor); } @@ -1887,11 +1888,11 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { Matrix_Translate(0.0f, 0.0f, -144.0f, MTXMODE_NEW); Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + const Color_RGBA8 namePanelColor = + CVarGetColor(CVAR_COSMETIC("Kaleido.NamePanel.Value"), (Color_RGBA8){ 90, 100, 130, 255 }); - const Color_RGBA8 namePanelColor = CVarGetColor(CVAR_COSMETIC("Kaleido.NamePanel.Value"), (Color_RGBA8){90,100,130,255}); - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, namePanelColor.r, namePanelColor.g, namePanelColor.b, namePanelColor.a); gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[0], 16, 0); @@ -1904,24 +1905,23 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && (pauseCtx->unk_1E4 == 0)) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, D_808321A0, D_808321A2, D_808321A4, D_808321A6); } else { - if (CVarGetInteger(CVAR_ENHANCEMENT("FixMenuLR"), 0) != 0) { - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 210, 255, 255); - } + if (CVarGetInteger(CVAR_ENHANCEMENT("FixMenuLR"), 0) != 0) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 210, 255, 255); + } } - gSPDisplayList(POLY_OPA_DISP++, gLButtonIconDL); - if (CVarGetInteger(CVAR_ENHANCEMENT("FixMenuLR"), 0) == 0) { //Restore the misplace gDPSetPrimColor - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 210, 255, 255); + if (CVarGetInteger(CVAR_ENHANCEMENT("FixMenuLR"), 0) == 0) { // Restore the misplace gDPSetPrimColor + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 210, 255, 255); } if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && (pauseCtx->unk_1E4 == 0)) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, D_808321A0, D_808321A2, D_808321A4, D_808321A6); } else { - if (CVarGetInteger(CVAR_ENHANCEMENT("FixMenuLR"), 0) != 0) { - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 210, 255, 255); - } + if (CVarGetInteger(CVAR_ENHANCEMENT("FixMenuLR"), 0) != 0) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 210, 255, 255); + } } gSPDisplayList(POLY_OPA_DISP++, gRButtonIconDL); @@ -1978,7 +1978,8 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { osSyncPrintf(VT_RST); YREG(7) = 0; - SET_GS_FLAGS(D_8082AE30[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]], gAreaGsFlags[D_8082AE30[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]]); + SET_GS_FLAGS(D_8082AE30[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]], + gAreaGsFlags[D_8082AE30[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]]); } } @@ -2037,8 +2038,10 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = D_8082ADE0[gSaveContext.language] << 5; gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, 255); - //gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL);//This is changed to load the texture only so we can prim color it. - gDPLoadTextureBlock(POLY_OPA_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); + // gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL);//This is changed to load the texture only so we can prim + // color it. + gDPLoadTextureBlock(POLY_OPA_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); gDPPipeSync(POLY_OPA_DISP++); @@ -2070,7 +2073,9 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { bool pauseAnyCursor = (CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_RANDO_ONLY && IS_RANDO) || (CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_ALWAYS_ON); - if (!pauseCtx->pageIndex && (!pauseAnyCursor || (gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != ITEM_NONE))) { // pageIndex == PAUSE_ITEM + if (!pauseCtx->pageIndex && + (!pauseAnyCursor || (gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != + ITEM_NONE))) { // pageIndex == PAUSE_ITEM pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = WREG(49 + gSaveContext.language); @@ -2096,31 +2101,38 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { } else { // French PosX = 98; } - s16 PosY = 200 - pauseCtx->infoPanelOffsetY; //General Pos of C button icon - s16 icon_w = 46; // Original texture size + s16 PosY = 200 - pauseCtx->infoPanelOffsetY; // General Pos of C button icon + s16 icon_w = 46; // Original texture size s16 icon_h = 16; s32 icon_x_offset; - s16 icon_w_crop = 17.0f; //Left - int height = icon_h * 1.0f; //Adjust Height with scale - int width = icon_w * 1.0f; //Adjust Width with scale - int width_crop = icon_w_crop * 1.0f; //Adjust Width with scale + s16 icon_w_crop = 17.0f; // Left + int height = icon_h * 1.0f; // Adjust Height with scale + int width = icon_w * 1.0f; // Adjust Width with scale + int width_crop = icon_w_crop * 1.0f; // Adjust Width with scale int height_factor = (1 << 10) * icon_h / height; int width_factor = (1 << 10) * icon_w / width; gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cButtonsColor.r, cButtonsColor.g, cButtonsColor.b, 255); - for (s16 i=0; i < 3; i++) { + for (s16 i = 0; i < 3; i++) { if (i == 0) { - icon_x_offset = width_crop*3-3; - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g, cRightButtonColor.b, 255); + icon_x_offset = width_crop * 3 - 3; + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g, + cRightButtonColor.b, 255); } else if (i == 1) { - icon_x_offset = width_crop*2-3; - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g, cDownButtonColor.b, 255); + icon_x_offset = width_crop * 2 - 3; + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g, + cDownButtonColor.b, 255); } else if (i == 2) { icon_x_offset = width_crop; - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g, cLeftButtonColor.b, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g, + cLeftButtonColor.b, 255); } - gDPLoadTextureBlock(POLY_OPA_DISP++, gCBtnSymbolsTex, G_IM_FMT_IA, G_IM_SIZ_8b, icon_w, icon_h, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - //gSPScisTextureRectangle(POLY_OPA_DISP++,PosX << 2, PosY << 2, (PosX + icon_x_offset) << 2, (PosY + height) << 2, G_TX_RENDERTILE, 0, 0, width_factor, height_factor); - gSPWideTextureRectangle(POLY_OPA_DISP++, PosX << 2, PosY << 2, (PosX + icon_x_offset) << 2, (PosY + height) << 2, G_TX_WRAP, 0, 0, width_factor, height_factor); + gDPLoadTextureBlock(POLY_OPA_DISP++, gCBtnSymbolsTex, G_IM_FMT_IA, G_IM_SIZ_8b, icon_w, icon_h, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + // gSPScisTextureRectangle(POLY_OPA_DISP++,PosX << 2, PosY << 2, (PosX + icon_x_offset) << 2, (PosY + // + height) << 2, G_TX_RENDERTILE, 0, 0, width_factor, height_factor); + gSPWideTextureRectangle(POLY_OPA_DISP++, PosX << 2, PosY << 2, (PosX + icon_x_offset) << 2, + (PosY + height) << 2, G_TX_WRAP, 0, 0, width_factor, height_factor); } gDPPipeSync(POLY_OPA_DISP++); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); @@ -2154,15 +2166,18 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { D_8082ADE8[gSaveContext.language] << 5; gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, 255); - //gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL); - gDPLoadTextureBlock(POLY_OPA_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); + // gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL); + gDPLoadTextureBlock(POLY_OPA_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, + G_TX_NOLOD); gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); gDPPipeSync(POLY_OPA_DISP++); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); - POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPlayMelodyTextures[gSaveContext.language], - D_8082ADE8[gSaveContext.language], 16, 4); + POLY_OPA_DISP = + KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPlayMelodyTextures[gSaveContext.language], + D_8082ADE8[gSaveContext.language], 16, 4); } } else if (pauseCtx->pageIndex == PAUSE_EQUIP) { pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = @@ -2182,13 +2197,16 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = D_8082ADD8[gSaveContext.language] << 5; - if (!(CHECK_OWNED_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP] - 1)) && (pauseCtx->pageIndex == PAUSE_EQUIP) && (pauseCtx->cursorX[PAUSE_EQUIP] != 0)) { + if (!(CHECK_OWNED_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP] - 1)) && + (pauseCtx->pageIndex == PAUSE_EQUIP) && (pauseCtx->cursorX[PAUSE_EQUIP] != 0)) { return; - } + } - //gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL); + // gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, 255); - gDPLoadTextureBlock(POLY_OPA_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock(POLY_OPA_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, + G_TX_NOLOD); gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); gDPPipeSync(POLY_OPA_DISP++); @@ -2206,9 +2224,10 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { void KaleidoScope_UpdateNamePanel(PlayState* play) { PauseContext* pauseCtx = &play->pauseCtx; u16 sp2A; - bool pauseAnyCursor = (CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_RANDO_ONLY && IS_RANDO) || - (CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_ALWAYS_ON); - + bool pauseAnyCursor = + (CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_RANDO_ONLY && IS_RANDO) || + (CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_ALWAYS_ON); + osSyncPrintf("UpdateNamePanel\n"); if ((pauseCtx->namedItem != pauseCtx->cursorItem[pauseCtx->pageIndex]) || ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->cursorSpecialPos != 0))) { @@ -2218,12 +2237,16 @@ void KaleidoScope_UpdateNamePanel(PlayState* play) { osCreateMesgQueue(&pauseCtx->loadQueue, &pauseCtx->loadMsg, 1); if (pauseAnyCursor && - ((pauseCtx->pageIndex == PAUSE_EQUIP && pauseCtx->cursorX[PAUSE_EQUIP] != 0 && !CHECK_OWNED_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP] - 1)) || - (pauseCtx->pageIndex == PAUSE_ITEM && gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] == ITEM_NONE))) { + ((pauseCtx->pageIndex == PAUSE_EQUIP && pauseCtx->cursorX[PAUSE_EQUIP] != 0 && + !CHECK_OWNED_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP] - 1)) || + (pauseCtx->pageIndex == PAUSE_ITEM && + gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] == ITEM_NONE))) { pauseCtx->namedItem = PAUSE_ITEM_NONE; } if (pauseCtx->namedItem != PAUSE_ITEM_NONE) { + + osSyncPrintf("Named Item: %d\n", pauseCtx->namedItem); if ((pauseCtx->pageIndex == PAUSE_MAP) && !sInDungeonScene) { if (gSaveContext.language) { sp2A += 12; @@ -2234,6 +2257,11 @@ void KaleidoScope_UpdateNamePanel(PlayState* play) { const char* textureName = mapNameTextures[sp2A]; memcpy(pauseCtx->nameSegment, textureName, strlen(textureName) + 1); + } else if (pauseCtx->namedItem == ITEM_GLIDER) { + // CUSTOM + osSyncPrintf("GLIDER: %d\n", sp2A); + const char* textureName = gGliderItemNameENGTex; + memcpy(pauseCtx->nameSegment, textureName, strlen(textureName) + 1); } else { osSyncPrintf("zoom_name=%d\n", pauseCtx->namedItem); @@ -2512,28 +2540,28 @@ s16 func_80823A0C(PlayState* play, Vtx* vtx, s16 pageIndex, s16 arg3) { { 10, 50, 40, 255 }, }, { - { 80,40,30, 255}, - { 140,60,60,255 }, - { 140,60,60,255 }, + { 80, 40, 30, 255 }, + { 140, 60, 60, 255 }, + { 140, 60, 60, 255 }, { 80, 40, 30, 255 }, }, { - { 80,80,50,255 }, - { 120,120,70,255 }, - { 120,120,70,255 }, + { 80, 80, 50, 255 }, + { 120, 120, 70, 255 }, + { 120, 120, 70, 255 }, { 80, 80, 50, 255 }, }, { { 80, 40, 30, 255 }, - { 140,60,60,255 }, - { 140,60,60,255 }, + { 140, 60, 60, 255 }, + { 140, 60, 60, 255 }, { 80, 40, 30, 255 }, }, { - { 50,50,50,255 }, - { 110,110,110,255 }, - { 110,110,110,255 }, - { 50,50,50,255 }, + { 50, 50, 50, 255 }, + { 110, 110, 110, 255 }, + { 110, 110, 110, 255 }, + { 50, 50, 50, 255 }, }, }; PauseContext* pauseCtx = &play->pauseCtx; @@ -2562,38 +2590,48 @@ s16 func_80823A0C(PlayState* play, Vtx* vtx, s16 pageIndex, s16 arg3) { vtx[vtxIndex + 2].v.ob[1] = vtx[vtxIndex + 3].v.ob[1] = vtx[vtxIndex + 0].v.ob[1] - 32; - vtx[vtxIndex + 0].v.ob[2] = vtx[vtxIndex + 1].v.ob[2] = vtx[vtxIndex + 2].v.ob[2] = vtx[vtxIndex + 3].v.ob[2] = 0; + vtx[vtxIndex + 0].v.ob[2] = vtx[vtxIndex + 1].v.ob[2] = vtx[vtxIndex + 2].v.ob[2] = + vtx[vtxIndex + 3].v.ob[2] = 0; vtx[vtxIndex + 0].v.flag = 0; vtx[vtxIndex + 1].v.flag = 0; vtx[vtxIndex + 2].v.flag = 0; vtx[vtxIndex + 3].v.flag = 0; - vtx[vtxIndex + 0].v.tc[0] = vtx[vtxIndex + 0].v.tc[1] = vtx[vtxIndex + 1].v.tc[1] = vtx[vtxIndex + 2].v.tc[0] = 0; + vtx[vtxIndex + 0].v.tc[0] = vtx[vtxIndex + 0].v.tc[1] = vtx[vtxIndex + 1].v.tc[1] = + vtx[vtxIndex + 2].v.tc[0] = 0; vtx[vtxIndex + 1].v.tc[0] = vtx[vtxIndex + 3].v.tc[0] = 0xA00; vtx[vtxIndex + 2].v.tc[1] = vtx[vtxIndex + 3].v.tc[1] = 0x400; - //Color in the pages. Pages are drawn in groups. Each group is faded to the next. There are 4 total colors, 1/4 and 2/3 are the same creating a mirrored color set. - // TODO, go from 0,1,2,3 to 0,1,1,0 to only use two colors instead of 4. - Color_RGBA8 color = CVarGetColor(gPageVtxColorCvars[pageIndex][colorIndex], pageColors[pageIndex][colorIndex]); + // Color in the pages. Pages are drawn in groups. Each group is faded to the next. There are 4 total colors, + // 1/4 and 2/3 are the same creating a mirrored color set. + // TODO, go from 0,1,2,3 to 0,1,1,0 to only use two colors instead of 4. + Color_RGBA8 color = + CVarGetColor(gPageVtxColorCvars[pageIndex][colorIndex], pageColors[pageIndex][colorIndex]); Color_RGBA8 colorb = - CVarGetColor(gPageVtxColorCvars[pageIndex][colorIndex + 1], pageColors[pageIndex][colorIndex+1]); - vtx[vtxIndex + 0].v.cn[0] = vtx[vtxIndex + 2].v.cn[0] = color.r; // sPageVtxColorR[pageIndex][colorIndex + 0]; + CVarGetColor(gPageVtxColorCvars[pageIndex][colorIndex + 1], pageColors[pageIndex][colorIndex + 1]); + vtx[vtxIndex + 0].v.cn[0] = vtx[vtxIndex + 2].v.cn[0] = + color.r; // sPageVtxColorR[pageIndex][colorIndex + 0]; - vtx[vtxIndex + 0].v.cn[1] = vtx[vtxIndex + 2].v.cn[1] = color.g;// sPageVtxColorG[pageIndex][colorIndex + 0]; + vtx[vtxIndex + 0].v.cn[1] = vtx[vtxIndex + 2].v.cn[1] = + color.g; // sPageVtxColorG[pageIndex][colorIndex + 0]; - vtx[vtxIndex + 0].v.cn[2] = vtx[vtxIndex + 2].v.cn[2] = color.b; // sPageVtxColorB[pageIndex][colorIndex + 0]; + vtx[vtxIndex + 0].v.cn[2] = vtx[vtxIndex + 2].v.cn[2] = + color.b; // sPageVtxColorB[pageIndex][colorIndex + 0]; - vtx[vtxIndex + 1].v.cn[0] = vtx[vtxIndex + 3].v.cn[0] = colorb.r;//sPageVtxColorR[pageIndex][colorIndex + 1]; + vtx[vtxIndex + 1].v.cn[0] = vtx[vtxIndex + 3].v.cn[0] = + colorb.r; // sPageVtxColorR[pageIndex][colorIndex + 1]; - vtx[vtxIndex + 1].v.cn[1] = vtx[vtxIndex + 3].v.cn[1] = colorb.g; // sPageVtxColorG[pageIndex][colorIndex + 1]; + vtx[vtxIndex + 1].v.cn[1] = vtx[vtxIndex + 3].v.cn[1] = + colorb.g; // sPageVtxColorG[pageIndex][colorIndex + 1]; - vtx[vtxIndex + 1].v.cn[2] = vtx[vtxIndex + 3].v.cn[2] = colorb.b; // sPageVtxColorB[pageIndex][colorIndex + 1]; + vtx[vtxIndex + 1].v.cn[2] = vtx[vtxIndex + 3].v.cn[2] = + colorb.b; // sPageVtxColorB[pageIndex][colorIndex + 1]; - vtx[vtxIndex + 0].v.cn[3] = vtx[vtxIndex + 2].v.cn[3] = vtx[vtxIndex + 1].v.cn[3] = vtx[vtxIndex + 3].v.cn[3] = - pauseCtx->alpha; + vtx[vtxIndex + 0].v.cn[3] = vtx[vtxIndex + 2].v.cn[3] = vtx[vtxIndex + 1].v.cn[3] = + vtx[vtxIndex + 3].v.cn[3] = pauseCtx->alpha; } } @@ -2618,23 +2656,26 @@ s16 func_80823A0C(PlayState* play, Vtx* vtx, s16 pageIndex, s16 arg3) { vtx[vtxIndex + 2].v.ob[1] = vtx[vtxIndex + 3].v.ob[1] = vtx[vtxIndex + 0].v.ob[1] - ptr4[colorIndex]; - vtx[vtxIndex + 0].v.ob[2] = vtx[vtxIndex + 1].v.ob[2] = vtx[vtxIndex + 2].v.ob[2] = vtx[vtxIndex + 3].v.ob[2] = 0; + vtx[vtxIndex + 0].v.ob[2] = vtx[vtxIndex + 1].v.ob[2] = vtx[vtxIndex + 2].v.ob[2] = + vtx[vtxIndex + 3].v.ob[2] = 0; - vtx[vtxIndex + 0].v.flag = vtx[vtxIndex + 1].v.flag = vtx[vtxIndex + 2].v.flag = vtx[vtxIndex + 3].v.flag = 0; + vtx[vtxIndex + 0].v.flag = vtx[vtxIndex + 1].v.flag = vtx[vtxIndex + 2].v.flag = vtx[vtxIndex + 3].v.flag = + 0; - vtx[vtxIndex + 0].v.tc[0] = vtx[vtxIndex + 0].v.tc[1] = vtx[vtxIndex + 1].v.tc[1] = vtx[vtxIndex + 2].v.tc[0] = 0; + vtx[vtxIndex + 0].v.tc[0] = vtx[vtxIndex + 0].v.tc[1] = vtx[vtxIndex + 1].v.tc[1] = + vtx[vtxIndex + 2].v.tc[0] = 0; vtx[vtxIndex + 1].v.tc[0] = vtx[vtxIndex + 3].v.tc[0] = ptr2[colorIndex] << 5; vtx[vtxIndex + 2].v.tc[1] = vtx[vtxIndex + 3].v.tc[1] = ptr4[colorIndex] << 5; - vtx[vtxIndex + 0].v.cn[0] = vtx[vtxIndex + 2].v.cn[0] = vtx[vtxIndex + 0].v.cn[1] = vtx[vtxIndex + 2].v.cn[1] = - vtx[vtxIndex + 0].v.cn[2] = vtx[vtxIndex + 2].v.cn[2] = vtx[vtxIndex + 1].v.cn[0] = vtx[vtxIndex + 3].v.cn[0] = - vtx[vtxIndex + 1].v.cn[1] = vtx[vtxIndex + 3].v.cn[1] = vtx[vtxIndex + 1].v.cn[2] = - vtx[vtxIndex + 3].v.cn[2] = 255; + vtx[vtxIndex + 0].v.cn[0] = vtx[vtxIndex + 2].v.cn[0] = vtx[vtxIndex + 0].v.cn[1] = + vtx[vtxIndex + 2].v.cn[1] = vtx[vtxIndex + 0].v.cn[2] = vtx[vtxIndex + 2].v.cn[2] = + vtx[vtxIndex + 1].v.cn[0] = vtx[vtxIndex + 3].v.cn[0] = vtx[vtxIndex + 1].v.cn[1] = + vtx[vtxIndex + 3].v.cn[1] = vtx[vtxIndex + 1].v.cn[2] = vtx[vtxIndex + 3].v.cn[2] = 255; - vtx[vtxIndex + 0].v.cn[3] = vtx[vtxIndex + 2].v.cn[3] = vtx[vtxIndex + 1].v.cn[3] = vtx[vtxIndex + 3].v.cn[3] = - pauseCtx->alpha; + vtx[vtxIndex + 0].v.cn[3] = vtx[vtxIndex + 2].v.cn[3] = vtx[vtxIndex + 1].v.cn[3] = + vtx[vtxIndex + 3].v.cn[3] = pauseCtx->alpha; } if (pageIndex == 4) { @@ -2710,7 +2751,8 @@ s16 func_80823A0C(PlayState* play, Vtx* vtx, s16 pageIndex, s16 arg3) { static s16 D_8082B11C[] = { 0, 4, 8, 12, 24, 32, 56 }; -static s16 D_8082B11C_all[] = { 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 96 }; +static s16 D_8082B11C_all[] = { 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, + 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 96 }; static s16 D_8082B12C[] = { -114, 12, 44, 76 }; @@ -2834,7 +2876,11 @@ void KaleidoScope_InitVertices(PlayState* play, GraphicsContext* gfxCtx) { pauseCtx->cursorVtx[19].v.tc[1] = 0x400; // 24 items, 7 "item selected" backgrounds, 14 ammo digits (2 each for 7 items) -- then 4 vertices for each - pauseCtx->itemVtx = Graph_Alloc(gfxCtx, (24 + 7 + 2 * (CVarGetInteger(CVAR_ENHANCEMENT("BetterAmmoRendering"), 0) ? ARRAY_COUNT(D_8082B11C_all) : ARRAY_COUNT(D_8082B11C))) * 4 * sizeof(Vtx)); + pauseCtx->itemVtx = Graph_Alloc( + gfxCtx, (24 + 7 + + 2 * (CVarGetInteger(CVAR_ENHANCEMENT("BetterAmmoRendering"), 0) ? ARRAY_COUNT(D_8082B11C_all) + : ARRAY_COUNT(D_8082B11C))) * + 4 * sizeof(Vtx)); for (phi_t4 = 0, phi_t2 = 0, phi_t5 = 58; phi_t4 < 4; phi_t4++, phi_t5 -= 32) { for (phi_t1 = -96, phi_t3 = 0; phi_t3 < 6; phi_t3++, phi_t2 += 4, phi_t1 += 32) { @@ -2926,7 +2972,8 @@ void KaleidoScope_InitVertices(PlayState* play, GraphicsContext* gfxCtx) { u8 gBetterAmmoRendering = CVarGetInteger(CVAR_ENHANCEMENT("BetterAmmoRendering"), 0); - for (phi_t3 = 0; phi_t3 < (gBetterAmmoRendering ? ARRAY_COUNT(D_8082B11C_all) : ARRAY_COUNT(D_8082B11C)); phi_t3++) { + for (phi_t3 = 0; phi_t3 < (gBetterAmmoRendering ? ARRAY_COUNT(D_8082B11C_all) : ARRAY_COUNT(D_8082B11C)); + phi_t3++) { phi_t4 = gBetterAmmoRendering ? D_8082B11C_all[phi_t3] : D_8082B11C[phi_t3]; pauseCtx->itemVtx[phi_t2 + 0].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 2].v.ob[0] = @@ -3236,16 +3283,15 @@ void KaleidoScope_Draw(PlayState* play) { pauseCtx->stickRelX = input->rel.stick_x; pauseCtx->stickRelY = input->rel.stick_y; - //gSPSegment(POLY_OPA_DISP++, 0x02, interfaceCtx->parameterSegment); + // gSPSegment(POLY_OPA_DISP++, 0x02, interfaceCtx->parameterSegment); gSPSegment(POLY_OPA_DISP++, 0x07, pauseCtx->playerSegment); - //gSPSegment(POLY_OPA_DISP++, 0x08, pauseCtx->iconItemSegment); - //gSPSegment(POLY_OPA_DISP++, 0x09, pauseCtx->iconItem24Segment); + // gSPSegment(POLY_OPA_DISP++, 0x08, pauseCtx->iconItemSegment); + // gSPSegment(POLY_OPA_DISP++, 0x09, pauseCtx->iconItem24Segment); gSPSegment(POLY_OPA_DISP++, 0x0A, pauseCtx->nameSegment); - //gSPSegment(POLY_OPA_DISP++, 0x0C, pauseCtx->iconItemAltSegment); - //gSPSegment(POLY_OPA_DISP++, 0x0D, pauseCtx->iconItemLangSegment); + // gSPSegment(POLY_OPA_DISP++, 0x0C, pauseCtx->iconItemAltSegment); + // gSPSegment(POLY_OPA_DISP++, 0x0D, pauseCtx->iconItemLangSegment); - if (pauseCtx->debugState == 0) - { + if (pauseCtx->debugState == 0) { KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z); Gfx_SetupDL_42Opa(play->state.gfxCtx); @@ -3276,12 +3322,8 @@ void KaleidoScope_Draw(PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } -uint32_t _bswap32(uint32_t a) -{ - a = ((a & 0x000000FF) << 24) | - ((a & 0x0000FF00) << 8) | - ((a & 0x00FF0000) >> 8) | - ((a & 0xFF000000) >> 24); +uint32_t _bswap32(uint32_t a) { + a = ((a & 0x000000FF) << 24) | ((a & 0x0000FF00) << 8) | ((a & 0x00FF0000) >> 8) | ((a & 0xFF000000) >> 24); return a; } @@ -3301,7 +3343,8 @@ void func_808265BC(PlayState* play) { pauseCtx->pageIndex = D_8082ABEC[pauseCtx->mode]; - if ((CVarGetInteger(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 0) != 0) && (pauseCtx->pageIndex == PAUSE_EQUIP)) { + if ((CVarGetInteger(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 0) != 0) && + (pauseCtx->pageIndex == PAUSE_EQUIP)) { gSaveContext.buttonStatus[1] = BTN_ENABLED; gSaveContext.buttonStatus[2] = BTN_ENABLED; gSaveContext.buttonStatus[3] = BTN_ENABLED; @@ -3511,7 +3554,8 @@ void KaleidoScope_RegisterUpdatedDungeonMapTexture() { KaleidoScope_UpdateDungeonMap(gPlayState); // KaleidoScope_UpdateDungeonMap will update the palette index for the current floor if the cursor is on the floor - // If the player toggles alt assets while the cursor is not in the floor level, then we handle the palette index here + // If the player toggles alt assets while the cursor is not in the floor level, then we handle the palette index + // here if (gPlayState->sceneNum >= SCENE_DEKU_TREE && gPlayState->sceneNum <= SCENE_TREASURE_BOX_SHOP && (VREG(30) + 3) == pauseCtx->dungeonMapSlot && (VREG(30) + 3) != pauseCtx->cursorPoint[PAUSE_MAP]) { @@ -3562,8 +3606,7 @@ void KaleidoScope_UpdateDungeonMap(PlayState* play) { } } -void KaleidoScope_Update(PlayState* play) -{ +void KaleidoScope_Update(PlayState* play) { static s16 D_8082B258 = 0; static s16 D_8082B25C = 10; static s16 D_8082B260 = 0; @@ -3624,20 +3667,20 @@ void KaleidoScope_Update(PlayState* play) size0 = (uintptr_t)_icon_item_staticSegmentRomEnd - (uintptr_t)_icon_item_staticSegmentRomStart; osSyncPrintf("icon_item size0=%x\n", size0); - DmaMgr_SendRequest1(pauseCtx->iconItemSegment, (uintptr_t)_icon_item_staticSegmentRomStart, size0, - __FILE__, __LINE__); + DmaMgr_SendRequest1(pauseCtx->iconItemSegment, (uintptr_t)_icon_item_staticSegmentRomStart, size0, __FILE__, + __LINE__); gSegments[8] = VIRTUAL_TO_PHYSICAL(pauseCtx->iconItemSegment); pauseCtx->iconItem24Segment = (void*)(((uintptr_t)pauseCtx->iconItemSegment + size0 + 0xF) & ~0xF); #if 1 - //size = (uintptr_t)_icon_item_24_staticSegmentRomEnd - (uintptr_t)_icon_item_24_staticSegmentRomStart; - //osSyncPrintf("icon_item24 size=%x\n", size); - //DmaMgr_SendRequest1(pauseCtx->iconItem24Segment, (uintptr_t)_icon_item_24_staticSegmentRomStart, size, - //__FILE__, __LINE__); + // size = (uintptr_t)_icon_item_24_staticSegmentRomEnd - (uintptr_t)_icon_item_24_staticSegmentRomStart; + // osSyncPrintf("icon_item24 size=%x\n", size); + // DmaMgr_SendRequest1(pauseCtx->iconItem24Segment, (uintptr_t)_icon_item_24_staticSegmentRomStart, size, + //__FILE__, __LINE__); - //pauseCtx->iconItemAltSegment = (void*)(((uintptr_t)pauseCtx->iconItem24Segment + size + 0xF) & ~0xF); + // pauseCtx->iconItemAltSegment = (void*)(((uintptr_t)pauseCtx->iconItem24Segment + size + 0xF) & ~0xF); #endif switch (play->sceneNum) { @@ -3661,10 +3704,10 @@ void KaleidoScope_Update(PlayState* play) case SCENE_SHADOW_TEMPLE_BOSS: #if 1 sInDungeonScene = true; - //size2 = (uintptr_t)_icon_item_dungeon_staticSegmentRomEnd - (uintptr_t)_icon_item_dungeon_staticSegmentRomStart; - //osSyncPrintf("icon_item_dungeon dungeon-size2=%x\n", size2); - //DmaMgr_SendRequest1(pauseCtx->iconItemAltSegment, (uintptr_t)_icon_item_dungeon_staticSegmentRomStart, - //size2, __FILE__, __LINE__); + // size2 = (uintptr_t)_icon_item_dungeon_staticSegmentRomEnd - + // (uintptr_t)_icon_item_dungeon_staticSegmentRomStart; osSyncPrintf("icon_item_dungeon + // dungeon-size2=%x\n", size2); DmaMgr_SendRequest1(pauseCtx->iconItemAltSegment, + // (uintptr_t)_icon_item_dungeon_staticSegmentRomStart, size2, __FILE__, __LINE__); #endif interfaceCtx->mapPalette[28] = 6; @@ -3675,37 +3718,39 @@ void KaleidoScope_Update(PlayState* play) default: #if 1 sInDungeonScene = false; - //size2 = (uintptr_t)_icon_item_field_staticSegmentRomEnd - (uintptr_t)_icon_item_field_staticSegmentRomStart; - //osSyncPrintf("icon_item_field field-size2=%x\n", size2); - //DmaMgr_SendRequest1(pauseCtx->iconItemAltSegment, (uintptr_t)_icon_item_field_staticSegmentRomStart, - //size2, __FILE__, __LINE__); + // size2 = (uintptr_t)_icon_item_field_staticSegmentRomEnd - + // (uintptr_t)_icon_item_field_staticSegmentRomStart; osSyncPrintf("icon_item_field + // field-size2=%x\n", size2); DmaMgr_SendRequest1(pauseCtx->iconItemAltSegment, + // (uintptr_t)_icon_item_field_staticSegmentRomStart, size2, __FILE__, __LINE__); #endif break; } - // OTRTODO: LANGUAGE SUPPORT + // OTRTODO: LANGUAGE SUPPORT #if 1 - //pauseCtx->iconItemLangSegment = (void*)(((uintptr_t)pauseCtx->iconItemAltSegment + size2 + 0xF) & ~0xF); + // pauseCtx->iconItemLangSegment = (void*)(((uintptr_t)pauseCtx->iconItemAltSegment + size2 + 0xF) & ~0xF); if (gSaveContext.language == LANGUAGE_ENG) { - //size = (uintptr_t)_icon_item_nes_staticSegmentRomEnd - (uintptr_t)_icon_item_nes_staticSegmentRomStart; - //osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", size); - //DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, _icon_item_nes_staticSegmentRomStart, size, - //__FILE__, __LINE__); + // size = (uintptr_t)_icon_item_nes_staticSegmentRomEnd - + // (uintptr_t)_icon_item_nes_staticSegmentRomStart; osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", + // size); DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, _icon_item_nes_staticSegmentRomStart, size, + //__FILE__, __LINE__); } else if (gSaveContext.language == LANGUAGE_GER) { - //size = (uintptr_t)_icon_item_ger_staticSegmentRomEnd - (uintptr_t)_icon_item_ger_staticSegmentRomStart; - //osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", size); - //DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, (uintptr_t)_icon_item_ger_staticSegmentRomStart, size, - //__FILE__, __LINE__); + // size = (uintptr_t)_icon_item_ger_staticSegmentRomEnd - + // (uintptr_t)_icon_item_ger_staticSegmentRomStart; osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", + // size); DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, + // (uintptr_t)_icon_item_ger_staticSegmentRomStart, size, + //__FILE__, __LINE__); } else { - //size = (uintptr_t)_icon_item_fra_staticSegmentRomEnd - (uintptr_t)_icon_item_fra_staticSegmentRomStart; - //osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", size); - //DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, (uintptr_t)_icon_item_fra_staticSegmentRomStart, size, - //__FILE__, __LINE__); + // size = (uintptr_t)_icon_item_fra_staticSegmentRomEnd - + // (uintptr_t)_icon_item_fra_staticSegmentRomStart; osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", + // size); DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, + // (uintptr_t)_icon_item_fra_staticSegmentRomStart, size, + //__FILE__, __LINE__); } #endif - //pauseCtx->nameSegment = (void*)(((uintptr_t)pauseCtx->iconItemLangSegment + size + 0xF) & ~0xF); + // pauseCtx->nameSegment = (void*)(((uintptr_t)pauseCtx->iconItemLangSegment + size + 0xF) & ~0xF); pauseCtx->nameSegment = malloc(0x400 + 0xA00); // OTRTODO: GET RID OF THIS osSyncPrintf("サイズ=%x\n", size2 + size1 + size0 + size); @@ -3718,8 +3763,8 @@ void KaleidoScope_Update(PlayState* play) const char* textureName = mapNameTextures[offsets[gSaveContext.language] + gSaveContext.worldMapArea]; memcpy(pauseCtx->nameSegment + 0x400, textureName, strlen(textureName) + 1); } - // OTRTODO - player on pause - #if 1 +// OTRTODO - player on pause +#if 1 // HDTODO: Remove sPreRenderCvg stuff? sPreRenderCvg = (void*)(((uintptr_t)pauseCtx->nameSegment + 0x400 + 0xA00 + 0xF) & ~0xF); @@ -3728,8 +3773,8 @@ void KaleidoScope_Update(PlayState* play) pauseCtx->playerSegment, NULL, sPreRenderCvg); KaleidoScope_DrawPlayerWork(play); - //KaleidoScope_SetupPlayerPreRender(play); - #endif +// KaleidoScope_SetupPlayerPreRender(play); +#endif for (i = 0; i < ARRAY_COUNT(pauseCtx->worldMapPoints); i++) { pauseCtx->worldMapPoints[i] = 0; } @@ -3959,8 +4004,8 @@ void KaleidoScope_Update(PlayState* play) case 4: if (pauseCtx->unk_1F4 == 160.0f) { KaleidoScope_SetDefaultCursor(play); - //OTRTODO - Player on pause - //KaleidoScope_ProcessPlayerPreRender(); + // OTRTODO - Player on pause + // KaleidoScope_ProcessPlayerPreRender(); } pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 -= 160.0f / WREG(6); @@ -3999,7 +4044,8 @@ void KaleidoScope_Update(PlayState* play) } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { pauseCtx->mode = 0; pauseCtx->promptChoice = 0; - Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] = gSaveContext.buttonStatus[3] = BTN_DISABLED; gSaveContext.buttonStatus[4] = BTN_ENABLED; @@ -4010,7 +4056,8 @@ void KaleidoScope_Update(PlayState* play) pauseCtx->unk_1EC = 0; pauseCtx->state = 7; } else if (CHECK_BTN_ALL(input->press.button, BTN_CUP) && pauseCtx->pageIndex == PAUSE_QUEST) { - Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); pauseCtx->randoQuestMode ^= 1; } break; @@ -4050,7 +4097,8 @@ void KaleidoScope_Update(PlayState* play) pauseCtx->unk_1E4 = 0; pauseCtx->mode = 0; pauseCtx->promptChoice = 0; - Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] = gSaveContext.buttonStatus[3] = BTN_DISABLED; gSaveContext.buttonStatus[4] = BTN_ENABLED; @@ -4061,14 +4109,14 @@ void KaleidoScope_Update(PlayState* play) pauseCtx->unk_1EC = 0; pauseCtx->state = 7; } else if (pauseCtx->ocarinaStaff->state == pauseCtx->ocarinaSongIdx) { - Audio_PlaySoundGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, - &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); D_8082B258 = 0; D_8082B25C = 30; pauseCtx->unk_1E4 = 6; } else if (pauseCtx->ocarinaStaff->state == 0xFF) { - Audio_PlaySoundGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, - &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); D_8082B258 = 4; D_8082B25C = 20; pauseCtx->unk_1E4 = 6; @@ -4101,7 +4149,8 @@ void KaleidoScope_Update(PlayState* play) pauseCtx->unk_1E4 = 0; pauseCtx->mode = 0; pauseCtx->promptChoice = 0; - Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] = gSaveContext.buttonStatus[3] = BTN_DISABLED; gSaveContext.buttonStatus[4] = BTN_ENABLED; @@ -4150,11 +4199,13 @@ void KaleidoScope_Update(PlayState* play) YREG(8) = pauseCtx->unk_204; func_800F64E0(0); } else { - Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); Play_PerformSave(play); pauseCtx->unk_1EC = 4; - D_8082B25C = CVarGetInteger(CVAR_ENHANCEMENT("SkipSaveConfirmation"), 0) ? 3 /* 0.1 sec */ : 90 /* 3 secs */; + D_8082B25C = CVarGetInteger(CVAR_ENHANCEMENT("SkipSaveConfirmation"), 0) ? 3 /* 0.1 sec */ + : 90 /* 3 secs */; } } else if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_B)) { @@ -4240,20 +4291,21 @@ void KaleidoScope_Update(PlayState* play) pauseCtx->iconItemSegment = (void*)(((uintptr_t)play->objectCtx.spaceStart + 0x30) & ~0x3F); size0 = (uintptr_t)_icon_item_staticSegmentRomEnd - (uintptr_t)_icon_item_staticSegmentRomStart; osSyncPrintf("icon_item size0=%x\n", size0); - DmaMgr_SendRequest1(pauseCtx->iconItemSegment, (uintptr_t)_icon_item_staticSegmentRomStart, size0, - __FILE__, __LINE__); + DmaMgr_SendRequest1(pauseCtx->iconItemSegment, (uintptr_t)_icon_item_staticSegmentRomStart, size0, __FILE__, + __LINE__); pauseCtx->iconItem24Segment = (void*)(((uintptr_t)pauseCtx->iconItemSegment + size0 + 0xF) & ~0xF); - //size = (uintptr_t)_icon_item_24_staticSegmentRomEnd - (uintptr_t)_icon_item_24_staticSegmentRomStart; + // size = (uintptr_t)_icon_item_24_staticSegmentRomEnd - (uintptr_t)_icon_item_24_staticSegmentRomStart; osSyncPrintf("icon_item24 size=%x\n", size); - //DmaMgr_SendRequest1(pauseCtx->iconItem24Segment, (uintptr_t)_icon_item_24_staticSegmentRomStart, size, - //__FILE__, __LINE__); + // DmaMgr_SendRequest1(pauseCtx->iconItem24Segment, (uintptr_t)_icon_item_24_staticSegmentRomStart, size, + //__FILE__, __LINE__); pauseCtx->iconItemAltSegment = (void*)(((uintptr_t)pauseCtx->iconItem24Segment + size + 0xF) & ~0xF); - //size2 = (uintptr_t)_icon_item_gameover_staticSegmentRomEnd - (uintptr_t)_icon_item_gameover_staticSegmentRomStart; - //osSyncPrintf("icon_item_dungeon gameover-size2=%x\n", size2); - //DmaMgr_SendRequest1(pauseCtx->iconItemAltSegment, (uintptr_t)_icon_item_gameover_staticSegmentRomStart, size2, - //__FILE__, __LINE__); + // size2 = (uintptr_t)_icon_item_gameover_staticSegmentRomEnd - + // (uintptr_t)_icon_item_gameover_staticSegmentRomStart; osSyncPrintf("icon_item_dungeon + // gameover-size2=%x\n", size2); DmaMgr_SendRequest1(pauseCtx->iconItemAltSegment, + // (uintptr_t)_icon_item_gameover_staticSegmentRomStart, size2, + //__FILE__, __LINE__); pauseCtx->iconItemLangSegment = (void*)(((uintptr_t)pauseCtx->iconItemAltSegment + size2 + 0xF) & ~0xF); @@ -4261,17 +4313,20 @@ void KaleidoScope_Update(PlayState* play) if (gSaveContext.language == LANGUAGE_ENG) { size = (uintptr_t)_icon_item_nes_staticSegmentRomEnd - (uintptr_t)_icon_item_nes_staticSegmentRomStart; osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", size); - DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, (uintptr_t)_icon_item_nes_staticSegmentRomStart, size, + DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, (uintptr_t)_icon_item_nes_staticSegmentRomStart, + size, __FILE__, __LINE__); } else if (gSaveContext.language == LANGUAGE_GER) { size = (uintptr_t)_icon_item_ger_staticSegmentRomEnd - (uintptr_t)_icon_item_ger_staticSegmentRomStart; osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", size); - DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, (uintptr_t)_icon_item_ger_staticSegmentRomStart, size, + DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, (uintptr_t)_icon_item_ger_staticSegmentRomStart, + size, __FILE__, __LINE__); } else { size = (uintptr_t)_icon_item_fra_staticSegmentRomEnd - (uintptr_t)_icon_item_fra_staticSegmentRomStart; osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", size); - DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, (uintptr_t)_icon_item_fra_staticSegmentRomStart, size, + DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, (uintptr_t)_icon_item_fra_staticSegmentRomStart, + size, __FILE__, __LINE__); } */ @@ -4389,18 +4444,20 @@ void KaleidoScope_Update(PlayState* play) if (CHECK_BTN_ALL(input->press.button, BTN_A)) { if (pauseCtx->promptChoice != 0) { pauseCtx->promptChoice = 0; - Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); pauseCtx->state = 0x10; gameOverCtx->state++; } else { - Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, - &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); pauseCtx->promptChoice = 0; Play_SaveSceneFlags(play); gSaveContext.savedSceneNum = play->sceneNum; Save_SaveFile(); pauseCtx->state = 0xF; - D_8082B25C = CVarGetInteger(CVAR_ENHANCEMENT("SkipSaveConfirmation"), 0) ? 3 /* 0.1 sec */ : 90 /* 3 secs */; + D_8082B25C = + CVarGetInteger(CVAR_ENHANCEMENT("SkipSaveConfirmation"), 0) ? 3 /* 0.1 sec */ : 90 /* 3 secs */; } } break; @@ -4421,8 +4478,8 @@ void KaleidoScope_Update(PlayState* play) case 0x10: if (CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_START)) { if (pauseCtx->promptChoice == 0 && GameInteractor_Should(VB_BE_ABLE_TO_SAVE, true)) { - Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, - &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); Play_SaveSceneFlags(play); switch (gSaveContext.entranceIndex) { @@ -4471,7 +4528,8 @@ void KaleidoScope_Update(PlayState* play) break; } } else { - Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); } pauseCtx->state = 0x11; @@ -4494,7 +4552,8 @@ void KaleidoScope_Update(PlayState* play) // Reset frame counter to prevent autosave on respawn play->gameplayFrames = 0; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; - gSaveContext.health = CVarGetInteger(CVAR_ENHANCEMENT("FullHealthSpawn"), 0) ? gSaveContext.healthCapacity : 0x30; + gSaveContext.health = + CVarGetInteger(CVAR_ENHANCEMENT("FullHealthSpawn"), 0) ? gSaveContext.healthCapacity : 0x30; Audio_QueueSeqCmd(0xF << 28 | SEQ_PLAYER_BGM_MAIN << 24 | 0xA); gSaveContext.healthAccumulator = 0; gSaveContext.magicState = MAGIC_STATE_IDLE; diff --git a/timesplitdata.json b/timesplitdata.json new file mode 100644 index 000000000..ec747fa47 --- /dev/null +++ b/timesplitdata.json @@ -0,0 +1 @@ +null \ No newline at end of file