From a836be11bccbd7c583309bca744c6a0c86cd0b94 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Sun, 12 Apr 2026 12:32:27 -0600 Subject: [PATCH] Add Move Link tool from decompgz --- include/dusk/settings.h | 2 ++ src/d/actor/d_a_alink.cpp | 32 +++++++----------------- src/dusk/imgui/ImGuiConsole.cpp | 14 +++++++++++ src/dusk/imgui/ImGuiMenuEnhancements.cpp | 2 ++ src/dusk/settings.cpp | 2 ++ 5 files changed, 29 insertions(+), 23 deletions(-) diff --git a/include/dusk/settings.h b/include/dusk/settings.h index 8418602251..edd8d1bc15 100644 --- a/include/dusk/settings.h +++ b/include/dusk/settings.h @@ -71,6 +71,7 @@ struct UserSettings { // Controls ConfigVar enableTurboKeybind; + ConfigVar enableMoveLink; } game; struct { @@ -102,6 +103,7 @@ struct CollisionViewSettings { struct TransientSettings { CollisionViewSettings collisionView; bool skipFrameRateLimit; + bool moveLinkActive; }; TransientSettings& getTransientSettings(); diff --git a/src/d/actor/d_a_alink.cpp b/src/d/actor/d_a_alink.cpp index e754d7522f..82ed2d7d7b 100644 --- a/src/d/actor/d_a_alink.cpp +++ b/src/d/actor/d_a_alink.cpp @@ -51,6 +51,7 @@ #include "d/actor/d_a_ni.h" #include "d/d_s_play.h" +#include "dusk/settings.h" #include "res/Object/Alink.h" #include @@ -18048,17 +18049,9 @@ int daAlink_c::execute() { } BOOL isTrigDebugMoveInput = FALSE; - #if DEBUG - if (daPy_getPlayerActorClass() == this && checkDebugMoveInput()) { - isTrigDebugMoveInput = TRUE; - if (l_debugMode) { - l_debugMode = FALSE; - } else { - l_debugMode = TRUE; - } - } - if (l_debugMode) { + if (dusk::getTransientSettings().moveLinkActive && daPy_getPlayerActorClass() == this) { + isTrigDebugMoveInput = TRUE; if (checkModeFlg(0x400) && !checkBoardRide() && !checkSpinnerRide()) { if (checkCanoeRide()) { setSyncCanoePos(); @@ -18067,16 +18060,15 @@ int daAlink_c::execute() { } } else { f32 moveSpeed; - if (mDoCPd_c::getHoldLockR(PAD_1)) { + if (mDoCPd_c::getHoldZ(PAD_1)) { moveSpeed = 100.0f; } else { moveSpeed = 50.0f; } - if (mDoCPd_c::getHoldY(PAD_1)) { - current.pos.y += moveSpeed; - } else if (mDoCPd_c::getHoldX(PAD_1)) { - current.pos.y -= moveSpeed; + f32 cStickY = mDoCPd_c::getSubStickY(PAD_1); + if (cStickY > 0.3f || cStickY < -0.3f) { + current.pos.y += moveSpeed * cStickY; } current.pos.x += moveSpeed * mStickValue * cM_ssin(mMoveAngle); @@ -18094,9 +18086,7 @@ int daAlink_c::execute() { setBodyPartPos(); setAttentionPos(); - } else - #endif - { + } else { if (isTrigDebugMoveInput) { mItemButton = 0; mItemTrigger = 0; @@ -18562,11 +18552,7 @@ int daAlink_c::execute() { if (checkDeadHP()) { eventInfo.offCondition(fopAcCnd_NOEXEC_e); - } else - #if DEBUG - if (!l_debugMode) - #endif - { + } else if (!dusk::getTransientSettings().moveLinkActive) { if (!checkMagneBootsOn()) { f32 gnd_nrm_y; if (mLinkAcch.ChkGroundHit()) { diff --git a/src/dusk/imgui/ImGuiConsole.cpp b/src/dusk/imgui/ImGuiConsole.cpp index 6e917761f6..09a6141d8c 100644 --- a/src/dusk/imgui/ImGuiConsole.cpp +++ b/src/dusk/imgui/ImGuiConsole.cpp @@ -13,6 +13,7 @@ #include "JSystem/JUtility/JUTGamePad.h" #include "SDL3/SDL_mouse.h" +#include "m_Do/m_Do_controller_pad.h" #include "dusk/config.hpp" #include "dusk/main.h" #include "dusk/settings.h" @@ -202,6 +203,19 @@ namespace dusk { void ImGuiConsole::UpdateSettings() { getTransientSettings().skipFrameRateLimit = getSettings().game.enableTurboKeybind && ImGui::IsKeyDown(ImGuiKey_Tab); + + if (getSettings().game.enableMoveLink) { + static bool comboHeld = false; + constexpr u32 combo = PAD_TRIGGER_L | PAD_TRIGGER_R | PAD_BUTTON_Y; + u32 rawHold = mDoCPd_c::getHold(PAD_1); + bool held = (rawHold & combo) == combo; + if (held && !comboHeld) { + getTransientSettings().moveLinkActive = !getTransientSettings().moveLinkActive; + } + comboHeld = held; + } else { + getTransientSettings().moveLinkActive = false; + } } void ImGuiConsole::PreDraw() { diff --git a/src/dusk/imgui/ImGuiMenuEnhancements.cpp b/src/dusk/imgui/ImGuiMenuEnhancements.cpp index b505d84345..3b62eec7aa 100644 --- a/src/dusk/imgui/ImGuiMenuEnhancements.cpp +++ b/src/dusk/imgui/ImGuiMenuEnhancements.cpp @@ -156,6 +156,8 @@ namespace dusk { "This will not work with the \"Unlock Framerate\" enhancement."); } + config::ImGuiCheckbox("Move Link (L+R+Y)", getSettings().game.enableMoveLink); + ImGui::EndMenu(); } diff --git a/src/dusk/settings.cpp b/src/dusk/settings.cpp index dabed72f19..1760345004 100644 --- a/src/dusk/settings.cpp +++ b/src/dusk/settings.cpp @@ -59,6 +59,7 @@ UserSettings g_userSettings = { // Controls .enableTurboKeybind {"game.enableTurboKeybind", false}, + .enableMoveLink {"game.enableMoveLink", false}, }, .backend = { @@ -113,6 +114,7 @@ void registerSettings() { Register(g_userSettings.game.noLowHpSound); Register(g_userSettings.game.midnasLamentNonStop); Register(g_userSettings.game.enableTurboKeybind); + Register(g_userSettings.game.enableMoveLink); Register(g_userSettings.game.fastSpinner); Register(g_userSettings.game.enableFrameInterpolation);