diff options
| author | Garrett Cox <garrettjcox@gmail.com> | 2024-10-07 10:25:09 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-07 10:25:09 -0500 |
| commit | cd4ee56d4874b694507008696132266cca8a916e (patch) | |
| tree | 844393db333ada0c27162608c18fbe834f1db9c4 | |
| parent | 790d36bfbcf2135bcdcf5ed3c8ac5d18aa973983 (diff) | |
Implement faster song playback enhancement (#801)
| -rw-r--r-- | mm/2s2h/BenGui/SearchableMenuItems.h | 8 | ||||
| -rw-r--r-- | mm/2s2h/Enhancements/Enhancements.cpp | 1 | ||||
| -rw-r--r-- | mm/2s2h/Enhancements/Songs/FasterSongPlayback.cpp | 30 | ||||
| -rw-r--r-- | mm/2s2h/Enhancements/Songs/Songs.h | 1 |
4 files changed, 39 insertions, 1 deletions
diff --git a/mm/2s2h/BenGui/SearchableMenuItems.h b/mm/2s2h/BenGui/SearchableMenuItems.h index ab6768809..2bd672834 100644 --- a/mm/2s2h/BenGui/SearchableMenuItems.h +++ b/mm/2s2h/BenGui/SearchableMenuItems.h @@ -1226,7 +1226,13 @@ void AddEnhancements() { WIDGET_CVAR_SLIDER_INT, { 1, 7, 7 } }, { "Prevent Dropped Ocarina Inputs", "gEnhancements.Playback.NoDropOcarinaInput", - "Prevent dropping inputs when playing the ocarina quickly.", WIDGET_CVAR_CHECKBOX } } } }); + "Prevent dropping inputs when playing the ocarina quickly.", WIDGET_CVAR_CHECKBOX }, + { "Faster Song Playback", + "gEnhancements.Songs.FasterSongPlayback", + "Speeds up the playback of songs.", + WIDGET_CVAR_CHECKBOX, + {}, + [](widgetInfo& info) { RegisterFasterSongPlayback(); } } } } }); enhancementsSidebar.push_back( { "Time Savers", 3, diff --git a/mm/2s2h/Enhancements/Enhancements.cpp b/mm/2s2h/Enhancements/Enhancements.cpp index f7f1a4a1a..3afba3157 100644 --- a/mm/2s2h/Enhancements/Enhancements.cpp +++ b/mm/2s2h/Enhancements/Enhancements.cpp @@ -55,6 +55,7 @@ void InitEnhancements() { // Songs RegisterEnableSunsSong(); + RegisterFasterSongPlayback(); RegisterPauseOwlWarp(); RegisterZoraEggCount(); diff --git a/mm/2s2h/Enhancements/Songs/FasterSongPlayback.cpp b/mm/2s2h/Enhancements/Songs/FasterSongPlayback.cpp new file mode 100644 index 000000000..fe4dc02c0 --- /dev/null +++ b/mm/2s2h/Enhancements/Songs/FasterSongPlayback.cpp @@ -0,0 +1,30 @@ +#include "2s2h/GameInteractor/GameInteractor.h" +#include "libultraship/libultraship.h" + +extern "C" { +#include "variables.h" + +extern u8 sPlaybackState; +} + +void RegisterFasterSongPlayback() { + static uint32_t onPlayerUpdate = 0; + GameInteractor::Instance->UnregisterGameHookForID<GameInteractor::OnActorUpdate>(onPlayerUpdate); + + onPlayerUpdate = 0; + + if (!CVarGetInteger("gEnhancements.Songs.FasterSongPlayback", 0)) { + return; + } + + onPlayerUpdate = + GameInteractor::Instance->RegisterGameHookForID<GameInteractor::OnActorUpdate>(ACTOR_PLAYER, [](Actor* actor) { + if (gPlayState->msgCtx.msgMode >= MSGMODE_SONG_PLAYED && gPlayState->msgCtx.msgMode <= MSGMODE_17) { + if (gPlayState->msgCtx.stateTimer > 1) { + gPlayState->msgCtx.stateTimer = 1; + } + gPlayState->msgCtx.ocarinaSongEffectActive = 0; + sPlaybackState = 0; + } + }); +} diff --git a/mm/2s2h/Enhancements/Songs/Songs.h b/mm/2s2h/Enhancements/Songs/Songs.h index 22469f29e..ecd2a6942 100644 --- a/mm/2s2h/Enhancements/Songs/Songs.h +++ b/mm/2s2h/Enhancements/Songs/Songs.h @@ -2,6 +2,7 @@ #define SONGS_H void RegisterEnableSunsSong(); +void RegisterFasterSongPlayback(); void RegisterZoraEggCount(); void RegisterPauseOwlWarp(); |
