summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Hoey <121978037+A-Green-Spoon@users.noreply.github.com>2024-05-09 21:55:53 -0400
committerGitHub <noreply@github.com>2024-05-09 20:55:53 -0500
commit63bc2aff59ea9b0ec3019d026235afe35f40618c (patch)
tree4039fd8308ef64d38e06ad6c363d37e88e2fbc99
parent23f9654940902a1ae86ef9eda342011dcca6e1c8 (diff)
Frogs Ocarina Game Difficulty Options (#3373)
* Frog actor edits, menu, presets * Block off vanilla code + comments * fix logic + formatting * new documentation format * Update for CVAR changes * Fix alignment * Conditions cleanup * Update soh/soh/SohMenuBar.cpp Oops, added Co-authored-by: inspectredc <78732756+inspectredc@users.noreply.github.com> --------- Co-authored-by: inspectredc <78732756+inspectredc@users.noreply.github.com>
-rw-r--r--soh/soh/Enhancements/presets.h4
-rw-r--r--soh/soh/SohMenuBar.cpp26
-rw-r--r--soh/src/overlays/actors/ovl_En_Fr/z_en_fr.c43
3 files changed, 65 insertions, 8 deletions
diff --git a/soh/soh/Enhancements/presets.h b/soh/soh/Enhancements/presets.h
index a502dc3da..54c729371 100644
--- a/soh/soh/Enhancements/presets.h
+++ b/soh/soh/Enhancements/presets.h
@@ -200,6 +200,10 @@ const std::vector<const char*> enhancementsCvars = {
CVAR_ENHANCEMENT("OcarinaGame.RoundOneNotes"),
CVAR_ENHANCEMENT("OcarinaGame.RoundTwoNotes"),
CVAR_ENHANCEMENT("OcarinaGame.RoundThreeNotes"),
+ CVAR_ENHANCEMENT("CustomizeFrogsOcarinaGame"),
+ CVAR_ENHANCEMENT("InstantFrogsGameWin"),
+ CVAR_ENHANCEMENT("FrogsUnlimitedFailTime"),
+ CVAR_ENHANCEMENT("FrogsModifyFailTime"),
CVAR_ENHANCEMENT("CreditsFix"),
CVAR_ENHANCEMENT("SilverRupeeJingleExtend"),
CVAR_ENHANCEMENT("StaticExplosionRadius"),
diff --git a/soh/soh/SohMenuBar.cpp b/soh/soh/SohMenuBar.cpp
index f60983c59..9cd2c6844 100644
--- a/soh/soh/SohMenuBar.cpp
+++ b/soh/soh/SohMenuBar.cpp
@@ -891,6 +891,32 @@ void DrawEnhancementsMenu() {
UIWidgets::Spacer(0);
+ if (ImGui::BeginMenu("Frogs Ocarina Game")) {
+ UIWidgets::EnhancementCheckbox("Customize Behavior", CVAR_ENHANCEMENT("CustomizeFrogsOcarinaGame"));
+ UIWidgets::Tooltip("Turn on/off changes to the frogs ocarina game behavior");
+ bool disabled = !CVarGetInteger(CVAR_ENHANCEMENT("CustomizeFrogsOcarinaGame"), 0);
+ static const char* disabledTooltip =
+ "This option is disabled because \"Customize Behavior\" is turned off";
+ UIWidgets::PaddedEnhancementCheckbox("Instant Win", CVAR_ENHANCEMENT("InstantFrogsGameWin"), true, false, disabled, disabledTooltip);
+ UIWidgets::Tooltip("Skips the frogs ocarina game");
+ UIWidgets::PaddedEnhancementCheckbox("Unlimited Playback Time", CVAR_ENHANCEMENT("FrogsUnlimitedFailTime"), true, false, disabled, disabledTooltip);
+ UIWidgets::Tooltip("Removes the timer to play back the song");
+ bool disabledFrog = 0;
+ static const char* disabledFrogTooltip =
+ "This option is disabled because \"Customize Behavior\" is turned off or \"Unlimited Playback Time\" is on";
+ if (!CVarGetInteger(CVAR_ENHANCEMENT("CustomizeFrogsOcarinaGame"), 0) || CVarGetInteger(CVAR_ENHANCEMENT("FrogsUnlimitedFailTime"), 0)) {
+ disabledFrog = 1;
+ } else {
+ disabledFrog = 0;
+ }
+ UIWidgets::PaddedEnhancementSliderInt("Modify note timer: %dx", "##FrogsFailTimer", CVAR_ENHANCEMENT("FrogsModifyFailTime"), 1, 5, "", 1, true, true, false,
+ disabledFrog, disabledFrogTooltip);
+ UIWidgets::Tooltip("Adjusts the time allowed for playback before failing");
+ ImGui::EndMenu();
+ }
+
+ UIWidgets::Spacer(0);
+
UIWidgets::PaddedEnhancementCheckbox("Delete File On Death", CVAR_ENHANCEMENT("DeleteFileOnDeath"), true, false);
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.0f, 0.0f, 1.0f));
UIWidgets::Tooltip("Dying will delete your file\n\n " ICON_FA_EXCLAMATION_TRIANGLE " WARNING " ICON_FA_EXCLAMATION_TRIANGLE "\nTHIS IS NOT REVERSABLE\nUSE AT YOUR OWN RISK!");
diff --git a/soh/src/overlays/actors/ovl_En_Fr/z_en_fr.c b/soh/src/overlays/actors/ovl_En_Fr/z_en_fr.c
index 36c9c2818..d616db040 100644
--- a/soh/src/overlays/actors/ovl_En_Fr/z_en_fr.c
+++ b/soh/src/overlays/actors/ovl_En_Fr/z_en_fr.c
@@ -819,12 +819,28 @@ void EnFr_SetupFrogSong(EnFr* this, PlayState* play) {
if (this->frogSongTimer != 0) {
this->frogSongTimer--;
} else {
- this->frogSongTimer = 40;
- this->ocarinaNoteIndex = 0;
- func_8010BD58(play, OCARINA_ACTION_FROGS);
- this->ocarinaNote = EnFr_GetNextNoteFrogSong(this->ocarinaNoteIndex);
- EnFr_CheckOcarinaInputFrogSong(this->ocarinaNote);
- this->actionFunc = EnFr_ContinueFrogSong;
+ // #region SOH [Enhancement]
+ if (CVarGetInteger(CVAR_ENHANCEMENT("CustomizeFrogsOcarinaGame"), 0)) {
+ this->frogSongTimer = 40 * CVarGetInteger(CVAR_ENHANCEMENT("FrogsModifyFailTime"), 1);
+ if (CVarGetInteger(CVAR_ENHANCEMENT("InstantFrogsGameWin"), 0)) {
+ this->actor.textId = 0x40AC;
+ EnFr_SetupReward(this, play, false);
+ } else {
+ this->ocarinaNoteIndex = 0;
+ func_8010BD58(play, OCARINA_ACTION_FROGS);
+ this->ocarinaNote = EnFr_GetNextNoteFrogSong(this->ocarinaNoteIndex);
+ EnFr_CheckOcarinaInputFrogSong(this->ocarinaNote);
+ this->actionFunc = EnFr_ContinueFrogSong;
+ }
+ // #endregion
+ } else {
+ this->frogSongTimer = 40;
+ this->ocarinaNoteIndex = 0;
+ func_8010BD58(play, OCARINA_ACTION_FROGS);
+ this->ocarinaNote = EnFr_GetNextNoteFrogSong(this->ocarinaNoteIndex);
+ EnFr_CheckOcarinaInputFrogSong(this->ocarinaNote);
+ this->actionFunc = EnFr_ContinueFrogSong;
+ }
}
}
@@ -846,7 +862,13 @@ s32 EnFr_IsFrogSongComplete(EnFr* this, PlayState* play) {
ocarinaNote = EnFr_GetNextNoteFrogSong(ocarinaNoteIndex);
this->ocarinaNote = ocarinaNote;
EnFr_CheckOcarinaInputFrogSong(ocarinaNote);
- this->frogSongTimer = sTimerFrogSong[index];
+ // #region SOH [Enhancement]
+ if (CVarGetInteger(CVAR_ENHANCEMENT("CustomizeFrogsOcarinaGame"), 0)) {
+ this->frogSongTimer = sTimerFrogSong[index] * CVarGetInteger(CVAR_ENHANCEMENT("FrogsModifyFailTime"), 1);
+ // #endregion
+ } else {
+ this->frogSongTimer = sTimerFrogSong[index];
+ }
}
return false;
}
@@ -870,7 +892,12 @@ void EnFr_ContinueFrogSong(EnFr* this, PlayState* play) {
if (this->frogSongTimer == 0) {
EnFr_OcarinaMistake(this, play);
} else {
- this->frogSongTimer--;
+ // #region SOH [Enhancement] - Don't decrement timer
+ if (!CVarGetInteger(CVAR_ENHANCEMENT("CustomizeFrogsOcarinaGame"), 0) ||
+ !CVarGetInteger(CVAR_ENHANCEMENT("FrogsUnlimitedFailTime"), 0)) {
+ // #endregion
+ this->frogSongTimer--;
+ }
if (play->msgCtx.msgMode == MSGMODE_FROGS_PLAYING) {
counter = 0;
for (i = 0; i < ARRAY_COUNT(sEnFrPointers.frogs); i++) {