mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-08-08 02:48:25 -04:00
Lost Woods Ocarina Game Difficulty Options (#3371)
* Menu options, note speed, unlimited playback time * Instant win * Add custom ocarina game cvar to all options and presets * Extra spaces * Add starting note count, ending note count by round, more presets * Block out vanilla code + comments * finish blocking out vanilla code * new documentation formatting * add starting notes to randomizer preset
This commit is contained in:
@@ -2065,16 +2065,40 @@ void func_800EE404(void) {
|
||||
|
||||
void Audio_OcaMemoryGameStart(u8 minigameRound) {
|
||||
u8 i;
|
||||
|
||||
// #region SOH [Enhancement]
|
||||
if (CVarGetInteger("gCustomizeOcarinaGame", 0)) {
|
||||
u8 startingNotes = 3;
|
||||
u8 roundOneCount = CVarGetInteger("gOcarinaGameRoundOneNotes", 5);
|
||||
u8 roundTwoCount = CVarGetInteger("gOcarinaGameRoundTwoNotes", 6);
|
||||
u8 roundThreeCount = CVarGetInteger("gOcarinaGameRoundThreeNotes", 8);
|
||||
u8 modMinigameNoteCnts[] = { roundOneCount, roundTwoCount, roundThreeCount };
|
||||
|
||||
if (minigameRound > 2) {
|
||||
minigameRound = 2;
|
||||
}
|
||||
|
||||
sOcaMinigameAppendPos = 0;
|
||||
sOcaMinigameEndPos = sOcaMinigameNoteCnts[minigameRound];
|
||||
startingNotes = CVarGetInteger("gOcarinaGameStartingNotes", 3);
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
Audio_OcaMemoryGameGenNote();
|
||||
if (minigameRound > 2) {
|
||||
minigameRound = 2;
|
||||
}
|
||||
|
||||
sOcaMinigameAppendPos = 0;
|
||||
sOcaMinigameEndPos = modMinigameNoteCnts[minigameRound];
|
||||
|
||||
for (i = 0; i < startingNotes; i++) {
|
||||
Audio_OcaMemoryGameGenNote();
|
||||
}
|
||||
// #endregion
|
||||
} else {
|
||||
if (minigameRound > 2) {
|
||||
minigameRound = 2;
|
||||
}
|
||||
|
||||
sOcaMinigameAppendPos = 0;
|
||||
sOcaMinigameEndPos = sOcaMinigameNoteCnts[minigameRound];
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
Audio_OcaMemoryGameGenNote();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2093,11 +2117,24 @@ s32 Audio_OcaMemoryGameGenNote(void) {
|
||||
rndNote = sOcarinaNoteValues[(rnd + 1) % 5];
|
||||
}
|
||||
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].noteIdx = rndNote;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].unk_02 = 0x2D;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].volume = 0x50;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].vibrato = 0;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].tone = 0;
|
||||
// #region SOH [Enhancement]
|
||||
if (CVarGetInteger("gCustomizeOcarinaGame", 0)) {
|
||||
int noteSpeed = 0x2D;
|
||||
noteSpeed = noteSpeed / CVarGetInteger("gOcarinaGameNoteSpeed", 1);
|
||||
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].noteIdx = rndNote;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].unk_02 = noteSpeed;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].volume = 0x50;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].vibrato = 0;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].tone = 0;
|
||||
// #endregion
|
||||
} else {
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].noteIdx = rndNote;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].unk_02 = 0x2D;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].volume = 0x50;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].vibrato = 0;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].tone = 0;
|
||||
}
|
||||
|
||||
sOcaMinigameAppendPos++;
|
||||
|
||||
|
||||
@@ -1412,12 +1412,20 @@ void EnSkj_StartOcarinaMinigame(EnSkj* this, PlayState* play) {
|
||||
EnSkj_TurnPlayer(this, player);
|
||||
|
||||
if (dialogState == TEXT_STATE_CLOSING) {
|
||||
func_8010BD58(play, OCARINA_ACTION_MEMORY_GAME);
|
||||
if (sOcarinaMinigameSkullKids[SKULL_KID_LEFT].skullkid != NULL) {
|
||||
sOcarinaMinigameSkullKids[SKULL_KID_LEFT].skullkid->minigameState = SKULL_KID_OCARINA_PLAY_NOTES;
|
||||
// #region SOH [Enhancement]
|
||||
if (CVarGetInteger("gInstantOcarinaGameWin", 0) && CVarGetInteger("gCustomizeOcarinaGame", 0)) {
|
||||
play->msgCtx.ocarinaMode = OCARINA_MODE_0F;
|
||||
this->songFailTimer = 160;
|
||||
this->actionFunc = EnSkj_WaitForPlayback;
|
||||
// #endregion
|
||||
} else {
|
||||
func_8010BD58(play, OCARINA_ACTION_MEMORY_GAME);
|
||||
if (sOcarinaMinigameSkullKids[SKULL_KID_LEFT].skullkid != NULL) {
|
||||
sOcarinaMinigameSkullKids[SKULL_KID_LEFT].skullkid->minigameState = SKULL_KID_OCARINA_PLAY_NOTES;
|
||||
this->songFailTimer = 160;
|
||||
this->actionFunc = EnSkj_WaitForPlayback;
|
||||
}
|
||||
}
|
||||
this->songFailTimer = 160;
|
||||
this->actionFunc = EnSkj_WaitForPlayback;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1466,7 +1474,14 @@ void EnSkj_WaitForPlayback(EnSkj* this, PlayState* play) {
|
||||
break;
|
||||
case MSGMODE_MEMORY_GAME_PLAYER_PLAYING:
|
||||
if (this->songFailTimer != 0) {
|
||||
this->songFailTimer--;
|
||||
// #region SOH [Enhancement]
|
||||
if (CVarGetInteger("gOcarinaUnlimitedFailTime", 0) == 1 &&
|
||||
CVarGetInteger("gCustomizeOcarinaGame", 0) == 1) {
|
||||
// don't decrement timer
|
||||
// #endregion
|
||||
} else {
|
||||
this->songFailTimer--;
|
||||
}
|
||||
} else { // took too long, game failed
|
||||
func_80078884(NA_SE_SY_OCARINA_ERROR);
|
||||
Message_CloseTextbox(play);
|
||||
|
||||
Reference in New Issue
Block a user