summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mm/2s2h/BenGui/SearchableMenuItems.h8
-rw-r--r--mm/2s2h/Enhancements/Enhancements.cpp1
-rw-r--r--mm/2s2h/Enhancements/Songs/FasterSongPlayback.cpp30
-rw-r--r--mm/2s2h/Enhancements/Songs/Songs.h1
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();