From 01ca078226f37a2ba5be90e957ffe081db059fdf Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Mon, 14 Feb 2022 12:38:46 +1100 Subject: [PATCH] Import code_8019AF00.c (Audio) data & bss, introduce z64ocarina.h (#575) * Import code_8018AF00 Data * code_8019AF00.c BSS Imported * format * Small touch-up * rename `bgm.h` to `sequence.h` * Missed a variable * PR Feedback 1 --- include/{bgm.h => sequence.h} | 146 +- include/variables.h | 3 +- include/z64.h | 3 +- include/z64audio.h | 91 +- include/z64ocarina.h | 125 ++ spec | 2 - src/code/audio/code_8019AF00.c | 1887 ++++++++++++++++++++- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 4 +- tools/disasm/variables.txt | 382 ++--- 9 files changed, 2353 insertions(+), 290 deletions(-) rename include/{bgm.h => sequence.h} (60%) create mode 100644 include/z64ocarina.h diff --git a/include/bgm.h b/include/sequence.h similarity index 60% rename from include/bgm.h rename to include/sequence.h index c3ac3b1d10..d46e96aea9 100644 --- a/include/bgm.h +++ b/include/sequence.h @@ -1,5 +1,5 @@ -#ifndef BGM_H -#define BGM_H +#ifndef SEQUENCE_H +#define SEQUENCE_H #define NA_BGM_STOP 0x100000FF @@ -133,4 +133,146 @@ #define NA_BGM_END_CREDITS_2 0x82 // The End/Credits II "STAFFROLL2" #define NA_BGM_DISABLED 0xFFFF +typedef enum { + /* 0 */ SEQ_PLAYER_BGM_MAIN, + /* 1 */ SEQ_PLAYER_FANFARE, + /* 2 */ SEQ_PLAYER_SFX, + /* 3 */ SEQ_PLAYER_BGM_SUB, + /* 4 */ SEQ_PLAYER_NATURE +} SequencePlayerId; + +typedef enum { + /* 0 */ SEQ_MODE_DEFAULT, + /* 1 */ SEQ_MODE_ENEMY, + /* 2 */ SEQ_MODE_STILL, // Not moving or first-person view + /* 3 */ SEQ_MODE_IGNORE +} SequenceMode; + +typedef enum { + /* 0x0 */ CHANNEL_IO_PORT_0, + /* 0x1 */ CHANNEL_IO_PORT_1, + /* 0x2 */ CHANNEL_IO_PORT_2, + /* 0x3 */ CHANNEL_IO_PORT_3, + /* 0x4 */ CHANNEL_IO_PORT_4, + /* 0x5 */ CHANNEL_IO_PORT_5, + /* 0x6 */ CHANNEL_IO_PORT_6, + /* 0x7 */ CHANNEL_IO_PORT_7 +} ChannelIOPort; + +typedef enum { + /* 0x0 */ NATURE_CHANNEL_STREAM_0, + /* 0x1 */ NATURE_CHANNEL_CRITTER_0, + /* 0x2 */ NATURE_CHANNEL_CRITTER_1, + /* 0x3 */ NATURE_CHANNEL_CRITTER_2, + /* 0x4 */ NATURE_CHANNEL_CRITTER_3, + /* 0x5 */ NATURE_CHANNEL_CRITTER_4, + /* 0x6 */ NATURE_CHANNEL_CRITTER_5, + /* 0x7 */ NATURE_CHANNEL_CRITTER_6, + /* 0x8 */ NATURE_CHANNEL_CRITTER_7, + /* 0xC */ NATURE_CHANNEL_STREAM_1 = 12, + /* 0xD */ NATURE_CHANNEL_UNK, + /* 0xE */ NATURE_CHANNEL_RAIN, + /* 0xF */ NATURE_CHANNEL_LIGHTNING +} NatureChannelIdx; // playerIdx = 4 + +typedef enum { + /* 0x00 */ NATURE_AMBIENCE_0, + /* 0x01 */ NATURE_AMBIENCE_1, + /* 0x02 */ NATURE_AMBIENCE_2, + /* 0x03 */ NATURE_AMBIENCE_3, + /* 0x04 */ NATURE_AMBIENCE_4, + /* 0x05 */ NATURE_AMBIENCE_5, + /* 0x06 */ NATURE_AMBIENCE_6, + /* 0x07 */ NATURE_AMBIENCE_7, + /* 0x08 */ NATURE_AMBIENCE_8, + /* 0x09 */ NATURE_AMBIENCE_9, + /* 0x0A */ NATURE_AMBIENCE_A, + /* 0x0B */ NATURE_AMBIENCE_B, + /* 0x0C */ NATURE_AMBIENCE_C, + /* 0x0D */ NATURE_AMBIENCE_D, + /* 0x0E */ NATURE_AMBIENCE_E, + /* 0x0F */ NATURE_AMBIENCE_F, + /* 0x10 */ NATURE_AMBIENCE_10, + /* 0x11 */ NATURE_AMBIENCE_11, + /* 0x12 */ NATURE_AMBIENCE_12, + /* 0x13 */ NATURE_AMBIENCE_13 +} NatureAmbienceId; // playerIdx = 4 + +typedef enum { + /* 0x00 */ NATURE_STREAM_0, + /* 0x01 */ NATURE_STREAM_1, + /* 0x02 */ NATURE_STREAM_2, + /* 0x03 */ NATURE_STREAM_3 +} NatureStreamId; + +typedef enum { + /* 0x00 */ NATURE_CRITTER_00, + /* 0x01 */ NATURE_CRITTER_01, + /* 0x02 */ NATURE_CRITTER_02, + /* 0x03 */ NATURE_CRITTER_03, + /* 0x04 */ NATURE_CRITTER_04, + /* 0x05 */ NATURE_CRITTER_05, + /* 0x06 */ NATURE_CRITTER_06, + /* 0x07 */ NATURE_CRITTER_07, + /* 0x08 */ NATURE_CRITTER_08, + /* 0x09 */ NATURE_CRITTER_09, + /* 0x0A */ NATURE_CRITTER_10, + /* 0x0B */ NATURE_CRITTER_11, + /* 0x0C */ NATURE_CRITTER_12, + /* 0x0D */ NATURE_CRITTER_13, + /* 0x0E */ NATURE_CRITTER_14, + /* 0x0F */ NATURE_CRITTER_15, + /* 0x10 */ NATURE_CRITTER_16, + /* 0x11 */ NATURE_CRITTER_17, + /* 0x12 */ NATURE_CRITTER_18, + /* 0x13 */ NATURE_CRITTER_19 +} NatureAmimalId; + +#define NATURE_IO_CRITTER_0_TYPE(type) NATURE_CHANNEL_CRITTER_0, CHANNEL_IO_PORT_2, type +#define NATURE_IO_CRITTER_0_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_0, CHANNEL_IO_PORT_3, bend +#define NATURE_IO_CRITTER_0_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_0, CHANNEL_IO_PORT_4, num +#define NATURE_IO_CRITTER_0_PORT5(reverb) NATURE_CHANNEL_CRITTER_0, CHANNEL_IO_PORT_5, reverb + +#define NATURE_IO_CRITTER_1_TYPE(type) NATURE_CHANNEL_CRITTER_1, CHANNEL_IO_PORT_2, type +#define NATURE_IO_CRITTER_1_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_1, CHANNEL_IO_PORT_3, bend +#define NATURE_IO_CRITTER_1_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_1, CHANNEL_IO_PORT_4, num +#define NATURE_IO_CRITTER_1_PORT5(reverb) NATURE_CHANNEL_CRITTER_1, CHANNEL_IO_PORT_5, reverb + +#define NATURE_IO_CRITTER_2_TYPE(type) NATURE_CHANNEL_CRITTER_2, CHANNEL_IO_PORT_2, type +#define NATURE_IO_CRITTER_2_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_2, CHANNEL_IO_PORT_3, bend +#define NATURE_IO_CRITTER_2_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_2, CHANNEL_IO_PORT_4, num +#define NATURE_IO_CRITTER_2_PORT5(reverb) NATURE_CHANNEL_CRITTER_2, CHANNEL_IO_PORT_5, reverb + +#define NATURE_IO_CRITTER_3_TYPE(type) NATURE_CHANNEL_CRITTER_3, CHANNEL_IO_PORT_2, type +#define NATURE_IO_CRITTER_3_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_3, CHANNEL_IO_PORT_3, bend +#define NATURE_IO_CRITTER_3_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_3, CHANNEL_IO_PORT_4, num +#define NATURE_IO_CRITTER_3_PORT5(reverb) NATURE_CHANNEL_CRITTER_3, CHANNEL_IO_PORT_5, reverb + +#define NATURE_IO_CRITTER_4_TYPE(type) NATURE_CHANNEL_CRITTER_4, CHANNEL_IO_PORT_2, type +#define NATURE_IO_CRITTER_4_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_4, CHANNEL_IO_PORT_3, bend +#define NATURE_IO_CRITTER_4_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_4, CHANNEL_IO_PORT_4, num +#define NATURE_IO_CRITTER_4_PORT5(reverb) NATURE_CHANNEL_CRITTER_4, CHANNEL_IO_PORT_5, reverb + +#define NATURE_IO_CRITTER_5_TYPE(type) NATURE_CHANNEL_CRITTER_5, CHANNEL_IO_PORT_2, type +#define NATURE_IO_CRITTER_5_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_5, CHANNEL_IO_PORT_3, bend +#define NATURE_IO_CRITTER_5_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_5, CHANNEL_IO_PORT_4, num +#define NATURE_IO_CRITTER_5_PORT5(reverb) NATURE_CHANNEL_CRITTER_5, CHANNEL_IO_PORT_5, reverb + +#define NATURE_IO_CRITTER_6_TYPE(type) NATURE_CHANNEL_CRITTER_6, CHANNEL_IO_PORT_2, type +#define NATURE_IO_CRITTER_6_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_6, CHANNEL_IO_PORT_3, bend +#define NATURE_IO_CRITTER_6_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_6, CHANNEL_IO_PORT_4, num +#define NATURE_IO_CRITTER_6_PORT5(reverb) NATURE_CHANNEL_CRITTER_6, CHANNEL_IO_PORT_5, reverb + +#define NATURE_IO_STREAM_0_TYPE(type) NATURE_CHANNEL_STREAM_0, CHANNEL_IO_PORT_2, type +#define NATURE_IO_STREAM_0_PORT3(data) NATURE_CHANNEL_STREAM_0, CHANNEL_IO_PORT_3, data +#define NATURE_IO_STREAM_0_PORT4(data) NATURE_CHANNEL_STREAM_0, CHANNEL_IO_PORT_4, data + +#define NATURE_IO_STREAM_1_TYPE(type) NATURE_CHANNEL_STREAM_1, CHANNEL_IO_PORT_2, type +#define NATURE_IO_STREAM_1_PORT3(data) NATURE_CHANNEL_STREAM_1, CHANNEL_IO_PORT_3, data +#define NATURE_IO_STREAM_1_PORT4(data) NATURE_CHANNEL_STREAM_1, CHANNEL_IO_PORT_4, data + +#define NATURE_IO_RAIN_PORT4(data) NATURE_CHANNEL_RAIN, CHANNEL_IO_PORT_4, data + +#define NATURE_IO_ENTRIES_END 0xFF + #endif diff --git a/include/variables.h b/include/variables.h index 19234ff0af..adbc8eb105 100644 --- a/include/variables.h +++ b/include/variables.h @@ -1689,7 +1689,7 @@ extern UNK_PTR D_801D618C; // extern UNK_TYPE1 D_801D6648; // extern UNK_TYPE1 D_801D664C; // extern UNK_TYPE1 D_801D6650; -extern f32 D_801D6654; +extern f32 gSfxVolume; // extern UNK_TYPE1 D_801D6658; // extern UNK_TYPE1 D_801D665C; // extern UNK_TYPE1 D_801D6660; @@ -3340,6 +3340,7 @@ extern FaultAddrConvClient sGraphFaultAddrConvClient; extern FaultClient sGraphFaultClient; extern GfxMasterList* gGfxMasterDL; extern CfbInfo sGraphCfbInfos[3]; +extern OSTime sGraphTaskStartTime; extern OSMesgQueue sSiIntMsgQ; extern OSMesg sSiIntMsgBuf[1]; extern u32 gSegments[NUM_SEGMENTS]; diff --git a/include/z64.h b/include/z64.h index ae912f488d..83d3a47da8 100644 --- a/include/z64.h +++ b/include/z64.h @@ -17,9 +17,9 @@ #include "scheduler.h" #include "xstdio.h" -#include "bgm.h" #include "color.h" #include "ichain.h" +#include "sequence.h" #include "sfx.h" #include "z64actor.h" @@ -34,6 +34,7 @@ #include "z64light.h" #include "z64math.h" #include "z64object.h" +#include "z64ocarina.h" #include "z64player.h" #include "z64scene.h" #include "z64save.h" diff --git a/include/z64audio.h b/include/z64audio.h index 89fff01c7d..db43aad488 100644 --- a/include/z64audio.h +++ b/include/z64audio.h @@ -20,6 +20,13 @@ #define AIBUF_LEN 0x580 +typedef enum { + /* 0 */ AUDIO_FS_STEREO, + /* 1 */ AUDIO_FS_HEADSET, + /* 2 */ AUDIO_FS_SURROUND, + /* 3 */ AUDIO_FS_MONO +} AudioFileSelectOption; + typedef enum { /* 0 */ AUDIO_MODE_STEREO, /* 1 */ AUDIO_MODE_HEADSET, @@ -71,63 +78,6 @@ typedef enum { /* 3 */ CACHE_PERMANENT } AudioCacheType; -typedef enum { - /* 0 */ OCARINA_SONG_SONATA, - /* 1 */ OCARINA_SONG_GORON_LULLABY, - /* 2 */ OCARINA_SONG_NEW_WAVE, - /* 3 */ OCARINA_SONG_ELEGY, - /* 4 */ OCARINA_SONG_OATH, - /* 5 */ OCARINA_SONG_SARIAS, - /* 6 */ OCARINA_SONG_TIME, - /* 7 */ OCARINA_SONG_HEALING, - /* 8 */ OCARINA_SONG_EPONAS, - /* 9 */ OCARINA_SONG_SOARING, - /* 10 */ OCARINA_SONG_STORMS, - /* 11 */ OCARINA_SONG_SUNS, - /* 12 */ OCARINA_SONG_INVERTED_TIME, - /* 13 */ OCARINA_SONG_DOUBLE_TIME, - /* 14 */ OCARINA_SONG_GORON_LULLABY_INTRO, - /* 15 */ OCARINA_SONG_WIND_FISH_HUMAN, // "Ballad of the Wind Fish" - /* 16 */ OCARINA_SONG_WIND_FISH_GORON, - /* 17 */ OCARINA_SONG_WIND_FISH_ZORA, - /* 18 */ OCARINA_SONG_WIND_FISH_DEKU, - /* 19 */ OCARINA_SONG_EVAN_PART1, - /* 20 */ OCARINA_SONG_EVAN_PART2, - /* 21 */ OCARINA_SONG_ZELDAS_LULLABY, - /* 22 */ OCARINA_SONG_SCARECROW, - /* 23 */ OCARINA_SONG_TERMINA_WALL, - /* 24 */ OCARINA_SONG_MAX, -} OcarinaSongId; - -typedef enum { - /* 0 */ OCARINA_BTN_A, - /* 1 */ OCARINA_BTN_C_DOWN, - /* 2 */ OCARINA_BTN_C_RIGHT, - /* 3 */ OCARINA_BTN_C_LEFT, - /* 4 */ OCARINA_BTN_C_UP, - /* -1 */ OCARINA_BTN_INVALID = 0xFF -} OcarinaButtonIdx; - -typedef enum { - /* 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, - /* -1 */ OCARINA_PITCH_NONE = 0xFF -} OcarinaNoteIdx; - typedef s32 (*DmaHandler)(OSPiHandle* handle, OSIoMesg* mb, s32 direction); struct Note; @@ -1155,31 +1105,4 @@ typedef struct { /* 0x10 */ f32* vol; } SoundRequest; // size = 0x14 -/** - * Note: - * Flag for resolving C_RIGHT and C_LEFT only being two semitones apart - * 0x40 - BTN_Z is pressed to lower note by a semitone - * 0x80 - BTN_R is pressed to raise note by a semitone - */ - -typedef struct { - /* 0x0 */ u8 noteIdx; - /* 0x2 */ u16 length; // number of frames the note is sustained - /* 0x4 */ u8 volume; - /* 0x5 */ u8 vibrato; - /* 0x6 */ s8 bend; - /* 0x7 */ u8 BFlat4Flag; // BFlat4Flag See note above -} OcarinaNote; // size = 0x8 - -typedef struct { - /* 0x0 */ u8 numButtons; - /* 0x1 */ u8 buttonIdx[8]; -} OcarinaSongButtons; // size = 0x9 - -typedef struct { - /* 0x0 */ u8 buttonIdx; - /* 0x1 */ u8 state; - /* 0x2 */ u8 pos; -} OcarinaStaff; // size = 0x3 - #endif diff --git a/include/z64ocarina.h b/include/z64ocarina.h new file mode 100644 index 0000000000..bcff0a3f22 --- /dev/null +++ b/include/z64ocarina.h @@ -0,0 +1,125 @@ +#ifndef Z64OCARINA_H +#define Z64OCARINA_H + +#include "ultra64.h" + +typedef enum { + /* 0 */ OCARINA_SONG_SONATA, + /* 1 */ OCARINA_SONG_GORON_LULLABY, + /* 2 */ OCARINA_SONG_NEW_WAVE, + /* 3 */ OCARINA_SONG_ELEGY, + /* 4 */ OCARINA_SONG_OATH, + /* 5 */ OCARINA_SONG_SARIAS, + /* 6 */ OCARINA_SONG_TIME, + /* 7 */ OCARINA_SONG_HEALING, + /* 8 */ OCARINA_SONG_EPONAS, + /* 9 */ OCARINA_SONG_SOARING, + /* 10 */ OCARINA_SONG_STORMS, + /* 11 */ OCARINA_SONG_SUNS, + /* 12 */ OCARINA_SONG_INVERTED_TIME, + /* 13 */ OCARINA_SONG_DOUBLE_TIME, + /* 14 */ OCARINA_SONG_GORON_LULLABY_INTRO, + /* 15 */ OCARINA_SONG_WIND_FISH_HUMAN, // "Ballad of the Wind Fish" + /* 16 */ OCARINA_SONG_WIND_FISH_GORON, + /* 17 */ OCARINA_SONG_WIND_FISH_ZORA, + /* 18 */ OCARINA_SONG_WIND_FISH_DEKU, + /* 19 */ OCARINA_SONG_EVAN_PART1, + /* 20 */ OCARINA_SONG_EVAN_PART2, + /* 21 */ OCARINA_SONG_ZELDAS_LULLABY, + /* 22 */ OCARINA_SONG_SCARECROW, + /* 23 */ OCARINA_SONG_TERMINA_WALL, + /* 24 */ OCARINA_SONG_MAX, + /* 24 */ OCARINA_SONG_SCARECROW_LONG = OCARINA_SONG_MAX +} OcarinaSongId; + +typedef enum { + /* 0 */ OCARINA_BTN_A, + /* 1 */ OCARINA_BTN_C_DOWN, + /* 2 */ OCARINA_BTN_C_RIGHT, + /* 3 */ OCARINA_BTN_C_LEFT, + /* 4 */ OCARINA_BTN_C_UP, + /* -1 */ OCARINA_BTN_INVALID = 0xFF +} OcarinaButtonIdx; + +// Uses scientific pitch notation relative to middle C +// https://en.wikipedia.org/wiki/Scientific_pitch_notation +typedef enum { + /* 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, + /* -1 */ OCARINA_PITCH_NONE = 0xFF +} OcarinaPitch; + +// Mainly set by func_80152CAC in z_message.c +typedef enum { + /* 0 */ OCARINA_INSTRUMENT_OFF, + /* 1 */ OCARINA_INSTRUMENT_DEFAULT, + /* 2 */ OCARINA_INSTRUMENT_FEMALE_VOICE, + /* 3 */ OCARINA_INSTRUMENT_WHISTLING_FLUTE, + /* 4 */ OCARINA_INSTRUMENT_HARP, + /* 5 */ OCARINA_INSTRUMENT_IKANA_KING, + /* 6 */ OCARINA_INSTRUMENT_TATL, + /* 7 */ OCARINA_INSTRUMENT_GORON_DRUMS, + /* 8 */ OCARINA_INSTRUMENT_ZORA_GUITAR, + /* 9 */ OCARINA_INSTRUMENT_DEKU_PIPES, + /* 10 */ OCARINA_INSTRUMENT_MONKEY, + /* 11 */ OCARINA_INSTRUMENT_DEKU_TRUMPET, // Pull out ocarina for captured monkey + /* 12 */ OCARINA_INSTRUMENT_ELDER_GORON_DRUMS, + /* 13 */ OCARINA_INSTRUMENT_PIANO, + /* 14 */ OCARINA_INSTRUMENT_BASS_GUITAR, + /* 15 */ OCARINA_INSTRUMENT_BABY_SINGING, + /* 16 */ OCARINA_INSTRUMENT_AMPLIFIED_GUITAR, // Related to (gSaveContext.weekEventReg[0x29] & 0x20) +} OcarinaInstrumentId; + +typedef enum { + /* 0 */ OCARINA_RECORD_OFF, + /* 1 */ OCARINA_RECORD_SCARECROW_LONG, + /* 2 */ OCARINA_RECORD_SCARECROW_SPAWN, + /* -1 */ OCARINA_RECORD_REJECTED = 0xFF +} OcarinaRecordingState; + +/** + * BFlat4Flag Note: + * Flag for resolving whether (noteIdx = NOTE_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 (NOTE_A4 and NOTE_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 { + /* 0x0 */ u8 noteIdx; // 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 defined by noteIdx + /* 0x7 */ u8 BFlat4Flag; // See note above +} OcarinaNote; // size = 0x8 + +typedef struct { + /* 0x0 */ u8 numButtons; + /* 0x1 */ u8 buttonIdx[8]; +} OcarinaSongButtons; // size = 0x9 + +typedef struct { + /* 0x0 */ u8 buttonIdx; + /* 0x1 */ u8 state; // original name: "status" + /* 0x2 */ u8 pos; // original name: "locate" +} OcarinaStaff; // size = 0x3 + +#endif diff --git a/spec b/spec index d5116fff1d..a5c9e38766 100644 --- a/spec +++ b/spec @@ -643,8 +643,6 @@ beginseg pad_text include "build/asm/code/code_8019AEC0.text.o" // handwritten include "build/src/code/audio/code_8019AF00.o" - include "build/data/code/code_8019AF00.data.o" - include "build/data/code/code_8019AF00.bss.o" include "build/src/code/audio/code_801A4EB0.o" include "build/data/code/code_801A4EB0.data.o" include "build/src/code/audio/code_801A51F0.o" diff --git a/src/code/audio/code_8019AF00.c b/src/code/audio/code_8019AF00.c index 5d0a166a28..3a498178c0 100644 --- a/src/code/audio/code_8019AF00.c +++ b/src/code/audio/code_8019AF00.c @@ -1,6 +1,1882 @@ #include "global.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/D_801E0BD0.s") +typedef struct { + /* 0x0 */ s8 x; + /* 0x1 */ s8 y; +} OcarinaControlStick; // size = 0x2 + +typedef struct { + /* 0x0 */ u16 playerIO; + /* 0x2 */ u16 channelMask; + /* 0x4 */ u8 channelIO[3 * 33 + 1]; +} NatureAmbienceDataIO; // size = 0x68 + +typedef struct { + /* 0x0 */ Vec3f* pos; + /* 0x4 */ f32 freqScale; + /* 0x8 */ s8 reverbAdd; +} SfxSettings; // size = 0x9 + +typedef struct { + /* 0x0 */ f32 vol; + /* 0x4 */ f32 freqScale; + /* 0x8 */ s8 reverb; + /* 0x9 */ s8 panSigned; + /* 0xA */ s8 stereoBits; + /* 0xB */ u8 filter; + /* 0xC */ u8 unk_0C; + /* 0xD */ u8 unk_0D; +} SfxPlayerState; // size = 0xE + +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 +} SfxChannelIdx; // playerIdx = 2 + +// Global IO ports for sequences, 8 global ports per seqPlayer +typedef enum { + /* 0x0 */ SEQ_PLAYER_IO_PORT_0, + /* 0x1 */ SEQ_PLAYER_IO_PORT_1, + /* 0x2 */ SEQ_PLAYER_IO_PORT_2, + /* 0x3 */ SEQ_PLAYER_IO_PORT_3, + /* 0x4 */ SEQ_PLAYER_IO_PORT_4, + /* 0x5 */ SEQ_PLAYER_IO_PORT_5, + /* 0x6 */ SEQ_PLAYER_IO_PORT_6, + /* 0x7 */ SEQ_PLAYER_IO_PORT_7, +} SeqPlayerIOPort; + +typedef struct { + /* 0x0 */ f32 value; + /* 0x4 */ f32 target; + /* 0x8 */ f32 step; + /* 0xC */ s32 remainingFrames; +} FreqLerp; // size = 0x10 + +// Sfx bss +SfxSettings sSfxSettings[8]; +u8 sSfxSettingsFlags; +f32 sTwoSemitonesLoweredFreq; +s8 sSfxIncreasedReverb; +f32 sSfxSyncedVolume; +f32 sSfxSyncedVolumeForMetalEffects; +f32 sSfxSyncedFreq; +FreqLerp sRiverFreqScaleLerp; +FreqLerp sWaterfallFreqScaleLerp; +f32 sSfxAdjustedFreq; +s8 sSfxCustomReverb; +u8 sRiverSoundMainBgmVol; +u8 sRiverSoundMainBgmCurrentVol; +u8 sRiverSoundMainBgmLower; +u8 sRiverSoundMainBgmRestore; +u8 sGanonsTowerVol; +f32* sSfxVolumeCur; +f32 sSfxVolumeTarget; +f32 sSfxVolumeRate; +u16 sSceneSeqId1; +SfxPlayerState sSfxChannelState[16]; + +// Sequence bss +u8 D_801FD3A8; +u8 D_801FD3A9; +u8 sRiverSoundBgmTimer; +u8 sFanfareState; +u16 sFanfareSeqId; +u8 sMuteOnlySfxAndNatureSeq; +u8 sAllPlayersMutedExceptOcaAndSys; +u8 sAudioPauseState; +u8 sSpatialSeqIsActive[4]; +u8 sSequenceFilter[8 * 4]; +u8 sIsFinalHoursOrSoaring; +u8 sObjSoundFanfareSeqId; +u8 sObjSoundFanfareRequested; +Vec3f sObjSoundFanfarePos; +u8 sObjSoundPlayerIdx; +Vec3f sObjSoundPos; +s16 sObjSoundFlags; +f32 sObjSoundMinDist; +f32 sObjSoundMaxDist; +f32 sObjSoundMaxVol; +f32 sObjSoundMinVol; +Vec3f sSpatialSeqNoFilterPos; +Vec3f sSpatialSeqFilterPos; +f32 sSpatialSeqMaxDist; +u8 sSpatialSeqSeqId; +u8 sSpatialSeqFlags; +u8 D_801FD432; +u8 sSpatialSubBgmFadeTimer; +u8 D_801FD434; +u8 sSpatialSeqPlayerIdx; +u8 sSpatialSeqFadeTimer; +u16 D_801FD438; + +// AudioOcarina bss +OcarinaStaff sPlayingStaff; +OcarinaStaff sPlaybackStaff; +OcarinaStaff sRecordingStaff; +u32 sOcarinaUpdateTaskCurrent; +OcarinaControlStick sOcarinaInputStickRel; +u32 sOcarinaInputButtonCur; +u32 sOcarinaInputButtonStart; +u32 sOcarinaInputButtonPrev; +s32 sOcaInputBtnPress; +u8 sOcarinaResetDelay; +u8 sOcarinaResetUnused; +u8 sOcarinaHasStartedSong; +u8 sFirstOcarinaSongIdx; +u8 sLastOcarinaSongIdx; +u32 sOcarinaAvailSongs; +u8 sOcarinaStaffPlayingPos; +u16 sMusicStaffPos[OCARINA_SONG_MAX]; +u16 sMusicStaffCurHeldLength[OCARINA_SONG_MAX]; +u16 sMusicStaffExpectedLength[OCARINA_SONG_MAX]; +u8 sMusicStaffExpectedPitch[OCARINA_SONG_MAX]; // Next required pitch in song playback +u8 D_801FD518[OCARINA_SONG_MAX]; +u32 D_801FD530[OCARINA_SONG_MAX]; +OcarinaNote sRecordingSongNote; +u16 sCustomSequencePc; + +// Sfx Data +u8 D_801D6600[] = { + true, false, true, true, false, false, true, +}; +u8 D_801D6608[] = { + true, true, true, true, true, false, true, +}; +u8 gChannelsPerBank[4][7] = { + { 3, 2, 3, 3, 2, 1, 2 }, + { 3, 2, 2, 2, 2, 2, 2 }, + { 3, 2, 2, 2, 2, 2, 2 }, + { 4, 1, 0, 0, 2, 2, 2 }, +}; +u8 gUsedChannelsPerBank[4][7] = { + { 3, 2, 3, 2, 2, 1, 1 }, + { 3, 1, 1, 1, 2, 1, 1 }, + { 3, 1, 1, 1, 2, 1, 1 }, + { 2, 1, 0, 0, 1, 1, 1 }, +}; +f32 sGiantsMaskFreq = 0.89167805f; // Around 2 semitones down in pitch +s8 sGiantsMaskReverbAdd = 0x40; +f32 sWaterWheelVolume = 0.65f; +f32 gSfxVolume = 1.0f; +s8 sSfxTimer = 20; +s8 sSfxTimerLerpRange2 = 30; +s8 sSfxTimerLerpRange1 = 20; +f32 sBehindScreenZ[2] = { -15.0f, -65.0f }; // Unused Remnant of OoT +u8 sAudioIncreasingTranspose = 0; // Remnant of OoT, only unsed in unused functions +u8 gMorphaTransposeTable[16] = { 0, 0, 0, 1, 1, 2, 4, 6, 8, 8, 8, 8, 8, 8, 8, 8 }; // Unused Remnant of OoT +u8 sPrevChargeLevel = 0; +f32 sChargeLevelsSfxFreq[] = { 1.0f, 1.12246f, 1.33484f, 1.33484f }; +f32 sCurChargeLevelSfxFreq = 1.0f; +u8 sGanonsTowerLevelsVol[] = { + 127, 80, 75, 73, 70, 68, 65, 60 // volumes +}; +u8 sEnterGanonsTowerTimer = 0; +u16 sSfxVolumeDuration = 0; + +// System Data +s8 sAudioFileSelectSetting = AUDIO_FS_STEREO; +s8 sAudioIsWindowOpen = false; +s8 sAudioCutsceneFlag = false; +s8 sSpecReverb = 0; +s8 sAudioEnvReverb = 0; +s8 sAudioCodeReverb = 0; + +// Sequence Data +u8 sPrevSeqMode = 0; +f32 sAudioEnemyDist = 0.0f; +s8 sAudioEnemyVol = 127; +u16 sPrevMainBgmSeqId = NA_BGM_DISABLED; +u8 sBgmPlayerIOPort7 = 0; +u8 sSceneSeqId2 = NA_BGM_GENERAL_SFX; +u32 sNumFramesStill = 0; +u32 sNumFramesMoving = 0; +u8 sAudioBaseFilter = 0; +u8 sAudioExtraFilter = 0; +u8 sAudioBaseFilter2 = 0; +u8 sAudioExtraFilter2 = 0; +s8 gUnderwaterSfxReverbAdd = 0; +Vec3f* sRiverSoundBgmPos = NULL; +f32 sRiverSoundXZDistToPlayer = 2000.0f; +u8 sObjSoundMainBgmSeqId = NA_BGM_GENERAL_SFX; +u8 sSeqFlags[] = { + 0x3, // NA_BGM_GENERAL_SFX + 0x1, // NA_BGM_NATURE_AMBIENCE + 0x1, // NA_BGM_TERMINA_FIELD + 0x8, // NA_BGM_CHASE + 0, // NA_BGM_MAJORAS_THEME + 0, // NA_BGM_CLOCK_TOWER + 0x1, // NA_BGM_STONE_TOWER_TEMPLE + 0x1, // NA_BGM_INV_STONE_TOWER_TEMPLE + 0x2, // NA_BGM_FAILURE_0 + 0x2, // NA_BGM_FAILURE_1 + 0, // NA_BGM_HAPPY_MASK_SALESMAN + 0, // NA_BGM_SONG_OF_HEALING + 0x1, // NA_BGM_SWAMP_REGION + 0, // NA_BGM_ALIEN_INVASION + 0x2, // NA_BGM_SWAMP_CRUISE + 0, // NA_BGM_SHARPS_CURSE + 0x1, // NA_BGM_GREAT_BAY_REGION + 0x1, // NA_BGM_IKANA_REGION + 0, // NA_BGM_DEKU_KING + 0x1, // NA_BGM_MOUNTAIN_REGION + 0, // NA_BGM_PIRATES_FORTRESS + 0, // NA_BGM_CLOCK_TOWN_DAY_1 + 0, // NA_BGM_CLOCK_TOWN_DAY_2 + 0, // NA_BGM_CLOCK_TOWN_DAY_3 + 0x40, // NA_BGM_FILE_SELECT + 0x10, // NA_BGM_CLEAR_EVENT + 0, // NA_BGM_ENEMY + 0x8, // NA_BGM_BOSS + 0x1, // NA_BGM_WOODFALL_TEMPLE + 0, // NA_BGM_MARKET + 0, // NA_BGM_OPENING + 0x20, // NA_BGM_INSIDE_A_HOUSE + 0x2, // NA_BGM_GAME_OVER + 0, // NA_BGM_CLEAR_BOSS + 0x2, // NA_BGM_GET_ITEM + 0x2, // NA_BGM_GATE_OPEN + 0x2, // NA_BGM_GET_HEART + 0x8, // NA_BGM_TIMED_MINI_GAME + 0, // NA_BGM_GORON_RACE + 0, // NA_BGM_MUSIC_BOX_HOUSE + 0, // NA_BGM_FAIRY_FOUNTAIN + 0, // NA_BGM_ZELDAS_LULLABY + 0, // NA_BGM_ROSA_SISTERS + 0x2, // NA_BGM_OPEN_CHEST + 0, // NA_BGM_MARINE_RESEARCH_LAB + 0x40, // NA_BGM_GIANTS_THEME + 0, // NA_BGM_SONG_OF_STORMS + 0, // NA_BGM_ROMANI_RANCH + 0, // NA_BGM_GORON_VILLAGE + 0, // NA_BGM_MAYORS_OFFICE + 0x2, // NA_BGM_OCA_EPONA + 0x2, // NA_BGM_OCA_SUNS + 0x2, // NA_BGM_OCA_TIME + 0x2, // NA_BGM_OCA_STORM + 0x10, // NA_BGM_ZORA_HALL + 0x2, // NA_BGM_GET_NEW_MASK + 0x8, // NA_BGM_MINI_BOSS + 0x2, // NA_BGM_GET_SMALL_ITEM + 0, // NA_BGM_ASTRAL_OBSERVATORY + 0x1, // NA_BGM_CAVERN + 0x11, // NA_BGM_MILK_BAR + 0x2, // NA_BGM_ZELDA_APPEAR + 0, // NA_BGM_SARIAS_SONG + 0, // NA_BGM_GORON_GOAL + 0, // NA_BGM_HORSE + 0, // NA_BGM_HORSE_GOAL + 0, // NA_BGM_INGO + 0, // NA_BGM_KOTAKE_POTION_SHOP + 0x20, // NA_BGM_SHOP + 0x2, // NA_BGM_OWL + 0x20, // NA_BGM_MINI_GAME + 0x2, // NA_BGM_OCA_SOARING + 0x2, // NA_BGM_OCA_HEALING + 0x2, // NA_BGM_INVERTED_SONG_OF_TIME + 0x2, // NA_BGM_SONG_OF_DOUBLE_TIME + 0x2, // NA_BGM_SONATA_OF_AWAKENING + 0x2, // NA_BGM_GORON_LULLABY + 0x2, // NA_BGM_NEW_WAVE_BOSSA_NOVA + 0x2, // NA_BGM_ELEGY_OF_EMPTINESS + 0x2, // NA_BGM_OATH_TO_ORDER + 0, // NA_BGM_SWORD_TRAINING_HALL + 0x2, // NA_BGM_GORON_LULLABY_INTRO + 0x2, // NA_BGM_OCA_FAIRY + 0x2, // NA_BGM_BREMEN_MARCH + 0x2, // NA_BGM_BALLAD_OF_THE_WIND_FISH + 0x8, // NA_BGM_SONG_OF_SOARING + 0, // NA_BGM_MILK_BAR_DUPLICATE + 0, // NA_BGM_FINAL_HOURS + 0x2, // NA_BGM_MIKAU_RIFF + 0x2, // NA_BGM_MIKAU_FINALE + 0, // NA_BGM_FROG_SONG + 0x2, // NA_BGM_OCA_SONATA + 0x2, // NA_BGM_OCA_LULLABY + 0x2, // NA_BGM_OCA_NEW_WAVE + 0x2, // NA_BGM_OCA_ELEGY + 0x2, // NA_BGM_OCA_OATH + 0, // NA_BGM_MAJORAS_LAIR + 0x2, // NA_BGM_OCA_LULLABY_INTRO + 0x2, // NA_BGM_OCA_GUITAR_BASS_SESSION + 0x2, // NA_BGM_PIANO_SESSION + 0x2, // NA_BGM_INDIGO_GO_SESSION + 0x1, // NA_BGM_SNOWHEAD_TEMPLE + 0x1, // NA_BGM_GREAT_BAY_TEMPLE + 0x2, // NA_BGM_NEW_WAVE_SAXOPHONE + 0x2, // NA_BGM_NEW_WAVE_VOCAL + 0, // NA_BGM_MAJORAS_WRATH + 0, // NA_BGM_MAJORAS_INCARNATION + 0, // NA_BGM_MAJORAS_MASK + 0x2, // NA_BGM_BASS_PLAY + 0x2, // NA_BGM_DRUMS_PLAY + 0x2, // NA_BGM_PIANO_PLAY + 0x1, // NA_BGM_IKANA_CASTLE + 0, // NA_BGM_GATHERING_GIANTS + 0x4, // NA_BGM_KAMARO_DANCE + 0, // NA_BGM_CREMIA_CARRIAGE + 0x2, // NA_BGM_KEATON_QUIZ + 0, // NA_BGM_END_CREDITS_1 + 0, // NA_BGM_OPENING_LOOP + 0, // NA_BGM_TITLE_THEME + 0x2, // NA_BGM_DUNGEON_APPEAR + 0x2, // NA_BGM_WOODFALL_CLEAR + 0x2, // NA_BGM_SNOWHEAD_CLEAR + 0, // + 0, // NA_BGM_INTO_THE_MOON + 0, // NA_BGM_GOODBYE_GIANT + 0, // NA_BGM_TATL_AND_TAEL + 0, // NA_BGM_MOONS_DESTRUCTION + 0, // NA_BGM_END_CREDITS_2 +}; + +s8 sSpecReverbs[20] = { + 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +NatureAmbienceDataIO sNatureAmbienceData[20] = { + // natureSeqId: 0 + { + 0xC0FF, // PlayerIO Data + 0xC0FE, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_09), + NATURE_IO_CRITTER_0_BEND_PITCH(64), + NATURE_IO_CRITTER_0_NUM_LAYERS(0), + NATURE_IO_CRITTER_0_PORT5(32), + + // Channel 2 + NATURE_IO_CRITTER_1_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_1_BEND_PITCH(0), + NATURE_IO_CRITTER_1_NUM_LAYERS(1), + NATURE_IO_CRITTER_1_PORT5(16), + + // Channel 3 + NATURE_IO_CRITTER_2_TYPE(NATURE_CRITTER_10), + NATURE_IO_CRITTER_2_BEND_PITCH(112), + NATURE_IO_CRITTER_2_NUM_LAYERS(1), + NATURE_IO_CRITTER_2_PORT5(48), + + // Channel 4 + NATURE_IO_CRITTER_3_TYPE(NATURE_CRITTER_03), + NATURE_IO_CRITTER_3_BEND_PITCH(127), + NATURE_IO_CRITTER_3_NUM_LAYERS(0), + NATURE_IO_CRITTER_3_PORT5(16), + + // Channel 5 + NATURE_IO_CRITTER_4_TYPE(NATURE_CRITTER_00), + NATURE_IO_CRITTER_4_BEND_PITCH(127), + NATURE_IO_CRITTER_4_NUM_LAYERS(1), + NATURE_IO_CRITTER_4_PORT5(16), + + // Channel 6 + NATURE_IO_CRITTER_5_TYPE(NATURE_CRITTER_01), + NATURE_IO_CRITTER_5_BEND_PITCH(127), + NATURE_IO_CRITTER_5_NUM_LAYERS(3), + NATURE_IO_CRITTER_5_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 1 + { + 0xC0FF, // PlayerIO Data + 0xC0FE, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_0_BEND_PITCH(64), + NATURE_IO_CRITTER_0_NUM_LAYERS(0), + NATURE_IO_CRITTER_0_PORT5(32), + + // Channel 2 + NATURE_IO_CRITTER_1_TYPE(NATURE_CRITTER_16), + NATURE_IO_CRITTER_1_BEND_PITCH(0), + NATURE_IO_CRITTER_1_NUM_LAYERS(1), + NATURE_IO_CRITTER_1_PORT5(16), + + // Channel 3 + NATURE_IO_CRITTER_2_TYPE(NATURE_CRITTER_12), + NATURE_IO_CRITTER_2_BEND_PITCH(112), + NATURE_IO_CRITTER_2_NUM_LAYERS(0), + NATURE_IO_CRITTER_2_PORT5(48), + + // Channel 4 + NATURE_IO_CRITTER_3_TYPE(NATURE_CRITTER_15), + NATURE_IO_CRITTER_3_BEND_PITCH(127), + NATURE_IO_CRITTER_3_NUM_LAYERS(1), + NATURE_IO_CRITTER_3_PORT5(16), + + // Channel 5 + NATURE_IO_CRITTER_4_TYPE(NATURE_CRITTER_06), + NATURE_IO_CRITTER_4_BEND_PITCH(127), + NATURE_IO_CRITTER_4_NUM_LAYERS(1), + NATURE_IO_CRITTER_4_PORT5(16), + + // Channel 6 + NATURE_IO_CRITTER_5_TYPE(NATURE_CRITTER_01), + NATURE_IO_CRITTER_5_BEND_PITCH(127), + NATURE_IO_CRITTER_5_NUM_LAYERS(3), + NATURE_IO_CRITTER_5_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 2 + { + 0xC0FF, // PlayerIO Data + 0xC0FE, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_0_BEND_PITCH(64), + NATURE_IO_CRITTER_0_NUM_LAYERS(0), + NATURE_IO_CRITTER_0_PORT5(48), + + // Channel 2 + NATURE_IO_CRITTER_1_TYPE(NATURE_CRITTER_10), + NATURE_IO_CRITTER_1_BEND_PITCH(0), + NATURE_IO_CRITTER_1_NUM_LAYERS(1), + NATURE_IO_CRITTER_1_PORT5(16), + + // Channel 3 + NATURE_IO_CRITTER_2_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_2_BEND_PITCH(48), + NATURE_IO_CRITTER_2_NUM_LAYERS(1), + NATURE_IO_CRITTER_2_PORT5(32), + + // Channel 4 + NATURE_IO_CRITTER_3_TYPE(NATURE_CRITTER_03), + NATURE_IO_CRITTER_3_BEND_PITCH(127), + NATURE_IO_CRITTER_3_NUM_LAYERS(0), + NATURE_IO_CRITTER_3_PORT5(16), + + // Channel 5 + NATURE_IO_CRITTER_4_TYPE(NATURE_CRITTER_01), + NATURE_IO_CRITTER_4_BEND_PITCH(64), + NATURE_IO_CRITTER_4_NUM_LAYERS(1), + NATURE_IO_CRITTER_4_PORT5(0), + + // Channel 6 + NATURE_IO_CRITTER_5_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_5_BEND_PITCH(127), + NATURE_IO_CRITTER_5_NUM_LAYERS(0), + NATURE_IO_CRITTER_5_PORT5(63), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 3 + { + 0xC0FF, // PlayerIO Data + 0xC0FE, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_09), + NATURE_IO_CRITTER_0_BEND_PITCH(64), + NATURE_IO_CRITTER_0_NUM_LAYERS(0), + NATURE_IO_CRITTER_0_PORT5(32), + + // Channel 2 + NATURE_IO_CRITTER_1_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_1_BEND_PITCH(64), + NATURE_IO_CRITTER_1_NUM_LAYERS(0), + NATURE_IO_CRITTER_1_PORT5(48), + + // Channel 3 + NATURE_IO_CRITTER_2_TYPE(NATURE_CRITTER_10), + NATURE_IO_CRITTER_2_BEND_PITCH(32), + NATURE_IO_CRITTER_2_NUM_LAYERS(1), + NATURE_IO_CRITTER_2_PORT5(32), + + // Channel 4 + NATURE_IO_CRITTER_3_TYPE(NATURE_CRITTER_14), + NATURE_IO_CRITTER_3_BEND_PITCH(64), + NATURE_IO_CRITTER_3_NUM_LAYERS(1), + NATURE_IO_CRITTER_3_PORT5(16), + + // Channel 5 + NATURE_IO_CRITTER_4_TYPE(NATURE_CRITTER_00), + NATURE_IO_CRITTER_4_BEND_PITCH(127), + NATURE_IO_CRITTER_4_NUM_LAYERS(1), + NATURE_IO_CRITTER_4_PORT5(16), + + // Channel 6 + NATURE_IO_CRITTER_5_TYPE(NATURE_CRITTER_01), + NATURE_IO_CRITTER_5_BEND_PITCH(127), + NATURE_IO_CRITTER_5_NUM_LAYERS(3), + NATURE_IO_CRITTER_5_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 4 + { + 0xC0FF, // PlayerIO Data + 0xC0FE, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_0_BEND_PITCH(64), + NATURE_IO_CRITTER_0_NUM_LAYERS(0), + NATURE_IO_CRITTER_0_PORT5(32), + + // Channel 2 + NATURE_IO_CRITTER_1_TYPE(NATURE_CRITTER_02), + NATURE_IO_CRITTER_1_BEND_PITCH(64), + NATURE_IO_CRITTER_1_NUM_LAYERS(1), + NATURE_IO_CRITTER_1_PORT5(16), + + // Channel 3 + NATURE_IO_CRITTER_2_TYPE(NATURE_CRITTER_12), + NATURE_IO_CRITTER_2_BEND_PITCH(112), + NATURE_IO_CRITTER_2_NUM_LAYERS(1), + NATURE_IO_CRITTER_2_PORT5(48), + + // Channel 4 + NATURE_IO_CRITTER_3_TYPE(NATURE_CRITTER_13), + NATURE_IO_CRITTER_3_BEND_PITCH(64), + NATURE_IO_CRITTER_3_NUM_LAYERS(1), + NATURE_IO_CRITTER_3_PORT5(16), + + // Channel 5 + NATURE_IO_CRITTER_4_TYPE(NATURE_CRITTER_01), + NATURE_IO_CRITTER_4_BEND_PITCH(64), + NATURE_IO_CRITTER_4_NUM_LAYERS(1), + NATURE_IO_CRITTER_4_PORT5(16), + + // Channel 6 + NATURE_IO_CRITTER_5_TYPE(NATURE_CRITTER_02), + NATURE_IO_CRITTER_5_BEND_PITCH(112), + NATURE_IO_CRITTER_5_NUM_LAYERS(0), + NATURE_IO_CRITTER_5_PORT5(48), + + // Channel 14 + NATURE_IO_RAIN_PORT4(63), + + // End + NATURE_IO_ENTRIES_END, + + }, + }, + + // natureSeqId: 5 + { + 0xC0FF, // PlayerIO Data + 0xC0FE, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_09), + NATURE_IO_CRITTER_0_BEND_PITCH(64), + NATURE_IO_CRITTER_0_NUM_LAYERS(0), + NATURE_IO_CRITTER_0_PORT5(32), + + // Channel 2 + NATURE_IO_CRITTER_1_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_1_BEND_PITCH(0), + NATURE_IO_CRITTER_1_NUM_LAYERS(1), + NATURE_IO_CRITTER_1_PORT5(16), + + // Channel 3 + NATURE_IO_CRITTER_2_TYPE(NATURE_CRITTER_10), + NATURE_IO_CRITTER_2_BEND_PITCH(112), + NATURE_IO_CRITTER_2_NUM_LAYERS(1), + NATURE_IO_CRITTER_2_PORT5(48), + + // Channel 4 + NATURE_IO_CRITTER_3_TYPE(NATURE_CRITTER_13), + NATURE_IO_CRITTER_3_BEND_PITCH(127), + NATURE_IO_CRITTER_3_NUM_LAYERS(0), + NATURE_IO_CRITTER_3_PORT5(63), + + // Channel 5 + NATURE_IO_CRITTER_4_TYPE(NATURE_CRITTER_00), + NATURE_IO_CRITTER_4_BEND_PITCH(127), + NATURE_IO_CRITTER_4_NUM_LAYERS(1), + NATURE_IO_CRITTER_4_PORT5(16), + + // Channel 6 + NATURE_IO_CRITTER_5_TYPE(NATURE_CRITTER_01), + NATURE_IO_CRITTER_5_BEND_PITCH(127), + NATURE_IO_CRITTER_5_NUM_LAYERS(3), + NATURE_IO_CRITTER_5_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 6 + { + 0xC0FF, // PlayerIO Data + 0xC0FE, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_11), + NATURE_IO_CRITTER_0_BEND_PITCH(112), + NATURE_IO_CRITTER_0_NUM_LAYERS(0), + NATURE_IO_CRITTER_0_PORT5(48), + + // Channel 2 + NATURE_IO_CRITTER_1_TYPE(NATURE_CRITTER_15), + NATURE_IO_CRITTER_1_BEND_PITCH(112), + NATURE_IO_CRITTER_1_NUM_LAYERS(0), + NATURE_IO_CRITTER_1_PORT5(63), + + // Channel 3 + NATURE_IO_CRITTER_2_TYPE(NATURE_CRITTER_11), + NATURE_IO_CRITTER_2_BEND_PITCH(48), + NATURE_IO_CRITTER_2_NUM_LAYERS(1), + NATURE_IO_CRITTER_2_PORT5(16), + + // Channel 4 + NATURE_IO_CRITTER_3_TYPE(NATURE_CRITTER_14), + NATURE_IO_CRITTER_3_BEND_PITCH(48), + NATURE_IO_CRITTER_3_NUM_LAYERS(1), + NATURE_IO_CRITTER_3_PORT5(16), + + // Channel 5 + NATURE_IO_CRITTER_4_TYPE(NATURE_CRITTER_11), + NATURE_IO_CRITTER_4_BEND_PITCH(127), + NATURE_IO_CRITTER_4_NUM_LAYERS(0), + NATURE_IO_CRITTER_4_PORT5(32), + + // Channel 6 + NATURE_IO_CRITTER_5_TYPE(NATURE_CRITTER_02), + NATURE_IO_CRITTER_5_BEND_PITCH(127), + NATURE_IO_CRITTER_5_NUM_LAYERS(0), + NATURE_IO_CRITTER_5_PORT5(48), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 7 + { + 0xC001, // PlayerIO Data + 0xC000, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 8 + { + 0xC003, // PlayerIO Data + 0xC000, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_01), + NATURE_IO_CRITTER_0_BEND_PITCH(127), + NATURE_IO_CRITTER_0_NUM_LAYERS(3), + NATURE_IO_CRITTER_0_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 9 + { + 0xC00F, // PlayerIO Data + 0xC000, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_16), + NATURE_IO_CRITTER_0_BEND_PITCH(0), + NATURE_IO_CRITTER_0_NUM_LAYERS(2), + NATURE_IO_CRITTER_0_PORT5(16), + + // Channel 2 + NATURE_IO_CRITTER_1_TYPE(NATURE_CRITTER_12), + NATURE_IO_CRITTER_1_BEND_PITCH(112), + NATURE_IO_CRITTER_1_NUM_LAYERS(0), + NATURE_IO_CRITTER_1_PORT5(48), + + // Channel 3 + NATURE_IO_CRITTER_2_TYPE(NATURE_CRITTER_15), + NATURE_IO_CRITTER_2_BEND_PITCH(127), + NATURE_IO_CRITTER_2_NUM_LAYERS(1), + NATURE_IO_CRITTER_2_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 10 + { + 0xC081, // PlayerIO Data + 0xC000, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_1), + NATURE_IO_STREAM_0_PORT3(8), + + // Channel 7 + NATURE_IO_CRITTER_6_TYPE(NATURE_CRITTER_11), + NATURE_IO_CRITTER_6_BEND_PITCH(112), + NATURE_IO_CRITTER_6_NUM_LAYERS(2), + NATURE_IO_CRITTER_6_PORT5(32), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 11 + { + 0xC00F, // PlayerIO Data + 0xC000, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_3), + NATURE_IO_STREAM_0_PORT3(8), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_01), + NATURE_IO_CRITTER_0_BEND_PITCH(127), + NATURE_IO_CRITTER_0_NUM_LAYERS(3), + NATURE_IO_CRITTER_0_PORT5(16), + + // Channel 2 + NATURE_IO_CRITTER_1_TYPE(NATURE_CRITTER_00), + NATURE_IO_CRITTER_1_BEND_PITCH(127), + NATURE_IO_CRITTER_1_NUM_LAYERS(2), + NATURE_IO_CRITTER_1_PORT5(16), + + // Channel 3 + NATURE_IO_CRITTER_2_TYPE(NATURE_CRITTER_06), + NATURE_IO_CRITTER_2_BEND_PITCH(127), + NATURE_IO_CRITTER_2_NUM_LAYERS(1), + NATURE_IO_CRITTER_2_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 12 + { + 0xC007, // PlayerIO Data + 0xC000, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_00), + NATURE_IO_CRITTER_0_BEND_PITCH(127), + NATURE_IO_CRITTER_0_NUM_LAYERS(1), + NATURE_IO_CRITTER_0_PORT5(16), + + // Channel 2 + NATURE_IO_CRITTER_1_TYPE(NATURE_CRITTER_01), + NATURE_IO_CRITTER_1_BEND_PITCH(127), + NATURE_IO_CRITTER_1_NUM_LAYERS(3), + NATURE_IO_CRITTER_1_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 13 + { + 0xC003, // PlayerIO Data + 0xC000, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_0_BEND_PITCH(0), + NATURE_IO_CRITTER_0_NUM_LAYERS(1), + NATURE_IO_CRITTER_0_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 14 + { + 0xC003, // PlayerIO Data + 0xC000, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_0_BEND_PITCH(0), + NATURE_IO_CRITTER_0_NUM_LAYERS(1), + NATURE_IO_CRITTER_0_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 15 + { + 0xC003, // PlayerIO Data + 0xC000, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_0_BEND_PITCH(0), + NATURE_IO_CRITTER_0_NUM_LAYERS(1), + NATURE_IO_CRITTER_0_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 16 + { + 0xC003, // PlayerIO Data + 0xC000, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_0_BEND_PITCH(0), + NATURE_IO_CRITTER_0_NUM_LAYERS(1), + NATURE_IO_CRITTER_0_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 17 + { + 0xC003, // PlayerIO Data + 0xC000, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_0_BEND_PITCH(0), + NATURE_IO_CRITTER_0_NUM_LAYERS(1), + NATURE_IO_CRITTER_0_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 18 + { + 0xC000, // PlayerIO Data + 0xC000, // Channel Mask + { + // Channel 0 + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + + // End + NATURE_IO_ENTRIES_END, + }, + }, + + // natureSeqId: 19 + { + 0xC003, // PlayerIO Data + 0xC000, // Channel Mask + { + NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0), + NATURE_IO_STREAM_0_PORT3(0), + + // Channel 1 + NATURE_IO_CRITTER_0_TYPE(NATURE_CRITTER_04), + NATURE_IO_CRITTER_0_BEND_PITCH(0), + NATURE_IO_CRITTER_0_NUM_LAYERS(1), + NATURE_IO_CRITTER_0_PORT5(16), + + // End + NATURE_IO_ENTRIES_END, + + }, + }, +}; + +// AudioOcarina Data +u8 sIsOcarinaInputEnabled = false; +s8 sOcarinaInstrumentId = OCARINA_INSTRUMENT_OFF; +u8 sCurOcarinaPitch = OCARINA_PITCH_NONE; +u8 sPrevOcarinaPitch = 0; +u8 sCurOcarinaButtonIdx = 0; +u8 sMusicStaffPrevPitch = 0; +f32 sCurOcarinaBendFreq = 1.0f; +f32 sDefaultOcarinaVolume = 0.68503935f; +s8 sCurOcarinaBendIdx = 0; +s8 sCurOcarinaVolume = 0x57; +s8 sCurOcarinaVibrato = 0; +u8 sPlaybackState = 0; +u8 D_801D6FE4 = 0xFF; +u8 D_801D6FE8 = 0xFF; +u32 sOcarinaFlags = 0; +s32 sPlaybackNoteTimer = 0; +u16 sPlaybackNotePos = 0; +u16 sPlaybackStaffPos = 0; +u32 sPrevOcarinaSongFlags = 0; // Stores sOcarinaFlags but never used +u8 sPlaybackNoteValue = OCARINA_PITCH_NONE; +u8 sNotePlaybackVolume = 0; +u8 sNotePlaybackVibrato = 0; +s8 sNotePlaybackBend = 0; +f32 sNormalizedNotePlaybackTone = 1.0f; +f32 sNormalizedNotePlaybackVolume = 1.0f; +u32 sOcarinaPlaybackTaskStart = 0; +u32 sOcarinaWallCounter = 0; +u8 sCurOcarinaSong[8] = { + OCARINA_PITCH_C4, OCARINA_PITCH_C4, OCARINA_PITCH_C4, OCARINA_PITCH_C4, + OCARINA_PITCH_C4, OCARINA_PITCH_C4, OCARINA_PITCH_C4, OCARINA_PITCH_C4, +}; +u8 sOcarinaSongAppendPos = 0; +u8 sOcarinaSongStartingPos = 0; + +u8 sButtonToNoteMap[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] = { + // 0: Sonata of Awakening + { + { OCARINA_PITCH_D5, 19, 92, 0, 0, 0 }, + { OCARINA_PITCH_B4, 19, 90, 0, 0, 0 }, + { OCARINA_PITCH_D5, 19, 90, 0, 0, 0 }, + { OCARINA_PITCH_B4, 38, 90, 0, 0, 0 }, + { OCARINA_PITCH_D4, 39, 92, 0, 0, 0 }, + { OCARINA_PITCH_A4, 76, 89, 0, 0, 0 }, + { OCARINA_PITCH_D4, 77, 82, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 86, 0, 0, 0 }, + }, + + // 1: Goron Lullaby + { + { OCARINA_PITCH_D4, 41, 80, 0, 0, 0 }, + { OCARINA_PITCH_A4, 40, 72, 0, 0, 0 }, + { OCARINA_PITCH_B4, 39, 84, 0, 0, 0 }, + { OCARINA_PITCH_D4, 42, 76, 0, 0, 0 }, + { OCARINA_PITCH_A4, 40, 84, 0, 0, 0 }, + { OCARINA_PITCH_B4, 39, 76, 0, 0, 0 }, + { OCARINA_PITCH_A4, 41, 84, 0, 0, 0 }, + { OCARINA_PITCH_D4, 80, 76, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 40, 76, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 66, 0, 0, 0 }, + }, + + // 2: New Wave Bossa Nova + { + { OCARINA_PITCH_B4, 64, 74, 0, 0, 0 }, + { OCARINA_PITCH_D5, 13, 88, 0, 0, 0 }, + { OCARINA_PITCH_B4, 12, 90, 0, 0, 0 }, + { OCARINA_PITCH_A4, 78, 88, 0, 0, 0 }, + { OCARINA_PITCH_F4, 12, 76, 0, 0, 0 }, + { OCARINA_PITCH_B4, 13, 76, 0, 0, 0 }, + { OCARINA_PITCH_A4, 114, 76, 6, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 90, 0, 0, 0 }, + }, + + // 3: Elegy of Emptyness + { + { OCARINA_PITCH_A4, 85, 93, 0, 0, 0 }, + { OCARINA_PITCH_B4, 43, 91, 0, 0, 0 }, + { OCARINA_PITCH_A4, 43, 93, 0, 0, 0 }, + { OCARINA_PITCH_F4, 21, 88, 0, 0, 0 }, + { OCARINA_PITCH_A4, 21, 88, 0, 0, 0 }, + { OCARINA_PITCH_D5, 43, 101, 0, 0, 0 }, + { OCARINA_PITCH_B4, 85, 95, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 94, 0, 0, 0 }, + }, + + // 4: Oath to Order + { + { OCARINA_PITCH_A4, 97, 104, 0, 0, 0 }, + { OCARINA_PITCH_F4, 48, 88, 0, 0, 0 }, + { OCARINA_PITCH_D4, 49, 78, 0, 0, 0 }, + { OCARINA_PITCH_F4, 49, 78, 0, 0, 0 }, + { OCARINA_PITCH_A4, 48, 94, 0, 0, 0 }, + { OCARINA_PITCH_D5, 97, 100, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 96, 0, 0, 0 }, + + }, + + // 5: Sarias Song + { + { 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 }, + }, + + // 6: Song of Time + { + { 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 }, + }, + + // 7: Song of Healing + { + { OCARINA_PITCH_B4, 32, 88, 0, 0, 0 }, + { OCARINA_PITCH_A4, 33, 88, 0, 0, 0 }, + { OCARINA_PITCH_F4, 33, 69, 0, 0, 0 }, + { OCARINA_PITCH_B4, 32, 94, 0, 0, 0 }, + { OCARINA_PITCH_A4, 33, 88, 0, 0, 0 }, + { OCARINA_PITCH_F4, 121, 86, 2, 0, 0 }, + { OCARINA_PITCH_NONE, 10, 84, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 90, 0, 0, 0 }, + }, + + // 8: Eponas Song + { + { 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 }, + }, + + // 9: Song of Soaring + { + { OCARINA_PITCH_F4, 18, 84, 0, 0, 0 }, + { OCARINA_PITCH_B4, 18, 80, 0, 0, 0 }, + { OCARINA_PITCH_D5, 36, 94, 0, 0, 0 }, + { OCARINA_PITCH_F4, 18, 73, 0, 0, 0 }, + { OCARINA_PITCH_B4, 18, 76, 0, 0, 0 }, + { OCARINA_PITCH_D5, 108, 96, 2, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 90, 0, 0, 0 }, + }, + + // 10: Song of Storms + { + { 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 }, + }, + + // 11: Suns Song + { + { 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 }, + }, + + // 12: Inverted Song of Time + { + { OCARINA_PITCH_F4, 32, 84, 0, 0, 0 }, + { OCARINA_PITCH_D4, 65, 88, 0, 0, 0 }, + { OCARINA_PITCH_A4, 33, 80, 0, 0, 0 }, + { OCARINA_PITCH_F4, 32, 84, 0, 0, 0 }, + { OCARINA_PITCH_D4, 65, 88, 0, 0, 0 }, + { OCARINA_PITCH_A4, 99, 80, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 90, 0, 0, 0 }, + }, + + // 13: Song of Double Time + { + { OCARINA_PITCH_A4, 29, 84, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 84, 0, 0, 0 }, + { OCARINA_PITCH_A4, 30, 84, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 84, 0, 0, 0 }, + { OCARINA_PITCH_D4, 29, 84, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 84, 0, 0, 0 }, + { OCARINA_PITCH_D4, 30, 84, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 84, 0, 0, 0 }, + { OCARINA_PITCH_F4, 29, 84, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 84, 0, 0, 0 }, + { OCARINA_PITCH_F4, 99, 84, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 0, 0, 0, 0 }, + }, + + // 14: Goron Lullaby Intro + { + { OCARINA_PITCH_D4, 32, 78, 0, 0, 0 }, + { OCARINA_PITCH_A4, 33, 90, 0, 0, 0 }, + { OCARINA_PITCH_B4, 33, 87, 0, 0, 0 }, + { OCARINA_PITCH_D4, 32, 92, 0, 0, 0 }, + { OCARINA_PITCH_A4, 33, 86, 0, 0, 0 }, + { OCARINA_PITCH_B4, 130, 80, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 66, 0, 0, 0 }, + }, + + // 15: Milk Bar Jam "Ballad of the Wind Fish" Human + { + { OCARINA_PITCH_D5, 89, 80, 0, 0, 0 }, + { OCARINA_PITCH_A4, 41, 72, 0, 0, 0 }, + { OCARINA_PITCH_B4, 22, 84, 0, 0, 0 }, + { OCARINA_PITCH_A4, 91, 76, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 30, 66, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 66, 0, 0, 0 }, + }, + + // 16: Milk Bar Jam "Ballad of the Wind Fish" Goron + { + { OCARINA_PITCH_D4, 52, 80, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 66, 0, 0, 0 }, + { OCARINA_PITCH_D4, 8, 72, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 66, 0, 0, 0 }, + { OCARINA_PITCH_D4, 30, 84, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 66, 0, 0, 0 }, + { OCARINA_PITCH_F4, 34, 76, 0, 0, 0 }, + { OCARINA_PITCH_D4, 52, 80, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 66, 0, 0, 0 }, + { OCARINA_PITCH_D4, 8, 72, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 66, 0, 0, 0 }, + { OCARINA_PITCH_D4, 30, 84, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 66, 0, 0, 0 }, + { OCARINA_PITCH_A4, 34, 76, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 66, 0, 0, 0 }, + }, + + // 17: Milk Bar Jam "Ballad of the Wind Fish" Zora + { + { OCARINA_PITCH_D5, 11, 80, 0, 0, 0 }, + { OCARINA_PITCH_A4, 11, 72, 0, 0, 0 }, + { OCARINA_PITCH_F4, 11, 84, 0, 0, 0 }, + { OCARINA_PITCH_D4, 100, 76, 0, 0, 0 }, + { OCARINA_PITCH_D5, 11, 84, 0, 0, 0 }, + { OCARINA_PITCH_B4, 11, 76, 0, 0, 0 }, + { OCARINA_PITCH_A4, 11, 72, 0, 0, 0 }, + { OCARINA_PITCH_F4, 100, 84, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 66, 0, 0, 0 }, + }, + + // 18: Milk Bar Jam "Ballad of the Wind Fish" Deku + { + { OCARINA_PITCH_A4, 54, 80, 0, 0, 0 }, + { OCARINA_PITCH_D4, 77, 72, 0, 0, 0 }, + { OCARINA_PITCH_F4, 19, 84, 0, 0, 0 }, + { OCARINA_PITCH_B4, 20, 76, 0, 0, 0 }, + { OCARINA_PITCH_A4, 78, 84, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 66, 0, 0, 0 }, + }, + + // 19: Evan HP (Zora Band Leader) Song Part 1 + { + { OCARINA_PITCH_A4, 33, 100, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 92, 0, 0, 0 }, + { OCARINA_PITCH_A4, 37, 104, 0, 0, 0 }, + { OCARINA_PITCH_F4, 24, 100, 0, 0, 0 }, + { OCARINA_PITCH_D4, 70, 97, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 96, 0, 0, 0 }, + { OCARINA_PITCH_D4, 12, 93, 0, 0, 0 }, + { OCARINA_PITCH_F4, 12, 100, 0, 0, 0 }, + { OCARINA_PITCH_A4, 12, 62, 0, 0, 0 }, + { OCARINA_PITCH_D4, 170, 91, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 66, 0, 0, 0 }, + }, + + // 20: Evan HP (Zora Band Leader) Song Part 2 + { + { OCARINA_PITCH_B4, 33, 107, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 100, 0, 0, 0 }, + { OCARINA_PITCH_B4, 37, 104, 0, 0, 0 }, + { OCARINA_PITCH_A4, 24, 97, 0, 0, 0 }, + { OCARINA_PITCH_F4, 70, 104, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 3, 104, 0, 0, 0 }, + { OCARINA_PITCH_F4, 12, 90, 0, 0, 0 }, + { OCARINA_PITCH_A4, 12, 96, 0, 0, 0 }, + { OCARINA_PITCH_B4, 12, 81, 0, 0, 0 }, + { OCARINA_PITCH_F4, 170, 66, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 66, 0, 0, 0 }, + }, + + // 21: Zeldas Lullaby + { + { 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 }, + }, + + // 22: Scarecrow + { + { OCARINA_PITCH_D4, 3, 0, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 255, 0, 0, 0 }, + }, + + // 23: Termina Field 2D Song Buttons Appearing on Wall (In OoT, this is Ocarina Memory Game) + { + { OCARINA_PITCH_D4, 3, 0, 0, 0, 0 }, + { OCARINA_PITCH_NONE, 0, 255, 0, 0, 0 }, + }, +}; + +OcarinaNote sOoTOcarinaSongNotes[9][20] = { + // Minuet + { + { 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_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_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_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_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_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_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 }, + }, + + // Zeldas Lullaby + { + { 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 Song + { + { 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 }, + }, +}; + +u8 sOoTOcarinaSongsNumNotes[] = { + 6, // Minuet + 8, // Bolero + 5, // Serenade + 6, // Requiem + 7, // Nocturne + 6, // Prelude + 6, // Sarias + 6, // Zeldas Lullaby + 6, // Suns Song +}; + +OcarinaNote* sPlaybackSong = sOcarinaSongNotes[OCARINA_SONG_SONATA]; +u8 sFrogsSongNotes[14] = { + 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 = OCARINA_RECORD_OFF; +u8 sRecordSongPos = 0; +u32 sOcarinaRecordTaskStart = 0; +u8 sRecordOcarinaPitch = 0; +u8 sRecordOcarinaVolume = 0; +u8 sRecordOcarinaVibrato = 0; +s8 sRecordOcarinaBendIdx = 0; +u8 sRecordOcarinaButtonIdx = 0; +u8 sPlayedOcarinaSongIdxPlusOne = 0; +u8 sMusicStaffNumNotesPerTest = 0; +u8 D_801D8530 = false; +u32 D_801D8534 = 0; +u8 sIsOcarinaNoteChanged = false; + +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]; +OcarinaNote* sTerminaWallSongPtr = sOcarinaSongNotes[OCARINA_SONG_TERMINA_WALL]; + +u8 sNoteToButtonMap[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 + OCARINA_BTN_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 +}; + +// seqData written in the music macro language +// Only used in unused functions +u8 sCustomSequenceScript[400] = { + 0xFE, 0xFE, 0xD3, 0x20, 0xD7, 0x00, 0x01, 0xCC, 0x00, 0x70, 0x90, 0x00, 0x16, 0xDB, 0x64, 0xDD, 0x78, + 0xFE, 0x00, 0xF3, 0xFC, 0xFF, 0xC3, 0x88, 0x00, 0x29, 0x89, 0x00, 0x2B, 0xDF, 0x7F, 0xE9, 0x0F, 0xDD, + 0x37, 0xD4, 0x40, 0xC1, 0x52, 0xFE, 0x80, 0xF3, 0xFC, 0xFF, 0xC2, 0xFB, 0xC0, 0x00, 0xC1, 0x57, 0xC9, +}; + +OcarinaSongButtons gOcarinaSongButtons[OCARINA_SONG_MAX] = { + // 0: Sonata of Awakening + { + 7, + { + OCARINA_BTN_C_UP, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_UP, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_A, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_A, + }, + }, + + // 1: Goron Lullaby + { + 8, + { + OCARINA_BTN_A, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_A, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_A, + }, + }, + + // 2: New Wave Bossa Nova + { + 7, + { + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_UP, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_RIGHT, + }, + }, + + // 3: Elegy of Emptyness + { + 7, + { + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_UP, + OCARINA_BTN_C_LEFT, + }, + }, + + // 4: Oath to Order + { + 6, + { + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_A, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_UP, + }, + }, + + // 5; Sarias Song + { + 6, + { + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_LEFT, + }, + }, + + // 6: Song of Time + { + 6, + { + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_A, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_A, + OCARINA_BTN_C_DOWN, + }, + }, + + // 7: Song of Healing + { + 6, + { + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_DOWN, + }, + }, + + // 8: Eponas Song + { + 6, + { + OCARINA_BTN_C_UP, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_UP, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_RIGHT, + }, + }, + + // 9: Song of Soaring + { + 6, + { + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_UP, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_UP, + }, + }, + + // 10: Song of Storms + { + 6, + { + OCARINA_BTN_A, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_UP, + OCARINA_BTN_A, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_UP, + }, + }, + + // 11: Suns Song + { + 6, + { + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_UP, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_UP, + }, + }, + + // 12: Inverted Song of Time + { + 6, + { + OCARINA_BTN_C_DOWN, + OCARINA_BTN_A, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_A, + OCARINA_BTN_C_RIGHT, + }, + }, + + // 13; Song of Double Time + { + 6, + { + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_A, + OCARINA_BTN_A, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_DOWN, + }, + }, + + // 14: Goron Lullaby Intro + { + 6, + { + OCARINA_BTN_A, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_A, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_LEFT, + }, + }, + + // 15: Milk Bar Jam "Ballad of the Wind Fish" Human + { + 4, + { + OCARINA_BTN_C_UP, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_RIGHT, + }, + }, + + // 16: Milk Bar Jam "Ballad of the Wind Fish" Goron + { + 8, + { + OCARINA_BTN_A, + OCARINA_BTN_A, + OCARINA_BTN_A, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_A, + OCARINA_BTN_A, + OCARINA_BTN_A, + OCARINA_BTN_C_RIGHT, + }, + }, + + // 17: Milk Bar Jam "Ballad of the Wind Fish" Zora + { + 8, + { + OCARINA_BTN_C_UP, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_A, + OCARINA_BTN_C_UP, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_DOWN, + }, + }, + + // 18: Milk Bar Jam "Ballad of the Wind Fish" Deku + { + 5, + { + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_A, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_RIGHT, + }, + }, + + // 19: Evan HP (Zora Band Leader) Song Part 1 + { + 8, + { + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_A, + OCARINA_BTN_A, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_A, + }, + }, + + // 20: Evan HP (Zora Band Leader) Song Part 2 + { + 8, + { + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_DOWN, + }, + }, + + // 21: Zeldas Lullaby + { + 6, + { + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_UP, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_UP, + OCARINA_BTN_C_RIGHT, + }, + }, + + // 22: Scarecrow + { + 8, + { + OCARINA_BTN_A, + OCARINA_BTN_A, + OCARINA_BTN_A, + OCARINA_BTN_A, + OCARINA_BTN_A, + OCARINA_BTN_A, + OCARINA_BTN_A, + OCARINA_BTN_A, + }, + }, + + // 23: Termina Field 2D Song Buttons Appearing on Wall (In OoT, this is Ocarina Memory Game) + { + 8, + { + OCARINA_BTN_A, + OCARINA_BTN_C_DOWN, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_UP, + OCARINA_BTN_C_LEFT, + OCARINA_BTN_C_RIGHT, + OCARINA_BTN_C_DOWN, + }, + }, +}; + +// Static In-Function Data +u8 sScarecrowAfterCreditsState = 0; +u8 sScarecrowAfterCreditsIntrumentId = OCARINA_INSTRUMENT_DEFAULT; +u16 sScarecrowAfterCreditsTimer = 1200; +u8 sRequestCustomSequence = false; +s8 D_801D8B30[] = { + 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 56, 57, 57, 58, 58, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, + 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 69, 69, 70, 70, 71, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 127, +}; +f32 sBigBellsVolume[8] = { + 1.0f, 0.9f, 0.8f, 0.7f, 0.6f, 0.5f, 0.4f, 0.3f, +}; +u8 sBgmPlayers[2] = { SEQ_PLAYER_BGM_MAIN, SEQ_PLAYER_BGM_SUB }; +f32 sSfxOriginalPos[] = { 0.0f, 0.0f, 0.0f }; + +// OoT's soundEffects from EnRiverSound +const u16 gAudioEnvironmentalSfx[] = { + NA_SE_EV_RIVER_STREAM - SFX_FLAG, NA_SE_EV_WAVE - SFX_FLAG, + NA_SE_EV_WATER_WALL_BIG - SFX_FLAG, NA_SE_EV_WATER_WALL - SFX_FLAG, + NA_SE_EV_MAGMA_LEVEL - SFX_FLAG, NA_SE_EV_MAGMA_LEVEL_M - SFX_FLAG, + NA_SE_EV_MAGMA_LEVEL_L - SFX_FLAG, NA_SE_EV_TORCH - SFX_FLAG, + NA_SE_EV_FOUNTAIN - SFX_FLAG, NA_SE_EV_DRAIN - SFX_FLAG, + NA_SE_EV_CROWD - SFX_FLAG, NA_SE_EV_WATER_CONVECTION - SFX_FLAG, + NA_SE_EV_GORON_CHEER - SFX_FLAG, NA_SE_EV_WATER_WALL_BIG_SILENT - SFX_FLAG, + NA_SE_EV_WATER_BUBBLE - SFX_FLAG, NA_SE_EV_COW_CRY_LV - SFX_FLAG, + NA_SE_EV_MAKE_TURRET - SFX_FLAG, NA_SE_EV_BOILED_WATER_S - SFX_FLAG, + NA_SE_EV_BOILED_WATER_L - SFX_FLAG, NA_SE_EV_WAVE_S - SFX_FLAG, + NA_SE_EV_WAVE_S - SFX_FLAG, NA_SE_EV_WAVE_S - SFX_FLAG, +}; + +/** +const u8 sIsOcarinaSongReserved[OCARINA_SONG_MAX] = { + true, // OCARINA_SONG_SONATA + true, // OCARINA_SONG_GORON_LULLABY + true, // OCARINA_SONG_NEW_WAVE + true, // OCARINA_SONG_ELEGY + true, // OCARINA_SONG_OATH + false, // OCARINA_SONG_SARIAS + true, // OCARINA_SONG_TIME + true, // OCARINA_SONG_HEALING + true, // OCARINA_SONG_EPONAS + true, // OCARINA_SONG_SOARING + true, // OCARINA_SONG_STORMS + false, // OCARINA_SONG_SUNS + true, // OCARINA_SONG_INVERTED_TIME + true, // OCARINA_SONG_DOUBLE_TIME + true, // OCARINA_SONG_GORON_LULLABY_INTRO + false, // OCARINA_SONG_WIND_FISH_HUMAN + false, // OCARINA_SONG_WIND_FISH_GORON + false, // OCARINA_SONG_WIND_FISH_ZORA + false, // OCARINA_SONG_WIND_FISH_DEKU + true, // OCARINA_SONG_EVAN_PART1 + true, // OCARINA_SONG_EVAN_PART2 + false, // OCARINA_SONG_ZELDAS_LULLABY + true, // OCARINA_SONG_SCARECROW + false, // OCARINA_SONG_TERMINA_WALL +}; +*/ #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019AF00.s") @@ -56,7 +1932,14 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019C8D8.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/D_801E0C14.s") +const char sAudioOcarinaUnusedText0[] = "key step is too long !!! %d:%d>%d\n"; +const char sAudioOcarinaUnusedText1[] = "You played %d Melody !!! (last step:%d)\n"; +const char sAudioOcarinaUnusedText2[] = "pass 0\n"; +const char sAudioOcarinaUnusedText3[] = "pass 1\n"; +const char sAudioOcarinaUnusedText4[] = "pass 2\n"; +const char sAudioOcarinaUnusedText5[] = "last key is bad !!! %d %d %02X %02X\n"; +const char sAudioOcarinaUnusedText6[] = "last key step is too short !!! %d:%d %d<%d\n"; +const char sAudioOcarinaUnusedText7[] = "check is over!!! %d %d %d\n"; #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019CD08.s") diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index f0d6ac9db5..5f4f6461b3 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -314,7 +314,7 @@ void func_80AA01C0(DmStk* this, GlobalContext* globalCtx) { case 785: func_8019F128(NA_SE_SY_STALKIDS_PSYCHO); - func_8019FE74(&D_801D6654, 0.0f, 150); + func_8019FE74(&gSfxVolume, 0.0f, 150); break; case 560: @@ -344,7 +344,7 @@ void func_80AA0264(DmStk* this, GlobalContext* globalCtx) { break; case 650: - func_8019FE74(&D_801D6654, 0.0f, 80); + func_8019FE74(&gSfxVolume, 0.0f, 80); break; case 265: diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 802bc6c96d..d82b93e995 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -2304,122 +2304,116 @@ 0x801D6200:("D_801D6200","UNK_TYPE1","",0x1), 0x801D6600:("D_801D6600","UNK_TYPE1","",0x1), 0x801D6608:("D_801D6608","UNK_TYPE1","",0x1), - 0x801D6610:("D_801D6610","UNK_TYPE1","",0x1), - 0x801D662C:("D_801D662C","UNK_TYPE1","",0x1), - 0x801D6648:("D_801D6648","UNK_TYPE1","",0x1), - 0x801D664C:("D_801D664C","UNK_TYPE1","",0x1), - 0x801D6650:("D_801D6650","UNK_TYPE1","",0x1), - 0x801D6654:("D_801D6654","UNK_TYPE4","",0x4), - 0x801D6658:("D_801D6658","UNK_TYPE1","",0x1), - 0x801D665C:("D_801D665C","UNK_TYPE1","",0x1), - 0x801D6660:("D_801D6660","UNK_TYPE1","",0x1), - 0x801D666C:("D_801D666C","UNK_TYPE1","",0x1), - 0x801D6680:("D_801D6680","UNK_TYPE1","",0x1), - 0x801D6684:("D_801D6684","UNK_TYPE1","",0x1), - 0x801D6694:("D_801D6694","UNK_TYPE4","",0x4), - 0x801D6698:("D_801D6698","UNK_TYPE1","",0x1), - 0x801D669E:("D_801D669E","UNK_TYPE1","",0x1), - 0x801D669F:("D_801D669F","UNK_TYPE1","",0x1), - 0x801D66A0:("D_801D66A0","UNK_TYPE1","",0x1), - 0x801D66A4:("D_801D66A4","UNK_TYPE2","",0x2), - 0x801D66A8:("D_801D66A8","UNK_TYPE1","",0x1), - 0x801D66AC:("D_801D66AC","UNK_TYPE1","",0x1), - 0x801D66B0:("D_801D66B0","UNK_TYPE1","",0x1), - 0x801D66B4:("D_801D66B4","UNK_TYPE1","",0x1), - 0x801D66B8:("D_801D66B8","UNK_TYPE1","",0x1), - 0x801D66BC:("D_801D66BC","UNK_TYPE1","",0x1), - 0x801D66C0:("D_801D66C0","UNK_TYPE1","",0x1), - 0x801D66C4:("D_801D66C4","f32","",0x4), - 0x801D66C8:("D_801D66C8","UNK_TYPE1","",0x1), - 0x801D66CC:("D_801D66CC","UNK_TYPE2","",0x2), - 0x801D66D0:("D_801D66D0","UNK_TYPE1","",0x1), - 0x801D66D4:("D_801D66D4","UNK_TYPE1","",0x1), - 0x801D66D8:("D_801D66D8","UNK_TYPE4","",0x4), - 0x801D66DC:("D_801D66DC","UNK_TYPE4","",0x4), - 0x801D66E0:("D_801D66E0","UNK_TYPE1","",0x1), - 0x801D66E4:("D_801D66E4","UNK_TYPE1","",0x1), - 0x801D66E8:("D_801D66E8","UNK_TYPE1","",0x1), - 0x801D66EC:("D_801D66EC","UNK_TYPE1","",0x1), - 0x801D66F0:("D_801D66F0","UNK_TYPE1","",0x1), - 0x801D66F4:("D_801D66F4","UNK_TYPE4","",0x4), - 0x801D66F8:("D_801D66F8","UNK_TYPE4","",0x4), - 0x801D66FC:("D_801D66FC","UNK_TYPE1","",0x1), - 0x801D6700:("D_801D6700","UNK_TYPE1","",0x1), - 0x801D6780:("D_801D6780","UNK_TYPE1","",0x1), - 0x801D6794:("D_801D6794","UNK_TYPE1","",0x1), - 0x801D6FB4:("D_801D6FB4","UNK_TYPE1","",0x1), - 0x801D6FB8:("D_801D6FB8","UNK_TYPE1","",0x1), - 0x801D6FBC:("D_801D6FBC","UNK_TYPE1","",0x1), - 0x801D6FC0:("D_801D6FC0","UNK_TYPE1","",0x1), - 0x801D6FC4:("D_801D6FC4","UNK_TYPE1","",0x1), - 0x801D6FC8:("D_801D6FC8","UNK_TYPE1","",0x1), - 0x801D6FCC:("D_801D6FCC","f32","",0x4), - 0x801D6FD0:("D_801D6FD0","UNK_TYPE1","",0x1), - 0x801D6FD4:("D_801D6FD4","UNK_TYPE1","",0x1), - 0x801D6FD8:("D_801D6FD8","UNK_TYPE1","",0x1), - 0x801D6FDC:("D_801D6FDC","UNK_TYPE1","",0x1), - 0x801D6FE0:("D_801D6FE0","UNK_TYPE1","",0x1), + 0x801D6610:("gChannelsPerBank","UNK_TYPE1","",0x1), + 0x801D662C:("gUsedChannelsPerBank","UNK_TYPE1","",0x1), + 0x801D6648:("sGiantsMaskFreq","UNK_TYPE1","",0x1), + 0x801D664C:("sGiantsMaskReverbAdd","UNK_TYPE1","",0x1), + 0x801D6650:("sWaterWheelVolume","UNK_TYPE1","",0x1), + 0x801D6654:("gSfxVolume","UNK_TYPE4","",0x4), + 0x801D6658:("sSfxTimer","UNK_TYPE1","",0x1), + 0x801D665C:("sSfxTimerLerpRange2","UNK_TYPE1","",0x1), + 0x801D6660:("sSfxTimerLerpRange1","s8","",0x1), + 0x801D6664:("D_801D6664","f32","[2]",0x8), + 0x801D666C:("sAudioIncreasingTranspose","UNK_TYPE1","",0x1), + 0x801D6680:("sPrevChargeLevel","UNK_TYPE1","",0x1), + 0x801D6684:("sChargeLevelsSfxFreq","UNK_TYPE1","",0x1), + 0x801D6694:("sCurChargeLevelSfxFreq","UNK_TYPE4","",0x4), + 0x801D6698:("sGanonsTowerLevelsVol","u8","[8]",0x8), + 0x801D66A0:("sEnterGanonsTowerTimer","UNK_TYPE1","",0x1), + 0x801D66A4:("sSfxVolumeDuration","UNK_TYPE2","",0x2), + 0x801D66A8:("sAudioFileSelectSetting","UNK_TYPE1","",0x1), + 0x801D66AC:("sAudioIsWindowOpen","UNK_TYPE1","",0x1), + 0x801D66B0:("sAudioCutsceneFlag","UNK_TYPE1","",0x1), + 0x801D66B4:("sSpecReverb","UNK_TYPE1","",0x1), + 0x801D66B8:("sAudioEnvReverb","UNK_TYPE1","",0x1), + 0x801D66BC:("sAudioCodeReverb","UNK_TYPE1","",0x1), + 0x801D66C0:("sPrevSeqMode","UNK_TYPE1","",0x1), + 0x801D66C4:("sAudioEnemyDist","f32","",0x4), + 0x801D66C8:("sAudioEnemyVol","UNK_TYPE1","",0x1), + 0x801D66CC:("sPrevMainBgmSeqId","UNK_TYPE2","",0x2), + 0x801D66D0:("sBgmPlayerIOPort7","UNK_TYPE1","",0x1), + 0x801D66D4:("sSceneSeqId2","UNK_TYPE1","",0x1), + 0x801D66D8:("sNumFramesStill","UNK_TYPE4","",0x4), + 0x801D66DC:("sNumFramesMoving","UNK_TYPE4","",0x4), + 0x801D66E0:("sAudioBaseFilter","UNK_TYPE1","",0x1), + 0x801D66E4:("sAudioExtraFilter","UNK_TYPE1","",0x1), + 0x801D66E8:("sAudioBaseFilter2","UNK_TYPE1","",0x1), + 0x801D66EC:("sAudioExtraFilter2","UNK_TYPE1","",0x1), + 0x801D66F0:("gUnderwaterSfxReverbAdd","UNK_TYPE1","",0x1), + 0x801D66F4:("sRiverSoundBgmPos","UNK_TYPE4","",0x4), + 0x801D66F8:("sRiverSoundXZDistToPlayer","UNK_TYPE4","",0x4), + 0x801D66FC:("sObjSoundMainBgmSeqId","UNK_TYPE1","",0x1), + 0x801D6700:("sSeqFlags","UNK_TYPE1","",0x1), + 0x801D6780:("sSpecReverbs","UNK_TYPE1","",0x1), + 0x801D6794:("sNatureAmbienceData","UNK_TYPE1","",0x1), + 0x801D6FB4:("sIsOcarinaInputEnabled","UNK_TYPE1","",0x1), + 0x801D6FB8:("sOcarinaInstrumentId","UNK_TYPE1","",0x1), + 0x801D6FBC:("sCurOcarinaPitch","UNK_TYPE1","",0x1), + 0x801D6FC0:("sPrevOcarinaPitch","UNK_TYPE1","",0x1), + 0x801D6FC4:("sCurOcarinaButtonIdx","UNK_TYPE1","",0x1), + 0x801D6FC8:("sMusicStaffPrevPitch","UNK_TYPE1","",0x1), + 0x801D6FCC:("sCurOcarinaBendFreq","f32","",0x4), + 0x801D6FD0:("sDefaultOcarinaVolume","UNK_TYPE1","",0x1), + 0x801D6FD4:("sCurOcarinaBendIdx","UNK_TYPE1","",0x1), + 0x801D6FD8:("sCurOcarinaVolume","UNK_TYPE1","",0x1), + 0x801D6FDC:("sCurOcarinaVibrato","UNK_TYPE1","",0x1), + 0x801D6FE0:("sPlaybackState","UNK_TYPE1","",0x1), 0x801D6FE4:("D_801D6FE4","UNK_TYPE1","",0x1), 0x801D6FE8:("D_801D6FE8","UNK_TYPE1","",0x1), - 0x801D6FEC:("D_801D6FEC","UNK_TYPE4","",0x4), - 0x801D6FF0:("D_801D6FF0","UNK_TYPE4","",0x4), - 0x801D6FF4:("D_801D6FF4","UNK_TYPE2","",0x2), - 0x801D6FF8:("D_801D6FF8","UNK_TYPE2","",0x2), - 0x801D6FFC:("D_801D6FFC","UNK_TYPE4","",0x4), - 0x801D7000:("D_801D7000","UNK_TYPE1","",0x1), - 0x801D7004:("D_801D7004","UNK_TYPE1","",0x1), - 0x801D7008:("D_801D7008","UNK_TYPE1","",0x1), - 0x801D700C:("D_801D700C","UNK_TYPE1","",0x1), - 0x801D7010:("D_801D7010","f32","",0x4), - 0x801D7014:("D_801D7014","f32","",0x4), - 0x801D7018:("D_801D7018","UNK_TYPE4","",0x4), - 0x801D701C:("D_801D701C","UNK_TYPE4","",0x4), - 0x801D701E:("D_801D701E","UNK_TYPE1","",0x1), - 0x801D701F:("D_801D701F","UNK_TYPE1","",0x1), - 0x801D7020:("D_801D7020","UNK_TYPE1","",0x1), - 0x801D7028:("D_801D7028","UNK_TYPE1","",0x1), - 0x801D702C:("D_801D702C","UNK_TYPE1","",0x1), - 0x801D7030:("D_801D7030","UNK_TYPE1","",0x1), - 0x801D7038:("D_801D7038","UNK_TYPE1","",0x1), - 0x801D703C:("D_801D703C","UNK_TYPE1","",0x1), - 0x801D7040:("D_801D7040","UNK_TYPE1","",0x1), - 0x801D7044:("D_801D7044","UNK_TYPE1","",0x1), - 0x801D7E04:("D_801D7E04","UNK_TYPE4","",0x4), - 0x801D7EA4:("D_801D7EA4","UNK_TYPE1","",0x1), - 0x801D7F44:("D_801D7F44","UNK_TYPE1","",0x1), - 0x801D84E4:("D_801D84E4","UNK_TYPE1","",0x1), - 0x801D84F0:("D_801D84F0","UNK_PTR","",0x4), - 0x801D84F4:("D_801D84F4","UNK_TYPE1","",0x1), - 0x801D8508:("D_801D8508","UNK_TYPE1","",0x1), - 0x801D850C:("D_801D850C","UNK_TYPE1","",0x1), - 0x801D8510:("D_801D8510","UNK_TYPE4","",0x4), - 0x801D8514:("D_801D8514","UNK_TYPE1","",0x1), - 0x801D8518:("D_801D8518","UNK_TYPE1","",0x1), - 0x801D851C:("D_801D851C","UNK_TYPE1","",0x1), - 0x801D8520:("D_801D8520","UNK_TYPE1","",0x1), - 0x801D8524:("D_801D8524","UNK_TYPE1","",0x1), - 0x801D8528:("D_801D8528","UNK_TYPE1","",0x1), - 0x801D852C:("D_801D852C","UNK_TYPE1","",0x1), + 0x801D6FEC:("sOcarinaFlags","UNK_TYPE4","",0x4), + 0x801D6FF0:("sPlaybackNoteTimer","UNK_TYPE4","",0x4), + 0x801D6FF4:("sPlaybackNotePos","UNK_TYPE2","",0x2), + 0x801D6FF8:("sPlaybackStaffPos","UNK_TYPE2","",0x2), + 0x801D6FFC:("sPrevOcarinaSongFlags","UNK_TYPE4","",0x4), + 0x801D7000:("sPlaybackNoteValue","UNK_TYPE1","",0x1), + 0x801D7004:("sNotePlaybackVolume","UNK_TYPE1","",0x1), + 0x801D7008:("sNotePlaybackVibrato","UNK_TYPE1","",0x1), + 0x801D700C:("sNotePlaybackBend","UNK_TYPE1","",0x1), + 0x801D7010:("sNormalizedNotePlaybackTone","f32","",0x4), + 0x801D7014:("sNormalizedNotePlaybackVolume","f32","",0x4), + 0x801D7018:("sOcarinaPlaybackTaskStart","UNK_TYPE4","",0x4), + 0x801D701C:("sOcarinaWallCounter","UNK_TYPE4","",0x4), + 0x801D7020:("sCurOcarinaSong","u8","[8]",0x8), + 0x801D7028:("sOcarinaSongAppendPos","UNK_TYPE1","",0x1), + 0x801D702C:("sOcarinaSongStartingPos","UNK_TYPE1","",0x1), + 0x801D7030:("sButtonToNoteMap","UNK_TYPE1","",0x1), + 0x801D7038:("sOcaMemoryGameAppendPos","UNK_TYPE1","",0x1), + 0x801D703C:("sOcaMemoryGameEndPos","UNK_TYPE1","",0x1), + 0x801D7040:("sOcaMemoryGameNumNotes","UNK_TYPE1","",0x1), + 0x801D7044:("sOcarinaSongNotes","OcarinaNote","[24][20]",0xF00), + 0x801D7F44:("sOoTOcarinaSongNotes","OcarinaNote","[9][20]",0x5A0), + 0x801D84E4:("sOoTOcarinaSongsNumNotes","UNK_TYPE1","",0x1), + 0x801D84F0:("sPlaybackSong","UNK_PTR","",0x4), + 0x801D84F4:("sFrogsSongNotes","u8","[14]",0xE), + 0x801D8504:("gFrogsSongPtr","u8*","",0x4), + 0x801D8508:("sRecordingState","UNK_TYPE1","",0x1), + 0x801D850C:("sRecordSongPos","UNK_TYPE1","",0x1), + 0x801D8510:("sOcarinaRecordTaskStart","UNK_TYPE4","",0x4), + 0x801D8514:("sRecordOcarinaPitch","UNK_TYPE1","",0x1), + 0x801D8518:("sRecordOcarinaVolume","UNK_TYPE1","",0x1), + 0x801D851C:("sRecordOcarinaVibrato","UNK_TYPE1","",0x1), + 0x801D8520:("sRecordOcarinaBendIdx","UNK_TYPE1","",0x1), + 0x801D8524:("sRecordOcarinaButtonIdx","UNK_TYPE1","",0x1), + 0x801D8528:("sPlayedOcarinaSongIdxPlusOne","UNK_TYPE1","",0x1), + 0x801D852C:("sMusicStaffNumNotesPerTest","UNK_TYPE1","",0x1), 0x801D8530:("D_801D8530","UNK_TYPE1","",0x1), 0x801D8534:("D_801D8534","UNK_TYPE4","",0x4), - 0x801D8538:("D_801D8538","UNK_TYPE1","",0x1), - 0x801D853C:("D_801D853C","UNK_TYPE1","",0x1), - 0x801D853E:("D_801D853E","UNK_TYPE2","",0x2), - 0x801D8544:("D_801D8544","UNK_TYPE1","",0x1), - 0x801D889C:("D_801D889C","UNK_PTR","",0x4), - 0x801D88A0:("D_801D88A0","UNK_PTR","",0x4), - 0x801D88A4:("D_801D88A4","UNK_PTR","",0x4), - 0x801D88A8:("D_801D88A8","UNK_TYPE1","",0x1), - 0x801D88B8:("D_801D88B8","UNK_TYPE1","",0x1), - 0x801D8A48:("D_801D8A48","UNK_TYPE1","",0x1), - 0x801D8B20:("D_801D8B20","UNK_TYPE1","",0x1), - 0x801D8B24:("D_801D8B24","UNK_PTR","",0x4), - 0x801D8B28:("D_801D8B28","UNK_TYPE2","",0x2), - 0x801D8B2C:("D_801D8B2C","UNK_TYPE1","",0x1), + 0x801D8538:("sIsOcarinaNoteChanged","UNK_TYPE1","",0x1), + 0x801D853C:("sScarecrowsLongSongNotes","OcarinaNote","[108]",0x360), + 0x801D889C:("gScarecrowLongSongPtr","UNK_PTR","",0x4), + 0x801D88A0:("gScarecrowSpawnSongPtr","UNK_PTR","",0x4), + 0x801D88A4:("sTerminaWallSongPtr","UNK_PTR","",0x4), + 0x801D88A8:("sNoteToButtonMap","UNK_TYPE1","",0x1), + 0x801D88B8:("sCustomSequenceScript","UNK_TYPE1","",0x1), + 0x801D8A48:("gOcarinaSongButtons","UNK_TYPE1","",0x1), + 0x801D8B20:("sScarecrowAfterCreditsState","UNK_TYPE1","",0x1), + 0x801D8B24:("sScarecrowAfterCreditsIntrumentId","UNK_PTR","",0x4), + 0x801D8B28:("sScarecrowAfterCreditsTimer","UNK_TYPE2","",0x2), + 0x801D8B2C:("sRequestCustomSequence","UNK_TYPE1","",0x1), 0x801D8B30:("D_801D8B30","UNK_TYPE1","",0x1), - 0x801D8BB0:("D_801D8BB0","UNK_TYPE1","",0x1), - 0x801D8BD0:("D_801D8BD0","UNK_TYPE2","",0x2), - 0x801D8BD4:("D_801D8BD4","UNK_TYPE4","",0x4), + 0x801D8BB0:("sBigBellsVolume","UNK_TYPE1","",0x1), + 0x801D8BD0:("sBgmPlayers","UNK_TYPE2","",0x2), + 0x801D8BD4:("sSfxOriginalPos","UNK_TYPE4","",0x4), 0x801D8BE0:("D_801D8BE0","UNK_TYPE1","",0x1), 0x801D8E3C:("D_801D8E3C","UNK_TYPE1","",0x1), 0x801D8E40:("D_801D8E40","UNK_TYPE4","",0x4), @@ -3791,16 +3785,16 @@ 0x801E07C4:("jtbl_801E07C4","UNK_PTR","",0x4), 0x801E0948:("jtbl_801E0948","UNK_PTR","",0x4), 0x801E0A08:("jtbl_801E0A08","UNK_PTR","",0x4), - 0x801E0BD0:("D_801E0BD0","UNK_TYPE1","",0x1), - 0x801E0BFC:("D_801E0BFC","UNK_TYPE1","",0x1), - 0x801E0C14:("D_801E0C14","char","[]",0x1), - 0x801E0C38:("D_801E0C38","char","[]",0x1), - 0x801E0C64:("D_801E0C64","char","[]",0x1), - 0x801E0C6C:("D_801E0C6C","char","[]",0x1), - 0x801E0C74:("D_801E0C74","char","[]",0x1), - 0x801E0C7C:("D_801E0C7C","char","[]",0x1), - 0x801E0CA4:("D_801E0CA4","char","[]",0x1), - 0x801E0CD0:("D_801E0CD0","char","[]",0x1), + 0x801E0BD0:("gAudioEnvironmentalSfx","UNK_TYPE1","",0x1), + 0x801E0BFC:("sIsOcarinaSongReserved","UNK_TYPE1","",0x1), + 0x801E0C14:("sAudioOcarinaUnusedText0","char","[]",0x1), + 0x801E0C38:("sAudioOcarinaUnusedText1","char","[]",0x1), + 0x801E0C64:("sAudioOcarinaUnusedText2","char","[]",0x1), + 0x801E0C6C:("sAudioOcarinaUnusedText3","char","[]",0x1), + 0x801E0C74:("sAudioOcarinaUnusedText4","char","[]",0x1), + 0x801E0C7C:("sAudioOcarinaUnusedText5","char","[]",0x1), + 0x801E0CA4:("sAudioOcarinaUnusedText6","char","[]",0x1), + 0x801E0CD0:("sAudioOcarinaUnusedText7","char","[]",0x1), 0x801E0CEC:("D_801E0CEC","f32","",0x4), 0x801E0CF0:("D_801E0CF0","f32","",0x4), 0x801E0CF4:("D_801E0CF4","f32","",0x4), @@ -4297,87 +4291,83 @@ 0x801FD158:("D_801FD158","UNK_TYPE1","",0x1), 0x801FD198:("D_801FD198","UNK_TYPE1","",0x1), 0x801FD1E0:("D_801FD1E0","UNK_TYPE1","",0x1), - 0x801FD1F0:("D_801FD1F0","UNK_TYPE1","",0x1), - 0x801FD250:("D_801FD250","UNK_TYPE1","",0x1), - 0x801FD254:("D_801FD254","UNK_TYPE1","",0x1), - 0x801FD258:("D_801FD258","UNK_TYPE1","",0x1), - 0x801FD25C:("D_801FD25C","UNK_TYPE1","",0x1), - 0x801FD260:("D_801FD260","UNK_TYPE1","",0x1), - 0x801FD264:("D_801FD264","UNK_TYPE1","",0x1), - 0x801FD268:("D_801FD268","UNK_TYPE1","",0x1), - 0x801FD278:("D_801FD278","UNK_TYPE1","",0x1), - 0x801FD288:("D_801FD288","UNK_TYPE1","",0x1), - 0x801FD28C:("D_801FD28C","UNK_TYPE1","",0x1), - 0x801FD28D:("D_801FD28D","UNK_TYPE1","",0x1), - 0x801FD28E:("D_801FD28E","UNK_TYPE1","",0x1), - 0x801FD28F:("D_801FD28F","UNK_TYPE1","",0x1), - 0x801FD290:("D_801FD290","UNK_TYPE1","",0x1), - 0x801FD291:("D_801FD291","UNK_TYPE1","",0x1), - 0x801FD294:("D_801FD294","UNK_TYPE1","",0x1), - 0x801FD298:("D_801FD298","UNK_TYPE1","",0x1), - 0x801FD29C:("D_801FD29C","UNK_TYPE1","",0x1), - 0x801FD2A0:("D_801FD2A0","UNK_TYPE1","",0x1), - 0x801FD2A8:("D_801FD2A8","UNK_TYPE1","",0x1), + 0x801FD1F0:("sSfxSettings","UNK_TYPE1","",0x1), + 0x801FD250:("sSfxSettingsFlags","UNK_TYPE1","",0x1), + 0x801FD254:("sTwoSemitonesLoweredFreq","UNK_TYPE1","",0x1), + 0x801FD258:("sSfxIncreasedReverb","UNK_TYPE1","",0x1), + 0x801FD25C:("sSfxSyncedVolume","UNK_TYPE1","",0x1), + 0x801FD260:("sSfxSyncedVolumeForMetalEffects","UNK_TYPE1","",0x1), + 0x801FD264:("sSfxSyncedFreq","UNK_TYPE1","",0x1), + 0x801FD268:("sRiverFreqScaleLerp","UNK_TYPE1","",0x1), + 0x801FD278:("sWaterfallFreqScaleLerp","UNK_TYPE1","",0x1), + 0x801FD288:("sSfxAdjustedFreq","UNK_TYPE1","",0x1), + 0x801FD28C:("sSfxCustomReverb","UNK_TYPE1","",0x1), + 0x801FD28D:("sRiverSoundMainBgmVol","UNK_TYPE1","",0x1), + 0x801FD28E:("sRiverSoundMainBgmCurrentVol","UNK_TYPE1","",0x1), + 0x801FD28F:("sRiverSoundMainBgmLower","UNK_TYPE1","",0x1), + 0x801FD290:("sRiverSoundMainBgmRestore","UNK_TYPE1","",0x1), + 0x801FD291:("sGanonsTowerVol","UNK_TYPE1","",0x1), + 0x801FD294:("sSfxVolumeCur","UNK_TYPE1","",0x1), + 0x801FD298:("sSfxVolumeTarget","UNK_TYPE1","",0x1), + 0x801FD29C:("sSfxVolumeRate","UNK_TYPE1","",0x1), + 0x801FD2A0:("sSceneSeqId1","UNK_TYPE1","",0x1), + 0x801FD2A8:("sSfxChannelState","UNK_TYPE1","",0x1), 0x801FD3A8:("D_801FD3A8","UNK_TYPE1","",0x1), 0x801FD3A9:("D_801FD3A9","UNK_TYPE1","",0x1), - 0x801FD3AA:("D_801FD3AA","UNK_TYPE1","",0x1), - 0x801FD3AB:("D_801FD3AB","UNK_TYPE1","",0x1), - 0x801FD3AC:("D_801FD3AC","UNK_TYPE1","",0x1), - 0x801FD3AE:("D_801FD3AE","UNK_TYPE1","",0x1), - 0x801FD3AF:("D_801FD3AF","UNK_TYPE1","",0x1), - 0x801FD3B0:("D_801FD3B0","UNK_TYPE1","",0x1), - 0x801FD3B4:("D_801FD3B4","UNK_TYPE1","",0x1), - 0x801FD3B7:("D_801FD3B7","UNK_TYPE1","",0x1), - 0x801FD3B8:("D_801FD3B8","UNK_TYPE1","",0x1), - 0x801FD3D8:("D_801FD3D8","UNK_TYPE1","",0x1), - 0x801FD3D9:("D_801FD3D9","UNK_TYPE1","",0x1), - 0x801FD3DA:("D_801FD3DA","UNK_TYPE1","",0x1), - 0x801FD3E0:("D_801FD3E0","UNK_TYPE1","",0x1), - 0x801FD3EC:("D_801FD3EC","UNK_TYPE1","",0x1), - 0x801FD3F0:("D_801FD3F0","UNK_TYPE1","",0x1), - 0x801FD3FC:("D_801FD3FC","UNK_TYPE1","",0x1), - 0x801FD400:("D_801FD400","UNK_TYPE1","",0x1), - 0x801FD404:("D_801FD404","UNK_TYPE1","",0x1), - 0x801FD408:("D_801FD408","UNK_TYPE1","",0x1), - 0x801FD40C:("D_801FD40C","UNK_TYPE1","",0x1), - 0x801FD410:("D_801FD410","UNK_TYPE1","",0x1), - 0x801FD420:("D_801FD420","UNK_TYPE1","",0x1), - 0x801FD42C:("D_801FD42C","UNK_TYPE1","",0x1), - 0x801FD430:("D_801FD430","UNK_TYPE1","",0x1), - 0x801FD431:("D_801FD431","UNK_TYPE1","",0x1), + 0x801FD3AA:("sRiverSoundBgmTimer","UNK_TYPE1","",0x1), + 0x801FD3AB:("sFanfareState","UNK_TYPE1","",0x1), + 0x801FD3AC:("sFanfareSeqId","UNK_TYPE1","",0x1), + 0x801FD3AE:("sMuteOnlySfxAndNatureSeq","UNK_TYPE1","",0x1), + 0x801FD3AF:("sAllPlayersMutedExceptOcaAndSys","UNK_TYPE1","",0x1), + 0x801FD3B0:("sAudioPauseState","UNK_TYPE1","",0x1), + 0x801FD3B4:("sSpatialSeqIsActive","u8","[4]",0x4), + 0x801FD3B8:("sSequenceFilter","UNK_TYPE1","",0x1), + 0x801FD3D8:("sIsFinalHoursOrSoaring","UNK_TYPE1","",0x1), + 0x801FD3D9:("sObjSoundFanfareSeqId","UNK_TYPE1","",0x1), + 0x801FD3DA:("sObjSoundFanfareRequested","UNK_TYPE1","",0x1), + 0x801FD3E0:("sObjSoundFanfarePos","UNK_TYPE1","",0x1), + 0x801FD3EC:("sObjSoundPlayerIdx","UNK_TYPE1","",0x1), + 0x801FD3F0:("sObjSoundPos","UNK_TYPE1","",0x1), + 0x801FD3FC:("sObjSoundFlags","UNK_TYPE1","",0x1), + 0x801FD400:("sObjSoundMinDist","UNK_TYPE1","",0x1), + 0x801FD404:("sObjSoundMaxDist","UNK_TYPE1","",0x1), + 0x801FD408:("sObjSoundMaxVol","UNK_TYPE1","",0x1), + 0x801FD40C:("sObjSoundMinVol","UNK_TYPE1","",0x1), + 0x801FD410:("sSpatialSeqNoFilterPos","UNK_TYPE1","",0x1), + 0x801FD420:("sSpatialSeqFilterPos","UNK_TYPE1","",0x1), + 0x801FD42C:("sSpatialSeqMaxDist","UNK_TYPE1","",0x1), + 0x801FD430:("sSpatialSeqSeqId","UNK_TYPE1","",0x1), + 0x801FD431:("sSpatialSeqFlags","UNK_TYPE1","",0x1), 0x801FD432:("D_801FD432","UNK_TYPE1","",0x1), - 0x801FD433:("D_801FD433","UNK_TYPE1","",0x1), + 0x801FD433:("sSpatialSubBgmFadeTimer","UNK_TYPE1","",0x1), 0x801FD434:("D_801FD434","UNK_TYPE1","",0x1), - 0x801FD435:("D_801FD435","UNK_TYPE1","",0x1), - 0x801FD436:("D_801FD436","UNK_TYPE1","",0x1), + 0x801FD435:("sSpatialSeqPlayerIdx","UNK_TYPE1","",0x1), + 0x801FD436:("sSpatialSeqFadeTimer","UNK_TYPE1","",0x1), 0x801FD438:("D_801FD438","UNK_TYPE1","",0x1), - 0x801FD43A:("D_801FD43A","UNK_TYPE1","",0x1), - 0x801FD43B:("D_801FD43B","UNK_TYPE1","",0x1), - 0x801FD43E:("D_801FD43E","UNK_TYPE1","",0x1), - 0x801FD442:("D_801FD442","UNK_TYPE1","",0x1), - 0x801FD448:("D_801FD448","UNK_TYPE1","",0x1), - 0x801FD44C:("D_801FD44C","UNK_TYPE1","",0x1), - 0x801FD44D:("D_801FD44D","UNK_TYPE1","",0x1), - 0x801FD450:("D_801FD450","UNK_TYPE1","",0x1), - 0x801FD454:("D_801FD454","UNK_TYPE1","",0x1), - 0x801FD458:("D_801FD458","UNK_TYPE1","",0x1), - 0x801FD45C:("D_801FD45C","UNK_TYPE1","",0x1), - 0x801FD460:("D_801FD460","UNK_TYPE1","",0x1), - 0x801FD461:("D_801FD461","UNK_TYPE1","",0x1), - 0x801FD462:("D_801FD462","UNK_TYPE1","",0x1), - 0x801FD463:("D_801FD463","UNK_TYPE1","",0x1), - 0x801FD464:("D_801FD464","UNK_TYPE1","",0x1), - 0x801FD468:("D_801FD468","UNK_TYPE1","",0x1), - 0x801FD46C:("D_801FD46C","UNK_TYPE1","",0x1), - 0x801FD470:("D_801FD470","UNK_TYPE1","",0x1), - 0x801FD4A0:("D_801FD4A0","UNK_TYPE1","",0x1), - 0x801FD4D0:("D_801FD4D0","UNK_TYPE1","",0x1), - 0x801FD500:("D_801FD500","UNK_TYPE1","",0x1), + 0x801FD43A:("sPlayingStaff","OcarinaStaff","",0x3), + 0x801FD43E:("sPlaybackStaff","OcarinaStaff","",0x3), + 0x801FD442:("sRecordingStaff","OcarinaStaff","",0x3), + 0x801FD448:("sOcarinaUpdateTaskCurrent","UNK_TYPE1","",0x1), + 0x801FD44C:("sOcarinaInputStickRel","OcarinaControlStick","",0x2), + 0x801FD450:("sOcarinaInputButtonCur","UNK_TYPE1","",0x1), + 0x801FD454:("sOcarinaInputButtonStart","UNK_TYPE1","",0x1), + 0x801FD458:("sOcarinaInputButtonPrev","UNK_TYPE1","",0x1), + 0x801FD45C:("sOcaInputBtnPress","UNK_TYPE1","",0x1), + 0x801FD460:("sOcarinaResetDelay","UNK_TYPE1","",0x1), + 0x801FD461:("sOcarinaResetUnused","UNK_TYPE1","",0x1), + 0x801FD462:("sOcarinaHasStartedSong","UNK_TYPE1","",0x1), + 0x801FD463:("sFirstOcarinaSongIdx","UNK_TYPE1","",0x1), + 0x801FD464:("sLastOcarinaSongIdx","UNK_TYPE1","",0x1), + 0x801FD468:("sOcarinaAvailSongs","UNK_TYPE1","",0x1), + 0x801FD46C:("sOcarinaStaffPlayingPos","UNK_TYPE1","",0x1), + 0x801FD470:("sMusicStaffPos","UNK_TYPE1","",0x1), + 0x801FD4A0:("sMusicStaffCurHeldLength","UNK_TYPE1","",0x1), + 0x801FD4D0:("sMusicStaffExpectedLength","UNK_TYPE1","",0x1), + 0x801FD500:("sMusicStaffExpectedPitch","UNK_TYPE1","",0x1), 0x801FD518:("D_801FD518","UNK_TYPE1","",0x1), - 0x801FD530:("D_801FD530","UNK_TYPE1","",0x1), - 0x801FD533:("D_801FD533","UNK_TYPE1","",0x1), - 0x801FD590:("D_801FD590","UNK_TYPE1","",0x1), - 0x801FD598:("D_801FD598","UNK_TYPE1","",0x1), + 0x801FD530:("D_801FD530","u32","[24]",0x60), + 0x801FD590:("sRecordingSongNote","UNK_TYPE1","",0x1), + 0x801FD598:("sCustomSequencePc","UNK_TYPE1","",0x1), 0x801FD5A0:("D_801FD5A0","UNK_TYPE1","",0x1), 0x801FD5A4:("D_801FD5A4","UNK_TYPE1","",0x1), 0x801FD5B8:("D_801FD5B8","UNK_TYPE1","",0x1),