diff --git a/include/d/d_s_play.h b/include/d/d_s_play.h index 936f29b277..bee8cb3f9b 100644 --- a/include/d/d_s_play.h +++ b/include/d/d_s_play.h @@ -81,7 +81,12 @@ public: #else static s8 isPause() { return pauseTimer; } #endif + + #if TARGET_PC + static void setPauseTimer(s8 time); + #else static void setPauseTimer(s8 time) { nextPauseTimer = time; } + #endif static DUSK_GAME_DATA s8 pauseTimer; static DUSK_GAME_DATA s8 nextPauseTimer; diff --git a/src/d/d_s_play.cpp b/src/d/d_s_play.cpp index ab342d6654..4bc620d5e2 100644 --- a/src/d/d_s_play.cpp +++ b/src/d/d_s_play.cpp @@ -1096,6 +1096,12 @@ void dScnPly_c::offReset() { } } +#ifdef TARGET_PC +void dScnPly_c::setPauseTimer(s8 time) { + nextPauseTimer = dusk::getSettings().game.noHitStun ? 0 : time; +} +#endif + static int phase_00(dScnPly_c* i_this) { if (!i_this->resetGame()) { return cPhs_INIT_e; @@ -1585,12 +1591,12 @@ static int phase_5(dScnPly_c* i_this) { OS_REPORT("\x1b[32mリソースプリロード %d/%d\n\x1b[m", goodLoads, loadNum); } - + if (phase_state == cPhs_COMPLEATE_e) { resPreLoadTime1 = OSGetTime(); OS_REPORT("\x1b[32mリソースプリロード %lld ms\n\x1b[m", OSTicksToMilliseconds(resPreLoadTime1 - resPreLoadTime0)); } - + return phase_state; } diff --git a/src/dusk/settings.cpp b/src/dusk/settings.cpp index 7aadfe2073..f595544158 100644 --- a/src/dusk/settings.cpp +++ b/src/dusk/settings.cpp @@ -61,6 +61,7 @@ UserSettings g_userSettings = { .autoSave {"game.autoSave", false}, .enhancedMapMenus {"game.enhancedMapMenus", false}, .aimingReticle {"game.aimingReticle", false}, + .noHitStun {"game.noHitStun", false}, // Preferences .enableMirrorMode {"game.enableMirrorMode", false}, @@ -295,6 +296,7 @@ void registerSettings() { Register(g_userSettings.game.autoSave); Register(g_userSettings.game.enhancedMapMenus); Register(g_userSettings.game.aimingReticle); + Register(g_userSettings.game.noHitStun); Register(g_userSettings.game.enableMirrorMode); Register(g_userSettings.game.invertCameraXAxis); Register(g_userSettings.game.invertCameraYAxis); diff --git a/src/dusk/settings.h b/src/dusk/settings.h index ecf1087945..980bc2b150 100644 --- a/src/dusk/settings.h +++ b/src/dusk/settings.h @@ -226,6 +226,7 @@ struct UserSettings { ConfigVar autoSave; ConfigVar enhancedMapMenus; ConfigVar aimingReticle; + ConfigVar noHitStun; // Preferences ConfigVar enableMirrorMode; diff --git a/src/dusk/speedrun.cpp b/src/dusk/speedrun.cpp index 8044544def..0751d287d1 100644 --- a/src/dusk/speedrun.cpp +++ b/src/dusk/speedrun.cpp @@ -82,6 +82,7 @@ void resetForSpeedrunMode() { getSettings().game.invincibleEnemies.setSpeedrunValue(false); getSettings().game.easyQuickSpin.setSpeedrunValue(false); getSettings().game.infiniteEponaStamina.setSpeedrunValue(false); + getSettings().game.noHitStun.setSpeedrunValue(false); getSettings().game.pauseOnFocusLost.setSpeedrunValue(false); diff --git a/src/dusk/ui/settings.cpp b/src/dusk/ui/settings.cpp index cadc1b4913..45a710a3f4 100644 --- a/src/dusk/ui/settings.cpp +++ b/src/dusk/ui/settings.cpp @@ -1302,6 +1302,8 @@ SettingsWindow::SettingsWindow(bool prelaunch) : mPrelaunch(prelaunch) { "Transform instantly by pressing R and Y simultaneously."); addOption("Aiming Reticle", getSettings().game.aimingReticle, "Shows the aiming reticle for bow and slingshot."); + addOption("No Hit Stun", getSettings().game.noHitStun, + "Disables hit stun frames after attacks."); leftPane.add_section("Speedrunning"); config_bool_select(leftPane, rightPane, getSettings().game.speedrunMode,