diff --git a/include/dusk/action_bindings.h b/include/dusk/action_bindings.h index 7eba412fe8..5a28bd851a 100644 --- a/include/dusk/action_bindings.h +++ b/include/dusk/action_bindings.h @@ -11,6 +11,9 @@ enum class ActionBinds { CALL_MIDNA, OPEN_DUSKLIGHT_MENU, TURBO_SPEED_BUTTON, + QUICK_TRANSFORM, + SUN_SONG, + MOON_JUMP, COUNT, }; diff --git a/include/dusk/settings.h b/include/dusk/settings.h index fb3704fd30..0b8ff07856 100644 --- a/include/dusk/settings.h +++ b/include/dusk/settings.h @@ -249,6 +249,9 @@ struct UserSettings { std::array callMidna; std::array openDusklightMenu; std::array turboSpeedButton; + std::array quickTransform; + std::array sunSong; + std::array moonJump; } actionBindings; }; diff --git a/src/dusk/action_bindings.cpp b/src/dusk/action_bindings.cpp index 204f219558..ebc5f9f694 100644 --- a/src/dusk/action_bindings.cpp +++ b/src/dusk/action_bindings.cpp @@ -14,6 +14,9 @@ ActionBindsMap& getActionBinds() { {ActionBinds::CALL_MIDNA, {&getSettings().actionBindings.callMidna, "Call Midna"}}, {ActionBinds::OPEN_DUSKLIGHT_MENU, {&getSettings().actionBindings.openDusklightMenu, "Open Dusklight Menu"}}, {ActionBinds::TURBO_SPEED_BUTTON, {&getSettings().actionBindings.turboSpeedButton, "Turbo Speed Button"}}, + {ActionBinds::QUICK_TRANSFORM, {&getSettings().actionBindings.quickTransform, "Quick Transform"}}, + {ActionBinds::SUN_SONG, {&getSettings().actionBindings.sunSong, "Sun's Song"}}, + {ActionBinds::MOON_JUMP, {&getSettings().actionBindings.moonJump, "Moon Jump"}}, }; return actionBinds; } diff --git a/src/dusk/settings.cpp b/src/dusk/settings.cpp index 4ba40d921b..5af2e4077d 100644 --- a/src/dusk/settings.cpp +++ b/src/dusk/settings.cpp @@ -169,6 +169,24 @@ UserSettings g_userSettings = { ActionBindConfigVar{"actionBindings.turboButton_port2", PAD_NATIVE_BUTTON_INVALID}, ActionBindConfigVar{"actionBindings.turboButton_port3", PAD_NATIVE_BUTTON_INVALID}, }, + .quickTransform { + ActionBindConfigVar{"actionBindings.quickTransform_port0", PAD_NATIVE_BUTTON_INVALID}, + ActionBindConfigVar{"actionBindings.quickTransform_port1", PAD_NATIVE_BUTTON_INVALID}, + ActionBindConfigVar{"actionBindings.quickTransform_port2", PAD_NATIVE_BUTTON_INVALID}, + ActionBindConfigVar{"actionBindings.quickTransform_port3", PAD_NATIVE_BUTTON_INVALID}, + }, + .sunSong { + ActionBindConfigVar{"actionBindings.sunSong_port0", PAD_NATIVE_BUTTON_INVALID}, + ActionBindConfigVar{"actionBindings.sunSong_port1", PAD_NATIVE_BUTTON_INVALID}, + ActionBindConfigVar{"actionBindings.sunSong_port2", PAD_NATIVE_BUTTON_INVALID}, + ActionBindConfigVar{"actionBindings.sunSong_port3", PAD_NATIVE_BUTTON_INVALID}, + }, + .moonJump { + ActionBindConfigVar{"actionBindings.moonJump_port0", PAD_NATIVE_BUTTON_INVALID}, + ActionBindConfigVar{"actionBindings.moonJump_port1", PAD_NATIVE_BUTTON_INVALID}, + ActionBindConfigVar{"actionBindings.moonJump_port2", PAD_NATIVE_BUTTON_INVALID}, + ActionBindConfigVar{"actionBindings.moonJump_port3", PAD_NATIVE_BUTTON_INVALID}, + } } }; @@ -309,6 +327,18 @@ void registerSettings() { Register(g_userSettings.actionBindings.turboSpeedButton[1]); Register(g_userSettings.actionBindings.turboSpeedButton[2]); Register(g_userSettings.actionBindings.turboSpeedButton[3]); + Register(g_userSettings.actionBindings.quickTransform[0]); + Register(g_userSettings.actionBindings.quickTransform[1]); + Register(g_userSettings.actionBindings.quickTransform[2]); + Register(g_userSettings.actionBindings.quickTransform[3]); + Register(g_userSettings.actionBindings.sunSong[0]); + Register(g_userSettings.actionBindings.sunSong[1]); + Register(g_userSettings.actionBindings.sunSong[2]); + Register(g_userSettings.actionBindings.sunSong[3]); + Register(g_userSettings.actionBindings.moonJump[0]); + Register(g_userSettings.actionBindings.moonJump[1]); + Register(g_userSettings.actionBindings.moonJump[2]); + Register(g_userSettings.actionBindings.moonJump[3]); } // Transient settings diff --git a/src/dusk/ui/settings.cpp b/src/dusk/ui/settings.cpp index 42f205f12c..043ee0e5e1 100644 --- a/src/dusk/ui/settings.cpp +++ b/src/dusk/ui/settings.cpp @@ -1175,9 +1175,9 @@ SettingsWindow::SettingsWindow(bool prelaunch) : mPrelaunch(prelaunch) { addOption("Show Poe Count on Map", getSettings().game.enhancedMapMenus, "Displays collected/total number of Poe Souls for a region on the map."); addSpeedrunDisabledOption("Sun's Song (R+X)", getSettings().game.sunsSong, - "Allows Wolf Link to howl and change the time of day."); + "Allows Wolf Link to howl and change the time of day.

This can also be bound to another input in Custom Action Bindings."); addOption("Quick Transform (R+Y)", getSettings().game.enableQuickTransform, - "Transform instantly by pressing R and Y simultaneously."); + "Transform instantly by pressing R and Y simultaneously.

This can also be bound to another input in Custom Action Bindings."); leftPane.add_section("Speedrunning"); config_bool_select(leftPane, rightPane, getSettings().game.speedrunMode, diff --git a/src/f_ap/f_ap_game.cpp b/src/f_ap/f_ap_game.cpp index 72219e98dd..a459a0b41c 100644 --- a/src/f_ap/f_ap_game.cpp +++ b/src/f_ap/f_ap_game.cpp @@ -29,6 +29,7 @@ #include "tracy/Tracy.hpp" #include #include +#include #endif fapGm_HIO_c::fapGm_HIO_c() { @@ -756,19 +757,19 @@ static void duskExecute() { isRecording = false; } - if (mDoCPd_c::getHoldR(PAD_1) && mDoCPd_c::getTrigX(PAD_1)) { + if (dusk::getActionBindTrig(dusk::ActionBinds::SUN_SONG, 0) || (!dusk::isActionBound(dusk::ActionBinds::SUN_SONG, 0) && mDoCPd_c::getHoldR(PAD_1) && mDoCPd_c::getTrigX(PAD_1))) { if (const auto link = g_dComIfG_gameInfo.play.getPlayer(0)) { dynamic_cast(link)->handleWolfHowl(); } } - if ((mDoCPd_c::getHold(PAD_1) & (PAD_TRIGGER_R | PAD_TRIGGER_L)) == PAD_TRIGGER_R && mDoCPd_c::getTrigY(PAD_1)) { + if (dusk::getActionBindTrig(dusk::ActionBinds::QUICK_TRANSFORM, 0) || (!dusk::isActionBound(dusk::ActionBinds::QUICK_TRANSFORM, 0) && mDoCPd_c::getHoldR(PAD_1) && mDoCPd_c::getTrigY(PAD_1))) { if (const auto link = g_dComIfG_gameInfo.play.getPlayer(0)) { dynamic_cast(link)->handleQuickTransform(); } } - if (dusk::getSettings().game.moonJump && (mDoCPd_c::getHoldR(PAD_1) && mDoCPd_c::getHoldA(PAD_1))) { + if (dusk::getActionBindTrig(dusk::ActionBinds::MOON_JUMP, 0) || (!dusk::isActionBound(dusk::ActionBinds::MOON_JUMP, 0) && mDoCPd_c::getHoldR(PAD_1) && mDoCPd_c::getTrigA(PAD_1))) { if (const auto link = g_dComIfG_gameInfo.play.getPlayer(0)) { link->speed.y = 56.0f; }