summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorengineer124 <47598039+engineer124@users.noreply.github.com>2022-02-14 12:38:46 +1100
committerGitHub <noreply@github.com>2022-02-14 01:38:46 +0000
commit01ca078226f37a2ba5be90e957ffe081db059fdf (patch)
tree2d77e89539aea740d5042d0bedf5967182a32a01 /src/code
parent7565f9f052e5761ff9ffffacf8b5ca66cb346f4d (diff)
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
Diffstat (limited to 'src/code')
-rw-r--r--src/code/audio/code_8019AF00.c1887
1 files changed, 1885 insertions, 2 deletions
diff --git a/src/code/audio/code_8019AF00.c b/src/code/audio/code_8019AF00.c
index 5d0a166a2..3a498178c 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")