From 00d2f956980b3f71500f1ed6940716203941dd2d Mon Sep 17 00:00:00 2001 From: inspectredc <78732756+inspectredc@users.noreply.github.com> Date: Thu, 23 May 2024 14:29:43 +0100 Subject: [PATCH] [Enhancement] Constant Distance Backflips/Sidehops (#291) --- mm/2s2h/BenGui/BenMenuBar.cpp | 3 +++ mm/2s2h/Enhancements/Enhancements.cpp | 1 + mm/2s2h/Enhancements/Enhancements.h | 1 + mm/2s2h/Enhancements/GameInteractor/GameInteractor.h | 4 ++-- mm/2s2h/Enhancements/Restorations/FlipHopVariable.cpp | 10 ++++++++++ mm/2s2h/Enhancements/Restorations/FlipHopVariable.h | 6 ++++++ mm/src/overlays/actors/ovl_player_actor/z_player.c | 4 +++- 7 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 mm/2s2h/Enhancements/Restorations/FlipHopVariable.cpp create mode 100644 mm/2s2h/Enhancements/Restorations/FlipHopVariable.h diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index cbb0bce49..bac57c9da 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -489,6 +489,9 @@ void DrawEnhancementsMenu() { } if (UIWidgets::BeginMenu("Restorations")) { + UIWidgets::CVarCheckbox( + "Constant Distance Backflips and Sidehops", "gEnhancements.Restorations.ConstantFlipsHops", + { .tooltip = "Backflips and Sidehops travel a constant distance as they did in OOT." }); UIWidgets::CVarCheckbox( "Power Crouch Stab", "gEnhancements.Restorations.PowerCrouchStab", { .tooltip = diff --git a/mm/2s2h/Enhancements/Enhancements.cpp b/mm/2s2h/Enhancements/Enhancements.cpp index 5ec960832..bc5bc2302 100644 --- a/mm/2s2h/Enhancements/Enhancements.cpp +++ b/mm/2s2h/Enhancements/Enhancements.cpp @@ -31,6 +31,7 @@ void InitEnhancements() { RegisterPowerCrouchStab(); RegisterSideRoll(); RegisterTatlISG(); + RegisterVariableFlipHop(); // Cutscenes RegisterCutscenes(); diff --git a/mm/2s2h/Enhancements/Enhancements.h b/mm/2s2h/Enhancements/Enhancements.h index ac1cadba9..ebec17c47 100644 --- a/mm/2s2h/Enhancements/Enhancements.h +++ b/mm/2s2h/Enhancements/Enhancements.h @@ -13,6 +13,7 @@ #include "Masks/FastTransformation.h" #include "Minigames/AlwaysWinDoggyRace.h" #include "Cutscenes/Cutscenes.h" +#include "Restorations/FlipHopVariable.h" #include "Restorations/PowerCrouchStab.h" #include "Restorations/SideRoll.h" #include "Restorations/TatlISG.h" diff --git a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h index 4b67bcf7e..b6827d53a 100644 --- a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h +++ b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h @@ -44,10 +44,10 @@ typedef enum { GI_VB_PREVENT_CLOCK_DISPLAY, GI_VB_SONG_AVAILABLE_TO_PLAY, GI_VB_USE_CUSTOM_CAMERA, - GI_VB_PLAY_TRANSITION_CS, GI_VB_TATL_INTERUPT_MSG3, - GI_VB_TATL_INTERUPT_MSG6 + GI_VB_TATL_INTERUPT_MSG6, + GI_VB_FLIP_HOP_VARIABLE, } GIVanillaBehavior; typedef enum { diff --git a/mm/2s2h/Enhancements/Restorations/FlipHopVariable.cpp b/mm/2s2h/Enhancements/Restorations/FlipHopVariable.cpp new file mode 100644 index 000000000..d2a4d49d1 --- /dev/null +++ b/mm/2s2h/Enhancements/Restorations/FlipHopVariable.cpp @@ -0,0 +1,10 @@ +#include +#include "Enhancements/GameInteractor/GameInteractor.h" + +void RegisterVariableFlipHop() { + REGISTER_VB_SHOULD(GI_VB_FLIP_HOP_VARIABLE, { + if (CVarGetInteger("gEnhancements.Restorations.ConstantFlipsHops", 0)) { + *should = false; + } + }); +} diff --git a/mm/2s2h/Enhancements/Restorations/FlipHopVariable.h b/mm/2s2h/Enhancements/Restorations/FlipHopVariable.h new file mode 100644 index 000000000..570424213 --- /dev/null +++ b/mm/2s2h/Enhancements/Restorations/FlipHopVariable.h @@ -0,0 +1,6 @@ +#ifndef RESTORATIONS_FLIP_HOP_VARIABLE_H +#define RESTORATIONS_FLIP_HOP_VARIABLE_H + +void RegisterVariableFlipHop(); + +#endif // RESTORATIONS_FLIP_HOP_VARIABLE_H diff --git a/mm/src/overlays/actors/ovl_player_actor/z_player.c b/mm/src/overlays/actors/ovl_player_actor/z_player.c index 7685e7dff..62d9fa7df 100644 --- a/mm/src/overlays/actors/ovl_player_actor/z_player.c +++ b/mm/src/overlays/actors/ovl_player_actor/z_player.c @@ -14873,7 +14873,9 @@ void Player_Action_25(Player* this, PlayState* play) { Math_StepToF(&this->unk_B10[1], 0.0f, this->unk_B10[0]); } } else { - func_8083CBC4(this, speedTarget, yawTarget, 1.0f, 0.05f, 0.1f, 0xC8); + if (GameInteractor_Should(GI_VB_FLIP_HOP_VARIABLE, true, NULL)) { + func_8083CBC4(this, speedTarget, yawTarget, 1.0f, 0.05f, 0.1f, 0xC8); + } } Player_UpdateUpperBody(this, play);