summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorengineer124 <47598039+engineer124@users.noreply.github.com>2022-05-10 02:59:23 +1000
committerGitHub <noreply@github.com>2022-05-09 18:59:23 +0200
commit95b431793182bd021cb4234255f90b996edd8d4d (patch)
tree13b56539e1ecab971892ebe3d333b13113262245 /src/code
parent6cd8029cd5e039a1094260da49d50b35a36f4f2a (diff)
Audio Ocarina Documentation (#1026)
* Begin ocarina documentation * Many ocarina-related docs * More ocarina docs * Introduce Ocarina Fonts Enum * Fix ocarina font enum * Fix incorrect documentation, more documentation * Ocarina recording documentation * cleanup * Small touch-ups * Fix font -> instrument * format * Better docs on playback, memory game * more cleanup * Add z64ocarina.h * Clean up names * final cleanup * typo * Fix description * better docs * Fix channel -> channelIdx * Fix old "font" name to correct "instrument" name, add io port docs * Add comments to clarify certain lines/functions * format * Rename noteIdx to pitch * Missed a name * Add comment on pitch * `reset` -> `SetInstrument` and `displayed` -> `playback` * Clarify audio_update and windmill comment * Minor PR fixes * Revert Audio_Update because there are 2 different Audio_Update functions * PR Feedback * Ocarina Idx -> Index * Introduce OCARINA_BTN_C_RIGHT_OR_C_LEFT * PR Suggestions * Next PR Suggestions * Next PR Feedback * consistency * Better docs (PR) * Better comment
Diffstat (limited to 'src/code')
-rw-r--r--src/code/audio_data.c258
-rw-r--r--src/code/audio_load.c4
-rw-r--r--src/code/audio_seqplayer.c8
-rw-r--r--src/code/code_800E4FE0.c17
-rw-r--r--src/code/code_800EC960.c1911
-rw-r--r--src/code/z_construct.c16
-rw-r--r--src/code/z_demo.c2
-rw-r--r--src/code/z_message_PAL.c707
-rw-r--r--src/code/z_sram.c12
9 files changed, 1576 insertions, 1359 deletions
diff --git a/src/code/audio_data.c b/src/code/audio_data.c
index 5a8d46387..4798ea47c 100644
--- a/src/code/audio_data.c
+++ b/src/code/audio_data.c
@@ -404,135 +404,135 @@ f32 gBendPitchTwoSemitonesFrequencies[] = {
1.117368f, 1.118385f, 1.119403f, 1.120422f, 1.121441f, 1.122462f,
};
-f32 gNoteFrequencies[] = {
- /* 0x00 */ 0.105112f, // NOTE_A0
- /* 0x01 */ 0.111362f, // NOTE_BFLAT0
- /* 0x02 */ 0.117984f, // NOTE_B0
- /* 0x03 */ 0.125f, // NOTE_C1
- /* 0x04 */ 0.132433f, // NOTE_DFLAT1
- /* 0x05 */ 0.140308f, // NOTE_D1
- /* 0x06 */ 0.148651f, // NOTE_EFLAT1
- /* 0x07 */ 0.15749f, // NOTE_E1
- /* 0x08 */ 0.166855f, // NOTE_F1
- /* 0x09 */ 0.176777f, // NOTE_GFLAT1
- /* 0x0A */ 0.187288f, // NOTE_G1
- /* 0x0B */ 0.198425f, // NOTE_AFLAT1
- /* 0x0C */ 0.210224f, // NOTE_A1
- /* 0x0D */ 0.222725f, // NOTE_BFLAT1
- /* 0x0E */ 0.235969f, // NOTE_B1
- /* 0x0F */ 0.25f, // NOTE_C2
- /* 0x10 */ 0.264866f, // NOTE_DFLAT2
- /* 0x11 */ 0.280616f, // NOTE_D2
- /* 0x12 */ 0.297302f, // NOTE_EFLAT2
- /* 0x13 */ 0.31498f, // NOTE_E2
- /* 0x14 */ 0.33371f, // NOTE_F2
- /* 0x15 */ 0.353553f, // NOTE_GFLAT2
- /* 0x16 */ 0.374577f, // NOTE_G2
- /* 0x17 */ 0.39685f, // NOTE_AFLAT2
- /* 0x18 */ 0.420448f, // NOTE_A2
- /* 0x19 */ 0.445449f, // NOTE_BFLAT2
- /* 0x1A */ 0.471937f, // NOTE_B2
- /* 0x1B */ 0.5f, // NOTE_C3
- /* 0x1C */ 0.529732f, // NOTE_DFLAT3
- /* 0x1D */ 0.561231f, // NOTE_D3
- /* 0x1E */ 0.594604f, // NOTE_EFLAT3
- /* 0x1F */ 0.629961f, // NOTE_E3
- /* 0x20 */ 0.66742f, // NOTE_F3
- /* 0x21 */ 0.707107f, // NOTE_GFLAT3
- /* 0x22 */ 0.749154f, // NOTE_G3
- /* 0x23 */ 0.793701f, // NOTE_AFLAT3
- /* 0x24 */ 0.840897f, // NOTE_A3
- /* 0x25 */ 0.890899f, // NOTE_BFLAT3
- /* 0x26 */ 0.943875f, // NOTE_B3
- /* 0x27 */ 1.0f, // NOTE_C4 (Middle C)
- /* 0x28 */ 1.059463f, // NOTE_DFLAT4
- /* 0x29 */ 1.122462f, // NOTE_D4
- /* 0x2A */ 1.189207f, // NOTE_EFLAT4
- /* 0x2B */ 1.259921f, // NOTE_E4
- /* 0x2C */ 1.33484f, // NOTE_F4
- /* 0x2D */ 1.414214f, // NOTE_GFLAT4
- /* 0x2E */ 1.498307f, // NOTE_G4
- /* 0x2F */ 1.587401f, // NOTE_AFLAT4
- /* 0x30 */ 1.681793f, // NOTE_A4
- /* 0x31 */ 1.781798f, // NOTE_BFLAT4
- /* 0x32 */ 1.887749f, // NOTE_B4
- /* 0x33 */ 2.0f, // NOTE_C5
- /* 0x34 */ 2.118926f, // NOTE_DFLAT5
- /* 0x35 */ 2.244924f, // NOTE_D5
- /* 0x36 */ 2.378414f, // NOTE_EFLAT5
- /* 0x37 */ 2.519842f, // NOTE_E5
- /* 0x38 */ 2.66968f, // NOTE_F5
- /* 0x39 */ 2.828428f, // NOTE_GFLAT5
- /* 0x3A */ 2.996615f, // NOTE_G5
- /* 0x3B */ 3.174803f, // NOTE_AFLAT5
- /* 0x3C */ 3.363586f, // NOTE_A5
- /* 0x3D */ 3.563596f, // NOTE_BFLAT5
- /* 0x3E */ 3.775498f, // NOTE_B5
- /* 0x3F */ 4.0f, // NOTE_C6
- /* 0x40 */ 4.237853f, // NOTE_DFLAT6
- /* 0x41 */ 4.489849f, // NOTE_D6
- /* 0x42 */ 4.756829f, // NOTE_EFLAT6
- /* 0x43 */ 5.039685f, // NOTE_E6
- /* 0x44 */ 5.33936f, // NOTE_F6
- /* 0x45 */ 5.656855f, // NOTE_GFLAT6
- /* 0x46 */ 5.993229f, // NOTE_G6
- /* 0x47 */ 6.349606f, // NOTE_AFLAT6
- /* 0x48 */ 6.727173f, // NOTE_A6
- /* 0x49 */ 7.127192f, // NOTE_BFLAT6
- /* 0x4A */ 7.550996f, // NOTE_B6
- /* 0x4B */ 8.0f, // NOTE_C7
- /* 0x4C */ 8.475705f, // NOTE_DFLAT7
- /* 0x4D */ 8.979697f, // NOTE_D7
- /* 0x4E */ 9.513658f, // NOTE_EFLAT7
- /* 0x4F */ 10.07937f, // NOTE_E7
- /* 0x50 */ 10.6787205f, // NOTE_F7
- /* 0x51 */ 11.31371f, // NOTE_GFLAT7
- /* 0x52 */ 11.986459f, // NOTE_G7
- /* 0x53 */ 12.699211f, // NOTE_AFLAT7
- /* 0x54 */ 13.454346f, // NOTE_A7
- /* 0x55 */ 14.254383f, // NOTE_BFLAT7
- /* 0x56 */ 15.101993f, // NOTE_B7
- /* 0x57 */ 16.0f, // NOTE_C8
- /* 0x58 */ 16.95141f, // NOTE_DFLAT8
- /* 0x59 */ 17.959395f, // NOTE_D8
- /* 0x5A */ 19.027315f, // NOTE_EFLAT8
- /* 0x5B */ 20.15874f, // NOTE_E8
- /* 0x5C */ 21.35744f, // NOTE_F8
- /* 0x5D */ 22.62742f, // NOTE_GFLAT8
- /* 0x5E */ 23.972918f, // NOTE_G8
- /* 0x5F */ 25.398422f, // NOTE_AFLAT8
- /* 0x60 */ 26.908691f, // NOTE_A8
- /* 0x61 */ 28.508766f, // NOTE_BFLAT8
- /* 0x62 */ 30.203985f, // NOTE_B8
- /* 0x63 */ 32.0f, // NOTE_C9
- /* 0x64 */ 33.90282f, // NOTE_DFLAT9
- /* 0x65 */ 35.91879f, // NOTE_D9
- /* 0x66 */ 38.05463f, // NOTE_EFLAT9
- /* 0x67 */ 40.31748f, // NOTE_E9
- /* 0x68 */ 42.71488f, // NOTE_F9
- /* 0x69 */ 45.25484f, // NOTE_GFLAT9
- /* 0x6A */ 47.945835f, // NOTE_G9
- /* 0x6B */ 50.796845f, // NOTE_AFLAT9
- /* 0x6C */ 53.817383f, // NOTE_A9
- /* 0x6D */ 57.017532f, // NOTE_BFLAT9
- /* 0x6E */ 60.40797f, // NOTE_B9
- /* 0x6F */ 64.0f, // NOTE_C10
- /* 0x70 */ 67.80564f, // NOTE_DFLAT10
- /* 0x71 */ 71.83758f, // NOTE_D10
- /* 0x72 */ 76.10926f, // NOTE_EFLAT10
- /* 0x73 */ 80.63496f, // NOTE_E10
- /* 0x74 */ 85.42976f, // NOTE_F10
- /* 0x75 */ 0.055681f, // NOTE_BFLATNEG1
- /* 0x76 */ 0.058992f, // NOTE_BNEG1
- /* 0x77 */ 0.0625f, // NOTE_C0
- /* 0x78 */ 0.066216f, // NOTE_DFLAT0
- /* 0x79 */ 0.070154f, // NOTE_D0
- /* 0x7A */ 0.074325f, // NOTE_EFLAT0
- /* 0x7B */ 0.078745f, // NOTE_E0
- /* 0x7C */ 0.083427f, // NOTE_F0
- /* 0x7D */ 0.088388f, // NOTE_GFLAT0
- /* 0x7E */ 0.093644f, // NOTE_G0
- /* 0x7F */ 0.099213f, // NOTE_AFLAT0
+f32 gPitchFrequencies[] = {
+ /* 0x00 */ 0.105112f, // PITCH_A0
+ /* 0x01 */ 0.111362f, // PITCH_BFLAT0
+ /* 0x02 */ 0.117984f, // PITCH_B0
+ /* 0x03 */ 0.125f, // PITCH_C1
+ /* 0x04 */ 0.132433f, // PITCH_DFLAT1
+ /* 0x05 */ 0.140308f, // PITCH_D1
+ /* 0x06 */ 0.148651f, // PITCH_EFLAT1
+ /* 0x07 */ 0.15749f, // PITCH_E1
+ /* 0x08 */ 0.166855f, // PITCH_F1
+ /* 0x09 */ 0.176777f, // PITCH_GFLAT1
+ /* 0x0A */ 0.187288f, // PITCH_G1
+ /* 0x0B */ 0.198425f, // PITCH_AFLAT1
+ /* 0x0C */ 0.210224f, // PITCH_A1
+ /* 0x0D */ 0.222725f, // PITCH_BFLAT1
+ /* 0x0E */ 0.235969f, // PITCH_B1
+ /* 0x0F */ 0.25f, // PITCH_C2
+ /* 0x10 */ 0.264866f, // PITCH_DFLAT2
+ /* 0x11 */ 0.280616f, // PITCH_D2
+ /* 0x12 */ 0.297302f, // PITCH_EFLAT2
+ /* 0x13 */ 0.31498f, // PITCH_E2
+ /* 0x14 */ 0.33371f, // PITCH_F2
+ /* 0x15 */ 0.353553f, // PITCH_GFLAT2
+ /* 0x16 */ 0.374577f, // PITCH_G2
+ /* 0x17 */ 0.39685f, // PITCH_AFLAT2
+ /* 0x18 */ 0.420448f, // PITCH_A2
+ /* 0x19 */ 0.445449f, // PITCH_BFLAT2
+ /* 0x1A */ 0.471937f, // PITCH_B2
+ /* 0x1B */ 0.5f, // PITCH_C3
+ /* 0x1C */ 0.529732f, // PITCH_DFLAT3
+ /* 0x1D */ 0.561231f, // PITCH_D3
+ /* 0x1E */ 0.594604f, // PITCH_EFLAT3
+ /* 0x1F */ 0.629961f, // PITCH_E3
+ /* 0x20 */ 0.66742f, // PITCH_F3
+ /* 0x21 */ 0.707107f, // PITCH_GFLAT3
+ /* 0x22 */ 0.749154f, // PITCH_G3
+ /* 0x23 */ 0.793701f, // PITCH_AFLAT3
+ /* 0x24 */ 0.840897f, // PITCH_A3
+ /* 0x25 */ 0.890899f, // PITCH_BFLAT3
+ /* 0x26 */ 0.943875f, // PITCH_B3
+ /* 0x27 */ 1.0f, // PITCH_C4 (Middle C)
+ /* 0x28 */ 1.059463f, // PITCH_DFLAT4
+ /* 0x29 */ 1.122462f, // PITCH_D4
+ /* 0x2A */ 1.189207f, // PITCH_EFLAT4
+ /* 0x2B */ 1.259921f, // PITCH_E4
+ /* 0x2C */ 1.33484f, // PITCH_F4
+ /* 0x2D */ 1.414214f, // PITCH_GFLAT4
+ /* 0x2E */ 1.498307f, // PITCH_G4
+ /* 0x2F */ 1.587401f, // PITCH_AFLAT4
+ /* 0x30 */ 1.681793f, // PITCH_A4
+ /* 0x31 */ 1.781798f, // PITCH_BFLAT4
+ /* 0x32 */ 1.887749f, // PITCH_B4
+ /* 0x33 */ 2.0f, // PITCH_C5
+ /* 0x34 */ 2.118926f, // PITCH_DFLAT5
+ /* 0x35 */ 2.244924f, // PITCH_D5
+ /* 0x36 */ 2.378414f, // PITCH_EFLAT5
+ /* 0x37 */ 2.519842f, // PITCH_E5
+ /* 0x38 */ 2.66968f, // PITCH_F5
+ /* 0x39 */ 2.828428f, // PITCH_GFLAT5
+ /* 0x3A */ 2.996615f, // PITCH_G5
+ /* 0x3B */ 3.174803f, // PITCH_AFLAT5
+ /* 0x3C */ 3.363586f, // PITCH_A5
+ /* 0x3D */ 3.563596f, // PITCH_BFLAT5
+ /* 0x3E */ 3.775498f, // PITCH_B5
+ /* 0x3F */ 4.0f, // PITCH_C6
+ /* 0x40 */ 4.237853f, // PITCH_DFLAT6
+ /* 0x41 */ 4.489849f, // PITCH_D6
+ /* 0x42 */ 4.756829f, // PITCH_EFLAT6
+ /* 0x43 */ 5.039685f, // PITCH_E6
+ /* 0x44 */ 5.33936f, // PITCH_F6
+ /* 0x45 */ 5.656855f, // PITCH_GFLAT6
+ /* 0x46 */ 5.993229f, // PITCH_G6
+ /* 0x47 */ 6.349606f, // PITCH_AFLAT6
+ /* 0x48 */ 6.727173f, // PITCH_A6
+ /* 0x49 */ 7.127192f, // PITCH_BFLAT6
+ /* 0x4A */ 7.550996f, // PITCH_B6
+ /* 0x4B */ 8.0f, // PITCH_C7
+ /* 0x4C */ 8.475705f, // PITCH_DFLAT7
+ /* 0x4D */ 8.979697f, // PITCH_D7
+ /* 0x4E */ 9.513658f, // PITCH_EFLAT7
+ /* 0x4F */ 10.07937f, // PITCH_E7
+ /* 0x50 */ 10.6787205f, // PITCH_F7
+ /* 0x51 */ 11.31371f, // PITCH_GFLAT7
+ /* 0x52 */ 11.986459f, // PITCH_G7
+ /* 0x53 */ 12.699211f, // PITCH_AFLAT7
+ /* 0x54 */ 13.454346f, // PITCH_A7
+ /* 0x55 */ 14.254383f, // PITCH_BFLAT7
+ /* 0x56 */ 15.101993f, // PITCH_B7
+ /* 0x57 */ 16.0f, // PITCH_C8
+ /* 0x58 */ 16.95141f, // PITCH_DFLAT8
+ /* 0x59 */ 17.959395f, // PITCH_D8
+ /* 0x5A */ 19.027315f, // PITCH_EFLAT8
+ /* 0x5B */ 20.15874f, // PITCH_E8
+ /* 0x5C */ 21.35744f, // PITCH_F8
+ /* 0x5D */ 22.62742f, // PITCH_GFLAT8
+ /* 0x5E */ 23.972918f, // PITCH_G8
+ /* 0x5F */ 25.398422f, // PITCH_AFLAT8
+ /* 0x60 */ 26.908691f, // PITCH_A8
+ /* 0x61 */ 28.508766f, // PITCH_BFLAT8
+ /* 0x62 */ 30.203985f, // PITCH_B8
+ /* 0x63 */ 32.0f, // PITCH_C9
+ /* 0x64 */ 33.90282f, // PITCH_DFLAT9
+ /* 0x65 */ 35.91879f, // PITCH_D9
+ /* 0x66 */ 38.05463f, // PITCH_EFLAT9
+ /* 0x67 */ 40.31748f, // PITCH_E9
+ /* 0x68 */ 42.71488f, // PITCH_F9
+ /* 0x69 */ 45.25484f, // PITCH_GFLAT9
+ /* 0x6A */ 47.945835f, // PITCH_G9
+ /* 0x6B */ 50.796845f, // PITCH_AFLAT9
+ /* 0x6C */ 53.817383f, // PITCH_A9
+ /* 0x6D */ 57.017532f, // PITCH_BFLAT9
+ /* 0x6E */ 60.40797f, // PITCH_B9
+ /* 0x6F */ 64.0f, // PITCH_C10
+ /* 0x70 */ 67.80564f, // PITCH_DFLAT10
+ /* 0x71 */ 71.83758f, // PITCH_D10
+ /* 0x72 */ 76.10926f, // PITCH_EFLAT10
+ /* 0x73 */ 80.63496f, // PITCH_E10
+ /* 0x74 */ 85.42976f, // PITCH_F10
+ /* 0x75 */ 0.055681f, // PITCH_BFLATNEG1
+ /* 0x76 */ 0.058992f, // PITCH_BNEG1
+ /* 0x77 */ 0.0625f, // PITCH_C0
+ /* 0x78 */ 0.066216f, // PITCH_DFLAT0
+ /* 0x79 */ 0.070154f, // PITCH_D0
+ /* 0x7A */ 0.074325f, // PITCH_EFLAT0
+ /* 0x7B */ 0.078745f, // PITCH_E0
+ /* 0x7C */ 0.083427f, // PITCH_F0
+ /* 0x7D */ 0.088388f, // PITCH_GFLAT0
+ /* 0x7E */ 0.093644f, // PITCH_G0
+ /* 0x7F */ 0.099213f, // PITCH_AFLAT0
};
u8 gDefaultShortNoteVelocityTable[] = {
diff --git a/src/code/audio_load.c b/src/code/audio_load.c
index 092ae1d3f..f331f8bdc 100644
--- a/src/code/audio_load.c
+++ b/src/code/audio_load.c
@@ -1098,7 +1098,7 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
gAudioContext.aiBufLengths[i] = 0xA0;
}
- gAudioContext.totalTaskCnt = 0;
+ gAudioContext.totalTaskCount = 0;
gAudioContext.rspTaskIdx = 0;
gAudioContext.curAIBufIdx = 0;
gAudioContext.soundMode = 0;
@@ -1162,7 +1162,7 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
AudioHeap_AllocPoolInit(&gAudioContext.permanentPool, temp_v0_3, D_8014A6C4.permanentPoolSize);
gAudioContextInitalized = true;
- osSendMesg(gAudioContext.taskStartQueueP, (OSMesg)gAudioContext.totalTaskCnt, OS_MESG_NOBLOCK);
+ osSendMesg(gAudioContext.taskStartQueueP, (OSMesg)gAudioContext.totalTaskCount, OS_MESG_NOBLOCK);
}
void AudioLoad_InitSlowLoads(void) {
diff --git a/src/code/audio_seqplayer.c b/src/code/audio_seqplayer.c
index e405309ca..3f4b15978 100644
--- a/src/code/audio_seqplayer.c
+++ b/src/code/audio_seqplayer.c
@@ -716,8 +716,8 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
}
}
- temp_f2 = gNoteFrequencies[semitone2] * tuning;
- temp_f14 = gNoteFrequencies[layer->portamentoTargetNote] * tuning;
+ temp_f2 = gPitchFrequencies[semitone2] * tuning;
+ temp_f14 = gPitchFrequencies[layer->portamentoTargetNote] * tuning;
switch (PORTAMENTO_MODE(*portamento)) {
case PORTAMENTO_MODE_1:
@@ -767,10 +767,10 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
sound = Audio_InstrumentGetSound(instrument, semitone);
sameSound = (sound == layer->sound);
layer->sound = sound;
- layer->freqScale = gNoteFrequencies[semitone2] * sound->tuning;
+ layer->freqScale = gPitchFrequencies[semitone2] * sound->tuning;
} else {
layer->sound = NULL;
- layer->freqScale = gNoteFrequencies[semitone2];
+ layer->freqScale = gPitchFrequencies[semitone2];
if (instOrWave >= 0xC0) {
layer->sound = &gAudioContext.synthesisReverbs[instOrWave - 0xC0].sound;
}
diff --git a/src/code/code_800E4FE0.c b/src/code/code_800E4FE0.c
index 04c43a2bd..93419f4be 100644
--- a/src/code/code_800E4FE0.c
+++ b/src/code/code_800E4FE0.c
@@ -35,6 +35,9 @@ AudioTask* func_800E4FE0(void) {
return func_800E5000();
}
+/**
+ * This is Audio_Update for the audio thread
+ */
AudioTask* func_800E5000(void) {
static s32 sMaxAbiCmdCnt = 0x80;
static AudioTask* sWaitingAudioTask = NULL;
@@ -50,13 +53,13 @@ AudioTask* func_800E5000(void) {
s32 sp48;
s32 i;
- gAudioContext.totalTaskCnt++;
- if (gAudioContext.totalTaskCnt % (gAudioContext.audioBufferParameters.specUnk4) != 0) {
+ gAudioContext.totalTaskCount++;
+ if (gAudioContext.totalTaskCount % (gAudioContext.audioBufferParameters.specUnk4) != 0) {
if (D_801755D0 != NULL) {
D_801755D0();
}
- if ((gAudioContext.totalTaskCnt % gAudioContext.audioBufferParameters.specUnk4) + 1 ==
+ if ((gAudioContext.totalTaskCount % gAudioContext.audioBufferParameters.specUnk4) + 1 ==
gAudioContext.audioBufferParameters.specUnk4) {
return sWaitingAudioTask;
} else {
@@ -64,7 +67,7 @@ AudioTask* func_800E5000(void) {
}
}
- osSendMesg(gAudioContext.taskStartQueueP, (OSMesg)gAudioContext.totalTaskCnt, OS_MESG_NOBLOCK);
+ osSendMesg(gAudioContext.taskStartQueueP, (OSMesg)gAudioContext.totalTaskCount, OS_MESG_NOBLOCK);
gAudioContext.rspTaskIdx ^= 1;
gAudioContext.curAIBufIdx++;
gAudioContext.curAIBufIdx %= 3;
@@ -163,9 +166,9 @@ AudioTask* func_800E5000(void) {
gAudioContext.curAbiCmdBuf =
AudioSynth_Update(gAudioContext.curAbiCmdBuf, &abiCmdCnt, currAiBuffer, gAudioContext.aiBufLengths[index]);
- gAudioContext.audioRandom = (gAudioContext.audioRandom + gAudioContext.totalTaskCnt) * osGetCount();
+ gAudioContext.audioRandom = (gAudioContext.audioRandom + gAudioContext.totalTaskCount) * osGetCount();
gAudioContext.audioRandom =
- gAudioContext.aiBuffers[index][gAudioContext.totalTaskCnt & 0xFF] + gAudioContext.audioRandom;
+ gAudioContext.aiBuffers[index][gAudioContext.totalTaskCount & 0xFF] + gAudioContext.audioRandom;
gWaveSamples[8] = (s16*)(((u8*)func_800E4FE0) + (gAudioContext.audioRandom & 0xFFF0));
index = gAudioContext.rspTaskIdx;
@@ -809,7 +812,7 @@ s32 func_800E66C0(s32 arg0) {
u32 Audio_NextRandom(void) {
static u32 audRand = 0x12345678;
- audRand = ((osGetCount() + 0x1234567) * (audRand + gAudioContext.totalTaskCnt));
+ audRand = ((osGetCount() + 0x1234567) * (audRand + gAudioContext.totalTaskCount));
audRand += gAudioContext.audioRandom;
return audRand;
}
diff --git a/src/code/code_800EC960.c b/src/code/code_800EC960.c
index 34badb146..9e6309eb5 100644
--- a/src/code/code_800EC960.c
+++ b/src/code/code_800EC960.c
@@ -23,6 +23,8 @@
Audio_QueueSeqCmd(0x80000000 | ((u8)playerIdx << 24) | ((u8)a << 16) | ((u8)b << 8) | ((u8)c))
#define Audio_SeqCmdF(playerIdx, a) Audio_QueueSeqCmd(0xF0000000 | ((u8)playerIdx << 24) | ((u8)a))
+#define ABS_ALT(x) ((x) < 0 ? -(x) : (x))
+
typedef struct {
/* 0x0 */ f32 vol;
/* 0x4 */ f32 freqScale;
@@ -33,6 +35,25 @@ typedef struct {
/* 0xC */ u8 unk_0C;
} SfxPlayerState;
+typedef enum {
+ /* 0x0 */ SFX_CHANNEL_PLAYER0, // SfxPlayerBank
+ /* 0x1 */ SFX_CHANNEL_PLAYER1,
+ /* 0x2 */ SFX_CHANNEL_PLAYER2,
+ /* 0x3 */ SFX_CHANNEL_ITEM0, // SfxItemBank
+ /* 0x4 */ SFX_CHANNEL_ITEM1,
+ /* 0x5 */ SFX_CHANNEL_ENV0, // SfxEnvironmentBank
+ /* 0x6 */ SFX_CHANNEL_ENV1,
+ /* 0x7 */ SFX_CHANNEL_ENV2,
+ /* 0x8 */ SFX_CHANNEL_ENEMY0, // SfxEnemyBank
+ /* 0x9 */ SFX_CHANNEL_ENEMY1,
+ /* 0xA */ SFX_CHANNEL_ENEMY2,
+ /* 0xB */ SFX_CHANNEL_SYSTEM0, // SfxSystemBank
+ /* 0xC */ SFX_CHANNEL_SYSTEM1,
+ /* 0xD */ SFX_CHANNEL_OCARINA, // SfxOcarinaBank
+ /* 0xE */ SFX_CHANNEL_VOICE0, // SfxVoiceBank
+ /* 0xF */ SFX_CHANNEL_VOICE1
+} SfxChannelIndex; // playerIdx = 2
+
typedef struct {
/* 0x0 */ f32 value;
/* 0x4 */ f32 target;
@@ -65,24 +86,12 @@ typedef enum {
/* 0xF */ PAGE_MAX
} AudioDebugPage;
-/** bit field of songs that can be played
- * 0x0800 storms
- * 0x0400 song of time
- * 0x0200 suns
- * 0x0100 lullaby
- * 0x0080 epona
- * 0x0040 sarias
- * 0x0020 prelude
- * 0x0010 nocturne
- * 0x0008 requiem
- * 0x0004 serenade
- * 0x0002 bolero
- * 0x0001 minuet
- */
-
#define SCROLL_PRINT_BUF_SIZE 25
-#define SFX_PLAYER_CHANNEL_OCARINA 13
+typedef struct {
+ s8 x;
+ s8 y;
+} OcarinaStick;
u8 gIsLargeSoundBank[7] = { 0, 0, 0, 1, 0, 0, 0 };
@@ -824,353 +833,376 @@ NatureAmbienceDataIO sNatureAmbienceDataIO[20] = {
},
};
-u32 sOcarinaAllowedBtnMask = 0x800F;
-s32 sOcarinaABtnMap = 0x8000;
-s32 sOcarinaCUPBtnMap = 8;
-s32 sOcarinaCDownBtnMap = 4;
-u8 sOcarinaInpEnabled = 0;
-s8 D_80130F10 = 0; // "OCA", ocarina active?
-u8 sCurOcarinaBtnVal = 0xFF;
-u8 sPrevOcarinaNoteVal = 0;
-u8 sCurOcarinaBtnIdx = 0; // note index?
-u8 sLearnSongLastBtn = 0;
-f32 D_80130F24 = 1.0f;
-f32 D_80130F28 = 87.0f / 127.0f;
-s8 D_80130F2C = 0; // pitch?
-s8 D_80130F30 = 0x57;
-s8 D_80130F34 = 0;
-u8 sPlaybackState = 0; // 80130F38
-u32 D_80130F3C = 0; // "SEQ"
-u32 sNotePlaybackTimer = 0;
+u32 sOcarinaAllowedButtonMask = (BTN_A | BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP);
+s32 sOcarinaAButtonMap = BTN_A;
+s32 sOcarinaCUpButtonMap = BTN_CUP;
+s32 sOcarinaCDownButtonMap = BTN_CDOWN;
+u8 sIsOcarinaInputEnabled = false;
+s8 sOcarinaInstrumentId = OCARINA_INSTRUMENT_OFF;
+u8 sCurOcarinaPitch = OCARINA_PITCH_NONE;
+u8 sPrevOcarinaPitch = OCARINA_PITCH_C4;
+u8 sCurOcarinaButtonIndex = OCARINA_BTN_A;
+u8 sMusicStaffPrevPitch = OCARINA_PITCH_C4;
+f32 sCurOcarinaBendFreq = 1.0f;
+f32 sRelativeOcarinaVolume = 87.0f / 127.0f;
+s8 sCurOcarinaBendIndex = 0;
+s8 sCurOcarinaVolume = 87;
+s8 sCurOcarinaVibrato = 0;
+u8 sPlaybackState = 0;
+u32 sOcarinaFlags = 0;
+u32 sPlaybackNoteTimer = 0;
u16 sPlaybackNotePos = 0;
-u16 sStaffPlaybackPos = 0;
-u16 D_80130F4C = 0;
-u8 sDisplayedNoteValue = 0xFF; // Note to display on screen?
+u16 sPlaybackStaffPos = 0;
+u16 sPrevOcarinaWithMusicStaffFlags = 0;
+u8 sPlaybackPitch = OCARINA_PITCH_NONE; // Pitch + PitchFlags
u8 sNotePlaybackVolume = 0;
u8 sNotePlaybackVibrato = 0;
-s8 sNotePlaybackTone = 0;
-f32 sNormalizedNotePlaybackTone = 1.0f;
-f32 sNormalizedNotePlaybackVolume = 1.0f;
-s32 D_80130F68 = 0;
-u8 sOcarinaNoteValues[5] = { 2, 5, 9, 11, 14 };
-u8 sOcaMinigameAppendPos = 0;
-u8 sOcaMinigameEndPos = 0;
-u8 sOcaMinigameNoteCnts[] = { 5, 6, 8 };
-
-OcarinaNote sOcarinaSongs[OCARINA_SONG_MAX][20] = {
- // Minuet
+s8 sNotePlaybackBend = 0;
+f32 sRelativeNotePlaybackBend = 1.0f;
+f32 sRelativeNotePlaybackVolume = 1.0f;
+s32 sOcarinaPlaybackTaskStart = 0;
+
+u8 sButtonToPitchMap[5] = {
+ OCARINA_PITCH_D4, // OCARINA_BTN_A
+ OCARINA_PITCH_F4, // OCARINA_BTN_C_DOWN
+ OCARINA_PITCH_A4, // OCARINA_BTN_C_RIGHT
+ OCARINA_PITCH_B4, // OCARINA_BTN_C_LEFT
+ OCARINA_PITCH_D5, // OCARINA_BTN_C_UP
+};
+
+u8 sOcaMemoryGameAppendPos = 0;
+u8 sOcaMemoryGameEndPos = 0;
+u8 sOcaMemoryGameNumNotes[] = { 5, 6, 8 };
+
+OcarinaNote sOcarinaSongNotes[OCARINA_SONG_MAX][20] = {
+ // OCARINA_SONG_MINUET
{
- { 2, 0, 18, 86, 0, 0, 0 },
- { 14, 0, 18, 92, 0, 0, 0 },
- { 11, 0, 72, 86, 0, 0, 0 },
- { 9, 0, 18, 80, 0, 0, 0 },
- { 11, 0, 18, 88, 0, 0, 0 },
- { 9, 0, 144, 86, 0, 0, 0 },
- { 0xFF, 0, 0, 86, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 18, 86, 0, 0, 0 },
+ { OCARINA_PITCH_D5, 18, 92, 0, 0, 0 },
+ { OCARINA_PITCH_B4, 72, 86, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 18, 80, 0, 0, 0 },
+ { OCARINA_PITCH_B4, 18, 88, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 144, 86, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 86, 0, 0, 0 },
},
- // Bolero
+ // OCARINA_SONG_BOLERO
{
- { 5, 0, 15, 80, 0, 0, 0 },
- { 2, 0, 15, 72, 0, 0, 0 },
- { 5, 0, 15, 84, 0, 0, 0 },
- { 2, 0, 15, 76, 0, 0, 0 },
- { 9, 0, 15, 84, 0, 0, 0 },
- { 5, 0, 15, 74, 0, 0, 0 },
- { 9, 0, 15, 78, 0, 0, 0 },
- { 5, 0, 135, 66, 0, 0, 0 },
- { 0xFF, 0, 0, 66, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 15, 80, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 15, 72, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 15, 84, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 15, 76, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 15, 84, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 15, 74, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 15, 78, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 135, 66, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 66, 0, 0, 0 },
},
- // Serenade
+ // OCARINA_SONG_SERENADE
{
- { 2, 0, 36, 60, 0, 0, 0 },
- { 5, 0, 36, 78, 0, 0, 0 },
- { 9, 0, 33, 82, 0, 0, 0 },
- { 0xFF, 0, 3, 82, 0, 0, 0 },
- { 9, 0, 36, 84, 0, 0, 0 },
- { 11, 0, 144, 90, 0, 0, 0 },
- { 0xFF, 0, 0, 90, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 36, 60, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 36, 78, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 33, 82, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 3, 82, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 36, 84, 0, 0, 0 },
+ { OCARINA_PITCH_B4, 144, 90, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 90, 0, 0, 0 },
},
- // Requiem
+ // OCARINA_SONG_REQUIEM
{
- { 2, 0, 45, 88, 0, 0, 0 },
- { 5, 0, 23, 86, 0, 0, 0 },
- { 2, 0, 22, 84, 0, 0, 0 },
- { 9, 0, 45, 86, 0, 0, 0 },
- { 5, 0, 45, 94, 0, 0, 0 },
- { 2, 0, 180, 94, 0, 0, 0 },
- { 0xFF, 0, 0, 94, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 45, 88, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 23, 86, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 22, 84, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 45, 86, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 45, 94, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 180, 94, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 94, 0, 0, 0 },
},
- // Nocturne
+ // OCARINA_SONG_NOCTURNE
{
- { 11, 0, 36, 88, 0, 0, 0 },
- { 9, 0, 33, 84, 0, 0, 0 },
- { 0xFF, 0, 3, 84, 0, 0, 0 },
- { 9, 0, 18, 82, 0, 0, 0 },
- { 2, 0, 18, 60, 0, 0, 0 },
- { 11, 0, 18, 90, 0, 0, 0 },
- { 9, 0, 18, 88, 0, 0, 0 },
- { 5, 0, 144, 96, 0, 0, 0 },
- { 0xFF, 0, 0, 96, 0, 0, 0 },
+ { OCARINA_PITCH_B4, 36, 88, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 33, 84, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 3, 84, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 18, 82, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 18, 60, 0, 0, 0 },
+ { OCARINA_PITCH_B4, 18, 90, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 18, 88, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 144, 96, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 96, 0, 0, 0 },
},
- // Prelude
+ // OCARINA_SONG_PRELUDE
{
- { 14, 0, 15, 84, 0, 0, 0 },
- { 9, 0, 45, 88, 0, 0, 0 },
- { 14, 0, 15, 88, 0, 0, 0 },
- { 9, 0, 15, 82, 0, 0, 0 },
- { 11, 0, 15, 86, 0, 0, 0 },
- { 14, 0, 60, 90, 0, 0, 0 },
- { 0xFF, 0, 75, 90, 0, 0, 0 },
- { 0xFF, 0, 0, 90, 0, 0, 0 },
+ { OCARINA_PITCH_D5, 15, 84, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 45, 88, 0, 0, 0 },
+ { OCARINA_PITCH_D5, 15, 88, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 15, 82, 0, 0, 0 },
+ { OCARINA_PITCH_B4, 15, 86, 0, 0, 0 },
+ { OCARINA_PITCH_D5, 60, 90, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 75, 90, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 90, 0, 0, 0 },
},
- // Sarias
+ // OCARINA_SONG_SARIAS
{
- { 5, 0, 17, 84, 0, 0, 0 },
- { 9, 0, 17, 88, 0, 0, 0 },
- { 11, 0, 34, 80, 0, 0, 0 },
- { 5, 0, 17, 84, 0, 0, 0 },
- { 9, 0, 17, 88, 0, 0, 0 },
- { 11, 0, 136, 80, 0, 0, 0 },
- { 0xFF, 0, 0, 90, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 17, 84, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 17, 88, 0, 0, 0 },
+ { OCARINA_PITCH_B4, 34, 80, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 17, 84, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 17, 88, 0, 0, 0 },
+ { OCARINA_PITCH_B4, 136, 80, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 90, 0, 0, 0 },
},
- // Epona
+ // OCARINA_SONG_EPONAS
{
- { 14, 0, 18, 84, 0, 0, 0 },
- { 11, 0, 18, 88, 0, 0, 0 },
- { 9, 0, 72, 80, 0, 0, 0 },
- { 14, 0, 18, 84, 0, 0, 0 },
- { 11, 0, 18, 88, 0, 0, 0 },
- { 9, 0, 144, 80, 0, 0, 0 },
- { 0xFF, 0, 0, 90, 0, 0, 0 },
+ { OCARINA_PITCH_D5, 18, 84, 0, 0, 0 },
+ { OCARINA_PITCH_B4, 18, 88, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 72, 80, 0, 0, 0 },
+ { OCARINA_PITCH_D5, 18, 84, 0, 0, 0 },
+ { OCARINA_PITCH_B4, 18, 88, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 144, 80, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 90, 0, 0, 0 },
},
- // Lullaby
+ // OCARINA_SONG_LULLABY
{
- { 11, 0, 51, 84, 0, 0, 0 },
- { 14, 0, 25, 88, 0, 0, 0 },
- { 9, 0, 78, 80, 0, 0, 0 },
- { 11, 0, 51, 84, 0, 0, 0 },
- { 14, 0, 25, 88, 0, 0, 0 },
- { 9, 0, 100, 80, 0, 0, 0 },
- { 0xFF, 0, 0, 90, 0, 0, 0 },
+ { OCARINA_PITCH_B4, 51, 84, 0, 0, 0 },
+ { OCARINA_PITCH_D5, 25, 88, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 78, 80, 0, 0, 0 },
+ { OCARINA_PITCH_B4, 51, 84, 0, 0, 0 },
+ { OCARINA_PITCH_D5, 25, 88, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 100, 80, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 90, 0, 0, 0 },
},
- // Suns
+ // OCARINA_SONG_SUNS
{
- { 9, 0, 12, 84, 0, 0, 0 },
- { 5, 0, 13, 88, 0, 0, 0 },
- { 14, 0, 29, 80, 2, 0, 0 },
- { 0xFF, 0, 9, 84, 0, 0, 0 },
- { 9, 0, 12, 84, 0, 0, 0 },
- { 5, 0, 13, 88, 0, 0, 0 },
- { 14, 0, 120, 80, 3, 0, 0 },
- { 0xFF, 0, 0, 90, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 12, 84, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 13, 88, 0, 0, 0 },
+ { OCARINA_PITCH_D5, 29, 80, 2, 0, 0 },
+ { OCARINA_PITCH_NONE, 9, 84, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 12, 84, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 13, 88, 0, 0, 0 },
+ { OCARINA_PITCH_D5, 120, 80, 3, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 90, 0, 0, 0 },
},
- // Song of Time
+ // OCARINA_SONG_TIME
{
- { 9, 0, 32, 84, 0, 0, 0 },
- { 2, 0, 65, 88, 0, 0, 0 },
- { 5, 0, 33, 80, 0, 0, 0 },
- { 9, 0, 32, 84, 0, 0, 0 },
- { 2, 0, 65, 88, 0, 0, 0 },
- { 5, 0, 99, 80, 0, 0, 0 },
- { 0xFF, 0, 0, 90, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 32, 84, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 65, 88, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 33, 80, 0, 0, 0 },
+ { OCARINA_PITCH_A4, 32, 84, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 65, 88, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 99, 80, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 90, 0, 0, 0 },
},
- // Storms
+ // OCARINA_SONG_STORMS
{
- { 2, 0, 11, 84, 0, 0, 0 },
- { 5, 0, 11, 88, 0, 0, 0 },
- { 14, 0, 45, 80, 0, 0, 0 },
- { 2, 0, 11, 84, 0, 0, 0 },
- { 5, 0, 11, 88, 0, 0, 0 },
- { 14, 0, 90, 80, 0, 0, 0 },
- { 0xFF, 0, 0, 90, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 11, 84, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 11, 88, 0, 0, 0 },
+ { OCARINA_PITCH_D5, 45, 80, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 11, 84, 0, 0, 0 },
+ { OCARINA_PITCH_F4, 11, 88, 0, 0, 0 },
+ { OCARINA_PITCH_D5, 90, 80, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 90, 0, 0, 0 },
},
- // Scarecrow
+ // OCARINA_SONG_SCARECROW_SPAWN
{
- { 2, 0, 3, 0, 0, 0, 0 },
- { 0xFF, 0, 0, 255, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 3, 0, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 255, 0, 0, 0 },
},
- // Lost Woods Memory Game
+ // OCARINA_SONG_MEMORY_GAME
{
- { 2, 0, 3, 0, 0, 0, 0 },
- { 0xFF, 0, 0, 0, 0, 0, 0 },
+ { OCARINA_PITCH_D4, 3, 0, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 0, 0, 0, 0 },
},
};
-OcarinaNote* sPlaybackSong = sOcarinaSongs[0];
+OcarinaNote* sPlaybackSong = sOcarinaSongNotes[0];
u8 sFrogsSongNotes[14] = {
- OCARINA_NOTE_A, OCARINA_NOTE_C_LEFT, OCARINA_NOTE_C_RIGHT, OCARINA_NOTE_C_DOWN, OCARINA_NOTE_C_LEFT,
- OCARINA_NOTE_C_RIGHT, OCARINA_NOTE_C_DOWN, OCARINA_NOTE_A, OCARINA_NOTE_C_DOWN, OCARINA_NOTE_A,
- OCARINA_NOTE_C_DOWN, OCARINA_NOTE_C_RIGHT, OCARINA_NOTE_C_LEFT, OCARINA_NOTE_A,
+ OCARINA_BTN_A, OCARINA_BTN_C_LEFT, OCARINA_BTN_C_RIGHT, OCARINA_BTN_C_DOWN, OCARINA_BTN_C_LEFT,
+ OCARINA_BTN_C_RIGHT, OCARINA_BTN_C_DOWN, OCARINA_BTN_A, OCARINA_BTN_C_DOWN, OCARINA_BTN_A,
+ OCARINA_BTN_C_DOWN, OCARINA_BTN_C_RIGHT, OCARINA_BTN_C_LEFT, OCARINA_BTN_A,
};
u8* gFrogsSongPtr = sFrogsSongNotes;
-u8 sRecordingState = 0;
+u8 sRecordingState = OCARINA_RECORD_OFF;
u8 sRecordSongPos = 0;
-u32 D_80131860 = 0;
-u8 D_80131864 = 0;
-u8 D_80131868 = 0;
-u8 D_8013186C = 0;
-s8 D_80131870 = 0;
-u8 D_80131874 = 0;
-u8 D_80131878 = 0;
-u8 D_8013187C = 0;
-u8 D_80131880 = 0;
-
-OcarinaNote sPierresSong[108] = {
- { 0xFF, 0, 0, 0, 0, 0, 0 },
- { 0xFF, 0, 0, 0, 0, 0, 0 },
+u32 sOcarinaRecordTaskStart = 0;
+u8 sRecordOcarinaPitch = 0;
+u8 sRecordOcarinaVolume = 0;
+u8 sRecordOcarinaVibrato = 0;
+s8 sRecordOcarinaBendIndex = 0;
+u8 sRecordOcarinaButtonIndex = 0;
+u8 sPlayedOcarinaSongIndexPlusOne = 0;
+u8 sMusicStaffNumNotesPerTest = 0;
+u8 sOcarinaDropInputTimer = 0;
+
+OcarinaNote sScarecrowsLongSongNotes[108] = {
+ { OCARINA_PITCH_NONE, 0, 0, 0, 0, 0 },
+ { OCARINA_PITCH_NONE, 0, 0, 0, 0, 0 },
+};
+OcarinaNote* gScarecrowLongSongPtr = sScarecrowsLongSongNotes;
+
+u8* gScarecrowSpawnSongPtr = (u8*)&sOcarinaSongNotes[OCARINA_SONG_SCARECROW_SPAWN];
+OcarinaNote* sMemoryGameSongPtr = sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME];
+
+u8 sPitchToButtonMap[16] = {
+ OCARINA_BTN_A, // OCARINA_PITCH_C4
+ OCARINA_BTN_A, // OCARINA_PITCH_DFLAT4
+ OCARINA_BTN_A, // OCARINA_PITCH_D4
+ OCARINA_BTN_A, // OCARINA_PITCH_EFLAT4
+ OCARINA_BTN_C_DOWN, // OCARINA_PITCH_E4
+ OCARINA_BTN_C_DOWN, // OCARINA_PITCH_F4
+ OCARINA_BTN_C_DOWN, // OCARINA_PITCH_GFLAT4
+ OCARINA_BTN_C_RIGHT, // OCARINA_PITCH_G4
+ OCARINA_BTN_C_RIGHT, // OCARINA_PITCH_AFLAT4
+ OCARINA_BTN_C_RIGHT, // OCARINA_PITCH_A4
+ OCARINA_BTN_C_RIGHT_OR_C_LEFT, // OCARINA_PITCH_BFLAT4: Interface/Overlap between C_RIGHT and C_LEFT
+ OCARINA_BTN_C_LEFT, // OCARINA_PITCH_B4
+ OCARINA_BTN_C_LEFT, // OCARINA_PITCH_C5
+ OCARINA_BTN_C_UP, // OCARINA_PITCH_DFLAT5
+ OCARINA_BTN_C_UP, // OCARINA_PITCH_D5
+ OCARINA_BTN_C_UP, // OCARINA_PITCH_EFLAT5
};
-OcarinaNote* gScarecrowCustomSongPtr = sPierresSong;
-
-u8* gScarecrowSpawnSongPtr = (u8*)&sOcarinaSongs[OCARINA_SONG_SCARECROW];
-OcarinaNote* D_80131BEC = sOcarinaSongs[OCARINA_SONG_MEMORY_GAME];
-u8 sNoteValueIndexMap[16] = { 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 5, 3, 3, 4, 4, 4 };
-OcarinaSongInfo gOcarinaSongNotes[OCARINA_SONG_MAX] = {
- // Minuet
+OcarinaSongButtons gOcarinaSongButtons[OCARINA_SONG_MAX] = {
+ // OCARINA_SONG_MINUET
{ 6,
{
- OCARINA_NOTE_A,
- OCARINA_NOTE_C_UP,
- OCARINA_NOTE_C_LEFT,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_LEFT,
- OCARINA_NOTE_C_RIGHT,
+ OCARINA_BTN_A,
+ OCARINA_BTN_C_UP,
+ OCARINA_BTN_C_LEFT,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_LEFT,
+ OCARINA_BTN_C_RIGHT,
} },
- // Bolero
+ // OCARINA_SONG_BOLERO
{ 8,
{
- OCARINA_NOTE_C_DOWN,
- OCARINA_NOTE_A,
- OCARINA_NOTE_C_DOWN,
- OCARINA_NOTE_A,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_DOWN,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_DOWN,
+ OCARINA_BTN_C_DOWN,
+ OCARINA_BTN_A,
+ OCARINA_BTN_C_DOWN,
+ OCARINA_BTN_A,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_DOWN,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_DOWN,
} },
- // Serenade
+ // OCARINA_SONG_SERENADE
{ 5,
{
- OCARINA_NOTE_A,
- OCARINA_NOTE_C_DOWN,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_LEFT,
+ OCARINA_BTN_A,
+ OCARINA_BTN_C_DOWN,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_LEFT,
} },
- // Requiem
+ // OCARINA_SONG_REQUIEM
{ 6,
{
- OCARINA_NOTE_A,
- OCARINA_NOTE_C_DOWN,
- OCARINA_NOTE_A,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_DOWN,
- OCARINA_NOTE_A,
+ OCARINA_BTN_A,
+ OCARINA_BTN_C_DOWN,
+ OCARINA_BTN_A,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_DOWN,
+ OCARINA_BTN_A,
} },
- // Nocturne
+ // OCARINA_SONG_NOCTURNE
{ 7,
{
- OCARINA_NOTE_C_LEFT,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_A,
- OCARINA_NOTE_C_LEFT,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_DOWN,
+ OCARINA_BTN_C_LEFT,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_A,
+ OCARINA_BTN_C_LEFT,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_DOWN,
} },
- // Prelude
+ // OCARINA_SONG_PRELUDE
{ 6,
{
- OCARINA_NOTE_C_UP,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_UP,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_LEFT,
- OCARINA_NOTE_C_UP,
+ OCARINA_BTN_C_UP,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_UP,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_LEFT,
+ OCARINA_BTN_C_UP,
} },
- // Sarias
+ // OCARINA_SONG_SARIAS
{ 6,
{
- OCARINA_NOTE_C_DOWN,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_LEFT,
- OCARINA_NOTE_C_DOWN,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_LEFT,
+ OCARINA_BTN_C_DOWN,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_LEFT,
+ OCARINA_BTN_C_DOWN,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_LEFT,
} },
- // Epona
+ // OCARINA_SONG_EPONAS
{ 6,
{
- OCARINA_NOTE_C_UP,
- OCARINA_NOTE_C_LEFT,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_UP,
- OCARINA_NOTE_C_LEFT,
- OCARINA_NOTE_C_RIGHT,
+ OCARINA_BTN_C_UP,
+ OCARINA_BTN_C_LEFT,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_UP,
+ OCARINA_BTN_C_LEFT,
+ OCARINA_BTN_C_RIGHT,
} },
- // Lullaby
+ // OCARINA_SONG_LULLABY
{ 6,
{
- OCARINA_NOTE_C_LEFT,
- OCARINA_NOTE_C_UP,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_LEFT,
- OCARINA_NOTE_C_UP,
- OCARINA_NOTE_C_RIGHT,
+ OCARINA_BTN_C_LEFT,
+ OCARINA_BTN_C_UP,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_LEFT,
+ OCARINA_BTN_C_UP,
+ OCARINA_BTN_C_RIGHT,
} },
- // Suns
+ // OCARINA_SONG_SUNS
{ 6,
{
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_DOWN,
- OCARINA_NOTE_C_UP,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_C_DOWN,
- OCARINA_NOTE_C_UP,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_DOWN,
+ OCARINA_BTN_C_UP,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_C_DOWN,
+ OCARINA_BTN_C_UP,
} },
- // Song of Time
+ // OCARINA_SONG_TIME
{ 6,
{
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_A,
- OCARINA_NOTE_C_DOWN,
- OCARINA_NOTE_C_RIGHT,
- OCARINA_NOTE_A,
- OCARINA_NOTE_C_DOWN,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_A,
+ OCARINA_BTN_C_DOWN,
+ OCARINA_BTN_C_RIGHT,
+ OCARINA_BTN_A,
+ OCARINA_BTN_C_DOWN,
} },
- // Storms
+ // OCARINA_SONG_STORMS
{ 6,
{
- OCARINA_NOTE_A,
- OCARINA_NOTE_C_DOWN,
- OCARINA_NOTE_C_UP,
- OCARINA_NOTE_A,
- OCARINA_NOTE_C_DOWN,
- OCARINA_NOTE_C_UP,
+ OCARINA_BTN_A,
+ OCARINA_BTN_C_DOWN,
+ OCARINA_BTN_C_UP,
+ OCARINA_BTN_A,
+ OCARINA_BTN_C_DOWN,
+ OCARINA_BTN_C_UP,
} },
- // Scarecrow
- { 8, { 0, 0, 0, 0, 0, 0, 0, 0 } },
- // Lost Woods Memory Game
- { 0, { 0, 0, 0, 0, 0, 0, 0, 0 } },
+ // OCARINA_SONG_SCARECROW_SPAWN
+ { 8, { 0 } },
+ // OCARINA_SONG_MEMORY_GAME
+ { 0, { 0 } },
};
-/**
- * BSS
- */
-u32 sAudioUpdateStartTime; // 8016B7A0
+u32 sAudioUpdateStartTime;
u32 sAudioUpdateEndTime;
f32 D_8016B7A8;
f32 D_8016B7AC;
@@ -1192,7 +1224,6 @@ u8 sRiverSoundMainBgmLower;
u8 sRiverSoundMainBgmRestore;
u8 sGanonsTowerVol;
SfxPlayerState sSfxChannelState[0x10];
-
char sBinToStrBuf[0x20];
u8 D_8016B9D8;
u8 sAudioSpecPeakNumNotes[0x12];
@@ -1202,916 +1233,1081 @@ u8 D_8016B9F4;
u16 D_8016B9F6;
OcarinaStaff sPlayingStaff;
-OcarinaStaff sDisplayedStaff;
+OcarinaStaff sPlaybackStaff;
OcarinaStaff sRecordingStaff;
-u32 D_8016BA04;
-typedef struct {
- s8 x;
- s8 y;
-} OcarinaStick;
-OcarinaStick sCurOcaStick;
-u32 sCurOcarinaBtnPress;
-u32 D_8016BA10;
-u32 sPrevOcarinaBtnPress;
-s32 D_8016BA18;
-s32 D_8016BA1C;
-u8 sCurOcarinaSong[8];
-u8 sOcarinaSongAppendPos;
+u32 sOcarinaUpdateTaskStart;
+OcarinaStick sOcarinaInputStickRel;
+u32 sOcarinaInputButtonCur;
+u32 sOcarinaInputButtonStart;
+u32 sOcarinaInputButtonPrev;
+s32 sOcarinaInputButtonPress;
+s32 sOcarinaUnused;
+u8 sCurOcarinaSongWithoutMusicStaff[8];
+u8 sOcarinaWithoutMusicStaffPos;
u8 sOcarinaHasStartedSong;
-u8 sOcarinaSongNoteStartIdx;
-u8 sOcarinaSongCnt;
-u16 sOcarinaAvailSongs;
-u8 sStaffPlayingPos;
-u16 sLearnSongPos[0x10];
-u16 D_8016BA50[0x10];
-u16 D_8016BA70[0x10];
-u8 sLearnSongExpectedNote[0x10];
-OcarinaNote D_8016BAA0;
+u8 sFirstOcarinaSongIndex;
+u8 sLastOcarinaSongIndex;
+u16 sAvailOcarinaSongFlags;
+u8 sStaffOcarinaPlayingPos;
+u16 sMusicStaffPos[OCARINA_SONG_MAX];
+u16 sMusicStaffCurHeldLength[OCARINA_SONG_MAX];
+u16 sMusicStaffExpectedLength[OCARINA_SONG_MAX];
+u8 sMusicStaffExpectedPitch[OCARINA_SONG_MAX];
+OcarinaNote sScarecrowsLongSongSecondNote;
u8 sAudioHasMalonBgm;
f32 sAudioMalonBgmDist;
-// Start debug bss
-u32 sDebugPadHold;
-u32 sDebugPadBtnLast;
-u32 sDebugPadPress;
-s32 sAudioUpdateTaskStart;
-s32 sAudioUpdateTaskEnd;
-
void PadMgr_RequestPadData(PadMgr* padmgr, Input* inputs, s32 mode);
-
void Audio_StepFreqLerp(FreqLerp* lerp);
void func_800F56A8(void);
void Audio_PlayNatureAmbienceSequence(u8 natureAmbienceId);
s32 Audio_SetGanonsTowerBgmVolume(u8 targetVol);
-void func_800EC960(u8 custom) {
- if (!custom) {
+// =========== Audio Ocarina ===========
+
+void AudioOcarina_SetCustomButtonMapping(u8 useCustom) {
+ if (!useCustom) {
osSyncPrintf("AUDIO : Ocarina Control Assign Normal\n");
- sOcarinaAllowedBtnMask = (BTN_A | BTN_CUP | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT);
- sOcarinaABtnMap = BTN_A;
- sOcarinaCUPBtnMap = BTN_CUP;
- sOcarinaCDownBtnMap = BTN_CDOWN;
+ sOcarinaAllowedButtonMask = (BTN_A | BTN_CUP | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT);
+ sOcarinaAButtonMap = BTN_A;
+ sOcarinaCUpButtonMap = BTN_CUP;
+ sOcarinaCDownButtonMap = BTN_CDOWN;
} else {
osSyncPrintf("AUDIO : Ocarina Control Assign Custom\n");
- sOcarinaAllowedBtnMask = (BTN_A | BTN_B | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT);
- sOcarinaABtnMap = BTN_B;
- sOcarinaCUPBtnMap = BTN_CDOWN;
- sOcarinaCDownBtnMap = BTN_A;
+ sOcarinaAllowedButtonMask = (BTN_A | BTN_B | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT);
+ sOcarinaAButtonMap = BTN_B;
+ sOcarinaCUpButtonMap = BTN_CDOWN;
+ sOcarinaCDownButtonMap = BTN_A;
}
}
-void Audio_GetOcaInput(void) {
+void AudioOcarina_ReadControllerInput(void) {
Input inputs[4];
Input* input = &inputs[0];
- u32 sp18;
+ u32 ocarinaInputButtonPrev = sOcarinaInputButtonCur;
- sp18 = sCurOcarinaBtnPress;
PadMgr_RequestPadData(&gPadMgr, inputs, 0);
- sCurOcarinaBtnPress = input->cur.button;
- sPrevOcarinaBtnPress = sp18;
- sCurOcaStick.x = input->rel.stick_x;
- sCurOcaStick.y = input->rel.stick_y;
+ sOcarinaInputButtonCur = input->cur.button;
+ sOcarinaInputButtonPrev = ocarinaInputButtonPrev;
+ sOcarinaInputStickRel.x = input->rel.stick_x;
+ sOcarinaInputStickRel.y = input->rel.stick_y;
}
-f32 Audio_OcaAdjStick(s8 inp) {
- s8 inpAdj;
- f32 ret;
-
- if (inp > 0x40) {
- inpAdj = 127;
- } else if (inp < -0x40) {
- inpAdj = -128;
- } else if (inp >= 0) {
- inpAdj = (inp * 127) / 64;
+/**
+ * Looks up the frequency to bend the pitch by.
+ * The pitch will bend up to a maximum of 2 semitones
+ * in each direction giving a total range of 4 semitones
+ */
+f32 AudioOcarina_BendPitchTwoSemitones(s8 bendIndex) {
+ s8 adjBendIndex;
+ f32 bendFreq;
+
+ if (bendIndex > 64) {
+ adjBendIndex = 127;
+ } else if (bendIndex < -64) {
+ adjBendIndex = -128;
+ } else if (bendIndex >= 0) {
+ adjBendIndex = (bendIndex * 127) / 64;
} else {
- inpAdj = (inp * 128) / 64;
+ adjBendIndex = (bendIndex * 128) / 64;
}
- ret = gBendPitchTwoSemitonesFrequencies[inpAdj + 128];
- return ret;
-}
-u8 Audio_OcaGetPlayingState(void) {
- u8 ret;
+ /**
+ * index 128 is in the middle of the table and
+ * contains the value 1.0f i.e. no bend
+ * absolute indices above 128 will bend the pitch 2 semitones upwards
+ * absolute indices below 128 will bend the pitch 2 semitones downwards
+ */
+ bendFreq = gBendPitchTwoSemitonesFrequencies[adjBendIndex + 128];
+ return bendFreq;
+}
- if (D_80131878 != 0) {
- ret = D_80131878 - 1;
- D_80131878 = 0;
- } else if (D_80130F3C != 0) {
- ret = 0xFE;
+/**
+ * If an available song has been played, then return that song index
+ * If the ocarina is on, but no song has been played then return 0xFE
+ * If the ocarina is off, return 0xFF
+ */
+u8 AudioOcarina_GetPlayingState(void) {
+ u8 playedOcarinaSongIndex;
+
+ if (sPlayedOcarinaSongIndexPlusOne != 0) {
+ playedOcarinaSongIndex = sPlayedOcarinaSongIndexPlusOne - 1;
+ sPlayedOcarinaSongIndexPlusOne = 0;
+ } else if (sOcarinaFlags != 0) {
+ playedOcarinaSongIndex = 0xFE;
} else {
- ret = 0xFF;
+ playedOcarinaSongIndex = 0xFF;
}
- return ret;
+ return playedOcarinaSongIndex;
}
-u8 Audio_OcaMapNoteValue(u8 arg0) {
- u8 temp_v1;
+u8 AudioOcarina_MapNoteToButton(u8 pitchAndBFlatFlag) {
+ u8 buttonIndex = sPitchToButtonMap[pitchAndBFlatFlag & 0x3F];
- temp_v1 = sNoteValueIndexMap[arg0 & 0x3F];
- if (temp_v1 == 5) {
- if (arg0 & 0x80) {
- return 2;
+ /**
+ * Special case for bFlat4:
+ * CRIGHT and CLEFT are the only two pitches that are 2 semitones apart
+ * which are pitches A4 and B4 respectively
+ * bFlat4 is in the middle of those two and is the only pitches that can not
+ * be resolved between the two buttons without external information.
+ * That information is stored as flags in pitch with the mask:
+ * (pitchAndBFlatFlag & 0xC0)
+ */
+ if (buttonIndex == OCARINA_BTN_C_RIGHT_OR_C_LEFT) {
+ if (pitchAndBFlatFlag & 0x80) {
+ return OCARINA_BTN_C_RIGHT;
}
- return 3;
+ return OCARINA_BTN_C_LEFT;
}
- return temp_v1;
+
+ return buttonIndex;
}
-void func_800ECB7C(u8 songIdx) {
- u8 savedSongIdx;
- u8 scarecrowSongIdx;
- u8 noteIdx;
+void AudioOcarina_MapNotesToScarecrowButtons(u8 noteSongIndex) {
+ u8 buttonSongPos = 0;
+ u8 noteSongPos = 0;
+ u8 pitch;
+
+ while (buttonSongPos < 8 && noteSongPos < 16) {
+ pitch = sOcarinaSongNotes[noteSongIndex][noteSongPos++].pitch;
- savedSongIdx = 0;
- scarecrowSongIdx = 0;
- while (savedSongIdx < 8 && scarecrowSongIdx < 0x10) {
- noteIdx = sOcarinaSongs[songIdx][scarecrowSongIdx++].noteIdx;
- if (noteIdx != 0xFF) {
- gOcarinaSongNotes[OCARINA_SONG_SCARECROW].notesIdx[savedSongIdx++] = sNoteValueIndexMap[noteIdx];
+ if (pitch != OCARINA_PITCH_NONE) {
+ gOcarinaSongButtons[OCARINA_SONG_SCARECROW_SPAWN].buttonsIndex[buttonSongPos++] = sPitchToButtonMap[pitch];
}
}
}
-// start ocarina.
-void func_800ECC04(u16 flg) {
+/**
+ * Ocarina flags:
+ * bitmask 0x3FFF:
+ * - Ocarina song id
+ * bitmask 0xC000:
+ * - 0x0000: Limits the notes to 8 notes at a time. Not playing a correct song after 8 notes will cause an ocarina
+ * error
+ * - 0x4000: (Identical to 0xC000)
+ * - 0x8000: Limits the notes to 1 note at a time. A single incorrect note will cause an ocarina error
+ * - 0xC000: Free-play, no limitations to the number of notes to play
+ * bitmask 0x7FFF0000:
+ * - ocarina action (only used to make flags != 0)
+ * bitmask 0x80000000:
+ * - unused (only used to make flags != 0)
+ */
+void AudioOcarina_Start(u16 ocarinaFlags) {
u8 i;
- if ((sOcarinaSongs[OCARINA_SONG_SCARECROW][1].volume != 0xFF) && ((flg & 0xFFF) == 0xFFF)) {
- flg |= 0x1000;
+ if ((sOcarinaSongNotes[OCARINA_SONG_SCARECROW_SPAWN][1].volume != 0xFF) && ((ocarinaFlags & 0xFFF) == 0xFFF)) {
+ ocarinaFlags |= 0x1000;
}
- if ((flg == 0xCFFF) && (sOcarinaSongs[OCARINA_SONG_SCARECROW][1].volume != 0xFF)) {
- flg = 0xDFFF;
+ if ((ocarinaFlags == 0xCFFF) && (sOcarinaSongNotes[OCARINA_SONG_SCARECROW_SPAWN][1].volume != 0xFF)) {
+ ocarinaFlags = 0xDFFF;
}
- if ((flg == 0xFFF) && (sOcarinaSongs[OCARINA_SONG_SCARECROW][1].volume != 0xFF)) {
- flg = 0x1FFF;
+ if ((ocarinaFlags == 0xFFF) && (sOcarinaSongNotes[OCARINA_SONG_SCARECROW_SPAWN][1].volume != 0xFF)) {
+ ocarinaFlags = 0x1FFF;
}
- if (flg != 0xFFFF) {
- D_80130F3C = 0x80000000 + (u32)flg;
- sOcarinaSongNoteStartIdx = 0;
- sOcarinaSongCnt = 0xE;
- if (flg != 0xA000) {
- sOcarinaSongCnt--;
+ if (ocarinaFlags != 0xFFFF) {
+ sOcarinaFlags = 0x80000000 + (u32)ocarinaFlags;
+ sFirstOcarinaSongIndex = 0;
+ sLastOcarinaSongIndex = OCARINA_SONG_MAX;
+ if (ocarinaFlags != 0xA000) {
+ sLastOcarinaSongIndex--;
}
- sOcarinaAvailSongs = flg & 0x3FFF;
- D_8013187C = 8;
- sOcarinaHasStartedSong = 0;
- D_80131878 = 0;
- sStaffPlayingPos = 0;
- sPlayingStaff.state = Audio_OcaGetPlayingState();
- sOcarinaInpEnabled = 1;
- D_80130F4C = 0;
- for (i = 0; i < 0xE; i++) {
- sLearnSongPos[i] = 0;
- D_8016BA50[i] = 0;
- D_8016BA70[i] = 0;
- sLearnSongExpectedNote[i] = 0;
+ sAvailOcarinaSongFlags = ocarinaFlags & 0x3FFF;
+ sMusicStaffNumNotesPerTest = 8; // Ocarina Check
+ sOcarinaHasStartedSong = false;
+ sPlayedOcarinaSongIndexPlusOne = 0;
+ sStaffOcarinaPlayingPos = 0;
+ sPlayingStaff.state = AudioOcarina_GetPlayingState();
+ sIsOcarinaInputEnabled = true;
+ sPrevOcarinaWithMusicStaffFlags = 0;
+
+ // Reset music staff song check
+ for (i = 0; i < OCARINA_SONG_MAX; i++) {
+ sMusicStaffPos[i] = 0;
+ sMusicStaffCurHeldLength[i] = 0;
+ sMusicStaffExpectedLength[i] = 0;
+ sMusicStaffExpectedPitch[i] = 0;
}
- if (flg & 0x8000) {
- D_8013187C = 0;
+ if (ocarinaFlags & 0x8000) {
+ sMusicStaffNumNotesPerTest = 0; // Ocarina Playback
}
- if (flg & 0x4000) {
- sOcarinaSongAppendPos = 0;
+ if (ocarinaFlags & 0x4000) {
+ sOcarinaWithoutMusicStaffPos = 0;
}
- if (flg & 0xD000) {
- func_800ECB7C(OCARINA_SONG_SCARECROW);
+ if (ocarinaFlags & 0xD000) {
+ AudioOcarina_MapNotesToScarecrowButtons(OCARINA_SONG_SCARECROW_SPAWN);
}
} else {
- D_80130F3C = 0;
- sOcarinaInpEnabled = 0;
+ sOcarinaFlags = 0;
+ sIsOcarinaInputEnabled = false;
}
}
-void func_800ECDBC(void) {
- if (sCurOcarinaBtnVal != 0xFF && sOcarinaHasStartedSong == 0) {
- sOcarinaHasStartedSong = 1;
- sLearnSongLastBtn = 0xFF;
+void AudioOcarina_CheckIfStartedSong(void) {
+ if (sCurOcarinaPitch != OCARINA_PITCH_NONE && !sOcarinaHasStartedSong) {
+ sOcarinaHasStartedSong = true;
+ sMusicStaffPrevPitch = OCARINA_PITCH_NONE;
}
}
-void func_800ECDF8(void) {
- u16 sh;
+/**
+ * Checks for ocarina songs from user input with a music staff prompt
+ * Type 1) Playback: tests note-by-note (ocarinaFlag & 0xC000 == 0x8000) eg:
+ * - learning a new song
+ * - playing the ocarina memory game
+ * Type 2) Check: tests in 8-note chunks (ocarinaFlag & 0xC000 == 0x0000) eg:
+ * - validating scarecrow spawn song as adult
+ * - ocarina prompt for zelda's lullaby, saria's song, Storms, Song of Time, etc...
+ */
+void AudioOcarina_CheckSongsWithMusicStaff(void) {
+ u16 curOcarinaSongFlag;
u16 pad;
- u8 inputChanged = 0;
+ u8 noNewValidInput = false;
u16 pad2;
- s8 sp57 = 0;
- u8 i;
- OcarinaNote* prevNote;
- OcarinaNote* note;
+ s8 staffOcarinaPlayingPosOffset = 0;
+ u8 songIndex;
+ OcarinaNote* curNote;
+ OcarinaNote* nextNote;
- func_800ECDBC();
+ AudioOcarina_CheckIfStartedSong();
- if (sOcarinaHasStartedSong) {
- if ((D_80130F2C < 0 ? -D_80130F2C : D_80130F2C) >= 0x15) {
- D_80130F3C = 0;
- return;
- }
+ if (!sOcarinaHasStartedSong) {
+ return;
+ }
- // clang-format off
- if (sPrevOcarinaNoteVal == sCurOcarinaBtnVal || sCurOcarinaBtnVal == 0xFF) { inputChanged = 1; }
- // clang-format on
-
- for (i = sOcarinaSongNoteStartIdx; i < sOcarinaSongCnt; i++) {
- sh = 1 << i;
- if (sOcarinaAvailSongs & sh) {
- D_8016BA50[i] = D_8016BA70[i] + 0x12;
- if (inputChanged) {
- // (pointless if check, this is always true)
- if ((D_8016BA50[i] >= D_8016BA70[i] - 0x12) && (D_8016BA50[i] >= D_8016BA70[i] + 0x12) &&
- (sOcarinaSongs[i][sLearnSongPos[i]].unk_02 == 0) &&
- (sLearnSongLastBtn == sLearnSongExpectedNote[i])) {
- D_80131878 = i + 1;
- sOcarinaInpEnabled = 0;
- D_80130F3C = 0;
- }
- } else if (D_8016BA50[i] >= (D_8016BA70[i] - 0x12)) {
- if (sLearnSongLastBtn != 0xFF) {
- if (sLearnSongLastBtn == sLearnSongExpectedNote[i]) {
- if (i == 12) {
- D_8016BA50[i] = 0;
- }
- } else {
- sOcarinaAvailSongs ^= sh;
+ if (ABS_ALT(sCurOcarinaBendIndex) > 20) {
+ sOcarinaFlags = 0;
+ return;
+ }
+
+ // clang-format off
+ if (sPrevOcarinaPitch == sCurOcarinaPitch || sCurOcarinaPitch == OCARINA_PITCH_NONE) { noNewValidInput = true; }
+ // clang-format on
+
+ for (songIndex = sFirstOcarinaSongIndex; songIndex < sLastOcarinaSongIndex; songIndex++) {
+ curOcarinaSongFlag = 1 << songIndex;
+
+ if (sAvailOcarinaSongFlags & curOcarinaSongFlag) {
+ sMusicStaffCurHeldLength[songIndex] = sMusicStaffExpectedLength[songIndex] + 18;
+
+ if (noNewValidInput) {
+ if ((sMusicStaffCurHeldLength[songIndex] >= sMusicStaffExpectedLength[songIndex] - 18) &&
+ (sMusicStaffCurHeldLength[songIndex] >= sMusicStaffExpectedLength[songIndex] + 18) &&
+ (sOcarinaSongNotes[songIndex][sMusicStaffPos[songIndex]].length == 0) &&
+ (sMusicStaffPrevPitch == sMusicStaffExpectedPitch[songIndex])) {
+ // This case is taken if the song is finished and successfully played
+ // (i.e. .length == 0 indicates that the song is at the end)
+ sPlayedOcarinaSongIndexPlusOne = songIndex + 1;
+ sIsOcarinaInputEnabled = false;
+ sOcarinaFlags = 0;
+ }
+ } else if (sMusicStaffCurHeldLength[songIndex] >= (sMusicStaffExpectedLength[songIndex] - 18)) {
+ // This else-if statement always holds true, taken if a new note is played
+ if (sMusicStaffPrevPitch != OCARINA_PITCH_NONE) {
+ // New note is played
+ if (sMusicStaffPrevPitch == sMusicStaffExpectedPitch[songIndex]) {
+ // Note is part of expected song
+ if (songIndex == OCARINA_SONG_SCARECROW_SPAWN) {
+ sMusicStaffCurHeldLength[songIndex] = 0;
}
+ } else {
+ // Note is not part of expected song, so this song is no longer available as an option in this
+ // playback
+ sAvailOcarinaSongFlags ^= curOcarinaSongFlag;
}
+ }
- prevNote = &sOcarinaSongs[i][sLearnSongPos[i]];
- note = &sOcarinaSongs[i][++sLearnSongPos[i]];
- D_8016BA70[i] = prevNote->unk_02;
- sLearnSongExpectedNote[i] = prevNote->noteIdx;
+ curNote = &sOcarinaSongNotes[songIndex][sMusicStaffPos[songIndex]];
+ nextNote = &sOcarinaSongNotes[songIndex][++sMusicStaffPos[songIndex]];
+ sMusicStaffExpectedLength[songIndex] = curNote->length;
+ sMusicStaffExpectedPitch[songIndex] = curNote->pitch;
- if (sCurOcarinaBtnVal != sLearnSongExpectedNote[i]) {
- sOcarinaAvailSongs ^= sh;
- }
- while (prevNote->noteIdx == note->noteIdx ||
- (note->noteIdx == OCARINA_NOTE_INVALID && note->unk_02 != 0)) {
- D_8016BA70[i] += note->unk_02;
- prevNote = &sOcarinaSongs[i][sLearnSongPos[i]];
- note = &sOcarinaSongs[i][sLearnSongPos[i] + 1];
- sLearnSongPos[i]++;
- }
- } else if (D_8016BA50[i] < 0xA) {
- sp57 = -1;
- D_8016BA50[i] = 0;
- sLearnSongLastBtn = sCurOcarinaBtnVal;
- } else {
- sOcarinaAvailSongs ^= sh;
+ // The current note is not the expected note.
+ if (sCurOcarinaPitch != sMusicStaffExpectedPitch[songIndex]) {
+ sAvailOcarinaSongFlags ^= curOcarinaSongFlag;
}
- }
- if (sOcarinaAvailSongs == 0 && sStaffPlayingPos >= D_8013187C) {
- sOcarinaInpEnabled = 0;
- if (CHECK_BTN_ANY(D_80130F3C, BTN_B) && sCurOcarinaBtnVal == sOcarinaSongs[i][0].noteIdx) {
- D_80130F4C = D_80130F3C;
+ while (curNote->pitch == nextNote->pitch ||
+ (nextNote->pitch == OCARINA_BTN_INVALID && nextNote->length != 0)) {
+ sMusicStaffExpectedLength[songIndex] += nextNote->length;
+ curNote = &sOcarinaSongNotes[songIndex][sMusicStaffPos[songIndex]];
+ nextNote = &sOcarinaSongNotes[songIndex][sMusicStaffPos[songIndex] + 1];
+ sMusicStaffPos[songIndex]++;
}
- D_80130F3C = 0;
- return;
+ } else if (sMusicStaffCurHeldLength[songIndex] < 10) {
+ // case never taken
+ staffOcarinaPlayingPosOffset = -1;
+ sMusicStaffCurHeldLength[songIndex] = 0;
+ sMusicStaffPrevPitch = sCurOcarinaPitch;
+ } else {
+ // case never taken
+ sAvailOcarinaSongFlags ^= curOcarinaSongFlag;
}
}
- if (!inputChanged) {
- sLearnSongLastBtn = sCurOcarinaBtnVal;
- sStaffPlayingPos += sp57 + 1;
+ // if a note is played that doesn't match a song, the song bit in sAvailOcarinaSongFlags is turned off
+ // if there are no more songs remaining that it could be and the maximum position has been exceeded, then
+ if (sAvailOcarinaSongFlags == 0 && sStaffOcarinaPlayingPos >= sMusicStaffNumNotesPerTest) {
+ sIsOcarinaInputEnabled = false;
+ if ((sOcarinaFlags & 0x4000) && sCurOcarinaPitch == sOcarinaSongNotes[songIndex][0].pitch) {
+ // case never taken, this function is not called if (sOcarinaFlags & 0x4000) is set
+ sPrevOcarinaWithMusicStaffFlags = sOcarinaFlags;
+ }
+ sOcarinaFlags = 0;
+ return;
}
}
+
+ if (!noNewValidInput) {
+ sMusicStaffPrevPitch = sCurOcarinaPitch;
+ sStaffOcarinaPlayingPos += staffOcarinaPlayingPosOffset + 1;
+ }
}
-void func_800ED200(void) {
- u32 temp_v0;
+/**
+ * Checks for ocarina songs from user input with no music staff prompt.
+ * Includes ocarina actions such as free play, no warp
+ */
+void AudioOcarina_CheckSongsWithoutMusicStaff(void) {
+ u32 pitch;
u8 i;
u8 j;
u8 k;
- if (CHECK_BTN_ANY(sCurOcarinaBtnPress, BTN_L) && CHECK_BTN_ANY(sCurOcarinaBtnPress, sOcarinaAllowedBtnMask)) {
- func_800ECC04((u16)D_80130F3C);
+ if (CHECK_BTN_ANY(sOcarinaInputButtonCur, BTN_L) &&
+ CHECK_BTN_ANY(sOcarinaInputButtonCur, sOcarinaAllowedButtonMask)) {
+ AudioOcarina_Start((u16)sOcarinaFlags);
return;
}
- func_800ECDBC();
+ AudioOcarina_CheckIfStartedSong();
- if (sOcarinaHasStartedSong) {
- if ((sPrevOcarinaNoteVal != sCurOcarinaBtnVal) && (sCurOcarinaBtnVal != 0xFF)) {
- sStaffPlayingPos++;
- if (sStaffPlayingPos >= 9) {
- sStaffPlayingPos = 1;
- }
+ if (!sOcarinaHasStartedSong) {
+ return;
+ }
- if (sOcarinaSongAppendPos == 8) {
- for (i = 0; i < 7; i++) {
- sCurOcarinaSong[i] = sCurOcarinaSong[i + 1];
- }
- } else {
- sOcarinaSongAppendPos++;
- }
+ if ((sPrevOcarinaPitch != sCurOcarinaPitch) && (sCurOcarinaPitch != OCARINA_PITCH_NONE)) {
+ sStaffOcarinaPlayingPos++;
+ if (sStaffOcarinaPlayingPos > ARRAY_COUNT(sCurOcarinaSongWithoutMusicStaff)) {
+ sStaffOcarinaPlayingPos = 1;
+ }
- if ((D_80130F2C < 0 ? -D_80130F2C : D_80130F2C) >= 0x15) {
- sCurOcarinaSong[sOcarinaSongAppendPos - 1] = 0xFF;
- } else {
- sCurOcarinaSong[sOcarinaSongAppendPos - 1] = sCurOcarinaBtnVal;
+ if (sOcarinaWithoutMusicStaffPos == 8) {
+ for (i = 0; i < 7; i++) {
+ sCurOcarinaSongWithoutMusicStaff[i] = sCurOcarinaSongWithoutMusicStaff[i + 1];
}
+ } else {
+ sOcarinaWithoutMusicStaffPos++;
+ }
- for (i = sOcarinaSongNoteStartIdx; i < sOcarinaSongCnt; i++) {
- if (sOcarinaAvailSongs & (u16)(1 << i)) {
- for (j = 0, k = 0;
- j < gOcarinaSongNotes[i].len && k == 0 && sOcarinaSongAppendPos >= gOcarinaSongNotes[i].len;) {
- temp_v0 = sCurOcarinaSong[(sOcarinaSongAppendPos - gOcarinaSongNotes[i].len) + j];
- if (temp_v0 == sOcarinaNoteValues[gOcarinaSongNotes[i].notesIdx[j]]) {
- j++;
- } else {
- k++;
- }
- }
+ if (ABS_ALT(sCurOcarinaBendIndex) > 20) {
+ sCurOcarinaSongWithoutMusicStaff[sOcarinaWithoutMusicStaffPos - 1] = OCARINA_PITCH_NONE;
+ } else {
+ sCurOcarinaSongWithoutMusicStaff[sOcarinaWithoutMusicStaffPos - 1] = sCurOcarinaPitch;
+ }
- if (j == gOcarinaSongNotes[i].len) {
- D_80131878 = i + 1;
- sOcarinaInpEnabled = 0;
- D_80130F3C = 0;
+ // This nested for-loop tests to see if the notes from the ocarina are identical
+ // to any of the songIndex from sFirstOcarinaSongIndex to sLastOcarinaSongIndex
+
+ // Loop through each of the songs
+ for (i = sFirstOcarinaSongIndex; i < sLastOcarinaSongIndex; i++) {
+ // Checks to see if the song is available to be played
+ if (sAvailOcarinaSongFlags & (u16)(1 << i)) {
+ for (j = 0, k = 0; j < gOcarinaSongButtons[i].numButtons && k == 0 &&
+ sOcarinaWithoutMusicStaffPos >= gOcarinaSongButtons[i].numButtons;) {
+ pitch = sCurOcarinaSongWithoutMusicStaff[sOcarinaWithoutMusicStaffPos -
+ gOcarinaSongButtons[i].numButtons + j];
+ if (pitch == sButtonToPitchMap[gOcarinaSongButtons[i].buttonsIndex[j]]) {
+ j++;
+ } else {
+ k++;
}
}
+
+ // This conditional is true if songIndex = i is detected
+ if (j == gOcarinaSongButtons[i].numButtons) {
+ sPlayedOcarinaSongIndexPlusOne = i + 1;
+ sIsOcarinaInputEnabled = false;
+ sOcarinaFlags = 0;
+ }
}
}
}
}
-void func_800ED458(s32 arg0) {
- u32 phi_v1_2;
+// This unused argument is used in Majora's Mask as a u8
+void AudioOcarina_PlayControllerInput(u8 unused) {
+ u32 ocarinaBtnsHeld;
- if (D_80130F3C != 0 && D_80131880 != 0) {
- D_80131880--;
+ // Prevents two different ocarina notes from being played on two consecutive frames
+ if ((sOcarinaFlags != 0) && (sOcarinaDropInputTimer != 0)) {
+ sOcarinaDropInputTimer--;
return;
}
- if ((D_8016BA10 == 0) ||
- ((D_8016BA10 & sOcarinaAllowedBtnMask) != (sCurOcarinaBtnPress & sOcarinaAllowedBtnMask))) {
- D_8016BA10 = 0;
+ // Ensures the button pressed to start the ocarina does not also play an ocarina note
+ if ((sOcarinaInputButtonStart == 0) || ((sOcarinaInputButtonStart & sOcarinaAllowedButtonMask) !=
+ (sOcarinaInputButtonCur & sOcarinaAllowedButtonMask))) {
+ sOcarinaInputButtonStart = 0;
if (1) {}
- sCurOcarinaBtnVal = 0xFF;
- sCurOcarinaBtnIdx = 0xFF;
- phi_v1_2 = (sCurOcarinaBtnPress & sOcarinaAllowedBtnMask) & (sPrevOcarinaBtnPress & sOcarinaAllowedBtnMask);
- if (!(D_8016BA18 & phi_v1_2) && (sCurOcarinaBtnPress != 0)) {
- D_8016BA18 = sCurOcarinaBtnPress;
+ sCurOcarinaPitch = OCARINA_PITCH_NONE;
+ sCurOcarinaButtonIndex = OCARINA_BTN_INVALID;
+ ocarinaBtnsHeld = (sOcarinaInputButtonCur & sOcarinaAllowedButtonMask) &
+ (sOcarinaInputButtonPrev & sOcarinaAllowedButtonMask);
+ if (!(sOcarinaInputButtonPress & ocarinaBtnsHeld) && (sOcarinaInputButtonCur != 0)) {
+ sOcarinaInputButtonPress = sOcarinaInputButtonCur;
} else {
- D_8016BA18 &= phi_v1_2;
- }
-
- if (D_8016BA18 & sOcarinaABtnMap) {
- osSyncPrintf("Presss NA_KEY_D4 %08x\n", sOcarinaABtnMap);
- sCurOcarinaBtnVal = 2;
- sCurOcarinaBtnIdx = 0;
- } else if (D_8016BA18 & sOcarinaCDownBtnMap) {
- osSyncPrintf("Presss NA_KEY_F4 %08x\n", sOcarinaCDownBtnMap);
- sCurOcarinaBtnVal = 5;
- sCurOcarinaBtnIdx = 1;
- } else if (D_8016BA18 & 1) {
- osSyncPrintf("Presss NA_KEY_A4 %08x\n", 1);
- sCurOcarinaBtnVal = 9;
- sCurOcarinaBtnIdx = 2;
- } else if (D_8016BA18 & 2) {
- osSyncPrintf("Presss NA_KEY_B4 %08x\n", 2);
- sCurOcarinaBtnVal = 0xB;
- sCurOcarinaBtnIdx = 3;
- } else if (D_8016BA18 & sOcarinaCUPBtnMap) {
- osSyncPrintf("Presss NA_KEY_D5 %08x\n", sOcarinaCUPBtnMap);
- sCurOcarinaBtnVal = 0xE;
- sCurOcarinaBtnIdx = 4;
- }
-
- if (sCurOcarinaBtnVal != 0xFF && sCurOcarinaBtnPress & 0x10 && sRecordingState != 2) {
- sCurOcarinaBtnIdx += 0x80;
- sCurOcarinaBtnVal++;
- }
-
- if ((sCurOcarinaBtnVal != 0xFF) && (sCurOcarinaBtnPress & 0x2000) && (sRecordingState != 2)) {
- sCurOcarinaBtnIdx += 0x40;
- sCurOcarinaBtnVal--;
- }
-
- if (sRecordingState != 2) {
- D_80130F2C = sCurOcaStick.y;
- D_80130F24 = Audio_OcaAdjStick(D_80130F2C);
-
- D_80130F34 = (sCurOcaStick.x < 0 ? -sCurOcaStick.x : sCurOcaStick.x) >> 2;
- Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | 0xD06, D_80130F34);
+ sOcarinaInputButtonPress &= ocarinaBtnsHeld;
+ }
+
+ // Interprets and transforms controller input into ocarina buttons and notes
+ if (CHECK_BTN_ANY(sOcarinaInputButtonPress, sOcarinaAButtonMap)) {
+ osSyncPrintf("Presss NA_KEY_D4 %08x\n", sOcarinaAButtonMap);
+ sCurOcarinaPitch = OCARINA_PITCH_D4;
+ sCurOcarinaButtonIndex = OCARINA_BTN_A;
+
+ } else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, sOcarinaCDownButtonMap)) {
+ osSyncPrintf("Presss NA_KEY_F4 %08x\n", sOcarinaCDownButtonMap);
+ sCurOcarinaPitch = OCARINA_PITCH_F4;
+ sCurOcarinaButtonIndex = OCARINA_BTN_C_DOWN;
+
+ } else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, BTN_CRIGHT)) {
+ osSyncPrintf("Presss NA_KEY_A4 %08x\n", BTN_CRIGHT);
+ sCurOcarinaPitch = OCARINA_PITCH_A4;
+ sCurOcarinaButtonIndex = OCARINA_BTN_C_RIGHT;
+
+ } else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, BTN_CLEFT)) {
+ osSyncPrintf("Presss NA_KEY_B4 %08x\n", BTN_CLEFT);
+ sCurOcarinaPitch = OCARINA_PITCH_B4;
+ sCurOcarinaButtonIndex = OCARINA_BTN_C_LEFT;
+
+ } else if (CHECK_BTN_ANY(sOcarinaInputButtonPress, sOcarinaCUpButtonMap)) {
+ osSyncPrintf("Presss NA_KEY_D5 %08x\n", sOcarinaCUpButtonMap);
+ sCurOcarinaPitch = OCARINA_PITCH_D5;
+ sCurOcarinaButtonIndex = OCARINA_BTN_C_UP;
+ }
+
+ // Pressing the R Button will raise the pitch by 1 semitone
+ if ((sCurOcarinaPitch != OCARINA_PITCH_NONE) && CHECK_BTN_ANY(sOcarinaInputButtonCur, BTN_R) &&
+ (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN)) {
+ sCurOcarinaButtonIndex += 0x80; // Flag to resolve B Flat 4
+ sCurOcarinaPitch++; // Raise the pitch by 1 semitone
+ }
+
+ // Pressing the Z Button will lower the pitch by 1 semitone
+ if ((sCurOcarinaPitch != OCARINA_PITCH_NONE) && CHECK_BTN_ANY(sOcarinaInputButtonCur, BTN_Z) &&
+ (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN)) {
+ sCurOcarinaButtonIndex += 0x40; // Flag to resolve B Flat 4
+ sCurOcarinaPitch--; // Lower the pitch by 1 semitone
+ }
+
+ if (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN) {
+ // Bend the pitch of the note based on y control stick
+ sCurOcarinaBendIndex = sOcarinaInputStickRel.y;
+ sCurOcarinaBendFreq = AudioOcarina_BendPitchTwoSemitones(sCurOcarinaBendIndex);
+
+ // Add vibrato of the ocarina note based on the x control stick
+ sCurOcarinaVibrato = ABS_ALT(sOcarinaInputStickRel.x) >> 2;
+ // Sets vibrato to io port 6
+ Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 6, sCurOcarinaVibrato);
} else {
- D_80130F2C = 0;
- D_80130F24 = 1.0f;
+ // no bending or vibrato for recording state OCARINA_RECORD_SCARECROW_SPAWN
+ sCurOcarinaBendIndex = 0;
+ sCurOcarinaBendFreq = 1.0f; // No bend
}
- if ((sCurOcarinaBtnVal != 0xFF) && (sPrevOcarinaNoteVal != sCurOcarinaBtnVal)) {
- Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | 0xD07, D_80130F10 - 1);
- Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | 0xD05, sCurOcarinaBtnVal);
- Audio_PlaySoundGeneral(NA_SE_OC_OCARINA, &gSfxDefaultPos, 4, &D_80130F24, &D_80130F28, &gSfxDefaultReverb);
- } else if ((sPrevOcarinaNoteVal != 0xFF) && (sCurOcarinaBtnVal == 0xFF)) {
+ // Processes new and valid notes
+ if ((sCurOcarinaPitch != OCARINA_PITCH_NONE) && (sPrevOcarinaPitch != sCurOcarinaPitch)) {
+ // Sets ocarina instrument Id to channelIdx io port 7, which is used
+ // as an index in seq 0 to get the true instrument Id
+ Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 7, sOcarinaInstrumentId - 1);
+ // Sets pitch to io port 5
+ Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 5, sCurOcarinaPitch);
+ Audio_PlaySoundGeneral(NA_SE_OC_OCARINA, &gSfxDefaultPos, 4, &sCurOcarinaBendFreq, &sRelativeOcarinaVolume,
+ &gSfxDefaultReverb);
+ } else if ((sPrevOcarinaPitch != OCARINA_PITCH_NONE) && (sCurOcarinaPitch == OCARINA_PITCH_NONE)) {
+ // Stops ocarina sound when transitioning from playing to not playing a note
Audio_StopSfxById(NA_SE_OC_OCARINA);
}
}
}
-void func_800ED848(u8 inputEnabled) {
- sOcarinaInpEnabled = inputEnabled;
+/**
+ * Directly enable the ocarina to receive input without
+ * properly resetting it based on an ocarina instrument id
+ * Unused.
+ */
+void AudioOcarina_EnableInput(u8 inputEnabled) {
+ sIsOcarinaInputEnabled = inputEnabled;
}
-void Audio_OcaSetInstrument(u8 arg0) {
- if (D_80130F10 == arg0) {
+/**
+ * Resets ocarina properties based on the ocarina instrument id
+ * If ocarina instrument id is "OCARINA_INSTRUMENT_OFF", turn off the ocarina
+ * For all ocarina instrument ids, turn the ocarina on with the instrument id
+ */
+void AudioOcarina_SetInstrument(u8 ocarinaInstrumentId) {
+ if (sOcarinaInstrumentId == ocarinaInstrumentId) {
return;
}
- Audio_SeqCmd8(SEQ_PLAYER_SFX, 1, SFX_PLAYER_CHANNEL_OCARINA, arg0);
- D_80130F10 = arg0;
- if (arg0 == 0) {
- sCurOcarinaBtnPress = 0;
- sPrevOcarinaBtnPress = 0;
- D_8016BA18 = 0;
- D_8016BA10 = 0xFFFF;
- func_800ED458(0);
+ Audio_SeqCmd8(SEQ_PLAYER_SFX, 1, SFX_CHANNEL_OCARINA, ocarinaInstrumentId);
+ sOcarinaInstrumentId = ocarinaInstrumentId;
+ if (ocarinaInstrumentId == OCARINA_INSTRUMENT_OFF) {
+ sOcarinaInputButtonCur = 0;
+ sOcarinaInputButtonPrev = 0;
+ sOcarinaInputButtonPress = 0;
+
+ sOcarinaInputButtonStart = 0xFFFF;
+
+ AudioOcarina_PlayControllerInput(false);
Audio_StopSfxById(NA_SE_OC_OCARINA);
Audio_SetSoundBanksMute(0);
sPlaybackState = 0;
- sStaffPlaybackPos = 0;
- sOcarinaInpEnabled = 0;
- D_80130F3C = 0;
- Audio_ClearBGMMute(SFX_PLAYER_CHANNEL_OCARINA);
+ sPlaybackStaffPos = 0;
+ sIsOcarinaInputEnabled = false;
+ sOcarinaFlags = 0;
+ // return to full volume for players 0 and 3 (background bgm) after ocarina is finished
+ Audio_ClearBGMMute(SFX_CHANNEL_OCARINA);
} else {
- sCurOcarinaBtnPress = 0;
- Audio_GetOcaInput();
- D_8016BA10 = sCurOcarinaBtnPress;
- Audio_QueueSeqCmdMute(SFX_PLAYER_CHANNEL_OCARINA);
+ sOcarinaInputButtonCur = 0;
+ AudioOcarina_ReadControllerInput();
+ // Store button used to turn on ocarina
+ sOcarinaInputButtonStart = sOcarinaInputButtonCur;
+ // lowers volumes of players 0 and 3 (background bgm) while playing ocarina
+ Audio_QueueSeqCmdMute(SFX_CHANNEL_OCARINA);
}
}
-void Audio_OcaSetSongPlayback(s8 songIdxPlusOne, s8 playbackState) {
- if (songIdxPlusOne == 0) {
+void AudioOcarina_SetPlaybackSong(s8 songIndexPlusOne, s8 playbackState) {
+ if (songIndexPlusOne == 0) {
sPlaybackState = 0;
Audio_StopSfxById(NA_SE_OC_OCARINA);
return;
}
- if (songIdxPlusOne < 0xF) {
- sPlaybackSong = sOcarinaSongs[songIdxPlusOne - 1];
+ if (songIndexPlusOne < (OCARINA_SONG_SCARECROW_LONG + 1)) {
+ sPlaybackSong = sOcarinaSongNotes[songIndexPlusOne - 1];
} else {
- sPlaybackSong = sPierresSong;
+ sPlaybackSong = sScarecrowsLongSongNotes;
}
sPlaybackState = playbackState;
- sNotePlaybackTimer = 0;
- sDisplayedNoteValue = 0xFF;
+ sPlaybackNoteTimer = 0;
+ sPlaybackPitch = OCARINA_PITCH_NONE;
sPlaybackNotePos = 0;
- sStaffPlaybackPos = 0;
- while (sPlaybackSong[sPlaybackNotePos].noteIdx == OCARINA_NOTE_INVALID) {
+ sPlaybackStaffPos = 0;
+
+ while (sPlaybackSong[sPlaybackNotePos].pitch == OCARINA_PITCH_NONE) {
sPlaybackNotePos++;
}
}
-void Audio_OcaPlayback(void) {
+/**
+ * Play a song with the ocarina to the user that is
+ * based on OcarinaNote data and not user input
+ */
+void AudioOcarina_PlaybackSong(void) {
u32 noteTimerStep;
u32 nextNoteTimerStep;
- if (sPlaybackState != 0) {
- if (sStaffPlaybackPos == 0) {
- noteTimerStep = 3;
- } else {
- noteTimerStep = D_8016BA04 - D_80130F68;
- }
+ if (sPlaybackState == 0) {
+ return;
+ }
- if (noteTimerStep < sNotePlaybackTimer) {
- sNotePlaybackTimer -= noteTimerStep;
- } else {
- nextNoteTimerStep = noteTimerStep - sNotePlaybackTimer;
- sNotePlaybackTimer = 0;
- }
+ if (sPlaybackStaffPos == 0) {
+ noteTimerStep = 3;
+ } else {
+ noteTimerStep = sOcarinaUpdateTaskStart - sOcarinaPlaybackTaskStart;
+ }
- if (sNotePlaybackTimer == 0) {
+ if (noteTimerStep < sPlaybackNoteTimer) {
+ sPlaybackNoteTimer -= noteTimerStep;
+ } else {
+ nextNoteTimerStep = noteTimerStep - sPlaybackNoteTimer;
+ sPlaybackNoteTimer = 0;
+ }
- sNotePlaybackTimer = sPlaybackSong[sPlaybackNotePos].unk_02;
+ if (sPlaybackNoteTimer == 0) {
- if (sPlaybackNotePos == 1) {
- sNotePlaybackTimer++;
- }
+ sPlaybackNoteTimer = sPlaybackSong[sPlaybackNotePos].length;
- if (sNotePlaybackTimer == 0) {
- sPlaybackState--;
- if (sPlaybackState != 0) {
- sPlaybackNotePos = 0;
- sStaffPlaybackPos = 0;
- sDisplayedNoteValue = 0xFF;
- } else {
- Audio_StopSfxById(NA_SE_OC_OCARINA);
- }
- return;
+ if (sPlaybackNotePos == 1) {
+ sPlaybackNoteTimer++;
+ }
+
+ if (sPlaybackNoteTimer == 0) {
+ sPlaybackState--;
+ if (sPlaybackState != 0) {
+ sPlaybackNotePos = 0;
+ sPlaybackStaffPos = 0;
+ sPlaybackPitch = OCARINA_PITCH_NONE;
} else {
- sNotePlaybackTimer -= nextNoteTimerStep;
+ Audio_StopSfxById(NA_SE_OC_OCARINA);
}
+ return;
+ } else {
+ sPlaybackNoteTimer -= nextNoteTimerStep;
+ }
- if (sNotePlaybackVolume != sPlaybackSong[sPlaybackNotePos].volume) {
- sNotePlaybackVolume = sPlaybackSong[sPlaybackNotePos].volume;
- sNormalizedNotePlaybackVolume = sNotePlaybackVolume / 127.0f;
- }
+ // Update volume
+ if (sNotePlaybackVolume != sPlaybackSong[sPlaybackNotePos].volume) {
+ sNotePlaybackVolume = sPlaybackSong[sPlaybackNotePos].volume;
+ sRelativeNotePlaybackVolume = sNotePlaybackVolume / 127.0f;
+ }
- if (sNotePlaybackVibrato != sPlaybackSong[sPlaybackNotePos].vibrato) {
- sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato;
- Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | 0xD06, sNotePlaybackVibrato);
- }
+ // Update vibrato
+ if (sNotePlaybackVibrato != sPlaybackSong[sPlaybackNotePos].vibrato) {
+ sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato;
+ // Sets vibrato to io port 6
+ Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 6, sNotePlaybackVibrato);
+ }
- if (sNotePlaybackTone != sPlaybackSong[sPlaybackNotePos].tone) {
- sNotePlaybackTone = sPlaybackSong[sPlaybackNotePos].tone;
- sNormalizedNotePlaybackTone = Audio_OcaAdjStick(sNotePlaybackTone);
- }
+ // Update bend
+ if (sNotePlaybackBend != sPlaybackSong[sPlaybackNotePos].bend) {
+ sNotePlaybackBend = sPlaybackSong[sPlaybackNotePos].bend;
+ sRelativeNotePlaybackBend = AudioOcarina_BendPitchTwoSemitones(sNotePlaybackBend);
+ }
- if ((sPlaybackSong[sPlaybackNotePos].volume == sPlaybackSong[sPlaybackNotePos - 1].volume &&
- (sPlaybackSong[sPlaybackNotePos].vibrato == sPlaybackSong[sPlaybackNotePos - 1].vibrato) &&
- (sPlaybackSong[sPlaybackNotePos].tone == sPlaybackSong[sPlaybackNotePos - 1].tone))) {
- sDisplayedNoteValue = 0xFE;
- }
+ // No changes in volume, vibrato, or bend between notes
+ if ((sPlaybackSong[sPlaybackNotePos].volume == sPlaybackSong[sPlaybackNotePos - 1].volume &&
+ (sPlaybackSong[sPlaybackNotePos].vibrato == sPlaybackSong[sPlaybackNotePos - 1].vibrato) &&
+ (sPlaybackSong[sPlaybackNotePos].bend == sPlaybackSong[sPlaybackNotePos - 1].bend))) {
+ sPlaybackPitch = 0xFE;
+ }
- if (sDisplayedNoteValue != sPlaybackSong[sPlaybackNotePos].noteIdx) {
- u8 tmp = sPlaybackSong[sPlaybackNotePos].noteIdx;
+ if (sPlaybackPitch != sPlaybackSong[sPlaybackNotePos].pitch) {
+ u8 pitch = sPlaybackSong[sPlaybackNotePos].pitch;
- if (tmp == 0xA) {
- sDisplayedNoteValue = tmp + sPlaybackSong[sPlaybackNotePos].semitone;
- } else {
- sDisplayedNoteValue = tmp;
- }
+ // As bFlat4 is exactly in the middle of notes B & A, a flag is
+ // added to the pitch to resolve which button to map Bflat4 to
+ if (pitch == OCARINA_PITCH_BFLAT4) {
+ sPlaybackPitch = pitch + sPlaybackSong[sPlaybackNotePos].bFlat4Flag;
+ } else {
+ sPlaybackPitch = pitch;
+ }
- if (sDisplayedNoteValue != 0xFF) {
- sStaffPlaybackPos++;
- Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | 0xD07, D_80130F10 - 1);
- Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | 0xD05, sDisplayedNoteValue & 0x3F);
- Audio_PlaySoundGeneral(NA_SE_OC_OCARINA, &gSfxDefaultPos, 4, &sNormalizedNotePlaybackTone,
- &sNormalizedNotePlaybackVolume, &gSfxDefaultReverb);
- } else {
- Audio_StopSfxById(NA_SE_OC_OCARINA);
- }
+ if (sPlaybackPitch != OCARINA_PITCH_NONE) {
+ sPlaybackStaffPos++;
+ // Sets ocarina instrument Id to channelIdx io port 7, which is used
+ // as an index in seq 0 to get the true instrument Id
+ Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 7,
+ sOcarinaInstrumentId - 1);
+ // Sets sPlaybackPitch to channelIdx io port 5
+ Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 5,
+ sPlaybackPitch & 0x3F);
+ Audio_PlaySoundGeneral(NA_SE_OC_OCARINA, &gSfxDefaultPos, 4, &sRelativeNotePlaybackBend,
+ &sRelativeNotePlaybackVolume, &gSfxDefaultReverb);
+ } else {
+ Audio_StopSfxById(NA_SE_OC_OCARINA);
}
- sPlaybackNotePos++;
}
+ sPlaybackNotePos++;
}
}
-void func_800EDD68(u8 arg0) {
+void AudioOcarina_SetRecordingSong(u8 isRecordingComplete) {
u16 i;
u16 i2;
u16 pad;
- u8 lastNote;
+ u8 pitch;
OcarinaNote* note;
u8 j;
u8 k;
s32 t;
- OcarinaNote* song;
+ OcarinaNote* recordedSong;
- if (sRecordingState == 1) {
- song = gScarecrowCustomSongPtr;
+ if (sRecordingState == OCARINA_RECORD_SCARECROW_LONG) {
+ recordedSong = gScarecrowLongSongPtr;
} else {
- song = D_80131BEC;
- }
- song[sRecordSongPos].noteIdx = D_80131864;
- song[sRecordSongPos].unk_02 = D_8016BA04 - D_80131860;
- song[sRecordSongPos].volume = D_80131868;
- song[sRecordSongPos].vibrato = D_8013186C;
- song[sRecordSongPos].tone = D_80131870;
- song[sRecordSongPos].semitone = D_80131874 & 0xC0;
- D_80131864 = sCurOcarinaBtnVal;
- D_80131868 = D_80130F30;
- D_8013186C = D_80130F34;
- D_80131870 = D_80130F2C;
- D_80131874 = sCurOcarinaBtnIdx;
+ /**
+ * OCARINA_RECORD_SCARECROW_SPAWN
+ *
+ * The notes for scarecrows spawn song are first recorded into the ocarina memory
+ * game address to act as a buffer. That way, if a new scarecrow spawn song is
+ * rejected, the previous scarecrow spawn song is not overwritten. If the scarecrow
+ * spawn song is accepted, then the notes are copied over to the scarecrow spawn
+ * song address
+ */
+ recordedSong = sMemoryGameSongPtr;
+ }
+
+ recordedSong[sRecordSongPos].pitch = sRecordOcarinaPitch;
+ recordedSong[sRecordSongPos].length = sOcarinaUpdateTaskStart - sOcarinaRecordTaskStart;
+ recordedSong[sRecordSongPos].volume = sRecordOcarinaVolume;
+ recordedSong[sRecordSongPos].vibrato = sRecordOcarinaVibrato;
+ recordedSong[sRecordSongPos].bend = sRecordOcarinaBendIndex;
+ recordedSong[sRecordSongPos].bFlat4Flag = sRecordOcarinaButtonIndex & 0xC0;
+
+ sRecordOcarinaPitch = sCurOcarinaPitch;
+ sRecordOcarinaVolume = sCurOcarinaVolume;
+ sRecordOcarinaVibrato = sCurOcarinaVibrato;
+ sRecordOcarinaBendIndex = sCurOcarinaBendIndex;
+ sRecordOcarinaButtonIndex = sCurOcarinaButtonIndex;
+
sRecordSongPos++;
- if ((sRecordSongPos != 107) && (arg0 == 0)) {
+ if ((sRecordSongPos != (ARRAY_COUNT(sScarecrowsLongSongNotes) - 1)) && !isRecordingComplete) {
+ // Continue recording
return;
}
+ // Recording is complete
+
i = sRecordSongPos;
- lastNote = 0xFF;
- while (i != 0 && lastNote == 0xFF) {
+ pitch = OCARINA_PITCH_NONE;
+ while (i != 0 && pitch == OCARINA_PITCH_NONE) {
i--;
- lastNote = song[i].noteIdx;
+ pitch = recordedSong[i].pitch;
}
if (1) {}
if (sRecordSongPos != (i + 1)) {
sRecordSongPos = i + 2;
- song[sRecordSongPos - 1].unk_02 = 0;
+ recordedSong[sRecordSongPos - 1].length = 0;
}
- song[sRecordSongPos].unk_02 = 0;
+ recordedSong[sRecordSongPos].length = 0;
- if (sRecordingState == 2) {
- if (sStaffPlayingPos >= 8) {
+ if (sRecordingState == OCARINA_RECORD_SCARECROW_SPAWN) {
+ if (sStaffOcarinaPlayingPos >= 8) {
for (i = 0; i < sRecordSongPos; i++) {
- song[i] = song[i + 1];
+ recordedSong[i] = recordedSong[i + 1];
}
- func_800ECB7C(OCARINA_SONG_MEMORY_GAME);
-
- for (i = 0; i < OCARINA_SONG_SCARECROW; i++) {
- for (j = 0; j < 9 - gOcarinaSongNotes[i].len; j++) {
- for (k = 0;
- k < gOcarinaSongNotes[i].len && k + j < 8 &&
- gOcarinaSongNotes[i].notesIdx[k] == gOcarinaSongNotes[OCARINA_SONG_SCARECROW].notesIdx[k + j];
+ // Copies Notes from buffer into scarecrows spawn buttons to be tested for acceptance or rejection
+ AudioOcarina_MapNotesToScarecrowButtons(OCARINA_SONG_MEMORY_GAME);
+
+ // Loop through each of the songs
+ for (i = 0; i < OCARINA_SONG_SCARECROW_SPAWN; i++) {
+ // Loops through all possible starting indices
+ for (j = 0; j < 9 - gOcarinaSongButtons[i].numButtons; j++) {
+ // Loops through the notes of song i
+ for (k = 0; k < gOcarinaSongButtons[i].numButtons && k + j < 8 &&
+ gOcarinaSongButtons[i].buttonsIndex[k] ==
+ gOcarinaSongButtons[OCARINA_SONG_SCARECROW_SPAWN].buttonsIndex[k + j];
k++) {
;
}
- if (k == gOcarinaSongNotes[i].len) {
- sRecordingState = 0xFF;
- sOcarinaSongs[OCARINA_SONG_SCARECROW][1].volume = 0xFF;
+ // This conditional is true if the recorded song contains a reserved song
+ if (k == gOcarinaSongButtons[i].numButtons) {
+ sRecordingState = OCARINA_RECORD_REJECTED;
+ sOcarinaSongNotes[OCARINA_SONG_SCARECROW_SPAWN][1].volume = 0xFF;
return;
}
}
}
+ // Counts how many times a note is repeated
i = 1;
while (i < 8) {
- if (gOcarinaSongNotes[OCARINA_SONG_SCARECROW].notesIdx[0] !=
- gOcarinaSongNotes[OCARINA_SONG_SCARECROW].notesIdx[i]) {
- i = 9;
+ if (gOcarinaSongButtons[OCARINA_SONG_SCARECROW_SPAWN].buttonsIndex[0] !=
+ gOcarinaSongButtons[OCARINA_SONG_SCARECROW_SPAWN].buttonsIndex[i]) {
+ i = 9; // break
} else {
i++;
}
}
+ // This condition is true if all 8 notes are the same pitch
if (i == 8) {
- sRecordingState = 0xFF;
- sOcarinaSongs[OCARINA_SONG_SCARECROW][1].volume = 0xFF;
+ sRecordingState = OCARINA_RECORD_REJECTED;
+ sOcarinaSongNotes[OCARINA_SONG_SCARECROW_SPAWN][1].volume = 0xFF;
return;
}
+ // The scarecrow spawn song is accepted and copied from the buffer to the scarecrow spawn notes
for (i = 0; i < sRecordSongPos; i++) {
- sOcarinaSongs[OCARINA_SONG_SCARECROW][i] = sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][i];
+ sOcarinaSongNotes[OCARINA_SONG_SCARECROW_SPAWN][i] = sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][i];
}
- sOcarinaInpEnabled = 0;
+ sIsOcarinaInputEnabled = false;
} else {
- sOcarinaSongs[OCARINA_SONG_SCARECROW][1].volume = 0xFF;
+ sOcarinaSongNotes[OCARINA_SONG_SCARECROW_SPAWN][1].volume = 0xFF;
}
}
- sRecordingState = 0;
+
+ sRecordingState = OCARINA_RECORD_OFF;
}
-// start custom song?
/**
- * recordingState = 1, start long scarecrows song
- * recordingState = 0, end
- * recordingState = 2, also scarecrows song
+ * recordingState = OCARINA_RECORD_OFF, end
+ * recordingState = OCARINA_RECORD_SCARECROW_LONG, start long scarecrows song
+ * recordingState = OCARINA_RECORD_SCARECROW_SPAWN, start spawn scarecrows song
*/
-void Audio_OcaSetRecordingState(u8 recordingState) {
+void AudioOcarina_SetRecordingState(u8 recordingState) {
if ((u32)recordingState == sRecordingState) {
return;
}
- if (recordingState != 0) {
- D_80131860 = D_8016BA04;
- D_80131864 = 0xFF;
- D_80131868 = 0x57;
- D_8013186C = 0;
- D_80131870 = 0;
- D_80131874 = 0;
+ if (recordingState != OCARINA_RECORD_OFF) {
+ sOcarinaRecordTaskStart = sOcarinaUpdateTaskStart;
+ sRecordOcarinaPitch = OCARINA_PITCH_NONE;
+ sRecordOcarinaVolume = 0x57;
+ sRecordOcarinaVibrato = 0;
+ sRecordOcarinaBendIndex = 0;
+ sRecordOcarinaButtonIndex = 0;
sRecordSongPos = 0;
- sOcarinaInpEnabled = 1;
- sStaffPlayingPos = 0;
- D_8016BAA0 = sPierresSong[1];
+ sIsOcarinaInputEnabled = true;
+ sStaffOcarinaPlayingPos = 0;
+ sScarecrowsLongSongSecondNote = sScarecrowsLongSongNotes[1];
} else {
if (sRecordSongPos == 0) {
- sPierresSong[1] = D_8016BAA0;
+ sScarecrowsLongSongNotes[1] = sScarecrowsLongSongSecondNote;
} else {
- if (sRecordingState == 2) {
- sStaffPlayingPos = 1;
+ if (sRecordingState == OCARINA_RECORD_SCARECROW_SPAWN) {
+ sStaffOcarinaPlayingPos = 1;
}
- func_800EDD68(1);
+ AudioOcarina_SetRecordingSong(true);
}
- sOcarinaInpEnabled = 0;
- sStaffPlayingPos = 0;
+ sIsOcarinaInputEnabled = false;
+ sStaffOcarinaPlayingPos = 0;
}
sRecordingState = recordingState;
}
-void Audio_OcaUpdateRecordingStaff(void) {
+void AudioOcarina_UpdateRecordingStaff(void) {
sRecordingStaff.state = sRecordingState;
- sRecordingStaff.pos = sStaffPlayingPos;
- if (sRecordingState == 0xFF) {
- sRecordingState = 0;
+ sRecordingStaff.pos = sStaffOcarinaPlayingPos;
+ if (sRecordingState == OCARINA_RECORD_REJECTED) {
+ sRecordingState = OCARINA_RECORD_OFF;
}
}
-void Audio_OcaUpdatePlayingStaff(void) {
- sPlayingStaff.noteIdx = sCurOcarinaBtnIdx & 0x3F;
- sPlayingStaff.state = Audio_OcaGetPlayingState();
- sPlayingStaff.pos = sStaffPlayingPos;
+void AudioOcarina_UpdatePlayingStaff(void) {
+ sPlayingStaff.buttonIndex = sCurOcarinaButtonIndex & 0x3F;
+ sPlayingStaff.state = AudioOcarina_GetPlayingState();
+ sPlayingStaff.pos = sStaffOcarinaPlayingPos;
}
-void Audio_OcaUpdateDisplayedStaff(void) {
- if ((sDisplayedNoteValue & 0x3F) < 0x10) {
- sDisplayedStaff.noteIdx = Audio_OcaMapNoteValue(sDisplayedNoteValue);
+void AudioOcarina_UpdatePlaybackStaff(void) {
+ if ((sPlaybackPitch & 0x3F) <= OCARINA_PITCH_EFLAT5) {
+ sPlaybackStaff.buttonIndex = AudioOcarina_MapNoteToButton(sPlaybackPitch);
}
- sDisplayedStaff.state = sPlaybackState;
+ sPlaybackStaff.state = sPlaybackState;
- if (sPlaybackSong != sPierresSong) {
- sDisplayedStaff.pos = sStaffPlaybackPos;
- } else if (sStaffPlaybackPos == 0) {
- sDisplayedStaff.pos = 0;
+ if (sPlaybackSong != sScarecrowsLongSongNotes) {
+ sPlaybackStaff.pos = sPlaybackStaffPos;
+ } else if (sPlaybackStaffPos == 0) {
+ sPlaybackStaff.pos = 0;
} else {
- sDisplayedStaff.pos = ((sStaffPlaybackPos - 1) % 8) + 1;
+ sPlaybackStaff.pos = ((sPlaybackStaffPos - 1) % 8) + 1;
}
}
-OcarinaStaff* Audio_OcaGetRecordingStaff(void) {
+OcarinaStaff* AudioOcarina_GetRecordingStaff(void) {
return &sRecordingStaff;
}
-OcarinaStaff* Audio_OcaGetPlayingStaff(void) {
+OcarinaStaff* AudioOcarina_GetPlayingStaff(void) {
if (sPlayingStaff.state < 0xFE) {
- D_80130F3C = 0;
+ sOcarinaFlags = 0;
}
+
return &sPlayingStaff;
}
-OcarinaStaff* Audio_OcaGetDisplayingStaff(void) {
- return &sDisplayedStaff;
+OcarinaStaff* AudioOcarina_GetPlaybackStaff(void) {
+ return &sPlaybackStaff;
}
-void func_800EE404(void) {
+void AudioOcarina_RecordSong(void) {
s32 noteChanged;
- if ((sRecordingState != 0) && ((D_8016BA04 - D_80131860) >= 3)) {
+ if ((sRecordingState != OCARINA_RECORD_OFF) && ((sOcarinaUpdateTaskStart - sOcarinaRecordTaskStart) >= 3)) {
noteChanged = false;
- if (D_80131864 != sCurOcarinaBtnVal) {
- if (sCurOcarinaBtnVal != 0xFF) {
- sRecordingStaff.noteIdx = sCurOcarinaBtnIdx & 0x3F;
- sStaffPlayingPos++;
- } else if ((sRecordingState == 2) && (sStaffPlayingPos == 8)) {
- func_800EDD68(1);
+ if (sRecordOcarinaPitch != sCurOcarinaPitch) {
+ if (sCurOcarinaPitch != OCARINA_PITCH_NONE) {
+ sRecordingStaff.buttonIndex = sCurOcarinaButtonIndex & 0x3F;
+ sStaffOcarinaPlayingPos++;
+ } else if ((sRecordingState == OCARINA_RECORD_SCARECROW_SPAWN) && (sStaffOcarinaPlayingPos == 8)) {
+ AudioOcarina_SetRecordingSong(true);
return;
}
- if (sStaffPlayingPos > 8) {
- if (sRecordingState == 2) {
+ if (sStaffOcarinaPlayingPos > 8) {
+ if (sRecordingState == OCARINA_RECORD_SCARECROW_SPAWN) {
// notes played are over 8 and in recording mode.
- func_800EDD68(1);
+ AudioOcarina_SetRecordingSong(true);
return;
}
- sStaffPlayingPos = true;
+ sStaffOcarinaPlayingPos = 1;
}
noteChanged = true;
- } else if (D_80131868 != D_80130F30) {
+ } else if (sRecordOcarinaVolume != sCurOcarinaVolume) {
noteChanged = true;
- } else if (D_8013186C != D_80130F34) {
+ } else if (sRecordOcarinaVibrato != sCurOcarinaVibrato) {
noteChanged = true;
- } else if (D_80131870 != D_80130F2C) {
+ } else if (sRecordOcarinaBendIndex != sCurOcarinaBendIndex) {
noteChanged = true;
}
if (noteChanged) {
- func_800EDD68(0);
- D_80131860 = D_8016BA04;
+ AudioOcarina_SetRecordingSong(false);
+ sOcarinaRecordTaskStart = sOcarinaUpdateTaskStart;
}
}
}
-void Audio_OcaMemoryGameStart(u8 minigameRound) {
+void AudioOcarina_MemoryGameInit(u8 minigameRound) {
u8 i;
if (minigameRound > 2) {
minigameRound = 2;
}
- sOcaMinigameAppendPos = 0;
- sOcaMinigameEndPos = sOcaMinigameNoteCnts[minigameRound];
+ sOcaMemoryGameAppendPos = 0;
+ sOcaMemoryGameEndPos = sOcaMemoryGameNumNotes[minigameRound];
for (i = 0; i < 3; i++) {
- Audio_OcaMemoryGameGenNote();
+ AudioOcarina_MemoryGameNextNote();
}
}
-s32 Audio_OcaMemoryGameGenNote(void) {
- u32 rnd;
- u8 rndNote;
+s32 AudioOcarina_MemoryGameNextNote(void) {
+ u32 randomButtonIndex;
+ u8 randomPitch;
- if (sOcaMinigameAppendPos == sOcaMinigameEndPos) {
+ if (sOcaMemoryGameAppendPos == sOcaMemoryGameEndPos) {
return 1;
}
- rnd = Audio_NextRandom();
- rndNote = sOcarinaNoteValues[rnd % 5];
+ randomButtonIndex = Audio_NextRandom();
+ randomPitch = sButtonToPitchMap[randomButtonIndex % 5];
- if (sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos - 1].noteIdx == rndNote) {
- rndNote = sOcarinaNoteValues[(rnd + 1) % 5];
+ if (sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][sOcaMemoryGameAppendPos - 1].pitch == randomPitch) {
+ randomPitch = sButtonToPitchMap[(randomButtonIndex + 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;
+ sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][sOcaMemoryGameAppendPos].pitch = randomPitch;
+ sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][sOcaMemoryGameAppendPos].length = 45;
+ sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][sOcaMemoryGameAppendPos].volume = 0x50;
+ sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][sOcaMemoryGameAppendPos].vibrato = 0;
+ sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][sOcaMemoryGameAppendPos].bend = 0;
- sOcaMinigameAppendPos++;
+ sOcaMemoryGameAppendPos++;
- sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].noteIdx = 0xFF;
- sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].unk_02 = 0;
- sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos + 1].noteIdx = 0xFF;
- sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos + 1].unk_02 = 0;
+ sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][sOcaMemoryGameAppendPos].pitch = OCARINA_PITCH_NONE;
+ sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][sOcaMemoryGameAppendPos].length = 0;
+ sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][sOcaMemoryGameAppendPos + 1].pitch = OCARINA_PITCH_NONE;
+ sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][sOcaMemoryGameAppendPos + 1].length = 0;
if (1) {}
return 0;
}
-// input update?
-void func_800EE6F4(void) {
- D_8016BA04 = gAudioContext.totalTaskCnt;
- if (D_80130F10 != 0) {
- if (sOcarinaInpEnabled == 1) {
- Audio_GetOcaInput();
+void AudioOcarina_Update(void) {
+ sOcarinaUpdateTaskStart = gAudioContext.totalTaskCount;
+ if (sOcarinaInstrumentId != OCARINA_INSTRUMENT_OFF) {
+ if (sIsOcarinaInputEnabled == true) {
+ AudioOcarina_ReadControllerInput();
}
- if ((sPlaybackState == 0) && (sOcarinaInpEnabled == 1)) {
- func_800ED458(0);
+
+ if ((sPlaybackState == 0) && (sIsOcarinaInputEnabled == true)) {
+ AudioOcarina_PlayControllerInput(false);
}
- if (D_80130F3C != 0) {
- if (D_80130F3C & 0x4000) {
- func_800ED200();
+
+ if (sOcarinaFlags != 0) {
+ if (sOcarinaFlags & 0x4000) {
+ AudioOcarina_CheckSongsWithoutMusicStaff();
} else {
- func_800ECDF8();
+ AudioOcarina_CheckSongsWithMusicStaff();
}
}
- Audio_OcaPlayback();
- D_80130F68 = D_8016BA04;
+ AudioOcarina_PlaybackSong();
+ sOcarinaPlaybackTaskStart = sOcarinaUpdateTaskStart;
if (sPlaybackState == 0) {
- func_800EE404();
+ AudioOcarina_RecordSong();
}
- if ((D_80130F3C != 0) && (sPrevOcarinaNoteVal != sCurOcarinaBtnVal)) {
- D_80131880 = 1;
+ if ((sOcarinaFlags != 0) && (sPrevOcarinaPitch != sCurOcarinaPitch)) {
+ sOcarinaDropInputTimer = 1; // Drops ocarina input for 1 frame
}
- sPrevOcarinaNoteVal = sCurOcarinaBtnVal;
+ sPrevOcarinaPitch = sCurOcarinaPitch;
}
- Audio_OcaUpdatePlayingStaff();
- Audio_OcaUpdateDisplayedStaff();
- Audio_OcaUpdateRecordingStaff();
+ AudioOcarina_UpdatePlayingStaff();
+ AudioOcarina_UpdatePlaybackStaff();
+ AudioOcarina_UpdateRecordingStaff();
}
-void func_800EE824(void) {
- static u8 D_80131C80 = 0;
- static u8 D_80131C84 = 1;
- static u16 D_80131C88 = 1200;
+void AudioOcarina_PlayLongScarecrowAfterCredits(void) {
+ static u8 sScarecrowAfterCreditsState = 0;
+ static u8 sScarecrowAfterCreditsIntrumentId = OCARINA_INSTRUMENT_DEFAULT;
+ static u16 sScarecrowAfterCreditsTimer = 1200;
- switch (D_80131C80) {
+ switch (sScarecrowAfterCreditsState) {
case 0:
- if (D_80131C88-- == 0) {
- if (D_80131C84 < 7) {
- D_80131C80++;
+ if (sScarecrowAfterCreditsTimer-- == 0) {
+ if (sScarecrowAfterCreditsIntrumentId < OCARINA_INSTRUMENT_MAX) {
+ // set next ocarina instrument and restart
+ sScarecrowAfterCreditsState++;
} else {
- D_80131C80 = 3;
- Audio_OcaSetInstrument(0);
+ // finished
+ sScarecrowAfterCreditsState = 3;
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
}
- D_80131C88 = 1200;
+ sScarecrowAfterCreditsTimer = 1200;
}
break;
case 1:
Audio_SetSoundBanksMute(0);
- Audio_OcaSetInstrument(D_80131C84);
- Audio_OcaSetSongPlayback(OCARINA_SONG_SCARECROW_LONG + 1, 1);
- D_80131C84++;
- D_80131C80++;
+ AudioOcarina_SetInstrument(sScarecrowAfterCreditsIntrumentId);
+ AudioOcarina_SetPlaybackSong(OCARINA_SONG_SCARECROW_LONG + 1, 1);
+ sScarecrowAfterCreditsIntrumentId++;
+ sScarecrowAfterCreditsState++;
break;
case 2:
- if (Audio_OcaGetDisplayingStaff()->state == 0) {
- D_80131C80 = 0;
+ if (AudioOcarina_GetPlaybackStaff()->state == 0) {
+ sScarecrowAfterCreditsState = 0;
}
break;
}
}
-void func_800EE930(void) {
- sPlayingStaff.noteIdx = OCARINA_NOTE_INVALID;
+void AudioOcarina_ResetStaffs(void) {
+ sPlayingStaff.buttonIndex = OCARINA_BTN_INVALID;
sPlayingStaff.state = 0xFF;
sPlayingStaff.pos = 0;
- sDisplayedStaff.noteIdx = OCARINA_NOTE_INVALID;
- sDisplayedStaff.state = 0;
- sDisplayedStaff.pos = 0;
- sRecordingStaff.noteIdx = OCARINA_NOTE_INVALID;
- sRecordingStaff.state = 0xFF;
+ sPlaybackStaff.buttonIndex = OCARINA_BTN_INVALID;
+ sPlaybackStaff.state = 0;
+ sPlaybackStaff.pos = 0;
+ sRecordingStaff.buttonIndex = OCARINA_BTN_INVALID;
+ sRecordingStaff.state = OCARINA_RECORD_REJECTED;
sRecordingStaff.pos = 0;
- D_80131880 = 0;
+ sOcarinaDropInputTimer = 0;
}
f32 D_80131C8C = 0.0f;
-// === Audio Debugging ===
+// =========== Audio Debugging ===========
-// These variables come between in-function statics in func_800EE824 and Audio_SplitBgmChannels
+extern u16 gAudioSfxSwapSource[];
+extern u16 gAudioSfxSwapTarget[];
+extern u8 gAudioSfxSwapMode[];
+extern u8 gAudioSfxSwapOff;
+extern u8 D_801333F0;
+
+u32 sDebugPadHold;
+u32 sDebugPadBtnLast;
+u32 sDebugPadPress;
+s32 sAudioUpdateTaskStart;
+s32 sAudioUpdateTaskEnd;
f32 sAudioUpdateDuration = 0.0f;
f32 sAudioUpdateDurationMax = 0.0f;
@@ -2767,11 +2963,11 @@ void AudioDebug_Draw(GfxPrint* printer) {
case PAGE_OCARINA_TEST:
SETCOL(255, 255, 255);
GfxPrint_SetPos(printer, 3, 4);
- GfxPrint_Printf(printer, "SEQ INFO : %2d %02x %d", sDisplayedStaff.noteIdx, sDisplayedStaff.state,
- sDisplayedStaff.pos);
+ GfxPrint_Printf(printer, "SEQ INFO : %2d %02x %d", sPlaybackStaff.buttonIndex, sPlaybackStaff.state,
+ sPlaybackStaff.pos);
GfxPrint_SetPos(printer, 3, 5);
- GfxPrint_Printf(printer, "PLAY INFO : %2d %02x %d", sPlayingStaff.noteIdx, sPlayingStaff.state,
+ GfxPrint_Printf(printer, "PLAY INFO : %2d %02x %d", sPlayingStaff.buttonIndex, sPlayingStaff.state,
sPlayingStaff.pos);
GfxPrint_SetPos(printer, 3, 6);
@@ -2786,8 +2982,8 @@ void AudioDebug_Draw(GfxPrint* printer) {
}
GfxPrint_SetPos(printer, 3, 24);
- GfxPrint_Printf(printer, "OCA:%02x SEQ:%04x PLAY:%02x REC:%02x", D_80130F10, D_80130F3C, sPlaybackState,
- sRecordingState);
+ GfxPrint_Printf(printer, "OCA:%02x SEQ:%04x PLAY:%02x REC:%02x", sOcarinaInstrumentId, sOcarinaFlags,
+ sPlaybackState, sRecordingState);
break;
case PAGE_SFX_PARAMETER_CHANGE:
@@ -3494,11 +3690,14 @@ void AudioDebug_ProcessInput(void) {
void Audio_UpdateRiverSoundVolumes(void);
void func_800F5CF8(void);
+/**
+ * This is Audio_Update for the graph thread
+ */
void func_800F3054(void) {
if (func_800FAD34() == 0) {
- sAudioUpdateTaskStart = gAudioContext.totalTaskCnt;
+ sAudioUpdateTaskStart = gAudioContext.totalTaskCount;
sAudioUpdateStartTime = osGetTime();
- func_800EE6F4();
+ AudioOcarina_Update();
Audio_StepFreqLerp(&sRiverFreqScaleLerp);
Audio_StepFreqLerp(&sWaterfallFreqScaleLerp);
Audio_UpdateRiverSoundVolumes();
@@ -3514,7 +3713,7 @@ void func_800F3054(void) {
AudioDebug_SetInput();
AudioDebug_ProcessInput();
Audio_ScheduleProcessCmds();
- sAudioUpdateTaskEnd = gAudioContext.totalTaskCnt;
+ sAudioUpdateTaskEnd = gAudioContext.totalTaskCount;
sAudioUpdateEndTime = osGetTime();
}
}
@@ -3880,7 +4079,7 @@ void Audio_ResetSfxChannelState(void) {
state->unk_0C = 0xFF;
}
- sSfxChannelState[SFX_PLAYER_CHANNEL_OCARINA].unk_0C = 0;
+ sSfxChannelState[SFX_CHANNEL_OCARINA].unk_0C = 0;
sPrevSeqMode = 0;
sAudioCodeReverb = 0;
}
@@ -4184,7 +4383,7 @@ void Audio_UpdateRiverSoundVolumes(void) {
}
void Audio_PlaySoundIncreasinglyTransposed(Vec3f* pos, s16 sfxId, u8* semitones) {
- Audio_PlaySoundGeneral(sfxId, pos, 4, &gNoteFrequencies[semitones[sAudioIncreasingTranspose] + 39],
+ Audio_PlaySoundGeneral(sfxId, pos, 4, &gPitchFrequencies[semitones[sAudioIncreasingTranspose] + 39],
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
if (sAudioIncreasingTranspose < 15) {
@@ -4197,7 +4396,7 @@ void Audio_ResetIncreasingTranspose(void) {
}
void Audio_PlaySoundTransposed(Vec3f* pos, u16 sfxId, s8 semitone) {
- Audio_PlaySoundGeneral(sfxId, pos, 4, &gNoteFrequencies[semitone + 39], &gSfxDefaultFreqAndVolScale,
+ Audio_PlaySoundGeneral(sfxId, pos, 4, &gPitchFrequencies[semitone + 39], &gSfxDefaultFreqAndVolScale,
&gSfxDefaultReverb);
}
@@ -4875,26 +5074,26 @@ void Audio_PlaySoundIfNotInCutscene(u16 sfxId) {
void func_800F6964(u16 arg0) {
s32 skip;
- u8 i;
+ u8 channelIdx;
Audio_SeqCmd1(SEQ_PLAYER_BGM_MAIN, (arg0 * 3) / 2);
Audio_SeqCmd1(SEQ_PLAYER_FANFARE, (arg0 * 3) / 2);
- for (i = 0; i < 0x10; i++) {
+ for (channelIdx = 0; channelIdx < 16; channelIdx++) {
skip = false;
- switch (i) {
- case 11:
- case 12:
+ switch (channelIdx) {
+ case SFX_CHANNEL_SYSTEM0:
+ case SFX_CHANNEL_SYSTEM1:
if (gAudioSpecId == 10) {
skip = true;
}
break;
- case 13:
+ case SFX_CHANNEL_OCARINA:
skip = true;
break;
}
if (!skip) {
- Audio_SeqCmd6(SEQ_PLAYER_SFX, arg0 >> 1, i, 0);
+ Audio_SeqCmd6(SEQ_PLAYER_SFX, arg0 >> 1, channelIdx, 0);
}
}
@@ -4947,7 +5146,7 @@ void func_800F6C34(void) {
sAudioExtraFilter = 0;
sAudioBaseFilter2 = 0;
sAudioExtraFilter2 = 0;
- Audio_OcaSetInstrument(0);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
sRiverFreqScaleLerp.remainingFrames = 0;
sWaterfallFreqScaleLerp.remainingFrames = 0;
sRiverFreqScaleLerp.value = 1.0f;
@@ -5060,7 +5259,7 @@ void Audio_Init(void) {
void Audio_InitSound(void) {
func_800F6C34();
- func_800EE930();
+ AudioOcarina_ResetStaffs();
Audio_ResetSfxChannelState();
func_800FAEB4();
Audio_ResetSounds();
@@ -5077,7 +5276,7 @@ void func_800F7170(void) {
void func_800F71BC(s32 arg0) {
D_80133418 = 1;
func_800F6C34();
- func_800EE930();
+ AudioOcarina_ResetStaffs();
Audio_ResetSfxChannelState();
func_800FADF8();
Audio_ResetSounds();
diff --git a/src/code/z_construct.c b/src/code/z_construct.c
index fbfc9dcb0..cbf9983ad 100644
--- a/src/code/z_construct.c
+++ b/src/code/z_construct.c
@@ -533,8 +533,8 @@ void func_80111070(void) {
VREG(25) = 0;
VREG(26) = 0;
VREG(27) = 0;
- R_OCARINA_NOTES_XPOS = 98;
- R_OCARINA_NOTES_XPOS_OFFSET = 18;
+ R_OCARINA_BUTTONS_XPOS = 98;
+ R_OCARINA_BUTTONS_XPOS_OFFSET = 18;
VREG(30) = 0;
VREG(31) = 0;
VREG(32) = 0;
@@ -551,13 +551,13 @@ void func_80111070(void) {
VREG(42) = 250;
VREG(43) = 440;
VREG(44) = 10;
- R_OCARINA_NOTES_YPOS(0) = 190;
- R_OCARINA_NOTES_YPOS(1) = 184;
- R_OCARINA_NOTES_YPOS(2) = 176;
- R_OCARINA_NOTES_YPOS(3) = 172;
- R_OCARINA_NOTES_YPOS(4) = 170;
+ R_OCARINA_BUTTONS_YPOS(0) = 190;
+ R_OCARINA_BUTTONS_YPOS(1) = 184;
+ R_OCARINA_BUTTONS_YPOS(2) = 176;
+ R_OCARINA_BUTTONS_YPOS(3) = 172;
+ R_OCARINA_BUTTONS_YPOS(4) = 170;
VREG(50) = 30;
- R_OCARINA_NOTES_YPOS_OFFSET = 0;
+ R_OCARINA_BUTTONS_YPOS_OFFSET = 0;
VREG(52) = -16;
VREG(53) = 230;
VREG(54) = 230;
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index 9e58d7b69..549e79da1 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -420,7 +420,7 @@ void func_80064824(GlobalContext* globalCtx, CutsceneContext* csCtx, CsCmdBase*
}
break;
case 35:
- func_800EE824();
+ AudioOcarina_PlayLongScarecrowAfterCredits();
csCtx->frames = cmd->startFrame - 1;
break;
}
diff --git a/src/code/z_message_PAL.c b/src/code/z_message_PAL.c
index dfbed1e0a..38968e59a 100644
--- a/src/code/z_message_PAL.c
+++ b/src/code/z_message_PAL.c
@@ -7,9 +7,9 @@ s16 sTextFade = false; // original name: key_off_flag ?
u8 D_8014B2F4 = 0;
-s16 sOcarinaNoteBufPos = 0;
+s16 sOcarinaButtonIndexBufPos = 0;
-s16 sOcarinaNoteBufLen = 0;
+s16 sOcarinaButtonIndexBufLen = 0;
u8 sTextboxSkipped = false;
@@ -19,7 +19,7 @@ s16 sTextIsCredits = false;
UNK_TYPE D_8014B30C = 0;
-s16 sLastPlayedSong = 0xFF; // last played song?
+s16 sLastPlayedSong = 0xFF;
s16 sHasSunsSong = false;
@@ -82,9 +82,9 @@ s16 sTextboxBackgroundYOffsets[] = {
};
// original name: onpu_buff
-u8 sOcarinaNoteBuf[12] = { 0 };
+u8 sOcarinaButtonIndexBuf[12] = { 0 };
-s16 sOcarinaNotesAlphaValues[9] = { 0 };
+s16 sOcarinaButtonAlphaValues[9] = { 0 };
// Maps the ocarina song order to the quest item order
s16 gOcarinaSongItemMap[] = {
@@ -95,59 +95,59 @@ s16 gOcarinaSongItemMap[] = {
s32 sCharTexSize;
s32 sCharTexScale;
-s16 sOcarinaNoteAPrimR;
-s16 sOcarinaNoteAPrimB;
-s16 sOcarinaNoteAPrimG;
-s16 sOcarinaNoteAEnvR;
-s16 sOcarinaNoteAEnvB;
-s16 sOcarinaNoteAEnvG;
-s16 sOcarinaNoteCPrimR;
-s16 sOcarinaNoteCPrimB;
-s16 sOcarinaNoteCPrimG;
-s16 sOcarinaNoteCEnvR;
-s16 sOcarinaNoteCEnvB;
-s16 sOcarinaNoteCEnvG;
+s16 sOcarinaButtonAPrimR;
+s16 sOcarinaButtonAPrimB;
+s16 sOcarinaButtonAPrimG;
+s16 sOcarinaButtonAEnvR;
+s16 sOcarinaButtonAEnvB;
+s16 sOcarinaButtonAEnvG;
+s16 sOcarinaButtonCPrimR;
+s16 sOcarinaButtonCPrimB;
+s16 sOcarinaButtonCPrimG;
+s16 sOcarinaButtonCEnvR;
+s16 sOcarinaButtonCEnvB;
+s16 sOcarinaButtonCEnvG;
void Message_ResetOcarinaNoteState(void) {
- R_OCARINA_NOTES_YPOS(0) = 189;
- R_OCARINA_NOTES_YPOS(1) = 184;
- R_OCARINA_NOTES_YPOS(2) = 179;
- R_OCARINA_NOTES_YPOS(3) = 174;
- R_OCARINA_NOTES_YPOS(4) = 169;
- sOcarinaNoteBuf[0] = 0xFF;
- sOcarinaNotesAlphaValues[0] = sOcarinaNotesAlphaValues[1] = sOcarinaNotesAlphaValues[2] =
- sOcarinaNotesAlphaValues[3] = sOcarinaNotesAlphaValues[4] = sOcarinaNotesAlphaValues[5] =
- sOcarinaNotesAlphaValues[6] = sOcarinaNotesAlphaValues[7] = sOcarinaNotesAlphaValues[8] = 0;
- sOcarinaNoteAPrimR = 80;
- sOcarinaNoteAPrimG = 255;
- sOcarinaNoteAPrimB = 150;
- sOcarinaNoteAEnvR = 10;
- sOcarinaNoteAEnvG = 10;
- sOcarinaNoteAEnvB = 10;
- sOcarinaNoteCPrimR = 255;
- sOcarinaNoteCPrimG = 255;
- sOcarinaNoteCPrimB = 50;
- sOcarinaNoteCEnvR = 10;
- sOcarinaNoteCEnvG = 10;
- sOcarinaNoteCEnvB = 10;
+ R_OCARINA_BUTTONS_YPOS(0) = 189;
+ R_OCARINA_BUTTONS_YPOS(1) = 184;
+ R_OCARINA_BUTTONS_YPOS(2) = 179;
+ R_OCARINA_BUTTONS_YPOS(3) = 174;
+ R_OCARINA_BUTTONS_YPOS(4) = 169;
+ sOcarinaButtonIndexBuf[0] = OCARINA_BTN_INVALID;
+ sOcarinaButtonAlphaValues[0] = sOcarinaButtonAlphaValues[1] = sOcarinaButtonAlphaValues[2] =
+ sOcarinaButtonAlphaValues[3] = sOcarinaButtonAlphaValues[4] = sOcarinaButtonAlphaValues[5] =
+ sOcarinaButtonAlphaValues[6] = sOcarinaButtonAlphaValues[7] = sOcarinaButtonAlphaValues[8] = 0;
+ sOcarinaButtonAPrimR = 80;
+ sOcarinaButtonAPrimG = 255;
+ sOcarinaButtonAPrimB = 150;
+ sOcarinaButtonAEnvR = 10;
+ sOcarinaButtonAEnvG = 10;
+ sOcarinaButtonAEnvB = 10;
+ sOcarinaButtonCPrimR = 255;
+ sOcarinaButtonCPrimG = 255;
+ sOcarinaButtonCPrimB = 50;
+ sOcarinaButtonCEnvR = 10;
+ sOcarinaButtonCEnvG = 10;
+ sOcarinaButtonCEnvB = 10;
}
-void Message_UpdateOcarinaGame(GlobalContext* globalCtx) {
+void Message_UpdateOcarinaMemoryGame(GlobalContext* globalCtx) {
MessageContext* msgCtx = &globalCtx->msgCtx;
globalCtx->msgCtx.msgMode++;
if (globalCtx->msgCtx.msgMode == MSGMODE_MEMORY_GAME_PLAYER_PLAYING) {
- Audio_OcaSetInstrument(1);
- msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos = 0;
- func_800ECC04((1 << OCARINA_SONG_MEMORY_GAME) + 0x8000);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
+ AudioOcarina_Start((1 << OCARINA_SONG_MEMORY_GAME) + 0x8000);
msgCtx->textDrawPos = msgCtx->decodedTextLen;
} else if (msgCtx->msgMode == MSGMODE_MEMORY_GAME_RIGHT_SKULLKID_PLAYING) {
- Audio_OcaSetInstrument(6);
- msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos = 0;
- Audio_OcaSetSongPlayback(OCARINA_SONG_MEMORY_GAME + 1, 1);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_FLUTE);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
+ AudioOcarina_SetPlaybackSong(OCARINA_SONG_MEMORY_GAME + 1, 1);
msgCtx->stateTimer = 2;
}
Message_ResetOcarinaNoteState();
@@ -790,31 +790,31 @@ void Message_HandleOcarina(GlobalContext* globalCtx) {
} else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_LONG_PLAYBACK) {
// "Recording Playback / Recording Playback / Recording Playback / Recording Playback -> "
osSyncPrintf("録音再生 録音再生 録音再生 録音再生 -> ");
- Audio_OcaSetInstrument(1);
- Audio_OcaSetInstrument(1);
- msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
- sOcarinaNoteBufPos = sOcarinaNoteBufLen = 0;
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos;
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ sOcarinaButtonIndexBufPos = sOcarinaButtonIndexBufLen = 0;
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos;
Message_ResetOcarinaNoteState();
msgCtx->stateTimer = 3;
msgCtx->msgMode = MSGMODE_SCARECROW_LONG_PLAYBACK;
- Audio_OcaSetSongPlayback(OCARINA_SONG_SCARECROW_LONG + 1, 1);
- } else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_RECORDING) {
- msgCtx->msgMode = MSGMODE_SCARECROW_RECORDING_START;
+ AudioOcarina_SetPlaybackSong(OCARINA_SONG_SCARECROW_LONG + 1, 1);
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_RECORDING) {
+ msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_START;
// "8 Note Recording Start / 8 Note Recording Start / 8 Note Recording Start -> "
osSyncPrintf("8音録音開始 8音録音開始 8音録音開始 -> ");
- } else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_PLAYBACK) {
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_PLAYBACK) {
// "8 Note Playback / 8 Note Playback / 8 Note Playback -> "
osSyncPrintf("8音再生 8音再生 8音再生 -> ");
- Audio_OcaSetInstrument(1);
- Audio_OcaSetInstrument(1);
- msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
- sOcarinaNoteBufPos = sOcarinaNoteBufLen = 0;
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos;
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ sOcarinaButtonIndexBufPos = sOcarinaButtonIndexBufLen = 0;
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos;
Message_ResetOcarinaNoteState();
msgCtx->stateTimer = 3;
- msgCtx->msgMode = MSGMODE_SCARECROW_PLAYBACK;
- Audio_OcaSetSongPlayback(OCARINA_SONG_SCARECROW + 1, 1);
+ msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_PLAYBACK;
+ AudioOcarina_SetPlaybackSong(OCARINA_SONG_SCARECROW_SPAWN + 1, 1);
} else if (msgCtx->ocarinaAction == OCARINA_ACTION_MEMORY_GAME) {
msgCtx->msgMode = MSGMODE_MEMORY_GAME_START;
// "Musical Round Start / Musical Round Start / Musical Round Start / Musical Round Start -> "
@@ -1739,11 +1739,19 @@ void Message_ContinueTextbox(GlobalContext* globalCtx, u16 textId) {
void Message_StartOcarina(GlobalContext* globalCtx, u16 ocarinaActionId) {
static u16 sOcarinaSongFlagsMap[] = {
- (1 << OCARINA_SONG_MINUET), (1 << OCARINA_SONG_BOLERO), (1 << OCARINA_SONG_SERENADE),
- (1 << OCARINA_SONG_REQUIEM), (1 << OCARINA_SONG_NOCTURNE), (1 << OCARINA_SONG_PRELUDE),
- (1 << OCARINA_SONG_LULLABY), (1 << OCARINA_SONG_EPONAS), (1 << OCARINA_SONG_SARIAS),
- (1 << OCARINA_SONG_SUNS), (1 << OCARINA_SONG_TIME), (1 << OCARINA_SONG_STORMS),
- (1 << OCARINA_SONG_SCARECROW),
+ (1 << OCARINA_SONG_MINUET),
+ (1 << OCARINA_SONG_BOLERO),
+ (1 << OCARINA_SONG_SERENADE),
+ (1 << OCARINA_SONG_REQUIEM),
+ (1 << OCARINA_SONG_NOCTURNE),
+ (1 << OCARINA_SONG_PRELUDE),
+ (1 << OCARINA_SONG_LULLABY),
+ (1 << OCARINA_SONG_EPONAS),
+ (1 << OCARINA_SONG_SARIAS),
+ (1 << OCARINA_SONG_SUNS),
+ (1 << OCARINA_SONG_TIME),
+ (1 << OCARINA_SONG_STORMS),
+ (1 << OCARINA_SONG_SCARECROW_SPAWN),
};
MessageContext* msgCtx = &globalCtx->msgCtx;
s32 textId;
@@ -1754,24 +1762,24 @@ void Message_StartOcarina(GlobalContext* globalCtx, u16 ocarinaActionId) {
osSyncPrintf(VT_FGCOL(GREEN));
- for (i = sOcarinaSongBitFlags = 0; i < (QUEST_KOKIRI_EMERALD - QUEST_SONG_MINUET); i++) {
+ for (i = sOcarinaSongBitFlags = 0; i <= (QUEST_SONG_STORMS - QUEST_SONG_MINUET); i++) {
if (CHECK_QUEST_ITEM(QUEST_SONG_MINUET + i)) {
osSyncPrintf("ocarina_check_bit[%d]=%x\n", i, sOcarinaSongFlagsMap[i]);
sOcarinaSongBitFlags |= sOcarinaSongFlagsMap[i];
}
}
if (gSaveContext.scarecrowSpawnSongSet) {
- sOcarinaSongBitFlags |= (1 << OCARINA_SONG_SCARECROW);
+ sOcarinaSongBitFlags |= (1 << OCARINA_SONG_SCARECROW_SPAWN);
}
osSyncPrintf("ocarina_bit = %x\n", sOcarinaSongBitFlags);
osSyncPrintf(VT_RST);
sHasSunsSong = CHECK_QUEST_ITEM(QUEST_SONG_SUN);
- msgCtx->ocarinaStaff = Audio_OcaGetRecordingStaff();
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos = 0;
- sOcarinaNoteBufLen = 0;
+ msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff();
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
+ sOcarinaButtonIndexBufLen = 0;
Message_ResetOcarinaNoteState();
- sLastPlayedSong = msgCtx->unk_E3F2 = msgCtx->lastOcaNoteIdx = 0xFF;
+ sLastPlayedSong = msgCtx->unk_E3F2 = msgCtx->lastOcarinaButtonIndex = 0xFF;
// "Ocarina Number"
osSyncPrintf(VT_FGCOL(RED) "☆☆☆☆☆ オカリナ番号=%d(%d) ☆☆☆☆☆\n" VT_RST, ocarinaActionId, 2);
@@ -1790,7 +1798,7 @@ void Message_StartOcarina(GlobalContext* globalCtx, u16 ocarinaActionId) {
Audio_PlaySoundGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
- if (ocarinaActionId == OCARINA_ACTION_SCARECROW_PLAYBACK) {
+ if (ocarinaActionId == OCARINA_ACTION_SCARECROW_SPAWN_PLAYBACK) {
Message_OpenText(globalCtx, 0x86F); // Ocarina
textId = ocarinaActionId + 0x86E;
} else {
@@ -1850,15 +1858,15 @@ void Message_StartOcarina(GlobalContext* globalCtx, u16 ocarinaActionId) {
} else if (ocarinaActionId == OCARINA_ACTION_SCARECROW_LONG_PLAYBACK) {
// "?????Recording Playback / Recording Playback / Recording Playback / Recording Playback -> "
osSyncPrintf("?????録音再生 録音再生 録音再生 録音再生 -> ");
- Audio_OcaSetInstrument(1);
- Audio_OcaSetInstrument(1);
- msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
- sOcarinaNoteBufPos = sOcarinaNoteBufLen = 0;
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos;
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ sOcarinaButtonIndexBufPos = sOcarinaButtonIndexBufLen = 0;
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos;
Message_ResetOcarinaNoteState();
msgCtx->stateTimer = 3;
msgCtx->msgMode = MSGMODE_SCARECROW_LONG_PLAYBACK;
- Audio_OcaSetSongPlayback(OCARINA_SONG_SCARECROW_LONG + 1, 1);
+ AudioOcarina_SetPlaybackSong(OCARINA_SONG_SCARECROW_LONG + 1, 1);
gSaveContext.unk_13EA = 0;
Interface_ChangeAlpha(1);
}
@@ -1970,24 +1978,24 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
static void* sOcarinaNoteTextures[] = {
gOcarinaATex, gOcarinaCDownTex, gOcarinaCRightTex, gOcarinaCLeftTex, gOcarinaCUpTex,
};
- static s16 sOcarinaNoteAPrimColors[][3] = {
+ static s16 sOcarinaButtonAPrimColors[][3] = {
{ 80, 255, 150 },
{ 100, 255, 200 },
};
- static s16 sOcarinaNoteAEnvColors[][3] = {
+ static s16 sOcarinaButtonAEnvColors[][3] = {
{ 10, 10, 10 },
{ 50, 255, 50 },
};
- static s16 sOcarinaNoteCPrimColors[][3] = {
+ static s16 sOcarinaButtonCPrimColors[][3] = {
{ 255, 255, 50 },
{ 255, 255, 180 },
};
- static s16 sOcarinaNoteCEnvColors[][3] = {
+ static s16 sOcarinaButtonCEnvColors[][3] = {
{ 10, 10, 10 },
{ 110, 110, 50 },
};
static s16 sOcarinaNoteFlashTimer = 12;
- static s16 sOcarinaNoteFlashColorIdx = 1;
+ static s16 sOcarinaNoteFlashColorIndex = 1;
static s16 sOcarinaSongFanfares[] = {
NA_BGM_OCA_MINUET, NA_BGM_OCA_BOLERO, NA_BGM_OCA_SERENADE, NA_BGM_OCA_REQUIEM,
NA_BGM_OCA_NOCTURNE, NA_BGM_OCA_LIGHT, NA_BGM_OCA_SARIA, NA_BGM_OCA_EPONA,
@@ -1995,7 +2003,7 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
};
InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;
MessageContext* msgCtx = &globalCtx->msgCtx;
- u16 noteBufPos;
+ u16 buttonIndexPos;
Player* player = GET_PLAYER(globalCtx);
s32 pad;
Gfx* gfx = *p;
@@ -2051,37 +2059,37 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
case MSGMODE_OCARINA_STARTING:
case MSGMODE_SONG_DEMONSTRATION_STARTING:
case MSGMODE_SONG_PLAYBACK_STARTING:
- Audio_OcaSetInstrument(1);
- msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos = 0;
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_01;
Message_ResetOcarinaNoteState();
sOcarinaNoteFlashTimer = 3;
- sOcarinaNoteFlashColorIdx = 1;
+ sOcarinaNoteFlashColorIndex = 1;
if (msgCtx->msgMode == MSGMODE_OCARINA_STARTING) {
if (msgCtx->ocarinaAction == OCARINA_ACTION_UNK_0 ||
msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY ||
- msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_RECORDING ||
+ msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_RECORDING ||
msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOWARP ||
msgCtx->ocarinaAction >= OCARINA_ACTION_CHECK_SARIA) {
if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY ||
msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOWARP) {
- func_800ECC04(sOcarinaSongBitFlags + 0xC000);
+ AudioOcarina_Start(sOcarinaSongBitFlags + 0xC000);
} else {
// "On Stage Performance"
osSyncPrintf("台上演奏\n");
- func_800ECC04(sOcarinaSongBitFlags);
+ AudioOcarina_Start(sOcarinaSongBitFlags);
}
} else {
osSyncPrintf("Na_StartOcarinaSinglePlayCheck2( message->ocarina_no );\n");
- func_800ECC04((1 << msgCtx->ocarinaAction) + 0x8000);
+ AudioOcarina_Start((1 << msgCtx->ocarinaAction) + 0x8000);
}
msgCtx->msgMode = MSGMODE_OCARINA_PLAYING;
} else if (msgCtx->msgMode == MSGMODE_SONG_DEMONSTRATION_STARTING) {
msgCtx->stateTimer = 20;
msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION_SELECT_INSTRUMENT;
} else {
- func_800ECC04((1 << (msgCtx->ocarinaAction + 0x11)) + 0x8000);
+ AudioOcarina_Start((1 << (msgCtx->ocarinaAction + 0x11)) + 0x8000);
// "Performance Check"
osSyncPrintf("演奏チェック=%d\n", msgCtx->ocarinaAction - OCARINA_ACTION_PLAYBACK_MINUET);
msgCtx->msgMode = MSGMODE_SONG_PLAYBACK;
@@ -2092,30 +2100,30 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
}
break;
case MSGMODE_OCARINA_PLAYING:
- msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
if (msgCtx->ocarinaStaff->pos) {
- osSyncPrintf("locate=%d onpu_pt=%d\n", msgCtx->ocarinaStaff->pos, sOcarinaNoteBufPos);
- if (msgCtx->ocarinaStaff->pos == 1 && sOcarinaNoteBufPos == 8) {
- sOcarinaNoteBufPos = 0;
+ osSyncPrintf("locate=%d onpu_pt=%d\n", msgCtx->ocarinaStaff->pos, sOcarinaButtonIndexBufPos);
+ if (msgCtx->ocarinaStaff->pos == 1 && sOcarinaButtonIndexBufPos == 8) {
+ sOcarinaButtonIndexBufPos = 0;
}
- if (sOcarinaNoteBufPos == msgCtx->ocarinaStaff->pos - 1) {
- msgCtx->lastOcaNoteIdx = sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos - 1] =
- msgCtx->ocarinaStaff->noteIdx;
- sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
- sOcarinaNoteBufPos++;
+ if (sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ msgCtx->lastOcarinaButtonIndex = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] =
+ msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
}
}
msgCtx->lastPlayedSong = msgCtx->ocarinaStaff->state;
if (msgCtx->ocarinaStaff->state < OCARINA_SONG_MEMORY_GAME) {
- if (msgCtx->ocarinaStaff->state == OCARINA_SONG_SCARECROW ||
+ if (msgCtx->ocarinaStaff->state == OCARINA_SONG_SCARECROW_SPAWN ||
CHECK_QUEST_ITEM(QUEST_SONG_MINUET + gOcarinaSongItemMap[msgCtx->ocarinaStaff->state])) {
sLastPlayedSong = msgCtx->unk_E3F2 = msgCtx->lastPlayedSong = msgCtx->ocarinaStaff->state;
msgCtx->msgMode = MSGMODE_OCARINA_CORRECT_PLAYBACK;
msgCtx->stateTimer = 20;
if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOWARP) {
if (msgCtx->ocarinaStaff->state < OCARINA_SONG_SARIAS ||
- msgCtx->ocarinaStaff->state == OCARINA_SONG_SCARECROW) {
- Audio_OcaSetInstrument(0);
+ msgCtx->ocarinaStaff->state == OCARINA_SONG_SCARECROW_SPAWN) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
Audio_PlaySoundGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultReverb);
@@ -2132,9 +2140,9 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
&gSfxDefaultReverb);
Interface_ChangeAlpha(1);
}
- } else if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_SCARECROW) {
- if (msgCtx->ocarinaStaff->state < OCARINA_SONG_SCARECROW) {
- Audio_OcaSetInstrument(0);
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_SCARECROW_SPAWN) {
+ if (msgCtx->ocarinaStaff->state < OCARINA_SONG_SCARECROW_SPAWN) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
Audio_PlaySoundGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultReverb);
@@ -2169,19 +2177,19 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
}
Interface_ChangeAlpha(1);
} else {
- Audio_OcaSetInstrument(0);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
Audio_PlaySoundGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
msgCtx->msgMode = MSGMODE_OCARINA_STARTING;
}
} else if (msgCtx->ocarinaStaff->state == 0xFF) {
- Audio_OcaSetInstrument(0);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
Audio_PlaySoundGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
msgCtx->stateTimer = 10;
msgCtx->msgMode = MSGMODE_OCARINA_FAIL;
} else if (CHECK_BTN_ALL(globalCtx->state.input[0].press.button, BTN_B)) {
- Audio_OcaSetInstrument(0);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_04;
Message_CloseTextbox(globalCtx);
}
@@ -2192,120 +2200,120 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
break;
case MSGMODE_OCARINA_CORRECT_PLAYBACK:
case MSGMODE_SONG_PLAYBACK_SUCCESS:
- case MSGMODE_SCARECROW_RECORDING_DONE:
- r = ABS(sOcarinaNoteAPrimR - sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][0]) /
+ case MSGMODE_SCARECROW_SPAWN_RECORDING_DONE:
+ r = ABS(sOcarinaButtonAPrimR - sOcarinaButtonAPrimColors[sOcarinaNoteFlashColorIndex][0]) /
sOcarinaNoteFlashTimer;
- g = ABS(sOcarinaNoteAPrimG - sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][1]) /
+ g = ABS(sOcarinaButtonAPrimG - sOcarinaButtonAPrimColors[sOcarinaNoteFlashColorIndex][1]) /
sOcarinaNoteFlashTimer;
- b = ABS(sOcarinaNoteAPrimB - sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][2]) /
+ b = ABS(sOcarinaButtonAPrimB - sOcarinaButtonAPrimColors[sOcarinaNoteFlashColorIndex][2]) /
sOcarinaNoteFlashTimer;
- if (sOcarinaNoteAPrimR >= sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][0]) {
- sOcarinaNoteAPrimR -= r;
+ if (sOcarinaButtonAPrimR >= sOcarinaButtonAPrimColors[sOcarinaNoteFlashColorIndex][0]) {
+ sOcarinaButtonAPrimR -= r;
} else {
- sOcarinaNoteAPrimR += r;
+ sOcarinaButtonAPrimR += r;
}
- if (sOcarinaNoteAPrimG >= sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][1]) {
- sOcarinaNoteAPrimG -= g;
+ if (sOcarinaButtonAPrimG >= sOcarinaButtonAPrimColors[sOcarinaNoteFlashColorIndex][1]) {
+ sOcarinaButtonAPrimG -= g;
} else {
- sOcarinaNoteAPrimG += g;
+ sOcarinaButtonAPrimG += g;
}
- if (sOcarinaNoteAPrimB >= sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][2]) {
- sOcarinaNoteAPrimB -= b;
+ if (sOcarinaButtonAPrimB >= sOcarinaButtonAPrimColors[sOcarinaNoteFlashColorIndex][2]) {
+ sOcarinaButtonAPrimB -= b;
} else {
- sOcarinaNoteAPrimB += b;
+ sOcarinaButtonAPrimB += b;
}
- r = ABS(sOcarinaNoteAEnvR - sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][0]) /
+ r = ABS(sOcarinaButtonAEnvR - sOcarinaButtonAEnvColors[sOcarinaNoteFlashColorIndex][0]) /
sOcarinaNoteFlashTimer;
- g = ABS(sOcarinaNoteAEnvG - sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][1]) /
+ g = ABS(sOcarinaButtonAEnvG - sOcarinaButtonAEnvColors[sOcarinaNoteFlashColorIndex][1]) /
sOcarinaNoteFlashTimer;
- b = ABS(sOcarinaNoteAEnvB - sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][2]) /
+ b = ABS(sOcarinaButtonAEnvB - sOcarinaButtonAEnvColors[sOcarinaNoteFlashColorIndex][2]) /
sOcarinaNoteFlashTimer;
- if (sOcarinaNoteCEnvR >= sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][0]) {
- sOcarinaNoteAEnvR -= r;
+ if (sOcarinaButtonCEnvR >= sOcarinaButtonAEnvColors[sOcarinaNoteFlashColorIndex][0]) {
+ sOcarinaButtonAEnvR -= r;
} else {
- sOcarinaNoteAEnvR += r;
+ sOcarinaButtonAEnvR += r;
}
- if (sOcarinaNoteCEnvG >= sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][1]) {
- sOcarinaNoteAEnvG -= g;
+ if (sOcarinaButtonCEnvG >= sOcarinaButtonAEnvColors[sOcarinaNoteFlashColorIndex][1]) {
+ sOcarinaButtonAEnvG -= g;
} else {
- sOcarinaNoteAEnvG += g;
+ sOcarinaButtonAEnvG += g;
}
- if (sOcarinaNoteCEnvB >= sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][2]) {
- sOcarinaNoteAEnvB -= b;
+ if (sOcarinaButtonCEnvB >= sOcarinaButtonAEnvColors[sOcarinaNoteFlashColorIndex][2]) {
+ sOcarinaButtonAEnvB -= b;
} else {
- sOcarinaNoteAEnvB += b;
+ sOcarinaButtonAEnvB += b;
}
- r = ABS(sOcarinaNoteCPrimR - sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][0]) /
+ r = ABS(sOcarinaButtonCPrimR - sOcarinaButtonCPrimColors[sOcarinaNoteFlashColorIndex][0]) /
sOcarinaNoteFlashTimer;
- g = ABS(sOcarinaNoteCPrimG - sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][1]) /
+ g = ABS(sOcarinaButtonCPrimG - sOcarinaButtonCPrimColors[sOcarinaNoteFlashColorIndex][1]) /
sOcarinaNoteFlashTimer;
- b = ABS(sOcarinaNoteCPrimB - sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][2]) /
+ b = ABS(sOcarinaButtonCPrimB - sOcarinaButtonCPrimColors[sOcarinaNoteFlashColorIndex][2]) /
sOcarinaNoteFlashTimer;
- if (sOcarinaNoteCPrimR >= sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][0]) {
- sOcarinaNoteCPrimR -= r;
+ if (sOcarinaButtonCPrimR >= sOcarinaButtonCPrimColors[sOcarinaNoteFlashColorIndex][0]) {
+ sOcarinaButtonCPrimR -= r;
} else {
- sOcarinaNoteCPrimR += r;
+ sOcarinaButtonCPrimR += r;
}
- if (sOcarinaNoteCPrimG >= sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][1]) {
- sOcarinaNoteCPrimG -= g;
+ if (sOcarinaButtonCPrimG >= sOcarinaButtonCPrimColors[sOcarinaNoteFlashColorIndex][1]) {
+ sOcarinaButtonCPrimG -= g;
} else {
- sOcarinaNoteCPrimG += g;
+ sOcarinaButtonCPrimG += g;
}
- if (sOcarinaNoteCPrimB >= sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][2]) {
- sOcarinaNoteCPrimB -= b;
+ if (sOcarinaButtonCPrimB >= sOcarinaButtonCPrimColors[sOcarinaNoteFlashColorIndex][2]) {
+ sOcarinaButtonCPrimB -= b;
} else {
- sOcarinaNoteCPrimB += b;
+ sOcarinaButtonCPrimB += b;
}
- r = ABS(sOcarinaNoteCEnvR - sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][0]) /
+ r = ABS(sOcarinaButtonCEnvR - sOcarinaButtonCEnvColors[sOcarinaNoteFlashColorIndex][0]) /
sOcarinaNoteFlashTimer;
- g = ABS(sOcarinaNoteCEnvG - sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][1]) /
+ g = ABS(sOcarinaButtonCEnvG - sOcarinaButtonCEnvColors[sOcarinaNoteFlashColorIndex][1]) /
sOcarinaNoteFlashTimer;
- b = ABS(sOcarinaNoteCEnvB - sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][2]) /
+ b = ABS(sOcarinaButtonCEnvB - sOcarinaButtonCEnvColors[sOcarinaNoteFlashColorIndex][2]) /
sOcarinaNoteFlashTimer;
- if (sOcarinaNoteCEnvR >= sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][0]) {
- sOcarinaNoteCEnvR -= r;
+ if (sOcarinaButtonCEnvR >= sOcarinaButtonCEnvColors[sOcarinaNoteFlashColorIndex][0]) {
+ sOcarinaButtonCEnvR -= r;
} else {
- sOcarinaNoteCEnvR += r;
+ sOcarinaButtonCEnvR += r;
}
- if (sOcarinaNoteCEnvG >= sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][1]) {
- sOcarinaNoteCEnvG -= g;
+ if (sOcarinaButtonCEnvG >= sOcarinaButtonCEnvColors[sOcarinaNoteFlashColorIndex][1]) {
+ sOcarinaButtonCEnvG -= g;
} else {
- sOcarinaNoteCEnvG += g;
+ sOcarinaButtonCEnvG += g;
}
- if (sOcarinaNoteCEnvB >= sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][2]) {
- sOcarinaNoteCEnvB -= b;
+ if (sOcarinaButtonCEnvB >= sOcarinaButtonCEnvColors[sOcarinaNoteFlashColorIndex][2]) {
+ sOcarinaButtonCEnvB -= b;
} else {
- sOcarinaNoteCEnvB += b;
+ sOcarinaButtonCEnvB += b;
}
sOcarinaNoteFlashTimer--;
if (sOcarinaNoteFlashTimer == 0) {
- sOcarinaNoteAPrimR = sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][0];
- sOcarinaNoteAPrimG = sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][1];
- sOcarinaNoteAPrimB = sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][2];
- sOcarinaNoteAEnvR = sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][0];
- sOcarinaNoteAEnvG = sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][1];
- sOcarinaNoteAEnvB = sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][2];
- sOcarinaNoteCPrimR = sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][0];
- sOcarinaNoteCPrimG = sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][1];
- sOcarinaNoteCPrimB = sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][2];
- sOcarinaNoteCEnvR = sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][0];
- sOcarinaNoteCEnvG = sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][1];
- sOcarinaNoteCEnvB = sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][2];
+ sOcarinaButtonAPrimR = sOcarinaButtonAPrimColors[sOcarinaNoteFlashColorIndex][0];
+ sOcarinaButtonAPrimG = sOcarinaButtonAPrimColors[sOcarinaNoteFlashColorIndex][1];
+ sOcarinaButtonAPrimB = sOcarinaButtonAPrimColors[sOcarinaNoteFlashColorIndex][2];
+ sOcarinaButtonAEnvR = sOcarinaButtonAEnvColors[sOcarinaNoteFlashColorIndex][0];
+ sOcarinaButtonAEnvG = sOcarinaButtonAEnvColors[sOcarinaNoteFlashColorIndex][1];
+ sOcarinaButtonAEnvB = sOcarinaButtonAEnvColors[sOcarinaNoteFlashColorIndex][2];
+ sOcarinaButtonCPrimR = sOcarinaButtonCPrimColors[sOcarinaNoteFlashColorIndex][0];
+ sOcarinaButtonCPrimG = sOcarinaButtonCPrimColors[sOcarinaNoteFlashColorIndex][1];
+ sOcarinaButtonCPrimB = sOcarinaButtonCPrimColors[sOcarinaNoteFlashColorIndex][2];
+ sOcarinaButtonCEnvR = sOcarinaButtonCEnvColors[sOcarinaNoteFlashColorIndex][0];
+ sOcarinaButtonCEnvG = sOcarinaButtonCEnvColors[sOcarinaNoteFlashColorIndex][1];
+ sOcarinaButtonCEnvB = sOcarinaButtonCEnvColors[sOcarinaNoteFlashColorIndex][2];
sOcarinaNoteFlashTimer = 3;
- sOcarinaNoteFlashColorIdx ^= 1;
+ sOcarinaNoteFlashColorIndex ^= 1;
}
msgCtx->stateTimer--;
if (msgCtx->stateTimer == 0) {
- Audio_OcaSetInstrument(0);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
if (msgCtx->msgMode == MSGMODE_OCARINA_CORRECT_PLAYBACK) {
// "Correct Example Performance"
osSyncPrintf("正解模範演奏=%x\n", msgCtx->lastPlayedSong);
@@ -2336,7 +2344,7 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
case MSGMODE_OCARINA_FAIL_NO_TEXT:
msgCtx->stateTimer--;
if (msgCtx->stateTimer == 0) {
- R_OCARINA_NOTES_YPOS_OFFSET = 1;
+ R_OCARINA_BUTTONS_YPOS_OFFSET = 1;
if (msgCtx->msgMode == MSGMODE_SONG_PLAYBACK_FAIL) {
// "kokokokokoko"
osSyncPrintf("ここここここ\n");
@@ -2353,14 +2361,15 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
case MSGMODE_OCARINA_NOTES_DROP:
case MSGMODE_SONG_PLAYBACK_NOTES_DROP:
for (i = 0; i < 5; i++) {
- R_OCARINA_NOTES_YPOS(i) += R_OCARINA_NOTES_YPOS_OFFSET;
- }
- R_OCARINA_NOTES_YPOS_OFFSET += R_OCARINA_NOTES_YPOS_OFFSET;
- if (R_OCARINA_NOTES_YPOS_OFFSET >= 550) {
- sOcarinaNoteBuf[0] = OCARINA_NOTE_INVALID;
- sOcarinaNotesAlphaValues[0] = sOcarinaNotesAlphaValues[1] = sOcarinaNotesAlphaValues[2] =
- sOcarinaNotesAlphaValues[3] = sOcarinaNotesAlphaValues[4] = sOcarinaNotesAlphaValues[5] =
- sOcarinaNotesAlphaValues[6] = sOcarinaNotesAlphaValues[7] = sOcarinaNotesAlphaValues[8] = 0;
+ R_OCARINA_BUTTONS_YPOS(i) += R_OCARINA_BUTTONS_YPOS_OFFSET;
+ }
+ R_OCARINA_BUTTONS_YPOS_OFFSET += R_OCARINA_BUTTONS_YPOS_OFFSET;
+ if (R_OCARINA_BUTTONS_YPOS_OFFSET >= 550) {
+ sOcarinaButtonIndexBuf[0] = OCARINA_BTN_INVALID;
+ sOcarinaButtonAlphaValues[0] = sOcarinaButtonAlphaValues[1] = sOcarinaButtonAlphaValues[2] =
+ sOcarinaButtonAlphaValues[3] = sOcarinaButtonAlphaValues[4] = sOcarinaButtonAlphaValues[5] =
+ sOcarinaButtonAlphaValues[6] = sOcarinaButtonAlphaValues[7] = sOcarinaButtonAlphaValues[8] =
+ 0;
if (msgCtx->msgMode == MSGMODE_SONG_PLAYBACK_NOTES_DROP) {
msgCtx->msgMode = MSGMODE_OCARINA_AWAIT_INPUT;
} else {
@@ -2371,7 +2380,7 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
case MSGMODE_SONG_PLAYED:
msgCtx->stateTimer--;
if (msgCtx->stateTimer == 0) {
- Audio_OcaSetInstrument(0);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
osSyncPrintf(VT_FGCOL(GREEN));
osSyncPrintf("Na_StopOcarinaMode();\n");
osSyncPrintf("Na_StopOcarinaMode();\n");
@@ -2379,8 +2388,8 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
osSyncPrintf(VT_RST);
Message_Decode(globalCtx);
msgCtx->msgMode = MSGMODE_SETUP_DISPLAY_SONG_PLAYED;
- msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos = 0;
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
Message_ResetOcarinaNoteState();
if (msgCtx->lastPlayedSong >= OCARINA_SONG_SARIAS &&
msgCtx->lastPlayedSong < OCARINA_SONG_MEMORY_GAME) {
@@ -2393,10 +2402,10 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
break;
case MSGMODE_SETUP_DISPLAY_SONG_PLAYED:
Message_DrawText(globalCtx, &gfx);
- Audio_OcaSetInstrument(1);
- Audio_OcaSetInstrument(1);
- Audio_OcaSetSongPlayback(msgCtx->lastPlayedSong + 1, 1);
- if (msgCtx->lastPlayedSong != OCARINA_SONG_SCARECROW) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_SetPlaybackSong(msgCtx->lastPlayedSong + 1, 1);
+ if (msgCtx->lastPlayedSong != OCARINA_SONG_SCARECROW_SPAWN) {
Audio_PlayFanfare(sOcarinaSongFanfares[msgCtx->lastPlayedSong]);
Audio_SetSoundBanksMute(0x20);
}
@@ -2407,7 +2416,7 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOWARP) {
msgCtx->ocarinaAction = OCARINA_ACTION_CHECK_NOWARP_DONE;
}
- sOcarinaNoteBufPos = 0;
+ sOcarinaButtonIndexBufPos = 0;
msgCtx->msgMode = MSGMODE_DISPLAY_SONG_PLAYED;
break;
case MSGMODE_SONG_DEMONSTRATION_SELECT_INSTRUMENT:
@@ -2416,20 +2425,20 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
// "ocarina_no=%d Song Chosen=%d"
osSyncPrintf("ocarina_no=%d 選曲=%d\n", msgCtx->ocarinaAction, 0x16);
if (msgCtx->ocarinaAction < OCARINA_ACTION_TEACH_SARIA) {
- Audio_OcaSetInstrument(4);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_HARP);
} else if (msgCtx->ocarinaAction == OCARINA_ACTION_TEACH_EPONA) {
- Audio_OcaSetInstrument(2);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_MALON);
} else if (msgCtx->ocarinaAction == OCARINA_ACTION_TEACH_LULLABY) {
- Audio_OcaSetInstrument(3);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_WHISTLE);
} else if (msgCtx->ocarinaAction == OCARINA_ACTION_TEACH_STORMS) {
- Audio_OcaSetInstrument(5);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_GRIND_ORGAN);
} else {
- Audio_OcaSetInstrument(1);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
}
// "Example Performance"
osSyncPrintf("模範演奏=%x\n", msgCtx->ocarinaAction - OCARINA_ACTION_TEACH_MINUET);
- Audio_OcaSetSongPlayback(msgCtx->ocarinaAction - OCARINA_ACTION_TEACH_MINUET + 1, 2);
- sOcarinaNoteBufPos = 0;
+ AudioOcarina_SetPlaybackSong(msgCtx->ocarinaAction - OCARINA_ACTION_TEACH_MINUET + 1, 2);
+ sOcarinaButtonIndexBufPos = 0;
msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION;
}
Message_DrawText(globalCtx, &gfx);
@@ -2449,7 +2458,7 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
Message_DrawText(globalCtx, &gfx);
break;
case MSGMODE_SONG_PLAYED_ACT_BEGIN:
- Audio_OcaSetInstrument(0);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
Message_ResetOcarinaNoteState();
msgCtx->msgMode = MSGMODE_SONG_PLAYED_ACT;
msgCtx->stateTimer = 2;
@@ -2481,7 +2490,7 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
msgCtx->ocarinaAction);
if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE) {
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_01;
- if (msgCtx->lastPlayedSong == OCARINA_SONG_SCARECROW) {
+ if (msgCtx->lastPlayedSong == OCARINA_SONG_SCARECROW_SPAWN) {
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_0B;
}
} else if (msgCtx->ocarinaAction >= OCARINA_ACTION_CHECK_MINUET) {
@@ -2510,7 +2519,7 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
break;
case MSGMODE_DISPLAY_SONG_PLAYED:
case MSGMODE_SONG_DEMONSTRATION:
- msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
if (msgCtx->ocarinaStaff->state == 0) {
if (msgCtx->msgMode == MSGMODE_DISPLAY_SONG_PLAYED) {
msgCtx->msgMode = MSGMODE_DISPLAY_SONG_PLAYED_TEXT_BEGIN;
@@ -2518,27 +2527,27 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION_DONE;
}
osSyncPrintf("onpu_buff[%d]=%x\n", msgCtx->ocarinaStaff->pos,
- sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos]);
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos]);
} else {
- if (sOcarinaNoteBufPos != 0 && msgCtx->ocarinaStaff->pos == 1) {
- sOcarinaNoteBufPos = 0;
+ if (sOcarinaButtonIndexBufPos != 0 && msgCtx->ocarinaStaff->pos == 1) {
+ sOcarinaButtonIndexBufPos = 0;
}
- if (msgCtx->ocarinaStaff->pos && sOcarinaNoteBufPos == msgCtx->ocarinaStaff->pos - 1) {
- msgCtx->lastOcaNoteIdx = sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos - 1] =
- msgCtx->ocarinaStaff->noteIdx;
- sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
- sOcarinaNoteBufPos++;
+ if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ msgCtx->lastOcarinaButtonIndex = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] =
+ msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
}
}
case MSGMODE_SONG_DEMONSTRATION_DONE:
Message_DrawText(globalCtx, &gfx);
break;
case MSGMODE_SONG_PLAYBACK:
- msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaNoteBufPos == msgCtx->ocarinaStaff->pos - 1) {
- sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->noteIdx;
- sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
- sOcarinaNoteBufPos++;
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
}
if (msgCtx->ocarinaStaff->state < OCARINA_SONG_MEMORY_GAME) {
osSyncPrintf("M_OCARINA20 : ocarina_no=%x status=%x\n", msgCtx->ocarinaAction,
@@ -2570,46 +2579,49 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
case MSGMODE_SCARECROW_LONG_RECORDING_START:
// "Scarecrow Recording Initialization"
osSyncPrintf("案山子録音 初期化\n");
- Audio_OcaSetRecordingState(1);
- Audio_OcaSetInstrument(1);
- msgCtx->ocarinaStaff = Audio_OcaGetRecordingStaff();
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos = 0;
- sOcarinaNoteBufLen = 0;
+ AudioOcarina_SetRecordingState(OCARINA_RECORD_SCARECROW_LONG);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff();
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
+ sOcarinaButtonIndexBufLen = 0;
Message_ResetOcarinaNoteState();
msgCtx->msgMode = MSGMODE_SCARECROW_LONG_RECORDING_ONGOING;
Message_DrawText(globalCtx, &gfx);
break;
case MSGMODE_SCARECROW_LONG_RECORDING_ONGOING:
- msgCtx->ocarinaStaff = Audio_OcaGetRecordingStaff();
- osSyncPrintf("\nonpu_pt=%d, locate=%d", sOcarinaNoteBufPos, msgCtx->ocarinaStaff->pos);
- if (msgCtx->ocarinaStaff->pos && sOcarinaNoteBufPos == msgCtx->ocarinaStaff->pos - 1) {
- if (sOcarinaNoteBufLen >= 8) {
- for (noteBufPos = sOcarinaNoteBufLen - 8, i = 0; i < 8; i++, noteBufPos++) {
- sOcarinaNoteBuf[noteBufPos] = sOcarinaNoteBuf[noteBufPos + 1];
+ msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff();
+ osSyncPrintf("\nonpu_pt=%d, locate=%d", sOcarinaButtonIndexBufPos, msgCtx->ocarinaStaff->pos);
+ if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ if (sOcarinaButtonIndexBufLen >= 8) {
+ for (buttonIndexPos = sOcarinaButtonIndexBufLen - 8, i = 0; i < 8; i++, buttonIndexPos++) {
+ sOcarinaButtonIndexBuf[buttonIndexPos] = sOcarinaButtonIndexBuf[buttonIndexPos + 1];
}
- sOcarinaNoteBufLen--;
+ sOcarinaButtonIndexBufLen--;
}
// "Button Entered"
- osSyncPrintf(" 入力ボタン【%d】=%d", sOcarinaNoteBufLen, msgCtx->ocarinaStaff->noteIdx);
- msgCtx->lastOcaNoteIdx = sOcarinaNoteBuf[sOcarinaNoteBufLen] = msgCtx->ocarinaStaff->noteIdx;
- sOcarinaNoteBufLen++;
- sOcarinaNoteBuf[sOcarinaNoteBufLen] = OCARINA_NOTE_INVALID;
- sOcarinaNoteBufPos++;
+ osSyncPrintf(" 入力ボタン【%d】=%d", sOcarinaButtonIndexBufLen,
+ msgCtx->ocarinaStaff->buttonIndex);
+ msgCtx->lastOcarinaButtonIndex = sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] =
+ msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBufLen++;
+ sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
if (msgCtx->ocarinaStaff->pos == 8) {
- sOcarinaNoteBufPos = 0;
+ sOcarinaButtonIndexBufPos = 0;
}
}
- if (msgCtx->ocarinaStaff->state == 0 || CHECK_BTN_ALL(globalCtx->state.input[0].press.button, BTN_B)) {
- if (sOcarinaNoteBufLen != 0) {
+ if (msgCtx->ocarinaStaff->state == OCARINA_RECORD_OFF ||
+ CHECK_BTN_ALL(globalCtx->state.input[0].press.button, BTN_B)) {
+ if (sOcarinaButtonIndexBufLen != 0) {
// "Recording complete!!!!!!!!!"
osSyncPrintf("録音終了!!!!!!!!! message->info->status=%d \n",
msgCtx->ocarinaStaff->state);
- gSaveContext.scarecrowCustomSongSet = true;
+ gSaveContext.scarecrowLongSongSet = true;
}
Audio_PlaySoundGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
osSyncPrintf("aaaaaaaaaaaaaa\n");
- Audio_OcaSetRecordingState(0);
+ AudioOcarina_SetRecordingState(OCARINA_RECORD_OFF);
msgCtx->stateTimer = 10;
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_04;
Message_CloseTextbox(globalCtx);
@@ -2617,10 +2629,10 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
osSyncPrintf("録音終了!!!!!!!!!録音終了\n");
osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("\n====================================================================\n");
- MemCpy(gSaveContext.scarecrowCustomSong, gScarecrowCustomSongPtr,
- sizeof(gSaveContext.scarecrowCustomSong));
- for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowCustomSong); i++) {
- osSyncPrintf("%d, ", gSaveContext.scarecrowCustomSong[i]);
+ MemCpy(gSaveContext.scarecrowLongSong, gScarecrowLongSongPtr,
+ sizeof(gSaveContext.scarecrowLongSong));
+ for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowLongSong); i++) {
+ osSyncPrintf("%d, ", gSaveContext.scarecrowLongSong[i]);
}
osSyncPrintf(VT_RST);
osSyncPrintf("\n====================================================================\n");
@@ -2628,28 +2640,28 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
Message_DrawText(globalCtx, &gfx);
break;
case MSGMODE_SCARECROW_LONG_PLAYBACK:
- case MSGMODE_SCARECROW_PLAYBACK:
- msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaNoteBufPos == msgCtx->ocarinaStaff->pos - 1) {
- if (sOcarinaNoteBufLen >= 8) {
- for (noteBufPos = sOcarinaNoteBufLen - 8, i = 0; i < 8; i++, noteBufPos++) {
- sOcarinaNoteBuf[noteBufPos] = sOcarinaNoteBuf[noteBufPos + 1];
+ case MSGMODE_SCARECROW_SPAWN_PLAYBACK:
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ if (sOcarinaButtonIndexBufLen >= 8) {
+ for (buttonIndexPos = sOcarinaButtonIndexBufLen - 8, i = 0; i < 8; i++, buttonIndexPos++) {
+ sOcarinaButtonIndexBuf[buttonIndexPos] = sOcarinaButtonIndexBuf[buttonIndexPos + 1];
}
- sOcarinaNoteBufLen--;
+ sOcarinaButtonIndexBufLen--;
}
- sOcarinaNoteBuf[sOcarinaNoteBufLen] = msgCtx->ocarinaStaff->noteIdx;
- sOcarinaNoteBufLen++;
- sOcarinaNoteBuf[sOcarinaNoteBufLen] = OCARINA_NOTE_INVALID;
- sOcarinaNoteBufPos++;
+ sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBufLen++;
+ sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
if (msgCtx->ocarinaStaff->pos == 8) {
- sOcarinaNoteBufLen = sOcarinaNoteBufPos = 0;
+ sOcarinaButtonIndexBufLen = sOcarinaButtonIndexBufPos = 0;
}
}
osSyncPrintf("status=%d (%d)\n", msgCtx->ocarinaStaff->state, 0);
if (msgCtx->stateTimer == 0) {
if (msgCtx->ocarinaStaff->state == 0) {
osSyncPrintf("bbbbbbbbbbb\n");
- Audio_OcaSetInstrument(0);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_0F;
Message_CloseTextbox(globalCtx);
}
@@ -2657,25 +2669,26 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
msgCtx->stateTimer--;
}
break;
- case MSGMODE_SCARECROW_RECORDING_START:
- Audio_OcaSetRecordingState(2);
- Audio_OcaSetInstrument(1);
- msgCtx->msgMode = MSGMODE_SCARECROW_RECORDING_ONGOING;
+ case MSGMODE_SCARECROW_SPAWN_RECORDING_START:
+ AudioOcarina_SetRecordingState(OCARINA_RECORD_SCARECROW_SPAWN);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING;
Message_DrawText(globalCtx, &gfx);
break;
- case MSGMODE_SCARECROW_RECORDING_ONGOING:
- msgCtx->ocarinaStaff = Audio_OcaGetRecordingStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaNoteBufPos == msgCtx->ocarinaStaff->pos - 1) {
- msgCtx->lastOcaNoteIdx = sOcarinaNoteBuf[sOcarinaNoteBufPos] = msgCtx->ocarinaStaff->noteIdx;
- sOcarinaNoteBufPos++;
- sOcarinaNoteBuf[sOcarinaNoteBufPos] = OCARINA_NOTE_INVALID;
- }
- if (msgCtx->ocarinaStaff->state == 0) {
+ case MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING:
+ msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff();
+ if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ msgCtx->lastOcarinaButtonIndex = sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufPos] =
+ msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBufPos++;
+ sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufPos] = OCARINA_BTN_INVALID;
+ }
+ if (msgCtx->ocarinaStaff->state == OCARINA_RECORD_OFF) {
// "8 Note Recording OK!"
osSyncPrintf("8音録音OK!\n");
msgCtx->stateTimer = 20;
gSaveContext.scarecrowSpawnSongSet = true;
- msgCtx->msgMode = MSGMODE_SCARECROW_RECORDING_DONE;
+ msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_DONE;
Audio_PlaySoundGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
osSyncPrintf(VT_FGCOL(YELLOW));
@@ -2687,32 +2700,32 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
}
osSyncPrintf(VT_RST);
osSyncPrintf("\n====================================================================\n");
- } else if (msgCtx->ocarinaStaff->state == 0xFF ||
+ } else if (msgCtx->ocarinaStaff->state == OCARINA_RECORD_REJECTED ||
CHECK_BTN_ALL(globalCtx->state.input[0].press.button, BTN_B)) {
// "Played an existing song!!!"
osSyncPrintf("すでに存在する曲吹いた!!! \n");
- Audio_OcaSetRecordingState(0);
+ AudioOcarina_SetRecordingState(OCARINA_RECORD_OFF);
Audio_PlaySoundGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
Message_CloseTextbox(globalCtx);
- msgCtx->msgMode = MSGMODE_SCARECROW_RECORDING_FAILED;
+ msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED;
}
Message_DrawText(globalCtx, &gfx);
break;
- case MSGMODE_SCARECROW_RECORDING_FAILED:
+ case MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED:
osSyncPrintf("cccccccccccc\n");
- Audio_OcaSetInstrument(0);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
Message_StartTextbox(globalCtx, 0x40AD, NULL); // Bonooru doesn't remember your song
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_04;
break;
case MSGMODE_MEMORY_GAME_START:
- Audio_OcaSetInstrument(1);
- Audio_OcaSetInstrument(6);
- Audio_OcaMemoryGameStart(gSaveContext.ocarinaGameRoundNum);
- msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos = 0;
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_FLUTE);
+ AudioOcarina_MemoryGameInit(gSaveContext.ocarinaGameRoundNum);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
Message_ResetOcarinaNoteState();
- Audio_OcaSetSongPlayback(OCARINA_SONG_MEMORY_GAME + 1, 1);
+ AudioOcarina_SetPlaybackSong(OCARINA_SONG_MEMORY_GAME + 1, 1);
msgCtx->msgMode = MSGMODE_MEMORY_GAME_LEFT_SKULLKID_PLAYING;
msgCtx->stateTimer = 2;
break;
@@ -2720,11 +2733,11 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
case MSGMODE_MEMORY_GAME_RIGHT_SKULLKID_PLAYING:
Audio_PlaySoundGeneral(NA_SE_SY_METRONOME_LV - SFX_FLAG, &gSfxDefaultPos, 4,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
- msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaNoteBufPos == msgCtx->ocarinaStaff->pos - 1) {
- sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->noteIdx;
- sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
- sOcarinaNoteBufPos++;
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
}
if (msgCtx->stateTimer == 0) {
if (msgCtx->ocarinaStaff->state == 0) {
@@ -2744,31 +2757,31 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
break;
case MSGMODE_MEMORY_GAME_LEFT_SKULLKID_WAIT:
case MSGMODE_MEMORY_GAME_RIGHT_SKULLKID_WAIT:
- msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaNoteBufPos == msgCtx->ocarinaStaff->pos - 1) {
- sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->noteIdx;
- sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
- sOcarinaNoteBufPos++;
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
}
break;
case MSGMODE_MEMORY_GAME_PLAYER_PLAYING:
Audio_PlaySoundGeneral(NA_SE_SY_METRONOME_LV - SFX_FLAG, &gSfxDefaultPos, 4,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
- msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaNoteBufPos == msgCtx->ocarinaStaff->pos - 1) {
- sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->noteIdx;
- sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
- sOcarinaNoteBufPos++;
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
}
if (msgCtx->ocarinaStaff->state == 0xFF) {
// "Musical round failed!!!!!!!!!"
osSyncPrintf("輪唱失敗!!!!!!!!!\n");
- Audio_OcaSetInstrument(0);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
Audio_PlaySoundGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
msgCtx->stateTimer = 10;
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_03;
- } else if (msgCtx->ocarinaStaff->state == 0xD) {
+ } else if (msgCtx->ocarinaStaff->state == OCARINA_SONG_MEMORY_GAME) {
// "Musical round succeeded!!!!!!!!!"
osSyncPrintf("輪唱成功!!!!!!!!!\n");
Audio_PlaySoundGeneral(NA_SE_SY_GET_ITEM, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
@@ -2779,19 +2792,19 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
Message_DrawText(globalCtx, &gfx);
break;
case MSGMODE_MEMORY_GAME_ROUND_SUCCESS:
- msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaNoteBufPos == msgCtx->ocarinaStaff->pos - 1) {
- sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->noteIdx;
- sOcarinaNoteBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
- sOcarinaNoteBufPos++;
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
}
msgCtx->stateTimer--;
if (msgCtx->stateTimer == 0) {
- if (Audio_OcaMemoryGameGenNote() != 1) {
+ if (AudioOcarina_MemoryGameNextNote() != 1) {
Audio_PlaySoundGeneral(NA_SE_SY_METRONOME, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
- msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos = 0;
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
Message_ResetOcarinaNoteState();
msgCtx->msgMode = MSGMODE_MEMORY_GAME_START_NEXT_ROUND;
} else {
@@ -2802,26 +2815,26 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
break;
case MSGMODE_MEMORY_GAME_START_NEXT_ROUND:
if (!Audio_IsSfxPlaying(NA_SE_SY_METRONOME)) {
- msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos = 0;
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
Message_ResetOcarinaNoteState();
- Audio_OcaSetSongPlayback(OCARINA_SONG_MEMORY_GAME + 1, 1);
+ AudioOcarina_SetPlaybackSong(OCARINA_SONG_MEMORY_GAME + 1, 1);
}
break;
case MSGMODE_FROGS_START:
- Audio_OcaSetInstrument(1);
- msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos = 0;
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_01;
Message_ResetOcarinaNoteState();
- func_800ECC04(sOcarinaSongBitFlags + 0xC000);
+ AudioOcarina_Start(sOcarinaSongBitFlags + 0xC000);
msgCtx->msgMode = MSGMODE_FROGS_PLAYING;
break;
case MSGMODE_FROGS_PLAYING:
- msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaNoteBufPos == msgCtx->ocarinaStaff->pos - 1) {
- msgCtx->lastOcaNoteIdx = msgCtx->ocarinaStaff->noteIdx;
- msgCtx->ocarinaStaff->pos = sOcarinaNoteBufPos = 0;
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ msgCtx->lastOcarinaButtonIndex = msgCtx->ocarinaStaff->buttonIndex;
+ msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
Message_ResetOcarinaNoteState();
msgCtx->msgMode = MSGMODE_FROGS_WAITING;
}
@@ -2873,56 +2886,58 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
if (msgCtx->msgMode == MSGMODE_SONG_PLAYBACK) {
g = msgCtx->ocarinaAction - OCARINA_ACTION_PLAYBACK_MINUET;
- r = gOcarinaSongNotes[g].len;
- for (notePosX = R_OCARINA_NOTES_XPOS, i = 0; i < r; i++, notePosX += R_OCARINA_NOTES_XPOS_OFFSET) {
+ r = gOcarinaSongButtons[g].numButtons;
+ for (notePosX = R_OCARINA_BUTTONS_XPOS, i = 0; i < r; i++, notePosX += R_OCARINA_BUTTONS_XPOS_OFFSET) {
gDPPipeSync(gfx++);
gDPSetPrimColor(gfx++, 0, 0, 150, 150, 150, 150);
gDPSetEnvColor(gfx++, 10, 10, 10, 0);
- gDPLoadTextureBlock(gfx++, sOcarinaNoteTextures[gOcarinaSongNotes[g].notesIdx[i]], G_IM_FMT_IA,
- G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,
- G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gDPLoadTextureBlock(gfx++, sOcarinaNoteTextures[gOcarinaSongButtons[g].buttonsIndex[i]],
+ G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
- gSPTextureRectangle(
- gfx++, notePosX << 2, R_OCARINA_NOTES_YPOS(gOcarinaSongNotes[g].notesIdx[i]) << 2,
- (notePosX + 16) << 2, (R_OCARINA_NOTES_YPOS(gOcarinaSongNotes[g].notesIdx[i]) + 16) << 2,
- G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ gSPTextureRectangle(gfx++, notePosX << 2,
+ R_OCARINA_BUTTONS_YPOS(gOcarinaSongButtons[g].buttonsIndex[i]) << 2,
+ (notePosX + 16) << 2,
+ (R_OCARINA_BUTTONS_YPOS(gOcarinaSongButtons[g].buttonsIndex[i]) + 16) << 2,
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
}
}
if (msgCtx->msgMode != MSGMODE_SCARECROW_LONG_RECORDING_START &&
msgCtx->msgMode != MSGMODE_MEMORY_GAME_START) {
- for (notePosX = R_OCARINA_NOTES_XPOS, i = 0; i < 8; i++, notePosX += R_OCARINA_NOTES_XPOS_OFFSET) {
- if (sOcarinaNoteBuf[i] == OCARINA_NOTE_INVALID) {
+ for (notePosX = R_OCARINA_BUTTONS_XPOS, i = 0; i < 8; i++, notePosX += R_OCARINA_BUTTONS_XPOS_OFFSET) {
+ if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_INVALID) {
break;
}
if (1) {}
- if (sOcarinaNotesAlphaValues[i] != 255) {
- sOcarinaNotesAlphaValues[i] += VREG(50);
- if (sOcarinaNotesAlphaValues[i] >= 255) {
- sOcarinaNotesAlphaValues[i] = 255;
+ if (sOcarinaButtonAlphaValues[i] != 255) {
+ sOcarinaButtonAlphaValues[i] += VREG(50);
+ if (sOcarinaButtonAlphaValues[i] >= 255) {
+ sOcarinaButtonAlphaValues[i] = 255;
}
}
gDPPipeSync(gfx++);
- if (sOcarinaNoteBuf[i] == OCARINA_NOTE_A) {
- gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteAPrimR, sOcarinaNoteAPrimG, sOcarinaNoteAPrimB,
- sOcarinaNotesAlphaValues[i]);
- gDPSetEnvColor(gfx++, sOcarinaNoteAEnvR, sOcarinaNoteAEnvG, sOcarinaNoteAEnvB, 0);
+ if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_A) {
+ gDPSetPrimColor(gfx++, 0, 0, sOcarinaButtonAPrimR, sOcarinaButtonAPrimG, sOcarinaButtonAPrimB,
+ sOcarinaButtonAlphaValues[i]);
+ gDPSetEnvColor(gfx++, sOcarinaButtonAEnvR, sOcarinaButtonAEnvG, sOcarinaButtonAEnvB, 0);
} else {
- gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteCPrimR, sOcarinaNoteCPrimG, sOcarinaNoteCPrimB,
- sOcarinaNotesAlphaValues[i]);
- gDPSetEnvColor(gfx++, sOcarinaNoteCEnvR, sOcarinaNoteCEnvG, sOcarinaNoteCEnvB, 0);
+ gDPSetPrimColor(gfx++, 0, 0, sOcarinaButtonCPrimR, sOcarinaButtonCPrimG, sOcarinaButtonCPrimB,
+ sOcarinaButtonAlphaValues[i]);
+ gDPSetEnvColor(gfx++, sOcarinaButtonCEnvR, sOcarinaButtonCEnvG, sOcarinaButtonCEnvB, 0);
}
- gDPLoadTextureBlock(gfx++, sOcarinaNoteTextures[sOcarinaNoteBuf[i]], G_IM_FMT_IA, G_IM_SIZ_8b, 16,
- 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
- G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gDPLoadTextureBlock(gfx++, sOcarinaNoteTextures[sOcarinaButtonIndexBuf[i]], G_IM_FMT_IA,
+ G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
- gSPTextureRectangle(gfx++, notePosX << 2, R_OCARINA_NOTES_YPOS(sOcarinaNoteBuf[i]) << 2,
- (notePosX + 16) << 2, (R_OCARINA_NOTES_YPOS(sOcarinaNoteBuf[i]) + 16) << 2,
- G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ gSPTextureRectangle(gfx++, notePosX << 2, R_OCARINA_BUTTONS_YPOS(sOcarinaButtonIndexBuf[i]) << 2,
+ (notePosX + 16) << 2,
+ (R_OCARINA_BUTTONS_YPOS(sOcarinaButtonIndexBuf[i]) + 16) << 2, G_TX_RENDERTILE,
+ 0, 0, 1 << 10, 1 << 10);
}
}
}
@@ -2989,7 +3004,7 @@ void Message_Draw(GlobalContext* globalCtx) {
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_message_PAL.c", 3554);
- watchVar = gSaveContext.scarecrowCustomSongSet;
+ watchVar = gSaveContext.scarecrowLongSongSet;
Message_DrawDebugVariableChanged(&watchVar, globalCtx->state.gfxCtx);
if (BREG(0) != 0 && globalCtx->msgCtx.textId != 0) {
plusOne = Graph_GfxPlusOne(polyOpaP = POLY_OPA_DISP);
@@ -3316,7 +3331,7 @@ void Message_Update(GlobalContext* globalCtx) {
case MSGMODE_PAUSED:
break;
default:
- msgCtx->lastOcaNoteIdx = OCARINA_NOTE_INVALID;
+ msgCtx->lastOcarinaButtonIndex = OCARINA_BTN_INVALID;
break;
}
}
diff --git a/src/code/z_sram.c b/src/code/z_sram.c
index 1277b06ea..21664a53d 100644
--- a/src/code/z_sram.c
+++ b/src/code/z_sram.c
@@ -47,8 +47,8 @@ typedef struct {
/* 0x0F18 */ char unk_F18[0x04];
/* 0x0F1C */ u32 worldMapAreaData; // "area_arrival"
/* 0x0F20 */ char unk_F20[0x4];
- /* 0x0F24 */ u8 scarecrowCustomSongSet;
- /* 0x0F25 */ u8 scarecrowCustomSong[0x360];
+ /* 0x0F24 */ u8 scarecrowLongSongSet;
+ /* 0x0F25 */ u8 scarecrowLongSong[0x360];
/* 0x1285 */ char unk_1285[0x24];
/* 0x12A9 */ u8 scarecrowSpawnSongSet;
/* 0x12AA */ u8 scarecrowSpawnSong[0x80];
@@ -393,14 +393,14 @@ void Sram_OpenSave(SramContext* sramCtx) {
gSaveContext.health = 0x30;
}
- if (gSaveContext.scarecrowCustomSongSet) {
+ if (gSaveContext.scarecrowLongSongSet) {
osSyncPrintf(VT_FGCOL(BLUE));
osSyncPrintf("\n====================================================================\n");
- MemCpy(gScarecrowCustomSongPtr, gSaveContext.scarecrowCustomSong, sizeof(gSaveContext.scarecrowCustomSong));
+ MemCpy(gScarecrowLongSongPtr, gSaveContext.scarecrowLongSong, sizeof(gSaveContext.scarecrowLongSong));
- ptr = (u8*)gScarecrowCustomSongPtr;
- for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowCustomSong); i++, ptr++) {
+ ptr = (u8*)gScarecrowLongSongPtr;
+ for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowLongSong); i++, ptr++) {
osSyncPrintf("%d, ", *ptr);
}