Add Scene Specific Checks to Dirt Path Fixes (#2907)

* Move from Dev to Dev-Spock

* Moved to mod.h

* Update GameInteractor.h
This commit is contained in:
Patrick12115 2023-05-21 18:12:25 -04:00 committed by GitHub
parent cf711d9164
commit 7962e0e6d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 1 deletions

View File

@ -486,6 +486,24 @@ void RegisterBonkDamage() {
}); });
} }
void UpdateDirtPathFixState(int32_t sceneNum) {
switch (sceneNum) {
case SCENE_SPOT00:
case SCENE_SPOT04:
case SCENE_SPOT15:
CVarSetInteger("gDirtPathFix", CVarGetInteger("gSceneSpecificDirtPathFix", 0));
return;
default:
CVarClear("gDirtPathFix");
}
}
void RegisterMenuPathFix() {
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnTransitionEnd>([](int32_t sceneNum) {
UpdateDirtPathFixState(sceneNum);
});
}
void InitMods() { void InitMods() {
RegisterTTS(); RegisterTTS();
RegisterInfiniteMoney(); RegisterInfiniteMoney();
@ -504,4 +522,5 @@ void InitMods() {
RegisterRupeeDash(); RegisterRupeeDash();
RegisterHyperBosses(); RegisterHyperBosses();
RegisterBonkDamage(); RegisterBonkDamage();
RegisterMenuPathFix();
} }

View File

@ -1,3 +1,5 @@
#include <stdint.h>
#ifndef MODS_H #ifndef MODS_H
#define MODS_H #define MODS_H
@ -5,6 +7,7 @@
extern "C" { extern "C" {
#endif #endif
void UpdateDirtPathFixState(int32_t sceneNum);
void InitMods(); void InitMods();
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -29,6 +29,7 @@
#include "soh/SaveManager.h" #include "soh/SaveManager.h"
#include "OTRGlobals.h" #include "OTRGlobals.h"
#include "soh/Enhancements/presets.h" #include "soh/Enhancements/presets.h"
#include "soh/Enhancements/mods.h"
#include "soh/resource/type/Skeleton.h" #include "soh/resource/type/Skeleton.h"
#ifdef ENABLE_CROWD_CONTROL #ifdef ENABLE_CROWD_CONTROL
@ -46,6 +47,8 @@ extern "C" {
void disableBetaQuest() { isBetaQuestEnabled = false; } void disableBetaQuest() { isBetaQuestEnabled = false; }
} }
extern "C" PlayState* gPlayState;
enum SeqPlayers { enum SeqPlayers {
/* 0 */ SEQ_BGM_MAIN, /* 0 */ SEQ_BGM_MAIN,
/* 1 */ SEQ_FANFARE, /* 1 */ SEQ_FANFARE,
@ -860,7 +863,9 @@ namespace GameMenuBar {
ImGui::EndMenu(); ImGui::EndMenu();
} }
UIWidgets::PaddedText("Fix Vanishing Paths", true, false); UIWidgets::PaddedText("Fix Vanishing Paths", true, false);
UIWidgets::EnhancementCombobox("gDirtPathFix", zFightingOptions, 0); if (UIWidgets::EnhancementCombobox("gSceneSpecificDirtPathFix", zFightingOptions, 0) && gPlayState != NULL) {
UpdateDirtPathFixState(gPlayState->sceneNum);
}
UIWidgets::Tooltip("Disabled: Paths vanish more the higher the resolution (Z-fighting is based on resolution)\n" UIWidgets::Tooltip("Disabled: Paths vanish more the higher the resolution (Z-fighting is based on resolution)\n"
"Consistent: Certain paths vanish the same way in all resolutions\n" "Consistent: Certain paths vanish the same way in all resolutions\n"
"No Vanish: Paths do not vanish, Link seems to sink in to some paths\n" "No Vanish: Paths do not vanish, Link seems to sink in to some paths\n"