Decomp, update AudioOcarina (code_800EC960.c) (#6941)

This commit is contained in:
djevangelia
2026-07-19 18:54:43 +02:00
committed by GitHub
parent 81009e9dce
commit 29d4ff4205
24 changed files with 1357 additions and 1095 deletions
+13 -13
View File
@@ -2050,20 +2050,20 @@ void AudioSeq_SkipForwardSequence(SequencePlayer* seqPlayer);
void AudioSeq_ResetSequencePlayer(SequencePlayer* seqPlayer);
void AudioSeq_InitSequencePlayerChannels(s32 playerIdx);
void AudioSeq_InitSequencePlayers(void);
void func_800ECC04(u16);
void AudioOcarina_Start(u16);
void AudioOcarina_SetInstrument(u8);
void Audio_OcaSetSongPlayback(s8 songIdxPlusOne, s8 playbackState);
void Audio_OcaSetRecordingState(u8);
OcarinaStaff* Audio_OcaGetRecordingStaff(void);
OcarinaStaff* Audio_OcaGetPlayingStaff(void);
OcarinaStaff* Audio_OcaGetDisplayingStaff(void);
void Audio_OcaMemoryGameStart(u8 minigameIdx);
s32 Audio_OcaMemoryGameGenNote(void);
void func_800EE824(void);
void AudioOcarina_SetPlaybackSong(s8 songIdxPlusOne, s8 playbackState);
void AudioOcarina_SetRecordingState(u8);
OcarinaStaff* AudioOcarina_GetRecordingStaff(void);
OcarinaStaff* AudioOcarina_GetPlayingStaff(void);
OcarinaStaff* AudioOcarina_GetPlaybackStaff(void);
void AudioOcarina_MemoryGameInit(u8 minigameIdx);
s32 AudioOcarina_MemoryGameNextNote(void);
void AudioOcarina_PlayLongScarecrowSong(void);
void AudioDebug_Draw(GfxPrint* printer);
void AudioDebug_ScrPrt(const s8* str, u16 num);
void func_800F3054(void);
void Audio_SetSoundProperties(u8 bankId, u8 entryIdx, u8 channelIdx);
void Audio_Update(void);
void Audio_SetSfxProperties(u8 bankId, u8 entryIdx, u8 channelIdx);
void func_800F3F3C(u8);
void func_800F4010(Vec3f* pos, u16 sfxId, f32);
void Audio_PlaySoundRandom(Vec3f* pos, u16 baseSfxId, u8 randLim);
@@ -2132,7 +2132,7 @@ void Audio_Init();
void Audio_InitSound();
void func_800F7170(void);
void func_800F71BC(s32 arg0);
void Audio_SetSoundBanksMute(u16 muteMask);
void Audio_SetSfxBanksMute(u16 muteMask);
void Audio_QueueSeqCmdMute(u8 channelIdx);
void Audio_ClearBGMMute(u8 channelIdx);
void Audio_PlaySoundGeneral(u16 sfxId, Vec3f* pos, u8 token, f32* freqScale, f32* a4, s8* reverbAdd);
@@ -2143,7 +2143,7 @@ void Audio_StopSfxByBank(u8 bankId);
void func_800F8884(u8, Vec3f*);
void Audio_StopSfxByPosAndBank(u8, Vec3f*);
void Audio_StopSfxByPos(Vec3f*);
void func_800F9280(u8 playerIdx, u8 seqId, u8 arg2, u16 fadeTimer);
void Audio_StartSequence(u8 playerIdx, u8 seqId, u8 arg2, u16 fadeTimer);
void Audio_QueueSeqCmd(u32 bgmID);
void Audio_QueuePreviewSeqCmd(u16 seqId);
void Audio_StopSfxByPosAndId(Vec3f* pos, u16 sfxId);
+3 -2
View File
@@ -150,9 +150,10 @@ extern "C"
extern u8 gUsedChannelsPerBank[4][7];
extern u8 gMorphaTransposeTable[16];
extern u8* gFrogsSongPtr;
extern OcarinaNote* gScarecrowCustomSongPtr;
extern OcarinaNote* gScarecrowLongSongPtr;
extern u8* gScarecrowSpawnSongPtr;
extern OcarinaSongInfo gOcarinaSongNotes[];
extern OcarinaNote sOcarinaSongNotes[OCARINA_SONG_MAX][20];
extern OcarinaSongButtons gOcarinaSongButtons[OCARINA_SONG_MAX];
extern SoundParams* gSoundParams[7];
extern char D_80133390[];
extern char D_80133398[];
+5 -5
View File
@@ -439,7 +439,7 @@ typedef struct {
char unk_150[0x10];
} SkyboxContext;
typedef enum {
typedef enum OcarinaSongId {
/* 0 */ OCARINA_SONG_MINUET,
/* 1 */ OCARINA_SONG_BOLERO,
/* 2 */ OCARINA_SONG_SERENADE,
@@ -452,7 +452,7 @@ typedef enum {
/* 9 */ OCARINA_SONG_SUNS,
/* 10 */ OCARINA_SONG_TIME,
/* 11 */ OCARINA_SONG_STORMS,
/* 12 */ OCARINA_SONG_SCARECROW,
/* 12 */ OCARINA_SONG_SCARECROW_SPAWN,
/* 13 */ OCARINA_SONG_MEMORY_GAME,
/* 14 */ OCARINA_SONG_MAX,
/* 14 */ OCARINA_SONG_SCARECROW_LONG = OCARINA_SONG_MAX // anything larger than 13 is considered the long scarecrow's song
@@ -509,14 +509,14 @@ typedef enum {
/* 0x2F */ OCARINA_ACTION_FROGS,
/* 0x30 */ OCARINA_ACTION_CHECK_NOWARP, // Check for any of sarias - storms
/* 0x31 */ OCARINA_ACTION_CHECK_NOWARP_DONE
} OcarinaSongActionIDs;
} OcarinaSongActionId;
typedef enum {
typedef enum OcarinaMode {
/* 0x00 */ OCARINA_MODE_00,
/* 0x01 */ OCARINA_MODE_01,
/* 0x02 */ OCARINA_MODE_02,
/* 0x03 */ OCARINA_MODE_03,
/* 0x04 */ OCARINA_MODE_04,
/* 0x04 */ OCARINA_MODE_04, // Stop playing
/* 0x05 */ OCARINA_MODE_05,
/* 0x06 */ OCARINA_MODE_06,
/* 0x07 */ OCARINA_MODE_07,
+65 -25
View File
@@ -1085,35 +1085,46 @@ typedef struct {
u16 params;
} SoundParams;
typedef struct {
/* 0x0000 */ u8 noteIdx;
/* 0x0001 */ u8 unk_01;
/* 0x0002 */ u16 unk_02;
/* 0x0004 */ u8 volume;
/* 0x0005 */ u8 vibrato;
/* 0x0006 */ s8 tone;
/* 0x0007 */ u8 semitone;
/**
* semitone Note:
* Flag for resolving whether (pitch = OCARINA_PITCH_BFLAT4)
* gets mapped to either C_RIGHT and C_LEFT
*
* This is required as C_RIGHT and C_LEFT are the only notes
* that map to two semitones apart (OCARINA_PITCH_A4 and OCARINA_PITCH_B4)
* 0x40 - BTN_Z is pressed to lower note by a semitone
* 0x80 - BTN_R is pressed to raise note by a semitone
*/
typedef struct OcarinaNote {
/* 0x0 */ u8 pitch; // number of semitones above middle C
/* 0x2 */ u16 length; // number of frames the note is sustained
/* 0x4 */ u8 volume;
/* 0x5 */ u8 vibrato;
/* 0x6 */ s8 bend; // frequency multiplicative offset from the pitch
/* 0x7 */ u8 bFlat4Flag; // See note above
} OcarinaNote; // size = 0x8
typedef struct {
u8 len;
u8 notesIdx[8];
} OcarinaSongInfo;
typedef struct OcarinaSongButtons {
/* 0x0 */ u8 numButtons;
/* 0x1 */ u8 buttonsIndex[8];
} OcarinaSongButtons; // size = 0x9
typedef struct {
u8 noteIdx;
u8 state; // original name: "status"
u8 pos; // original name: "locate"
} OcarinaStaff;
typedef struct OcarinaStaff {
/* 0x0 */ u8 buttonIndex;
/* 0x1 */ u8 state; // multi-use. Playing: used as songIndex. Playback: used as repeat count of song. Recording: used as OcarinaRecordingState. "status"
/* 0x2 */ u8 pos; // "locate"
} OcarinaStaff; // size = 0x3
typedef enum {
/* 0 */ OCARINA_NOTE_D4,
/* 1 */ OCARINA_NOTE_F4,
/* 2 */ OCARINA_NOTE_A4,
/* 3 */ OCARINA_NOTE_B4,
/* 4 */ OCARINA_NOTE_D5,
/* -1 */ OCARINA_NOTE_INVALID = 0xFF
} OcarinaNoteIdx;
typedef enum OcarinaButtonIndex {
/* 0 */ OCARINA_BTN_A,
/* 1 */ OCARINA_BTN_C_DOWN,
/* 2 */ OCARINA_BTN_C_RIGHT,
/* 3 */ OCARINA_BTN_C_LEFT,
/* 4 */ OCARINA_BTN_C_UP,
/* 5 */ OCARINA_BTN_C_RIGHT_OR_C_LEFT, // Special case for bFlat4: Interface/Overlap between C_RIGHT and C_LEFT
/* 0xFF */ OCARINA_BTN_INVALID = 0xFF
} OcarinaButtonIndex;
typedef enum OcarinaInstrumentId {
/* 0 */ OCARINA_INSTRUMENT_OFF,
@@ -1128,6 +1139,35 @@ typedef enum OcarinaInstrumentId {
/* 8 */ OCARINA_INSTRUMENT_DEFAULT_COPY2 = OCARINA_INSTRUMENT_MAX + 1 // Unused but present in Sequence 0 table
} OcarinaInstrumentId;
typedef enum OcarinaRecordingState {
/* 0 */ OCARINA_RECORD_OFF,
/* 1 */ OCARINA_RECORD_SCARECROW_LONG,
/* 2 */ OCARINA_RECORD_SCARECROW_SPAWN,
/* 0xFF */ OCARINA_RECORD_REJECTED = 0xFF
} OcarinaRecordingState;
// Uses scientific pitch notation relative to middle C
// https://en.wikipedia.org/wiki/Scientific_pitch_notation
typedef enum OcarinaPitch {
/* 0x0 */ OCARINA_PITCH_C4,
/* 0x1 */ OCARINA_PITCH_DFLAT4,
/* 0x2 */ OCARINA_PITCH_D4,
/* 0x3 */ OCARINA_PITCH_EFLAT4,
/* 0x4 */ OCARINA_PITCH_E4,
/* 0x5 */ OCARINA_PITCH_F4,
/* 0x6 */ OCARINA_PITCH_GFLAT4,
/* 0x7 */ OCARINA_PITCH_G4,
/* 0x8 */ OCARINA_PITCH_AFLAT4,
/* 0x9 */ OCARINA_PITCH_A4,
/* 0xA */ OCARINA_PITCH_BFLAT4,
/* 0xB */ OCARINA_PITCH_B4,
/* 0xC */ OCARINA_PITCH_C5,
/* 0xD */ OCARINA_PITCH_DFLAT5,
/* 0xE */ OCARINA_PITCH_D5,
/* 0xF */ OCARINA_PITCH_EFLAT5,
/* 0xFF */ OCARINA_PITCH_NONE = 0xFF
} OcarinaPitch;
typedef struct {
char* seqData;
int32_t seqDataSize;
+2 -2
View File
@@ -69,7 +69,7 @@ static void PauseWarp_Execute() {
}
static void ActivateWarp(PauseContext* pauseCtx, int song) {
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
Interface_SetDoAction(gPlayState, DO_ACTION_NONE);
pauseCtx->state = 0x12;
WREG(2) = -6240;
@@ -77,7 +77,7 @@ static void ActivateWarp(PauseContext* pauseCtx, int song) {
pauseCtx->unk_1E4 = 0;
int idx = song - QUEST_SONG_MINUET;
gPlayState->msgCtx.lastPlayedSong = ocarinaSongMap[idx];
Audio_SetSoundBanksMute(0x20);
Audio_SetSfxBanksMute(0x20);
Audio_PlayFanfare(songAudioMap[idx]);
Message_StartTextbox(gPlayState, songMessageMap[idx], NULL);
GET_PLAYER(gPlayState)->stateFlags1 |= PLAYER_STATE1_IN_CUTSCENE;
+1 -1
View File
@@ -239,7 +239,7 @@ void DrawPreviewButton(uint16_t sequenceId, std::string sfxKey, SeqType sequence
Audio_PlaySoundGeneral(sequenceId, &pos, 4, &freqScale, &freqScale, &reverbAdd);
} else if (sequenceType == SEQ_INSTRUMENT) {
AudioOcarina_SetInstrument(sequenceId - INSTRUMENT_OFFSET);
Audio_OcaSetSongPlayback(9, 1);
AudioOcarina_SetPlaybackSong(9, 1);
} else {
// TODO: Cant do both here, so have to click preview button twice
PreviewSequence(sequenceId);
+8 -10
View File
@@ -2591,23 +2591,21 @@ void Logic::InitSaveContext() {
mSaveContext->worldMapAreaData = 0;
mSaveContext->scarecrowLongSongSet = 0;
for (int i = 0; i < ARRAY_COUNT(mSaveContext->scarecrowLongSong); i++) {
mSaveContext->scarecrowLongSong[i].noteIdx = 0;
mSaveContext->scarecrowLongSong[i].unk_01 = 0;
mSaveContext->scarecrowLongSong[i].unk_02 = 0;
mSaveContext->scarecrowLongSong[i].pitch = 0;
mSaveContext->scarecrowLongSong[i].length = 0;
mSaveContext->scarecrowLongSong[i].volume = 0;
mSaveContext->scarecrowLongSong[i].vibrato = 0;
mSaveContext->scarecrowLongSong[i].tone = 0;
mSaveContext->scarecrowLongSong[i].semitone = 0;
mSaveContext->scarecrowLongSong[i].bend = 0;
mSaveContext->scarecrowLongSong[i].bFlat4Flag = 0;
}
mSaveContext->scarecrowSpawnSongSet = 0;
for (int i = 0; i < ARRAY_COUNT(mSaveContext->scarecrowSpawnSong); i++) {
mSaveContext->scarecrowSpawnSong[i].noteIdx = 0;
mSaveContext->scarecrowSpawnSong[i].unk_01 = 0;
mSaveContext->scarecrowSpawnSong[i].unk_02 = 0;
mSaveContext->scarecrowSpawnSong[i].pitch = 0;
mSaveContext->scarecrowSpawnSong[i].length = 0;
mSaveContext->scarecrowSpawnSong[i].volume = 0;
mSaveContext->scarecrowSpawnSong[i].vibrato = 0;
mSaveContext->scarecrowSpawnSong[i].tone = 0;
mSaveContext->scarecrowSpawnSong[i].semitone = 0;
mSaveContext->scarecrowSpawnSong[i].bend = 0;
mSaveContext->scarecrowSpawnSong[i].bFlat4Flag = 0;
}
mSaveContext->horseData.scene = SCENE_HYRULE_FIELD;
+44 -55
View File
@@ -772,23 +772,21 @@ void SaveManager::InitFileNormal() {
gSaveContext.worldMapAreaData = 0;
gSaveContext.scarecrowLongSongSet = 0;
for (int i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowLongSong); i++) {
gSaveContext.scarecrowLongSong[i].noteIdx = 0;
gSaveContext.scarecrowLongSong[i].unk_01 = 0;
gSaveContext.scarecrowLongSong[i].unk_02 = 0;
gSaveContext.scarecrowLongSong[i].pitch = 0;
gSaveContext.scarecrowLongSong[i].length = 0;
gSaveContext.scarecrowLongSong[i].volume = 0;
gSaveContext.scarecrowLongSong[i].vibrato = 0;
gSaveContext.scarecrowLongSong[i].tone = 0;
gSaveContext.scarecrowLongSong[i].semitone = 0;
gSaveContext.scarecrowLongSong[i].bend = 0;
gSaveContext.scarecrowLongSong[i].bFlat4Flag = 0;
}
gSaveContext.scarecrowSpawnSongSet = 0;
for (int i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowSpawnSong); i++) {
gSaveContext.scarecrowSpawnSong[i].noteIdx = 0;
gSaveContext.scarecrowSpawnSong[i].unk_01 = 0;
gSaveContext.scarecrowSpawnSong[i].unk_02 = 0;
gSaveContext.scarecrowSpawnSong[i].pitch = 0;
gSaveContext.scarecrowSpawnSong[i].length = 0;
gSaveContext.scarecrowSpawnSong[i].volume = 0;
gSaveContext.scarecrowSpawnSong[i].vibrato = 0;
gSaveContext.scarecrowSpawnSong[i].tone = 0;
gSaveContext.scarecrowSpawnSong[i].semitone = 0;
gSaveContext.scarecrowSpawnSong[i].bend = 0;
gSaveContext.scarecrowSpawnSong[i].bFlat4Flag = 0;
}
gSaveContext.horseData.scene = SCENE_HYRULE_FIELD;
@@ -1703,25 +1701,23 @@ void SaveManager::LoadBaseVersion2() {
SaveManager::Instance->LoadData("scarecrowCustomSongSet", gSaveContext.scarecrowLongSongSet);
SaveManager::Instance->LoadArray("scarecrowCustomSong", ARRAY_COUNT(gSaveContext.scarecrowLongSong), [](size_t i) {
SaveManager::Instance->LoadStruct("", [&i]() {
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowLongSong[i].noteIdx);
SaveManager::Instance->LoadData("unk_01", gSaveContext.scarecrowLongSong[i].unk_01);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowLongSong[i].unk_02);
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowLongSong[i].pitch);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowLongSong[i].length);
SaveManager::Instance->LoadData("volume", gSaveContext.scarecrowLongSong[i].volume);
SaveManager::Instance->LoadData("vibrato", gSaveContext.scarecrowLongSong[i].vibrato);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowLongSong[i].tone);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowLongSong[i].semitone);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowLongSong[i].bend);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowLongSong[i].bFlat4Flag);
});
});
SaveManager::Instance->LoadData("scarecrowSpawnSongSet", gSaveContext.scarecrowSpawnSongSet);
SaveManager::Instance->LoadArray("scarecrowSpawnSong", ARRAY_COUNT(gSaveContext.scarecrowSpawnSong), [](size_t i) {
SaveManager::Instance->LoadStruct("", [&i]() {
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowSpawnSong[i].noteIdx);
SaveManager::Instance->LoadData("unk_01", gSaveContext.scarecrowSpawnSong[i].unk_01);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowSpawnSong[i].unk_02);
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowSpawnSong[i].pitch);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowSpawnSong[i].length);
SaveManager::Instance->LoadData("volume", gSaveContext.scarecrowSpawnSong[i].volume);
SaveManager::Instance->LoadData("vibrato", gSaveContext.scarecrowSpawnSong[i].vibrato);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowSpawnSong[i].tone);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowSpawnSong[i].semitone);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowSpawnSong[i].bend);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowSpawnSong[i].bFlat4Flag);
});
});
SaveManager::Instance->LoadStruct("horseData", []() {
@@ -1759,13 +1755,12 @@ void SaveManager::LoadBaseVersion2() {
SaveManager::Instance->LoadArray(
"scarecrowLongSong", ARRAY_COUNT(gSaveContext.scarecrowLongSong), [](size_t i) {
SaveManager::Instance->LoadStruct("", [&i]() {
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowLongSong[i].noteIdx);
SaveManager::Instance->LoadData("unk_01", gSaveContext.scarecrowLongSong[i].unk_01);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowLongSong[i].unk_02);
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowLongSong[i].pitch);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowLongSong[i].length);
SaveManager::Instance->LoadData("volume", gSaveContext.scarecrowLongSong[i].volume);
SaveManager::Instance->LoadData("vibrato", gSaveContext.scarecrowLongSong[i].vibrato);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowLongSong[i].tone);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowLongSong[i].semitone);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowLongSong[i].bend);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowLongSong[i].bFlat4Flag);
});
});
}
@@ -1932,25 +1927,23 @@ void SaveManager::LoadBaseVersion3() {
SaveManager::Instance->LoadData("scarecrowLongSongSet", gSaveContext.scarecrowLongSongSet);
SaveManager::Instance->LoadArray("scarecrowLongSong", ARRAY_COUNT(gSaveContext.scarecrowLongSong), [](size_t i) {
SaveManager::Instance->LoadStruct("", [&i]() {
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowLongSong[i].noteIdx);
SaveManager::Instance->LoadData("unk_01", gSaveContext.scarecrowLongSong[i].unk_01);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowLongSong[i].unk_02);
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowLongSong[i].pitch);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowLongSong[i].length);
SaveManager::Instance->LoadData("volume", gSaveContext.scarecrowLongSong[i].volume);
SaveManager::Instance->LoadData("vibrato", gSaveContext.scarecrowLongSong[i].vibrato);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowLongSong[i].tone);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowLongSong[i].semitone);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowLongSong[i].bend);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowLongSong[i].bFlat4Flag);
});
});
SaveManager::Instance->LoadData("scarecrowSpawnSongSet", gSaveContext.scarecrowSpawnSongSet);
SaveManager::Instance->LoadArray("scarecrowSpawnSong", ARRAY_COUNT(gSaveContext.scarecrowSpawnSong), [](size_t i) {
SaveManager::Instance->LoadStruct("", [&i]() {
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowSpawnSong[i].noteIdx);
SaveManager::Instance->LoadData("unk_01", gSaveContext.scarecrowSpawnSong[i].unk_01);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowSpawnSong[i].unk_02);
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowSpawnSong[i].pitch);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowSpawnSong[i].length);
SaveManager::Instance->LoadData("volume", gSaveContext.scarecrowSpawnSong[i].volume);
SaveManager::Instance->LoadData("vibrato", gSaveContext.scarecrowSpawnSong[i].vibrato);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowSpawnSong[i].tone);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowSpawnSong[i].semitone);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowSpawnSong[i].bend);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowSpawnSong[i].bFlat4Flag);
});
});
SaveManager::Instance->LoadStruct("horseData", []() {
@@ -2107,25 +2100,23 @@ void SaveManager::LoadBaseVersion4() {
SaveManager::Instance->LoadData("scarecrowLongSongSet", gSaveContext.scarecrowLongSongSet);
SaveManager::Instance->LoadArray("scarecrowLongSong", ARRAY_COUNT(gSaveContext.scarecrowLongSong), [](size_t i) {
SaveManager::Instance->LoadStruct("", [&i]() {
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowLongSong[i].noteIdx);
SaveManager::Instance->LoadData("unk_01", gSaveContext.scarecrowLongSong[i].unk_01);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowLongSong[i].unk_02);
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowLongSong[i].pitch);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowLongSong[i].length);
SaveManager::Instance->LoadData("volume", gSaveContext.scarecrowLongSong[i].volume);
SaveManager::Instance->LoadData("vibrato", gSaveContext.scarecrowLongSong[i].vibrato);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowLongSong[i].tone);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowLongSong[i].semitone);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowLongSong[i].bend);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowLongSong[i].bFlat4Flag);
});
});
SaveManager::Instance->LoadData("scarecrowSpawnSongSet", gSaveContext.scarecrowSpawnSongSet);
SaveManager::Instance->LoadArray("scarecrowSpawnSong", ARRAY_COUNT(gSaveContext.scarecrowSpawnSong), [](size_t i) {
SaveManager::Instance->LoadStruct("", [&i]() {
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowSpawnSong[i].noteIdx);
SaveManager::Instance->LoadData("unk_01", gSaveContext.scarecrowSpawnSong[i].unk_01);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowSpawnSong[i].unk_02);
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowSpawnSong[i].pitch);
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowSpawnSong[i].length);
SaveManager::Instance->LoadData("volume", gSaveContext.scarecrowSpawnSong[i].volume);
SaveManager::Instance->LoadData("vibrato", gSaveContext.scarecrowSpawnSong[i].vibrato);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowSpawnSong[i].tone);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowSpawnSong[i].semitone);
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowSpawnSong[i].bend);
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowSpawnSong[i].bFlat4Flag);
});
});
SaveManager::Instance->LoadStruct("horseData", []() {
@@ -2279,25 +2270,23 @@ void SaveManager::SaveBase(SaveContext* saveContext, int sectionID, bool fullSav
SaveManager::Instance->SaveData("scarecrowLongSongSet", saveContext->scarecrowLongSongSet);
SaveManager::Instance->SaveArray("scarecrowLongSong", ARRAY_COUNT(saveContext->scarecrowLongSong), [&](size_t i) {
SaveManager::Instance->SaveStruct("", [&]() {
SaveManager::Instance->SaveData("noteIdx", saveContext->scarecrowLongSong[i].noteIdx);
SaveManager::Instance->SaveData("unk_01", saveContext->scarecrowLongSong[i].unk_01);
SaveManager::Instance->SaveData("unk_02", saveContext->scarecrowLongSong[i].unk_02);
SaveManager::Instance->SaveData("noteIdx", saveContext->scarecrowLongSong[i].pitch);
SaveManager::Instance->SaveData("unk_02", saveContext->scarecrowLongSong[i].length);
SaveManager::Instance->SaveData("volume", saveContext->scarecrowLongSong[i].volume);
SaveManager::Instance->SaveData("vibrato", saveContext->scarecrowLongSong[i].vibrato);
SaveManager::Instance->SaveData("tone", saveContext->scarecrowLongSong[i].tone);
SaveManager::Instance->SaveData("semitone", saveContext->scarecrowLongSong[i].semitone);
SaveManager::Instance->SaveData("tone", saveContext->scarecrowLongSong[i].bend);
SaveManager::Instance->SaveData("semitone", saveContext->scarecrowLongSong[i].bFlat4Flag);
});
});
SaveManager::Instance->SaveData("scarecrowSpawnSongSet", saveContext->scarecrowSpawnSongSet);
SaveManager::Instance->SaveArray("scarecrowSpawnSong", ARRAY_COUNT(saveContext->scarecrowSpawnSong), [&](size_t i) {
SaveManager::Instance->SaveStruct("", [&]() {
SaveManager::Instance->SaveData("noteIdx", saveContext->scarecrowSpawnSong[i].noteIdx);
SaveManager::Instance->SaveData("unk_01", saveContext->scarecrowSpawnSong[i].unk_01);
SaveManager::Instance->SaveData("unk_02", saveContext->scarecrowSpawnSong[i].unk_02);
SaveManager::Instance->SaveData("noteIdx", saveContext->scarecrowSpawnSong[i].pitch);
SaveManager::Instance->SaveData("unk_02", saveContext->scarecrowSpawnSong[i].length);
SaveManager::Instance->SaveData("volume", saveContext->scarecrowSpawnSong[i].volume);
SaveManager::Instance->SaveData("vibrato", saveContext->scarecrowSpawnSong[i].vibrato);
SaveManager::Instance->SaveData("tone", saveContext->scarecrowSpawnSong[i].tone);
SaveManager::Instance->SaveData("semitone", saveContext->scarecrowSpawnSong[i].semitone);
SaveManager::Instance->SaveData("tone", saveContext->scarecrowSpawnSong[i].bend);
SaveManager::Instance->SaveData("semitone", saveContext->scarecrowSpawnSong[i].bFlat4Flag);
});
});
SaveManager::Instance->SaveStruct("horseData", [&]() {
+1 -1
View File
@@ -247,7 +247,7 @@ void func_800E5584(AudioCmd* cmd) {
AudioLoad_SyncLoadSeqParts(cmd->arg1, cmd->arg2);
return;
case 0x82:
// 16-bit seqId packed in opArgs bits 0-15. See func_800F9280().
// 16-bit seqId packed in opArgs bits 0-15. See Audio_StartSequence().
AudioLoad_SyncInitSeqPlayer(cmd->arg0, cmd->opArgs & 0xFFFF, 0);
func_800E59AC(cmd->arg0, cmd->data);
return;
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -97,7 +97,7 @@ u8 gAudioSfxSwapOff = 0;
u8 D_801333F8 = 0;
void Audio_SetSoundBanksMute(u16 muteMask) {
void Audio_SetSfxBanksMute(u16 muteMask) {
u8 bankId;
for (bankId = 0; bankId < ARRAY_COUNT(gSoundBanks); bankId++) {
@@ -527,7 +527,7 @@ void Audio_PlayActiveSounds(u8 bankId) {
break;
}
}
Audio_SetSoundProperties(bankId, entryIndex, sCurSfxPlayerChannelIdx);
Audio_SetSfxProperties(bankId, entryIndex, sCurSfxPlayerChannelIdx);
Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | ((sCurSfxPlayerChannelIdx & 0xFF) << 8), 1);
Audio_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | ((sCurSfxPlayerChannelIdx & 0xFF) << 8) | 4,
entry->sfxId & 0xFF);
@@ -543,7 +543,7 @@ void Audio_PlayActiveSounds(u8 bankId) {
} else if ((u8)channel->soundScriptIO[1] == 0xFF) {
Audio_RemoveSoundBankEntry(bankId, entryIndex);
} else if (entry->state == SFX_STATE_PLAYING_REFRESH) {
Audio_SetSoundProperties(bankId, entryIndex, sCurSfxPlayerChannelIdx);
Audio_SetSfxProperties(bankId, entryIndex, sCurSfxPlayerChannelIdx);
if (entry->sfxId & 0xC00) {
entry->state = SFX_STATE_PLAYING_1;
} else {
+7 -6
View File
@@ -36,7 +36,7 @@ u8 D_80133418 = 0;
#define Audio_SetVolScaleNow(playerIdx, volFadeTimer, volScale) \
Audio_ProcessSeqCmd(0x40000000 | ((u8)playerIdx << 24) | ((u8)volFadeTimer << 16) | ((u8)(volScale * 127.0f)));
void func_800F9280(u8 playerIdx, u8 seqId, u8 arg2, u16 fadeTimer) {
void Audio_StartSequence(u8 playerIdx, u8 seqId, u8 arg2, u16 fadeTimer) {
u8 i;
u16 dur;
u16 resolvedSeqId;
@@ -145,7 +145,7 @@ void Audio_ProcessSeqCmd(u32 cmd) {
seqArgs = (cmd & 0xFF00) >> 8;
fadeTimer = (cmd & 0xFF0000) >> 13;
if ((gActiveSeqs[playerIdx].isWaitingForFonts == 0) && (seqArgs < 0x80)) {
func_800F9280(playerIdx, seqId, seqArgs, fadeTimer);
Audio_StartSequence(playerIdx, seqId, seqArgs, fadeTimer);
}
break;
@@ -164,7 +164,7 @@ void Audio_ProcessSeqCmd(u32 cmd) {
for (i = 0; i < sNumSeqRequests[playerIdx]; i++) {
if (D_8016E320[playerIdx][i].unk_0 == seqId) {
if (i == 0) {
func_800F9280(playerIdx, seqId, seqArgs, fadeTimer);
Audio_StartSequence(playerIdx, seqId, seqArgs, fadeTimer);
}
return;
}
@@ -189,7 +189,7 @@ void Audio_ProcessSeqCmd(u32 cmd) {
D_8016E320[playerIdx][found].unk_0 = seqId;
if (found == 0) {
func_800F9280(playerIdx, seqId, seqArgs, fadeTimer);
Audio_StartSequence(playerIdx, seqId, seqArgs, fadeTimer);
}
break;
@@ -217,7 +217,8 @@ void Audio_ProcessSeqCmd(u32 cmd) {
if (found == 0) {
func_800F9474(playerIdx, fadeTimer);
if (sNumSeqRequests[playerIdx] != 0) {
func_800F9280(playerIdx, D_8016E320[playerIdx][0].unk_0, D_8016E320[playerIdx][0].unk_1, fadeTimer);
Audio_StartSequence(playerIdx, D_8016E320[playerIdx][0].unk_0, D_8016E320[playerIdx][0].unk_1,
fadeTimer);
}
}
break;
@@ -380,7 +381,7 @@ void Audio_ProcessSeqCmd(u32 cmd) {
}
void Audio_QueueSeqCmd(u32 cmd) {
// Replacement is resolved per-command in func_800F9280().
// Replacement is resolved per-command in Audio_StartSequence().
sAudioSeqCmds[sSeqCmdWrPos++] = cmd;
}
+1 -1
View File
@@ -465,7 +465,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
void GameState_Destroy(GameState* gameState) {
osSyncPrintf("game デストラクタ開始\n"); // "game destructor start"
func_800C3C20();
func_800F3054();
Audio_Update();
osRecvMesg(&gameState->gfxCtx->queue, NULL, OS_MESG_BLOCK);
LOG_CHECK_NULL_POINTER("this->cleanup", gameState->destroy);
if (gameState->destroy != NULL) {
+1 -1
View File
@@ -390,7 +390,7 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) {
gfxCtx->fbIdx++;
}
func_800F3054();
Audio_Update();
{
OSTime time = osGetTime();
+3 -3
View File
@@ -427,7 +427,7 @@ void func_80064824(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
}
break;
case 35:
func_800EE824();
AudioOcarina_PlayLongScarecrowSong();
csCtx->frames = cmd->startFrame - 1;
break;
}
@@ -912,7 +912,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB
break;
case 54:
gSaveContext.gameMode = GAMEMODE_END_CREDITS;
Audio_SetSoundBanksMute(0x6F);
Audio_SetSfxBanksMute(0x6F);
play->linkAgeOnLoad = 1;
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_EAST_EXIT;
gSaveContext.cutsceneIndex = 0xFFF2;
@@ -1309,7 +1309,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB
break;
case 117:
gSaveContext.gameMode = GAMEMODE_END_CREDITS;
Audio_SetSoundBanksMute(0x6F);
Audio_SetSfxBanksMute(0x6F);
play->linkAgeOnLoad = 0;
play->nextEntranceIndex = ENTR_HYRULE_FIELD_PAST_BRIDGE_SPAWN;
gSaveContext.cutsceneIndex = 0xFFF7;
+137 -128
View File
@@ -143,16 +143,16 @@ void Message_UpdateOcarinaGame(PlayState* play) {
play->msgCtx.msgMode++;
if (play->msgCtx.msgMode == MSGMODE_MEMORY_GAME_PLAYER_PLAYING) {
AudioOcarina_SetInstrument(1);
msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
func_800ECC04((1 << OCARINA_SONG_MEMORY_GAME) + 0x8000);
AudioOcarina_Start((1 << OCARINA_SONG_MEMORY_GAME) + 0x8000);
msgCtx->textDrawPos = msgCtx->decodedTextLen;
} else if (msgCtx->msgMode == MSGMODE_MEMORY_GAME_RIGHT_SKULLKID_PLAYING) {
AudioOcarina_SetInstrument(6);
msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_FLUTE);
msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
Audio_OcaSetSongPlayback(OCARINA_SONG_MEMORY_GAME + 1, 1);
AudioOcarina_SetPlaybackSong(OCARINA_SONG_MEMORY_GAME + 1, 1);
msgCtx->stateTimer = 2;
}
Message_ResetOcarinaNoteState();
@@ -892,15 +892,15 @@ void Message_HandleOcarina(PlayState* play) {
} else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_LONG_PLAYBACK) {
// "Recording Playback / Recording Playback / Recording Playback / Recording Playback -> "
osSyncPrintf("録音再生 録音再生 録音再生 録音再生 -> ");
AudioOcarina_SetInstrument(1);
AudioOcarina_SetInstrument(1);
msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
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);
} else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_RECORDING) {
msgCtx->msgMode = MSGMODE_SCARECROW_RECORDING_START;
// "8 Note Recording Start / 8 Note Recording Start / 8 Note Recording Start -> "
@@ -908,15 +908,15 @@ void Message_HandleOcarina(PlayState* play) {
} else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_PLAYBACK) {
// "8 Note Playback / 8 Note Playback / 8 Note Playback -> "
osSyncPrintf("8音再生 8音再生 8音再生 -> ");
AudioOcarina_SetInstrument(1);
AudioOcarina_SetInstrument(1);
msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
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);
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 -> "
@@ -2895,11 +2895,19 @@ void Message_ContinueTextbox(PlayState* play, u16 textId) {
void Message_StartOcarina(PlayState* play, 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 = &play->msgCtx;
s32 textId;
@@ -2917,13 +2925,13 @@ void Message_StartOcarina(PlayState* play, u16 ocarinaActionId) {
}
}
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 = AudioOcarina_GetRecordingStaff();
msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
sOcarinaButtonIndexBufLen = 0;
Message_ResetOcarinaNoteState();
@@ -3006,15 +3014,15 @@ void Message_StartOcarina(PlayState* play, u16 ocarinaActionId) {
} else if (ocarinaActionId == OCARINA_ACTION_SCARECROW_LONG_PLAYBACK) {
// "?????Recording Playback / Recording Playback / Recording Playback / Recording Playback -> "
osSyncPrintf("?????録音再生 録音再生 録音再生 録音再生 -> ");
AudioOcarina_SetInstrument(1);
AudioOcarina_SetInstrument(1);
msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
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.hudVisibilityMode = 0;
Interface_ChangeHudVisibilityMode(1);
}
@@ -3365,8 +3373,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
case MSGMODE_OCARINA_STARTING:
case MSGMODE_SONG_DEMONSTRATION_STARTING:
case MSGMODE_SONG_PLAYBACK_STARTING:
AudioOcarina_SetInstrument(1);
msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
play->msgCtx.ocarinaMode = OCARINA_MODE_01;
Message_ResetOcarinaNoteState();
@@ -3380,22 +3388,22 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
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 % 32)) + 0x8000);
AudioOcarina_Start((1 << (msgCtx->ocarinaAction % 32)) + 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) % 32)) + 0x8000);
AudioOcarina_Start((1 << ((msgCtx->ocarinaAction + 0x11) % 32)) + 0x8000);
// "Performance Check"
osSyncPrintf("演奏チェック=%d\n", msgCtx->ocarinaAction - OCARINA_ACTION_PLAYBACK_MINUET);
msgCtx->msgMode = MSGMODE_SONG_PLAYBACK;
@@ -3410,7 +3418,7 @@ void Message_DrawMain(PlayState* play, 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, sOcarinaButtonIndexBufPos);
if (msgCtx->ocarinaStaff->pos == 1 && sOcarinaButtonIndexBufPos == 8) {
@@ -3418,22 +3426,22 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
if (sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
msgCtx->lastOcaNoteIdx = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] =
msgCtx->ocarinaStaff->noteIdx;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
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) {
AudioOcarina_SetInstrument(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);
@@ -3451,8 +3459,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
Interface_ChangeHudVisibilityMode(1);
}
} else if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_SCARECROW) {
if (msgCtx->ocarinaStaff->state < OCARINA_SONG_SCARECROW) {
AudioOcarina_SetInstrument(0);
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);
@@ -3487,19 +3495,19 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
Interface_ChangeHudVisibilityMode(1);
} else {
AudioOcarina_SetInstrument(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) {
AudioOcarina_SetInstrument(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 (isB_Held) {
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
Message_CloseTextbox(play);
}
@@ -3544,7 +3552,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
msgCtx->stateTimer--;
if (msgCtx->stateTimer == 0) {
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
if (msgCtx->msgMode == MSGMODE_OCARINA_CORRECT_PLAYBACK) {
// "Correct Example Performance"
osSyncPrintf("正解模範演奏=%x\n", msgCtx->lastPlayedSong);
@@ -3604,7 +3612,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
R_OCARINA_NOTES_YPOS_OFFSET += R_OCARINA_NOTES_YPOS_OFFSET;
if (R_OCARINA_NOTES_YPOS_OFFSET >= 550) {
sOcarinaButtonIndexBuf[0] = OCARINA_NOTE_INVALID;
sOcarinaButtonIndexBuf[0] = OCARINA_BTN_INVALID;
sOcarinaNotesAlphaValues[0] = sOcarinaNotesAlphaValues[1] = sOcarinaNotesAlphaValues[2] =
sOcarinaNotesAlphaValues[3] = sOcarinaNotesAlphaValues[4] = sOcarinaNotesAlphaValues[5] =
sOcarinaNotesAlphaValues[6] = sOcarinaNotesAlphaValues[7] = sOcarinaNotesAlphaValues[8] = 0;
@@ -3618,7 +3626,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
case MSGMODE_SONG_PLAYED:
msgCtx->stateTimer--;
if (msgCtx->stateTimer == 0) {
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
osSyncPrintf(VT_FGCOL(GREEN));
osSyncPrintf("Na_StopOcarinaMode();\n");
osSyncPrintf("Na_StopOcarinaMode();\n");
@@ -3626,7 +3634,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
osSyncPrintf(VT_RST);
Message_Decode(play);
msgCtx->msgMode = MSGMODE_SETUP_DISPLAY_SONG_PLAYED;
msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
Message_ResetOcarinaNoteState();
if (msgCtx->lastPlayedSong >= OCARINA_SONG_SARIAS &&
@@ -3648,16 +3656,16 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
} else {
Message_DrawText(play, &gfx);
}
AudioOcarina_SetInstrument(1);
AudioOcarina_SetInstrument(1);
Audio_OcaSetSongPlayback(msgCtx->lastPlayedSong + 1, 1);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
AudioOcarina_SetPlaybackSong(msgCtx->lastPlayedSong + 1, 1);
} else {
AudioOcarina_SetInstrument(1);
AudioOcarina_SetInstrument(1);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
}
if (msgCtx->lastPlayedSong != OCARINA_SONG_SCARECROW) {
if (msgCtx->lastPlayedSong != OCARINA_SONG_SCARECROW_SPAWN) {
Audio_PlayFanfare(sOcarinaSongFanfares[msgCtx->lastPlayedSong]);
Audio_SetSoundBanksMute(0x20);
Audio_SetSfxBanksMute(0x20);
}
play->msgCtx.ocarinaMode = OCARINA_MODE_01;
if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) {
@@ -3675,19 +3683,19 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
// "ocarina_no=%d Song Chosen=%d"
osSyncPrintf("ocarina_no=%d 選曲=%d\n", msgCtx->ocarinaAction, 0x16);
if (msgCtx->ocarinaAction < OCARINA_ACTION_TEACH_SARIA) {
AudioOcarina_SetInstrument(4);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_HARP);
} else if (msgCtx->ocarinaAction == OCARINA_ACTION_TEACH_EPONA) {
AudioOcarina_SetInstrument(2);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_MALON);
} else if (msgCtx->ocarinaAction == OCARINA_ACTION_TEACH_LULLABY) {
AudioOcarina_SetInstrument(3);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_WHISTLE);
} else if (msgCtx->ocarinaAction == OCARINA_ACTION_TEACH_STORMS) {
AudioOcarina_SetInstrument(5);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_GRIND_ORGAN);
} else {
AudioOcarina_SetInstrument(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);
AudioOcarina_SetPlaybackSong(msgCtx->ocarinaAction - OCARINA_ACTION_TEACH_MINUET + 1, 2);
sOcarinaButtonIndexBufPos = 0;
msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION;
}
@@ -3729,7 +3737,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
break;
case MSGMODE_SONG_PLAYED_ACT_BEGIN:
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
Message_ResetOcarinaNoteState();
msgCtx->msgMode = MSGMODE_SONG_PLAYED_ACT;
msgCtx->stateTimer = 2;
@@ -3765,7 +3773,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
msgCtx->ocarinaAction);
if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE) {
play->msgCtx.ocarinaMode = OCARINA_MODE_01;
if (msgCtx->lastPlayedSong == OCARINA_SONG_SCARECROW) {
if (msgCtx->lastPlayedSong == OCARINA_SONG_SCARECROW_SPAWN) {
play->msgCtx.ocarinaMode = OCARINA_MODE_0B;
}
} else if (msgCtx->ocarinaAction >= OCARINA_ACTION_CHECK_MINUET) {
@@ -3795,7 +3803,7 @@ void Message_DrawMain(PlayState* play, 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;
@@ -3810,8 +3818,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
msgCtx->lastOcaNoteIdx = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] =
msgCtx->ocarinaStaff->noteIdx;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
msgCtx->ocarinaStaff->buttonIndex;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
sOcarinaButtonIndexBufPos++;
}
}
@@ -3823,10 +3831,10 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
break;
case MSGMODE_SONG_PLAYBACK:
msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->noteIdx;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
sOcarinaButtonIndexBufPos++;
}
if (msgCtx->ocarinaStaff->state < OCARINA_SONG_MEMORY_GAME) {
@@ -3873,9 +3881,9 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
case MSGMODE_SCARECROW_LONG_RECORDING_START:
// "Scarecrow Recording Initialization"
osSyncPrintf("案山子録音 初期化\n");
Audio_OcaSetRecordingState(1);
AudioOcarina_SetInstrument(1);
msgCtx->ocarinaStaff = Audio_OcaGetRecordingStaff();
AudioOcarina_SetRecordingState(OCARINA_RECORD_SCARECROW_LONG);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff();
msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
sOcarinaButtonIndexBufLen = 0;
Message_ResetOcarinaNoteState();
@@ -3887,7 +3895,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
break;
case MSGMODE_SCARECROW_LONG_RECORDING_ONGOING:
msgCtx->ocarinaStaff = Audio_OcaGetRecordingStaff();
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) {
@@ -3897,11 +3905,12 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
sOcarinaButtonIndexBufLen--;
}
// "Button Entered"
osSyncPrintf(" 入力ボタン【%d】=%d", sOcarinaButtonIndexBufLen, msgCtx->ocarinaStaff->noteIdx);
osSyncPrintf(" 入力ボタン【%d】=%d", sOcarinaButtonIndexBufLen,
msgCtx->ocarinaStaff->buttonIndex);
msgCtx->lastOcaNoteIdx = sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] =
msgCtx->ocarinaStaff->noteIdx;
msgCtx->ocarinaStaff->buttonIndex;
sOcarinaButtonIndexBufLen++;
sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = OCARINA_NOTE_INVALID;
sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = OCARINA_BTN_INVALID;
sOcarinaButtonIndexBufPos++;
if (msgCtx->ocarinaStaff->pos == 8) {
sOcarinaButtonIndexBufPos = 0;
@@ -3917,7 +3926,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
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;
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
Message_CloseTextbox(play);
@@ -3925,7 +3934,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
osSyncPrintf("録音終了!!!!!!!!!録音終了\n");
osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("\n====================================================================\n");
memcpy(gSaveContext.scarecrowLongSong, gScarecrowCustomSongPtr,
memcpy(gSaveContext.scarecrowLongSong, gScarecrowLongSongPtr,
sizeof(gSaveContext.scarecrowLongSong));
for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowLongSong); i++) {
osSyncPrintf("%d, ", gSaveContext.scarecrowLongSong[i]);
@@ -3941,7 +3950,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
break;
case MSGMODE_SCARECROW_LONG_PLAYBACK:
case MSGMODE_SCARECROW_PLAYBACK:
msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
if (sOcarinaButtonIndexBufLen >= 8) {
for (noteBufPos = sOcarinaButtonIndexBufLen - 8, i = 0; i < 8; i++, noteBufPos++) {
@@ -3949,9 +3958,9 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
sOcarinaButtonIndexBufLen--;
}
sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = msgCtx->ocarinaStaff->noteIdx;
sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = msgCtx->ocarinaStaff->buttonIndex;
sOcarinaButtonIndexBufLen++;
sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = OCARINA_NOTE_INVALID;
sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = OCARINA_BTN_INVALID;
sOcarinaButtonIndexBufPos++;
if (msgCtx->ocarinaStaff->pos == 8) {
sOcarinaButtonIndexBufLen = sOcarinaButtonIndexBufPos = 0;
@@ -3961,7 +3970,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
if (msgCtx->stateTimer == 0) {
if (msgCtx->ocarinaStaff->state == 0) {
osSyncPrintf("bbbbbbbbbbb\n");
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
play->msgCtx.ocarinaMode = OCARINA_MODE_0F;
Message_CloseTextbox(play);
}
@@ -3970,8 +3979,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
break;
case MSGMODE_SCARECROW_RECORDING_START:
Audio_OcaSetRecordingState(2);
AudioOcarina_SetInstrument(1);
AudioOcarina_SetRecordingState(OCARINA_RECORD_SCARECROW_SPAWN);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
msgCtx->msgMode = MSGMODE_SCARECROW_RECORDING_ONGOING;
if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
Message_DrawTextJPN(play, &gfx);
@@ -3980,12 +3989,12 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
break;
case MSGMODE_SCARECROW_RECORDING_ONGOING:
msgCtx->ocarinaStaff = Audio_OcaGetRecordingStaff();
msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff();
if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
msgCtx->lastOcaNoteIdx = sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufPos] =
msgCtx->ocarinaStaff->noteIdx;
msgCtx->ocarinaStaff->buttonIndex;
sOcarinaButtonIndexBufPos++;
sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufPos] = OCARINA_NOTE_INVALID;
sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufPos] = OCARINA_BTN_INVALID;
}
if (msgCtx->ocarinaStaff->state == 0) {
// "8 Note Recording OK!"
@@ -4004,10 +4013,10 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
osSyncPrintf(VT_RST);
osSyncPrintf("\n====================================================================\n");
} else if (msgCtx->ocarinaStaff->state == 0xFF || isB_Held) {
} else if (msgCtx->ocarinaStaff->state == OCARINA_RECORD_REJECTED || isB_Held) {
// "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(play);
@@ -4021,18 +4030,18 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
break;
case MSGMODE_SCARECROW_RECORDING_FAILED:
osSyncPrintf("cccccccccccc\n");
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
Message_StartTextbox(play, 0x40AD, NULL); // Bonooru doesn't remember your song
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
break;
case MSGMODE_MEMORY_GAME_START:
AudioOcarina_SetInstrument(1);
AudioOcarina_SetInstrument(6);
Audio_OcaMemoryGameStart(gSaveContext.ocarinaGameRoundNum);
msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
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;
@@ -4040,10 +4049,10 @@ void Message_DrawMain(PlayState* play, 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();
msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->noteIdx;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
sOcarinaButtonIndexBufPos++;
}
if (msgCtx->stateTimer == 0) {
@@ -4064,26 +4073,26 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
break;
case MSGMODE_MEMORY_GAME_LEFT_SKULLKID_WAIT:
case MSGMODE_MEMORY_GAME_RIGHT_SKULLKID_WAIT:
msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->noteIdx;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
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();
msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->noteIdx;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
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");
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
Audio_PlaySoundGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
msgCtx->stateTimer = 10;
@@ -4103,18 +4112,18 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
break;
case MSGMODE_MEMORY_GAME_ROUND_SUCCESS:
msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->noteIdx;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_NOTE_INVALID;
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 = AudioOcarina_GetPlayingStaff();
msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
Message_ResetOcarinaNoteState();
msgCtx->msgMode = MSGMODE_MEMORY_GAME_START_NEXT_ROUND;
@@ -4130,25 +4139,25 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
break;
case MSGMODE_MEMORY_GAME_START_NEXT_ROUND:
if (!Audio_IsSfxPlaying(NA_SE_SY_METRONOME)) {
msgCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
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:
AudioOcarina_SetInstrument(1);
msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
play->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();
msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
msgCtx->lastOcaNoteIdx = msgCtx->ocarinaStaff->noteIdx;
msgCtx->lastOcaNoteIdx = msgCtx->ocarinaStaff->buttonIndex;
msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
Message_ResetOcarinaNoteState();
msgCtx->msgMode = MSGMODE_FROGS_WAITING;
@@ -4209,19 +4218,19 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
if (msgCtx->msgMode == MSGMODE_SONG_PLAYBACK) {
g = msgCtx->ocarinaAction - OCARINA_ACTION_PLAYBACK_MINUET;
r = gOcarinaSongNotes[g].len;
r = gOcarinaSongButtons[g].numButtons;
for (notePosX = R_OCARINA_NOTES_XPOS, i = 0; i < r; i++, notePosX += R_OCARINA_NOTES_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,
gfx++, notePosX << 2, R_OCARINA_NOTES_YPOS(gOcarinaSongButtons[g].buttonsIndex[i]) << 2,
(notePosX + 16) << 2, (R_OCARINA_NOTES_YPOS(gOcarinaSongButtons[g].buttonsIndex[i]) + 16) << 2,
G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
}
}
@@ -4229,7 +4238,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
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 (sOcarinaButtonIndexBuf[i] == OCARINA_NOTE_INVALID) {
if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_INVALID) {
break;
}
@@ -4245,21 +4254,21 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
// Since I don't know what exactly these Env vars are used for, I elected keep their usage
// consistent with the note played, rather than having AEnv be used for whatever note A happens to
// play at the moment and CEnv for everything else, even with custom controls enabled.
if (sOcarinaButtonIndexBuf[i] == OCARINA_NOTE_D4) {
if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_A) {
gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteABtnPrim.r, sOcarinaNoteABtnPrim.g,
sOcarinaNoteABtnPrim.b, sOcarinaNotesAlphaValues[i]);
gDPSetEnvColor(gfx++, sOcarinaNoteABtnEnv.r, sOcarinaNoteABtnEnv.g, sOcarinaNoteABtnEnv.b, 0);
} else {
if (sOcarinaButtonIndexBuf[i] == OCARINA_NOTE_D5) {
if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_C_UP) {
gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteCUpBtnPrim.r, sOcarinaNoteCUpBtnPrim.g,
sOcarinaNoteCUpBtnPrim.b, sOcarinaNotesAlphaValues[i]);
} else if (sOcarinaButtonIndexBuf[i] == OCARINA_NOTE_B4) {
} else if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_C_LEFT) {
gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteCLeftBtnPrim.r, sOcarinaNoteCLeftBtnPrim.g,
sOcarinaNoteCLeftBtnPrim.b, sOcarinaNotesAlphaValues[i]);
} else if (sOcarinaButtonIndexBuf[i] == OCARINA_NOTE_A4) {
} else if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_C_RIGHT) {
gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteCRightBtnPrim.r, sOcarinaNoteCRightBtnPrim.g,
sOcarinaNoteCRightBtnPrim.b, sOcarinaNotesAlphaValues[i]);
} else if (sOcarinaButtonIndexBuf[i] == OCARINA_NOTE_F4) {
} else if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_C_DOWN) {
gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteCDownBtnPrim.r, sOcarinaNoteCDownBtnPrim.g,
sOcarinaNoteCDownBtnPrim.b, sOcarinaNotesAlphaValues[i]);
}
@@ -4689,7 +4698,7 @@ void Message_Update(PlayState* play) {
case MSGMODE_PAUSED:
break;
default:
msgCtx->lastOcaNoteIdx = OCARINA_NOTE_INVALID;
msgCtx->lastOcaNoteIdx = OCARINA_BTN_INVALID;
break;
}
}
+2 -2
View File
@@ -159,9 +159,9 @@ void Sram_OpenSave() {
osSyncPrintf(VT_FGCOL(BLUE));
osSyncPrintf("\n====================================================================\n");
memcpy(gScarecrowCustomSongPtr, gSaveContext.scarecrowLongSong, sizeof(gSaveContext.scarecrowLongSong));
memcpy(gScarecrowLongSongPtr, gSaveContext.scarecrowLongSong, sizeof(gSaveContext.scarecrowLongSong));
ptr = (u8*)gScarecrowCustomSongPtr;
ptr = (u8*)gScarecrowLongSongPtr;
for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowLongSong); i++, ptr++) {
osSyncPrintf("%d, ", *ptr);
}
+13 -13
View File
@@ -207,7 +207,7 @@ static u8 sJumpOrder[] = {
};
static u8 sOcarinaNotes[] = {
OCARINA_NOTE_D4, OCARINA_NOTE_F4, OCARINA_NOTE_A4, OCARINA_NOTE_B4, OCARINA_NOTE_D5,
OCARINA_BTN_A, OCARINA_BTN_C_DOWN, OCARINA_BTN_C_RIGHT, OCARINA_BTN_C_LEFT, OCARINA_BTN_C_UP,
};
void EnFr_OrientUnderwater(EnFr* this) {
@@ -703,19 +703,19 @@ void EnFr_ListeningToOcarinaNotes(EnFr* this, PlayState* play) {
break;
case OCARINA_MODE_01: // Ocarina note played, but no song played
switch (play->msgCtx.lastOcaNoteIdx) { // Jumping frogs in open ocarina based on ocarina note played
case OCARINA_NOTE_D4:
case OCARINA_BTN_A:
EnFr_SetupJumpingUp(this, FROG_BLUE);
break;
case OCARINA_NOTE_F4:
case OCARINA_BTN_C_DOWN:
EnFr_SetupJumpingUp(this, FROG_YELLOW);
break;
case OCARINA_NOTE_A4:
case OCARINA_BTN_C_RIGHT:
EnFr_SetupJumpingUp(this, FROG_RED);
break;
case OCARINA_NOTE_B4:
case OCARINA_BTN_C_LEFT:
EnFr_SetupJumpingUp(this, FROG_PURPLE);
break;
case OCARINA_NOTE_D5:
case OCARINA_BTN_C_UP:
EnFr_SetupJumpingUp(this, FROG_WHITE);
break;
}
@@ -882,7 +882,7 @@ void EnFr_OcarinaMistake(EnFr* this, PlayState* play) {
Message_CloseTextbox(play);
this->reward = GI_NONE;
Sfx_PlaySfxCentered(NA_SE_SY_OCARINA_ERROR);
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
sEnFrPointers.flags = 12;
EnFr_DeactivateButterfly();
this->actionFunc = EnFr_Deactivate;
@@ -921,19 +921,19 @@ void EnFr_ContinueFrogSong(EnFr* this, PlayState* play) {
if (play->msgCtx.msgMode == MSGMODE_FROGS_WAITING) {
play->msgCtx.msgMode = MSGMODE_FROGS_START;
switch (play->msgCtx.lastOcaNoteIdx) {
case OCARINA_NOTE_D4:
case OCARINA_BTN_A:
EnFr_SetupJumpingUp(this, FROG_BLUE);
break;
case OCARINA_NOTE_F4:
case OCARINA_BTN_C_DOWN:
EnFr_SetupJumpingUp(this, FROG_YELLOW);
break;
case OCARINA_NOTE_A4:
case OCARINA_BTN_C_RIGHT:
EnFr_SetupJumpingUp(this, FROG_RED);
break;
case OCARINA_NOTE_B4:
case OCARINA_BTN_C_LEFT:
EnFr_SetupJumpingUp(this, FROG_PURPLE);
break;
case OCARINA_NOTE_D5:
case OCARINA_BTN_C_UP:
EnFr_SetupJumpingUp(this, FROG_WHITE);
}
if (EnFr_IsFrogSongComplete(this, play)) {
@@ -952,7 +952,7 @@ void EnFr_SetupReward(EnFr* this, PlayState* play, u8 unkCondition) {
Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME);
}
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
play->msgCtx.msgMode = MSGMODE_PAUSED;
this->actionFunc = EnFr_PrintTextBox;
}
@@ -106,30 +106,30 @@ void func_80A8F320(EnKakasi* this, PlayState* play, s16 arg) {
ocarinaNote = this->unk_1A6;
}
switch (ocarinaNote) {
case OCARINA_NOTE_D4:
case OCARINA_BTN_A:
this->unk_19A++;
if (this->unk_1A4 == 0) {
this->unk_1A4 = 1;
Audio_PlayActorSound2(&this->actor, NA_SE_EV_KAKASHI_ROLL);
}
break;
case OCARINA_NOTE_F4:
case OCARINA_BTN_C_DOWN:
this->unk_19A++;
this->unk_1B8 = 1.0f;
break;
case OCARINA_NOTE_A4:
case OCARINA_BTN_C_RIGHT:
this->unk_19A++;
if (this->unk_1AC == 0) {
this->unk_1AC = 0x1388;
}
break;
case OCARINA_NOTE_B4:
case OCARINA_BTN_C_LEFT:
this->unk_19A++;
if (this->unk_1A8 == 0) {
this->unk_1A8 = 0x1388;
}
break;
case OCARINA_NOTE_D5:
case OCARINA_BTN_C_UP:
this->unk_19A++;
this->unk_1B8 = 2.0f;
break;
@@ -109,30 +109,30 @@ void func_80A90EBC(EnKakasi3* this, PlayState* play, s32 arg) {
ocarinaNote = this->unk_1A6;
}
switch (ocarinaNote) {
case OCARINA_NOTE_D4:
case OCARINA_BTN_A:
this->unk_19A++;
if (this->unk_1A4 == 0) {
this->unk_1A4 = 1;
Audio_PlayActorSound2(&this->actor, NA_SE_EV_KAKASHI_ROLL);
}
break;
case OCARINA_NOTE_F4:
case OCARINA_BTN_C_DOWN:
this->unk_19A++;
this->unk_1B8 = 1.0f;
break;
case OCARINA_NOTE_A4:
case OCARINA_BTN_C_RIGHT:
this->unk_19A++;
if (this->unk_1AE == 0x0) {
this->unk_1AE = 0x1388;
}
break;
case OCARINA_NOTE_B4:
case OCARINA_BTN_C_LEFT:
this->unk_19A++;
if (this->unk_1AA == 0x0) {
this->unk_1AA = 0x1388;
}
break;
case OCARINA_NOTE_D5:
case OCARINA_BTN_C_UP:
this->unk_19A++;
this->unk_1B8 = 2.0f;
break;
@@ -1503,8 +1503,8 @@ void EnSkj_WaitForPlayback(EnSkj* this, PlayState* play) {
SKULL_KID_OCARINA_PLAY_NOTES;
}
this->songFailTimer = 160;
AudioOcarina_SetInstrument(6); // related instrument sound (flute?)
Audio_OcaSetSongPlayback(OCARINA_SONG_MEMORY_GAME + 1, 1);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_FLUTE);
AudioOcarina_SetPlaybackSong(OCARINA_SONG_MEMORY_GAME + 1, 1);
play->msgCtx.msgMode = MSGMODE_MEMORY_GAME_LEFT_SKULLKID_PLAYING;
play->msgCtx.stateTimer = 2;
}
@@ -1607,7 +1607,7 @@ void EnZl2_Init(Actor* thisx, PlayState* play) {
switch (thisx->params) {
case 1:
Audio_SetSoundBanksMute(0x6F);
Audio_SetSfxBanksMute(0x6F);
break;
case 4:
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
@@ -205,9 +205,9 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
}
D_8082A11C = 0;
AudioOcarina_SetInstrument(1);
func_800ECC04((1 << pauseCtx->ocarinaSongIdx) + 0x8000);
pauseCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
AudioOcarina_Start((1 << pauseCtx->ocarinaSongIdx) + 0x8000);
pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
pauseCtx->ocarinaStaff->pos = 0;
pauseCtx->ocarinaStaff->state = 0xFF;
VREG(21) = -62;
@@ -216,13 +216,13 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
VREG(24) = -46;
VREG(25) = -41;
pauseCtx->unk_1E4 = 8;
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
}
}
} else if (pauseCtx->unk_1E4 == 5) {
if ((pauseCtx->stickRelX != 0) || (pauseCtx->stickRelY != 0)) {
pauseCtx->unk_1E4 = 0;
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
}
} else if (pauseCtx->unk_1E4 == 8) {
if (CHECK_BTN_ALL(input->press.button, BTN_A) && (sp216 >= QUEST_SONG_MINUET) &&
@@ -292,12 +292,12 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
VREG(24) = -46;
VREG(25) = -41;
sp216 = pauseCtx->cursorSlot[PAUSE_QUEST];
AudioOcarina_SetInstrument(1);
AudioOcarina_SetInstrument(1);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
pauseCtx->ocarinaSongIdx = gOcarinaSongItemMap[sp216 - QUEST_SONG_MINUET];
Audio_OcaSetSongPlayback(pauseCtx->ocarinaSongIdx + 1, 1);
AudioOcarina_SetPlaybackSong(pauseCtx->ocarinaSongIdx + 1, 1);
pauseCtx->unk_1E4 = 2;
pauseCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
pauseCtx->ocarinaStaff->pos = 0;
sp216 = pauseCtx->cursorSlot[PAUSE_QUEST];
KaleidoScope_SetCursorVtx(pauseCtx, sp216 * 4, pauseCtx->questVtx);
@@ -533,12 +533,15 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
}
if (pauseCtx->unk_1E4 == 2) {
pauseCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
// Draw ocarina buttons as the song playback progresses
// QUEST_QUAD_SONG_NOTE_A1 to QUEST_QUAD_SONG_NOTE_A8
pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
if (pauseCtx->ocarinaStaff->pos != 0) {
if (D_8082A11C + 1 == pauseCtx->ocarinaStaff->pos) {
D_8082A11C++;
D_8082A124[pauseCtx->ocarinaStaff->pos - 1] = pauseCtx->ocarinaStaff->noteIdx;
D_8082A124[pauseCtx->ocarinaStaff->pos - 1] = pauseCtx->ocarinaStaff->buttonIndex;
}
for (sp218 = 0, phi_s3 = 0; sp218 < 8; sp218++, phi_s3 += 4, sp21A += 4) {
@@ -566,16 +569,16 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b,
Notes_alpha);
} else {
if (D_8082A124[sp218] == OCARINA_NOTE_D5) {
if (D_8082A124[sp218] == OCARINA_BTN_C_UP) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cUpButtonColor.r, cUpButtonColor.g, cUpButtonColor.b,
Notes_alpha);
} else if (D_8082A124[sp218] == OCARINA_NOTE_B4) {
} else if (D_8082A124[sp218] == OCARINA_BTN_C_LEFT) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g,
cLeftButtonColor.b, Notes_alpha);
} else if (D_8082A124[sp218] == OCARINA_NOTE_A4) {
} else if (D_8082A124[sp218] == OCARINA_BTN_C_RIGHT) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g,
cRightButtonColor.b, Notes_alpha);
} else if (D_8082A124[sp218] == OCARINA_NOTE_F4) {
} else if (D_8082A124[sp218] == OCARINA_BTN_C_DOWN) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g,
cDownButtonColor.b, Notes_alpha);
} else {
@@ -595,12 +598,14 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
}
}
} else if (((pauseCtx->unk_1E4 >= 4) && (pauseCtx->unk_1E4 <= 6)) || (pauseCtx->unk_1E4 == 8)) {
// Draw the buttons for playing a song
// QUEST_QUAD_SONG_NOTE_A1 to QUEST_QUAD_SONG_NOTE_A8
sp224 = pauseCtx->ocarinaSongIdx;
sp226 = gOcarinaSongNotes[sp224].len;
sp226 = gOcarinaSongButtons[sp224].numButtons;
for (sp218 = sp21A, phi_s3 = 0; phi_s3 < sp226; phi_s3++, sp21A += 4) {
pauseCtx->questVtx[sp21A + 0].v.ob[1] = pauseCtx->questVtx[sp21A + 1].v.ob[1] =
VREG(21 + gOcarinaSongNotes[sp224].notesIdx[phi_s3]);
VREG(21 + gOcarinaSongButtons[sp224].buttonsIndex[phi_s3]);
pauseCtx->questVtx[sp21A + 2].v.ob[1] = pauseCtx->questVtx[sp21A + 3].v.ob[1] =
pauseCtx->questVtx[sp21A + 0].v.ob[1] - 12;
@@ -609,20 +614,20 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
if (pauseCtx->unk_1E4 == 8) {
s16 Notes_alpha = 200;
if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == 0) {
if (gOcarinaSongButtons[sp224].buttonsIndex[phi_s3] == 0) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b,
Notes_alpha);
} else {
if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_D5) {
if (gOcarinaSongButtons[sp224].buttonsIndex[phi_s3] == OCARINA_BTN_C_UP) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cUpButtonColor.r, cUpButtonColor.g, cUpButtonColor.b,
Notes_alpha);
} else if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_B4) {
} else if (gOcarinaSongButtons[sp224].buttonsIndex[phi_s3] == OCARINA_BTN_C_LEFT) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g,
cLeftButtonColor.b, Notes_alpha);
} else if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_A4) {
} else if (gOcarinaSongButtons[sp224].buttonsIndex[phi_s3] == OCARINA_BTN_C_RIGHT) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g,
cRightButtonColor.b, Notes_alpha);
} else if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_F4) {
} else if (gOcarinaSongButtons[sp224].buttonsIndex[phi_s3] == OCARINA_BTN_C_DOWN) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g,
cDownButtonColor.b, Notes_alpha);
} else {
@@ -638,21 +643,21 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[sp21A], 4, 0);
gDPLoadTextureBlock(POLY_OPA_DISP++, D_8082A130[gOcarinaSongNotes[sp224].notesIdx[phi_s3]], 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(POLY_OPA_DISP++, D_8082A130[gOcarinaSongButtons[sp224].buttonsIndex[phi_s3]],
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);
gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
}
if (pauseCtx->unk_1E4 != 8) {
pauseCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
pauseCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
if (pauseCtx->ocarinaStaff->pos != 0) {
if (D_8082A11C == (pauseCtx->ocarinaStaff->pos - 1)) {
if ((pauseCtx->ocarinaStaff->noteIdx >= OCARINA_NOTE_D4) &&
(pauseCtx->ocarinaStaff->noteIdx <= OCARINA_NOTE_D5)) {
D_8082A124[pauseCtx->ocarinaStaff->pos - 1] = pauseCtx->ocarinaStaff->noteIdx;
if ((pauseCtx->ocarinaStaff->buttonIndex >= OCARINA_BTN_A) &&
(pauseCtx->ocarinaStaff->buttonIndex <= OCARINA_BTN_C_UP)) {
D_8082A124[pauseCtx->ocarinaStaff->pos - 1] = pauseCtx->ocarinaStaff->buttonIndex;
D_8082A124[pauseCtx->ocarinaStaff->pos] = 0xFF;
D_8082A11C++;
}
@@ -685,16 +690,16 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b,
Notes_alpha);
} else {
if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_D5) {
if (gOcarinaSongButtons[sp224].buttonsIndex[phi_s3] == OCARINA_BTN_C_UP) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cUpButtonColor.r, cUpButtonColor.g, cUpButtonColor.b,
Notes_alpha);
} else if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_B4) {
} else if (gOcarinaSongButtons[sp224].buttonsIndex[phi_s3] == OCARINA_BTN_C_LEFT) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g,
cLeftButtonColor.b, Notes_alpha);
} else if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_A4) {
} else if (gOcarinaSongButtons[sp224].buttonsIndex[phi_s3] == OCARINA_BTN_C_RIGHT) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g,
cRightButtonColor.b, Notes_alpha);
} else if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_F4) {
} else if (gOcarinaSongButtons[sp224].buttonsIndex[phi_s3] == OCARINA_BTN_C_DOWN) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g,
cDownButtonColor.b, Notes_alpha);
} else {
@@ -721,9 +726,9 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
}
D_8082A11C = 0;
AudioOcarina_SetInstrument(1);
func_800ECC04((1 << pauseCtx->ocarinaSongIdx) + 0x8000);
pauseCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
AudioOcarina_Start((1 << pauseCtx->ocarinaSongIdx) + 0x8000);
pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
pauseCtx->ocarinaStaff->pos = 0;
pauseCtx->ocarinaStaff->state = 0xFE;
pauseCtx->unk_1E4 = 5;
@@ -4291,10 +4291,10 @@ void KaleidoScope_Update(PlayState* play) {
break;
case 2:
pauseCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff();
pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
if (pauseCtx->ocarinaStaff->state == 0) {
pauseCtx->unk_1E4 = 4;
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
}
break;
@@ -4306,10 +4306,10 @@ void KaleidoScope_Update(PlayState* play) {
break;
case 5:
pauseCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
pauseCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
if (CHECK_BTN_ALL(input->press.button, BTN_START)) {
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
Interface_SetDoAction(play, DO_ACTION_NONE);
pauseCtx->state = 0x12;
WREG(2) = -6240;
@@ -4317,7 +4317,7 @@ void KaleidoScope_Update(PlayState* play) {
pauseCtx->unk_1E4 = 0;
break;
} else if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
pauseCtx->unk_1E4 = 0;
pauseCtx->mode = 0;
pauseCtx->promptChoice = 0;
@@ -4352,7 +4352,7 @@ void KaleidoScope_Update(PlayState* play) {
if (D_8082B25C == 0) {
pauseCtx->unk_1E4 = D_8082B258;
if (pauseCtx->unk_1E4 == 0) {
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
}
}
break;
@@ -4362,14 +4362,14 @@ void KaleidoScope_Update(PlayState* play) {
case 8:
if (CHECK_BTN_ALL(input->press.button, BTN_START)) {
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
Interface_SetDoAction(play, DO_ACTION_NONE);
pauseCtx->state = 0x12;
WREG(2) = -6240;
func_800F64E0(0);
pauseCtx->unk_1E4 = 0;
} else if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
AudioOcarina_SetInstrument(0);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
pauseCtx->unk_1E4 = 0;
pauseCtx->mode = 0;
pauseCtx->promptChoice = 0;