diff --git a/.github/workflows/generate-builds.yml b/.github/workflows/generate-builds.yml index 4bf90148f..b241fe890 100644 --- a/.github/workflows/generate-builds.yml +++ b/.github/workflows/generate-builds.yml @@ -109,9 +109,9 @@ jobs: - name: Install latest SDL run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - wget https://www.libsdl.org/release/SDL2-2.24.1.tar.gz - tar -xzf SDL2-2.24.1.tar.gz - cd SDL2-2.24.1 + wget https://www.libsdl.org/release/SDL2-2.26.1.tar.gz + tar -xzf SDL2-2.26.1.tar.gz + cd SDL2-2.26.1 ./configure make -j 10 sudo make install diff --git a/CMakeLists.txt b/CMakeLists.txt index 84da81a12..0f0f6b8df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,8 +7,8 @@ set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use") set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE) project(Ship LANGUAGES C CXX - VERSION 5.1.3) -set(PROJECT_BUILD_NAME "BRADLEY DELTA" CACHE STRING "") + VERSION 5.1.4) +set(PROJECT_BUILD_NAME "BRADLEY ECHO" CACHE STRING "") set(PROJECT_TEAM "github.com/harbourmasters" CACHE STRING "") set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT soh) diff --git a/OTRExporter/OTRExporter/AnimationExporter.cpp b/OTRExporter/OTRExporter/AnimationExporter.cpp index 74fa8a7e6..2d1039947 100644 --- a/OTRExporter/OTRExporter/AnimationExporter.cpp +++ b/OTRExporter/OTRExporter/AnimationExporter.cpp @@ -1,11 +1,11 @@ #include "AnimationExporter.h" -#include +#include void OTRExporter_Animation::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) { ZAnimation* anim = (ZAnimation*)res; - WriteHeader(res, outPath, writer, Ship::ResourceType::Animation); + WriteHeader(res, outPath, writer, Ship::ResourceType::SOH_Animation); ZNormalAnimation* normalAnim = dynamic_cast(anim); ZCurveAnimation* curveAnim = dynamic_cast(anim); diff --git a/OTRExporter/OTRExporter/AudioExporter.cpp b/OTRExporter/OTRExporter/AudioExporter.cpp index fb06708f1..f2fc75928 100644 --- a/OTRExporter/OTRExporter/AudioExporter.cpp +++ b/OTRExporter/OTRExporter/AudioExporter.cpp @@ -1,6 +1,5 @@ #include "AudioExporter.h" #include "Main.h" -#include #include #include #include @@ -30,7 +29,7 @@ void OTRExporter_Audio::WriteSampleEntryReference(ZAudio* audio, SampleEntry* en void OTRExporter_Audio::WriteSampleEntry(SampleEntry* entry, BinaryWriter* writer) { - WriteHeader(nullptr, "", writer, Ship::ResourceType::AudioSample, Ship::Version::Rachael); + WriteHeader(nullptr, "", writer, Ship::ResourceType::SOH_AudioSample, Ship::Version::Rachael); writer->Write(entry->codec); writer->Write(entry->medium); @@ -82,7 +81,7 @@ void OTRExporter_Audio::Save(ZResource* res, const fs::path& outPath, BinaryWrit { ZAudio* audio = (ZAudio*)res; - WriteHeader(res, outPath, writer, Ship::ResourceType::Audio, Ship::Version::Rachael); + WriteHeader(res, outPath, writer, Ship::ResourceType::SOH_Audio, Ship::Version::Rachael); // Write Samples as individual files for (auto pair : audio->samples) @@ -115,7 +114,7 @@ void OTRExporter_Audio::Save(ZResource* res, const fs::path& outPath, BinaryWrit MemoryStream* fntStream = new MemoryStream(); BinaryWriter fntWriter = BinaryWriter(fntStream); - WriteHeader(nullptr, "", &fntWriter, Ship::ResourceType::AudioSoundFont, Ship::Version::Rachael); + WriteHeader(nullptr, "", &fntWriter, Ship::ResourceType::SOH_AudioSoundFont, Ship::Version::Rachael); fntWriter.Write((uint32_t)i); fntWriter.Write(audio->soundFontTable[i].medium); @@ -174,7 +173,7 @@ void OTRExporter_Audio::Save(ZResource* res, const fs::path& outPath, BinaryWrit MemoryStream* seqStream = new MemoryStream(); BinaryWriter seqWriter = BinaryWriter(seqStream); - WriteHeader(nullptr, "", &seqWriter, Ship::ResourceType::AudioSequence, Ship::Version::Rachael); + WriteHeader(nullptr, "", &seqWriter, Ship::ResourceType::SOH_AudioSequence, Ship::Version::Rachael); seqWriter.Write((uint32_t)seq.size()); seqWriter.Write(seq.data(), seq.size()); diff --git a/OTRExporter/OTRExporter/BackgroundExporter.cpp b/OTRExporter/OTRExporter/BackgroundExporter.cpp index bf68255b7..ced388d43 100644 --- a/OTRExporter/OTRExporter/BackgroundExporter.cpp +++ b/OTRExporter/OTRExporter/BackgroundExporter.cpp @@ -4,6 +4,10 @@ void OTRExporter_Background::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) { ZBackground* bg = (ZBackground*)res; + + WriteHeader(bg, outPath, writer, Ship::ResourceType::SOH_Background); + + writer->Write((uint32_t)bg->GetRawDataSize()); auto data = bg->parent->GetRawData(); writer->Write((char*)data.data() + bg->GetRawDataIndex(), bg->GetRawDataSize()); diff --git a/OTRExporter/OTRExporter/CMakeLists.txt b/OTRExporter/OTRExporter/CMakeLists.txt index 60fb8343e..9d012af95 100644 --- a/OTRExporter/OTRExporter/CMakeLists.txt +++ b/OTRExporter/OTRExporter/CMakeLists.txt @@ -158,16 +158,19 @@ endif() target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../ZAPDTR/ZAPD/ - ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/extern/ZAPDUtils - ${CMAKE_CURRENT_SOURCE_DIR}/../../ZAPDTR/lib/tinyxml2 - ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship + ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/include + # TODO: these should no longer be necessary if we were to link against LUS + ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/src - ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/src/resource - ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/src/resource/types ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/extern - ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/extern/spdlog/include - ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/src/graphic/Fast3D/U64 + ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/extern/Mercury + ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/extern/tinyxml2 + ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/extern/ZAPDUtils ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/extern/StormLib/src + ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/extern/spdlog/include + ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/extern/nlohmann-json/include + ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/src/resource + ${CMAKE_CURRENT_SOURCE_DIR}/../../soh/soh . ) diff --git a/OTRExporter/OTRExporter/CollisionExporter.cpp b/OTRExporter/OTRExporter/CollisionExporter.cpp index 02f20e674..21e4cc4c6 100644 --- a/OTRExporter/OTRExporter/CollisionExporter.cpp +++ b/OTRExporter/OTRExporter/CollisionExporter.cpp @@ -1,11 +1,11 @@ #include "CollisionExporter.h" -#include +#include void OTRExporter_Collision::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) { ZCollisionHeader* col = (ZCollisionHeader*)res; - WriteHeader(res, outPath, writer, Ship::ResourceType::CollisionHeader); + WriteHeader(res, outPath, writer, Ship::ResourceType::SOH_CollisionHeader); writer->Write(col->absMinX); writer->Write(col->absMinY); diff --git a/OTRExporter/OTRExporter/CutsceneExporter.cpp b/OTRExporter/OTRExporter/CutsceneExporter.cpp index b52d73d8b..d08ff6c59 100644 --- a/OTRExporter/OTRExporter/CutsceneExporter.cpp +++ b/OTRExporter/OTRExporter/CutsceneExporter.cpp @@ -1,11 +1,11 @@ #include "CutsceneExporter.h" -#include +#include void OTRExporter_Cutscene::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) { ZCutscene* cs = (ZCutscene*)res; - WriteHeader(cs, outPath, writer, Ship::ResourceType::Cutscene); + WriteHeader(cs, outPath, writer, Ship::ResourceType::SOH_Cutscene); //writer->Write((uint32_t)cs->commands.size() + 2 + 2); writer->Write((uint32_t)0); diff --git a/OTRExporter/OTRExporter/DisplayListExporter.cpp b/OTRExporter/OTRExporter/DisplayListExporter.cpp index 9ed7a18c1..4bc5cd5bc 100644 --- a/OTRExporter/OTRExporter/DisplayListExporter.cpp +++ b/OTRExporter/OTRExporter/DisplayListExporter.cpp @@ -5,7 +5,7 @@ #include #include "StrHash64/StrHash64.h" #include "spdlog/spdlog.h" -#include "PR/ultra64/gbi.h" +#include #include #include #include diff --git a/OTRExporter/OTRExporter/Exporter.h b/OTRExporter/OTRExporter/Exporter.h index 103617ede..2f6f23916 100644 --- a/OTRExporter/OTRExporter/Exporter.h +++ b/OTRExporter/OTRExporter/Exporter.h @@ -3,7 +3,7 @@ #include "ZArray.h" //#include "OTRExporter.h" #include -#include +#include #include "VersionInfo.h" class OTRExporter : public ZResourceExporter diff --git a/OTRExporter/OTRExporter/Main.cpp b/OTRExporter/OTRExporter/Main.cpp index 011e8a94c..da7180b34 100644 --- a/OTRExporter/OTRExporter/Main.cpp +++ b/OTRExporter/OTRExporter/Main.cpp @@ -1,4 +1,4 @@ -#include +#include "Main.h" #include "BackgroundExporter.h" #include "TextureExporter.h" #include "RoomExporter.h" diff --git a/OTRExporter/OTRExporter/Main.h b/OTRExporter/OTRExporter/Main.h index df98bfe15..09485be36 100644 --- a/OTRExporter/OTRExporter/Main.h +++ b/OTRExporter/OTRExporter/Main.h @@ -1,6 +1,6 @@ #pragma once -#include +#include extern std::shared_ptr otrArchive; extern std::map> files; diff --git a/OTRExporter/OTRExporter/PathExporter.cpp b/OTRExporter/OTRExporter/PathExporter.cpp index 75f6b723f..e3f797d9c 100644 --- a/OTRExporter/OTRExporter/PathExporter.cpp +++ b/OTRExporter/OTRExporter/PathExporter.cpp @@ -5,7 +5,7 @@ void OTRExporter_Path::Save(ZResource* res, const fs::path& outPath, BinaryWrite { ZPath* path = (ZPath*)res; - WriteHeader(res, outPath, writer, Ship::ResourceType::Path); + WriteHeader(res, outPath, writer, Ship::ResourceType::SOH_Path); writer->Write((uint32_t)path->pathways.size()); diff --git a/OTRExporter/OTRExporter/PlayerAnimationExporter.cpp b/OTRExporter/OTRExporter/PlayerAnimationExporter.cpp index 9b65f199b..22d108c82 100644 --- a/OTRExporter/OTRExporter/PlayerAnimationExporter.cpp +++ b/OTRExporter/OTRExporter/PlayerAnimationExporter.cpp @@ -1,11 +1,11 @@ #include "PlayerAnimationExporter.h" -#include +#include void OTRExporter_PlayerAnimationExporter::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) { ZPlayerAnimationData* anim = (ZPlayerAnimationData*)res; - WriteHeader(res, outPath, writer, Ship::ResourceType::PlayerAnimation); + WriteHeader(res, outPath, writer, Ship::ResourceType::SOH_PlayerAnimation); auto start = std::chrono::steady_clock::now(); diff --git a/OTRExporter/OTRExporter/RoomExporter.cpp b/OTRExporter/OTRExporter/RoomExporter.cpp index fe022a691..83bd3bbc6 100644 --- a/OTRExporter/OTRExporter/RoomExporter.cpp +++ b/OTRExporter/OTRExporter/RoomExporter.cpp @@ -23,7 +23,7 @@ #include #include "CollisionExporter.h" #include "DisplayListExporter.h" -#include "Resource.h" +#include #include #include #include @@ -39,7 +39,7 @@ void OTRExporter_Room::Save(ZResource* res, const fs::path& outPath, BinaryWrite { ZRoom* room = (ZRoom*)res; - WriteHeader(res, outPath, writer, Ship::ResourceType::Room); + WriteHeader(res, outPath, writer, Ship::ResourceType::SOH_Room); writer->Write((uint32_t)room->commands.size()); diff --git a/OTRExporter/OTRExporter/SkeletonExporter.cpp b/OTRExporter/OTRExporter/SkeletonExporter.cpp index 3e0c58d06..f5e3ada80 100644 --- a/OTRExporter/OTRExporter/SkeletonExporter.cpp +++ b/OTRExporter/OTRExporter/SkeletonExporter.cpp @@ -1,5 +1,5 @@ #include "SkeletonExporter.h" -#include +#include #include #include "DisplayListExporter.h" @@ -7,7 +7,7 @@ void OTRExporter_Skeleton::Save(ZResource* res, const fs::path& outPath, BinaryW { ZSkeleton* skel = (ZSkeleton*)res; - WriteHeader(res, outPath, writer, Ship::ResourceType::Skeleton); + WriteHeader(res, outPath, writer, Ship::ResourceType::SOH_Skeleton); writer->Write((uint8_t)skel->type); writer->Write((uint8_t)skel->limbType); diff --git a/OTRExporter/OTRExporter/SkeletonLimbExporter.cpp b/OTRExporter/OTRExporter/SkeletonLimbExporter.cpp index e29c9a425..9b8742538 100644 --- a/OTRExporter/OTRExporter/SkeletonLimbExporter.cpp +++ b/OTRExporter/OTRExporter/SkeletonLimbExporter.cpp @@ -1,13 +1,13 @@ #include "SkeletonLimbExporter.h" #include "DisplayListExporter.h" -#include +#include #include void OTRExporter_SkeletonLimb::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) { ZLimb* limb = (ZLimb*)res; - WriteHeader(res, outPath, writer, Ship::ResourceType::SkeletonLimb); + WriteHeader(res, outPath, writer, Ship::ResourceType::SOH_SkeletonLimb); writer->Write((uint8_t)limb->type); writer->Write((uint8_t)limb->skinSegmentType); diff --git a/OTRExporter/OTRExporter/TextExporter.cpp b/OTRExporter/OTRExporter/TextExporter.cpp index 5819b9b33..1e8c8da9d 100644 --- a/OTRExporter/OTRExporter/TextExporter.cpp +++ b/OTRExporter/OTRExporter/TextExporter.cpp @@ -5,7 +5,7 @@ void OTRExporter_Text::Save(ZResource* res, const fs::path& outPath, BinaryWrite { ZText* txt = (ZText*)res; - WriteHeader(txt, outPath, writer, Ship::ResourceType::Text); + WriteHeader(txt, outPath, writer, Ship::ResourceType::SOH_Text); writer->Write((uint32_t)txt->messages.size()); diff --git a/OTRExporter/OTRExporter/VersionInfo.cpp b/OTRExporter/OTRExporter/VersionInfo.cpp index ba0146d41..145aa86b9 100644 --- a/OTRExporter/OTRExporter/VersionInfo.cpp +++ b/OTRExporter/OTRExporter/VersionInfo.cpp @@ -1,27 +1,25 @@ #include "VersionInfo.h" -#include +#include std::map resourceVersions; void InitVersionInfo() { resourceVersions = std::map { - { Ship::ResourceType::Animation, 0 }, - { Ship::ResourceType::Model, 0 }, + { Ship::ResourceType::SOH_Animation, 0 }, { Ship::ResourceType::Texture, 0 }, - { Ship::ResourceType::Material, 0 }, - { Ship::ResourceType::PlayerAnimation, 0 }, + { Ship::ResourceType::SOH_PlayerAnimation, 0 }, { Ship::ResourceType::DisplayList, 0 }, - { Ship::ResourceType::Room, 0 }, - { Ship::ResourceType::CollisionHeader, 0 }, - { Ship::ResourceType::Skeleton, 0 }, - { Ship::ResourceType::SkeletonLimb, 0 }, + { Ship::ResourceType::SOH_Room, 0 }, + { Ship::ResourceType::SOH_CollisionHeader, 0 }, + { Ship::ResourceType::SOH_Skeleton, 0 }, + { Ship::ResourceType::SOH_SkeletonLimb, 0 }, { Ship::ResourceType::Matrix, 0 }, - { Ship::ResourceType::Path, 0 }, + { Ship::ResourceType::SOH_Path, 0 }, { Ship::ResourceType::Vertex, 0 }, - { Ship::ResourceType::Cutscene, 0 }, + { Ship::ResourceType::SOH_Cutscene, 0 }, { Ship::ResourceType::Array, 0 }, - { Ship::ResourceType::Text, 0 }, + { Ship::ResourceType::SOH_Text, 0 }, { Ship::ResourceType::Blob, 0 }, }; } diff --git a/OTRExporter/OTRExporter/VtxExporter.cpp b/OTRExporter/OTRExporter/VtxExporter.cpp index 10a13f424..5d8001d24 100644 --- a/OTRExporter/OTRExporter/VtxExporter.cpp +++ b/OTRExporter/OTRExporter/VtxExporter.cpp @@ -1,5 +1,5 @@ #include "VtxExporter.h" -#include "Resource.h" +#include #include "VersionInfo.h" diff --git a/OTRExporter/OTRExporter/z64cutscene.h b/OTRExporter/OTRExporter/z64cutscene.h index 4f44c1025..d5eb89482 100644 --- a/OTRExporter/OTRExporter/z64cutscene.h +++ b/OTRExporter/OTRExporter/z64cutscene.h @@ -2,7 +2,7 @@ #define Z64CUTSCENE_H #if 0 -#include "ultra64.h" +#include typedef struct { /* 0x00 */ u16 entrance; // entrance index upon which the cutscene should trigger diff --git a/OTRExporter/extract_assets.py b/OTRExporter/extract_assets.py index 4e17d45a1..4983e6c94 100755 --- a/OTRExporter/extract_assets.py +++ b/OTRExporter/extract_assets.py @@ -32,17 +32,16 @@ def main(): parser.add_argument("-z", "--zapd", help="Path to ZAPD executable", dest="zapd_exe", type=str) parser.add_argument("rom", help="Path to the rom", type=str, nargs="?") parser.add_argument("--non-interactive", help="Runs the script non-interactively for use in build scripts.", dest="non_interactive", action="store_true") + parser.add_argument("-v", "--verbose", help="Display rom's header checksums and their corresponding xml folder", dest="verbose", action="store_true") args = parser.parse_args() - rom_paths = [ args.rom ] if args.rom else rom_chooser.chooseROM(args.non_interactive) - for rom_path in rom_paths: - rom = Z64Rom(rom_path) - + roms = [ Z64Rom(args.rom) ] if args.rom else rom_chooser.chooseROM(args.verbose, args.non_interactive) + for rom in roms: if (os.path.exists("Extract")): shutil.rmtree("Extract") - BuildOTR("../soh/assets/xml/" + rom.version.xml_ver + "/", rom_path, zapd_exe=args.zapd_exe) + BuildOTR("../soh/assets/xml/" + rom.version.xml_ver + "/", rom.file_path, zapd_exe=args.zapd_exe) if __name__ == "__main__": main() diff --git a/OTRExporter/rom_chooser.py b/OTRExporter/rom_chooser.py index 5e79add7e..bdee088be 100644 --- a/OTRExporter/rom_chooser.py +++ b/OTRExporter/rom_chooser.py @@ -2,12 +2,13 @@ import os, sys, glob from rom_info import Z64Rom -def chooseROM(non_interactive=False): +def chooseROM(verbose=False, non_interactive=False): roms = [] for file in glob.glob("*.z64"): - if Z64Rom.isValidRom(file): - roms.append(file) + rom = Z64Rom(file) + if rom.is_valid: + roms.append(rom) if not (roms): print("Error: No roms located, place one in the OTRExporter directory", file=os.sys.stderr) @@ -21,23 +22,28 @@ def chooseROM(non_interactive=False): foundMq = False foundOot = False for rom in roms: - isMq = Z64Rom.isMqRom(rom) - if isMq and not foundMq: + if rom.isMq and not foundMq: romsToExtract.append(rom) foundMq = True - elif not isMq and not foundOot: + elif not rom.isMq and not foundOot: romsToExtract.append(rom) foundOot = True return romsToExtract - print(str(len(roms))+ " roms found, please select one by pressing 1-"+str(len(roms))) + print(f"{len(roms)} roms found, please select one by pressing 1-{len(roms)}") + print() for i in range(len(roms)): - print(str(i+1)+ ". " + roms[i]) + print(f"[{i+1:>2d}] {roms[i].file_path}") + if verbose: + print(f" Checksum: {roms[i].checksum.value}, Version XML: {roms[i].version.xml_ver}") + print() while(1): try: selection = int(input()) + except KeyboardInterrupt: + sys.exit(1) except: print("Bad input. Try again with the number keys.") continue diff --git a/OTRGui/CMakeLists.txt b/OTRGui/CMakeLists.txt index 2933c05d3..9eec59c84 100644 --- a/OTRGui/CMakeLists.txt +++ b/OTRGui/CMakeLists.txt @@ -59,7 +59,7 @@ target_include_directories(${PROJECT_NAME} PRIVATE . ) -INSTALL(TARGETS OTRGui DESTINATION . COMPONENT ship) +INSTALL(TARGETS OTRGui DESTINATION . COMPONENT ship OPTIONAL) install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/assets DESTINATION . COMPONENT ship diff --git a/ZAPDTR/ZAPD/CMakeLists.txt b/ZAPDTR/ZAPD/CMakeLists.txt index 93aaf7356..4b9110c32 100644 --- a/ZAPDTR/ZAPD/CMakeLists.txt +++ b/ZAPDTR/ZAPD/CMakeLists.txt @@ -336,6 +336,8 @@ find_package(PNG REQUIRED) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/extern/ZAPDUtils + ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/src/resource + ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/include ${CMAKE_CURRENT_SOURCE_DIR}/../../ZAPDTR/lib/tinyxml2 ${CMAKE_CURRENT_SOURCE_DIR}/../../ZAPDTR/lib/libgfxd ${PNG_PNG_INCLUDE_DIR}/ diff --git a/ZAPDTR/ZAPD/ZResource.h b/ZAPDTR/ZAPD/ZResource.h index be272cf6b..59b074daf 100644 --- a/ZAPDTR/ZAPD/ZResource.h +++ b/ZAPDTR/ZAPD/ZResource.h @@ -7,8 +7,8 @@ #include #include #include "Declaration.h" -#include "Utils/BinaryWriter.h" -#include "Utils/Directory.h" +#include +#include #include "tinyxml2.h" #define SEGMENT_SCENE 2 diff --git a/libultraship b/libultraship index b1c75c86e..120c60b54 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit b1c75c86e902e5036ee1d36afad1a35313988fe7 +Subproject commit 120c60b54a75d656e88be8027ac5430ba72ebbf5 diff --git a/soh/CMakeLists.txt b/soh/CMakeLists.txt index 1994a2b99..8f5d42f45 100644 --- a/soh/CMakeLists.txt +++ b/soh/CMakeLists.txt @@ -123,7 +123,7 @@ set(Header_Files__include #"include/stdbool_n64.h" #"include/stddef_n64.h" #"include/stdlib_n64.h" - "include/ultra64.h" + # "include/ultra64.h" "include/unk.h" "include/variables.h" "include/vt.h" @@ -269,6 +269,8 @@ set(Source_Files__soh "soh/OTRAudio.h" "soh/OTRGlobals.cpp" "soh/OTRGlobals.h" + "soh/mixer.c" + "soh/mixer.h" "soh/SaveManager.h" "soh/SaveManager.cpp" "soh/frame_interpolation.h" @@ -288,6 +290,194 @@ set(Source_Files__soh ) source_group("Source Files\\soh" FILES ${Source_Files__soh}) +set(Header_Files__soh__resourceTypes + "soh/resource/type/Animation.h" + "soh/resource/type/AudioSample.h" + "soh/resource/type/AudioSequence.h" + "soh/resource/type/AudioSoundFont.h" + "soh/resource/type/CollisionHeader.h" + "soh/resource/type/Cutscene.h" + "soh/resource/type/Path.h" + "soh/resource/type/PlayerAnimation.h" + "soh/resource/type/Scene.h" + "soh/resource/type/Skeleton.h" + "soh/resource/type/SkeletonLimb.h" + "soh/resource/type/Text.h" + "soh/resource/type/Background.h" +) +source_group("Header Files\\soh\\resource\\type" FILES ${Header_Files__soh__resourceTypes}) + +set(Source_Files__soh__resourceTypes + "soh/resource/type/Animation.cpp" + "soh/resource/type/AudioSample.cpp" + "soh/resource/type/AudioSequence.cpp" + "soh/resource/type/AudioSoundFont.cpp" + "soh/resource/type/CollisionHeader.cpp" + "soh/resource/type/Cutscene.cpp" + "soh/resource/type/Path.cpp" + "soh/resource/type/PlayerAnimation.cpp" + "soh/resource/type/Scene.cpp" + "soh/resource/type/Skeleton.cpp" + "soh/resource/type/SkeletonLimb.cpp" + "soh/resource/type/Text.cpp" + "soh/resource/type/Background.cpp" +) +source_group("Source Files\\soh\\resource\\type" FILES ${Source_Files__soh__resourceTypes}) + +set(Header_Files__soh__resourceFactories + "soh/resource/importer/AnimationFactory.h" + "soh/resource/importer/AudioSampleFactory.h" + "soh/resource/importer/AudioSequenceFactory.h" + "soh/resource/importer/AudioSoundFontFactory.h" + "soh/resource/importer/CollisionHeaderFactory.h" + "soh/resource/importer/CutsceneFactory.h" + "soh/resource/importer/PathFactory.h" + "soh/resource/importer/PlayerAnimationFactory.h" + "soh/resource/importer/SceneFactory.h" + "soh/resource/importer/SkeletonFactory.h" + "soh/resource/importer/SkeletonLimbFactory.h" + "soh/resource/importer/TextFactory.h" + "soh/resource/importer/BackgroundFactory.h" +) +source_group("Header Files\\soh\\resource\\importer" FILES ${Header_Files__soh__resourceFactories}) + +set(Source_Files__soh__resourceFactories + "soh/resource/importer/AnimationFactory.cpp" + "soh/resource/importer/AudioSampleFactory.cpp" + "soh/resource/importer/AudioSequenceFactory.cpp" + "soh/resource/importer/AudioSoundFontFactory.cpp" + "soh/resource/importer/CollisionHeaderFactory.cpp" + "soh/resource/importer/CutsceneFactory.cpp" + "soh/resource/importer/PathFactory.cpp" + "soh/resource/importer/PlayerAnimationFactory.cpp" + "soh/resource/importer/SceneFactory.cpp" + "soh/resource/importer/SkeletonFactory.cpp" + "soh/resource/importer/SkeletonLimbFactory.cpp" + "soh/resource/importer/TextFactory.cpp" + "soh/resource/importer/BackgroundFactory.cpp" +) +source_group("Source Files\\soh\\resource\\importer" FILES ${Source_Files__soh__resourceFactories}) + +set(Header_Files__soh__scenecommandTypes + "soh/resource/type/scenecommand/EndMarker.h" + "soh/resource/type/scenecommand/RomFile.h" + "soh/resource/type/scenecommand/SceneCommand.h" + "soh/resource/type/scenecommand/SetActorList.h" + "soh/resource/type/scenecommand/SetAlternateHeaders.h" + "soh/resource/type/scenecommand/SetCameraSettings.h" + "soh/resource/type/scenecommand/SetCollisionHeader.h" + "soh/resource/type/scenecommand/SetCsCamera.h" + "soh/resource/type/scenecommand/SetCutscenes.h" + "soh/resource/type/scenecommand/SetEchoSettings.h" + "soh/resource/type/scenecommand/SetEntranceList.h" + "soh/resource/type/scenecommand/SetExitList.h" + "soh/resource/type/scenecommand/SetLightingSettings.h" + "soh/resource/type/scenecommand/SetLightList.h" + "soh/resource/type/scenecommand/SetMesh.h" + "soh/resource/type/scenecommand/SetObjectList.h" + "soh/resource/type/scenecommand/SetPathways.h" + "soh/resource/type/scenecommand/SetRoomBehavior.h" + "soh/resource/type/scenecommand/SetRoomList.h" + "soh/resource/type/scenecommand/SetSkyboxModifier.h" + "soh/resource/type/scenecommand/SetSkyboxSettings.h" + "soh/resource/type/scenecommand/SetSoundSettings.h" + "soh/resource/type/scenecommand/SetSpecialObjects.h" + "soh/resource/type/scenecommand/SetStartPositionList.h" + "soh/resource/type/scenecommand/SetTimeSettings.h" + "soh/resource/type/scenecommand/SetTransitionActorList.h" + "soh/resource/type/scenecommand/SetWindSettings.h" +) +source_group("Header Files\\soh\\resource\\type\\scenecommand" FILES ${Header_Files__soh__scenecommandTypes}) + +set(Source_Files__soh__scenecommandTypes + "soh/resource/type/scenecommand/EndMarker.cpp" + "soh/resource/type/scenecommand/SetActorList.cpp" + "soh/resource/type/scenecommand/SetAlternateHeaders.cpp" + "soh/resource/type/scenecommand/SetCameraSettings.cpp" + "soh/resource/type/scenecommand/SetCollisionHeader.cpp" + "soh/resource/type/scenecommand/SetCsCamera.cpp" + "soh/resource/type/scenecommand/SetCutscenes.cpp" + "soh/resource/type/scenecommand/SetEchoSettings.cpp" + "soh/resource/type/scenecommand/SetEntranceList.cpp" + "soh/resource/type/scenecommand/SetExitList.cpp" + "soh/resource/type/scenecommand/SetLightingSettings.cpp" + "soh/resource/type/scenecommand/SetLightList.cpp" + "soh/resource/type/scenecommand/SetMesh.cpp" + "soh/resource/type/scenecommand/SetObjectList.cpp" + "soh/resource/type/scenecommand/SetPathways.cpp" + "soh/resource/type/scenecommand/SetRoomBehavior.cpp" + "soh/resource/type/scenecommand/SetRoomList.cpp" + "soh/resource/type/scenecommand/SetSkyboxModifier.cpp" + "soh/resource/type/scenecommand/SetSkyboxSettings.cpp" + "soh/resource/type/scenecommand/SetSoundSettings.cpp" + "soh/resource/type/scenecommand/SetSpecialObjects.cpp" + "soh/resource/type/scenecommand/SetStartPositionList.cpp" + "soh/resource/type/scenecommand/SetTimeSettings.cpp" + "soh/resource/type/scenecommand/SetTransitionActorList.cpp" + "soh/resource/type/scenecommand/SetWindSettings.cpp" +) +source_group("Source Files\\soh\\resource\\type\\scenecommand" FILES ${Source_Files__soh__scenecommandTypes}) + +set(Header_Files__soh__scenecommandFactories + "soh/resource/importer/scenecommand/EndMarkerFactory.h" + "soh/resource/importer/scenecommand/SceneCommandFactory.h" + "soh/resource/importer/scenecommand/SetActorListFactory.h" + "soh/resource/importer/scenecommand/SetAlternateHeadersFactory.h" + "soh/resource/importer/scenecommand/SetCameraSettingsFactory.h" + "soh/resource/importer/scenecommand/SetCollisionHeaderFactory.h" + "soh/resource/importer/scenecommand/SetCsCameraFactory.h" + "soh/resource/importer/scenecommand/SetCutscenesFactory.h" + "soh/resource/importer/scenecommand/SetEchoSettingsFactory.h" + "soh/resource/importer/scenecommand/SetEntranceListFactory.h" + "soh/resource/importer/scenecommand/SetExitListFactory.h" + "soh/resource/importer/scenecommand/SetLightingSettingsFactory.h" + "soh/resource/importer/scenecommand/SetLightListFactory.h" + "soh/resource/importer/scenecommand/SetMeshFactory.h" + "soh/resource/importer/scenecommand/SetObjectListFactory.h" + "soh/resource/importer/scenecommand/SetPathwaysFactory.h" + "soh/resource/importer/scenecommand/SetRoomBehaviorFactory.h" + "soh/resource/importer/scenecommand/SetRoomListFactory.h" + "soh/resource/importer/scenecommand/SetSkyboxModifierFactory.h" + "soh/resource/importer/scenecommand/SetSkyboxSettingsFactory.h" + "soh/resource/importer/scenecommand/SetSoundSettingsFactory.h" + "soh/resource/importer/scenecommand/SetSpecialObjectsFactory.h" + "soh/resource/importer/scenecommand/SetStartPositionListFactory.h" + "soh/resource/importer/scenecommand/SetTimeSettingsFactory.h" + "soh/resource/importer/scenecommand/SetTransitionActorListFactory.h" + "soh/resource/importer/scenecommand/SetWindSettingsFactory.h" +) +source_group("Header Files\\soh\\resource\\importer\\scenecommand" FILES ${Header_Files__soh__scenecommandFactories}) + +set(Source_Files__soh__scenecommandFactories + "soh/resource/importer/scenecommand/EndMarkerFactory.cpp" + "soh/resource/importer/scenecommand/SceneCommandFactory.cpp" + "soh/resource/importer/scenecommand/SetActorListFactory.cpp" + "soh/resource/importer/scenecommand/SetAlternateHeadersFactory.cpp" + "soh/resource/importer/scenecommand/SetCameraSettingsFactory.cpp" + "soh/resource/importer/scenecommand/SetCollisionHeaderFactory.cpp" + "soh/resource/importer/scenecommand/SetCsCameraFactory.cpp" + "soh/resource/importer/scenecommand/SetCutscenesFactory.cpp" + "soh/resource/importer/scenecommand/SetEchoSettingsFactory.cpp" + "soh/resource/importer/scenecommand/SetEntranceListFactory.cpp" + "soh/resource/importer/scenecommand/SetExitListFactory.cpp" + "soh/resource/importer/scenecommand/SetLightingSettingsFactory.cpp" + "soh/resource/importer/scenecommand/SetLightListFactory.cpp" + "soh/resource/importer/scenecommand/SetMeshFactory.cpp" + "soh/resource/importer/scenecommand/SetObjectListFactory.cpp" + "soh/resource/importer/scenecommand/SetPathwaysFactory.cpp" + "soh/resource/importer/scenecommand/SetRoomBehaviorFactory.cpp" + "soh/resource/importer/scenecommand/SetRoomListFactory.cpp" + "soh/resource/importer/scenecommand/SetSkyboxModifierFactory.cpp" + "soh/resource/importer/scenecommand/SetSkyboxSettingsFactory.cpp" + "soh/resource/importer/scenecommand/SetSoundSettingsFactory.cpp" + "soh/resource/importer/scenecommand/SetSpecialObjectsFactory.cpp" + "soh/resource/importer/scenecommand/SetStartPositionListFactory.cpp" + "soh/resource/importer/scenecommand/SetTimeSettingsFactory.cpp" + "soh/resource/importer/scenecommand/SetTransitionActorListFactory.cpp" + "soh/resource/importer/scenecommand/SetWindSettingsFactory.cpp" +) +source_group("Source Files\\soh\\resource\\importer\\scenecommand" FILES ${Source_Files__soh__scenecommandFactories}) + set(Source_Files__soh__Enhancements "soh/Enhancements/bootcommands.c" "soh/Enhancements/debugconsole.cpp" @@ -1655,6 +1845,14 @@ set(ALL_FILES ${Source_Files__src__overlays__gamestates__ovl_title} ${Source_Files__src__overlays__misc__ovl_kaleido_scope} ${Source_Files__src__overlays__misc__ovl_map_mark_data} + ${Header_Files__soh__resourceTypes} + ${Source_Files__soh__resourceTypes} + ${Header_Files__soh__resourceFactories} + ${Source_Files__soh__resourceFactories} + ${Header_Files__soh__scenecommandTypes} + ${Source_Files__soh__scenecommandTypes} + ${Source_Files__soh__scenecommandFactories} + ${Header_Files__soh__scenecommandFactories} ) ################################################################################ @@ -1741,7 +1939,7 @@ target_include_directories(${PROJECT_NAME} PRIVATE assets ${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/misc ${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/core ${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/resource - ${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/resource/types + ${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/resource/type ${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/audio ${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/extern ${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/extern/Mercury @@ -1752,6 +1950,7 @@ target_include_directories(${PROJECT_NAME} PRIVATE assets ${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/graphic/Fast3D/U64/PR ${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/graphic ${CMAKE_CURRENT_SOURCE_DIR}/../ZAPDTR/ZAPDUtils + ${CMAKE_CURRENT_SOURCE_DIR}/../ZAPDTR/ZAPD/resource/type ${SDL2-INCLUDE} ${SDL2-NET-INCLUDE} ${CMAKE_CURRENT_SOURCE_DIR}/assets/ diff --git a/soh/include/fp.h b/soh/include/fp.h index c733be914..7ea6a7670 100644 --- a/soh/include/fp.h +++ b/soh/include/fp.h @@ -1,6 +1,6 @@ #ifndef FP_H #define FP_H -#include "ultra64.h" +#include extern f32 qNaN0x3FFFFF; extern f32 qNaN0x10000; diff --git a/soh/include/functions.h b/soh/include/functions.h index b077c59a3..70def4ac2 100644 --- a/soh/include/functions.h +++ b/soh/include/functions.h @@ -2,6 +2,7 @@ #define FUNCTIONS_H #include "z64.h" +#include #ifdef __cplusplus #define this thisx @@ -97,8 +98,6 @@ void LogUtils_CheckValidPointer(const char* exp, void* ptr, const char* file, s3 void LogUtils_LogThreadId(const char* name, s32 line); void LogUtils_HungupThread(const char* name, s32 line); void LogUtils_ResetHungup(void); -s32 vsprintf(char* dst, const char* fmt, va_list args); -s32 sprintf(char* dst, const char* fmt, ...); void __osPiCreateAccessQueue(void); void __osPiGetAccess(void); void __osPiRelAccess(void); @@ -532,10 +531,10 @@ void func_8003424C(PlayState* play, Vec3f* arg1); void Actor_SetColorFilter(Actor* actor, s16 colorFlag, s16 colorIntensityMax, s16 xluFlag, s16 duration); Hilite* func_800342EC(Vec3f* object, PlayState* play); Hilite* func_8003435C(Vec3f* object, PlayState* play); -s32 func_800343CC(PlayState* play, Actor* actor, s16* arg2, f32 interactRange, - u16 (*unkFunc1)(PlayState*, Actor*), s16 (*unkFunc2)(PlayState*, Actor*)); -s16 func_800347E8(s16 arg0); -void func_80034A14(Actor* actor, struct_80034A14_arg1* arg1, s16 arg2, s16 arg3); +s32 Npc_UpdateTalking(PlayState* play, Actor* actor, s16* talkState, f32 interactRange, + NpcGetTextIdFunc getTextId, NpcUpdateTalkStateFunc updateTalkState); +s16 Npc_GetTrackingPresetMaxPlayerYaw(s16 presetIndex); +void Npc_TrackPoint(Actor* actor, NpcInteractInfo* interactInfo, s16 presetIndex, s16 trackingMode); void func_80034BA0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, s16 alpha); void func_80034CC4(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, diff --git a/soh/include/global.h b/soh/include/global.h index dfef14f8a..3d989cacc 100644 --- a/soh/include/global.h +++ b/soh/include/global.h @@ -9,7 +9,7 @@ #include "soh/OTRGlobals.h" #include "soh/Enhancements/gameconsole.h" #include "soh/Enhancements/gameplaystats.h" -#include +#include #define _AudioseqSegmentRomStart "Audioseq" #define _AudiobankSegmentRomStart "Audiobank" @@ -38,4 +38,8 @@ #define _z_select_staticSegmentRomStart 0 #define _z_select_staticSegmentRomEnd 0 +// TODO: POSIX/BSD Bug, this is a hack to fix the build compilation on any BSD system (Switch, Wii-U, Vita, etc) +// defines quad as a macro, which conflicts with the quad parameter on z_collision_check.c +#undef quad + #endif diff --git a/soh/include/libc/math.h b/soh/include/libc/math.h index bceffad22..cad323823 100644 --- a/soh/include/libc/math.h +++ b/soh/include/libc/math.h @@ -1,7 +1,7 @@ #ifndef MATH_H #define MATH_H -#include "ultra64/types.h" +#include #define M_PI 3.14159265358979323846f #define M_SQRT2 1.41421356237309504880f diff --git a/soh/include/libc/stdlib.h b/soh/include/libc/stdlib.h index 00418278a..9028d104d 100644 --- a/soh/include/libc/stdlib.h +++ b/soh/include/libc/stdlib.h @@ -1,7 +1,7 @@ #ifndef STDLIB_H #define STDLIB_H -#include "ultra64.h" +#include #if 0 diff --git a/soh/include/macros.h b/soh/include/macros.h index 2d69b83ea..1641dc1ad 100644 --- a/soh/include/macros.h +++ b/soh/include/macros.h @@ -300,9 +300,9 @@ extern GraphicsContext* __gfxCtx; // #endregion // #region SOH [Enhancements] -#define CHECK_EQUIPMENT_AGE(i, j) (CVar_GetS32("gTimelessEquipment", 0) || (gEquipAgeReqs[i][j] == 9) || (gEquipAgeReqs[i][j] == ((void)0, gSaveContext.linkAge))) -#define CHECK_SLOT_AGE(slotIndex) (CVar_GetS32("gTimelessEquipment", 0) || (gSlotAgeReqs[slotIndex] == 9) || gSlotAgeReqs[slotIndex] == ((void)0, gSaveContext.linkAge)) -#define CHECK_ITEM_AGE(itemIndex) (CVar_GetS32("gTimelessEquipment", 0) || (gItemAgeReqs[itemIndex] == 9) || (gItemAgeReqs[itemIndex] == gSaveContext.linkAge)) +#define CHECK_EQUIPMENT_AGE(i, j) (CVarGetInteger("gTimelessEquipment", 0) || (gEquipAgeReqs[i][j] == 9) || (gEquipAgeReqs[i][j] == ((void)0, gSaveContext.linkAge))) +#define CHECK_SLOT_AGE(slotIndex) (CVarGetInteger("gTimelessEquipment", 0) || (gSlotAgeReqs[slotIndex] == 9) || gSlotAgeReqs[slotIndex] == ((void)0, gSaveContext.linkAge)) +#define CHECK_ITEM_AGE(itemIndex) (CVarGetInteger("gTimelessEquipment", 0) || (gItemAgeReqs[itemIndex] == 9) || (gItemAgeReqs[itemIndex] == gSaveContext.linkAge)) #define DPAD_ITEM(button) ((gSaveContext.buttonStatus[(button) + 5] != BTN_DISABLED) \ ? gSaveContext.equips.buttonItems[(button) + 4] \ diff --git a/soh/include/ultra64.h b/soh/include/ultra64.h deleted file mode 100644 index c2e0e9b29..000000000 --- a/soh/include/ultra64.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef ULTRA64_H -#define ULTRA64_H - -#include -#include -#include -#include "ultra64/types.h" -#include "unk.h" - -#include "libc/stdarg.h" -#include "libc/stdbool.h" -#include "libc/stddef.h" -#include "libc/stdlib.h" -#include "libc/math.h" - -#include "ultra64/exception.h" -#include "ultra64/rcp.h" -#include "ultra64/rdp.h" -#include "ultra64/rsp.h" -#include "ultra64/thread.h" -#include "ultra64/convert.h" -#include "ultra64/time.h" -#include "ultra64/message.h" -#include "ultra64/sptask.h" -#include "ultra64/gu.h" -#include "ultra64/vi.h" -#include "ultra64/pi.h" -#include "ultra64/controller.h" -#include "ultra64/printf.h" -#include "ultra64/mbi.h" -#include "ultra64/pfs.h" -#include "ultra64/motor.h" -#include "ultra64/r4300.h" - -#endif diff --git a/soh/include/vt.h b/soh/include/vt.h index 46cbf05e7..e64c0377a 100644 --- a/soh/include/vt.h +++ b/soh/include/vt.h @@ -32,4 +32,11 @@ #define VT_RST VT_SGR("") #define VT_CLS VT_ED(2) +#ifdef USE_BELL +// ASCII BEL character, plays an alert tone +#define BEL '\a' +#else +#define BEL '\0' +#endif + #endif diff --git a/soh/include/z64.h b/soh/include/z64.h index a2efaf16a..4edcd1fcd 100644 --- a/soh/include/z64.h +++ b/soh/include/z64.h @@ -1,8 +1,8 @@ #ifndef Z64_H #define Z64_H -#include "ultra64.h" -#include "ultra64/gs2dex.h" +#include +#include "unk.h" // this used to get pulled in via ultra64.h #include "z64save.h" #include "z64light.h" #include "z64bgcheck.h" @@ -27,7 +27,7 @@ #include "alignment.h" #include "sequence.h" #include "sfx.h" -#include +#include #include "ichain.h" #include "regs.h" @@ -45,6 +45,7 @@ namespace Ship class Scene; class DisplayList; }; +#include #endif #define SCREEN_WIDTH 320 @@ -948,14 +949,6 @@ typedef struct { typedef struct { /* 0x00 */ Gfx* opa; /* 0x04 */ Gfx* xlu; - -#ifdef __cplusplus - Ship::DisplayList* opaDL; - Ship::DisplayList* xluDL; -#else -void* opaDL; -void* xluDL; -#endif } PolygonDlist; // size = 0x8 @@ -1016,14 +1009,6 @@ typedef struct { /* 0x06 */ s16 unk_06; /* 0x08 */ Gfx* opa; /* 0x0C */ Gfx* xlu; - -#ifdef __cplusplus - Ship::DisplayList* opaDL; - Ship::DisplayList* xluDL; -#else - void* opaDL; - void* xluDL; -#endif } PolygonDlist2; // size = 0x8 typedef struct { @@ -1087,12 +1072,7 @@ typedef struct { /* 0x58 */ OSMesgQueue loadQueue; /* 0x70 */ OSMesg loadMsg; /* 0x74 */ s16 unk_74[2]; // context-specific data used by the current scene draw config - -#ifdef __cplusplus - Ship::Scene* roomToLoad; -#else void* roomToLoad; -#endif } RoomContext; // size = 0x78 typedef struct { @@ -1310,13 +1290,7 @@ typedef struct PlayState { /* 0x000A4 */ s16 sceneNum; /* 0x000A6 */ u8 sceneConfig; /* 0x000A7 */ char unk_A7[0x9]; - -#ifdef __cplusplus - Ship::Scene* sceneSegment; -#else /* 0x000B0 */ void* sceneSegment; -#endif - /* 0x000B8 */ View view; /* 0x001E0 */ Camera mainCamera; /* 0x0034C */ Camera subCameras[NUM_CAMS - SUBCAM_FIRST]; @@ -1532,18 +1506,6 @@ typedef struct { /* 0x08 */ f32 morphFrames; } AnimationMinimalInfo; // size = 0xC -typedef struct { - /* 0x00 */ s16 unk_00; - /* 0x02 */ s16 unk_02; - /* 0x04 */ s16 unk_04; - /* 0x06 */ s16 unk_06; - /* 0x08 */ Vec3s unk_08; - /* 0x0E */ Vec3s unk_0E; - /* 0x14 */ f32 unk_14; - /* 0x18 */ Vec3f unk_18; - /* 0x24 */ s16 unk_24; -} struct_80034A14_arg1; // size = 0x28 - typedef struct { /* 0x00 */ s8 scene; /* 0x01 */ s8 spawn; diff --git a/soh/include/z64actor.h b/soh/include/z64actor.h index 11cf86138..abcc1f2e1 100644 --- a/soh/include/z64actor.h +++ b/soh/include/z64actor.h @@ -20,8 +20,8 @@ struct Lights; typedef void (*ActorFunc)(struct Actor*, struct PlayState*); typedef void (*ActorResetFunc)(void); typedef void (*ActorShadowFunc)(struct Actor*, struct Lights*, struct PlayState*); -typedef u16 (*callback1_800343CC)(struct PlayState*, struct Actor*); -typedef s16 (*callback2_800343CC)(struct PlayState*, struct Actor*); +typedef u16 (*NpcGetTextIdFunc)(struct PlayState*, struct Actor*); +typedef s16 (*NpcUpdateTalkStateFunc)(struct PlayState*, struct Actor*); typedef struct { Vec3f pos; @@ -369,4 +369,31 @@ typedef enum { DOORLOCK_NORMAL_SPIRIT } DoorLockType; +typedef enum { + /* 0x0 */ NPC_TALK_STATE_IDLE, // NPC not currently talking to player + /* 0x1 */ NPC_TALK_STATE_TALKING, // NPC is currently talking to player + /* 0x2 */ NPC_TALK_STATE_ACTION, // An NPC-defined action triggered in the conversation + /* 0x3 */ NPC_TALK_STATE_ITEM_GIVEN // NPC finished giving an item and text box is done +} NpcTalkState; + +typedef enum { + /* 0x0 */ NPC_TRACKING_PLAYER_AUTO_TURN, // Determine tracking mode based on player position, see Npc_UpdateAutoTurn + /* 0x1 */ NPC_TRACKING_NONE, // Don't track the target (usually the player) + /* 0x2 */ NPC_TRACKING_HEAD_AND_TORSO, // Track target by turning the head and the torso + /* 0x3 */ NPC_TRACKING_HEAD, // Track target by turning the head + /* 0x4 */ NPC_TRACKING_FULL_BODY // Track target by turning the body, torso and head +} NpcTrackingMode; + +typedef struct { + /* 0x00 */ s16 talkState; + /* 0x02 */ s16 trackingMode; + /* 0x04 */ s16 autoTurnTimer; + /* 0x06 */ s16 autoTurnState; + /* 0x08 */ Vec3s headRot; + /* 0x0E */ Vec3s torsoRot; + /* 0x14 */ f32 yOffset; // Y position offset to add to actor position when calculating angle to target + /* 0x18 */ Vec3f trackPos; + /* 0x24 */ char unk_24[0x4]; +} NpcInteractInfo; // size = 0x28 + #endif diff --git a/soh/include/z64animation.h b/soh/include/z64animation.h index b0d8d40ef..e1ef1c073 100755 --- a/soh/include/z64animation.h +++ b/soh/include/z64animation.h @@ -1,7 +1,7 @@ #ifndef Z64_ANIMATION_H #define Z64_ANIMATION_H -#include "ultra64.h" +#include #include "z64dma.h" #include "z64math.h" diff --git a/soh/include/z64audio.h b/soh/include/z64audio.h index 2c0d41aad..0942772c4 100644 --- a/soh/include/z64audio.h +++ b/soh/include/z64audio.h @@ -127,7 +127,7 @@ typedef struct { typedef struct { /* 0x00 */ s32 order; /* 0x04 */ s32 npredictors; - /* 0x08 */ s16 book[]; // size 8 * order * npredictors. 8-byte aligned + /* 0x08 */ s16* book; // size 8 * order * npredictors. 8-byte aligned } AdpcmBook; // size >= 0x8 typedef struct @@ -137,7 +137,7 @@ typedef struct /* 0x00 */ u32 codec : 4; /* 0x00 */ u32 medium : 2; /* 0x00 */ u32 unk_bit26 : 1; - /* 0x00 */ u32 unk_bit25 : 1; + /* 0x00 */ u32 unk_bit25 : 1; // this has been named isRelocated in zret /* 0x01 */ u32 size : 24; }; u32 asU32; @@ -819,7 +819,7 @@ typedef struct { /* 0x0E */ u8 ttl; // duration after which the DMA can be discarded } SampleDma; // size = 0x10 -#include +#include typedef struct { /* 0x0000 */ char unk_0000; diff --git a/soh/include/z64camera.h b/soh/include/z64camera.h index 15ba1b0d9..cc873c2cf 100644 --- a/soh/include/z64camera.h +++ b/soh/include/z64camera.h @@ -1,7 +1,7 @@ #ifndef Z64CAMERA_H #define Z64CAMERA_H -#include "ultra64.h" +#include #include "z64cutscene.h" #define CAM_STAT_CUT 0 diff --git a/soh/include/z64cutscene.h b/soh/include/z64cutscene.h index 3794547b4..cea4e2fab 100644 --- a/soh/include/z64cutscene.h +++ b/soh/include/z64cutscene.h @@ -1,7 +1,7 @@ #ifndef Z64CUTSCENE_H #define Z64CUTSCENE_H -#include "ultra64.h" +#include typedef struct { /* 0x00 */ u16 entrance; // entrance index upon which the cutscene should trigger diff --git a/soh/include/z64dma.h b/soh/include/z64dma.h index df5703375..99a2d538a 100755 --- a/soh/include/z64dma.h +++ b/soh/include/z64dma.h @@ -1,7 +1,7 @@ #ifndef Z64_DMA_H #define Z64_DMA_H -#include "ultra64.h" +#include typedef struct { /* 0x00 */ uintptr_t vromAddr; // VROM address (source) diff --git a/soh/include/z64effect.h b/soh/include/z64effect.h index 973f149d8..d1d6b3329 100644 --- a/soh/include/z64effect.h +++ b/soh/include/z64effect.h @@ -1,7 +1,7 @@ #ifndef Z64EFFECT_H #define Z64EFFECT_H -#include +#include struct GraphicsContext; struct PlayState; diff --git a/soh/include/z64elf_message.h b/soh/include/z64elf_message.h index d6f545b3f..ed83bd048 100644 --- a/soh/include/z64elf_message.h +++ b/soh/include/z64elf_message.h @@ -1,7 +1,7 @@ #ifndef Z64ELF_MESSAGE_H #define Z64ELF_MESSAGE_H -#include "ultra64.h" +#include // Checks the condition and exits the script if the check passes #define ELF_MSG_TYPE_CHECK 0 diff --git a/soh/include/z64light.h b/soh/include/z64light.h index 3a4afd5fb..aa79f3c2a 100644 --- a/soh/include/z64light.h +++ b/soh/include/z64light.h @@ -1,10 +1,10 @@ #ifndef Z64LIGHT_H #define Z64LIGHT_H -#include "ultra64.h" -#include "ultra64/gbi.h" +#include +#include #include "z64math.h" -#include +#include typedef struct { /* 0x0 */ s16 x; diff --git a/soh/include/z64map_mark.h b/soh/include/z64map_mark.h index f44eea0d3..9f2a4272f 100644 --- a/soh/include/z64map_mark.h +++ b/soh/include/z64map_mark.h @@ -1,7 +1,7 @@ #ifndef Z64MAP_MARK_H #define Z64MAP_MARK_H -#include "ultra64.h" +#include #define MAP_MARK_NONE -1 #define MAP_MARK_CHEST 0 diff --git a/soh/include/z64math.h b/soh/include/z64math.h index 3e7813ada..9cffad73c 100644 --- a/soh/include/z64math.h +++ b/soh/include/z64math.h @@ -1,7 +1,8 @@ #ifndef Z64MATH_H #define Z64MATH_H -#include "ultra64.h" +#include +#include #define VEC_SET(V,X,Y,Z) (V).x=(X);(V).y=(Y);(V).z=(Z) diff --git a/soh/include/z64save.h b/soh/include/z64save.h index fa6df1cc7..72303c580 100644 --- a/soh/include/z64save.h +++ b/soh/include/z64save.h @@ -1,7 +1,7 @@ #ifndef Z64SAVE_H #define Z64SAVE_H -#include "ultra64.h" +#include #include "z64math.h" #include "z64audio.h" #include "soh/Enhancements/randomizer/randomizerTypes.h" @@ -264,6 +264,7 @@ typedef struct { /* */ char adultAltarText[750]; /* */ char ganonHintText[150]; /* */ char ganonText[250]; + /* */ char dampeText[150]; /* */ char warpMinuetText[100]; /* */ char warpBoleroText[100]; /* */ char warpSerenadeText[100]; diff --git a/soh/include/z64transition.h b/soh/include/z64transition.h index 543afa23f..30b1246f5 100644 --- a/soh/include/z64transition.h +++ b/soh/include/z64transition.h @@ -1,8 +1,8 @@ #ifndef Z64TRANSITION_H #define Z64TRANSITION_H -#include "ultra64.h" -#include +#include +#include typedef struct { f32 unk_0; diff --git a/soh/macosx/Info.plist.in b/soh/macosx/Info.plist.in index b44948b36..dd0a49e8f 100644 --- a/soh/macosx/Info.plist.in +++ b/soh/macosx/Info.plist.in @@ -29,6 +29,8 @@ @CMAKE_PROJECT_VERSION@ NSHumanReadableCopyright Copyright 2022 HarbourMasters. + LSApplicationCategoryType + public.app-category.games LSMinimumSystemVersion 10.15 diff --git a/soh/soh/CrashHandlerExp.h b/soh/soh/CrashHandlerExp.h index aa820e463..fd57bba42 100644 --- a/soh/soh/CrashHandlerExp.h +++ b/soh/soh/CrashHandlerExp.h @@ -1,4 +1,4 @@ -#include +#include #ifdef __cplusplus @@ -9,4 +9,4 @@ void CrashHandler_PrintSohData(char* buffer, size_t* pos); #ifdef __cplusplus } -#endif \ No newline at end of file +#endif diff --git a/soh/soh/Enhancements/bootcommands.c b/soh/soh/Enhancements/bootcommands.c index e81a810d1..9554b039d 100644 --- a/soh/soh/Enhancements/bootcommands.c +++ b/soh/soh/Enhancements/bootcommands.c @@ -2,15 +2,13 @@ #include "gameconsole.h" #include #include -#include +#include +#include #include #include #include #include #include -#include -#include -#include uint8_t gLoadFileSelect = 0, gSkipLogoTest = 0; @@ -22,12 +20,12 @@ static BootCommand sCommands[] = { { "--skiplogo", BootCommands_Command_SkipLogo void BootCommands_Init() { - CVar_RegisterS32("gDebugEnabled", 0); - CVar_RegisterS32("gLanguages", LANGUAGE_ENG); - CVar_RegisterS32("gInvertYAxis", 1); - CVar_SetS32("gRandoGenerating", 0); // Clear when a crash happened during rando seed generation + CVarRegisterInteger("gDebugEnabled", 0); + CVarRegisterInteger("gLanguages", LANGUAGE_ENG); + CVarRegisterInteger("gInvertYAxis", 1); + CVarSetInteger("gRandoGenerating", 0); // Clear when a crash happened during rando seed generation #if defined(__SWITCH__) || defined(__WIIU__) - CVar_RegisterS32("gControlNav", 1); // always enable controller nav on switch/wii u + CVarRegisterInteger("gControlNav", 1); // always enable controller nav on switch/wii u #endif } diff --git a/soh/soh/Enhancements/bootcommands.h b/soh/soh/Enhancements/bootcommands.h index 42877a499..fdf362e97 100644 --- a/soh/soh/Enhancements/bootcommands.h +++ b/soh/soh/Enhancements/bootcommands.h @@ -1,6 +1,6 @@ #ifndef _BOOTCOMMANDS_H_ #define _BOOTCOMMANDS_H_ -#include +#include #include typedef s32 (*BootCommandFunc)(char** argv, s32 argc); // Returns the number of arguments it read diff --git a/soh/soh/Enhancements/controls/GameControlEditor.cpp b/soh/soh/Enhancements/controls/GameControlEditor.cpp index 87f1826f8..6a2ce82de 100644 --- a/soh/soh/Enhancements/controls/GameControlEditor.cpp +++ b/soh/soh/Enhancements/controls/GameControlEditor.cpp @@ -8,8 +8,8 @@ #include #include -#include -#include +#include +#include #include #include @@ -109,7 +109,7 @@ namespace GameControlEditor { // Draw a button mapping setting consisting of a padded label and button dropdown. // excludedButtons indicates which buttons are unavailable to choose from. void DrawMapping(CustomButtonMap& mapping, float labelWidth, N64ButtonMask excludedButtons) { - N64ButtonMask currentButton = CVar_GetS32(mapping.cVarName, mapping.defaultBtn); + N64ButtonMask currentButton = CVarGetInteger(mapping.cVarName, mapping.defaultBtn); const char* preview; if (buttonNames.contains(currentButton)) { @@ -134,7 +134,7 @@ namespace GameControlEditor { continue; } if (ImGui::Selectable(i->second, i->first == currentButton)) { - CVar_SetS32(mapping.cVarName, i->first); + CVarSetInteger(mapping.cVarName, i->first); } } ImGui::EndCombo(); @@ -158,11 +158,11 @@ namespace GameControlEditor { ImGui::SetCursorPos(ImVec2(cursor.x + 5, cursor.y + 5)); UIWidgets::EnhancementCheckbox("Customize Ocarina Controls", "gCustomOcarinaControls"); - if (CVar_GetS32("gCustomOcarinaControls", 0) == 1) { + if (CVarGetInteger("gCustomOcarinaControls", 0) == 1) { if (ImGui::BeginTable("tableCustomMainOcarinaControls", 2, ImGuiTableFlags_SizingStretchProp)) { float labelWidth; N64ButtonMask disableMask = BTN_B; - if (CVar_GetS32("gDpadOcarina", 0)) { + if (CVarGetInteger("gDpadOcarina", 0)) { disableMask |= BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT; } @@ -242,11 +242,11 @@ namespace GameControlEditor { UIWidgets::PaddedEnhancementCheckbox("Disable Auto-Centering in First-Person View", "gDisableAutoCenterViewFirstPerson"); DrawHelpIcon("Prevents the C-Up view from auto-centering, allowing for Gyro Aiming"); UIWidgets::PaddedEnhancementCheckbox("Enable Custom Aiming/First-Person sensitivity", "gEnableFirstPersonSensitivity", true, false); - if (CVar_GetS32("gEnableFirstPersonSensitivity", 0)) { + if (CVarGetInteger("gEnableFirstPersonSensitivity", 0)) { UIWidgets::EnhancementSliderFloat("Aiming/First-Person Sensitivity: %d %%", "##FirstPersonSensitivity", "gFirstPersonCameraSensitivity", 0.01f, 5.0f, "", 1.0f, true, true); } else { - CVar_SetFloat("gFirstPersonCameraSensitivity", 1.0f); + CVarSetFloat("gFirstPersonCameraSensitivity", 1.0f); } SohImGui::EndGroupPanel(); @@ -298,7 +298,7 @@ namespace GameControlEditor { SohImGui::BeginGroupPanel("Misc Controls", ImGui::GetContentRegionAvail()); UIWidgets::PaddedEnhancementCheckbox("Enable walk speed modifiers", "gEnableWalkModify", true, false); DrawHelpIcon("Hold the assigned button to change the maximum walking speed\nTo change the assigned button, go into the Ports tabs above"); - if (CVar_GetS32("gEnableWalkModify", 0)) { + if (CVarGetInteger("gEnableWalkModify", 0)) { UIWidgets::Spacer(5); SohImGui::BeginGroupPanel("Walk Modifier", ImGui::GetContentRegionAvail()); UIWidgets::PaddedEnhancementCheckbox("Toggle modifier instead of holding", "gWalkSpeedToggle", true, false); @@ -317,7 +317,7 @@ namespace GameControlEditor { void DrawUI(bool& open) { if (!open) { - CVar_SetS32("gGameControlEditorEnabled", false); + CVarSetInteger("gGameControlEditorEnabled", false); return; } diff --git a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp index a55dfd082..ebfca5df8 100644 --- a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp +++ b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp @@ -2,11 +2,11 @@ #include #include -#include +#include #include #include #include -#include +#include #include "soh/Enhancements/randomizer/3drando/random.hpp" #include "soh/UIWidgets.hpp" @@ -161,8 +161,8 @@ typedef struct { gDPSetEnvColor(POLY_OPA_DISP++, 80, 70, 20, alpha); // with cosmetics change - if (CVar_GetS32("gCosmetics.World_Moon.Changed", 0)) { - Color_RGB8 moonColor = CVar_GetRGB("gCosmetics.World_Moon.Value", (Color_RGB8){ 0, 0, 240 }); + if (CVarGetInteger("gCosmetics.World_Moon.Changed", 0)) { + Color_RGB8 moonColor = CVarGetColor24("gCosmetics.World_Moon.Value", (Color_RGB8){ 0, 0, 240 }); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, moonColor.r, moonColor.g, moonColor.b, alpha); gDPSetEnvColor(POLY_OPA_DISP++, moonColor.r / 2, moonColor.g / 2, moonColor.b / 2, alpha); } else { @@ -350,18 +350,18 @@ void SetMarginAll(const char* ButtonName, bool SetActivated) { std::string cvarName = MarginCvarList[s]; std::string cvarPosType = cvarName+"PosType"; std::string cvarNameMargins = cvarName+"UseMargins"; - if (CVar_GetS32(cvarPosType.c_str(),0) <= 2 && SetActivated) { //Our element is not Hidden or Non anchor + if (CVarGetInteger(cvarPosType.c_str(),0) <= 2 && SetActivated) { //Our element is not Hidden or Non anchor for(int i = 0; i < arrayLengthNonMargin; i++){ - if(MarginCvarNonAnchor[i] == cvarName && CVar_GetS32(cvarPosType.c_str(),0) == 0){ //Our element is both in original position and do not have anchor by default so we skip it. - CVar_SetS32(cvarNameMargins.c_str(), false); //force set off - } else if(MarginCvarNonAnchor[i] == cvarName && CVar_GetS32(cvarPosType.c_str(),0) != 0){ //Our element is not in original position regarless it has no anchor by default since player made it anchored we can toggle margins - CVar_SetS32(cvarNameMargins.c_str(), SetActivated); + if(MarginCvarNonAnchor[i] == cvarName && CVarGetInteger(cvarPosType.c_str(),0) == 0){ //Our element is both in original position and do not have anchor by default so we skip it. + CVarSetInteger(cvarNameMargins.c_str(), false); //force set off + } else if(MarginCvarNonAnchor[i] == cvarName && CVarGetInteger(cvarPosType.c_str(),0) != 0){ //Our element is not in original position regarless it has no anchor by default since player made it anchored we can toggle margins + CVarSetInteger(cvarNameMargins.c_str(), SetActivated); } else if(MarginCvarNonAnchor[i] != cvarName){ //Our elements has an anchor by default so regarless of it's position right now that okay to toggle margins. - CVar_SetS32(cvarNameMargins.c_str(), SetActivated); + CVarSetInteger(cvarNameMargins.c_str(), SetActivated); } } } else { //Since the user requested to turn all margin off no need to do any check there. - CVar_SetS32(cvarNameMargins.c_str(), SetActivated); + CVarSetInteger(cvarNameMargins.c_str(), SetActivated); } } } @@ -373,8 +373,8 @@ void ResetPositionAll() { std::string cvarName = MarginCvarList[s]; std::string cvarPosType = cvarName+"PosType"; std::string cvarNameMargins = cvarName+"UseMargins"; - CVar_SetS32(cvarPosType.c_str(), 0); - CVar_SetS32(cvarNameMargins.c_str(), false); //Turn margin off to everythings as that original position. + CVarSetInteger(cvarPosType.c_str(), 0); + CVarSetInteger(cvarNameMargins.c_str(), false); //Turn margin off to everythings as that original position. } } } @@ -385,8 +385,8 @@ int hue = 0; void CosmeticsUpdateTick(bool& open) { int index = 0; for (auto& [id, cosmeticOption] : cosmeticOptions) { - if (cosmeticOption.supportsRainbow && CVar_GetS32(cosmeticOption.rainbowCvar, 0)) { - float frequency = 2 * M_PI / (360 * CVar_GetFloat("gCosmetics.RainbowSpeed", 0.6f)); + if (cosmeticOption.supportsRainbow && CVarGetInteger(cosmeticOption.rainbowCvar, 0)) { + float frequency = 2 * M_PI / (360 * CVarGetFloat("gCosmetics.RainbowSpeed", 0.6f)); Color_RGBA8 newColor; newColor.r = sin(frequency * ((hue + index)) + 0) * 127 + 128; newColor.g = sin(frequency * ((hue + index)) + (2 * M_PI / 3)) * 127 + 128; @@ -398,13 +398,13 @@ void CosmeticsUpdateTick(bool& open) { cosmeticOption.currentColor.z = newColor.b / 255.0; cosmeticOption.currentColor.w = newColor.a / 255.0; - CVar_SetRGBA(cosmeticOption.cvar, newColor); + CVarSetColor(cosmeticOption.cvar, newColor); } // If we don't want the rainbow color on items to be synced, offset the index for each item in the loop. // Technically this would work if you replaced "60" with 1 but the hue would be so close it's // indistinguishable, 60 gives us a big enough gap to notice the difference. - if (!CVar_GetS32("gCosmetics.RainbowSync", 0)) { - index+= (60 * CVar_GetFloat("gCosmetics.RainbowSpeed", 0.6f)); + if (!CVarGetInteger("gCosmetics.RainbowSync", 0)) { + index+= (60 * CVarGetFloat("gCosmetics.RainbowSpeed", 0.6f)); } } ApplyOrResetCustomGfxPatches(false); @@ -423,180 +423,180 @@ void CosmeticsUpdateTick(bool& open) { */ void ApplyOrResetCustomGfxPatches(bool manualChange = true) { static CosmeticOption& linkGoronTunic = cosmeticOptions.at("Link_GoronTunic"); - if (manualChange || CVar_GetS32(linkGoronTunic.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(linkGoronTunic.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {linkGoronTunic.defaultColor.x, linkGoronTunic.defaultColor.y, linkGoronTunic.defaultColor.z, linkGoronTunic.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(linkGoronTunic.cvar, defaultColor); - PATCH_GFX(gGiGoronTunicColorDL, "Link_GoronTunic1", linkGoronTunic.changedCvar, 6, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiGoronCollarColorDL, "Link_GoronTunic2", linkGoronTunic.changedCvar, 6, gsDPSetPrimColor(0, 0, color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiGoronTunicColorDL, "Link_GoronTunic3", linkGoronTunic.changedCvar, 8, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiGoronCollarColorDL, "Link_GoronTunic4", linkGoronTunic.changedCvar, 8, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + Color_RGBA8 color = CVarGetColor(linkGoronTunic.cvar, defaultColor); + PATCH_GFX(gGiGoronTunicColorDL, "Link_GoronTunic1", linkGoronTunic.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGoronCollarColorDL, "Link_GoronTunic2", linkGoronTunic.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiGoronTunicColorDL, "Link_GoronTunic3", linkGoronTunic.changedCvar, 4, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiGoronCollarColorDL, "Link_GoronTunic4", linkGoronTunic.changedCvar, 4, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); } static CosmeticOption& linkZoraTunic = cosmeticOptions.at("Link_ZoraTunic"); - if (manualChange || CVar_GetS32(linkZoraTunic.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(linkZoraTunic.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {linkZoraTunic.defaultColor.x, linkZoraTunic.defaultColor.y, linkZoraTunic.defaultColor.z, linkZoraTunic.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(linkZoraTunic.cvar, defaultColor); - PATCH_GFX(gGiZoraTunicColorDL, "Link_ZoraTunic1", linkZoraTunic.changedCvar, 6, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiZoraCollarColorDL, "Link_ZoraTunic2", linkZoraTunic.changedCvar, 6, gsDPSetPrimColor(0, 0, color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiZoraTunicColorDL, "Link_ZoraTunic3", linkZoraTunic.changedCvar, 8, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiZoraCollarColorDL, "Link_ZoraTunic4", linkZoraTunic.changedCvar, 8, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + Color_RGBA8 color = CVarGetColor(linkZoraTunic.cvar, defaultColor); + PATCH_GFX(gGiZoraTunicColorDL, "Link_ZoraTunic1", linkZoraTunic.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiZoraCollarColorDL, "Link_ZoraTunic2", linkZoraTunic.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiZoraTunicColorDL, "Link_ZoraTunic3", linkZoraTunic.changedCvar, 4, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiZoraCollarColorDL, "Link_ZoraTunic4", linkZoraTunic.changedCvar, 4, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); } static CosmeticOption& linkHair = cosmeticOptions.at("Link_Hair"); - if (manualChange || CVar_GetS32(linkHair.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(linkHair.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {linkHair.defaultColor.x, linkHair.defaultColor.y, linkHair.defaultColor.z, linkHair.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(linkHair.cvar, defaultColor); - PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair1", linkHair.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildHeadFarDL, "Link_Hair2", linkHair.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultHeadNearDL, "Link_Hair3", linkHair.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultHeadFarDL, "Link_Hair4", linkHair.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(linkHair.cvar, defaultColor); + PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair1", linkHair.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkChildHeadFarDL, "Link_Hair2", linkHair.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultHeadNearDL, "Link_Hair3", linkHair.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultHeadFarDL, "Link_Hair4", linkHair.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); if (manualChange) { - PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair5", linkHair.changedCvar, 92, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair6", linkHair.changedCvar, 108, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair7", linkHair.changedCvar, 272, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair8", linkHair.changedCvar, 324, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildHeadFarDL, "Link_Hair9", linkHair.changedCvar, 202, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildHeadFarDL, "Link_Hair10", linkHair.changedCvar, 236, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultHeadNearDL, "Link_Hair11", linkHair.changedCvar, 250, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultHeadNearDL, "Link_Hair12", linkHair.changedCvar, 318, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultHeadFarDL, "Link_Hair13", linkHair.changedCvar, 204, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultHeadFarDL, "Link_Hair14", linkHair.changedCvar, 244, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair5", linkHair.changedCvar, 46, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair6", linkHair.changedCvar, 54, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair7", linkHair.changedCvar, 136, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair8", linkHair.changedCvar, 162, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildHeadFarDL, "Link_Hair9", linkHair.changedCvar, 101, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildHeadFarDL, "Link_Hair10", linkHair.changedCvar, 118, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultHeadNearDL, "Link_Hair11", linkHair.changedCvar, 125, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultHeadNearDL, "Link_Hair12", linkHair.changedCvar, 159, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultHeadFarDL, "Link_Hair13", linkHair.changedCvar, 102, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultHeadFarDL, "Link_Hair14", linkHair.changedCvar, 122, gsSPGrayscale(false)); } } static CosmeticOption& linkLinen = cosmeticOptions.at("Link_Linen"); - if (manualChange || CVar_GetS32(linkLinen.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(linkLinen.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {linkLinen.defaultColor.x, linkLinen.defaultColor.y, linkLinen.defaultColor.z, linkLinen.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(linkLinen.cvar, defaultColor); - PATCH_GFX(gLinkAdultLeftArmNearDL, "Link_Linen1", linkLinen.changedCvar, 60, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftArmNearDL, "Link_Linen2", linkLinen.changedCvar, 166, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftArmOutNearDL, "Link_Linen3", linkLinen.changedCvar, 50, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen4", linkLinen.changedCvar, 60, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen5", linkLinen.changedCvar, 140, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen6", linkLinen.changedCvar, 60, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen7", linkLinen.changedCvar, 140, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightArmNearDL, "Link_Linen8", linkLinen.changedCvar, 60, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftShoulderFarDL, "Link_Linen9", linkLinen.changedCvar, 110, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftShoulderNearDL, "Link_Linen10", linkLinen.changedCvar, 114, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightShoulderNearDL, "Link_Linen11", linkLinen.changedCvar, 114, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightShoulderFarDL, "Link_Linen12", linkLinen.changedCvar, 110, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultTorsoNearDL, "Link_Linen13", linkLinen.changedCvar, 132, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultTorsoFarDL, "Link_Linen14", linkLinen.changedCvar, 114, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightThighNearDL, "Link_Linen15", linkLinen.changedCvar, 106, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftThighNearDL, "Link_Linen16", linkLinen.changedCvar, 106, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightThighFarDL, "Link_Linen17", linkLinen.changedCvar, 108, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftThighFarDL, "Link_Linen18", linkLinen.changedCvar, 108, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Linen19", linkLinen.changedCvar, 60, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftLegNearDL, "Link_Linen20", linkLinen.changedCvar, 60, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Linen21", linkLinen.changedCvar, 60, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftLegFarDL, "Link_Linen22", linkLinen.changedCvar, 60, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(linkLinen.cvar, defaultColor); + PATCH_GFX(gLinkAdultLeftArmNearDL, "Link_Linen1", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftArmNearDL, "Link_Linen2", linkLinen.changedCvar, 83, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftArmOutNearDL, "Link_Linen3", linkLinen.changedCvar, 25, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen4", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen5", linkLinen.changedCvar, 70, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen6", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen7", linkLinen.changedCvar, 70, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightArmNearDL, "Link_Linen8", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftShoulderFarDL, "Link_Linen9", linkLinen.changedCvar, 55, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftShoulderNearDL, "Link_Linen10", linkLinen.changedCvar, 57, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightShoulderNearDL, "Link_Linen11", linkLinen.changedCvar, 57, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightShoulderFarDL, "Link_Linen12", linkLinen.changedCvar, 55, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultTorsoNearDL, "Link_Linen13", linkLinen.changedCvar, 66, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultTorsoFarDL, "Link_Linen14", linkLinen.changedCvar, 57, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightThighNearDL, "Link_Linen15", linkLinen.changedCvar, 53, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftThighNearDL, "Link_Linen16", linkLinen.changedCvar, 53, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightThighFarDL, "Link_Linen17", linkLinen.changedCvar, 54, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftThighFarDL, "Link_Linen18", linkLinen.changedCvar, 54, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Linen19", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftLegNearDL, "Link_Linen20", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Linen21", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftLegFarDL, "Link_Linen22", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); if (manualChange) { - PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen23", linkLinen.changedCvar, 70, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultLeftArmOutNearDL, "Link_Linen24", linkLinen.changedCvar, 90, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultLeftArmNearDL, "Link_Linen25", linkLinen.changedCvar, 80, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen26", linkLinen.changedCvar, 154, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen27", linkLinen.changedCvar, 70, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen28", linkLinen.changedCvar, 154, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultRightArmNearDL, "Link_Linen29", linkLinen.changedCvar, 84, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Linen30", linkLinen.changedCvar, 86, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultLeftLegNearDL, "Link_Linen31", linkLinen.changedCvar, 86, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Linen32", linkLinen.changedCvar, 76, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultLeftLegFarDL, "Link_Linen33", linkLinen.changedCvar, 76, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen23", linkLinen.changedCvar, 35, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultLeftArmOutNearDL, "Link_Linen24", linkLinen.changedCvar, 45, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultLeftArmNearDL, "Link_Linen25", linkLinen.changedCvar, 40, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen26", linkLinen.changedCvar, 77, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen27", linkLinen.changedCvar, 35, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen28", linkLinen.changedCvar, 77, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultRightArmNearDL, "Link_Linen29", linkLinen.changedCvar, 42, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Linen30", linkLinen.changedCvar, 43, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultLeftLegNearDL, "Link_Linen31", linkLinen.changedCvar, 43, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Linen32", linkLinen.changedCvar, 38, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultLeftLegFarDL, "Link_Linen33", linkLinen.changedCvar, 38, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); } } static CosmeticOption& linkBoots = cosmeticOptions.at("Link_Boots"); - if (manualChange || CVar_GetS32(linkBoots.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(linkBoots.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {linkBoots.defaultColor.x, linkBoots.defaultColor.y, linkBoots.defaultColor.z, linkBoots.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(linkBoots.cvar, defaultColor); - PATCH_GFX(gLinkChildRightShinNearDL, "Link_Boots1", linkBoots.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildRightShinFarDL, "Link_Boots2", linkBoots.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Boots3", linkBoots.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Boots4", linkBoots.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(linkBoots.cvar, defaultColor); + PATCH_GFX(gLinkChildRightShinNearDL, "Link_Boots1", linkBoots.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkChildRightShinFarDL, "Link_Boots2", linkBoots.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Boots3", linkBoots.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Boots4", linkBoots.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); if (manualChange) { - PATCH_GFX(gLinkChildRightShinNearDL, "Link_Boots5", linkBoots.changedCvar, 106, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildRightShinNearDL, "Link_Boots6", linkBoots.changedCvar, 138, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildRightShinFarDL, "Link_Boots7", linkBoots.changedCvar, 104, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildRightShinFarDL, "Link_Boots8", linkBoots.changedCvar, 122, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildLeftShinNearDL, "Link_Boots9", linkBoots.changedCvar, 106, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildLeftShinNearDL, "Link_Boots10", linkBoots.changedCvar, 138, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildLeftShinFarDL, "Link_Boots11", linkBoots.changedCvar, 104, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildLeftShinFarDL, "Link_Boots12", linkBoots.changedCvar, 122, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildRightFootNearDL, "Link_Boots13", linkBoots.changedCvar, 60, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildRightFootFarDL, "Link_Boots14", linkBoots.changedCvar, 60, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildLeftFootNearDL, "Link_Boots15", linkBoots.changedCvar, 60, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildLeftFootFarDL, "Link_Boots16", linkBoots.changedCvar, 60, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildLeftThighNearDL, "Link_Boots17", linkBoots.changedCvar, 20, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildLeftThighFarDL, "Link_Boots18", linkBoots.changedCvar, 20, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildHeadNearDL, "Link_Boots19", linkBoots.changedCvar, 40, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildHeadFarDL, "Link_Boots20", linkBoots.changedCvar, 40, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Boots21", linkBoots.changedCvar, 114, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Boots22", linkBoots.changedCvar, 104, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultLeftLegNearDL, "Link_Boots23", linkBoots.changedCvar, 114, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultLeftLegFarDL, "Link_Boots24", linkBoots.changedCvar, 104, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultLeftThighNearDL, "Link_Boots25", linkBoots.changedCvar, 20, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultLeftThighFarDL, "Link_Boots26", linkBoots.changedCvar, 20, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultHeadNearDL, "Link_Boots27", linkBoots.changedCvar, 40, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultHeadFarDL, "Link_Boots28", linkBoots.changedCvar, 40, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildRightShinNearDL, "Link_Boots5", linkBoots.changedCvar, 53, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildRightShinNearDL, "Link_Boots6", linkBoots.changedCvar, 69, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildRightShinFarDL, "Link_Boots7", linkBoots.changedCvar, 52, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildRightShinFarDL, "Link_Boots8", linkBoots.changedCvar, 61, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildLeftShinNearDL, "Link_Boots9", linkBoots.changedCvar, 53, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildLeftShinNearDL, "Link_Boots10", linkBoots.changedCvar, 69, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildLeftShinFarDL, "Link_Boots11", linkBoots.changedCvar, 52, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildLeftShinFarDL, "Link_Boots12", linkBoots.changedCvar, 61, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildRightFootNearDL, "Link_Boots13", linkBoots.changedCvar, 30, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildRightFootFarDL, "Link_Boots14", linkBoots.changedCvar, 30, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildLeftFootNearDL, "Link_Boots15", linkBoots.changedCvar, 30, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildLeftFootFarDL, "Link_Boots16", linkBoots.changedCvar, 30, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildLeftThighNearDL, "Link_Boots17", linkBoots.changedCvar, 10, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildLeftThighFarDL, "Link_Boots18", linkBoots.changedCvar, 10, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildHeadNearDL, "Link_Boots19", linkBoots.changedCvar, 20, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildHeadFarDL, "Link_Boots20", linkBoots.changedCvar, 20, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Boots21", linkBoots.changedCvar, 57, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Boots22", linkBoots.changedCvar, 52, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultLeftLegNearDL, "Link_Boots23", linkBoots.changedCvar, 57, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultLeftLegFarDL, "Link_Boots24", linkBoots.changedCvar, 52, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultLeftThighNearDL, "Link_Boots25", linkBoots.changedCvar, 10, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultLeftThighFarDL, "Link_Boots26", linkBoots.changedCvar, 10, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultHeadNearDL, "Link_Boots27", linkBoots.changedCvar, 20, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultHeadFarDL, "Link_Boots28", linkBoots.changedCvar, 20, gsSPGrayscale(false)); } } static CosmeticOption& mirrorShieldBody = cosmeticOptions.at("MirrorShield_Body"); - if (manualChange || CVar_GetS32(mirrorShieldBody.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(mirrorShieldBody.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {mirrorShieldBody.defaultColor.x, mirrorShieldBody.defaultColor.y, mirrorShieldBody.defaultColor.z, mirrorShieldBody.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(mirrorShieldBody.cvar, defaultColor); - PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Body1", mirrorShieldBody.changedCvar, 10, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Body2", mirrorShieldBody.changedCvar, 12, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "MirrorShield_Body3", mirrorShieldBody.changedCvar, 56, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "MirrorShield_Body4", mirrorShieldBody.changedCvar, 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldAndSheathNearDL, "MirrorShield_Body5", mirrorShieldBody.changedCvar, 56, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldAndSheathFarDL, "MirrorShield_Body6", mirrorShieldBody.changedCvar, 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldNearDL, "MirrorShield_Body7", mirrorShieldBody.changedCvar, 56, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldFarDL, "MirrorShield_Body8", mirrorShieldBody.changedCvar, 190, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(mirrorShieldBody.cvar, defaultColor); + PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Body1", mirrorShieldBody.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Body2", mirrorShieldBody.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "MirrorShield_Body3", mirrorShieldBody.changedCvar, 28, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "MirrorShield_Body4", mirrorShieldBody.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldAndSheathNearDL, "MirrorShield_Body5", mirrorShieldBody.changedCvar, 28, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldAndSheathFarDL, "MirrorShield_Body6", mirrorShieldBody.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldNearDL, "MirrorShield_Body7", mirrorShieldBody.changedCvar, 28, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldFarDL, "MirrorShield_Body8", mirrorShieldBody.changedCvar, 95, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& mirrorShieldMirror = cosmeticOptions.at("MirrorShield_Mirror"); - if (manualChange || CVar_GetS32(mirrorShieldMirror.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(mirrorShieldMirror.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {mirrorShieldMirror.defaultColor.x, mirrorShieldMirror.defaultColor.y, mirrorShieldMirror.defaultColor.z, mirrorShieldMirror.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(mirrorShieldMirror.cvar, defaultColor); - PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Mirror1", mirrorShieldMirror.changedCvar, 94, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Mirror2", mirrorShieldMirror.changedCvar, 96, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "MirrorShield_Mirror3", mirrorShieldMirror.changedCvar, 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "MirrorShield_Mirror4", mirrorShieldMirror.changedCvar, 66, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldAndSheathNearDL, "MirrorShield_Mirror5", mirrorShieldMirror.changedCvar, 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldAndSheathFarDL, "MirrorShield_Mirror6", mirrorShieldMirror.changedCvar, 66, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldNearDL, "MirrorShield_Mirror7", mirrorShieldMirror.changedCvar, 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldFarDL, "MirrorShield_Mirror8", mirrorShieldMirror.changedCvar, 222, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(mirrorShieldMirror.cvar, defaultColor); + PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Mirror1", mirrorShieldMirror.changedCvar, 47, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Mirror2", mirrorShieldMirror.changedCvar, 48, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "MirrorShield_Mirror3", mirrorShieldMirror.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "MirrorShield_Mirror4", mirrorShieldMirror.changedCvar, 33, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldAndSheathNearDL, "MirrorShield_Mirror5", mirrorShieldMirror.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldAndSheathFarDL, "MirrorShield_Mirror6", mirrorShieldMirror.changedCvar, 33, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldNearDL, "MirrorShield_Mirror7", mirrorShieldMirror.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldFarDL, "MirrorShield_Mirror8", mirrorShieldMirror.changedCvar, 111, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& mirrorShieldEmblem = cosmeticOptions.at("MirrorShield_Emblem"); - if (manualChange || CVar_GetS32(mirrorShieldEmblem.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(mirrorShieldEmblem.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {mirrorShieldEmblem.defaultColor.x, mirrorShieldEmblem.defaultColor.y, mirrorShieldEmblem.defaultColor.z, mirrorShieldEmblem.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(mirrorShieldEmblem.cvar, defaultColor); - PATCH_GFX(gGiMirrorShieldSymbolDL, "MirrorShield_Emblem1", mirrorShieldEmblem.changedCvar, 10, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 140)); - PATCH_GFX(gGiMirrorShieldSymbolDL, "MirrorShield_Emblem2", mirrorShieldEmblem.changedCvar, 12, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "MirrorShield_Emblem3", mirrorShieldEmblem.changedCvar, 330, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "MirrorShield_Emblem4", mirrorShieldEmblem.changedCvar, 270, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldAndSheathNearDL, "MirrorShield_Emblem5", mirrorShieldEmblem.changedCvar, 258, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldAndSheathFarDL, "MirrorShield_Emblem6", mirrorShieldEmblem.changedCvar, 206, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldNearDL, "MirrorShield_Emblem7", mirrorShieldEmblem.changedCvar, 324, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldFarDL, "MirrorShield_Emblem8", mirrorShieldEmblem.changedCvar, 266, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(mirrorShieldEmblem.cvar, defaultColor); + PATCH_GFX(gGiMirrorShieldSymbolDL, "MirrorShield_Emblem1", mirrorShieldEmblem.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 140)); + PATCH_GFX(gGiMirrorShieldSymbolDL, "MirrorShield_Emblem2", mirrorShieldEmblem.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "MirrorShield_Emblem3", mirrorShieldEmblem.changedCvar, 165, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "MirrorShield_Emblem4", mirrorShieldEmblem.changedCvar, 135, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldAndSheathNearDL, "MirrorShield_Emblem5", mirrorShieldEmblem.changedCvar, 129, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldAndSheathFarDL, "MirrorShield_Emblem6", mirrorShieldEmblem.changedCvar, 103, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldNearDL, "MirrorShield_Emblem7", mirrorShieldEmblem.changedCvar, 162, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldFarDL, "MirrorShield_Emblem8", mirrorShieldEmblem.changedCvar, 133, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& swordsKokiriBlade = cosmeticOptions.at("Swords_KokiriBlade"); - if (manualChange || CVar_GetS32(swordsKokiriBlade.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(swordsKokiriBlade.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {swordsKokiriBlade.defaultColor.x, swordsKokiriBlade.defaultColor.y, swordsKokiriBlade.defaultColor.z, swordsKokiriBlade.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(swordsKokiriBlade.cvar, defaultColor); - PATCH_GFX(gLinkChildLeftFistAndKokiriSwordNearDL, "Swords_KokiriBlade1", swordsKokiriBlade.changedCvar, 158, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildLeftFistAndKokiriSwordFarDL, "Swords_KokiriBlade2", swordsKokiriBlade.changedCvar, 150, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriBlade3", swordsKokiriBlade.changedCvar, 10, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriBlade4", swordsKokiriBlade.changedCvar, 12, gsDPSetEnvColor(color.r / 4, color.g / 4, color.b / 4, 255)); + Color_RGBA8 color = CVarGetColor(swordsKokiriBlade.cvar, defaultColor); + PATCH_GFX(gLinkChildLeftFistAndKokiriSwordNearDL, "Swords_KokiriBlade1", swordsKokiriBlade.changedCvar, 79, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkChildLeftFistAndKokiriSwordFarDL, "Swords_KokiriBlade2", swordsKokiriBlade.changedCvar, 75, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriBlade3", swordsKokiriBlade.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriBlade4", swordsKokiriBlade.changedCvar, 6, gsDPSetEnvColor(color.r / 4, color.g / 4, color.b / 4, 255)); } // static CosmeticOption& swordsKokiriHilt = cosmeticOptions.at("Swords_KokiriHilt"); - // if (manualChange || CVar_GetS32(swordsKokiriHilt.rainbowCvar, 0)) { + // if (manualChange || CVarGetInteger(swordsKokiriHilt.rainbowCvar, 0)) { // static Color_RGBA8 defaultColor = {swordsKokiriHilt.defaultColor.x, swordsKokiriHilt.defaultColor.y, swordsKokiriHilt.defaultColor.z, swordsKokiriHilt.defaultColor.w}; - // Color_RGBA8 color = CVar_GetRGBA(swordsKokiriHilt.cvar, defaultColor); + // Color_RGBA8 color = CVarGetColor(swordsKokiriHilt.cvar, defaultColor); // PATCH_GFX(gLinkChildLeftFistAndKokiriSwordNearDL, "Swords_KokiriHilt1", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); // PATCH_GFX(gLinkChildLeftFistAndKokiriSwordFarDL, "Swords_KokiriHilt2", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); // PATCH_GFX(gLinkChildSwordAndSheathNearDL, "Swords_KokiriHilt3", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); @@ -635,20 +635,20 @@ void ApplyOrResetCustomGfxPatches(bool manualChange = true) { // } // } static CosmeticOption& swordsMasterBlade = cosmeticOptions.at("Swords_MasterBlade"); - if (manualChange || CVar_GetS32(swordsMasterBlade.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(swordsMasterBlade.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {swordsMasterBlade.defaultColor.x, swordsMasterBlade.defaultColor.y, swordsMasterBlade.defaultColor.z, swordsMasterBlade.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(swordsMasterBlade.cvar, defaultColor); - PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordFarDL, "Swords_MasterBlade1", swordsMasterBlade.changedCvar, 120, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordNearDL, "Swords_MasterBlade2", swordsMasterBlade.changedCvar, 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterBlade3", swordsMasterBlade.changedCvar, 26, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterBlade4", swordsMasterBlade.changedCvar, 28, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(ovl_Boss_Ganon2_DL_0103A8, "Swords_MasterBlade5", swordsMasterBlade.changedCvar, 26, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(ovl_Boss_Ganon2_DL_0103A8, "Swords_MasterBlade6", swordsMasterBlade.changedCvar, 28, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + Color_RGBA8 color = CVarGetColor(swordsMasterBlade.cvar, defaultColor); + PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordFarDL, "Swords_MasterBlade1", swordsMasterBlade.changedCvar, 60, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordNearDL, "Swords_MasterBlade2", swordsMasterBlade.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterBlade3", swordsMasterBlade.changedCvar, 13, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterBlade4", swordsMasterBlade.changedCvar, 14, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(ovl_Boss_Ganon2_DL_0103A8, "Swords_MasterBlade5", swordsMasterBlade.changedCvar, 13, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(ovl_Boss_Ganon2_DL_0103A8, "Swords_MasterBlade6", swordsMasterBlade.changedCvar, 14, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); } // static CosmeticOption& swordsMasterHilt = cosmeticOptions.at("Swords_MasterHilt"); - // if (manualChange || CVar_GetS32(swordsMasterHilt.rainbowCvar, 0)) { + // if (manualChange || CVarGetInteger(swordsMasterHilt.rainbowCvar, 0)) { // static Color_RGBA8 defaultColor = {swordsMasterHilt.defaultColor.x, swordsMasterHilt.defaultColor.y, swordsMasterHilt.defaultColor.z, swordsMasterHilt.defaultColor.w}; - // Color_RGBA8 color = CVar_GetRGBA(swordsMasterHilt.cvar, defaultColor); + // Color_RGBA8 color = CVarGetColor(swordsMasterHilt.cvar, defaultColor); // PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordNearDL, "Swords_MasterHilt1", swordsMasterHilt.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); // PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordFarDL, "Swords_MasterHilt2", swordsMasterHilt.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); // PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterHilt3", swordsMasterHilt.changedCvar, 16, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); @@ -693,18 +693,18 @@ void ApplyOrResetCustomGfxPatches(bool manualChange = true) { // } // } static CosmeticOption& swordsBiggoronBlade = cosmeticOptions.at("Swords_BiggoronBlade"); - if (manualChange || CVar_GetS32(swordsBiggoronBlade.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(swordsBiggoronBlade.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {swordsBiggoronBlade.defaultColor.x, swordsBiggoronBlade.defaultColor.y, swordsBiggoronBlade.defaultColor.z, swordsBiggoronBlade.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(swordsBiggoronBlade.cvar, defaultColor); - PATCH_GFX(gLinkAdultLeftHandHoldingBgsFarDL, "Swords_BiggoronBlade1", swordsBiggoronBlade.changedCvar, 216, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftHandHoldingBgsNearDL, "Swords_BiggoronBlade2", swordsBiggoronBlade.changedCvar, 126, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronBlade3", swordsBiggoronBlade.changedCvar, 10, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronBlade4", swordsBiggoronBlade.changedCvar, 12, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + Color_RGBA8 color = CVarGetColor(swordsBiggoronBlade.cvar, defaultColor); + PATCH_GFX(gLinkAdultLeftHandHoldingBgsFarDL, "Swords_BiggoronBlade1", swordsBiggoronBlade.changedCvar, 108, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingBgsNearDL, "Swords_BiggoronBlade2", swordsBiggoronBlade.changedCvar, 63, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronBlade3", swordsBiggoronBlade.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronBlade4", swordsBiggoronBlade.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); } // static CosmeticOption& swordsBiggoronHilt = cosmeticOptions.at("Swords_BiggoronHilt"); - // if (manualChange || CVar_GetS32(swordsBiggoronHilt.rainbowCvar, 0)) { + // if (manualChange || CVarGetInteger(swordsBiggoronHilt.rainbowCvar, 0)) { // static Color_RGBA8 defaultColor = {swordsBiggoronHilt.defaultColor.x, swordsBiggoronHilt.defaultColor.y, swordsBiggoronHilt.defaultColor.z, swordsBiggoronHilt.defaultColor.w}; - // Color_RGBA8 color = CVar_GetRGBA(swordsBiggoronHilt.cvar, defaultColor); + // Color_RGBA8 color = CVarGetColor(swordsBiggoronHilt.cvar, defaultColor); // PATCH_GFX(gLinkAdultLeftHandHoldingBgsNearDL, "Swords_BiggoronHilt1", swordsBiggoronHilt.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); // PATCH_GFX(gLinkAdultLeftHandHoldingBgsFarDL, "Swords_BiggoronHilt2", swordsBiggoronHilt.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); // PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronHilt3", swordsBiggoronHilt.changedCvar, 74, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); @@ -722,70 +722,70 @@ void ApplyOrResetCustomGfxPatches(bool manualChange = true) { // } static CosmeticOption& glovesGoronBracelet = cosmeticOptions.at("Gloves_GoronBracelet"); - if (manualChange || CVar_GetS32(glovesGoronBracelet.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(glovesGoronBracelet.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {glovesGoronBracelet.defaultColor.x, glovesGoronBracelet.defaultColor.y, glovesGoronBracelet.defaultColor.z, glovesGoronBracelet.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(glovesGoronBracelet.cvar, defaultColor); - PATCH_GFX(gGiGoronBraceletDL, "Gloves_GoronBracelet1", glovesGoronBracelet.changedCvar, 10, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiGoronBraceletDL, "Gloves_GoronBracelet2", glovesGoronBracelet.changedCvar, 12, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkChildGoronBraceletDL, "Gloves_GoronBracelet3", glovesGoronBracelet.changedCvar, 6, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(glovesGoronBracelet.cvar, defaultColor); + PATCH_GFX(gGiGoronBraceletDL, "Gloves_GoronBracelet1", glovesGoronBracelet.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGoronBraceletDL, "Gloves_GoronBracelet2", glovesGoronBracelet.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkChildGoronBraceletDL, "Gloves_GoronBracelet3", glovesGoronBracelet.changedCvar, 3, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); if (manualChange) { - PATCH_GFX(gLinkChildGoronBraceletDL, "Gloves_GoronBracelet4", glovesGoronBracelet.changedCvar, 22, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildGoronBraceletDL, "Gloves_GoronBracelet5", glovesGoronBracelet.changedCvar, 78, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildGoronBraceletDL, "Gloves_GoronBracelet4", glovesGoronBracelet.changedCvar, 11, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildGoronBraceletDL, "Gloves_GoronBracelet5", glovesGoronBracelet.changedCvar, 39, gsSPGrayscale(false)); } } static CosmeticOption& glovesSilverGauntlets = cosmeticOptions.at("Gloves_SilverGauntlets"); - if (manualChange || CVar_GetS32(glovesSilverGauntlets.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(glovesSilverGauntlets.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {glovesSilverGauntlets.defaultColor.x, glovesSilverGauntlets.defaultColor.y, glovesSilverGauntlets.defaultColor.z, glovesSilverGauntlets.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(glovesSilverGauntlets.cvar, defaultColor); - PATCH_GFX(gGiSilverGauntletsColorDL, "Gloves_SilverGauntlets1", glovesSilverGauntlets.changedCvar, 6, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiSilverGauntletsColorDL, "Gloves_SilverGauntlets2", glovesSilverGauntlets.changedCvar, 8, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + Color_RGBA8 color = CVarGetColor(glovesSilverGauntlets.cvar, defaultColor); + PATCH_GFX(gGiSilverGauntletsColorDL, "Gloves_SilverGauntlets1", glovesSilverGauntlets.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiSilverGauntletsColorDL, "Gloves_SilverGauntlets2", glovesSilverGauntlets.changedCvar, 4, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); } static CosmeticOption& glovesGoldenGauntlets = cosmeticOptions.at("Gloves_GoldenGauntlets"); - if (manualChange || CVar_GetS32(glovesGoldenGauntlets.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(glovesGoldenGauntlets.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {glovesGoldenGauntlets.defaultColor.x, glovesGoldenGauntlets.defaultColor.y, glovesGoldenGauntlets.defaultColor.z, glovesGoldenGauntlets.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(glovesGoldenGauntlets.cvar, defaultColor); - PATCH_GFX(gGiGoldenGauntletsColorDL, "Gloves_GoldenGauntlets1", glovesGoldenGauntlets.changedCvar, 6, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiGoldenGauntletsColorDL, "Gloves_GoldenGauntlets2", glovesGoldenGauntlets.changedCvar, 8, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + Color_RGBA8 color = CVarGetColor(glovesGoldenGauntlets.cvar, defaultColor); + PATCH_GFX(gGiGoldenGauntletsColorDL, "Gloves_GoldenGauntlets1", glovesGoldenGauntlets.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGoldenGauntletsColorDL, "Gloves_GoldenGauntlets2", glovesGoldenGauntlets.changedCvar, 4, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); } static CosmeticOption& glovesGauntletsGem = cosmeticOptions.at("Gloves_GauntletsGem"); - if (manualChange || CVar_GetS32(glovesGauntletsGem.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(glovesGauntletsGem.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {glovesGauntletsGem.defaultColor.x, glovesGauntletsGem.defaultColor.y, glovesGauntletsGem.defaultColor.z, glovesGauntletsGem.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(glovesGauntletsGem.cvar, defaultColor); - PATCH_GFX(gGiGauntletsDL, "Gloves_GauntletsGem1", glovesGauntletsGem.changedCvar, 168, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiGauntletsDL, "Gloves_GauntletsGem2", glovesGauntletsGem.changedCvar, 170, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultLeftGauntletPlate2DL, "Gloves_GauntletsGem3", glovesGauntletsGem.changedCvar, 84, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightGauntletPlate2DL, "Gloves_GauntletsGem4", glovesGauntletsGem.changedCvar, 84, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftGauntletPlate3DL, "Gloves_GauntletsGem5", glovesGauntletsGem.changedCvar, 84, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightGauntletPlate3DL, "Gloves_GauntletsGem6", glovesGauntletsGem.changedCvar, 84, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(glovesGauntletsGem.cvar, defaultColor); + PATCH_GFX(gGiGauntletsDL, "Gloves_GauntletsGem1", glovesGauntletsGem.changedCvar, 84, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGauntletsDL, "Gloves_GauntletsGem2", glovesGauntletsGem.changedCvar, 85, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultLeftGauntletPlate2DL, "Gloves_GauntletsGem3", glovesGauntletsGem.changedCvar, 42, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightGauntletPlate2DL, "Gloves_GauntletsGem4", glovesGauntletsGem.changedCvar, 42, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftGauntletPlate3DL, "Gloves_GauntletsGem5", glovesGauntletsGem.changedCvar, 42, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightGauntletPlate3DL, "Gloves_GauntletsGem6", glovesGauntletsGem.changedCvar, 42, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentBoomerangBody = cosmeticOptions.at("Equipment_BoomerangBody"); - if (manualChange || CVar_GetS32(equipmentBoomerangBody.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(equipmentBoomerangBody.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {equipmentBoomerangBody.defaultColor.x, equipmentBoomerangBody.defaultColor.y, equipmentBoomerangBody.defaultColor.z, equipmentBoomerangBody.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(equipmentBoomerangBody.cvar, defaultColor); - PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangBody1", equipmentBoomerangBody.changedCvar, 10, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangBody2", equipmentBoomerangBody.changedCvar, 12, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkChildLeftFistAndBoomerangNearDL, "Equipment_BoomerangBody3", equipmentBoomerangBody.changedCvar, 68, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildLeftFistAndBoomerangFarDL, "Equipment_BoomerangBody4", equipmentBoomerangBody.changedCvar, 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gBoomerangDL, "Equipment_BoomerangBody5", equipmentBoomerangBody.changedCvar, 78, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(equipmentBoomerangBody.cvar, defaultColor); + PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangBody1", equipmentBoomerangBody.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangBody2", equipmentBoomerangBody.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkChildLeftFistAndBoomerangNearDL, "Equipment_BoomerangBody3", equipmentBoomerangBody.changedCvar, 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkChildLeftFistAndBoomerangFarDL, "Equipment_BoomerangBody4", equipmentBoomerangBody.changedCvar, 9, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gBoomerangDL, "Equipment_BoomerangBody5", equipmentBoomerangBody.changedCvar, 39, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentBoomerangGem = cosmeticOptions.at("Equipment_BoomerangGem"); - if (manualChange || CVar_GetS32(equipmentBoomerangGem.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(equipmentBoomerangGem.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {equipmentBoomerangGem.defaultColor.x, equipmentBoomerangGem.defaultColor.y, equipmentBoomerangGem.defaultColor.z, equipmentBoomerangGem.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(equipmentBoomerangGem.cvar, defaultColor); - PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangGem1", equipmentBoomerangGem.changedCvar, 168, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangGem2", equipmentBoomerangGem.changedCvar, 170, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkChildLeftFistAndBoomerangNearDL, "Equipment_BoomerangGem3", equipmentBoomerangGem.changedCvar, 32, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gBoomerangDL, "Equipment_BoomerangGem4", equipmentBoomerangGem.changedCvar, 46, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(equipmentBoomerangGem.cvar, defaultColor); + PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangGem1", equipmentBoomerangGem.changedCvar, 84, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangGem2", equipmentBoomerangGem.changedCvar, 85, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkChildLeftFistAndBoomerangNearDL, "Equipment_BoomerangGem3", equipmentBoomerangGem.changedCvar, 16, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gBoomerangDL, "Equipment_BoomerangGem4", equipmentBoomerangGem.changedCvar, 23, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); // There appears to be no gem rendered on the far LOD variant, not sure if this is an SOH bug or what. // PATCH_GFX(gLinkChildLeftFistAndBoomerangFarDL, "Equipment_BoomerangGem5", equipmentBoomerangGem.changedCvar, 32, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } // static CosmeticOption& equipmentSlingshotBody = cosmeticOptions.at("Equipment_SlingshotBody"); - // if (manualChange || CVar_GetS32(equipmentSlingshotBody.rainbowCvar, 0)) { + // if (manualChange || CVarGetInteger(equipmentSlingshotBody.rainbowCvar, 0)) { // static Color_RGBA8 defaultColor = {equipmentSlingshotBody.defaultColor.x, equipmentSlingshotBody.defaultColor.y, equipmentSlingshotBody.defaultColor.z, equipmentSlingshotBody.defaultColor.w}; - // Color_RGBA8 color = CVar_GetRGBA(equipmentSlingshotBody.cvar, defaultColor); + // Color_RGBA8 color = CVarGetColor(equipmentSlingshotBody.cvar, defaultColor); // PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody1", equipmentSlingshotBody.changedCvar, 10, gsDPSetPrimColor(0, 0, MAX(color.r - 100, 0), MAX(color.g - 100, 0), MAX(color.b - 100, 0), 255)); // PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody2", equipmentSlingshotBody.changedCvar, 12, gsDPSetEnvColor(MAX(color.r - 100, 0) / 3, MAX(color.g - 100, 0) / 3, MAX(color.b - 100, 0) / 3, 255)); // PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody3", equipmentSlingshotBody.changedCvar, 74, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); @@ -807,237 +807,237 @@ void ApplyOrResetCustomGfxPatches(bool manualChange = true) { // } // } static CosmeticOption& equipmentSlingshotString = cosmeticOptions.at("Equipment_SlingshotString"); - if (manualChange || CVar_GetS32(equipmentSlingshotString.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(equipmentSlingshotString.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {equipmentSlingshotString.defaultColor.x, equipmentSlingshotString.defaultColor.y, equipmentSlingshotString.defaultColor.z, equipmentSlingshotString.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(equipmentSlingshotString.cvar, defaultColor); - PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotString1",equipmentSlingshotString.changedCvar,150, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotString2",equipmentSlingshotString.changedCvar,152, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gLinkChildSlinghotStringDL, "Equipment_SlingshotString3",equipmentSlingshotString.changedCvar, 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(equipmentSlingshotString.cvar, defaultColor); + PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotString1",equipmentSlingshotString.changedCvar, 75, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotString2",equipmentSlingshotString.changedCvar, 76, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gLinkChildSlinghotStringDL, "Equipment_SlingshotString3",equipmentSlingshotString.changedCvar, 9, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentBowTips = cosmeticOptions.at("Equipment_BowTips"); - if (manualChange || CVar_GetS32(equipmentBowTips.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(equipmentBowTips.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {equipmentBowTips.defaultColor.x, equipmentBowTips.defaultColor.y, equipmentBowTips.defaultColor.z, equipmentBowTips.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(equipmentBowTips.cvar, defaultColor); - PATCH_GFX(gGiBowDL, "Equipment_BowTips1", equipmentBowTips.changedCvar, 172, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBowDL, "Equipment_BowTips2", equipmentBowTips.changedCvar, 174, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowFirstPersonDL, "Equipment_BowTips3", equipmentBowTips.changedCvar, 68, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowNearDL, "Equipment_BowTips4", equipmentBowTips.changedCvar, 52, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowFarDL, "Equipment_BowTips5", equipmentBowTips.changedCvar, 50, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(equipmentBowTips.cvar, defaultColor); + PATCH_GFX(gGiBowDL, "Equipment_BowTips1", equipmentBowTips.changedCvar, 86, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBowDL, "Equipment_BowTips2", equipmentBowTips.changedCvar, 87, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowFirstPersonDL, "Equipment_BowTips3", equipmentBowTips.changedCvar, 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowNearDL, "Equipment_BowTips4", equipmentBowTips.changedCvar, 26, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowFarDL, "Equipment_BowTips5", equipmentBowTips.changedCvar, 25, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentBowString = cosmeticOptions.at("Equipment_BowString"); - if (manualChange || CVar_GetS32(equipmentBowString.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(equipmentBowString.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {equipmentBowString.defaultColor.x, equipmentBowString.defaultColor.y, equipmentBowString.defaultColor.z, equipmentBowString.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(equipmentBowString.cvar, defaultColor); - PATCH_GFX(gGiBowDL, "Equipment_BowString1", equipmentBowString.changedCvar, 210, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBowDL, "Equipment_BowString2", equipmentBowString.changedCvar, 212, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultBowStringDL, "Equipment_BowString3", equipmentBowString.changedCvar, 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(equipmentBowString.cvar, defaultColor); + PATCH_GFX(gGiBowDL, "Equipment_BowString1", equipmentBowString.changedCvar, 105, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBowDL, "Equipment_BowString2", equipmentBowString.changedCvar, 106, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultBowStringDL, "Equipment_BowString3", equipmentBowString.changedCvar, 9, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentBowBody = cosmeticOptions.at("Equipment_BowBody"); - if (manualChange || CVar_GetS32(equipmentBowBody.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(equipmentBowBody.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {equipmentBowBody.defaultColor.x, equipmentBowBody.defaultColor.y, equipmentBowBody.defaultColor.z, equipmentBowBody.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(equipmentBowBody.cvar, defaultColor); - PATCH_GFX(gGiBowDL, "Equipment_BowBody1", equipmentBowBody.changedCvar, 10, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBowDL, "Equipment_BowBody2", equipmentBowBody.changedCvar, 12, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowFirstPersonDL, "Equipment_BowBody3", equipmentBowBody.changedCvar, 84, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowNearDL, "Equipment_BowBody4", equipmentBowBody.changedCvar, 66, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowFarDL, "Equipment_BowBody5", equipmentBowBody.changedCvar, 62, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(equipmentBowBody.cvar, defaultColor); + PATCH_GFX(gGiBowDL, "Equipment_BowBody1", equipmentBowBody.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBowDL, "Equipment_BowBody2", equipmentBowBody.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowFirstPersonDL, "Equipment_BowBody3", equipmentBowBody.changedCvar, 42, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowNearDL, "Equipment_BowBody4", equipmentBowBody.changedCvar, 33, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowFarDL, "Equipment_BowBody5", equipmentBowBody.changedCvar, 31, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentBowHandle = cosmeticOptions.at("Equipment_BowHandle"); - if (manualChange || CVar_GetS32(equipmentBowHandle.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(equipmentBowHandle.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {equipmentBowHandle.defaultColor.x, equipmentBowHandle.defaultColor.y, equipmentBowHandle.defaultColor.z, equipmentBowHandle.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(equipmentBowHandle.cvar, defaultColor); - PATCH_GFX(gGiBowDL, "Equipment_BowHandle1", equipmentBowHandle.changedCvar, 102, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBowDL, "Equipment_BowHandle2", equipmentBowHandle.changedCvar, 104, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowFirstPersonDL, "Equipment_BowHandle3", equipmentBowHandle.changedCvar, 36, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowNearDL, "Equipment_BowHandle4", equipmentBowHandle.changedCvar, 36, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowFarDL, "Equipment_BowHandle5", equipmentBowHandle.changedCvar, 36, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(equipmentBowHandle.cvar, defaultColor); + PATCH_GFX(gGiBowDL, "Equipment_BowHandle1", equipmentBowHandle.changedCvar, 51, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBowDL, "Equipment_BowHandle2", equipmentBowHandle.changedCvar, 52, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowFirstPersonDL, "Equipment_BowHandle3", equipmentBowHandle.changedCvar, 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowNearDL, "Equipment_BowHandle4", equipmentBowHandle.changedCvar, 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowFarDL, "Equipment_BowHandle5", equipmentBowHandle.changedCvar, 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentHammerHead = cosmeticOptions.at("Equipment_HammerHead"); - if (manualChange || CVar_GetS32(equipmentHammerHead.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(equipmentHammerHead.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {equipmentHammerHead.defaultColor.x, equipmentHammerHead.defaultColor.y, equipmentHammerHead.defaultColor.z, equipmentHammerHead.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(equipmentHammerHead.cvar, defaultColor); - PATCH_GFX(gGiHammerDL, "Equipment_HammerHead1", equipmentHammerHead.changedCvar, 10, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiHammerDL, "Equipment_HammerHead2", equipmentHammerHead.changedCvar, 12, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); - PATCH_GFX(gGiHammerDL, "Equipment_HammerHead3", equipmentHammerHead.changedCvar, 136, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiHammerDL, "Equipment_HammerHead4", equipmentHammerHead.changedCvar, 138, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); - PATCH_GFX(gLinkAdultLeftHandHoldingHammerNearDL, "Equipment_HammerHead5", equipmentHammerHead.changedCvar, 76, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftHandHoldingHammerFarDL, "Equipment_HammerHead6", equipmentHammerHead.changedCvar, 76, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(equipmentHammerHead.cvar, defaultColor); + PATCH_GFX(gGiHammerDL, "Equipment_HammerHead1", equipmentHammerHead.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiHammerDL, "Equipment_HammerHead2", equipmentHammerHead.changedCvar, 6, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); + PATCH_GFX(gGiHammerDL, "Equipment_HammerHead3", equipmentHammerHead.changedCvar, 68, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiHammerDL, "Equipment_HammerHead4", equipmentHammerHead.changedCvar, 69, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingHammerNearDL, "Equipment_HammerHead5", equipmentHammerHead.changedCvar, 38, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingHammerFarDL, "Equipment_HammerHead6", equipmentHammerHead.changedCvar, 38, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentHammerHandle = cosmeticOptions.at("Equipment_HammerHandle"); - if (manualChange || CVar_GetS32(equipmentHammerHandle.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(equipmentHammerHandle.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {equipmentHammerHandle.defaultColor.x, equipmentHammerHandle.defaultColor.y, equipmentHammerHandle.defaultColor.z, equipmentHammerHandle.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(equipmentHammerHandle.cvar, defaultColor); - PATCH_GFX(gGiHammerDL, "Equipment_HammerHandle1", equipmentHammerHandle.changedCvar, 168, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiHammerDL, "Equipment_HammerHandle2", equipmentHammerHandle.changedCvar, 170, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gLinkAdultLeftHandHoldingHammerNearDL, "Equipment_HammerHandle5", equipmentHammerHandle.changedCvar, 36, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftHandHoldingHammerFarDL, "Equipment_HammerHandle6", equipmentHammerHandle.changedCvar, 36, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(equipmentHammerHandle.cvar, defaultColor); + PATCH_GFX(gGiHammerDL, "Equipment_HammerHandle1", equipmentHammerHandle.changedCvar, 84, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiHammerDL, "Equipment_HammerHandle2", equipmentHammerHandle.changedCvar, 85, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingHammerNearDL, "Equipment_HammerHandle5", equipmentHammerHandle.changedCvar, 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingHammerFarDL, "Equipment_HammerHandle6", equipmentHammerHandle.changedCvar, 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentChuFace = cosmeticOptions.at("Equipment_ChuFace"); - if (manualChange || CVar_GetS32(equipmentChuFace.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(equipmentChuFace.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {equipmentChuFace.defaultColor.x, equipmentChuFace.defaultColor.y, equipmentChuFace.defaultColor.z, equipmentChuFace.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(equipmentChuFace.cvar, defaultColor); - PATCH_GFX(gGiBombchuDL, "Equipment_ChuFace1", equipmentChuFace.changedCvar, 10, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBombchuDL, "Equipment_ChuFace2", equipmentChuFace.changedCvar, 12, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gBombchuDL, "Equipment_ChuFace3", equipmentChuFace.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(equipmentChuFace.cvar, defaultColor); + PATCH_GFX(gGiBombchuDL, "Equipment_ChuFace1", equipmentChuFace.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBombchuDL, "Equipment_ChuFace2", equipmentChuFace.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gBombchuDL, "Equipment_ChuFace3", equipmentChuFace.changedCvar, 2, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); if (manualChange) { - PATCH_GFX(gBombchuDL, "Equipment_ChuFace4", equipmentChuFace.changedCvar, 20, gsSPGrayscale(true)); - PATCH_GFX(gBombchuDL, "Equipment_ChuFace5", equipmentChuFace.changedCvar, 54, gsSPGrayscale(false)); + PATCH_GFX(gBombchuDL, "Equipment_ChuFace4", equipmentChuFace.changedCvar, 10, gsSPGrayscale(true)); + PATCH_GFX(gBombchuDL, "Equipment_ChuFace5", equipmentChuFace.changedCvar, 27, gsSPGrayscale(false)); } } static CosmeticOption& equipmentChuBody = cosmeticOptions.at("Equipment_ChuBody"); - if (manualChange || CVar_GetS32(equipmentChuBody.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(equipmentChuBody.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {equipmentChuBody.defaultColor.x, equipmentChuBody.defaultColor.y, equipmentChuBody.defaultColor.z, equipmentChuBody.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(equipmentChuBody.cvar, defaultColor); - PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody1", equipmentChuBody.changedCvar, 78, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody2", equipmentChuBody.changedCvar, 80, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody3", equipmentChuBody.changedCvar, 120, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody4", equipmentChuBody.changedCvar, 122, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gBombchuDL, "Equipment_ChuBody5", equipmentChuBody.changedCvar, 92, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(equipmentChuBody.cvar, defaultColor); + PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody1", equipmentChuBody.changedCvar, 39, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody2", equipmentChuBody.changedCvar, 40, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody3", equipmentChuBody.changedCvar, 60, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody4", equipmentChuBody.changedCvar, 61, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gBombchuDL, "Equipment_ChuBody5", equipmentChuBody.changedCvar, 46, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& consumableGreenRupee = cosmeticOptions.at("Consumable_GreenRupee"); - if (manualChange || CVar_GetS32(consumableGreenRupee.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(consumableGreenRupee.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {consumableGreenRupee.defaultColor.x, consumableGreenRupee.defaultColor.y, consumableGreenRupee.defaultColor.z, consumableGreenRupee.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(consumableGreenRupee.cvar, defaultColor); - PATCH_GFX(gGiGreenRupeeInnerColorDL, "Consumable_GreenRupee1", consumableGreenRupee.changedCvar, 6, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiGreenRupeeInnerColorDL, "Consumable_GreenRupee2", consumableGreenRupee.changedCvar, 8, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); - PATCH_GFX(gGiGreenRupeeOuterColorDL, "Consumable_GreenRupee3", consumableGreenRupee.changedCvar, 6, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); - PATCH_GFX(gGiGreenRupeeOuterColorDL, "Consumable_GreenRupee4", consumableGreenRupee.changedCvar, 8, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); + Color_RGBA8 color = CVarGetColor(consumableGreenRupee.cvar, defaultColor); + PATCH_GFX(gGiGreenRupeeInnerColorDL, "Consumable_GreenRupee1", consumableGreenRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGreenRupeeInnerColorDL, "Consumable_GreenRupee2", consumableGreenRupee.changedCvar, 4, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); + PATCH_GFX(gGiGreenRupeeOuterColorDL, "Consumable_GreenRupee3", consumableGreenRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); + PATCH_GFX(gGiGreenRupeeOuterColorDL, "Consumable_GreenRupee4", consumableGreenRupee.changedCvar, 4, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); } static CosmeticOption& consumableBlueRupee = cosmeticOptions.at("Consumable_BlueRupee"); - if (manualChange || CVar_GetS32(consumableBlueRupee.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(consumableBlueRupee.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {consumableBlueRupee.defaultColor.x, consumableBlueRupee.defaultColor.y, consumableBlueRupee.defaultColor.z, consumableBlueRupee.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(consumableBlueRupee.cvar, defaultColor); - PATCH_GFX(gGiBlueRupeeInnerColorDL, "Consumable_BlueRupee1", consumableBlueRupee.changedCvar, 6, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBlueRupeeInnerColorDL, "Consumable_BlueRupee2", consumableBlueRupee.changedCvar, 8, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); - PATCH_GFX(gGiBlueRupeeOuterColorDL, "Consumable_BlueRupee3", consumableBlueRupee.changedCvar, 6, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); - PATCH_GFX(gGiBlueRupeeOuterColorDL, "Consumable_BlueRupee4", consumableBlueRupee.changedCvar, 8, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); + Color_RGBA8 color = CVarGetColor(consumableBlueRupee.cvar, defaultColor); + PATCH_GFX(gGiBlueRupeeInnerColorDL, "Consumable_BlueRupee1", consumableBlueRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBlueRupeeInnerColorDL, "Consumable_BlueRupee2", consumableBlueRupee.changedCvar, 4, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); + PATCH_GFX(gGiBlueRupeeOuterColorDL, "Consumable_BlueRupee3", consumableBlueRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); + PATCH_GFX(gGiBlueRupeeOuterColorDL, "Consumable_BlueRupee4", consumableBlueRupee.changedCvar, 4, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); } static CosmeticOption& consumableRedRupee = cosmeticOptions.at("Consumable_RedRupee"); - if (manualChange || CVar_GetS32(consumableRedRupee.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(consumableRedRupee.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {consumableRedRupee.defaultColor.x, consumableRedRupee.defaultColor.y, consumableRedRupee.defaultColor.z, consumableRedRupee.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(consumableRedRupee.cvar, defaultColor); - PATCH_GFX(gGiRedRupeeInnerColorDL, "Consumable_RedRupee1", consumableRedRupee.changedCvar, 6, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiRedRupeeInnerColorDL, "Consumable_RedRupee2", consumableRedRupee.changedCvar, 8, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); - PATCH_GFX(gGiRedRupeeOuterColorDL, "Consumable_RedRupee3", consumableRedRupee.changedCvar, 6, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); - PATCH_GFX(gGiRedRupeeOuterColorDL, "Consumable_RedRupee4", consumableRedRupee.changedCvar, 8, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); + Color_RGBA8 color = CVarGetColor(consumableRedRupee.cvar, defaultColor); + PATCH_GFX(gGiRedRupeeInnerColorDL, "Consumable_RedRupee1", consumableRedRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiRedRupeeInnerColorDL, "Consumable_RedRupee2", consumableRedRupee.changedCvar, 4, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); + PATCH_GFX(gGiRedRupeeOuterColorDL, "Consumable_RedRupee3", consumableRedRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); + PATCH_GFX(gGiRedRupeeOuterColorDL, "Consumable_RedRupee4", consumableRedRupee.changedCvar, 4, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); } static CosmeticOption& consumablePurpleRupee = cosmeticOptions.at("Consumable_PurpleRupee"); - if (manualChange || CVar_GetS32(consumablePurpleRupee.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(consumablePurpleRupee.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {consumablePurpleRupee.defaultColor.x, consumablePurpleRupee.defaultColor.y, consumablePurpleRupee.defaultColor.z, consumablePurpleRupee.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(consumablePurpleRupee.cvar, defaultColor); - PATCH_GFX(gGiPurpleRupeeInnerColorDL, "Consumable_PurpleRupee1", consumablePurpleRupee.changedCvar, 6, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiPurpleRupeeInnerColorDL, "Consumable_PurpleRupee2", consumablePurpleRupee.changedCvar, 8, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); - PATCH_GFX(gGiPurpleRupeeOuterColorDL, "Consumable_PurpleRupee3", consumablePurpleRupee.changedCvar, 6, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); - PATCH_GFX(gGiPurpleRupeeOuterColorDL, "Consumable_PurpleRupee4", consumablePurpleRupee.changedCvar, 8, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); + Color_RGBA8 color = CVarGetColor(consumablePurpleRupee.cvar, defaultColor); + PATCH_GFX(gGiPurpleRupeeInnerColorDL, "Consumable_PurpleRupee1", consumablePurpleRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiPurpleRupeeInnerColorDL, "Consumable_PurpleRupee2", consumablePurpleRupee.changedCvar, 4, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); + PATCH_GFX(gGiPurpleRupeeOuterColorDL, "Consumable_PurpleRupee3", consumablePurpleRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); + PATCH_GFX(gGiPurpleRupeeOuterColorDL, "Consumable_PurpleRupee4", consumablePurpleRupee.changedCvar, 4, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); } static CosmeticOption& consumableGoldRupee = cosmeticOptions.at("Consumable_GoldRupee"); - if (manualChange || CVar_GetS32(consumableGoldRupee.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(consumableGoldRupee.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {consumableGoldRupee.defaultColor.x, consumableGoldRupee.defaultColor.y, consumableGoldRupee.defaultColor.z, consumableGoldRupee.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(consumableGoldRupee.cvar, defaultColor); - PATCH_GFX(gGiGoldRupeeInnerColorDL, "Consumable_GoldRupee1", consumableGoldRupee.changedCvar, 6, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiGoldRupeeInnerColorDL, "Consumable_GoldRupee2", consumableGoldRupee.changedCvar, 8, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); - PATCH_GFX(gGiGoldRupeeOuterColorDL, "Consumable_GoldRupee3", consumableGoldRupee.changedCvar, 6, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); - PATCH_GFX(gGiGoldRupeeOuterColorDL, "Consumable_GoldRupee4", consumableGoldRupee.changedCvar, 8, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); + Color_RGBA8 color = CVarGetColor(consumableGoldRupee.cvar, defaultColor); + PATCH_GFX(gGiGoldRupeeInnerColorDL, "Consumable_GoldRupee1", consumableGoldRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGoldRupeeInnerColorDL, "Consumable_GoldRupee2", consumableGoldRupee.changedCvar, 4, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); + PATCH_GFX(gGiGoldRupeeOuterColorDL, "Consumable_GoldRupee3", consumableGoldRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); + PATCH_GFX(gGiGoldRupeeOuterColorDL, "Consumable_GoldRupee4", consumableGoldRupee.changedCvar, 4, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); } static CosmeticOption& consumableHearts = cosmeticOptions.at("Consumable_Hearts"); - if (manualChange || CVar_GetS32(consumableHearts.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(consumableHearts.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {consumableHearts.defaultColor.x, consumableHearts.defaultColor.y, consumableHearts.defaultColor.z, consumableHearts.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(consumableHearts.cvar, defaultColor); + Color_RGBA8 color = CVarGetColor(consumableHearts.cvar, defaultColor); // PATCH_GFX(gGiRecoveryHeartDL, "Consumable_Hearts1", consumableHearts.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); // PATCH_GFX(gGiRecoveryHeartDL, "Consumable_Hearts2", consumableHearts.changedCvar, 26, gsSPGrayscale(true)); // PATCH_GFX(gGiRecoveryHeartDL, "Consumable_Hearts3", consumableHearts.changedCvar, 72, gsSPGrayscale(false)); // PATCH_GFX(gGiRecoveryHeartDL, "Consumable_Hearts4", consumableHearts.changedCvar, 74, gsSPEndDisplayList()); - PATCH_GFX(gGiHeartPieceDL, "Consumable_Hearts5", consumableHearts.changedCvar, 4, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiHeartPieceDL, "Consumable_Hearts6", consumableHearts.changedCvar, 12, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiHeartContainerDL, "Consumable_Hearts7", consumableHearts.changedCvar, 4, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiHeartContainerDL, "Consumable_Hearts8", consumableHearts.changedCvar, 12, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiRedPotColorDL, "Consumable_Hearts9", consumableHearts.changedCvar, 6, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiRedPotColorDL, "Consumable_Hearts10", consumableHearts.changedCvar, 8, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiHeartPieceDL, "Consumable_Hearts5", consumableHearts.changedCvar, 2, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiHeartPieceDL, "Consumable_Hearts6", consumableHearts.changedCvar, 6, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiHeartContainerDL, "Consumable_Hearts7", consumableHearts.changedCvar, 2, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiHeartContainerDL, "Consumable_Hearts8", consumableHearts.changedCvar, 6, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiRedPotColorDL, "Consumable_Hearts9", consumableHearts.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiRedPotColorDL, "Consumable_Hearts10", consumableHearts.changedCvar, 4, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); } static CosmeticOption& consumableMagic = cosmeticOptions.at("Consumable_Magic"); - if (manualChange || CVar_GetS32(consumableMagic.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(consumableMagic.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {consumableMagic.defaultColor.x, consumableMagic.defaultColor.y, consumableMagic.defaultColor.z, consumableMagic.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(consumableMagic.cvar, defaultColor); - PATCH_GFX(gGiMagicJarSmallDL, "Consumable_Magic1", consumableMagic.changedCvar, 62, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiMagicJarSmallDL, "Consumable_Magic2", consumableMagic.changedCvar, 64, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiMagicJarLargeDL, "Consumable_Magic3", consumableMagic.changedCvar, 62, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiMagicJarLargeDL, "Consumable_Magic4", consumableMagic.changedCvar, 64, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiGreenPotColorDL, "Consumable_Magic5", consumableMagic.changedCvar, 6, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiGreenPotColorDL, "Consumable_Magic6", consumableMagic.changedCvar, 8, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + Color_RGBA8 color = CVarGetColor(consumableMagic.cvar, defaultColor); + PATCH_GFX(gGiMagicJarSmallDL, "Consumable_Magic1", consumableMagic.changedCvar, 31, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiMagicJarSmallDL, "Consumable_Magic2", consumableMagic.changedCvar, 32, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiMagicJarLargeDL, "Consumable_Magic3", consumableMagic.changedCvar, 31, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiMagicJarLargeDL, "Consumable_Magic4", consumableMagic.changedCvar, 32, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiGreenPotColorDL, "Consumable_Magic5", consumableMagic.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGreenPotColorDL, "Consumable_Magic6", consumableMagic.changedCvar, 4, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); } static CosmeticOption& npcGoldenSkulltula = cosmeticOptions.at("NPC_GoldenSkulltula"); - if (manualChange || CVar_GetS32(npcGoldenSkulltula.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(npcGoldenSkulltula.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {npcGoldenSkulltula.defaultColor.x, npcGoldenSkulltula.defaultColor.y, npcGoldenSkulltula.defaultColor.z, npcGoldenSkulltula.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(npcGoldenSkulltula.cvar, defaultColor); - PATCH_GFX(gGiSkulltulaTokenDL, "NPC_GoldenSkulltula1", npcGoldenSkulltula.changedCvar, 10, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiSkulltulaTokenDL, "NPC_GoldenSkulltula2", npcGoldenSkulltula.changedCvar, 12, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiSkulltulaTokenFlameDL, "NPC_GoldenSkulltula3", npcGoldenSkulltula.changedCvar, 64, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiSkulltulaTokenFlameDL, "NPC_GoldenSkulltula4", npcGoldenSkulltula.changedCvar, 66, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(object_st_DL_003FB0, "NPC_GoldenSkulltula5", npcGoldenSkulltula.changedCvar, 236, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(object_st_DL_003FB0, "NPC_GoldenSkulltula6", npcGoldenSkulltula.changedCvar, 238, gsDPSetEnvColor(color.r / 4, color.g / 4, color.b / 4, 255)); + Color_RGBA8 color = CVarGetColor(npcGoldenSkulltula.cvar, defaultColor); + PATCH_GFX(gGiSkulltulaTokenDL, "NPC_GoldenSkulltula1", npcGoldenSkulltula.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiSkulltulaTokenDL, "NPC_GoldenSkulltula2", npcGoldenSkulltula.changedCvar, 6, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiSkulltulaTokenFlameDL, "NPC_GoldenSkulltula3", npcGoldenSkulltula.changedCvar, 32, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiSkulltulaTokenFlameDL, "NPC_GoldenSkulltula4", npcGoldenSkulltula.changedCvar, 33, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(object_st_DL_003FB0, "NPC_GoldenSkulltula5", npcGoldenSkulltula.changedCvar, 118, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(object_st_DL_003FB0, "NPC_GoldenSkulltula6", npcGoldenSkulltula.changedCvar, 119, gsDPSetEnvColor(color.r / 4, color.g / 4, color.b / 4, 255)); } static CosmeticOption& npcGerudo = cosmeticOptions.at("NPC_Gerudo"); - if (manualChange || CVar_GetS32(npcGerudo.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(npcGerudo.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {npcGerudo.defaultColor.x, npcGerudo.defaultColor.y, npcGerudo.defaultColor.z, npcGerudo.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(npcGerudo.cvar, defaultColor); - PATCH_GFX(gGerudoPurpleTorsoDL, "NPC_Gerudo1", npcGerudo.changedCvar, 278, gsDPSetEnvColor( color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleRightThighDL, "NPC_Gerudo2", npcGerudo.changedCvar, 22, gsDPSetEnvColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleLeftThighDL, "NPC_Gerudo3", npcGerudo.changedCvar, 22, gsDPSetEnvColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleVeilDL, "NPC_Gerudo4", npcGerudo.changedCvar, 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleLeftShinDL, "NPC_Gerudo5", npcGerudo.changedCvar, 22, gsDPSetEnvColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleRightShinDL, "NPC_Gerudo6", npcGerudo.changedCvar, 22, gsDPSetEnvColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleLeftHandDL, "NPC_Gerudo7", npcGerudo.changedCvar, 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleRightHandDL, "NPC_Gerudo8", npcGerudo.changedCvar, 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(npcGerudo.cvar, defaultColor); + PATCH_GFX(gGerudoPurpleTorsoDL, "NPC_Gerudo1", npcGerudo.changedCvar, 139, gsDPSetEnvColor( color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleRightThighDL, "NPC_Gerudo2", npcGerudo.changedCvar, 11, gsDPSetEnvColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleLeftThighDL, "NPC_Gerudo3", npcGerudo.changedCvar, 11, gsDPSetEnvColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleVeilDL, "NPC_Gerudo4", npcGerudo.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleLeftShinDL, "NPC_Gerudo5", npcGerudo.changedCvar, 11, gsDPSetEnvColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleRightShinDL, "NPC_Gerudo6", npcGerudo.changedCvar, 11, gsDPSetEnvColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleLeftHandDL, "NPC_Gerudo7", npcGerudo.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleRightHandDL, "NPC_Gerudo8", npcGerudo.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& npcMetalTrap = cosmeticOptions.at("NPC_MetalTrap"); - if (manualChange || CVar_GetS32(npcMetalTrap.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(npcMetalTrap.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {npcMetalTrap.defaultColor.x, npcMetalTrap.defaultColor.y, npcMetalTrap.defaultColor.z, npcMetalTrap.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(npcMetalTrap.cvar, defaultColor); - PATCH_GFX(gSlidingBladeTrapDL, "NPC_MetalTrap1", npcMetalTrap.changedCvar, 118, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + Color_RGBA8 color = CVarGetColor(npcMetalTrap.cvar, defaultColor); + PATCH_GFX(gSlidingBladeTrapDL, "NPC_MetalTrap1", npcMetalTrap.changedCvar, 59, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& n64LogoRed = cosmeticOptions.at("Title_N64LogoRed"); - if (manualChange || CVar_GetS32(n64LogoRed.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(n64LogoRed.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {n64LogoRed.defaultColor.x, n64LogoRed.defaultColor.y, n64LogoRed.defaultColor.z, n64LogoRed.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(n64LogoRed.cvar, defaultColor); - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoRed1", n64LogoRed.changedCvar, 34, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoRed2", n64LogoRed.changedCvar, 36, gsDPSetEnvColor(color.r, color.g, color.b, 128)); + Color_RGBA8 color = CVarGetColor(n64LogoRed.cvar, defaultColor); + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoRed1", n64LogoRed.changedCvar, 17, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoRed2", n64LogoRed.changedCvar, 18, gsDPSetEnvColor(color.r, color.g, color.b, 128)); } static CosmeticOption& n64LogoBlue = cosmeticOptions.at("Title_N64LogoBlue"); - if (manualChange || CVar_GetS32(n64LogoBlue.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(n64LogoBlue.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {n64LogoBlue.defaultColor.x, n64LogoBlue.defaultColor.y, n64LogoBlue.defaultColor.z, n64LogoBlue.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(n64LogoBlue.cvar, defaultColor); - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoBlue1", n64LogoBlue.changedCvar, 58, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoBlue2", n64LogoBlue.changedCvar, 60, gsDPSetEnvColor(color.r, color.g, color.b, 128)); + Color_RGBA8 color = CVarGetColor(n64LogoBlue.cvar, defaultColor); + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoBlue1", n64LogoBlue.changedCvar, 29, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoBlue2", n64LogoBlue.changedCvar, 30, gsDPSetEnvColor(color.r, color.g, color.b, 128)); } static CosmeticOption& n64LogoGreen = cosmeticOptions.at("Title_N64LogoGreen"); - if (manualChange || CVar_GetS32(n64LogoGreen.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(n64LogoGreen.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {n64LogoGreen.defaultColor.x, n64LogoGreen.defaultColor.y, n64LogoGreen.defaultColor.z, n64LogoGreen.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(n64LogoGreen.cvar, defaultColor); - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoGreen1", n64LogoGreen.changedCvar, 112, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoGreen2", n64LogoGreen.changedCvar, 114, gsDPSetEnvColor(color.r, color.g, color.b, 128)); + Color_RGBA8 color = CVarGetColor(n64LogoGreen.cvar, defaultColor); + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoGreen1", n64LogoGreen.changedCvar, 56, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoGreen2", n64LogoGreen.changedCvar, 57, gsDPSetEnvColor(color.r, color.g, color.b, 128)); } static CosmeticOption& n64LogoYellow = cosmeticOptions.at("Title_N64LogoYellow"); - if (manualChange || CVar_GetS32(n64LogoYellow.rainbowCvar, 0)) { + if (manualChange || CVarGetInteger(n64LogoYellow.rainbowCvar, 0)) { static Color_RGBA8 defaultColor = {n64LogoYellow.defaultColor.x, n64LogoYellow.defaultColor.y, n64LogoYellow.defaultColor.z, n64LogoYellow.defaultColor.w}; - Color_RGBA8 color = CVar_GetRGBA(n64LogoYellow.cvar, defaultColor); - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoYellow1", n64LogoYellow.changedCvar, 162, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoYellow2", n64LogoYellow.changedCvar, 164, gsDPSetEnvColor(color.r, color.g, color.b, 128)); + Color_RGBA8 color = CVarGetColor(n64LogoYellow.cvar, defaultColor); + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoYellow1", n64LogoYellow.changedCvar, 81, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoYellow2", n64LogoYellow.changedCvar, 82, gsDPSetEnvColor(color.r, color.g, color.b, 128)); } if (gPlayState != nullptr) { - if (CVar_GetS32("gCosmetics.Link_BodyScale.Changed", 0)) { + if (CVarGetInteger("gCosmetics.Link_BodyScale.Changed", 0)) { static Player* player = GET_PLAYER(gPlayState); - float scale = CVar_GetFloat("gCosmetics.Link_BodyScale.Value", 0.01f); + float scale = CVarGetFloat("gCosmetics.Link_BodyScale.Value", 0.01f); player->actor.scale.x = scale; player->actor.scale.y = scale; player->actor.scale.z = scale; @@ -1139,7 +1139,7 @@ void Draw_Placements(){ ImGui::EndTable(); } } - if (CVar_GetS32("gVisualAgony",0) && ImGui::CollapsingHeader("Visual stone of agony position")) { + if (CVarGetInteger("gVisualAgony",0) && ImGui::CollapsingHeader("Visual stone of agony position")) { if (ImGui::BeginTable("tabledvisualstoneofagony", 1, FlagsTable)) { ImGui::TableSetupColumn("Visual stone of agony settings", FlagsCell, TablesCellsWidth); Table_InitHeader(false); @@ -1147,9 +1147,9 @@ void Draw_Placements(){ DrawPositionsRadioBoxes("gVSOA"); s16 Min_X_VSOA = 0; s16 Max_X_VSOA = ImGui::GetWindowViewport()->Size.x/2; - if(CVar_GetS32("gVSOAPosType",0) == 2){ + if(CVarGetInteger("gVSOAPosType",0) == 2){ Max_X_VSOA = 290; - } else if(CVar_GetS32("gVSOAPosType",0) == 4){ + } else if(CVarGetInteger("gVSOAPosType",0) == 4){ Min_X_VSOA = (ImGui::GetWindowViewport()->Size.x/2)*-1; } DrawPositionSlider("gVSOA", 0, ImGui::GetWindowViewport()->Size.y/2, Min_X_VSOA, Max_X_VSOA); @@ -1202,11 +1202,11 @@ void Draw_Placements(){ DrawPositionsRadioBoxes("gCBtnU"); s16 Min_X_CU = 0; s16 Max_X_CU = ImGui::GetWindowViewport()->Size.x/2; - if(CVar_GetS32("gCBtnUPosType",0) == 2){ + if(CVarGetInteger("gCBtnUPosType",0) == 2){ Max_X_CU = 294; - } else if(CVar_GetS32("gCBtnUPosType",0) == 3){ + } else if(CVarGetInteger("gCBtnUPosType",0) == 3){ Max_X_CU = ImGui::GetWindowViewport()->Size.x/2; - } else if(CVar_GetS32("gCBtnUPosType",0) == 4){ + } else if(CVarGetInteger("gCBtnUPosType",0) == 4){ Min_X_CU = (ImGui::GetWindowViewport()->Size.x/2)*-1; } DrawPositionSlider("gCBtnU", 0, ImGui::GetWindowViewport()->Size.y/2, Min_X_CU, Max_X_CU); @@ -1223,11 +1223,11 @@ void Draw_Placements(){ DrawPositionsRadioBoxes("gCBtnD"); s16 Min_X_CD = 0; s16 Max_X_CD = ImGui::GetWindowViewport()->Size.x/2; - if(CVar_GetS32("gCBtnDPosType",0) == 2){ + if(CVarGetInteger("gCBtnDPosType",0) == 2){ Max_X_CD = 294; - } else if(CVar_GetS32("gCBtnDPosType",0) == 3){ + } else if(CVarGetInteger("gCBtnDPosType",0) == 3){ Max_X_CD = ImGui::GetWindowViewport()->Size.x/2; - } else if(CVar_GetS32("gCBtnDPosType",0) == 4){ + } else if(CVarGetInteger("gCBtnDPosType",0) == 4){ Min_X_CD = (ImGui::GetWindowViewport()->Size.x/2)*-1; } DrawPositionSlider("gCBtnD", 0, ImGui::GetWindowViewport()->Size.y/2, Min_X_CD, Max_X_CD); @@ -1244,11 +1244,11 @@ void Draw_Placements(){ DrawPositionsRadioBoxes("gCBtnL"); s16 Min_X_CL = 0; s16 Max_X_CL = ImGui::GetWindowViewport()->Size.x/2; - if(CVar_GetS32("gCBtnLPosType",0) == 2){ + if(CVarGetInteger("gCBtnLPosType",0) == 2){ Max_X_CL = 294; - } else if(CVar_GetS32("gCBtnLPosType",0) == 3){ + } else if(CVarGetInteger("gCBtnLPosType",0) == 3){ Max_X_CL = ImGui::GetWindowViewport()->Size.x/2; - } else if(CVar_GetS32("gCBtnLPosType",0) == 4){ + } else if(CVarGetInteger("gCBtnLPosType",0) == 4){ Min_X_CL = (ImGui::GetWindowViewport()->Size.x/2)*-1; } DrawPositionSlider("gCBtnL", 0, ImGui::GetWindowViewport()->Size.y/2, Min_X_CL, Max_X_CL); @@ -1265,11 +1265,11 @@ void Draw_Placements(){ DrawPositionsRadioBoxes("gCBtnR"); s16 Min_X_CR = 0; s16 Max_X_CR = ImGui::GetWindowViewport()->Size.x/2; - if(CVar_GetS32("gCBtnRPosType",0) == 2){ + if(CVarGetInteger("gCBtnRPosType",0) == 2){ Max_X_CR = 294; - } else if(CVar_GetS32("gCBtnRPosType",0) == 3){ + } else if(CVarGetInteger("gCBtnRPosType",0) == 3){ Max_X_CR = ImGui::GetWindowViewport()->Size.x/2; - } else if(CVar_GetS32("gCBtnRPosType",0) == 4){ + } else if(CVarGetInteger("gCBtnRPosType",0) == 4){ Min_X_CR = (ImGui::GetWindowViewport()->Size.x/2)*-1; } DrawPositionSlider("gCBtnR", 0, ImGui::GetWindowViewport()->Size.y/2, Min_X_CR, Max_X_CR); @@ -1278,7 +1278,7 @@ void Draw_Placements(){ ImGui::EndTable(); } } - if (CVar_GetS32("gDpadEquips",0) && ImGui::CollapsingHeader("DPad items position")) { + if (CVarGetInteger("gDpadEquips",0) && ImGui::CollapsingHeader("DPad items position")) { if (ImGui::BeginTable("tabledpaditems", 1, FlagsTable)) { ImGui::TableSetupColumn("DPad items settings", FlagsCell, TablesCellsWidth); Table_InitHeader(false); @@ -1286,9 +1286,9 @@ void Draw_Placements(){ DrawPositionsRadioBoxes("gDPad"); s16 Min_X_Dpad = 0; s16 Max_X_Dpad = ImGui::GetWindowViewport()->Size.x/2; - if(CVar_GetS32("gDPadPosType",0) == 2){ + if(CVarGetInteger("gDPadPosType",0) == 2){ Max_X_Dpad = 290; - } else if(CVar_GetS32("gDPadPosType",0) == 4){ + } else if(CVarGetInteger("gDPadPosType",0) == 4){ Min_X_Dpad = (ImGui::GetWindowViewport()->Size.x/2)*-1; } DrawPositionSlider("gDPad", 0, ImGui::GetWindowViewport()->Size.y/2, Min_X_Dpad, Max_X_Dpad); @@ -1396,18 +1396,18 @@ void Draw_Placements(){ } void DrawSillyTab() { - if (CVar_GetS32("gLetItSnow", 0)) { + if (CVarGetInteger("gLetItSnow", 0)) { if (UIWidgets::EnhancementCheckbox("Let It Snow", "gLetItSnow")) { SohImGui::RequestCvarSaveOnNextTick(); } } if (UIWidgets::EnhancementSliderFloat("Link Body Scale: %f", "##Link_BodyScale", "gCosmetics.Link_BodyScale.Value", 0.001f, 0.025f, "", 0.01f, false)) { - CVar_SetS32("gCosmetics.Link_BodyScale.Changed", 1); + CVarSetInteger("gCosmetics.Link_BodyScale.Changed", 1); } ImGui::SameLine(); if (ImGui::Button("Reset##Link_BodyScale")) { - CVar_Clear("gCosmetics.Link_BodyScale.Value"); - CVar_Clear("gCosmetics.Link_BodyScale.Changed"); + CVarClear("gCosmetics.Link_BodyScale.Value"); + CVarClear("gCosmetics.Link_BodyScale.Changed"); SohImGui::RequestCvarSaveOnNextTick(); static Player* player = GET_PLAYER(gPlayState); player->actor.scale.x = 0.01f; @@ -1415,67 +1415,67 @@ void DrawSillyTab() { player->actor.scale.z = 0.01f; } if (UIWidgets::EnhancementSliderFloat("Link Head Scale: %f", "##Link_HeadScale", "gCosmetics.Link_HeadScale.Value", 0.4f, 4.0f, "", 1.0f, false)) { - CVar_SetS32("gCosmetics.Link_HeadScale.Changed", 1); + CVarSetInteger("gCosmetics.Link_HeadScale.Changed", 1); } ImGui::SameLine(); if (ImGui::Button("Reset##Link_HeadScale")) { - CVar_Clear("gCosmetics.Link_HeadScale.Value"); - CVar_Clear("gCosmetics.Link_HeadScale.Changed"); + CVarClear("gCosmetics.Link_HeadScale.Value"); + CVarClear("gCosmetics.Link_HeadScale.Changed"); SohImGui::RequestCvarSaveOnNextTick(); } if (UIWidgets::EnhancementSliderFloat("Link Sword Scale: %f", "##Link_SwordScale", "gCosmetics.Link_SwordScale.Value", 1.0f, 2.5f, "", 1.0f, false)) { - CVar_SetS32("gCosmetics.Link_SwordScale.Changed", 1); + CVarSetInteger("gCosmetics.Link_SwordScale.Changed", 1); } ImGui::SameLine(); if (ImGui::Button("Reset##Link_SwordScale")) { - CVar_Clear("gCosmetics.Link_SwordScale.Value"); - CVar_Clear("gCosmetics.Link_SwordScale.Changed"); + CVarClear("gCosmetics.Link_SwordScale.Value"); + CVarClear("gCosmetics.Link_SwordScale.Changed"); SohImGui::RequestCvarSaveOnNextTick(); } UIWidgets::EnhancementSliderFloat("Bunny Hood Length: %f", "##BunnyHood_EarLength", "gCosmetics.BunnyHood_EarLength", -300.0f, 1000.0f, "", 0.0f, false); ImGui::SameLine(); if (ImGui::Button("Reset##BunnyHood_EarLength")) { - CVar_Clear("gCosmetics.BunnyHood_EarLength"); + CVarClear("gCosmetics.BunnyHood_EarLength"); SohImGui::RequestCvarSaveOnNextTick(); } UIWidgets::EnhancementSliderFloat("Bunny Hood Spread: %f", "##BunnyHood_EarSpread", "gCosmetics.BunnyHood_EarSpread", -300.0f, 500.0f, "", 0.0f, false); ImGui::SameLine(); if (ImGui::Button("Reset##BunnyHood_EarSpread")) { - CVar_Clear("gCosmetics.BunnyHood_EarSpread"); + CVarClear("gCosmetics.BunnyHood_EarSpread"); SohImGui::RequestCvarSaveOnNextTick(); } UIWidgets::EnhancementSliderFloat("Goron Neck Length: %f", "##Goron_NeckLength", "gCosmetics.Goron_NeckLength", 0.0f, 1000.0f, "", 0.0f, false); ImGui::SameLine(); if (ImGui::Button("Reset##Goron_NeckLength")) { - CVar_Clear("gCosmetics.Goron_NeckLength"); + CVarClear("gCosmetics.Goron_NeckLength"); SohImGui::RequestCvarSaveOnNextTick(); } UIWidgets::EnhancementCheckbox("Unfix Goron Spin", "gUnfixGoronSpin"); UIWidgets::EnhancementSliderFloat("Fairies Size: %f", "##Fairies_Size", "gCosmetics.Fairies_Size", 0.25f, 5.0f, "", 1.0f, false); ImGui::SameLine(); if (ImGui::Button("Reset##Fairies_Size")) { - CVar_Clear("gCosmetics.Fairies_Size"); + CVarClear("gCosmetics.Fairies_Size"); SohImGui::RequestCvarSaveOnNextTick(); } UIWidgets::EnhancementSliderFloat("N64 Logo Spin Speed: %f", "##N64Logo_SpinSpeed", "gCosmetics.N64Logo_SpinSpeed", 0.25f, 5.0f, "", 1.0f, false); ImGui::SameLine(); if (ImGui::Button("Reset##N64Logo_SpinSpeed")) { - CVar_Clear("gCosmetics.N64Logo_SpinSpeed"); + CVarClear("gCosmetics.N64Logo_SpinSpeed"); SohImGui::RequestCvarSaveOnNextTick(); } UIWidgets::EnhancementSliderFloat("Moon Size: %f", "##Moon_Size", "gCosmetics.Moon_Size", 0.5f, 2.0f, "", 1.0f, false); ImGui::SameLine(); if (ImGui::Button("Reset##Moon_Size")) { - CVar_Clear("gCosmetics.Moon_Size"); + CVarClear("gCosmetics.Moon_Size"); SohImGui::RequestCvarSaveOnNextTick(); } if (UIWidgets::EnhancementSliderFloat("Kak Windmill Speed: %f", "##Kak_Windmill_Speed", "gCosmetics.Kak_Windmill_Speed.Value", 100.0f, 6000.0f, "", 100.0f, false)) { - CVar_SetS32("gCosmetics.Kak_Windmill_Speed.Changed", 1); + CVarSetInteger("gCosmetics.Kak_Windmill_Speed.Changed", 1); } ImGui::SameLine(); if (ImGui::Button("Reset##Kak_Windmill_Speed")) { - CVar_Clear("gCosmetics.Kak_Windmill_Speed.Value"); - CVar_Clear("gCosmetics.Kak_Windmill_Speed.Changed"); + CVarClear("gCosmetics.Kak_Windmill_Speed.Value"); + CVarClear("gCosmetics.Kak_Windmill_Speed.Changed"); SohImGui::RequestCvarSaveOnNextTick(); } } @@ -1494,9 +1494,9 @@ void CopyMultipliedColor(CosmeticOption& cosmeticOptionSrc, CosmeticOption& cosm cosmeticOptionTarget.currentColor.z = newColor.b / 255.0; cosmeticOptionTarget.currentColor.w = newColor.a / 255.0; - CVar_SetRGBA(cosmeticOptionTarget.cvar, newColor); - CVar_SetS32((cosmeticOptionTarget.rainbowCvar), 0); - CVar_SetS32((cosmeticOptionTarget.changedCvar), 1); + CVarSetColor(cosmeticOptionTarget.cvar, newColor); + CVarSetInteger((cosmeticOptionTarget.rainbowCvar), 0); + CVarSetInteger((cosmeticOptionTarget.changedCvar), 1); } void RandomizeColor(CosmeticOption& cosmeticOption) { @@ -1511,9 +1511,9 @@ void RandomizeColor(CosmeticOption& cosmeticOption) { cosmeticOption.currentColor.z = newColor.b / 255.0; cosmeticOption.currentColor.w = newColor.a / 255.0; - CVar_SetRGBA(cosmeticOption.cvar, newColor); - CVar_SetS32((cosmeticOption.rainbowCvar), 0); - CVar_SetS32((cosmeticOption.changedCvar), 1); + CVarSetColor(cosmeticOption.cvar, newColor); + CVarSetInteger((cosmeticOption.rainbowCvar), 0); + CVarSetInteger((cosmeticOption.changedCvar), 1); // This bit is kind of experimental, not sure how I feel about it yet, but it allows for // advanced cosmetic options to be changed based on a non-advanced option. @@ -1543,15 +1543,15 @@ void ResetColor(CosmeticOption& cosmeticOption) { cosmeticOption.currentColor.z = defaultColor.b / 255.0; cosmeticOption.currentColor.w = defaultColor.a / 255.0; - CVar_Clear(cosmeticOption.changedCvar); - CVar_Clear(cosmeticOption.rainbowCvar); - CVar_Clear(cosmeticOption.lockedCvar); - CVar_Clear(cosmeticOption.cvar); - CVar_Clear((std::string(cosmeticOption.cvar) + ".R").c_str()); - CVar_Clear((std::string(cosmeticOption.cvar) + ".G").c_str()); - CVar_Clear((std::string(cosmeticOption.cvar) + ".B").c_str()); - CVar_Clear((std::string(cosmeticOption.cvar) + ".A").c_str()); - CVar_Clear((std::string(cosmeticOption.cvar) + ".Type").c_str()); + CVarClear(cosmeticOption.changedCvar); + CVarClear(cosmeticOption.rainbowCvar); + CVarClear(cosmeticOption.lockedCvar); + CVarClear(cosmeticOption.cvar); + CVarClear((std::string(cosmeticOption.cvar) + ".R").c_str()); + CVarClear((std::string(cosmeticOption.cvar) + ".G").c_str()); + CVarClear((std::string(cosmeticOption.cvar) + ".B").c_str()); + CVarClear((std::string(cosmeticOption.cvar) + ".A").c_str()); + CVarClear((std::string(cosmeticOption.cvar) + ".Type").c_str()); // This portion should match 1:1 the multiplied colors in `RandomizeColor()` if (cosmeticOption.label == "Bow Body") { @@ -1580,9 +1580,9 @@ void DrawCosmeticRow(CosmeticOption& cosmeticOption) { color.b = cosmeticOption.currentColor.z * 255.0; color.a = cosmeticOption.currentColor.w * 255.0; - CVar_SetRGBA(cosmeticOption.cvar, color); - CVar_SetS32((cosmeticOption.rainbowCvar), 0); - CVar_SetS32((cosmeticOption.changedCvar), 1); + CVarSetColor(cosmeticOption.cvar, color); + CVarSetInteger((cosmeticOption.rainbowCvar), 0); + CVarSetInteger((cosmeticOption.changedCvar), 1); ApplyOrResetCustomGfxPatches(); SohImGui::RequestCvarSaveOnNextTick(); } @@ -1595,20 +1595,20 @@ void DrawCosmeticRow(CosmeticOption& cosmeticOption) { SohImGui::RequestCvarSaveOnNextTick(); } ImGui::SameLine(); - bool isRainbow = (bool)CVar_GetS32((cosmeticOption.rainbowCvar), 0); + bool isRainbow = (bool)CVarGetInteger((cosmeticOption.rainbowCvar), 0); if (ImGui::Checkbox(("Rainbow##" + cosmeticOption.label).c_str(), &isRainbow)) { - CVar_SetS32((cosmeticOption.rainbowCvar), isRainbow); - CVar_SetS32((cosmeticOption.changedCvar), 1); + CVarSetInteger((cosmeticOption.rainbowCvar), isRainbow); + CVarSetInteger((cosmeticOption.changedCvar), 1); ApplyOrResetCustomGfxPatches(); SohImGui::RequestCvarSaveOnNextTick(); } ImGui::SameLine(); - bool isLocked = (bool)CVar_GetS32((cosmeticOption.lockedCvar), 0); + bool isLocked = (bool)CVarGetInteger((cosmeticOption.lockedCvar), 0); if (ImGui::Checkbox(("Locked##" + cosmeticOption.label).c_str(), &isLocked)) { - CVar_SetS32((cosmeticOption.lockedCvar), isLocked); + CVarSetInteger((cosmeticOption.lockedCvar), isLocked); SohImGui::RequestCvarSaveOnNextTick(); } - if (CVar_GetS32((cosmeticOption.changedCvar), 0)) { + if (CVarGetInteger((cosmeticOption.changedCvar), 0)) { ImGui::SameLine(); if (ImGui::Button(("Reset##" + cosmeticOption.label).c_str())) { ResetColor(cosmeticOption); @@ -1624,7 +1624,7 @@ void DrawCosmeticGroup(CosmeticGroup cosmeticGroup) { ImGui::SameLine((ImGui::CalcTextSize("Mirror Shield Mirror").x * 1.0f) + 60.0f); if (ImGui::Button(("Random##" + label).c_str())) { for (auto& [id, cosmeticOption] : cosmeticOptions) { - if (cosmeticOption.group == cosmeticGroup && (!cosmeticOption.advancedOption || CVar_GetS32("gCosmetics.AdvancedMode", 0)) && !CVar_GetS32(cosmeticOption.lockedCvar, 0)) { + if (cosmeticOption.group == cosmeticGroup && (!cosmeticOption.advancedOption || CVarGetInteger("gCosmetics.AdvancedMode", 0)) && !CVarGetInteger(cosmeticOption.lockedCvar, 0)) { RandomizeColor(cosmeticOption); } } @@ -1634,7 +1634,7 @@ void DrawCosmeticGroup(CosmeticGroup cosmeticGroup) { ImGui::SameLine(); if (ImGui::Button(("Reset##" + label).c_str())) { for (auto& [id, cosmeticOption] : cosmeticOptions) { - if (cosmeticOption.group == cosmeticGroup && !CVar_GetS32(cosmeticOption.lockedCvar, 0)) { + if (cosmeticOption.group == cosmeticGroup && !CVarGetInteger(cosmeticOption.lockedCvar, 0)) { ResetColor(cosmeticOption); } } @@ -1642,7 +1642,7 @@ void DrawCosmeticGroup(CosmeticGroup cosmeticGroup) { SohImGui::RequestCvarSaveOnNextTick(); } for (auto& [id, cosmeticOption] : cosmeticOptions) { - if (cosmeticOption.group == cosmeticGroup && (!cosmeticOption.advancedOption || CVar_GetS32("gCosmetics.AdvancedMode", 0))) { + if (cosmeticOption.group == cosmeticGroup && (!cosmeticOption.advancedOption || CVarGetInteger("gCosmetics.AdvancedMode", 0))) { DrawCosmeticRow(cosmeticOption); } } @@ -1655,7 +1655,7 @@ const char* colorSchemes[2] = { void DrawCosmeticsEditor(bool& open) { if (!open) { - CVar_SetS32("gCosmeticsEditorEnabled", 0); + CVarSetInteger("gCosmeticsEditorEnabled", 0); return; } @@ -1669,11 +1669,30 @@ void DrawCosmeticsEditor(bool& open) { ImGui::SameLine(); UIWidgets::EnhancementCombobox("gCosmetics.DefaultColorScheme", colorSchemes, 2, 0); UIWidgets::EnhancementCheckbox("Advanced Mode", "gCosmetics.AdvancedMode"); + if (CVarGetInteger("gCosmetics.AdvancedMode", 0)) { + if (ImGui::Button("Lock All Advanced", ImVec2(ImGui::GetContentRegionAvail().x / 2, 30.0f))) { + for (auto& [id, cosmeticOption] : cosmeticOptions) { + if (cosmeticOption.advancedOption) { + CVarSetInteger(cosmeticOption.lockedCvar, 1); + } + } + SohImGui::RequestCvarSaveOnNextTick(); + } + ImGui::SameLine(); + if (ImGui::Button("Unlock All Advanced", ImVec2(ImGui::GetContentRegionAvail().x, 30.0f))) { + for (auto& [id, cosmeticOption] : cosmeticOptions) { + if (cosmeticOption.advancedOption) { + CVarSetInteger(cosmeticOption.lockedCvar, 0); + } + } + SohImGui::RequestCvarSaveOnNextTick(); + } + } UIWidgets::EnhancementCheckbox("Sync Rainbow colors", "gCosmetics.RainbowSync"); UIWidgets::EnhancementSliderFloat("Rainbow Speed: %f", "##rainbowSpeed", "gCosmetics.RainbowSpeed", 0.03f, 1.0f, "", 0.6f, false); if (ImGui::Button("Randomize All", ImVec2(ImGui::GetContentRegionAvail().x / 2, 30.0f))) { for (auto& [id, cosmeticOption] : cosmeticOptions) { - if (!CVar_GetS32(cosmeticOption.lockedCvar, 0) && (!cosmeticOption.advancedOption || CVar_GetS32("gCosmetics.AdvancedMode", 0))) { + if (!CVarGetInteger(cosmeticOption.lockedCvar, 0) && (!cosmeticOption.advancedOption || CVarGetInteger("gCosmetics.AdvancedMode", 0))) { RandomizeColor(cosmeticOption); } } @@ -1683,7 +1702,7 @@ void DrawCosmeticsEditor(bool& open) { ImGui::SameLine(); if (ImGui::Button("Reset All", ImVec2(ImGui::GetContentRegionAvail().x, 30.0f))) { for (auto& [id, cosmeticOption] : cosmeticOptions) { - if (!CVar_GetS32(cosmeticOption.lockedCvar, 0)) { + if (!CVarGetInteger(cosmeticOption.lockedCvar, 0)) { ResetColor(cosmeticOption); } } @@ -1691,6 +1710,24 @@ void DrawCosmeticsEditor(bool& open) { SohImGui::RequestCvarSaveOnNextTick(); } + if (ImGui::Button("Lock All", ImVec2(ImGui::GetContentRegionAvail().x / 2, 30.0f))) { + for (auto& [id, cosmeticOption] : cosmeticOptions) { + if (!cosmeticOption.advancedOption || CVarGetInteger("gCosmetics.AdvancedMode", 0)) { + CVarSetInteger(cosmeticOption.lockedCvar, 1); + } + } + SohImGui::RequestCvarSaveOnNextTick(); + } + ImGui::SameLine(); + if (ImGui::Button("Unlock All", ImVec2(ImGui::GetContentRegionAvail().x, 30.0f))) { + for (auto& [id, cosmeticOption] : cosmeticOptions) { + if (!cosmeticOption.advancedOption || CVarGetInteger("gCosmetics.AdvancedMode", 0)) { + CVarSetInteger(cosmeticOption.lockedCvar, 0); + } + } + SohImGui::RequestCvarSaveOnNextTick(); + } + if (ImGui::BeginTabBar("CosmeticsContextTabBar", ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)) { if (ImGui::BeginTabItem("Link & Items")) { DrawCosmeticGroup(GROUP_LINK); @@ -1707,12 +1744,12 @@ void DrawCosmeticsEditor(bool& open) { DrawCosmeticGroup(GROUP_SPIN_ATTACK); DrawCosmeticGroup(GROUP_TRAILS); if (UIWidgets::EnhancementSliderInt("Trails Duration: %d", "##Trails_Duration", "gCosmetics.Trails_Duration.Value", 2, 20, "", 4, false)) { - CVar_SetS32("gCosmetics.Trails_Duration.Changed", 1); + CVarSetInteger("gCosmetics.Trails_Duration.Changed", 1); } ImGui::SameLine(); if (ImGui::Button("Reset##Trails_Duration")) { - CVar_Clear("gCosmetics.Trails_Duration.Value"); - CVar_Clear("gCosmetics.Trails_Duration.Changed"); + CVarClear("gCosmetics.Trails_Duration.Value"); + CVarClear("gCosmetics.Trails_Duration.Changed"); SohImGui::RequestCvarSaveOnNextTick(); } ImGui::EndTabItem(); @@ -1751,7 +1788,7 @@ void InitCosmeticsEditor() { // Convert the `current color` into the format that the ImGui color picker expects for (auto& [id, cosmeticOption] : cosmeticOptions) { Color_RGBA8 defaultColor = {cosmeticOption.defaultColor.x, cosmeticOption.defaultColor.y, cosmeticOption.defaultColor.z, cosmeticOption.defaultColor.w}; - Color_RGBA8 cvarColor = CVar_GetRGBA(cosmeticOption.cvar, defaultColor); + Color_RGBA8 cvarColor = CVarGetColor(cosmeticOption.cvar, defaultColor); cosmeticOption.currentColor.x = cvarColor.r / 255.0; cosmeticOption.currentColor.y = cvarColor.g / 255.0; diff --git a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.h b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.h index a74bf784e..e0e17929a 100644 --- a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.h +++ b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.h @@ -2,7 +2,7 @@ #include #define PATCH_GFX(path, name, cvar, index, instruction) \ - if (CVar_GetS32(cvar, 0)) { \ + if (CVarGetInteger(cvar, 0)) { \ ResourceMgr_PatchGfxByName(path, name, index, instruction); \ } else { \ ResourceMgr_UnpatchGfxByName(path, name); \ diff --git a/soh/soh/Enhancements/crowd-control/CrowdControl.cpp b/soh/soh/Enhancements/crowd-control/CrowdControl.cpp index 2f5b1a3ac..48af4c34e 100644 --- a/soh/soh/Enhancements/crowd-control/CrowdControl.cpp +++ b/soh/soh/Enhancements/crowd-control/CrowdControl.cpp @@ -1,7 +1,7 @@ #ifdef ENABLE_CROWD_CONTROL #include "CrowdControl.h" -#include +#include #include #include #include @@ -101,7 +101,7 @@ void CrowdControl::Disable() { void CrowdControl::ListenToServer() { while (isEnabled) { - while (!connected) { + while (!connected && isEnabled) { SPDLOG_TRACE("[CrowdControl] Attempting to make connection to server..."); tcpsock = SDLNet_TCP_Open(&ip); @@ -112,8 +112,10 @@ void CrowdControl::ListenToServer() { } } - auto socketSet = SDLNet_AllocSocketSet(1); - SDLNet_TCP_AddSocket(socketSet, tcpsock); + SDLNet_SocketSet socketSet = SDLNet_AllocSocketSet(1); + if (tcpsock) { + SDLNet_TCP_AddSocket(socketSet, tcpsock); + } // Listen to socket messages while (connected && tcpsock && isEnabled) { diff --git a/soh/soh/Enhancements/custom-message/CustomMessageTypes.h b/soh/soh/Enhancements/custom-message/CustomMessageTypes.h index 659b5fbb3..408d50304 100644 --- a/soh/soh/Enhancements/custom-message/CustomMessageTypes.h +++ b/soh/soh/Enhancements/custom-message/CustomMessageTypes.h @@ -1,6 +1,8 @@ #pragma once typedef enum { + TEXT_CURSED_SKULLTULA_PEOPLE = 0x22, + TEXT_DAMPES_DIARY = 0x5003, TEXT_BUY_BOMBCHU_10_PROMPT = 0x8C, TEXT_BUY_BOMBCHU_10_DESC = 0xBC, TEXT_GS_NO_FREEZE = 0xB4, diff --git a/soh/soh/Enhancements/debugconsole.cpp b/soh/soh/Enhancements/debugconsole.cpp index 1a1142633..cbb629d01 100644 --- a/soh/soh/Enhancements/debugconsole.cpp +++ b/soh/soh/Enhancements/debugconsole.cpp @@ -27,7 +27,7 @@ extern "C" { extern PlayState* gPlayState; } -#include +#include #include "overlays/actors/ovl_En_Niw/z_en_niw.h" #define CMD_REGISTER SohImGui::GetConsole()->AddCommand @@ -944,9 +944,9 @@ static bool SetCVarHandler(std::shared_ptr Console, const std::ve int vType = CheckVarType(args[2]); if (vType == VARTYPE_STRING) - CVar_SetString(args[1].c_str(), args[2].c_str()); + CVarSetString(args[1].c_str(), args[2].c_str()); else if (vType == VARTYPE_FLOAT) - CVar_SetFloat((char*)args[1].c_str(), std::stof(args[2])); + CVarSetFloat((char*)args[1].c_str(), std::stof(args[2])); else if (vType == VARTYPE_RGBA) { uint32_t val = std::stoul(&args[2].c_str()[1], nullptr, 16); @@ -955,12 +955,12 @@ static bool SetCVarHandler(std::shared_ptr Console, const std::ve clr.g = val >> 16; clr.b = val >> 8; clr.a = val & 0xFF; - CVar_SetRGBA((char*)args[1].c_str(), clr); + CVarSetColor((char*)args[1].c_str(), clr); } else - CVar_SetS32(args[1].c_str(), std::stoi(args[2])); + CVarSetInteger(args[1].c_str(), std::stoi(args[2])); - CVar_Save(); + CVarSave(); //SohImGui::GetConsole()->SendInfoMessage("[SOH] Updated player position to [ %.2f, %.2f, %.2f ]", pos.x, pos.y, pos.z); return CMD_SUCCESS; @@ -970,18 +970,18 @@ static bool GetCVarHandler(std::shared_ptr Console, const std::ve if (args.size() < 2) return CMD_FAILED; - CVar* cvar = CVar_Get(args[1].c_str()); + auto cvar = CVarGet(args[1].c_str()); if (cvar != nullptr) { - if (cvar->Type == CVarType::S32) - SohImGui::GetConsole()->SendInfoMessage("[SOH] Variable %s is %i", args[1].c_str(), cvar->value.ValueS32); - else if (cvar->Type == CVarType::Float) - SohImGui::GetConsole()->SendInfoMessage("[SOH] Variable %s is %f", args[1].c_str(), cvar->value.ValueFloat); - else if (cvar->Type == CVarType::String) - SohImGui::GetConsole()->SendInfoMessage("[SOH] Variable %s is %s", args[1].c_str(), cvar->value.ValueStr); - else if (cvar->Type == CVarType::RGBA) - SohImGui::GetConsole()->SendInfoMessage("[SOH] Variable %s is %08X", args[1].c_str(), cvar->value.ValueRGBA); + if (cvar->Type == Ship::ConsoleVariableType::Integer) + SohImGui::GetConsole()->SendInfoMessage("[SOH] Variable %s is %i", args[1].c_str(), cvar->Integer); + else if (cvar->Type == Ship::ConsoleVariableType::Float) + SohImGui::GetConsole()->SendInfoMessage("[SOH] Variable %s is %f", args[1].c_str(), cvar->Float); + else if (cvar->Type == Ship::ConsoleVariableType::String) + SohImGui::GetConsole()->SendInfoMessage("[SOH] Variable %s is %s", args[1].c_str(), cvar->String.c_str()); + else if (cvar->Type == Ship::ConsoleVariableType::Color) + SohImGui::GetConsole()->SendInfoMessage("[SOH] Variable %s is %08X", args[1].c_str(), cvar->Color); } else { @@ -1159,5 +1159,5 @@ void DebugConsole_Init(void) { CMD_REGISTER("cucco_storm", { CuccoStormHandler, "Cucco Storm" }); - CVar_Load(); + CVarLoad(); } diff --git a/soh/soh/Enhancements/debugger/actorViewer.cpp b/soh/soh/Enhancements/debugger/actorViewer.cpp index c6f99c930..31ce27236 100644 --- a/soh/soh/Enhancements/debugger/actorViewer.cpp +++ b/soh/soh/Enhancements/debugger/actorViewer.cpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include extern "C" { #include @@ -531,7 +531,7 @@ void PopulateActorDropdown(int i, std::vector& data) { void DrawActorViewer(bool& open) { if (!open) { - CVar_SetS32("gActorViewerEnabled", 0); + CVarSetInteger("gActorViewerEnabled", 0); return; } diff --git a/soh/soh/Enhancements/debugger/colViewer.cpp b/soh/soh/Enhancements/debugger/colViewer.cpp index f51fa2078..3cb81f0b7 100644 --- a/soh/soh/Enhancements/debugger/colViewer.cpp +++ b/soh/soh/Enhancements/debugger/colViewer.cpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include extern "C" { #include @@ -53,7 +53,7 @@ static std::vector sphereVtx; // Draws the ImGui window for the collision viewer void DrawColViewerWindow(bool& open) { if (!open) { - CVar_SetS32("gCollisionViewerEnabled", 0); + CVarSetInteger("gCollisionViewerEnabled", 0); return; } @@ -315,7 +315,7 @@ void InitGfx(std::vector& gfx, ColRenderSetting setting) { alpha = 0xFF; } - if (CVar_GetS32("gColViewerDecal", 0) != 0) { + if (CVarGetInteger("gColViewerDecal", 0) != 0) { rm |= ZMODE_DEC; } else if (setting == ColRenderSetting::Transparent) { rm |= ZMODE_XLU; @@ -327,7 +327,7 @@ void InitGfx(std::vector& gfx, ColRenderSetting setting) { gfx.push_back(gsDPSetCycleType(G_CYC_1CYCLE)); gfx.push_back(gsDPSetRenderMode(rm | blc1, rm | blc2)); - if (CVar_GetS32("gColViewerShaded", 0) != 0) { + if (CVarGetInteger("gColViewerShaded", 0) != 0) { gfx.push_back(gsDPSetCombineMode(G_CC_MODULATERGB_PRIM_ENVA, G_CC_MODULATERGB_PRIM_ENVA)); gfx.push_back(gsSPLoadGeometryMode(G_CULL_BACK | G_ZBUFFER | G_LIGHTING)); } else { @@ -340,9 +340,9 @@ void InitGfx(std::vector& gfx, ColRenderSetting setting) { // Draws a dynapoly structure (scenes or Bg Actors) void DrawDynapoly(std::vector& dl, CollisionHeader* col, int32_t bgId) { - uint32_t colorR = CVar_GetS32("gColViewerColorNormalR", 255); - uint32_t colorG = CVar_GetS32("gColViewerColorNormalG", 255); - uint32_t colorB = CVar_GetS32("gColViewerColorNormalB", 255); + uint32_t colorR = CVarGetInteger("gColViewerColorNormalR", 255); + uint32_t colorG = CVarGetInteger("gColViewerColorNormalG", 255); + uint32_t colorB = CVarGetInteger("gColViewerColorNormalB", 255); uint32_t colorA = 255; uint32_t lastColorR = colorR; @@ -359,35 +359,35 @@ void DrawDynapoly(std::vector& dl, CollisionHeader* col, int32_t bgId) { CollisionPoly* poly = &col->polyList[i]; if (SurfaceType_IsHookshotSurface(&gPlayState->colCtx, poly, bgId)) { - colorR = CVar_GetS32("gColViewerColorHookshotR", 128); - colorG = CVar_GetS32("gColViewerColorHookshotG", 128); - colorB = CVar_GetS32("gColViewerColorHookshotB", 255); + colorR = CVarGetInteger("gColViewerColorHookshotR", 128); + colorG = CVarGetInteger("gColViewerColorHookshotG", 128); + colorB = CVarGetInteger("gColViewerColorHookshotB", 255); } else if (func_80041D94(&gPlayState->colCtx, poly, bgId) > 0x01) { - colorR = CVar_GetS32("gColViewerColorInteractableR", 192); - colorG = CVar_GetS32("gColViewerColorInteractableG", 0); - colorB = CVar_GetS32("gColViewerColorInteractableB", 192); + colorR = CVarGetInteger("gColViewerColorInteractableR", 192); + colorG = CVarGetInteger("gColViewerColorInteractableG", 0); + colorB = CVarGetInteger("gColViewerColorInteractableB", 192); } else if (func_80041E80(&gPlayState->colCtx, poly, bgId) == 0x0C) { - colorR = CVar_GetS32("gColViewerColorVoidR", 255); - colorG = CVar_GetS32("gColViewerColorVoidG", 0); - colorB = CVar_GetS32("gColViewerColorVoidB", 0); + colorR = CVarGetInteger("gColViewerColorVoidR", 255); + colorG = CVarGetInteger("gColViewerColorVoidG", 0); + colorB = CVarGetInteger("gColViewerColorVoidB", 0); } else if (SurfaceType_GetSceneExitIndex(&gPlayState->colCtx, poly, bgId) || func_80041E80(&gPlayState->colCtx, poly, bgId) == 0x05) { - colorR = CVar_GetS32("gColViewerColorEntranceR", 0); - colorG = CVar_GetS32("gColViewerColorEntranceG", 255); - colorB = CVar_GetS32("gColViewerColorEntranceB", 0); + colorR = CVarGetInteger("gColViewerColorEntranceR", 0); + colorG = CVarGetInteger("gColViewerColorEntranceG", 255); + colorB = CVarGetInteger("gColViewerColorEntranceB", 0); } else if (func_80041D4C(&gPlayState->colCtx, poly, bgId) != 0 || SurfaceType_IsWallDamage(&gPlayState->colCtx, poly, bgId)) { - colorR = CVar_GetS32("gColViewerColorSpecialSurfaceR", 192); - colorG = CVar_GetS32("gColViewerColorSpecialSurfaceG", 255); - colorB = CVar_GetS32("gColViewerColorSpecialSurfaceB", 192); + colorR = CVarGetInteger("gColViewerColorSpecialSurfaceR", 192); + colorG = CVarGetInteger("gColViewerColorSpecialSurfaceG", 255); + colorB = CVarGetInteger("gColViewerColorSpecialSurfaceB", 192); } else if (SurfaceType_GetSlope(&gPlayState->colCtx, poly, bgId) == 0x01) { - colorR = CVar_GetS32("gColViewerColorSlopeR", 255); - colorG = CVar_GetS32("gColViewerColorSlopeG", 255); - colorB = CVar_GetS32("gColViewerColorSlopeB", 128); + colorR = CVarGetInteger("gColViewerColorSlopeR", 255); + colorG = CVarGetInteger("gColViewerColorSlopeG", 255); + colorB = CVarGetInteger("gColViewerColorSlopeB", 128); } else { - colorR = CVar_GetS32("gColViewerColorNormalR", 255); - colorG = CVar_GetS32("gColViewerColorNormalG", 255); - colorB = CVar_GetS32("gColViewerColorNormalB", 255); + colorR = CVarGetInteger("gColViewerColorNormalR", 255); + colorG = CVarGetInteger("gColViewerColorNormalG", 255); + colorB = CVarGetInteger("gColViewerColorNormalB", 255); } if (colorR != lastColorR || colorG != lastColorG || colorB != lastColorB) { @@ -435,9 +435,9 @@ void DrawDynapoly(std::vector& dl, CollisionHeader* col, int32_t bgId) { // Draws the scene void DrawSceneCollision() { - ColRenderSetting showSceneColSetting = (ColRenderSetting)CVar_GetS32("gColViewerScene", 0); + ColRenderSetting showSceneColSetting = (ColRenderSetting)CVarGetInteger("gColViewerScene", 0); - if (showSceneColSetting == ColRenderSetting::Disabled || CVar_GetS32("gColViewerEnabled", 0) == 0) { + if (showSceneColSetting == ColRenderSetting::Disabled || CVarGetInteger("gColViewerEnabled", 0) == 0) { return; } @@ -450,8 +450,8 @@ void DrawSceneCollision() { // Draws all Bg Actors void DrawBgActorCollision() { - ColRenderSetting showBgActorSetting = (ColRenderSetting)CVar_GetS32("gColViewerBgActors", 0); - if (showBgActorSetting == ColRenderSetting::Disabled || CVar_GetS32("gColViewerEnabled", 0) == 0) { + ColRenderSetting showBgActorSetting = (ColRenderSetting)CVarGetInteger("gColViewerBgActors", 0); + if (showBgActorSetting == ColRenderSetting::Disabled || CVarGetInteger("gColViewerEnabled", 0) == 0) { return; } @@ -575,8 +575,8 @@ void DrawColCheckList(std::vector& dl, Collider** objects, int32_t count) { // Draws all Col Check objects void DrawColCheckCollision() { - ColRenderSetting showColCheckSetting = (ColRenderSetting)CVar_GetS32("gColViewerColCheck", 0); - if (showColCheckSetting == ColRenderSetting::Disabled || CVar_GetS32("gColViewerEnabled", 0) == 0) { + ColRenderSetting showColCheckSetting = (ColRenderSetting)CVarGetInteger("gColViewerColCheck", 0); + if (showColCheckSetting == ColRenderSetting::Disabled || CVarGetInteger("gColViewerEnabled", 0) == 0) { return; } @@ -586,14 +586,14 @@ void DrawColCheckCollision() { CollisionCheckContext& col = gPlayState->colChkCtx; - dl.push_back(gsDPSetPrimColor(0, 0, CVar_GetS32("gColViewerColorOCR", 255), CVar_GetS32("gColViewerColorOCG", 255), - CVar_GetS32("gColViewerColorOCB", 255), 255)); + dl.push_back(gsDPSetPrimColor(0, 0, CVarGetInteger("gColViewerColorOCR", 255), CVarGetInteger("gColViewerColorOCG", 255), + CVarGetInteger("gColViewerColorOCB", 255), 255)); DrawColCheckList(dl, col.colOC, col.colOCCount); - dl.push_back(gsDPSetPrimColor(0, 0, CVar_GetS32("gColViewerColorACR", 0), CVar_GetS32("gColViewerColorACG", 0), - CVar_GetS32("gColViewerColorACB", 255), 255)); + dl.push_back(gsDPSetPrimColor(0, 0, CVarGetInteger("gColViewerColorACR", 0), CVarGetInteger("gColViewerColorACG", 0), + CVarGetInteger("gColViewerColorACB", 255), 255)); DrawColCheckList(dl, col.colAC, col.colACCount); - dl.push_back(gsDPSetPrimColor(0, 0, CVar_GetS32("gColViewerColorATR", 255), CVar_GetS32("gColViewerColorATG", 0), - CVar_GetS32("gColViewerColorATB", 0), 255)); + dl.push_back(gsDPSetPrimColor(0, 0, CVarGetInteger("gColViewerColorATR", 255), CVarGetInteger("gColViewerColorATG", 0), + CVarGetInteger("gColViewerColorATB", 0), 255)); DrawColCheckList(dl, col.colAT, col.colATCount); } @@ -628,8 +628,8 @@ extern "C" f32 zdWaterBoxMinY; // Draws all waterboxes void DrawWaterboxList() { - ColRenderSetting showWaterboxSetting = (ColRenderSetting)CVar_GetS32("gColViewerWaterbox", 0); - if (showWaterboxSetting == ColRenderSetting::Disabled || CVar_GetS32("gColViewerEnabled", 0) == 0) { + ColRenderSetting showWaterboxSetting = (ColRenderSetting)CVarGetInteger("gColViewerWaterbox", 0); + if (showWaterboxSetting == ColRenderSetting::Disabled || CVarGetInteger("gColViewerEnabled", 0) == 0) { return; } @@ -637,9 +637,9 @@ void DrawWaterboxList() { InitGfx(dl, showWaterboxSetting); dl.push_back(gsSPMatrix(&gMtxClear, G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH)); - dl.push_back(gsDPSetPrimColor(0, 0, CVar_GetS32("gColViewerColorWaterboxR", 0), - CVar_GetS32("gColViewerColorWaterboxG", 0), - CVar_GetS32("gColViewerColorWaterboxB", 255), 255)); + dl.push_back(gsDPSetPrimColor(0, 0, CVarGetInteger("gColViewerColorWaterboxR", 0), + CVarGetInteger("gColViewerColorWaterboxG", 0), + CVarGetInteger("gColViewerColorWaterboxB", 255), 255)); CollisionHeader* col = gPlayState->colCtx.colHeader; for (int32_t waterboxIndex = 0; waterboxIndex < col->numWaterBoxes; waterboxIndex++) { diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp index 9764246e8..7814a5c9f 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp @@ -9,7 +9,7 @@ #include #include #include -#include +#include extern "C" { #include @@ -1622,7 +1622,7 @@ void DrawPlayerTab() { ImGui::SameLine(); ImGui::InputScalar("C Right", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[3], &one, NULL); - if (CVar_GetS32("gDpadEquips", 0)) { + if (CVarGetInteger("gDpadEquips", 0)) { ImGui::NewLine(); ImGui::Text("Current D-pad Equips"); ImGui::InputScalar("D-pad Up ", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[4], &one, NULL); // Two spaces at the end for aligning, not elegant but it's working @@ -1663,7 +1663,7 @@ void DrawPlayerTab() { void DrawSaveEditor(bool& open) { if (!open) { - CVar_SetS32("gSaveEditorEnabled", 0); + CVarSetInteger("gSaveEditorEnabled", 0); return; } diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.h b/soh/soh/Enhancements/debugger/debugSaveEditor.h index b857cc21c..e4b4ad76e 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.h +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.h @@ -36,6 +36,7 @@ const std::vector flagTables = { { 0x09, "Used Deku Tree Blue Warp" }, { 0x0A, "Played Saria's Song for Mido as Adult" }, { 0x0C, "Met Deku Tree" }, + { 0x0F, "Spoke to Mido about Saria's whereabouts" }, { 0x10, "Spoke to Child Malon at Castle or Market" }, { 0x11, "Spoke to Ingo at Ranch before Talon returns" }, { 0x12, "Obtained Pocket Egg" }, @@ -219,7 +220,7 @@ const std::vector flagTables = { { 0x24, "Spoke to Kokiri Boy Cutting Grass" }, { 0x26, "Spoke to Kokiri Girl on Shop Awning" }, { 0x28, "Spoke to Kokiri Girl About Training Center" }, - { 0x31, "Spoke to Kokiri Boy on Bed in Mido's House" }, + { 0x41, "Spoke to Kokiri Boy on Bed in Mido's House" }, { 0x51, "Spoke to Kokiri Girl in Saria's House" }, { 0x59, "Spoke to Know-It-All Bro. About Temple" }, { 0x61, "Spoke to Know-It-All Bro. About Saria" }, diff --git a/soh/soh/Enhancements/enemyrandomizer.cpp b/soh/soh/Enhancements/enemyrandomizer.cpp index a5c0b9b6b..36bff0e37 100644 --- a/soh/soh/Enhancements/enemyrandomizer.cpp +++ b/soh/soh/Enhancements/enemyrandomizer.cpp @@ -232,7 +232,7 @@ extern "C" uint8_t GetRandomizedEnemy(PlayState* play, int16_t *actorId, f32 *po } EnemyEntry GetRandomizedEnemyEntry(uint32_t seed) { - if (CVar_GetS32("gSeededRandomizedEnemies", 0) && gSaveContext.n64ddFlag) { + if (CVarGetInteger("gSeededRandomizedEnemies", 0) && gSaveContext.n64ddFlag) { uint32_t finalSeed = seed + gSaveContext.seedIcons[0] + gSaveContext.seedIcons[1] + gSaveContext.seedIcons[2] + gSaveContext.seedIcons[3] + gSaveContext.seedIcons[4]; Random_Init(finalSeed); diff --git a/soh/soh/Enhancements/enemyrandomizer.h b/soh/soh/Enhancements/enemyrandomizer.h index 78ad2508d..cc68f9418 100644 --- a/soh/soh/Enhancements/enemyrandomizer.h +++ b/soh/soh/Enhancements/enemyrandomizer.h @@ -1,6 +1,6 @@ #pragma once -#include +#include typedef struct EnemyEntry { int16_t id; diff --git a/soh/soh/Enhancements/gameconsole.c b/soh/soh/Enhancements/gameconsole.c index 4c2551bbf..da0c7cf97 100644 --- a/soh/soh/Enhancements/gameconsole.c +++ b/soh/soh/Enhancements/gameconsole.c @@ -2,15 +2,15 @@ #include "../OTRGlobals.h" #include #include -#include +#include #include #include #include #include #include -#include -#include -#include +#include +#include +#include #include /* memcpy */ #include #include diff --git a/soh/soh/Enhancements/gameconsole.h b/soh/soh/Enhancements/gameconsole.h index 26dbc4d18..e9a3634a1 100644 --- a/soh/soh/Enhancements/gameconsole.h +++ b/soh/soh/Enhancements/gameconsole.h @@ -1,9 +1,9 @@ #ifndef _GAMECONSOLE_H_ #define _GAMECONSOLE_H_ -#include +#include #include -#include +#include #define MAX_CVARS 2048 diff --git a/soh/soh/Enhancements/gameplaystats.cpp b/soh/soh/Enhancements/gameplaystats.cpp index 9cc808bc2..c74bdc95d 100644 --- a/soh/soh/Enhancements/gameplaystats.cpp +++ b/soh/soh/Enhancements/gameplaystats.cpp @@ -5,7 +5,7 @@ #include #include -#include +#include #include extern "C" { @@ -110,7 +110,7 @@ void DisplayStatIfNonZero(const char* text, uint32_t value) { void DrawStatsTracker(bool& open) { if (!open) { - CVar_SetS32("gGameplayStatsEnabled", 0); + CVarSetInteger("gGameplayStatsEnabled", 0); return; } @@ -294,7 +294,7 @@ void DrawStatsTracker(bool& open) { DisplayStat("Sword Swings: ", gSaveContext.sohStats.count[COUNT_SWORD_SWINGS]); DisplayStat("Steps Taken: ", gSaveContext.sohStats.count[COUNT_STEPS]); // If using MM Bunny Hood enhancement, show how long it's been equipped (not counting pause time) - if (CVar_GetS32("gMMBunnyHood", 0) || gSaveContext.sohStats.count[COUNT_TIME_BUNNY_HOOD] > 0) { + if (CVarGetInteger("gMMBunnyHood", 0) || gSaveContext.sohStats.count[COUNT_TIME_BUNNY_HOOD] > 0) { DisplayTimeHHMMSS(gSaveContext.sohStats.count[COUNT_TIME_BUNNY_HOOD] / 2, "Bunny Hood Time: ", COLOR_WHITE); } DisplayStat("Rolls: ", gSaveContext.sohStats.count[COUNT_ROLLS]); diff --git a/soh/soh/Enhancements/presets.cpp b/soh/soh/Enhancements/presets.cpp index 91d5c323a..bb5dab2c6 100644 --- a/soh/soh/Enhancements/presets.cpp +++ b/soh/soh/Enhancements/presets.cpp @@ -3,12 +3,12 @@ #include #include #include -#include +#include #include "soh/UIWidgets.hpp" void clearCvars(std::vector cvarsToClear) { for(const char* cvar : cvarsToClear) { - CVar_Clear(cvar); + CVarClear(cvar); } } @@ -16,13 +16,13 @@ void applyPreset(std::vector entries) { for(auto& [cvar, type, value] : entries) { switch (type) { case PRESET_ENTRY_TYPE_S32: - CVar_SetS32(cvar, std::get(value)); + CVarSetInteger(cvar, std::get(value)); break; case PRESET_ENTRY_TYPE_FLOAT: - CVar_SetFloat(cvar, std::get(value)); + CVarSetFloat(cvar, std::get(value)); break; case PRESET_ENTRY_TYPE_STRING: - CVar_SetString(cvar, std::get(value)); + CVarSetString(cvar, std::get(value)); break; } } @@ -31,7 +31,7 @@ void applyPreset(std::vector entries) { void DrawPresetSelector(PresetType presetTypeId) { const std::string presetTypeCvar = "gPreset" + std::to_string(presetTypeId); const PresetTypeDefinition presetTypeDef = presetTypes.at(presetTypeId); - const uint16_t selectedPresetId = CVar_GetS32(presetTypeCvar.c_str(), 0); + const uint16_t selectedPresetId = CVarGetInteger(presetTypeCvar.c_str(), 0); const PresetDefinition selectedPresetDef = presetTypeDef.presets.at(selectedPresetId); std::string comboboxTooltip = ""; for ( auto iter = presetTypeDef.presets.begin(); iter != presetTypeDef.presets.end(); ++iter ) { @@ -43,7 +43,7 @@ void DrawPresetSelector(PresetType presetTypeId) { if (ImGui::BeginCombo("##PresetsComboBox", selectedPresetDef.label)) { for ( auto iter = presetTypeDef.presets.begin(); iter != presetTypeDef.presets.end(); ++iter ) { if (ImGui::Selectable(iter->second.label, iter->first == selectedPresetId)) { - CVar_SetS32(presetTypeCvar.c_str(), iter->first); + CVarSetInteger(presetTypeCvar.c_str(), iter->first); } } @@ -55,9 +55,8 @@ void DrawPresetSelector(PresetType presetTypeId) { ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6.0f, 4.0f)); if (ImGui::Button(("Apply Preset##" + presetTypeCvar).c_str())) { - if (selectedPresetId == 0) { - clearCvars(presetTypeDef.cvarsToClear); - } else { + clearCvars(presetTypeDef.cvarsToClear); + if (selectedPresetId != 0) { applyPreset(selectedPresetDef.entries); } SohImGui::RequestCvarSaveOnNextTick(); diff --git a/soh/soh/Enhancements/presets.h b/soh/soh/Enhancements/presets.h index d2551a3c9..8abc1e288 100644 --- a/soh/soh/Enhancements/presets.h +++ b/soh/soh/Enhancements/presets.h @@ -173,17 +173,25 @@ const std::vector enhancementsCvars = { "gBombchuBowlingNoBigCucco", "gBombchuBowlingAmmunition", "gCreditsFix", + "gSilverRupeeJingleExtend", "gStaticExplosionRadius" }; const std::vector randomizerCvars = { + "gRandomize10GSHint", + "gRandomize20GSHint", + "gRandomize30GSHint", + "gRandomize40GSHint", + "gRandomize50GSHint", "gRandomizeAllLocationsReachable", + "gRandomizeAltarHint", "gRandomizeBigPoeTargetCount", "gRandomizeBlueFireArrows", "gRandomizeBombchusInLogic", "gRandomizeBossKeysanity", "gRandomizeCompleteMaskQuest", "gRandomizeCuccosToReturn", + "gRandomizeDampeHint", "gRandomizeDecoupleEntrances", "gRandomizeDoorOfTime", "gRandomizeDungeonCount", @@ -209,6 +217,7 @@ const std::vector randomizerCvars = { "gRandomizeLacsRewardCount", "gRandomizeLacsStoneCount", "gRandomizeLacsTokenCount", + "gRandomizeLAHint", "gRandomizeLinksPocket", "gRandomizeLogicRules", "gRandomizeMedallionCount", @@ -221,9 +230,11 @@ const std::vector randomizerCvars = { "gRandomizeMqDungeons", "gRandomizeRainbowBridge", "gRandomizeRewardCount", + "gRandomizeScrubText", "gRandomizeShopsanity", "gRandomizeShuffleAdultTrade", "gRandomizeShuffleBeans", + "gRandomizeShuffleBossEntrances", "gRandomizeShuffleCows", "gRandomizeShuffleDungeonReward", "gRandomizeShuffleDungeonsEntrances", @@ -260,14 +271,27 @@ const std::vector randomizerCvars = { "gRandomizeSkipTowerEscape", "gRandomizeStartingAge", "gRandomizeStartingConsumables", + "gRandomizeStartingBoleroOfFire", "gRandomizeStartingDekuShield", + "gRandomizeStartingEponasSong", "gRandomizeStartingKokiriSword", "gRandomizeStartingMapsCompasses", + "gRandomizeStartingMinuetOfForest", + "gRandomizeStartingNocturneOfShadow", "gRandomizeStartingOcarina", + "gRandomizeStartingPreludeOfLight", + "gRandomizeStartingRequiemOfSpirit", + "gRandomizeStartingSariasSong", + "gRandomizeStartingSerenadeOfWater", "gRandomizeStartingSkulltulaToken", + "gRandomizeStartingSongOfStorms", + "gRandomizeStartingSongOfTime", + "gRandomizeStartingSunsSong", + "gRandomizeStartingZeldasLullaby", "gRandomizeStoneCount", "gRandomizeSunlightArrows", "gRandomizeTokenCount", + "gRandomizeWarpSongText", "gRandomizeZorasFountain", }; @@ -321,6 +345,8 @@ const std::vector vanillaPlusPresetEntries = { PRESET_ENTRY_S32("gDekuNutUpgradeFix", 1), // Fix Navi text HUD position PRESET_ENTRY_S32("gNaviTextFix", 1), + // Extend Silver Rupee Jingle + PRESET_ENTRY_S32("gSilverRupeeJingleExtend", 1), // Red Ganon blood PRESET_ENTRY_S32("gRedGanonBlood", 1), @@ -351,7 +377,7 @@ const std::vector enhancedPresetEntries = { // Text Speed (1 to 5) PRESET_ENTRY_S32("gTextSpeed", 5), // King Zora Speed (1 to 5) - PRESET_ENTRY_S32("gMweepSpeed", 2), + PRESET_ENTRY_S32("gMweepSpeed", 5), // Faster Block Push (+0 to +5) PRESET_ENTRY_S32("gFasterBlockPush", 5), // Better Owl @@ -384,6 +410,8 @@ const std::vector enhancedPresetEntries = { PRESET_ENTRY_S32("gDekuNutUpgradeFix", 1), // Fix Navi text HUD position PRESET_ENTRY_S32("gNaviTextFix", 1), + // Extend Silver Rupee Jingle + PRESET_ENTRY_S32("gSilverRupeeJingleExtend", 1), // Red Ganon blood PRESET_ENTRY_S32("gRedGanonBlood", 1), @@ -395,8 +423,6 @@ const std::vector enhancedPresetEntries = { PRESET_ENTRY_S32("gBombchusOOB", 1), // Skip save confirmation PRESET_ENTRY_S32("gSkipSaveConfirmation", 1), - // King Zora Speed (1 to 5) - PRESET_ENTRY_S32("gMweepSpeed", 5), // Biggoron Forge Time (0 to 3) PRESET_ENTRY_S32("gForgeTime", 0), // Vine/Ladder Climb speed (+0 to +12) @@ -468,7 +494,7 @@ const std::vector randomizerPresetEntries = { // Text Speed (1 to 5) PRESET_ENTRY_S32("gTextSpeed", 5), // King Zora Speed (1 to 5) - PRESET_ENTRY_S32("gMweepSpeed", 2), + PRESET_ENTRY_S32("gMweepSpeed", 5), // Faster Block Push (+0 to +5) PRESET_ENTRY_S32("gFasterBlockPush", 5), // Better Owl @@ -481,9 +507,6 @@ const std::vector randomizerPresetEntries = { // Inject Item Counts in messages PRESET_ENTRY_S32("gInjectItemCounts", 1), - // Pause link animation (0 to 16) - PRESET_ENTRY_S32("gPauseLiveLink", 1), - // Dynamic Wallet Icon PRESET_ENTRY_S32("gDynamicWalletIcon", 1), // Always show dungeon entrances @@ -501,6 +524,8 @@ const std::vector randomizerPresetEntries = { PRESET_ENTRY_S32("gDekuNutUpgradeFix", 1), // Fix Navi text HUD position PRESET_ENTRY_S32("gNaviTextFix", 1), + // Extend Silver Rupee Jingle + PRESET_ENTRY_S32("gSilverRupeeJingleExtend", 1), // Red Ganon blood PRESET_ENTRY_S32("gRedGanonBlood", 1), @@ -512,8 +537,6 @@ const std::vector randomizerPresetEntries = { PRESET_ENTRY_S32("gBombchusOOB", 1), // Skip save confirmation PRESET_ENTRY_S32("gSkipSaveConfirmation", 1), - // King Zora Speed (1 to 5) - PRESET_ENTRY_S32("gMweepSpeed", 5), // Biggoron Forge Time (0 to 3) PRESET_ENTRY_S32("gForgeTime", 0), // Vine/Ladder Climb speed (+0 to +12) diff --git a/soh/soh/Enhancements/randomizer/3drando/entrance.cpp b/soh/soh/Enhancements/randomizer/3drando/entrance.cpp index 442d07f08..e1eeb69d9 100644 --- a/soh/soh/Enhancements/randomizer/3drando/entrance.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/entrance.cpp @@ -81,12 +81,25 @@ void SetAllEntrancesData(std::vector& entranceShuffleTable) { forwardEntrance->SetBlueWarp(forwardEntry.blueWarp); forwardEntrance->SetType(forwardEntry.type); forwardEntrance->SetAsPrimary(); + + // When decouple entrances is on, mark it for entrances except boss rooms + if (Settings::DecoupleEntrances && forwardEntry.type != EntranceType::ChildBoss && + forwardEntry.type != EntranceType::AdultBoss) { + forwardEntrance->SetDecoupled(); + } + if (returnEntry.parentRegion != NONE) { Entrance* returnEntrance = AreaTable(returnEntry.parentRegion)->GetExit(returnEntry.connectedRegion); returnEntrance->SetIndex(returnEntry.index); returnEntrance->SetBlueWarp(returnEntry.blueWarp); returnEntrance->SetType(returnEntry.type); forwardEntrance->BindTwoWay(returnEntrance); + + // Mark reverse entrance as decoupled + if (Settings::DecoupleEntrances && returnEntry.type != EntranceType::ChildBoss && + returnEntry.type != EntranceType::AdultBoss) { + returnEntrance->SetDecoupled(); + } } } } @@ -96,7 +109,7 @@ static std::vector AssumeEntrancePool(std::vector& entranc for (Entrance* entrance : entrancePool) { totalRandomizableEntrances++; Entrance* assumedForward = entrance->AssumeReachable(); - if (entrance->GetReverse() != nullptr && !Settings::DecoupleEntrances) { + if (entrance->GetReverse() != nullptr && !entrance->IsDecoupled()) { Entrance* assumedReturn = entrance->GetReverse()->AssumeReachable(); if (!(Settings::MixedEntrancePools && (Settings::ShuffleOverworldEntrances || Settings::ShuffleInteriorEntrances.Is(SHUFFLEINTERIORS_ALL)))) { auto type = entrance->GetType(); @@ -218,7 +231,7 @@ static void ChangeConnections(Entrance* entrance, Entrance* targetEntrance) { SPDLOG_DEBUG(message); entrance->Connect(targetEntrance->Disconnect()); entrance->SetReplacement(targetEntrance->GetReplacement()); - if (entrance->GetReverse() != nullptr && !Settings::DecoupleEntrances) { + if (entrance->GetReverse() != nullptr && !entrance->IsDecoupled()) { targetEntrance->GetReplacement()->GetReverse()->Connect(entrance->GetReverse()->GetAssumed()->Disconnect()); targetEntrance->GetReplacement()->GetReverse()->SetReplacement(entrance->GetReverse()); } @@ -229,7 +242,7 @@ static void ChangeConnections(Entrance* entrance, Entrance* targetEntrance) { static void RestoreConnections(Entrance* entrance, Entrance* targetEntrance) { targetEntrance->Connect(entrance->Disconnect()); entrance->SetReplacement(nullptr); - if (entrance->GetReverse() != nullptr && !Settings::DecoupleEntrances) { + if (entrance->GetReverse() != nullptr && !entrance->IsDecoupled()) { entrance->GetReverse()->GetAssumed()->Connect(targetEntrance->GetReplacement()->GetReverse()->Disconnect()); targetEntrance->GetReplacement()->GetReverse()->SetReplacement(nullptr); } @@ -247,7 +260,7 @@ static void DeleteTargetEntrance(Entrance* targetEntrance) { static void ConfirmReplacement(Entrance* entrance, Entrance* targetEntrance) { DeleteTargetEntrance(targetEntrance); - if (entrance->GetReverse() != nullptr && !Settings::DecoupleEntrances) { + if (entrance->GetReverse() != nullptr && !entrance->IsDecoupled()) { auto replacedReverse = targetEntrance->GetReplacement()->GetReverse(); DeleteTargetEntrance(replacedReverse->GetReverse()->GetAssumed()); } @@ -786,9 +799,9 @@ int ShuffleAllEntrances() { {EntranceType::SpecialInterior, KAK_POTION_SHOP_BACK, KAK_BACKYARD, 0x04FF}}, // Grotto Loads use an entrance index of 0x0700 + their grotto id. The id is used as index for the - // grottoLoadTable in src/grotto.c + // grottoLoadTable in soh/soh/Enhancements/randomizer/randomizer_grotto.c // Grotto Returns use an entrance index of 0x0800 + their grotto id. The id is used as index for the - // grottoReturnTable in src/grotto.c + // grottoReturnTable in soh/soh/Enhancements/randomizer/randomizer_grotto.c {{EntranceType::GrottoGrave, DESERT_COLOSSUS, COLOSSUS_GROTTO, 0x0700}, {EntranceType::GrottoGrave, COLOSSUS_GROTTO, DESERT_COLOSSUS, 0x0800}}, {{EntranceType::GrottoGrave, LAKE_HYLIA, LH_GROTTO, 0x0701}, @@ -933,6 +946,23 @@ int ShuffleAllEntrances() { {{EntranceType::WarpSong, REQUIEM_OF_SPIRIT_WARP, DESERT_COLOSSUS, 0x01F1}, NO_RETURN_ENTRANCE}, {{EntranceType::WarpSong, NOCTURNE_OF_SHADOW_WARP, GRAVEYARD_WARP_PAD_REGION, 0x0568}, NO_RETURN_ENTRANCE}, {{EntranceType::WarpSong, PRELUDE_OF_LIGHT_WARP, TEMPLE_OF_TIME, 0x05F4}, NO_RETURN_ENTRANCE}, + + {{EntranceType::ChildBoss, DEKU_TREE_BOSS_ENTRYWAY, DEKU_TREE_BOSS_ROOM, 0x040F}, + {EntranceType::ChildBoss, DEKU_TREE_BOSS_ROOM, DEKU_TREE_BOSS_ENTRYWAY, 0x0252, 0x0457}}, + {{EntranceType::ChildBoss, DODONGOS_CAVERN_BOSS_ENTRYWAY, DODONGOS_CAVERN_BOSS_ROOM, 0x040B}, + {EntranceType::ChildBoss, DODONGOS_CAVERN_BOSS_ROOM, DODONGOS_CAVERN_BOSS_ENTRYWAY, 0x00C5, 0x047A}}, + {{EntranceType::ChildBoss, JABU_JABUS_BELLY_BOSS_ENTRYWAY, JABU_JABUS_BELLY_BOSS_ROOM, 0x0301}, + {EntranceType::ChildBoss, JABU_JABUS_BELLY_BOSS_ROOM, JABU_JABUS_BELLY_BOSS_ENTRYWAY, 0x0407, 0x010E}}, + {{EntranceType::AdultBoss, FOREST_TEMPLE_BOSS_ENTRYWAY, FOREST_TEMPLE_BOSS_ROOM, 0x000C}, + {EntranceType::AdultBoss, FOREST_TEMPLE_BOSS_ROOM, FOREST_TEMPLE_BOSS_ENTRYWAY, 0x024E, 0x0608}}, + {{EntranceType::AdultBoss, FIRE_TEMPLE_BOSS_ENTRYWAY, FIRE_TEMPLE_BOSS_ROOM, 0x0305}, + {EntranceType::AdultBoss, FIRE_TEMPLE_BOSS_ROOM, FIRE_TEMPLE_BOSS_ENTRYWAY, 0x0175, 0x0564}}, + {{EntranceType::AdultBoss, WATER_TEMPLE_BOSS_ENTRYWAY, WATER_TEMPLE_BOSS_ROOM, 0x0417}, + {EntranceType::AdultBoss, WATER_TEMPLE_BOSS_ROOM, WATER_TEMPLE_BOSS_ENTRYWAY, 0x0423, 0x060C}}, + {{EntranceType::AdultBoss, SPIRIT_TEMPLE_BOSS_ENTRYWAY, SPIRIT_TEMPLE_BOSS_ROOM, 0x008D}, + {EntranceType::AdultBoss, SPIRIT_TEMPLE_BOSS_ROOM, SPIRIT_TEMPLE_BOSS_ENTRYWAY, 0x02F5, 0x0610}}, + {{EntranceType::AdultBoss, SHADOW_TEMPLE_BOSS_ENTRYWAY, SHADOW_TEMPLE_BOSS_ROOM, 0x0413}, + {EntranceType::AdultBoss, SHADOW_TEMPLE_BOSS_ROOM, SHADOW_TEMPLE_BOSS_ENTRYWAY, 0x02B2, 0x0580}}, }; std::map priorityEntranceTable = { @@ -971,6 +1001,28 @@ int ShuffleAllEntrances() { } } + // Shuffle Bosses + if (Settings::ShuffleBossEntrances.IsNot(SHUFFLEBOSSES_OFF)) { + if (Settings::ShuffleBossEntrances.Is(SHUFFLEBOSSES_FULL)) { + entrancePools[EntranceType::Boss] = GetShuffleableEntrances(EntranceType::ChildBoss); + AddElementsToPool(entrancePools[EntranceType::Boss], GetShuffleableEntrances(EntranceType::AdultBoss)); + // If forest is closed, ensure Ghoma is inside the Deku tree + // Deku tree being in its vanilla location is handled below + if (Settings::OpenForest.Is(OPENFOREST_CLOSED) && !(Settings::ShuffleOverworldEntrances || Settings::ShuffleInteriorEntrances)) { + FilterAndEraseFromPool(entrancePools[EntranceType::Boss], [](const Entrance* entrance){return entrance->GetParentRegionKey() == DEKU_TREE_BOSS_ENTRYWAY && + entrance->GetConnectedRegionKey() == DEKU_TREE_BOSS_ROOM;}); + } + } else { + entrancePools[EntranceType::ChildBoss] = GetShuffleableEntrances(EntranceType::ChildBoss); + entrancePools[EntranceType::AdultBoss] = GetShuffleableEntrances(EntranceType::AdultBoss); + // If forest is closed, ensure Ghoma is inside the Deku tree + if (Settings::OpenForest.Is(OPENFOREST_CLOSED) && !(Settings::ShuffleOverworldEntrances || Settings::ShuffleInteriorEntrances)) { + FilterAndEraseFromPool(entrancePools[EntranceType::ChildBoss], [](const Entrance* entrance){return entrance->GetParentRegionKey() == DEKU_TREE_BOSS_ENTRYWAY && + entrance->GetConnectedRegionKey() == DEKU_TREE_BOSS_ROOM;}); + } + } + } + //Shuffle Dungeon Entrances if (Settings::ShuffleDungeonEntrances.IsNot(SHUFFLEDUNGEONS_OFF)) { entrancePools[EntranceType::Dungeon] = GetShuffleableEntrances(EntranceType::Dungeon); diff --git a/soh/soh/Enhancements/randomizer/3drando/entrance.hpp b/soh/soh/Enhancements/randomizer/3drando/entrance.hpp index 42ef1cb50..6634820b1 100644 --- a/soh/soh/Enhancements/randomizer/3drando/entrance.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/entrance.hpp @@ -22,6 +22,9 @@ enum class EntranceType { Dungeon, GanonDungeon, DungeonReverse, + Boss, + ChildBoss, + AdultBoss, Interior, InteriorReverse, SpecialInterior, @@ -180,6 +183,14 @@ public: return primary; } + bool IsDecoupled() const { + return decoupled; + } + + void SetDecoupled() { + decoupled = true; + } + int16_t GetIndex() const { return index; } @@ -269,6 +280,7 @@ private: bool shuffled = false; bool primary = false; bool addedToPool = false; + bool decoupled = false; std::string name = ""; }; diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.cpp b/soh/soh/Enhancements/randomizer/3drando/fill.cpp index 20ea61f15..0e8ab67e1 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.cpp @@ -295,8 +295,8 @@ std::vector GetAccessibleLocations(const std::vector& allowe if (mode == SearchMode::GeneratePlaythrough && exit.IsShuffled() && !exit.IsAddedToPool() && !noRandomEntrances) { entranceSphere.push_back(&exit); exit.AddToPool(); - // Don't list a coupled entrance from both directions - if (exit.GetReplacement()->GetReverse() != nullptr && !Settings::DecoupleEntrances) { + // Don't list a two-way coupled entrance from both directions + if (exit.GetReverse() != nullptr && exit.GetReplacement()->GetReverse() != nullptr && !exit.IsDecoupled()) { exit.GetReplacement()->GetReverse()->AddToPool(); } } @@ -1074,6 +1074,14 @@ int Fill() { if (ShuffleMerchants.Is(SHUFFLEMERCHANTS_HINTS)) { CreateMerchantsHints(); } + //Always execute ganon hint generation for the funny line + CreateGanonText(); + if (AltarHintText) { + CreateAltarText(); + } + if (DampeHintText) { + CreateDampesDiaryText(); + } if (ShuffleWarpSongs) { CreateWarpSongTexts(); } diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp index 8111d3fb5..f52d1091c 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp @@ -2519,93 +2519,61 @@ void HintTable_Init() { | BOSS HINT TEXT | ---------------------------*/ - hintTable[QUEEN_GOHMA] = HintText::Boss( - { - // obscure text - Text{ "An #ancient tree# rewards", /*french*/ "le #vieil arbre# octroie", - /*spanish*/ "un #ancestral árbol# premia con" }, - }, - {}, - // clear text - Text{ "the #Deku Tree# rewards", /*french*/ "l'#Arbre Mojo# octroie", - /*spanish*/ "el #Gran Árbol Deku# premia con" }); + hintTable[QUEEN_GOHMA] = HintText::Boss({ + // obscure text + Text{"the #Parasitic Armored Arachnid# holds", /*french*/"le #monstre insectoïde géant# possède", /*spanish*/"el #arácnido parasitario acorazado# porta"}, + }, {}, + //clear text + Text{"#Queen Gohma# holds", /*french*/"la #Reine Gohma# possède", /*spanish*/"la #Reina Goma# porta"}); - hintTable[KING_DODONGO] = HintText::Boss( - { - // obscure text - Text{ "An #immense cavern# rewards", /*french*/ "l'#immense caverne# octroie", - /*spanish*/ "una #descomunal cueva# premia con" }, - }, - {}, - // clear text - Text{ "#Dodongo's Cavern# rewards", /*french*/ "la #Caverne Dodongo# octroie", - /*spanish*/ "la #Cueva de los Dodongos# premia con" }); + hintTable[KING_DODONGO] = HintText::Boss({ + //obscure text + Text{"the #Infernal Dinosaur# holds", /*french*/"le #dinosaure infernal# possède", /*spanish*/"el #dinosaurio infernal# porta"}, + }, {}, + //clear text + Text{"#King Dodongo# holds", /*french*/"le #Roi Dodongo# possède", /*spanish*/"el #Rey Dodongo# porta"}); - hintTable[BARINADE] = HintText::Boss( - { - // obscure text - Text{ "the #belly of a deity# rewards", /*french*/ "le #ventre du gardien# octroie", - /*spanish*/ "la #tripa de cierta deidad# premia con" }, - }, - {}, - // clear text - Text{ "#Jabu-Jabu's Belly# rewards", /*french*/ "le #Ventre de Jabu-Jabu# octroie", - /*spanish*/ "la #tripa de Jabu-Jabu# premia con" }); + hintTable[BARINADE] = HintText::Boss({ + //obscure text + Text{"the #Bio-Electric Anemone# holds", /*french*/"l'#anémone bioélectrique# possède", /*spanish*/"la #anémona bioeléctrica# porta"}, + }, {}, + //clear text + Text{"#Barinade# holds", /*french*/"#Barinade# possède", /*spanish*/"#Barinade# porta"}); - hintTable[PHANTOM_GANON] = HintText::Boss( - { - // obscure text - Text{ "a #deep forest# rewards", /*french*/ "la #profonde forêt# octroie", - /*spanish*/ "el #profundo bosque# premia con" }, - }, - {}, - // clear text - Text{ "the #Forest Temple# rewards", /*french*/ "le #Temple de la Forêt# octroie", - /*spanish*/ "el #Templo del Bosque# premia con" }); + hintTable[PHANTOM_GANON] = HintText::Boss({ + //obscure text + Text{"the #Evil Spirit from Beyond# holds", /*french*/"l'#esprit maléfique de l'au-delà# possède", /*spanish*/"el #espíritu maligno de ultratumba# porta"}, + }, {}, + //clear text + Text{"#Phantom Ganon# holds", /*french*/"#Ganon Spectral# possède", /*spanish*/"#Ganon Fantasma# porta"}); - hintTable[VOLVAGIA] = HintText::Boss( - { - // obscure text - Text{ "a #high mountain# rewards", /*french*/ "la #grande montagne# octroie", - /*spanish*/ "una #alta montaña# premia con" }, - }, - {}, - // clear text - Text{ "the #Fire Temple# rewards", /*french*/ "le #Temple du Feu# octroie", - /*spanish*/ "el #Templo del Fuego# premia con" }); + hintTable[VOLVAGIA] = HintText::Boss({ + //obscure text + Text{"the #Subterranean Lava Dragon# holds", /*french*/"le #dragon des profondeurs# possède", /*spanish*/"el #dragón de lava subterráneo# porta"}, + }, {}, + //clear text + Text{"#Volvagia# holds", /*french*/"#Volvagia# possède", /*spanish*/"#Volvagia# porta"}); - hintTable[MORPHA] = HintText::Boss( - { - // obscure text - Text{ "a #vast lake# rewards", /*french*/ "le #vaste lac# octroie", - /*spanish*/ "un #lago inmenso# premia con" }, - }, - {}, - // clear text - Text{ "the #Water Temple# rewards", /*french*/ "le #Temple de l'Eau# octroie", - /*spanish*/ "el #Templo del Agua# premia con" }); + hintTable[MORPHA] = HintText::Boss({ + //obscure text + Text{"the #Giant Aquatic Amoeba# holds", /*french*/"l'#amibe aquatique géante# possède", /*spanish*/"la #ameba acuática gigante# porta"}, + }, {}, + //clear text + Text{"#Morpha# holds", /*french*/"#Morpha# possède", /*spanish*/"#Morpha# porta"}); - hintTable[BONGO_BONGO] = HintText::Boss( - { - // obscure text - Text{ "the #house of the dead# rewards", /*french*/ "la #maison des morts# octroie", - /*spanish*/ "la #casa de la muerte# premia con" }, - }, - {}, - // clear text - Text{ "the #Shadow Temple# rewards", /*french*/ "le #Temple de l'Ombre# octroie", - /*spanish*/ "el #Templo de las Sombras#" }); + hintTable[BONGO_BONGO] = HintText::Boss({ + //obscure text + Text{"the #Phantom Shadow Beast# holds", /*french*/"le #monstre de l'ombre# possède", /*spanish*/"la #alimaña oscura espectral# porta"}, + }, {}, + //clear text + Text{"#Bongo Bongo# holds", /*french*/"#Bongo Bongo# possède", /*spanish*/"#Bongo Bongo# porta"}); - hintTable[TWINROVA] = HintText::Boss( - { - // obscure text - Text{ "a #goddess of the sand# rewards", /*french*/ "la #déesse des sables# octroie", - /*spanish*/ "la #diosa de la arena# premia con" }, - }, - {}, - // clear text - Text{ "the #Spirit Temple# rewards", /*french*/ "le #Temple de l'Esprit# octroie", - /*spanish*/ "el #Templo del Espíritu# premia con" }); + hintTable[TWINROVA] = HintText::Boss({ + //obscure text + Text{"the #Sorceress Sisters# hold", /*french*/"#les sorcières jumelles# possède", /*spanish*/"las #hermanas hechiceras# portan"}, + }, {}, + //clear text + Text{"#Twinrova# holds", /*french*/"#Twinrova# possède", /*spanish*/"#Birova# porta"}); // // [LINKS_POCKET_BOSS] = HintText::Boss({ // //obscure text diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp index 26150c9de..721776418 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp @@ -418,6 +418,10 @@ void HintTable_Init_Exclude_Overworld() { Text{"a #carpet guru# sells", /*french*/"#un marchand du désert# vend", /*spanish*/"el #genio de una alfombra# vende"}, }); + hintTable[GC_MEDIGORON] = HintText::Exclude({ + //obscure text + Text{"#Medigoron# sells", /*french*/"#Medigoron# vend", /*spanish*/"#Medigoron# vende"}, + }); hintTable[KAK_IMPAS_HOUSE_FREESTANDING_POH] = HintText::Exclude({ //obscure text diff --git a/soh/soh/Enhancements/randomizer/3drando/hints.cpp b/soh/soh/Enhancements/randomizer/3drando/hints.cpp index 8516ecb76..6b613246b 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hints.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hints.cpp @@ -116,6 +116,7 @@ Text childAltarText; Text adultAltarText; Text ganonText; Text ganonHintText; +Text dampesText; Text warpMinuetText; Text warpBoleroText; Text warpSerenadeText; @@ -139,6 +140,10 @@ Text& GetGanonHintText() { return ganonHintText; } +Text& GetDampeHintText() { + return dampesText; +} + Text& GetWarpMinuetText() { return warpMinuetText; } @@ -312,17 +317,12 @@ static void CreateWothHint(uint8_t* remainingDungeonWothHints) { Location(hintedLocation)->SetAsHinted(); uint32_t gossipStone = RandomElement(gossipStoneLocations); - // form hint text - Text locationText; if (Location(hintedLocation)->IsDungeon()) { *remainingDungeonWothHints -= 1; - uint32_t parentRegion = Location(hintedLocation)->GetParentRegionKey(); - locationText = AreaTable(parentRegion)->GetHint().GetText(); - - } else { - uint32_t parentRegion = Location(hintedLocation)->GetParentRegionKey(); - locationText = GetHintRegion(parentRegion)->GetHint().GetText(); } + + // form hint text + Text locationText = GetHintRegion(Location(hintedLocation)->GetParentRegionKey())->GetHint().GetText(); Text finalWothHint = Hint(PREFIX).GetText() + "#" + locationText + "#" + Hint(WAY_OF_THE_HERO).GetText(); SPDLOG_DEBUG("\tMessage: "); SPDLOG_DEBUG(finalWothHint.english); @@ -360,16 +360,12 @@ static void CreateBarrenHint(uint8_t* remainingDungeonBarrenHints, std::vectorSetAsHinted(); uint32_t gossipStone = RandomElement(gossipStoneLocations); - // form hint text - Text locationText; if (Location(hintedLocation)->IsDungeon()) { *remainingDungeonBarrenHints -= 1; - uint32_t parentRegion = Location(hintedLocation)->GetParentRegionKey(); - locationText = Hint(AreaTable(parentRegion)->hintKey).GetText(); - } else { - uint32_t parentRegion = Location(hintedLocation)->GetParentRegionKey(); - locationText = Hint(GetHintRegion(parentRegion)->hintKey).GetText(); } + + // form hint text + Text locationText = GetHintRegion(Location(hintedLocation)->GetParentRegionKey())->GetHint().GetText(); Text finalBarrenHint = Hint(PREFIX).GetText() + Hint(PLUNDERING).GetText() + "#" + locationText + "#" + Hint(FOOLISH).GetText(); SPDLOG_DEBUG("\tMessage: "); @@ -414,16 +410,15 @@ static void CreateRandomLocationHint(const bool goodItem = false) { //form hint text Text itemText = Location(hintedLocation)->GetPlacedItem().GetHint().GetText(); + Text locationText = GetHintRegion(Location(hintedLocation)->GetParentRegionKey())->GetHint().GetText(); + // RANDOTODO: reconsider dungeon vs non-dungeon item location hints when boss shuffle mixed pools happens if (Location(hintedLocation)->IsDungeon()) { - uint32_t parentRegion = Location(hintedLocation)->GetParentRegionKey(); - Text locationText = AreaTable(parentRegion)->GetHint().GetText(); Text finalHint = Hint(PREFIX).GetText()+"#"+locationText+"# "+Hint(HOARDS).GetText()+" #"+itemText+"#."; SPDLOG_DEBUG("\tMessage: "); SPDLOG_DEBUG(finalHint.english); SPDLOG_DEBUG("\n\n"); AddHint(finalHint, gossipStone, {QM_GREEN, QM_RED}); } else { - Text locationText = GetHintRegion(Location(hintedLocation)->GetParentRegionKey())->GetHint().GetText(); Text finalHint = Hint(PREFIX).GetText()+"#"+itemText+"# "+Hint(CAN_BE_FOUND_AT).GetText()+" #"+locationText+"#."; SPDLOG_DEBUG("\tMessage: "); SPDLOG_DEBUG(finalHint.english); @@ -546,7 +541,7 @@ static void CreateTrialHints() { } } -static void CreateGanonText() { +void CreateGanonText() { //funny ganon line ganonText = RandomElement(GetHintCategory(HintCategory::GanonLine)).GetText(); @@ -680,7 +675,7 @@ static Text BuildGanonBossKeyText() { return Text()+"$b"+ganonBossKeyText+"^"; } -static void CreateAltarText() { +void CreateAltarText() { //Child Altar Text childAltarText = Hint(SPIRITUAL_STONE_TEXT_START).GetText()+"^"+ @@ -737,6 +732,25 @@ void CreateMerchantsHints() { CreateMessageFromTextObject(0x6078, 0, 2, 3, AddColorsAndFormat(carpetSalesmanTextTwo, {QM_RED, QM_YELLOW, QM_RED})); } +void CreateDampesDiaryText() { + uint32_t item = PROGRESSIVE_HOOKSHOT; + uint32_t location = FilterFromPool(allLocations, [item](const uint32_t loc){return Location(loc)->GetPlaceduint32_t() == item;})[0]; + Text area = GetHintRegion(Location(location)->GetParentRegionKey())->GetHint().GetText(); + Text temp1 = Text{ + "Whoever reads this, please enter %g", + "Toi qui lit ce journal, rends-toi dans %g", + "Wer immer dies liest, der möge folgenden Ort aufsuchen: %g" + }; + + Text temp2 = { + "%w. I will let you have my stretching, shrinking keepsake.^I'm waiting for you.&--Dampé", + "%w. Et peut-être auras-tu droit à mon précieux %rtrésor%w.^Je t'attends...&--Igor", + "%w. Ihm gebe ich meinen langen, kurzen Schatz.^Ich warte!&Boris" + }; + + dampesText = temp1 + area + temp2; +} + void CreateWarpSongTexts() { auto warpSongEntrances = GetShuffleableEntrances(EntranceType::WarpSong, false); @@ -777,9 +791,6 @@ void CreateWarpSongTexts() { void CreateAllHints() { - CreateGanonText(); - CreateAltarText(); - SPDLOG_DEBUG("\nNOW CREATING HINTS\n"); const HintSetting& hintSetting = hintSettingTable[Settings::HintDistribution.Value()]; diff --git a/soh/soh/Enhancements/randomizer/3drando/hints.hpp b/soh/soh/Enhancements/randomizer/3drando/hints.hpp index 568708a79..5e8df5286 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hints.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/hints.hpp @@ -221,11 +221,15 @@ extern uint32_t GetHintRegionHintKey(const uint32_t area); extern void CreateAllHints(); extern void CreateMerchantsHints(); extern void CreateWarpSongTexts(); +extern void CreateDampesDiaryText(); +extern void CreateGanonText(); +extern void CreateAltarText(); Text& GetChildAltarText(); Text& GetAdultAltarText(); Text& GetGanonText(); Text& GetGanonHintText(); +Text& GetDampeHintText(); Text& GetWarpMinuetText(); Text& GetWarpBoleroText(); diff --git a/soh/soh/Enhancements/randomizer/3drando/item_list.cpp b/soh/soh/Enhancements/randomizer/3drando/item_list.cpp index 6a80ec6ef..d7fc6cfcc 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_list.cpp @@ -286,6 +286,11 @@ Item& ItemFromGIID(const int giid) { } index++; } + + // there are vanilla items that don't exist in the item table we're reading from here + // if we made it this far, it means we didn't find an item in the table + // if we don't return anything, the game will crash, so, as a workaround, return greg + return itemTable[GREEN_RUPEE]; } //This function should only be used to place items containing hint text diff --git a/soh/soh/Enhancements/randomizer/3drando/keys.hpp b/soh/soh/Enhancements/randomizer/3drando/keys.hpp index 46486299a..0016ff205 100644 --- a/soh/soh/Enhancements/randomizer/3drando/keys.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/keys.hpp @@ -1083,6 +1083,8 @@ typedef enum { DEATH_MOUNTAIN_CRATER, //AREAS + MARKER_AREAS_START, // Used for area key count + ROOT, ROOT_EXITS, CHILD_SPAWN, @@ -1263,6 +1265,16 @@ typedef enum { DEKU_TREE_BASEMENT_BACK_ROOM, DEKU_TREE_BASEMENT_UPPER, DEKU_TREE_OUTSIDE_BOSS_ROOM, + + DEKU_TREE_MQ_LOBBY, + DEKU_TREE_MQ_COMPASS_ROOM, + DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, + DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, + DEKU_TREE_MQ_BASEMENT_BACK_ROOM, + DEKU_TREE_MQ_BASEMENT_LEDGE, + DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, + + DEKU_TREE_BOSS_ENTRYWAY, DEKU_TREE_BOSS_ROOM, DODONGOS_CAVERN_BEGINNING, @@ -1287,6 +1299,14 @@ typedef enum { DODONGOS_CAVERN_FAR_BRIDGE, DODONGOS_CAVERN_BOSS_AREA, DODONGOS_CAVERN_BACK_ROOM, + + DODONGOS_CAVERN_MQ_BEGINNING, + DODONGOS_CAVERN_MQ_LOBBY, + DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, + DODONGOS_CAVERN_MQ_BOMB_BAG_AREA, + DODONGOS_CAVERN_MQ_BOSS_AREA, + + DODONGOS_CAVERN_BOSS_ENTRYWAY, DODONGOS_CAVERN_BOSS_ROOM, JABU_JABUS_BELLY_BEGINNING, @@ -1306,6 +1326,13 @@ typedef enum { JABU_JABUS_BELLY_ABOVE_BIGOCTO, JABU_JABUS_BELLY_LIFT_UPPER, JABU_JABUS_BELLY_NEAR_BOSS_ROOM, + + JABU_JABUS_BELLY_MQ_BEGINNING, + JABU_JABUS_BELLY_MQ_MAIN, + JABU_JABUS_BELLY_MQ_DEPTHS, + JABU_JABUS_BELLY_MQ_BOSS_AREA, + + JABU_JABUS_BELLY_BOSS_ENTRYWAY, JABU_JABUS_BELLY_BOSS_ROOM, FOREST_TEMPLE_FIRST_ROOM, @@ -1335,11 +1362,24 @@ typedef enum { FOREST_TEMPLE_GREEN_POE_ROOM, FOREST_TEMPLE_EAST_CORRIDOR, FOREST_TEMPLE_BOSS_REGION, + + FOREST_TEMPLE_MQ_LOBBY, + FOREST_TEMPLE_MQ_CENTRAL_AREA, + FOREST_TEMPLE_MQ_AFTER_BLOCK_PUZZLE, + FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, + FOREST_TEMPLE_MQ_NW_OUTDOORS, + FOREST_TEMPLE_MQ_NE_OUTDOORS, + FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, + FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, + FOREST_TEMPLE_MQ_BOW_REGION, + FOREST_TEMPLE_MQ_FALLING_ROOM, + FOREST_TEMPLE_MQ_BOSS_REGION, + + FOREST_TEMPLE_BOSS_ENTRYWAY, FOREST_TEMPLE_BOSS_ROOM, FIRE_TEMPLE_FIRST_ROOM, FIRE_TEMPLE_NEAR_BOSS_ROOM, - FIRE_TEMPLE_BOSS_ROOM, FIRE_TEMPLE_LOOP_ENEMIES, FIRE_TEMPLE_LOOP_TILES, FIRE_TEMPLE_LOOP_FLARE_DANCER, @@ -1374,6 +1414,16 @@ typedef enum { FIRE_TEMPLE_HAMMER_RETURN_PATH, FIRE_TEMPLE_ABOVE_FIRE_MAZE, + FIRE_TEMPLE_MQ_LOWER, + FIRE_TEMPLE_MQ_LOWER_LOCKED_DOOR, + FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, + FIRE_TEMPLE_MQ_LOWER_MAZE, + FIRE_TEMPLE_MQ_UPPER_MAZE, + FIRE_TEMPLE_MQ_UPPER, + + FIRE_TEMPLE_BOSS_ENTRYWAY, + FIRE_TEMPLE_BOSS_ROOM, + WATER_TEMPLE_LOBBY, WATER_TEMPLE_EAST_LOWER, WATER_TEMPLE_MAP_ROOM, @@ -1401,6 +1451,14 @@ typedef enum { WATER_TEMPLE_LONGSHOT_ROOM, WATER_TEMPLE_RIVER, WATER_TEMPLE_PRE_BOSS_ROOM, + + WATER_TEMPLE_MQ_LOBBY, + WATER_TEMPLE_MQ_DIVE, + WATER_TEMPLE_MQ_LOWERED_WATER_LEVELS, + WATER_TEMPLE_MQ_DARK_LINK_REGION, + WATER_TEMPLE_MQ_BASEMENT_GATED_AREAS, + + WATER_TEMPLE_BOSS_ENTRYWAY, WATER_TEMPLE_BOSS_ROOM, SPIRIT_TEMPLE_LOBBY, @@ -1411,82 +1469,7 @@ typedef enum { SPIRIT_TEMPLE_OUTDOOR_HANDS, SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR, SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR, - - SHADOW_TEMPLE_BEGINNING, - SHADOW_TEMPLE_FIRST_BEAMOS, - SHADOW_TEMPLE_HUGE_PIT, - SHADOW_TEMPLE_WIND_TUNNEL, - SHADOW_TEMPLE_BEYOND_BOAT, - - BOTTOM_OF_THE_WELL, - BOTTOM_OF_THE_WELL_MAIN_AREA, - - ICE_CAVERN_BEGINNING, - ICE_CAVERN_MAIN, - - GERUDO_TRAINING_GROUNDS_LOBBY, - GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE, - GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE_RIGHT, - GERUDO_TRAINING_GROUNDS_LAVA_ROOM, - GERUDO_TRAINING_GROUNDS_HAMMER_ROOM, - GERUDO_TRAINING_GROUNDS_EYE_STATUE_LOWER, - GERUDO_TRAINING_GROUNDS_EYE_STATUE_UPPER, - GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_ROOM, - GERUDO_TRAINING_GROUNDS_LIKE_LIKE_ROOM, - - GANONS_CASTLE_LOBBY, - GANONS_CASTLE_DEKU_SCRUBS, - GANONS_CASTLE_FOREST_TRIAL, - GANONS_CASTLE_FIRE_TRIAL, - GANONS_CASTLE_WATER_TRIAL, - GANONS_CASTLE_SHADOW_TRIAL, - GANONS_CASTLE_SPIRIT_TRIAL, - GANONS_CASTLE_LIGHT_TRIAL, - GANONS_CASTLE_TOWER, - - DEKU_TREE_MQ_LOBBY, - DEKU_TREE_MQ_COMPASS_ROOM, - DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, - DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, - DEKU_TREE_MQ_BASEMENT_BACK_ROOM, - DEKU_TREE_MQ_BASEMENT_LEDGE, - - DODONGOS_CAVERN_MQ_BEGINNING, - DODONGOS_CAVERN_MQ_LOBBY, - DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, - DODONGOS_CAVERN_MQ_BOMB_BAG_AREA, - DODONGOS_CAVERN_MQ_BOSS_AREA, - - JABU_JABUS_BELLY_MQ_BEGINNING, - JABU_JABUS_BELLY_MQ_MAIN, - JABU_JABUS_BELLY_MQ_DEPTHS, - JABU_JABUS_BELLY_MQ_BOSS_AREA, - - FOREST_TEMPLE_MQ_LOBBY, - FOREST_TEMPLE_MQ_CENTRAL_AREA, - FOREST_TEMPLE_MQ_AFTER_BLOCK_PUZZLE, - FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, - FOREST_TEMPLE_MQ_NW_OUTDOORS, - FOREST_TEMPLE_MQ_NE_OUTDOORS, - FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, - FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, - FOREST_TEMPLE_MQ_BOW_REGION, - FOREST_TEMPLE_MQ_FALLING_ROOM, - FOREST_TEMPLE_MQ_BOSS_REGION, - - FIRE_TEMPLE_MQ_LOWER, - FIRE_TEMPLE_MQ_LOWER_LOCKED_DOOR, - FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, - FIRE_TEMPLE_MQ_LOWER_MAZE, - FIRE_TEMPLE_MQ_UPPER_MAZE, - FIRE_TEMPLE_MQ_UPPER, - FIRE_TEMPLE_MQ_BOSS_ROOM, - - WATER_TEMPLE_MQ_LOBBY, - WATER_TEMPLE_MQ_DIVE, - WATER_TEMPLE_MQ_LOWERED_WATER_LEVELS, - WATER_TEMPLE_MQ_DARK_LINK_REGION, - WATER_TEMPLE_MQ_BASEMENT_GATED_AREAS, + SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, SPIRIT_TEMPLE_MQ_LOBBY, SPIRIT_TEMPLE_MQ_CHILD, @@ -1496,6 +1479,16 @@ typedef enum { SPIRIT_TEMPLE_MQ_BOSS_AREA, SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND, SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, + SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD, + + SPIRIT_TEMPLE_BOSS_ENTRYWAY, + SPIRIT_TEMPLE_BOSS_ROOM, + + SHADOW_TEMPLE_BEGINNING, + SHADOW_TEMPLE_FIRST_BEAMOS, + SHADOW_TEMPLE_HUGE_PIT, + SHADOW_TEMPLE_WIND_TUNNEL, + SHADOW_TEMPLE_BEYOND_BOAT, SHADOW_TEMPLE_MQ_ENTRYWAY, SHADOW_TEMPLE_MQ_BEGINNING, @@ -1507,15 +1500,32 @@ typedef enum { SHADOW_TEMPLE_MQ_BEYOND_BOAT, SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, - BOTTOM_OF_THE_WELL_MQ, + SHADOW_TEMPLE_BOSS_ENTRYWAY, + SHADOW_TEMPLE_BOSS_ROOM, + + BOTTOM_OF_THE_WELL_MAIN_AREA, + BOTTOM_OF_THE_WELL_MQ_PERIMETER, BOTTOM_OF_THE_WELL_MQ_MIDDLE, + ICE_CAVERN_BEGINNING, + ICE_CAVERN_MAIN, + ICE_CAVERN_MQ_BEGINNING, ICE_CAVERN_MQ_MAP_ROOM, ICE_CAVERN_MQ_IRON_BOOTS_REGION, ICE_CAVERN_MQ_COMPASS_ROOM, + GERUDO_TRAINING_GROUNDS_LOBBY, + GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE, + GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE_RIGHT, + GERUDO_TRAINING_GROUNDS_LAVA_ROOM, + GERUDO_TRAINING_GROUNDS_HAMMER_ROOM, + GERUDO_TRAINING_GROUNDS_EYE_STATUE_LOWER, + GERUDO_TRAINING_GROUNDS_EYE_STATUE_UPPER, + GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_ROOM, + GERUDO_TRAINING_GROUNDS_LIKE_LIKE_ROOM, + GERUDO_TRAINING_GROUNDS_MQ_LOBBY, GERUDO_TRAINING_GROUNDS_MQ_RIGHT_SIDE, GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER, @@ -1524,6 +1534,16 @@ typedef enum { GERUDO_TRAINING_GROUNDS_MQ_BACK_AREAS, GERUDO_TRAINING_GROUNDS_MQ_CENTRAL_MAZE_RIGHT, + GANONS_CASTLE_LOBBY, + GANONS_CASTLE_DEKU_SCRUBS, + GANONS_CASTLE_FOREST_TRIAL, + GANONS_CASTLE_FIRE_TRIAL, + GANONS_CASTLE_WATER_TRIAL, + GANONS_CASTLE_SHADOW_TRIAL, + GANONS_CASTLE_SPIRIT_TRIAL, + GANONS_CASTLE_LIGHT_TRIAL, + GANONS_CASTLE_TOWER, + GANONS_CASTLE_MQ_LOBBY, GANONS_CASTLE_MQ_DEKU_SCRUBS, GANONS_CASTLE_MQ_FOREST_TRIAL, @@ -1533,6 +1553,8 @@ typedef enum { GANONS_CASTLE_MQ_SPIRIT_TRIAL, GANONS_CASTLE_MQ_LIGHT_TRIAL, + MARKER_AREAS_END, // Used for area key count + //DUNGEONS DEKU_TREE, DODONGOS_CAVERN, @@ -1542,8 +1564,8 @@ typedef enum { WATER_TEMPLE, SPIRIT_TEMPLE, SHADOW_TEMPLE, + BOTTOM_OF_THE_WELL, ICE_CAVERN, - //BOTTOM_OF_THE_WELL, GERUDO_TRAINING_GROUNDS, GANONS_CASTLE, @@ -1762,6 +1784,7 @@ typedef enum { VALIDATION_LINE, LIGHT_ARROW_LOCATION_HINT, + DAMPE_DIARY, YOUR_POCKET, GANON_LINE01, diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access.cpp index e77d7943c..cefa5229f 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access.cpp @@ -371,458 +371,24 @@ void AreaTable_Init() { namespace Areas { - static std::array allAreas = { - ROOT, - ROOT_EXITS, + const auto GetAllAreas() { + static const size_t areaCount = MARKER_AREAS_END - (MARKER_AREAS_START + 1); - CHILD_SPAWN, - ADULT_SPAWN, - MINUET_OF_FOREST_WARP, - BOLERO_OF_FIRE_WARP, - SERENADE_OF_WATER_WARP, - REQUIEM_OF_SPIRIT_WARP, - NOCTURNE_OF_SHADOW_WARP, - PRELUDE_OF_LIGHT_WARP, + static std::array allAreas = {}; - KOKIRI_FOREST, - KF_LINKS_HOUSE, - KF_MIDOS_HOUSE, - KF_SARIAS_HOUSE, - KF_HOUSE_OF_TWINS, - KF_KNOW_IT_ALL_HOUSE, - KF_KOKIRI_SHOP, - KF_STORMS_GROTTO, - KF_OUTSIDE_DEKU_TREE, - DEKU_TREE_ENTRYWAY, + static bool intialized = false; + if (!intialized) { + for (size_t i = 0; i < areaCount; i++) { + allAreas[i] = (MARKER_AREAS_START + 1) + i; + } + intialized = true; + } - THE_LOST_WOODS, - LW_BRIDGE_FROM_FOREST, - LW_BRIDGE, - LW_FOREST_EXIT, - LW_BEYOND_MIDO, - LW_NEAR_SHORTCUTS_GROTTO, - DEKU_THEATER, - LW_SCRUBS_GROTTO, - SFM_ENTRYWAY, - SACRED_FOREST_MEADOW, - SFM_WOLFOS_GROTTO, - SFM_FAIRY_GROTTO, - SFM_STORMS_GROTTO, - FOREST_TEMPLE_ENTRYWAY, - - KAKARIKO_VILLAGE, - KAK_CARPENTER_BOSS_HOUSE, - KAK_HOUSE_OF_SKULLTULA, - KAK_IMPAS_HOUSE, - KAK_IMPAS_LEDGE, - KAK_IMPAS_HOUSE_BACK, - KAK_IMPAS_HOUSE_NEAR_COW, - KAK_WINDMILL, - KAK_BAZAAR, - KAK_SHOOTING_GALLERY, - KAK_POTION_SHOP_FRONT, - KAK_POTION_SHOP_BACK, - KAK_ROOFTOP, - KAK_IMPAS_ROOFTOP, - KAK_BEHIND_GATE, - KAK_BACKYARD, - KAK_ODD_POTION_BUILDING, - KAK_REDEAD_GROTTO, - KAK_OPEN_GROTTO, - BOTTOM_OF_THE_WELL_ENTRYWAY, - - THE_GRAVEYARD, - GRAVEYARD_DAMPES_GRAVE, - GRAVEYARD_DAMPES_HOUSE, - GRAVEYARD_SHIELD_GRAVE, - GRAVEYARD_COMPOSERS_GRAVE, - GRAVEYARD_HEART_PIECE_GRAVE, - GRAVEYARD_WARP_PAD_REGION, - SHADOW_TEMPLE_ENTRYWAY, - - DEATH_MOUNTAIN_TRAIL, - DEATH_MOUNTAIN_SUMMIT, - DMT_OWL_FLIGHT, - DMT_GREAT_FAIRY_FOUNTAIN, - DMT_COW_GROTTO, - DMT_STORMS_GROTTO, - DODONGOS_CAVERN_ENTRYWAY, - - DMC_UPPER_LOCAL, - DMC_CENTRAL_LOCAL, - DMC_LOWER_LOCAL, - DMC_LOWER_NEARBY, - DMC_UPPER_NEARBY, - DMC_CENTRAL_NEARBY, - DMC_LADDER_AREA_NEARBY, - DMC_UPPER_GROTTO, - DMC_HAMMER_GROTTO, - DMC_GREAT_FAIRY_FOUNTAIN, - FIRE_TEMPLE_ENTRYWAY, - - GORON_CITY, - GC_WOODS_WARP, - GC_DARUNIAS_CHAMBER, - GC_GROTTO_PLATFORM, - GC_SHOP, - GC_GROTTO, - - ZR_FRONT, - ZORAS_RIVER, - ZR_BEHIND_WATERFALL, - ZR_OPEN_GROTTO, - ZR_FAIRY_GROTTO, - ZR_STORMS_GROTTO, - ZORAS_DOMAIN, - ZD_BEHIND_KING_ZORA, - ZD_SHOP, - ZD_STORMS_GROTTO, - ZORAS_FOUNTAIN, - ZF_GREAT_FAIRY_FOUNTAIN, - JABU_JABUS_BELLY_ENTRYWAY, - ICE_CAVERN_ENTRYWAY, - - HYRULE_FIELD, - HF_SOUTHEAST_GROTTO, - HF_OPEN_GROTTO, - HF_INSIDE_FENCE_GROTTO, - HF_COW_GROTTO, - HF_NEAR_MARKET_GROTTO, - HF_FAIRY_GROTTO, - HF_NEAR_KAK_GROTTO, - HF_TEKTITE_GROTTO, - - LON_LON_RANCH, - LLR_TALONS_HOUSE, - LLR_STABLES, - LLR_TOWER, - LLR_GROTTO, - - LAKE_HYLIA, - LH_OWL_FLIGHT, - LH_LAB, - LH_FISHING_ISLAND, - LH_FISHING_HOLE, - LH_GROTTO, - WATER_TEMPLE_ENTRYWAY, - - GERUDO_VALLEY, - GV_UPPER_STREAM, - GV_LOWER_STREAM, - GV_GROTTO_LEDGE, - GV_CRATE_LEDGE, - GV_OCTOROK_GROTTO, - GV_FORTRESS_SIDE, - GV_CARPENTER_TENT, - GV_STORMS_GROTTO, - GERUDO_FORTRESS, - GF_OUTSIDE_GATE, - GF_STORMS_GROTTO, - GERUDO_TRAINING_GROUNDS_ENTRYWAY, - - WASTELAND_NEAR_FORTRESS, - HAUNTED_WASTELAND, - WASTELAND_NEAR_COLOSSUS, - DESERT_COLOSSUS, - DESERT_COLOSSUS_FROM_SPIRIT_ENTRYWAY, - COLOSSUS_GREAT_FAIRY_FOUNTAIN, - COLOSSUS_GROTTO, - SPIRIT_TEMPLE_ENTRYWAY, - - MARKET_ENTRANCE, - THE_MARKET, - MARKET_GUARD_HOUSE, - MARKET_BAZAAR, - MARKET_MASK_SHOP, - MARKET_SHOOTING_GALLERY, - MARKET_BOMBCHU_BOWLING, - MARKET_TREASURE_CHEST_GAME, - MARKET_POTION_SHOP, - MARKET_BACK_ALLEY, - MARKET_BOMBCHU_SHOP, - MARKET_DOG_LADY_HOUSE, - MARKET_MAN_IN_GREEN_HOUSE, - TOT_ENTRANCE, - TEMPLE_OF_TIME, - TOT_BEYOND_DOOR_OF_TIME, - - CASTLE_GROUNDS, - HYRULE_CASTLE_GROUNDS, - HC_GARDEN, - HC_GREAT_FAIRY_FOUNTAIN, - HC_STORMS_GROTTO, - GANONS_CASTLE_GROUNDS, - OGC_GREAT_FAIRY_FOUNTAIN, - GANONS_CASTLE_ENTRYWAY, - - DEKU_TREE_LOBBY, - DEKU_TREE_2F_MIDDLE_ROOM, - DEKU_TREE_SLINGSHOT_ROOM, - DEKU_TREE_COMPASS_ROOM, - DEKU_TREE_BASEMENT_LOWER, - DEKU_TREE_BASEMENT_SCRUB_ROOM, - DEKU_TREE_BASEMENT_WATER_ROOM, - DEKU_TREE_BASEMENT_TORCH_ROOM, - DEKU_TREE_BASEMENT_BACK_LOBBY, - DEKU_TREE_BASEMENT_BACK_ROOM, - DEKU_TREE_BASEMENT_UPPER, - DEKU_TREE_OUTSIDE_BOSS_ROOM, - DEKU_TREE_BOSS_ROOM, - - DODONGOS_CAVERN_BEGINNING, - DODONGOS_CAVERN_LOBBY, - DODONGOS_CAVERN_LOBBY_SWITCH, - DODONGOS_CAVERN_SE_CORRIDOR, - DODONGOS_CAVERN_SE_ROOM, - DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, - DODONGOS_CAVERN_LOWER_LIZALFOS, - DODONGOS_CAVERN_DODONGO_ROOM, - DODONGOS_CAVERN_NEAR_DODONGO_ROOM, - DODONGOS_CAVERN_STAIRS_LOWER, - DODONGOS_CAVERN_STAIRS_UPPER, - DODONGOS_CAVERN_COMPASS_ROOM, - DODONGOS_CAVERN_ARMOS_ROOM, - DODONGOS_CAVERN_BOMB_ROOM_LOWER, - DODONGOS_CAVERN_2F_SIDE_ROOM, - DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, - DODONGOS_CAVERN_UPPER_LIZALFOS, - DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM, - DODONGOS_CAVERN_BOMB_ROOM_UPPER, - DODONGOS_CAVERN_FAR_BRIDGE, - DODONGOS_CAVERN_BOSS_AREA, - DODONGOS_CAVERN_BACK_ROOM, - DODONGOS_CAVERN_BOSS_ROOM, - - JABU_JABUS_BELLY_BEGINNING, - JABU_JABUS_BELLY_LIFT_MIDDLE, - JABU_JABUS_BELLY_MAIN_UPPER, - JABU_JABUS_BELLY_MAIN_LOWER, - JABU_JABUS_BELLY_SHABOMB_CORRIDOR, - JABU_JABUS_BELLY_LOWER_SIDE_ROOM, - JABU_JABUS_BELLY_LIFT_LOWER, - JABU_JABUS_BELLY_FORKED_CORRIDOR, - JABU_JABUS_BELLY_BOOMERANG_ROOM, - JABU_JABUS_BELLY_MAP_ROOM, - JABU_JABUS_BELLY_COMPASS_ROOM, - JABU_JABUS_BELLY_BLUE_TENTACLE, - JABU_JABUS_BELLY_GREEN_TENTACLE, - JABU_JABUS_BELLY_BIGOCTO_ROOM, - JABU_JABUS_BELLY_ABOVE_BIGOCTO, - JABU_JABUS_BELLY_LIFT_UPPER, - JABU_JABUS_BELLY_NEAR_BOSS_ROOM, - JABU_JABUS_BELLY_BOSS_ROOM, - - FOREST_TEMPLE_FIRST_ROOM, - FOREST_TEMPLE_SOUTH_CORRIDOR, - FOREST_TEMPLE_LOBBY, - FOREST_TEMPLE_NORTH_CORRIDOR, - FOREST_TEMPLE_LOWER_STALFOS, - FOREST_TEMPLE_NW_OUTDOORS_LOWER, - FOREST_TEMPLE_NW_OUTDOORS_UPPER, - FOREST_TEMPLE_NE_OUTDOORS_LOWER, - FOREST_TEMPLE_NE_OUTDOORS_UPPER, - FOREST_TEMPLE_MAP_ROOM, - FOREST_TEMPLE_SEWER, - FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, - FOREST_TEMPLE_FLOORMASTER_ROOM, - FOREST_TEMPLE_WEST_CORRIDOR, - FOREST_TEMPLE_BLOCK_PUSH_ROOM, - FOREST_TEMPLE_NW_CORRIDOR_TWISTED, - FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED, - FOREST_TEMPLE_RED_POE_ROOM, - FOREST_TEMPLE_UPPER_STALFOS, - FOREST_TEMPLE_BLUE_POE_ROOM, - FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED, - FOREST_TEMPLE_NE_CORRIDOR_TWISTED, - FOREST_TEMPLE_FROZEN_EYE_ROOM, - FOREST_TEMPLE_FALLING_ROOM, - FOREST_TEMPLE_GREEN_POE_ROOM, - FOREST_TEMPLE_EAST_CORRIDOR, - FOREST_TEMPLE_BOSS_REGION, - FOREST_TEMPLE_BOSS_ROOM, - - FIRE_TEMPLE_FIRST_ROOM, - FIRE_TEMPLE_NEAR_BOSS_ROOM, - FIRE_TEMPLE_BOSS_ROOM, - FIRE_TEMPLE_LOOP_ENEMIES, - FIRE_TEMPLE_LOOP_TILES, - FIRE_TEMPLE_LOOP_FLARE_DANCER, - FIRE_TEMPLE_LOOP_HAMMER_SWITCH, - FIRE_TEMPLE_LOOP_GORON_ROOM, - FIRE_TEMPLE_LOOP_EXIT, - FIRE_TEMPLE_BIG_LAVA_ROOM, - FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON, - FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_TILES, - FIRE_TEMPLE_BIG_LAVA_ROOM_SOUTH_GORON, - FIRE_TEMPLE_FIRE_PILLAR_ROOM, - FIRE_TEMPLE_SHORTCUT_ROOM, - FIRE_TEMPLE_SHORTCUT_CLIMB, - FIRE_TEMPLE_BOULDER_MAZE_LOWER, - FIRE_TEMPLE_BOULDER_MAZE_LOWER_SIDE_ROOM, - FIRE_TEMPLE_EAST_CENTRAL_ROOM, - FIRE_TEMPLE_FIRE_WALL_CHASE, - FIRE_TEMPLE_MAP_AREA, - FIRE_TEMPLE_BOULDER_MAZE_UPPER, - FIRE_TEMPLE_SCARECROW_ROOM, - FIRE_TEMPLE_EAST_PEAK, - FIRE_TEMPLE_CORRIDOR, - FIRE_TEMPLE_FIRE_MAZE_ROOM, - FIRE_TEMPLE_FIRE_MAZE_UPPER, - FIRE_TEMPLE_FIRE_MAZE_SIDE_ROOM, - FIRE_TEMPLE_WEST_CENTRAL_LOWER, - FIRE_TEMPLE_WEST_CENTRAL_UPPER, - FIRE_TEMPLE_LATE_FIRE_MAZE, - FIRE_TEMPLE_UPPER_FLARE_DANCER, - FIRE_TEMPLE_WEST_CLIMB, - FIRE_TEMPLE_WEST_PEAK, - FIRE_TEMPLE_HAMMER_RETURN_PATH, - FIRE_TEMPLE_ABOVE_FIRE_MAZE, - - WATER_TEMPLE_LOBBY, - WATER_TEMPLE_EAST_LOWER, - WATER_TEMPLE_MAP_ROOM, - WATER_TEMPLE_CRACKED_WALL, - WATER_TEMPLE_TORCH_ROOM, - WATER_TEMPLE_NORTH_LOWER, - WATER_TEMPLE_BOULDERS_LOWER, - WATER_TEMPLE_BLOCK_ROOM, - WATER_TEMPLE_JETS_ROOM, - WATER_TEMPLE_BOULDERS_UPPER, - WATER_TEMPLE_BOSS_KEY_ROOM, - WATER_TEMPLE_SOUTH_LOWER, - WATER_TEMPLE_WEST_LOWER, - WATER_TEMPLE_DRAGON_ROOM, - WATER_TEMPLE_CENTRAL_PILLAR_LOWER, - WATER_TEMPLE_CENTRAL_PILLAR_UPPER, - WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT, - WATER_TEMPLE_EAST_MIDDLE, - WATER_TEMPLE_WEST_MIDDLE, - WATER_TEMPLE_HIGH_WATER, - WATER_TEMPLE_BLOCK_CORRIDOR, - WATER_TEMPLE_FALLING_PLATFORM_ROOM, - WATER_TEMPLE_DRAGON_PILLARS_ROOM, - WATER_TEMPLE_DARK_LINK_ROOM, - WATER_TEMPLE_LONGSHOT_ROOM, - WATER_TEMPLE_RIVER, - WATER_TEMPLE_PRE_BOSS_ROOM, - WATER_TEMPLE_BOSS_ROOM, - - SPIRIT_TEMPLE_LOBBY, - SPIRIT_TEMPLE_CHILD, - SPIRIT_TEMPLE_CHILD_CLIMB, - SPIRIT_TEMPLE_EARLY_ADULT, - SPIRIT_TEMPLE_CENTRAL_CHAMBER, - SPIRIT_TEMPLE_OUTDOOR_HANDS, - SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR, - SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR, - SHADOW_TEMPLE_BEGINNING, - SHADOW_TEMPLE_FIRST_BEAMOS, - SHADOW_TEMPLE_HUGE_PIT, - SHADOW_TEMPLE_WIND_TUNNEL, - SHADOW_TEMPLE_BEYOND_BOAT, - BOTTOM_OF_THE_WELL, - BOTTOM_OF_THE_WELL_MAIN_AREA, - ICE_CAVERN_BEGINNING, - ICE_CAVERN_MAIN, - GERUDO_TRAINING_GROUNDS_LOBBY, - GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE, - GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE_RIGHT, - GERUDO_TRAINING_GROUNDS_LAVA_ROOM, - GERUDO_TRAINING_GROUNDS_HAMMER_ROOM, - GERUDO_TRAINING_GROUNDS_EYE_STATUE_LOWER, - GERUDO_TRAINING_GROUNDS_EYE_STATUE_UPPER, - GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_ROOM, - GERUDO_TRAINING_GROUNDS_LIKE_LIKE_ROOM, - GANONS_CASTLE_LOBBY, - GANONS_CASTLE_DEKU_SCRUBS, - GANONS_CASTLE_FOREST_TRIAL, - GANONS_CASTLE_FIRE_TRIAL, - GANONS_CASTLE_WATER_TRIAL, - GANONS_CASTLE_SHADOW_TRIAL, - GANONS_CASTLE_SPIRIT_TRIAL, - GANONS_CASTLE_LIGHT_TRIAL, - GANONS_CASTLE_TOWER, - DEKU_TREE_MQ_LOBBY, - DEKU_TREE_MQ_COMPASS_ROOM, - DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, - DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, - DEKU_TREE_MQ_BASEMENT_BACK_ROOM, - DEKU_TREE_MQ_BASEMENT_LEDGE, - DODONGOS_CAVERN_MQ_BEGINNING, - DODONGOS_CAVERN_MQ_LOBBY, - DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, - DODONGOS_CAVERN_MQ_BOMB_BAG_AREA, - DODONGOS_CAVERN_MQ_BOSS_AREA, - JABU_JABUS_BELLY_MQ_BEGINNING, - JABU_JABUS_BELLY_MQ_MAIN, - JABU_JABUS_BELLY_MQ_DEPTHS, - JABU_JABUS_BELLY_MQ_BOSS_AREA, - FOREST_TEMPLE_MQ_LOBBY, - FOREST_TEMPLE_MQ_CENTRAL_AREA, - FOREST_TEMPLE_MQ_AFTER_BLOCK_PUZZLE, - FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, - FOREST_TEMPLE_MQ_NW_OUTDOORS, - FOREST_TEMPLE_MQ_NE_OUTDOORS, - FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, - FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, - FOREST_TEMPLE_MQ_BOW_REGION, - FOREST_TEMPLE_MQ_FALLING_ROOM, - FOREST_TEMPLE_MQ_BOSS_REGION, - FIRE_TEMPLE_MQ_LOWER, - FIRE_TEMPLE_MQ_LOWER_LOCKED_DOOR, - FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, - FIRE_TEMPLE_MQ_LOWER_MAZE, - FIRE_TEMPLE_MQ_UPPER_MAZE, - FIRE_TEMPLE_MQ_UPPER, - FIRE_TEMPLE_MQ_BOSS_ROOM, - WATER_TEMPLE_MQ_LOBBY, - WATER_TEMPLE_MQ_DIVE, - WATER_TEMPLE_MQ_LOWERED_WATER_LEVELS, - WATER_TEMPLE_MQ_DARK_LINK_REGION, - WATER_TEMPLE_MQ_BASEMENT_GATED_AREAS, - SPIRIT_TEMPLE_MQ_LOBBY, - SPIRIT_TEMPLE_MQ_CHILD, - SPIRIT_TEMPLE_MQ_ADULT, - SPIRIT_TEMPLE_MQ_SHARED, - SPIRIT_TEMPLE_MQ_LOWER_ADULT, - SPIRIT_TEMPLE_MQ_BOSS_AREA, - SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND, - SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, - SHADOW_TEMPLE_MQ_ENTRYWAY, - SHADOW_TEMPLE_MQ_BEGINNING, - SHADOW_TEMPLE_MQ_DEAD_HAND_AREA, - SHADOW_TEMPLE_MQ_FIRST_BEAMOS, - SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, - SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, - SHADOW_TEMPLE_MQ_WIND_TUNNEL, - SHADOW_TEMPLE_MQ_BEYOND_BOAT, - SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, - BOTTOM_OF_THE_WELL_MQ, - BOTTOM_OF_THE_WELL_MQ_PERIMETER, - BOTTOM_OF_THE_WELL_MQ_MIDDLE, - ICE_CAVERN_MQ_BEGINNING, - ICE_CAVERN_MQ_MAP_ROOM, - ICE_CAVERN_MQ_IRON_BOOTS_REGION, - ICE_CAVERN_MQ_COMPASS_ROOM, - GERUDO_TRAINING_GROUNDS_MQ_LOBBY, - GERUDO_TRAINING_GROUNDS_MQ_RIGHT_SIDE, - GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER, - GERUDO_TRAINING_GROUNDS_MQ_LEFT_SIDE, - GERUDO_TRAINING_GROUNDS_MQ_STALFOS_ROOM, - GERUDO_TRAINING_GROUNDS_MQ_BACK_AREAS, - GERUDO_TRAINING_GROUNDS_MQ_CENTRAL_MAZE_RIGHT, - GANONS_CASTLE_MQ_LOBBY, - GANONS_CASTLE_MQ_DEKU_SCRUBS, - GANONS_CASTLE_MQ_FOREST_TRIAL, - GANONS_CASTLE_MQ_FIRE_TRIAL, - GANONS_CASTLE_MQ_WATER_TRIAL, - GANONS_CASTLE_MQ_SHADOW_TRIAL, - GANONS_CASTLE_MQ_SPIRIT_TRIAL, - GANONS_CASTLE_MQ_LIGHT_TRIAL, - }; + return allAreas; + } void AccessReset() { - for (const uint32_t area : allAreas) { + for (const uint32_t area : GetAllAreas()) { AreaTable(area)->ResetVariables(); } @@ -843,7 +409,7 @@ namespace Areas { //Reset exits and clear items from locations void ResetAllLocations() { - for (const uint32_t area : allAreas) { + for (const uint32_t area : GetAllAreas()) { AreaTable(area)->ResetVariables(); //Erase item from every location in this exit for (LocationAccess& locPair : AreaTable(area)->locations) { @@ -868,7 +434,7 @@ namespace Areas { } bool HasTimePassAccess(uint8_t age) { - for (const uint32_t areaKey : allAreas) { + for (const uint32_t areaKey : GetAllAreas()) { auto area = AreaTable(areaKey); if (area->timePass && ((age == AGE_CHILD && area->Child()) || (age == AGE_ADULT && area->Adult()))) { return true; @@ -886,7 +452,7 @@ namespace Areas { worldGraph.open (str + ".dot"); worldGraph << "digraph {\n\tcenter=true;\n"; - for (const uint32_t areaKey : allAreas) { + for (const uint32_t areaKey : GetAllAreas()) { auto area = AreaTable(areaKey); for (auto exit : area->exits) { if (exit.GetConnectedRegion()->regionName != "Invalid Area") { @@ -939,7 +505,7 @@ Area* AreaTable(const uint32_t areaKey) { //Retrieve all the shuffable entrances of a specific type std::vector GetShuffleableEntrances(EntranceType type, bool onlyPrimary /*= true*/) { std::vector entrancesToShuffle = {}; - for (uint32_t area : Areas::allAreas) { + for (uint32_t area : Areas::GetAllAreas()) { for (auto& exit: AreaTable(area)->exits) { if ((exit.GetType() == type || type == EntranceType::All) && (exit.IsPrimary() || !onlyPrimary) && exit.GetType() != EntranceType::None) { entrancesToShuffle.push_back(&exit); diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_deku_tree.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_deku_tree.cpp index c67e5d3bd..9f22eea63 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_deku_tree.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_deku_tree.cpp @@ -38,7 +38,7 @@ void AreaTable_Init_DekuTree() { /*Glitched*/[]{return CanUse(MEGATON_HAMMER);}}), Entrance(DEKU_TREE_OUTSIDE_BOSS_ROOM, {[]{return false;}, /*Glitched*/[]{return CanDoGlitch(GlitchType::Megaflip, GlitchDifficulty::NOVICE);}}), - Entrance(DEKU_TREE_BOSS_ROOM, {[]{return false;}, + Entrance(DEKU_TREE_BOSS_ENTRYWAY, {[]{return false;}, /*Glitched*/[]{return IsChild && CanUse(KOKIRI_SWORD) && Nuts && CanDoGlitch(GlitchType::SeamWalk, GlitchDifficulty::EXPERT);}}), }); @@ -72,7 +72,7 @@ void AreaTable_Init_DekuTree() { }, { //Exits Entrance(DEKU_TREE_LOBBY, {[]{return HasFireSourceWithTorch || CanUse(BOW);}}), - Entrance(DEKU_TREE_BOSS_ROOM, {[]{return false;}, + Entrance(DEKU_TREE_BOSS_ENTRYWAY, {[]{return false;}, /*Glitched*/[]{return CanDoGlitch(GlitchType::HookshotJump_Boots, GlitchDifficulty::ADVANCED);}}), }); @@ -161,21 +161,7 @@ void AreaTable_Init_DekuTree() { areaTable[DEKU_TREE_OUTSIDE_BOSS_ROOM] = Area("Deku Tree Outside Boss Room", "Deku Tree", DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits Entrance(DEKU_TREE_BASEMENT_UPPER, {[]{return true;}}), - Entrance(DEKU_TREE_BOSS_ROOM, {[]{return Here(DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return HasShield;});}}), - }); - - areaTable[DEKU_TREE_BOSS_ROOM] = Area("Deku Tree Boss Room", "Deku Tree", DEKU_TREE, NO_DAY_NIGHT_CYCLE, { - //Events - EventAccess(&DekuTreeClear, {[]{return DekuTreeClear || ((IsAdult || KokiriSword || Sticks) && (Nuts || CanUse(SLINGSHOT) || CanUse(BOW) || HookshotOrBoomerang));}, - /*Glitched*/[]{return CanDoGlitch(GlitchType::ISG, GlitchDifficulty::NOVICE);}}), - }, { - //Locations - LocationAccess(QUEEN_GOHMA, {[]{return DekuTreeClear;}}), - LocationAccess(DEKU_TREE_QUEEN_GOHMA_HEART, {[]{return DekuTreeClear;}}), - }, { - //Exits - Entrance(DEKU_TREE_OUTSIDE_BOSS_ROOM, {[]{return true;}}), - Entrance(DEKU_TREE_ENTRYWAY, {[]{return DekuTreeClear;}}), + Entrance(DEKU_TREE_BOSS_ENTRYWAY, {[]{return Here(DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return HasShield;});}}), }); } @@ -261,6 +247,51 @@ void AreaTable_Init_DekuTree() { //Exits Entrance(DEKU_TREE_MQ_BASEMENT_BACK_ROOM, {[]{return IsChild;}}), Entrance(DEKU_TREE_MQ_LOBBY, {[]{return true;}}), + Entrance(DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, + { [] { return Here(DEKU_TREE_MQ_BASEMENT_LEDGE, [] { return HasFireSourceWithTorch; }); } }), }); + + areaTable[DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM] = + Area("Deku Tree MQ Outside Boss Room", "Deku Tree", DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, + { + // Exits + Entrance(DEKU_TREE_MQ_BASEMENT_LEDGE, { [] { return true; } }), + Entrance(DEKU_TREE_BOSS_ENTRYWAY, + { [] { return Here(DEKU_TREE_MQ_BASEMENT_LEDGE, [] { return HasShield; }); } }), + }); } + + /*--------------------------- + | BOSS ROOM | + ---------------------------*/ + areaTable[DEKU_TREE_BOSS_ENTRYWAY] = + Area("Deku Tree Boss Entryway", "Deku Tree", DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, + { + // Exits + Entrance(DEKU_TREE_OUTSIDE_BOSS_ROOM, { [] { return Dungeon::DekuTree.IsVanilla(); } }), + Entrance(DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, { [] { return Dungeon::DekuTree.IsMQ(); } }), + Entrance(DEKU_TREE_BOSS_ROOM, { [] { return true; } }), + }); + + areaTable[DEKU_TREE_BOSS_ROOM] = + Area("Deku Tree Boss Room", "Deku Tree", NONE, NO_DAY_NIGHT_CYCLE, + { + // Events + EventAccess(&DekuTreeClear, { [] { + return DekuTreeClear || + (CanJumpslash && (Nuts || CanUse(SLINGSHOT) || CanUse(BOW) || + HookshotOrBoomerang)); + }, + /*Glitched*/ + [] { return CanDoGlitch(GlitchType::ISG, GlitchDifficulty::NOVICE); } }), + }, + { + // Locations + LocationAccess(QUEEN_GOHMA, { [] { return DekuTreeClear; } }), + LocationAccess(DEKU_TREE_QUEEN_GOHMA_HEART, { [] { return DekuTreeClear; } }), + }, + { + // Exits + Entrance(DEKU_TREE_BOSS_ENTRYWAY, { [] { return true; } }), + }); } diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_dodongos_cavern.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_dodongos_cavern.cpp index 6c57b161b..fa6985077 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_dodongos_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_dodongos_cavern.cpp @@ -50,7 +50,7 @@ void AreaTable_Init_DodongosCavern() { Entrance(DODONGOS_CAVERN_FAR_BRIDGE, {[]{return HasAccessTo(DODONGOS_CAVERN_FAR_BRIDGE);}, /*Glitched*/[]{return CanDoGlitch(GlitchType::HookshotJump_Boots, GlitchDifficulty::INTERMEDIATE);}}), Entrance(DODONGOS_CAVERN_BOSS_AREA, {[]{return Here(DODONGOS_CAVERN_FAR_BRIDGE, []{return HasExplosives;});}}), - Entrance(DODONGOS_CAVERN_BOSS_ROOM, {[]{return false;}, + Entrance(DODONGOS_CAVERN_BOSS_ENTRYWAY,{[]{return false;}, /*Glitched*/[]{return CanDoGlitch(GlitchType::HookshotJump_Boots, GlitchDifficulty::ADVANCED);}}), }); @@ -220,7 +220,7 @@ void AreaTable_Init_DodongosCavern() { Entrance(DODONGOS_CAVERN_LOBBY, {[]{return true;}}), Entrance(DODONGOS_CAVERN_BACK_ROOM, {[]{return Here(DODONGOS_CAVERN_BOSS_AREA, []{return CanBlastOrSmash;});}, /*Glitched*/[]{return Here(DODONGOS_CAVERN_BOSS_AREA, []{return (GlitchBlueFireWall && BlueFire) || (CanUse(STICKS) && CanDoGlitch(GlitchType::QPA, GlitchDifficulty::ADVANCED));});}}), - Entrance(DODONGOS_CAVERN_BOSS_ROOM, {[]{return true;}}), + Entrance(DODONGOS_CAVERN_BOSS_ENTRYWAY, {[]{return true;}}), }); areaTable[DODONGOS_CAVERN_BACK_ROOM] = Area("Dodongos Cavern Back Room", "Dodongos Cavern", DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, { @@ -231,21 +231,6 @@ void AreaTable_Init_DodongosCavern() { //Exits Entrance(DODONGOS_CAVERN_BOSS_AREA, {[]{return true;}}), }); - - areaTable[DODONGOS_CAVERN_BOSS_ROOM] = Area("Dodongos Cavern Boss Room", "Dodongos Cavern", DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, { - //Events - EventAccess(&DodongosCavernClear, {[]{return DodongosCavernClear || (Here(DODONGOS_CAVERN_BOSS_ROOM, []{return HasExplosives || (CanUse(MEGATON_HAMMER) && CanShield);}) && (Bombs || GoronBracelet) && (IsAdult || Sticks || KokiriSword));}, - /*Glitched*/[]{return Here(DODONGOS_CAVERN_BOSS_ROOM, []{return HasExplosives || (CanUse(MEGATON_HAMMER) && CanShield) || (GlitchBlueFireWall && HasBottle && BlueFireAccess);}) && (HasExplosives || GoronBracelet) && (IsAdult || Sticks || KokiriSword || CanUse(MEGATON_HAMMER));}}), - }, { - //Locations - LocationAccess(DODONGOS_CAVERN_BOSS_ROOM_CHEST, {[]{return true;}}), - LocationAccess(DODONGOS_CAVERN_KING_DODONGO_HEART, {[]{return DodongosCavernClear;}}), - LocationAccess(KING_DODONGO, {[]{return DodongosCavernClear;}}), - }, { - //Exits - Entrance(DODONGOS_CAVERN_BOSS_AREA, {[]{return true;}}), - Entrance(DODONGOS_CAVERN_ENTRYWAY, {[]{return DodongosCavernClear;}}), - }); } /*--------------------------- @@ -314,6 +299,53 @@ void AreaTable_Init_DodongosCavern() { LocationAccess(DODONGOS_CAVERN_KING_DODONGO_HEART, {[]{return CanBlastOrSmash && (Bombs || GoronBracelet) && (IsAdult || Sticks || KokiriSword);}}), LocationAccess(KING_DODONGO, {[]{return CanBlastOrSmash && (Bombs || GoronBracelet) && (IsAdult || Sticks || KokiriSword);}}), LocationAccess(DODONGOS_CAVERN_MQ_GS_BACK_AREA, {[]{return true;}}), - }, {}); + }, { + //Exits + Entrance(DODONGOS_CAVERN_BOSS_ENTRYWAY, {[]{return true;}}), + }); } + + /*--------------------------- + | BOSS ROOM | + ---------------------------*/ + areaTable[DODONGOS_CAVERN_BOSS_ENTRYWAY] = + Area("Dodongos Cavern Boss Entryway", "Dodongos Cavern", DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, + { + // Exits + Entrance(DODONGOS_CAVERN_BOSS_AREA, { [] { return Dungeon::DodongosCavern.IsVanilla(); } }), + Entrance(DODONGOS_CAVERN_MQ_BOSS_AREA, { [] { return Dungeon::DodongosCavern.IsMQ(); } }), + Entrance(DODONGOS_CAVERN_BOSS_ROOM, { [] { return true; } }), + }); + + areaTable[DODONGOS_CAVERN_BOSS_ROOM] = + Area("Dodongos Cavern Boss Room", "Dodongos Cavern", NONE, NO_DAY_NIGHT_CYCLE, + { + // Events + EventAccess(&DodongosCavernClear, + { [] { + return DodongosCavernClear || + (Here(DODONGOS_CAVERN_BOSS_ROOM, + [] { return HasExplosives || (CanUse(MEGATON_HAMMER) && CanShield); }) && + (Bombs || GoronBracelet) && CanJumpslash); + }, + /*Glitched*/ + [] { + return Here(DODONGOS_CAVERN_BOSS_ROOM, + [] { + return HasExplosives || (CanUse(MEGATON_HAMMER) && CanShield) || + (GlitchBlueFireWall && BlueFire); + }) && + (HasExplosives || GoronBracelet) && CanJumpslash; + } }), + }, + { + // Locations + LocationAccess(DODONGOS_CAVERN_BOSS_ROOM_CHEST, { [] { return true; } }), + LocationAccess(DODONGOS_CAVERN_KING_DODONGO_HEART, { [] { return DodongosCavernClear; } }), + LocationAccess(KING_DODONGO, { [] { return DodongosCavernClear; } }), + }, + { + // Exits + Entrance(DODONGOS_CAVERN_BOSS_ENTRYWAY, { [] { return true; } }), + }); } diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_fire_temple.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_fire_temple.cpp index ae3c08374..3cbd1c6a7 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_fire_temple.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_fire_temple.cpp @@ -42,25 +42,11 @@ void AreaTable_Init_FireTemple() { }, { //Exits Entrance(FIRE_TEMPLE_FIRST_ROOM, {[]{return true;}}), - Entrance(FIRE_TEMPLE_BOSS_ROOM, {[]{return BossKeyFireTemple && ((IsAdult && LogicFireBossDoorJump) || CanUse(HOVER_BOOTS) || Here(FIRE_TEMPLE_FIRE_MAZE_UPPER, []{return CanUse(MEGATON_HAMMER);}));}, + Entrance(FIRE_TEMPLE_BOSS_ENTRYWAY, {[]{return BossKeyFireTemple && ((IsAdult && LogicFireBossDoorJump) || CanUse(HOVER_BOOTS) || Here(FIRE_TEMPLE_FIRE_MAZE_UPPER, []{return CanUse(MEGATON_HAMMER);}));}, /*Glitched*/[]{return BossKeyFireTemple && (CanDoGlitch(GlitchType::Megaflip, GlitchDifficulty::NOVICE) || (Bombs && HasBombchus && CanDoGlitch(GlitchType::BombHover, GlitchDifficulty::INTERMEDIATE) && CanDoGlitch(GlitchType::ISG, GlitchDifficulty::INTERMEDIATE)));}}), }); - areaTable[FIRE_TEMPLE_BOSS_ROOM] = Area("Fire Temple Boss Room", "Fire Temple", FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, { - //Events - EventAccess(&FireTempleClear, {[]{return FireTempleClear || (FireTimer >= 64 && CanUse(MEGATON_HAMMER));}, - /*Glitched*/[]{return FireTimer >= 48 && ((CanUse(STICKS) && CanDoGlitch(GlitchType::QPA, GlitchDifficulty::NOVICE)) || - CanUse(MEGATON_HAMMER)) && Bombs && CanDoGlitch(GlitchType::ISG, GlitchDifficulty::INTERMEDIATE);}}), - }, { - //Locations - LocationAccess(FIRE_TEMPLE_VOLVAGIA_HEART, {[]{return FireTempleClear;}}), - LocationAccess(VOLVAGIA, {[]{return FireTempleClear;}}), - }, { - //Exits - Entrance(FIRE_TEMPLE_ENTRYWAY, {[]{return FireTempleClear;}}), - }); - areaTable[FIRE_TEMPLE_LOOP_ENEMIES] = Area("Fire Temple Loop Enemies", "Fire Temple", FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits Entrance(FIRE_TEMPLE_FIRST_ROOM, {[]{return SmallKeys(FIRE_TEMPLE, 8) || !IsKeysanity;}}), @@ -308,7 +294,7 @@ void AreaTable_Init_FireTemple() { areaTable[FIRE_TEMPLE_WEST_CENTRAL_UPPER] = Area("Fire Temple West Central Upper", "Fire Temple", FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits - Entrance(FIRE_TEMPLE_BOSS_ROOM, {[]{return false;}, + Entrance(FIRE_TEMPLE_BOSS_ENTRYWAY, {[]{return false;}, /*Glitched*/[]{return CanDoGlitch(GlitchType::LedgeClip, GlitchDifficulty::INTERMEDIATE);}}), Entrance(FIRE_TEMPLE_FIRE_MAZE_UPPER, {[]{return true;}}), Entrance(FIRE_TEMPLE_WEST_CENTRAL_LOWER, {[]{return true;}}), @@ -375,7 +361,7 @@ void AreaTable_Init_FireTemple() { }, { //Exits Entrance(FIRE_TEMPLE_ENTRYWAY, {[]{return true;}}), - Entrance(FIRE_TEMPLE_MQ_BOSS_ROOM, {[]{return IsAdult && CanUse(GORON_TUNIC) && CanUse(MEGATON_HAMMER) && BossKeyFireTemple && ((HasFireSource && (LogicFireBossDoorJump || HoverBoots)) || HasAccessTo(FIRE_TEMPLE_MQ_UPPER));}}), + Entrance(FIRE_TEMPLE_BOSS_ENTRYWAY, {[]{return IsAdult && CanUse(GORON_TUNIC) && CanUse(MEGATON_HAMMER) && BossKeyFireTemple && ((HasFireSource && (LogicFireBossDoorJump || HoverBoots)) || HasAccessTo(FIRE_TEMPLE_MQ_UPPER));}}), Entrance(FIRE_TEMPLE_MQ_LOWER_LOCKED_DOOR, {[]{return SmallKeys(FIRE_TEMPLE, 5) && (IsAdult || KokiriSword);}}), Entrance(FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, {[]{return IsAdult && FireTimer >= 24 && CanUse(MEGATON_HAMMER);}}), }); @@ -443,14 +429,41 @@ void AreaTable_Init_FireTemple() { LocationAccess(FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_WALL_MAZE, {[]{return IsAdult && CanUse(HOOKSHOT) && SmallKeys(FIRE_TEMPLE, 5);}}), //Trick: (IsAdult && CanUse(HOOKSHOT) && SmallKeys(FIRE_TEMPLE, 5)) || (LogicFireMQAboveMazeGS && IsAdult && CanUse(LONGSHOT)) }, {}); - - areaTable[FIRE_TEMPLE_MQ_BOSS_ROOM] = Area("Fire Temple MQ Boss Room", "Fire Temple", FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, { - //Events - EventAccess(&FireTempleClear, {[]{return true;}}), - }, { - //Locations - LocationAccess(FIRE_TEMPLE_VOLVAGIA_HEART, {[]{return true;}}), - LocationAccess(VOLVAGIA, {[]{return true;}}), - }, {}); } + + /*--------------------------- + | BOSS ROOM | + ---------------------------*/ + areaTable[FIRE_TEMPLE_BOSS_ENTRYWAY] = + Area("Fire Temple Boss Entryway", "Fire Temple", FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, + { + // Exits + Entrance(FIRE_TEMPLE_NEAR_BOSS_ROOM, { [] { return Dungeon::FireTemple.IsVanilla() && false; } }), + Entrance(FIRE_TEMPLE_MQ_LOWER, { [] { return Dungeon::FireTemple.IsMQ() && false; } }), + Entrance(FIRE_TEMPLE_BOSS_ROOM, { [] { return true; } }), + }); + + areaTable[FIRE_TEMPLE_BOSS_ROOM] = + Area("Fire Temple Boss Room", "Fire Temple", NONE, NO_DAY_NIGHT_CYCLE, + { + // Events + EventAccess(&FireTempleClear, + { [] { return FireTempleClear || (FireTimer >= 64 && CanUse(MEGATON_HAMMER)); }, + /*Glitched*/ + [] { + return FireTimer >= 48 && + ((CanUse(STICKS) && CanDoGlitch(GlitchType::QPA, GlitchDifficulty::NOVICE)) || + CanUse(MEGATON_HAMMER)) && + Bombs && CanDoGlitch(GlitchType::ISG, GlitchDifficulty::INTERMEDIATE); + } }), + }, + { + // Locations + LocationAccess(FIRE_TEMPLE_VOLVAGIA_HEART, { [] { return FireTempleClear; } }), + LocationAccess(VOLVAGIA, { [] { return FireTempleClear; } }), + }, + { + // Exits + Entrance(FIRE_TEMPLE_BOSS_ENTRYWAY, { [] { return false; } }), + }); } diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_forest_temple.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_forest_temple.cpp index 138f6672b..cfed92c33 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_forest_temple.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_forest_temple.cpp @@ -58,7 +58,7 @@ void AreaTable_Init_ForestTemple() { Entrance(FOREST_TEMPLE_EAST_CORRIDOR, {[]{return false;}, /*Glitched*/[]{return CanDoGlitch(GlitchType::BombHover, GlitchDifficulty::NOVICE);}}), Entrance(FOREST_TEMPLE_BOSS_REGION, {[]{return ForestTempleMeg;}}), - Entrance(FOREST_TEMPLE_BOSS_ROOM, {[]{return false;}, + Entrance(FOREST_TEMPLE_BOSS_ENTRYWAY, {[]{return false;}, /*Glitched*/[]{return IsAdult && (CanUse(HOOKSHOT) || CanUse(BOW) || CanUse(SLINGSHOT)) && GlitchForestBKSkip;}}), }); @@ -97,7 +97,7 @@ void AreaTable_Init_ForestTemple() { /*Glitched*/[]{return CanDoGlitch(GlitchType::HookshotJump_Boots, GlitchDifficulty::INTERMEDIATE) || (IsAdult && CanDoGlitch(GlitchType::HoverBoost, GlitchDifficulty::NOVICE)) || (Bombs && HasBombchus && CanDoGlitch(GlitchType::BombHover, GlitchDifficulty::NOVICE) && CanDoGlitch(GlitchType::ISG, GlitchDifficulty::INTERMEDIATE));}}), Entrance(FOREST_TEMPLE_MAP_ROOM, {[]{return true;}}), Entrance(FOREST_TEMPLE_SEWER, {[]{return GoldScale || CanUse(IRON_BOOTS) || HasAccessTo(FOREST_TEMPLE_NE_OUTDOORS_UPPER);}}), - Entrance(FOREST_TEMPLE_BOSS_ROOM, {[]{return false;}, + Entrance(FOREST_TEMPLE_BOSS_ENTRYWAY, {[]{return false;}, /*Glitched*/[]{return CanDoGlitch(GlitchType::HookshotJump_Boots, GlitchDifficulty::INTERMEDIATE);}}), }); @@ -304,19 +304,7 @@ void AreaTable_Init_ForestTemple() { }, { //Exits Entrance(FOREST_TEMPLE_LOBBY, {[]{return true;}}), - Entrance(FOREST_TEMPLE_BOSS_ROOM, {[]{return BossKeyForestTemple;}}), - }); - - areaTable[FOREST_TEMPLE_BOSS_ROOM] = Area("Forest Temple Boss Room", "Forest Temple", FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, { - //Events - EventAccess(&ForestTempleClear, {[]{return ForestTempleClear || ((IsAdult || KokiriSword) && (CanUse(HOOKSHOT) || CanUse(BOW) || CanUse(SLINGSHOT)));}}), - }, { - //Locations - LocationAccess(FOREST_TEMPLE_PHANTOM_GANON_HEART, {[]{return ForestTempleClear;}}), - LocationAccess(PHANTOM_GANON, {[]{return ForestTempleClear;}}), - }, { - //Exits - Entrance(FOREST_TEMPLE_ENTRYWAY, {[]{return ForestTempleClear;}}), + Entrance(FOREST_TEMPLE_BOSS_ENTRYWAY, {[]{return BossKeyForestTemple;}}), }); } @@ -439,14 +427,43 @@ void AreaTable_Init_ForestTemple() { Entrance(FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, {[]{return true;}}), }); - areaTable[FOREST_TEMPLE_MQ_BOSS_REGION] = Area("Forest Temple MQ Boss Region", "Forest Temple", FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, { - //Events - EventAccess(&ForestTempleClear, {[]{return ForestTempleClear || BossKeyForestTemple;}}), - }, { + areaTable[FOREST_TEMPLE_MQ_BOSS_REGION] = Area("Forest Temple MQ Boss Region", "Forest Temple", FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { //Locations LocationAccess(FOREST_TEMPLE_MQ_BASEMENT_CHEST, {[]{return true;}}), - LocationAccess(FOREST_TEMPLE_PHANTOM_GANON_HEART, {[]{return BossKeyForestTemple;}}), - LocationAccess(PHANTOM_GANON, {[]{return BossKeyForestTemple;}}), - }, {}); + }, { + //Exits + Entrance(FOREST_TEMPLE_BOSS_ENTRYWAY, {[]{return BossKeyForestTemple;}}), + }); } + + /*--------------------------- + | BOSS ROOM | + ---------------------------*/ + areaTable[FOREST_TEMPLE_BOSS_ENTRYWAY] = + Area("Forest Temple Boss Entryway", "Forest Temple", FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, + { + // Exits + Entrance(FOREST_TEMPLE_BOSS_REGION, { [] { return Dungeon::ForestTemple.IsVanilla() && false; } }), + Entrance(FOREST_TEMPLE_MQ_BOSS_REGION, { [] { return Dungeon::ForestTemple.IsMQ() && false; } }), + Entrance(FOREST_TEMPLE_BOSS_ROOM, { [] { return true; } }), + }); + + areaTable[FOREST_TEMPLE_BOSS_ROOM] = Area( + "Forest Temple Boss Room", "Forest Temple", NONE, NO_DAY_NIGHT_CYCLE, + { + // Events + EventAccess(&ForestTempleClear, { [] { + return ForestTempleClear || ((CanUse(KOKIRI_SWORD) || CanUse(MASTER_SWORD) || CanUse(BIGGORON_SWORD)) && + (CanUse(HOOKSHOT) || CanUse(BOW) || CanUse(SLINGSHOT))); + } }), + }, + { + // Locations + LocationAccess(FOREST_TEMPLE_PHANTOM_GANON_HEART, { [] { return ForestTempleClear; } }), + LocationAccess(PHANTOM_GANON, { [] { return ForestTempleClear; } }), + }, + { + // Exits + Entrance(FOREST_TEMPLE_BOSS_ENTRYWAY, { [] { return false; } }), + }); } diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_jabujabus_belly.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_jabujabus_belly.cpp index 9d24ab031..5cb561c7e 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_jabujabus_belly.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_jabujabus_belly.cpp @@ -162,23 +162,10 @@ void AreaTable_Init_JabuJabusBelly() { }, { //Exits Entrance(JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return true;}}), - Entrance(JABU_JABUS_BELLY_BOSS_ROOM, {[]{return CanUse(BOOMERANG);}, + Entrance(JABU_JABUS_BELLY_BOSS_ENTRYWAY, {[]{return CanUse(BOOMERANG);}, /*Glitched*/[]{return (CanUse(HOVER_BOOTS) && (CanUse(BOW) || CanUse(SLINGSHOT))) || CanDoGlitch(GlitchType::HookshotClip, GlitchDifficulty::NOVICE) || (CanUse(STICKS) && CanDoGlitch(GlitchType::QPA, GlitchDifficulty::NOVICE)) || (Bombs && CanDoGlitch(GlitchType::ISG, GlitchDifficulty::NOVICE)) || CanDoGlitch(GlitchType::SuperStab, GlitchDifficulty::NOVICE);}}), }); - - areaTable[JABU_JABUS_BELLY_BOSS_ROOM] = Area("Jabu Jabus Belly Boss Room", "Jabu Jabus Belly", JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, { - //Events - EventAccess(&JabuJabusBellyClear, {[]{return JabuJabusBellyClear || CanUse(BOOMERANG);}}), - }, { - //Locations - LocationAccess(JABU_JABUS_BELLY_BARINADE_HEART, {[]{return JabuJabusBellyClear;}}), - LocationAccess(BARINADE, {[]{return JabuJabusBellyClear;}}), - }, { - //Exits - Entrance(JABU_JABUS_BELLY_NEAR_BOSS_ROOM, {[]{return JabuJabusBellyClear;}}), - Entrance(JABU_JABUS_BELLY_ENTRYWAY, {[]{return JabuJabusBellyClear;}}), - }); } /*--------------------------- @@ -234,12 +221,39 @@ void AreaTable_Init_JabuJabusBelly() { //Locations LocationAccess(JABU_JABUS_BELLY_MQ_COW, {[]{return CanPlay(EponasSong);}}), LocationAccess(JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, {[]{return true;}}), - LocationAccess(JABU_JABUS_BELLY_BARINADE_HEART, {[]{return true;}}), - LocationAccess(BARINADE, {[]{return true;}}), LocationAccess(JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, {[]{return true;}}), }, { //Exits Entrance(JABU_JABUS_BELLY_MQ_MAIN, {[]{return true;}}), + Entrance(JABU_JABUS_BELLY_BOSS_ENTRYWAY, {[]{return CanUse(SLINGSHOT);}}), }); } + + /*--------------------------- + | BOSS ROOM | + ---------------------------*/ + areaTable[JABU_JABUS_BELLY_BOSS_ENTRYWAY] = + Area("Jabu Jabus Belly Boss Entryway", "Jabu Jabus Belly", JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, + { + // Exits + Entrance(JABU_JABUS_BELLY_NEAR_BOSS_ROOM, { [] { return Dungeon::JabuJabusBelly.IsVanilla(); } }), + Entrance(JABU_JABUS_BELLY_MQ_BOSS_AREA, { [] { return Dungeon::JabuJabusBelly.IsMQ(); } }), + Entrance(JABU_JABUS_BELLY_BOSS_ROOM, { [] { return true; } }), + }); + + areaTable[JABU_JABUS_BELLY_BOSS_ROOM] = + Area("Jabu Jabus Belly Boss Room", "Jabu Jabus Belly", NONE, NO_DAY_NIGHT_CYCLE, + { + // Events + EventAccess(&JabuJabusBellyClear, { [] { return JabuJabusBellyClear || CanUse(BOOMERANG); } }), + }, + { + // Locations + LocationAccess(JABU_JABUS_BELLY_BARINADE_HEART, { [] { return JabuJabusBellyClear; } }), + LocationAccess(BARINADE, { [] { return JabuJabusBellyClear; } }), + }, + { + // Exits + Entrance(JABU_JABUS_BELLY_BOSS_ENTRYWAY, { [] { return false; } }), + }); } diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_shadow_temple.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_shadow_temple.cpp index e9216f743..5d0a4e085 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_shadow_temple.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_shadow_temple.cpp @@ -81,18 +81,16 @@ void AreaTable_Init_ShadowTemple() { Entrance(SHADOW_TEMPLE_BEYOND_BOAT, {[]{return CanPlay(ZeldasLullaby) && SmallKeys(SHADOW_TEMPLE, 4, 5);}}), }); - areaTable[SHADOW_TEMPLE_BEYOND_BOAT] = Area("Shadow Temple Beyond Boat", "Shadow Temple", SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, { - //Events - EventAccess(&ShadowTempleClear, {[]{return ShadowTempleClear || (SmallKeys(SHADOW_TEMPLE, 5) && BossKeyShadowTemple && (Bow || CanUse(DISTANT_SCARECROW) || (LogicShadowStatue && HasBombchus)));}}), - }, { + areaTable[SHADOW_TEMPLE_BEYOND_BOAT] = Area("Shadow Temple Beyond Boat", "Shadow Temple", SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { //Locations LocationAccess(SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST, {[]{return CanUse(DINS_FIRE);}}), LocationAccess(SHADOW_TEMPLE_BOSS_KEY_CHEST, {[]{return CanUse(DINS_FIRE);}}), LocationAccess(SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST, {[]{return true;}}), - LocationAccess(SHADOW_TEMPLE_BONGO_BONGO_HEART, {[]{return SmallKeys(SHADOW_TEMPLE, 5) && BossKeyShadowTemple && (Bow || CanUse(DISTANT_SCARECROW) || (LogicShadowStatue && HasBombchus));}}), - LocationAccess(BONGO_BONGO, {[]{return SmallKeys(SHADOW_TEMPLE, 5) && BossKeyShadowTemple && (Bow || CanUse(DISTANT_SCARECROW) || (LogicShadowStatue && HasBombchus));}}), LocationAccess(SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT, {[]{return true;}}), - }, {}); + }, { + //Exits + Entrance(SHADOW_TEMPLE_BOSS_ENTRYWAY, {[]{return (CanUse(BOW) || CanUse(DISTANT_SCARECROW) || (LogicShadowStatue && HasBombchus)) && SmallKeys(SHADOW_TEMPLE, 5) && CanUse(HOVER_BOOTS) && BossKeyShadowTemple;}}) + }); } /*--------------------------- @@ -164,18 +162,14 @@ void AreaTable_Init_ShadowTemple() { Entrance(SHADOW_TEMPLE_MQ_BEYOND_BOAT, {[]{return CanPlay(ZeldasLullaby) && SmallKeys(SHADOW_TEMPLE, 5);}}), }); - areaTable[SHADOW_TEMPLE_MQ_BEYOND_BOAT] = Area("Shadow Temple MQ Beyond Boat", "Shadow Temple", SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, { - //Events - EventAccess(&ShadowTempleClear, {[]{return ShadowTempleClear || ((Bow || (LogicShadowStatue && HasBombchus)) && BossKeyShadowTemple);}}), - }, { + areaTable[SHADOW_TEMPLE_MQ_BEYOND_BOAT] = Area("Shadow Temple MQ Beyond Boat", "Shadow Temple", SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LocationAccess(SHADOW_TEMPLE_BONGO_BONGO_HEART, {[]{return (Bow || (LogicShadowStatue && HasBombchus)) && BossKeyShadowTemple;}}), - LocationAccess(BONGO_BONGO, {[]{return (Bow || (LogicShadowStatue && HasBombchus)) && BossKeyShadowTemple;}}), LocationAccess(SHADOW_TEMPLE_MQ_GS_AFTER_SHIP, {[]{return true;}}), LocationAccess(SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, {[]{return Bow || (LogicShadowStatue && HasBombchus);}}), }, { //Exits Entrance(SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, {[]{return Bow && CanPlay(SongOfTime) && IsAdult && CanUse(LONGSHOT);}}), + Entrance(SHADOW_TEMPLE_BOSS_ENTRYWAY, {[]{return (CanUse(BOW) || (LogicShadowStatue && HasBombchus)) && CanUse(HOVER_BOOTS) && BossKeyShadowTemple;}}), }); areaTable[SHADOW_TEMPLE_MQ_INVISIBLE_MAZE] = Area("Shadow Temple MQ Invisible Maze", "Shadow Temple", SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { @@ -186,4 +180,37 @@ void AreaTable_Init_ShadowTemple() { LocationAccess(SHADOW_TEMPLE_MQ_FREESTANDING_KEY, {[]{return true;}}), }, {}); } + + /*--------------------------- + | BOSS ROOM | + ---------------------------*/ + areaTable[SHADOW_TEMPLE_BOSS_ENTRYWAY] = + Area("Shadow Temple Boss Entryway", "Shadow Temple", SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, + { + // Exits + Entrance(SHADOW_TEMPLE_BEYOND_BOAT, { [] { return Dungeon::ShadowTemple.IsVanilla() && false; } }), + Entrance(SHADOW_TEMPLE_MQ_BEYOND_BOAT, { [] { return Dungeon::ShadowTemple.IsMQ() && false; } }), + Entrance(SHADOW_TEMPLE_BOSS_ROOM, { [] { return true; } }), + }); + + areaTable[SHADOW_TEMPLE_BOSS_ROOM] = + Area("Shadow Temple Boss Room", "Shadow Temple", NONE, NO_DAY_NIGHT_CYCLE, + { + // Events + EventAccess(&ShadowTempleClear, { [] { + return ShadowTempleClear || + ((CanUse(LENS_OF_TRUTH) || ((Dungeon::ShadowTemple.IsVanilla() && LogicLensShadowBack) || + (Dungeon::ShadowTemple.IsMQ() && LogicLensShadowMQBack))) && + (CanUse(KOKIRI_SWORD) || CanUse(MASTER_SWORD) || CanUse(BIGGORON_SWORD))); + } }), + }, + { + // Locations + LocationAccess(SHADOW_TEMPLE_BONGO_BONGO_HEART, { [] { return ShadowTempleClear; } }), + LocationAccess(BONGO_BONGO, { [] { return ShadowTempleClear; } }), + }, + { + // Exits + Entrance(SHADOW_TEMPLE_BOSS_ENTRYWAY, { [] { return false; } }), + }); } diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_spirit_temple.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_spirit_temple.cpp index cfe99555b..32e71cb8e 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_spirit_temple.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_spirit_temple.cpp @@ -122,16 +122,22 @@ void AreaTable_Init_SpiritTemple() { Entrance(SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR, {[]{return SmallKeys(SPIRIT_TEMPLE, 5) && (LogicSpiritWall || CanUse(LONGSHOT) || HasBombchus || ((Bombs || Nuts || CanUse(DINS_FIRE)) && (Bow || CanUse(HOOKSHOT) || Hammer)));}}), }); - areaTable[SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR] = Area("Spirit Temple Beyond Final Locked Door", "Spirit Temple", SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, { - //Events - EventAccess(&SpiritTempleClear, {[]{return SpiritTempleClear || (MirrorShield && HasExplosives && Hookshot && BossKeySpiritTemple);}}), - }, { + areaTable[SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR] = Area("Spirit Temple Beyond Final Locked Door", "Spirit Temple", SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { //Locations LocationAccess(SPIRIT_TEMPLE_BOSS_KEY_CHEST, {[]{return CanPlay(ZeldasLullaby) && ((CanTakeDamage && LogicFlamingChests) || (Bow && Hookshot));}}), LocationAccess(SPIRIT_TEMPLE_TOPMOST_CHEST, {[]{return MirrorShield || (SunlightArrows && CanUse(LIGHT_ARROWS));}}), - LocationAccess(SPIRIT_TEMPLE_TWINROVA_HEART, {[]{return MirrorShield && HasExplosives && Hookshot && BossKeySpiritTemple;}}), - LocationAccess(TWINROVA, {[]{return MirrorShield && HasExplosives && Hookshot && BossKeySpiritTemple;}}), - }, {}); + }, { + //Exits + Entrance(SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, {[]{return MirrorShield && HasExplosives && Hookshot;}}), + }); + + areaTable[SPIRIT_TEMPLE_INSIDE_STATUE_HEAD] = + Area("Spirit Temple Inside Statue Head", "Spirit Temple", SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, + { + // Exits + Entrance(SPIRIT_TEMPLE_CENTRAL_CHAMBER, { [] { return true; } }), + Entrance(SPIRIT_TEMPLE_BOSS_ENTRYWAY, { [] { return BossKeySpiritTemple; } }), + }); } /*--------------------------- @@ -209,15 +215,21 @@ void AreaTable_Init_SpiritTemple() { LocationAccess(SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM, {[]{return SmallKeys(SPIRIT_TEMPLE, 7) && Hammer && Ocarina && SongOfTime && EponasSong && SunsSong && SongOfStorms && ZeldasLullaby;}}), }, {}); - areaTable[SPIRIT_TEMPLE_MQ_BOSS_AREA] = Area("Spirit Temple MQ Boss Area", "Spirit Temple", SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, { - //Events - EventAccess(&SpiritTempleClear, {[]{return SpiritTempleClear || (MirrorShield && BossKeySpiritTemple);}}), - }, { + areaTable[SPIRIT_TEMPLE_MQ_BOSS_AREA] = Area("Spirit Temple MQ Boss Area", "Spirit Temple", SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { //Locations LocationAccess(SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST, {[]{return LogicLensSpiritMQ || CanUse(LENS_OF_TRUTH);}}), - LocationAccess(SPIRIT_TEMPLE_TWINROVA_HEART, {[]{return MirrorShield && BossKeySpiritTemple;}}), - LocationAccess(TWINROVA, {[]{return MirrorShield && BossKeySpiritTemple;}}), - }, {}); + }, { + //Exits + Entrance(SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD, {[]{return MirrorShield && Hookshot;}}), + }); + + areaTable[SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD] = + Area("Spirit Temple MQ Inside Statue Head", "Spirit Temple", SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, + { + // Exits + Entrance(SPIRIT_TEMPLE_MQ_SHARED, { [] { return true; } }), + Entrance(SPIRIT_TEMPLE_BOSS_ENTRYWAY, { [] { return BossKeySpiritTemple; } }), + }); areaTable[SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND] = Area("Spirit Temple MQ Mirror Shield Hand", "Spirit Temple", SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { //Locations @@ -229,4 +241,35 @@ void AreaTable_Init_SpiritTemple() { LocationAccess(SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, {[]{return true;}}), }, {}); } + + /*--------------------------- + | BOSS ROOM | + ---------------------------*/ + areaTable[SPIRIT_TEMPLE_BOSS_ENTRYWAY] = Area( + "Spirit Temple Boss Entryway", "Spirit Temple", SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, + { + // Exits + Entrance(SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, { [] { return Dungeon::SpiritTemple.IsVanilla() && false; } }), + Entrance(SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD, { [] { return Dungeon::SpiritTemple.IsMQ() && false; } }), + Entrance(SPIRIT_TEMPLE_BOSS_ROOM, { [] { return true; } }), + }); + + areaTable[SPIRIT_TEMPLE_BOSS_ROOM] = Area( + "Spirit Temple Boss Room", "Spirit Temple", NONE, NO_DAY_NIGHT_CYCLE, + { + // Events + EventAccess(&SpiritTempleClear, { [] { + return SpiritTempleClear || (CanUse(MIRROR_SHIELD) && + (CanUse(KOKIRI_SWORD) || CanUse(MASTER_SWORD) || CanUse(BIGGORON_SWORD))); + } }), + }, + { + // Locations + LocationAccess(SPIRIT_TEMPLE_TWINROVA_HEART, { [] { return SpiritTempleClear; } }), + LocationAccess(TWINROVA, { [] { return SpiritTempleClear; } }), + }, + { + // Exits + Entrance(SPIRIT_TEMPLE_BOSS_ENTRYWAY, { [] { return false; } }), + }); } diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_water_temple.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_water_temple.cpp index d2f566b2c..212f4bf1a 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_water_temple.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_water_temple.cpp @@ -275,19 +275,7 @@ void AreaTable_Init_WaterTemple() { }, {}, { //Exits Entrance(WATER_TEMPLE_LOBBY, {[]{return true;}}), - Entrance(WATER_TEMPLE_BOSS_ROOM, {[]{return BossKeyWaterTemple;}}), - }); - - areaTable[WATER_TEMPLE_BOSS_ROOM] = Area("Water Temple Boss Room", "Water Temple", WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, { - //Events - EventAccess(&WaterTempleClear, {[]{return WaterTempleClear || (CanUse(HOOKSHOT) && (CanUse(KOKIRI_SWORD) || CanUse(MASTER_SWORD) || CanUse(BIGGORON_SWORD)));}}), - }, { - //Locations - LocationAccess(WATER_TEMPLE_MORPHA_HEART, {[]{return WaterTempleClear;}}), - LocationAccess(MORPHA, {[]{return WaterTempleClear;}}), - }, { - //Exits - Entrance(WATER_TEMPLE_ENTRYWAY, {[]{return WaterTempleClear;}}), + Entrance(WATER_TEMPLE_BOSS_ENTRYWAY, {[]{return BossKeyWaterTemple;}}), }); } @@ -295,18 +283,12 @@ void AreaTable_Init_WaterTemple() { | MASTER QUEST DUNGEON | ---------------------------*/ if (Dungeon::WaterTemple.IsMQ()) { - areaTable[WATER_TEMPLE_MQ_LOBBY] = Area("Water Temple MQ Lobby", "Water Temple", WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, { - //Events - EventAccess(&WaterTempleClear, {[]{return BossKeyWaterTemple && IsAdult && CanUse(LONGSHOT);}}), - }, { - //Locations - LocationAccess(WATER_TEMPLE_MORPHA_HEART, {[]{return BossKeyWaterTemple && IsAdult && CanUse(LONGSHOT);}}), - LocationAccess(MORPHA, {[]{return BossKeyWaterTemple && IsAdult && CanUse(LONGSHOT);}}), - }, { + areaTable[WATER_TEMPLE_MQ_LOBBY] = Area("Water Temple MQ Lobby", "Water Temple", WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits Entrance(WATER_TEMPLE_ENTRYWAY, {[]{return true;}}), Entrance(WATER_TEMPLE_MQ_DIVE, {[]{return IsAdult && WaterTimer >= 24 && CanUse(IRON_BOOTS);}}), Entrance(WATER_TEMPLE_MQ_DARK_LINK_REGION, {[]{return SmallKeys(WATER_TEMPLE, 1) && IsAdult && CanUse(LONGSHOT);}}), + Entrance(WATER_TEMPLE_BOSS_ENTRYWAY, {[]{return BossKeyWaterTemple && IsAdult && CanUse(LONGSHOT);}}), }); areaTable[WATER_TEMPLE_MQ_DIVE] = Area("Water Temple MQ Dive", "Water Temple", WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { @@ -348,4 +330,35 @@ void AreaTable_Init_WaterTemple() { //Trick: LogicWaterMQLockedGS || (SmallKeys(WATER_TEMPLE, 2) && (HoverBoots || CanUse(SCARECROW) || LogicWaterNorthBasementLedgeJump)) }, {}); } + + /*--------------------------- + | BOSS ROOM | + ---------------------------*/ + areaTable[WATER_TEMPLE_BOSS_ENTRYWAY] = + Area("Water Temple Boss Entryway", "Water Temple", WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, + { + // Exits + Entrance(WATER_TEMPLE_PRE_BOSS_ROOM, { [] { return Dungeon::WaterTemple.IsVanilla() && false; } }), + Entrance(WATER_TEMPLE_MQ_LOBBY, { [] { return Dungeon::WaterTemple.IsMQ() && false; } }), + Entrance(WATER_TEMPLE_BOSS_ROOM, { [] { return true; } }), + }); + + areaTable[WATER_TEMPLE_BOSS_ROOM] = Area( + "Water Temple Boss Room", "Water Temple", NONE, NO_DAY_NIGHT_CYCLE, + { + // Events + EventAccess(&WaterTempleClear, { [] { + return WaterTempleClear || + (CanUse(HOOKSHOT) && (CanUse(KOKIRI_SWORD) || CanUse(MASTER_SWORD) || CanUse(BIGGORON_SWORD))); + } }), + }, + { + // Locations + LocationAccess(WATER_TEMPLE_MORPHA_HEART, { [] { return WaterTempleClear; } }), + LocationAccess(MORPHA, { [] { return WaterTempleClear; } }), + }, + { + // Exits + Entrance(WATER_TEMPLE_BOSS_ENTRYWAY, { [] { return false; } }), + }); } diff --git a/soh/soh/Enhancements/randomizer/3drando/rando_main.cpp b/soh/soh/Enhancements/randomizer/3drando/rando_main.cpp index c2111e295..c7114dd37 100644 --- a/soh/soh/Enhancements/randomizer/3drando/rando_main.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/rando_main.cpp @@ -5,9 +5,9 @@ #include "location_access.hpp" #include "rando_main.hpp" // #include -#include +#include #include -#include +#include #define TICKS_PER_SEC 268123480.0 @@ -17,14 +17,14 @@ void RandoMain::GenerateRando(std::unordered_map cvarS LocationTable_Init(); // std::string settingsFileName = "./randomizer/latest_settings.json"; - // CVar_SetString("gLoadedPreset", settingsFileName.c_str()); + // CVarSetString("gLoadedPreset", settingsFileName.c_str()); std::string fileName = Ship::Window::GetPathRelativeToAppDirectory(GenerateRandomizer(cvarSettings, excludedLocations).c_str()); - CVar_SetString("gSpoilerLog", fileName.c_str()); + CVarSetString("gSpoilerLog", fileName.c_str()); - CVar_Save(); - CVar_Load(); - CVar_SetS32("gNewSeedGenerated", 1); + CVarSave(); + CVarLoad(); + CVarSetInteger("gNewSeedGenerated", 1); } std::array* RandoMain::GetFullItemTable() { diff --git a/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.cpp b/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.cpp index bcadae7ed..8c404f354 100644 --- a/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.cpp @@ -164,6 +164,17 @@ string_view dungeonEntrancesDesc = "Shuffle the pool of dungeon entrances, "Temple, Bottom of the Well and Gerudo Training\n" // "Ground are opened for both adult and child."; // /*------------------------------ // +| BOSS ENTRANCES | // +------------------------------*/ // +string_view bossEntrancesDesc = "Shuffle the pool of dungeon boss entrances.\n" // + "This affects the boss rooms of all stone and\n" // + "medallion dungeons.\n" // + "\n" // + "Child and adult boss rooms can be shuffled\n" // + "separately.\n" // + "Child may be expected to defeat Phantom Ganon\n" // + "and/or Bongo Bongo."; // +/*------------------------------ // | OVERWORLD ENTRANCES | // ------------------------------*/ // string_view overworldEntrancesDesc = "Shuffle the pool of Overworld entrances, which\n" // @@ -238,7 +249,9 @@ string_view decoupledEntrancesDesc = "Decouple entrances when shuffling them. "you came from when you go back through an\n" // "entrance. This also adds the one-way entrance from" "Gerudo Valley to Lake Hylia in the pool of\n" // - "overworld entrances when they are shuffled."; // + "overworld entrances when they are shuffled.\n" // + "Boss entrances are currently excluded from this\n"// + "and remain coupled regardless."; // /*------------------------------ // | BOMBCHUS IN LOGIC | // ------------------------------*/ // diff --git a/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.hpp b/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.hpp index 4594cc3a6..096ebf658 100644 --- a/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.hpp @@ -57,6 +57,8 @@ extern string_view shuffleEntrancesDesc; extern string_view dungeonEntrancesDesc; +extern string_view bossEntrancesDesc; + extern string_view overworldEntrancesDesc; extern string_view grottoEntrancesDesc; diff --git a/soh/soh/Enhancements/randomizer/3drando/settings.cpp b/soh/soh/Enhancements/randomizer/3drando/settings.cpp index 4dfa26afb..1a4e10a65 100644 --- a/soh/soh/Enhancements/randomizer/3drando/settings.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/settings.cpp @@ -89,6 +89,7 @@ namespace Settings { uint8_t ResolvedStartingAge; Option ShuffleEntrances = Option::Bool("Shuffle Entrances", {"Off", "On"}, {shuffleEntrancesDesc}); Option ShuffleDungeonEntrances = Option::U8 ("Dungeon Entrances", {"Off", "On", "On + Ganon"}, {dungeonEntrancesDesc}); + Option ShuffleBossEntrances = Option::U8 ("Boss Entrances", {"Off", "Age Restricted", "Full"}, {bossEntrancesDesc}); Option ShuffleOverworldEntrances = Option::Bool("Overworld Entrances", {"Off", "On"}, {overworldEntrancesDesc}); Option ShuffleInteriorEntrances = Option::U8 ("Interior Entrances", {"Off", "Simple", "All"}, {interiorEntrancesOff, interiorEntrancesSimple, interiorEntrancesAll}); Option ShuffleGrottoEntrances = Option::Bool("Grottos Entrances", {"Off", "On"}, {grottoEntrancesDesc}); @@ -125,6 +126,7 @@ namespace Settings { &StartingAge, &ShuffleEntrances, &ShuffleDungeonEntrances, + &ShuffleBossEntrances, &ShuffleOverworldEntrances, &ShuffleInteriorEntrances, &ShuffleGrottoEntrances, @@ -314,6 +316,16 @@ namespace Settings { Option GossipStoneHints = Option::U8 ("Gossip Stone Hints", {"No Hints", "Need Nothing", "Mask of Truth", "Stone of Agony"}, {gossipStonesHintsDesc}, OptionCategory::Setting, HINTS_NEED_NOTHING); Option ClearerHints = Option::U8 ("Hint Clarity", {"Obscure", "Ambiguous", "Clear"}, {obscureHintsDesc, ambiguousHintsDesc, clearHintsDesc}); Option HintDistribution = Option::U8 ("Hint Distribution", {"Useless", "Balanced", "Strong", "Very Strong"}, {uselessHintsDesc, balancedHintsDesc, strongHintsDesc, veryStrongHintsDesc}, OptionCategory::Setting, 1); // Balanced + Option AltarHintText = Option::Bool("ToT Altar Hint", {"Off", "On"}, {"", ""}, OptionCategory::Setting, 1); + Option GanondorfHintText = Option::Bool("Ganondorf LA Hint", {"Off", "On"}, {"", ""}, OptionCategory::Setting, 1); + Option DampeHintText = Option::Bool("Dampe's Diary Hint", {"Off", "On"}, {"", ""}, OptionCategory::Setting, 0); + Option WarpSongHints = Option::Bool("Warp Songs Hints", {"Off", "On"}, {"", ""}, OptionCategory::Setting, 0); + Option Kak10GSHintText = Option::Bool("10 GS Hint", {"Off", "On"}, {"", ""}, OptionCategory::Setting, 0); + Option Kak20GSHintText = Option::Bool("20 GS Hint", {"Off", "On"}, {"", ""}, OptionCategory::Setting, 0); + Option Kak30GSHintText = Option::Bool("30 GS Hint", {"Off", "On"}, {"", ""}, OptionCategory::Setting, 0); + Option Kak40GSHintText = Option::Bool("40 GS Hint", {"Off", "On"}, {"", ""}, OptionCategory::Setting, 0); + Option Kak50GSHintText = Option::Bool("50 GS Hint", {"Off", "On"}, {"", ""}, OptionCategory::Setting, 0); + Option ScrubHintText = Option::Bool("Scrub Hint Text", {"Off", "On"}, {"", ""}, OptionCategory::Setting, 0); Option CompassesShowReward = Option::U8 ("Compasses Show Rewards", {"No", "Yes"}, {compassesShowRewardsDesc}, OptionCategory::Setting, 1); Option CompassesShowWotH = Option::U8 ("Compasses Show WotH", {"No", "Yes"}, {compassesShowWotHDesc}, OptionCategory::Setting, 1); Option MapsShowDungeonMode = Option::U8 ("Maps Show Dungeon Modes",{"No", "Yes"}, {mapsShowDungeonModesDesc}, OptionCategory::Setting, 1); @@ -332,6 +344,16 @@ namespace Settings { &GossipStoneHints, &ClearerHints, &HintDistribution, + &AltarHintText, + &GanondorfHintText, + &DampeHintText, + &WarpSongHints, + &Kak10GSHintText, + &Kak20GSHintText, + &Kak30GSHintText, + &Kak40GSHintText, + &Kak50GSHintText, + &ScrubHintText, &CompassesShowReward, &CompassesShowWotH, &MapsShowDungeonMode, @@ -509,18 +531,18 @@ namespace Settings { &StartingRutoBottle, }; - Option StartingZeldasLullaby = Option::U8 ("Zelda's Lullaby", {"Off", "On"}, {""}); - Option StartingEponasSong = Option::U8 ("Epona's Song", {"Off", "On"}, {""}); - Option StartingSariasSong = Option::U8 ("Saria's Song", {"Off", "On"}, {""}); - Option StartingSunsSong = Option::U8 ("Sun's Song", {"Off", "On"}, {""}); - Option StartingSongOfTime = Option::U8 ("Song of Time", {"Off", "On"}, {""}); - Option StartingSongOfStorms = Option::U8 ("Song of Storms", {"Off", "On"}, {""}); - Option StartingMinuetOfForest = Option::U8 ("Minuet of Forest", {"Off", "On"}, {""}); - Option StartingBoleroOfFire = Option::U8 ("Bolero of Fire", {"Off", "On"}, {""}); - Option StartingSerenadeOfWater = Option::U8 ("Serenade of Water", {"Off", "On"}, {""}); - Option StartingRequiemOfSpirit = Option::U8 ("Requiem of Spirit", {"Off", "On"}, {""}); - Option StartingNocturneOfShadow = Option::U8 ("Nocturne of Shadow", {"Off", "On"}, {""}); - Option StartingPreludeOfLight = Option::U8 ("Prelude of Light", {"Off", "On"}, {""}); + Option StartingZeldasLullaby = Option::U8 ("Start with Zelda's Lullaby", {"Off", "On"}, {""}); + Option StartingEponasSong = Option::U8 ("Start with Epona's Song", {"Off", "On"}, {""}); + Option StartingSariasSong = Option::U8 ("Start with Saria's Song", {"Off", "On"}, {""}); + Option StartingSunsSong = Option::U8 ("Start with Sun's Song", {"Off", "On"}, {""}); + Option StartingSongOfTime = Option::U8 ("Start with Song of Time", {"Off", "On"}, {""}); + Option StartingSongOfStorms = Option::U8 ("Start with Song of Storms", {"Off", "On"}, {""}); + Option StartingMinuetOfForest = Option::U8 ("Start with Minuet of Forest", {"Off", "On"}, {""}); + Option StartingBoleroOfFire = Option::U8 ("Start with Bolero of Fire", {"Off", "On"}, {""}); + Option StartingSerenadeOfWater = Option::U8 ("Start with Serenade of Water", {"Off", "On"}, {""}); + Option StartingRequiemOfSpirit = Option::U8 ("Start with Requiem of Spirit", {"Off", "On"}, {""}); + Option StartingNocturneOfShadow = Option::U8 ("Start with Nocturne of Shadow", {"Off", "On"}, {""}); + Option StartingPreludeOfLight = Option::U8 ("Start with Prelude of Light", {"Off", "On"}, {""}); std::vector