summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mm/2s2h/BenGui/BenMenuBar.cpp2
-rw-r--r--mm/2s2h/BenGui/SearchableMenuItems.h2
-rw-r--r--mm/2s2h/Enhancements/Cheats/Cheats.h1
-rw-r--r--mm/2s2h/Enhancements/Cheats/ElegyAnywhere.cpp10
-rw-r--r--mm/2s2h/Enhancements/Enhancements.cpp1
-rw-r--r--mm/2s2h/GameInteractor/GameInteractor.h1
-rw-r--r--mm/src/code/z_message.c14
7 files changed, 25 insertions, 6 deletions
diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp
index 6c329fe8e..04a96eaf8 100644
--- a/mm/2s2h/BenGui/BenMenuBar.cpp
+++ b/mm/2s2h/BenGui/BenMenuBar.cpp
@@ -792,6 +792,8 @@ void DrawCheatsMenu() {
{ .tooltip = "Holding L makes you float into the air" })) {
RegisterMoonJumpOnL();
}
+ UIWidgets::CVarCheckbox("Elegy of Emptiness Anywhere", "gCheats.ElegyAnywhere",
+ { .tooltip = "Allows Elegy of Emptiness outside of Ikana" });
UIWidgets::CVarCombobox(
"Stop Time in Dungeons", "gCheats.TempleTimeStop", timeStopOptions,
{ .tooltip = "Stops time from advancing in selected areas. Requires a room change to update.\n\n"
diff --git a/mm/2s2h/BenGui/SearchableMenuItems.h b/mm/2s2h/BenGui/SearchableMenuItems.h
index 8325ff7a5..f0c3ed129 100644
--- a/mm/2s2h/BenGui/SearchableMenuItems.h
+++ b/mm/2s2h/BenGui/SearchableMenuItems.h
@@ -973,6 +973,8 @@ void AddEnhancements() {
WIDGET_CVAR_CHECKBOX,
{},
[](widgetInfo& info) { RegisterMoonJumpOnL(); } },
+ { "Elegy of Emptiness Anywhere", "gCheats.ElegyAnywhere", "Allows Elegy of Emptiness outside of Ikana",
+ WIDGET_CVAR_CHECKBOX },
{ "Stop Time in Dungeons",
"gCheats.TempleTimeStop",
"Stops time from advancing in selected areas. Requires a room change to update.\n\n"
diff --git a/mm/2s2h/Enhancements/Cheats/Cheats.h b/mm/2s2h/Enhancements/Cheats/Cheats.h
index f89dc877c..d429064b8 100644
--- a/mm/2s2h/Enhancements/Cheats/Cheats.h
+++ b/mm/2s2h/Enhancements/Cheats/Cheats.h
@@ -7,5 +7,6 @@ void RegisterMoonJumpOnL();
void RegisterTimeStopInTemples();
void RegisterUnbreakableRazorSword();
void RegisterUnrestrictedItems();
+void RegisterElegyAnywhere();
#endif // CHEATS_H
diff --git a/mm/2s2h/Enhancements/Cheats/ElegyAnywhere.cpp b/mm/2s2h/Enhancements/Cheats/ElegyAnywhere.cpp
new file mode 100644
index 000000000..ee04b4f5c
--- /dev/null
+++ b/mm/2s2h/Enhancements/Cheats/ElegyAnywhere.cpp
@@ -0,0 +1,10 @@
+#include <libultraship/bridge.h>
+#include "2s2h/GameInteractor/GameInteractor.h"
+
+void RegisterElegyAnywhere() {
+ REGISTER_VB_SHOULD(VB_ELEGY_CHECK_SCENE, {
+ if (CVarGetInteger("gCheats.ElegyAnywhere", 0)) {
+ *should = true;
+ }
+ });
+}
diff --git a/mm/2s2h/Enhancements/Enhancements.cpp b/mm/2s2h/Enhancements/Enhancements.cpp
index c8f31b28c..4f58b9755 100644
--- a/mm/2s2h/Enhancements/Enhancements.cpp
+++ b/mm/2s2h/Enhancements/Enhancements.cpp
@@ -13,6 +13,7 @@ void InitEnhancements() {
RegisterUnbreakableRazorSword();
RegisterUnrestrictedItems();
RegisterTimeStopInTemples();
+ RegisterElegyAnywhere();
// Clock
RegisterTextBasedClock();
diff --git a/mm/2s2h/GameInteractor/GameInteractor.h b/mm/2s2h/GameInteractor/GameInteractor.h
index 7937b076b..a49f350fe 100644
--- a/mm/2s2h/GameInteractor/GameInteractor.h
+++ b/mm/2s2h/GameInteractor/GameInteractor.h
@@ -65,6 +65,7 @@ typedef enum {
VB_ZTARGET_SPEED_CHECK,
VB_THIEF_BIRD_STEAL,
VB_PLAY_CREMIA_HUG_CUTSCENE,
+ VB_ELEGY_CHECK_SCENE,
} GIVanillaBehavior;
typedef enum {
diff --git a/mm/src/code/z_message.c b/mm/src/code/z_message.c
index 7f0c82be5..68d1fa5e7 100644
--- a/mm/src/code/z_message.c
+++ b/mm/src/code/z_message.c
@@ -4821,12 +4821,14 @@ void Message_DrawMain(PlayState* play, Gfx** gfxP) {
if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE) {
if (sLastPlayedSong == OCARINA_SONG_ELEGY) {
- if ((play->sceneId == SCENE_F40) || (play->sceneId == SCENE_F41) ||
- (play->sceneId == SCENE_IKANAMAE) || (play->sceneId == SCENE_CASTLE) ||
- (play->sceneId == SCENE_IKNINSIDE) || (play->sceneId == SCENE_IKANA) ||
- (play->sceneId == SCENE_INISIE_N) || (play->sceneId == SCENE_INISIE_R) ||
- (play->sceneId == SCENE_INISIE_BS) || (play->sceneId == SCENE_RANDOM) ||
- (play->sceneId == SCENE_REDEAD) || (play->sceneId == SCENE_TOUGITES)) {
+ if (GameInteractor_Should(
+ VB_ELEGY_CHECK_SCENE,
+ (play->sceneId == SCENE_F40) || (play->sceneId == SCENE_F41) ||
+ (play->sceneId == SCENE_IKANAMAE) || (play->sceneId == SCENE_CASTLE) ||
+ (play->sceneId == SCENE_IKNINSIDE) || (play->sceneId == SCENE_IKANA) ||
+ (play->sceneId == SCENE_INISIE_N) || (play->sceneId == SCENE_INISIE_R) ||
+ (play->sceneId == SCENE_INISIE_BS) || (play->sceneId == SCENE_RANDOM) ||
+ (play->sceneId == SCENE_REDEAD) || (play->sceneId == SCENE_TOUGITES))) {
play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT;
} else {
sLastPlayedSong = 0xFF;