summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorengineer124 <47598039+engineer124@users.noreply.github.com>2022-09-30 07:49:35 -0400
committerGitHub <noreply@github.com>2022-09-30 08:49:35 -0300
commit1af942ae12499c90bb4ebe2d37988d2234f8605e (patch)
tree398171a2c50afaa51d072a9d50de317f83aba79d /src/code
parent3a723efb15c4d3e044edda7979b1cde5588c0aeb (diff)
Audio Sequences: Scene/Ambience/SeqFlags Functions OK (#1033)
* import audio scene seq docs * cleanup * fix scene cmd * small fixes * more PR suggestions * missed comment * rename spot to resume * cleanup comments * SEQ_IO_VAL_NONE * Empty-Commit * another PR suggestion
Diffstat (limited to 'src/code')
-rw-r--r--src/code/audio/audio_seqplayer.c12
-rw-r--r--src/code/audio/code_8019AF00.c1656
-rw-r--r--src/code/audio/code_801A5BD0.c2
-rw-r--r--src/code/audio/code_801A7B10.c4
-rw-r--r--src/code/game.c2
-rw-r--r--src/code/graph.c2
-rw-r--r--src/code/z_common_data.c4
-rw-r--r--src/code/z_demo.c30
-rw-r--r--src/code/z_game_over.c6
-rw-r--r--src/code/z_scene.c9
10 files changed, 1154 insertions, 573 deletions
diff --git a/src/code/audio/audio_seqplayer.c b/src/code/audio/audio_seqplayer.c
index ea5c5ed5e..a8573e33d 100644
--- a/src/code/audio/audio_seqplayer.c
+++ b/src/code/audio/audio_seqplayer.c
@@ -315,7 +315,7 @@ void AudioSeq_InitSequenceChannel(SequenceChannel* channel) {
channel->freqScale = 1.0f;
for (i = 0; i < ARRAY_COUNT(channel->soundScriptIO); i++) {
- channel->soundScriptIO[i] = -1;
+ channel->soundScriptIO[i] = SEQ_IO_VAL_NONE;
}
channel->unused = false;
@@ -1791,12 +1791,12 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
case 0x10: // channel: load sample
if (lowBits < 8) {
- channel->soundScriptIO[lowBits] = -1;
+ channel->soundScriptIO[lowBits] = SEQ_IO_VAL_NONE;
if (AudioLoad_SlowLoadSample(channel->fontId, scriptState->value,
&channel->soundScriptIO[lowBits]) == -1) {}
} else {
lowBits -= 8;
- channel->soundScriptIO[lowBits] = -1;
+ channel->soundScriptIO[lowBits] = SEQ_IO_VAL_NONE;
if (AudioLoad_SlowLoadSample(channel->fontId, channel->unk_22 + 0x100,
&channel->soundScriptIO[lowBits]) == -1) {}
}
@@ -1805,7 +1805,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
case 0x60: // channel: io read value
scriptState->value = channel->soundScriptIO[lowBits];
if (lowBits < 2) {
- channel->soundScriptIO[lowBits] = -1;
+ channel->soundScriptIO[lowBits] = SEQ_IO_VAL_NONE;
}
break;
@@ -2150,7 +2150,7 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
case 0x80: // seqPlayer: io read value
seqScript->value = seqPlayer->soundScriptIO[cmdLowBits];
if (cmdLowBits < 2) {
- seqPlayer->soundScriptIO[cmdLowBits] = -1;
+ seqPlayer->soundScriptIO[cmdLowBits] = SEQ_IO_VAL_NONE;
}
break;
@@ -2286,7 +2286,7 @@ void AudioSeq_InitSequencePlayer(SequencePlayer* seqPlayer) {
seqPlayer->applyBend = false;
for (j = 0; j < ARRAY_COUNT(seqPlayer->soundScriptIO); j++) {
- seqPlayer->soundScriptIO[j] = -1;
+ seqPlayer->soundScriptIO[j] = SEQ_IO_VAL_NONE;
}
seqPlayer->muteFlags = MUTE_FLAGS_SOFTEN | MUTE_FLAGS_STOP_NOTES;
diff --git a/src/code/audio/code_8019AF00.c b/src/code/audio/code_8019AF00.c
index b896facbc..007d7ca85 100644
--- a/src/code/audio/code_8019AF00.c
+++ b/src/code/audio/code_8019AF00.c
@@ -6,12 +6,6 @@ typedef struct {
} 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;
@@ -67,8 +61,30 @@ typedef struct {
} FreqLerp; // size = 0x10
s32 AudioOcarina_MemoryGameNextNote(void);
+
+void AudioSfx_ProcessSfxSettings(void);
+void func_8019FEDC(void);
+void Audio_StepFreqLerp(FreqLerp* lerp);
+
s32 Audio_SetGanonsTowerBgmVolume(u8 targetVolume);
-void func_801A3238(s8 playerIndex, u16 seqId, u8 fadeTimer, s8 arg3, u8 arg4);
+
+void Audio_StartMorningSceneSequence(u16 seqId);
+void Audio_StartSceneSequence(u16 seqId);
+void Audio_PlaySequenceWithSeqPlayerIO(s8 playerIndex, u16 seqId, u8 fadeTimer, s8 arg3, u8 arg4);
+void func_801A4428(u8 reverbIndex);
+void func_801A3038(void);
+void Audio_PlayAmbience(u8 ambienceId);
+void Audio_SetSfxVolumeExceptSystemAndOcarinaBanks(u8 volume);
+
+void Audio_UpdateRiverSoundVolumes(void);
+void func_801A1290(void);
+void func_801A1904(void);
+void func_801A1E0C(void);
+void func_801A2090(void);
+void Audio_UpdateSceneSequenceResumePoint(void);
+void func_801A312C(void);
+void func_801A3AC0(void);
+void Audio_ResetRequestedSceneSeqId(void);
// Sfx bss
SfxSettings sSfxSettings[8];
@@ -90,7 +106,7 @@ u8 sGanonsTowerVol;
f32* sSfxVolumeCur;
f32 sSfxVolumeTarget;
f32 sSfxVolumeRate;
-u16 sSceneSeqId1;
+u16 sRequestedSceneSeqId;
SfxChannelState sSfxChannelState[16];
// Sequence bss
@@ -99,7 +115,7 @@ u8 D_801FD3A9;
u8 sRiverSoundBgmTimer;
u8 sFanfareState;
u16 sFanfareSeqId;
-u8 sMuteOnlySfxAndNatureSeq;
+u8 sMuteOnlySfxAndAmbienceSeq;
u8 sAllPlayersMutedExceptOcaAndSys;
u8 sAudioPauseState;
u8 sSpatialSeqIsActive[4];
@@ -125,7 +141,7 @@ u8 sSpatialSubBgmFadeTimer;
u8 D_801FD434;
u8 sSpatialSeqPlayerIndex;
u8 sSpatialSeqFadeTimer;
-u16 D_801FD438;
+u16 sPrevAmbienceSeqId;
// AudioOcarina bss
OcarinaStaff sPlayingStaff;
@@ -202,11 +218,14 @@ s8 sAudioCodeReverb = 0;
// Sequence Data
u8 sPrevSeqMode = 0;
-f32 sAudioEnemyDist = 0.0f;
-s8 sAudioEnemyVol = 127;
+f32 sBgmEnemyDist = 0.0f;
+s8 sBgmEnemyVolume = 127;
u16 sPrevMainBgmSeqId = NA_BGM_DISABLED;
-u8 sBgmPlayerIOPort7 = 0;
-u8 sSceneSeqId2 = NA_BGM_GENERAL_SFX;
+
+#define SEQ_RESUME_POINT_NONE 0xC0
+u8 sSeqResumePoint = 0;
+u8 sPrevSceneSeqId = NA_BGM_GENERAL_SFX;
+
u32 sNumFramesStill = 0;
u32 sNumFramesMoving = 0;
u8 sAudioBaseFilter = 0;
@@ -217,768 +236,893 @@ s8 gUnderwaterSfxReverbAdd = 0;
Vec3f* sRiverSoundBgmPos = NULL;
f32 sRiverSoundXZDistToPlayer = 2000.0f;
u8 sObjSoundMainBgmSeqId = NA_BGM_GENERAL_SFX;
+
+// Allows enemy bgm
+#define SEQ_FLAG_ENEMY (1 << 0)
+
+#define SEQ_FLAG_FANFARE (1 << 1)
+#define SEQ_FLAG_FANFARE_KAMARO (1 << 2)
+
+// required for Audio_RestorePrevBgm to restore a sequence after Audio_PlayBgm_StorePrevBgm
+#define SEQ_FLAG_RESTORE (1 << 3)
+
+/**
+ * These two sequence flags work together to implement a “resume playing from where you left off” system for scene
+ * sequences when leaving and returning to a scene. For a scene to resume playing from the point where it left off, it
+ * must have `SEQ_FLAG_RESUME` attached to it. Then, if the scene changes and the new scene sequence contain
+ * `SEQ_FLAG_RESUME_PREV`, the point from the previous scene sequence will be stored. Then, when returning to the
+ * scene with the sequence `SEQ_FLAG_RESUME`, then the sequence will resume playing from where it left off.
+ *
+ * TODO: Confirm which sequences properly implement this system after sequence extraction
+ */
+#define SEQ_FLAG_RESUME (1 << 4)
+#define SEQ_FLAG_RESUME_PREV (1 << 5)
+
+/**
+ * Will write a value of 1 to ioPort 7 when called through the scene. How it's used depends on the sequence:
+ * NA_BGM_FILE_SELECT - ioPort 7 skips the harp intro when a value of 1 is written to it.
+ */
+#define SEQ_FLAG_SKIP_HARP_INTRO (1 << 6)
+
+// Unused, repurposed for SubBgm
+#define SEQ_FLAG_NO_AMBIENCE (1 << 7)
+
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
+ SEQ_FLAG_FANFARE | SEQ_FLAG_ENEMY, // NA_BGM_GENERAL_SFX
+ SEQ_FLAG_ENEMY, // NA_BGM_AMBIENCE
+ SEQ_FLAG_ENEMY, // NA_BGM_TERMINA_FIELD
+ SEQ_FLAG_RESTORE, // NA_BGM_CHASE
+ 0, // NA_BGM_MAJORAS_THEME
+ 0, // NA_BGM_CLOCK_TOWER
+ SEQ_FLAG_ENEMY, // NA_BGM_STONE_TOWER_TEMPLE
+ SEQ_FLAG_ENEMY, // NA_BGM_INV_STONE_TOWER_TEMPLE
+ SEQ_FLAG_FANFARE, // NA_BGM_FAILURE_0
+ SEQ_FLAG_FANFARE, // NA_BGM_FAILURE_1
+ 0, // NA_BGM_HAPPY_MASK_SALESMAN
+ 0, // NA_BGM_SONG_OF_HEALING
+ SEQ_FLAG_ENEMY, // NA_BGM_SWAMP_REGION
+ 0, // NA_BGM_ALIEN_INVASION
+ SEQ_FLAG_FANFARE, // NA_BGM_SWAMP_CRUISE
+ 0, // NA_BGM_SHARPS_CURSE
+ SEQ_FLAG_ENEMY, // NA_BGM_GREAT_BAY_REGION
+ SEQ_FLAG_ENEMY, // NA_BGM_IKANA_REGION
+ 0, // NA_BGM_DEKU_KING
+ SEQ_FLAG_ENEMY, // 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
+ SEQ_FLAG_SKIP_HARP_INTRO, // NA_BGM_FILE_SELECT
+ SEQ_FLAG_RESUME, // NA_BGM_CLEAR_EVENT
+ 0, // NA_BGM_ENEMY
+ SEQ_FLAG_RESTORE, // NA_BGM_BOSS
+ SEQ_FLAG_ENEMY, // NA_BGM_WOODFALL_TEMPLE
+ 0, // NA_BGM_MARKET
+ 0, // NA_BGM_OPENING
+ SEQ_FLAG_RESUME_PREV, // NA_BGM_INSIDE_A_HOUSE
+ SEQ_FLAG_FANFARE, // NA_BGM_GAME_OVER
+ 0, // NA_BGM_CLEAR_BOSS
+ SEQ_FLAG_FANFARE, // NA_BGM_GET_ITEM
+ SEQ_FLAG_FANFARE, // NA_BGM_GATE_OPEN
+ SEQ_FLAG_FANFARE, // NA_BGM_GET_HEART
+ SEQ_FLAG_RESTORE, // 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
+ SEQ_FLAG_FANFARE, // NA_BGM_OPEN_CHEST
+ 0, // NA_BGM_MARINE_RESEARCH_LAB
+ SEQ_FLAG_SKIP_HARP_INTRO, // 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
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_EPONA
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_SUNS
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_TIME
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_STORM
+ SEQ_FLAG_RESUME, // NA_BGM_ZORA_HALL
+ SEQ_FLAG_FANFARE, // NA_BGM_GET_NEW_MASK
+ SEQ_FLAG_RESTORE, // NA_BGM_MINI_BOSS
+ SEQ_FLAG_FANFARE, // NA_BGM_GET_SMALL_ITEM
+ 0, // NA_BGM_ASTRAL_OBSERVATORY
+ SEQ_FLAG_ENEMY, // NA_BGM_CAVERN
+ SEQ_FLAG_RESUME | SEQ_FLAG_ENEMY, // NA_BGM_MILK_BAR
+ SEQ_FLAG_FANFARE, // 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
+ SEQ_FLAG_RESUME_PREV, // NA_BGM_SHOP
+ SEQ_FLAG_FANFARE, // NA_BGM_OWL
+ SEQ_FLAG_RESUME_PREV, // NA_BGM_MINI_GAME
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_SOARING
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_HEALING
+ SEQ_FLAG_FANFARE, // NA_BGM_INVERTED_SONG_OF_TIME
+ SEQ_FLAG_FANFARE, // NA_BGM_SONG_OF_DOUBLE_TIME
+ SEQ_FLAG_FANFARE, // NA_BGM_SONATA_OF_AWAKENING
+ SEQ_FLAG_FANFARE, // NA_BGM_GORON_LULLABY
+ SEQ_FLAG_FANFARE, // NA_BGM_NEW_WAVE_BOSSA_NOVA
+ SEQ_FLAG_FANFARE, // NA_BGM_ELEGY_OF_EMPTINESS
+ SEQ_FLAG_FANFARE, // NA_BGM_OATH_TO_ORDER
+ 0, // NA_BGM_SWORD_TRAINING_HALL
+ SEQ_FLAG_FANFARE, // NA_BGM_GORON_LULLABY_INTRO
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_FAIRY
+ SEQ_FLAG_FANFARE, // NA_BGM_BREMEN_MARCH
+ SEQ_FLAG_FANFARE, // NA_BGM_BALLAD_OF_THE_WIND_FISH
+ SEQ_FLAG_RESTORE, // NA_BGM_SONG_OF_SOARING
+ 0, // NA_BGM_MILK_BAR_DUPLICATE
+ 0, // NA_BGM_FINAL_HOURS
+ SEQ_FLAG_FANFARE, // NA_BGM_MIKAU_RIFF
+ SEQ_FLAG_FANFARE, // NA_BGM_MIKAU_FINALE
+ 0, // NA_BGM_FROG_SONG
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_SONATA
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_LULLABY
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_NEW_WAVE
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_ELEGY
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_OATH
+ 0, // NA_BGM_MAJORAS_LAIR
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_LULLABY_INTRO
+ SEQ_FLAG_FANFARE, // NA_BGM_OCA_GUITAR_BASS_SESSION
+ SEQ_FLAG_FANFARE, // NA_BGM_PIANO_SESSION
+ SEQ_FLAG_FANFARE, // NA_BGM_INDIGO_GO_SESSION
+ SEQ_FLAG_ENEMY, // NA_BGM_SNOWHEAD_TEMPLE
+ SEQ_FLAG_ENEMY, // NA_BGM_GREAT_BAY_TEMPLE
+ SEQ_FLAG_FANFARE, // NA_BGM_NEW_WAVE_SAXOPHONE
+ SEQ_FLAG_FANFARE, // NA_BGM_NEW_WAVE_VOCAL
+ 0, // NA_BGM_MAJORAS_WRATH
+ 0, // NA_BGM_MAJORAS_INCARNATION
+ 0, // NA_BGM_MAJORAS_MASK
+ SEQ_FLAG_FANFARE, // NA_BGM_BASS_PLAY
+ SEQ_FLAG_FANFARE, // NA_BGM_DRUMS_PLAY
+ SEQ_FLAG_FANFARE, // NA_BGM_PIANO_PLAY
+ SEQ_FLAG_ENEMY, // NA_BGM_IKANA_CASTLE
+ 0, // NA_BGM_GATHERING_GIANTS
+ SEQ_FLAG_FANFARE_KAMARO, // NA_BGM_KAMARO_DANCE
+ 0, // NA_BGM_CREMIA_CARRIAGE
+ SEQ_FLAG_FANFARE, // NA_BGM_KEATON_QUIZ
+ 0, // NA_BGM_END_CREDITS_1
+ 0, // NA_BGM_OPENING_LOOP
+ 0, // NA_BGM_TITLE_THEME
+ SEQ_FLAG_FANFARE, // NA_BGM_DUNGEON_APPEAR
+ SEQ_FLAG_FANFARE, // NA_BGM_WOODFALL_CLEAR
+ SEQ_FLAG_FANFARE, // 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] = {
+s8 sSpecReverbs[] = {
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
+#define AMBIENCE_CHANNEL_PROPERTIES_ENTRIES_MAX 33
+
+typedef struct {
+ /* 0x0 */ u16 initChannelMask; // bitwise flag for 16 channels, channels to initialize
+ /* 0x2 */ u16 initMuteChannelMask; // bitwise flag for 16 channels, channels to mute upon initialization
+ /* 0x4 */ u8 channelProperties[3 * AMBIENCE_CHANNEL_PROPERTIES_ENTRIES_MAX + 1];
+} AmbienceDataIO; // size = 0x68
+
+AmbienceDataIO sAmbienceData[20] = {
+ // AMBIENCE_ID_00
{
- 0xC0FF, // PlayerIO Data
- 0xC0FE, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_2) | (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_5) | (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) | (1 << AMBIENCE_CHANNEL_CRITTER_2) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) | (1 << AMBIENCE_CHANNEL_CRITTER_5) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_09),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(64),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_1_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_1_BEND_PITCH(0),
+ AMBIENCE_IO_CRITTER_1_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_2_TYPE(AMBIENCE_CRITTER_10),
+ AMBIENCE_IO_CRITTER_2_BEND_PITCH(112),
+ AMBIENCE_IO_CRITTER_2_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_3_TYPE(AMBIENCE_CRITTER_03),
+ AMBIENCE_IO_CRITTER_3_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_3_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_4_TYPE(AMBIENCE_CRITTER_00),
+ AMBIENCE_IO_CRITTER_4_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_4_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_5_TYPE(AMBIENCE_CRITTER_01),
+ AMBIENCE_IO_CRITTER_5_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_5_NUM_LAYERS(3),
+ AMBIENCE_IO_CRITTER_5_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 1
+ // AMBIENCE_ID_01
{
- 0xC0FF, // PlayerIO Data
- 0xC0FE, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_2) | (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_5) | (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) | (1 << AMBIENCE_CHANNEL_CRITTER_2) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) | (1 << AMBIENCE_CHANNEL_CRITTER_5) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(64),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_1_TYPE(AMBIENCE_CRITTER_16),
+ AMBIENCE_IO_CRITTER_1_BEND_PITCH(0),
+ AMBIENCE_IO_CRITTER_1_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_2_TYPE(AMBIENCE_CRITTER_12),
+ AMBIENCE_IO_CRITTER_2_BEND_PITCH(112),
+ AMBIENCE_IO_CRITTER_2_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_3_TYPE(AMBIENCE_CRITTER_15),
+ AMBIENCE_IO_CRITTER_3_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_3_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_4_TYPE(AMBIENCE_CRITTER_06),
+ AMBIENCE_IO_CRITTER_4_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_4_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_5_TYPE(AMBIENCE_CRITTER_01),
+ AMBIENCE_IO_CRITTER_5_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_5_NUM_LAYERS(3),
+ AMBIENCE_IO_CRITTER_5_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 2
+ // AMBIENCE_ID_02
{
- 0xC0FF, // PlayerIO Data
- 0xC0FE, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_2) | (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_5) | (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) | (1 << AMBIENCE_CHANNEL_CRITTER_2) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) | (1 << AMBIENCE_CHANNEL_CRITTER_5) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(64),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_1_TYPE(AMBIENCE_CRITTER_10),
+ AMBIENCE_IO_CRITTER_1_BEND_PITCH(0),
+ AMBIENCE_IO_CRITTER_1_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_2_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_2_BEND_PITCH(48),
+ AMBIENCE_IO_CRITTER_2_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_3_TYPE(AMBIENCE_CRITTER_03),
+ AMBIENCE_IO_CRITTER_3_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_3_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_4_TYPE(AMBIENCE_CRITTER_01),
+ AMBIENCE_IO_CRITTER_4_BEND_PITCH(64),
+ AMBIENCE_IO_CRITTER_4_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_5_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_5_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_5_NUM_LAYERS(0),
+ AMBIENCE_IO_CRITTER_5_PORT5(63),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 3
+ // AMBIENCE_ID_03
{
- 0xC0FF, // PlayerIO Data
- 0xC0FE, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_2) | (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_5) | (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) | (1 << AMBIENCE_CHANNEL_CRITTER_2) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) | (1 << AMBIENCE_CHANNEL_CRITTER_5) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_09),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(64),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_1_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_1_BEND_PITCH(64),
+ AMBIENCE_IO_CRITTER_1_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_2_TYPE(AMBIENCE_CRITTER_10),
+ AMBIENCE_IO_CRITTER_2_BEND_PITCH(32),
+ AMBIENCE_IO_CRITTER_2_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_3_TYPE(AMBIENCE_CRITTER_14),
+ AMBIENCE_IO_CRITTER_3_BEND_PITCH(64),
+ AMBIENCE_IO_CRITTER_3_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_4_TYPE(AMBIENCE_CRITTER_00),
+ AMBIENCE_IO_CRITTER_4_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_4_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_5_TYPE(AMBIENCE_CRITTER_01),
+ AMBIENCE_IO_CRITTER_5_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_5_NUM_LAYERS(3),
+ AMBIENCE_IO_CRITTER_5_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 4
+ // AMBIENCE_ID_04
{
- 0xC0FF, // PlayerIO Data
- 0xC0FE, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_2) | (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_5) | (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) | (1 << AMBIENCE_CHANNEL_CRITTER_2) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) | (1 << AMBIENCE_CHANNEL_CRITTER_5) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(64),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_1_TYPE(AMBIENCE_CRITTER_02),
+ AMBIENCE_IO_CRITTER_1_BEND_PITCH(64),
+ AMBIENCE_IO_CRITTER_1_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_2_TYPE(AMBIENCE_CRITTER_12),
+ AMBIENCE_IO_CRITTER_2_BEND_PITCH(112),
+ AMBIENCE_IO_CRITTER_2_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_3_TYPE(AMBIENCE_CRITTER_13),
+ AMBIENCE_IO_CRITTER_3_BEND_PITCH(64),
+ AMBIENCE_IO_CRITTER_3_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_4_TYPE(AMBIENCE_CRITTER_01),
+ AMBIENCE_IO_CRITTER_4_BEND_PITCH(64),
+ AMBIENCE_IO_CRITTER_4_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_5_TYPE(AMBIENCE_CRITTER_02),
+ AMBIENCE_IO_CRITTER_5_BEND_PITCH(112),
+ AMBIENCE_IO_CRITTER_5_NUM_LAYERS(0),
+ AMBIENCE_IO_CRITTER_5_PORT5(48),
// Channel 14
- NATURE_IO_RAIN_PORT4(63),
+ AMBIENCE_IO_RAIN_PORT4(63),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 5
+ // AMBIENCE_ID_05
{
- 0xC0FF, // PlayerIO Data
- 0xC0FE, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_2) | (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_5) | (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) | (1 << AMBIENCE_CHANNEL_CRITTER_2) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) | (1 << AMBIENCE_CHANNEL_CRITTER_5) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_09),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(64),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_1_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_1_BEND_PITCH(0),
+ AMBIENCE_IO_CRITTER_1_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_2_TYPE(AMBIENCE_CRITTER_10),
+ AMBIENCE_IO_CRITTER_2_BEND_PITCH(112),
+ AMBIENCE_IO_CRITTER_2_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_3_TYPE(AMBIENCE_CRITTER_13),
+ AMBIENCE_IO_CRITTER_3_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_3_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_4_TYPE(AMBIENCE_CRITTER_00),
+ AMBIENCE_IO_CRITTER_4_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_4_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_5_TYPE(AMBIENCE_CRITTER_01),
+ AMBIENCE_IO_CRITTER_5_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_5_NUM_LAYERS(3),
+ AMBIENCE_IO_CRITTER_5_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 6
+ // AMBIENCE_ID_06
{
- 0xC0FF, // PlayerIO Data
- 0xC0FE, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_2) | (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_5) | (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) | (1 << AMBIENCE_CHANNEL_CRITTER_2) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_3) | (1 << AMBIENCE_CHANNEL_CRITTER_4) | (1 << AMBIENCE_CHANNEL_CRITTER_5) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_11),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(112),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_1_TYPE(AMBIENCE_CRITTER_15),
+ AMBIENCE_IO_CRITTER_1_BEND_PITCH(112),
+ AMBIENCE_IO_CRITTER_1_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_2_TYPE(AMBIENCE_CRITTER_11),
+ AMBIENCE_IO_CRITTER_2_BEND_PITCH(48),
+ AMBIENCE_IO_CRITTER_2_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_3_TYPE(AMBIENCE_CRITTER_14),
+ AMBIENCE_IO_CRITTER_3_BEND_PITCH(48),
+ AMBIENCE_IO_CRITTER_3_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_4_TYPE(AMBIENCE_CRITTER_11),
+ AMBIENCE_IO_CRITTER_4_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_4_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_5_TYPE(AMBIENCE_CRITTER_02),
+ AMBIENCE_IO_CRITTER_5_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_5_NUM_LAYERS(0),
+ AMBIENCE_IO_CRITTER_5_PORT5(48),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 7
+ // AMBIENCE_ID_07
{
- 0xC001, // PlayerIO Data
- 0xC000, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_IO_STREAM_0_PORT3(0),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 8
+ // AMBIENCE_ID_08
{
- 0xC003, // PlayerIO Data
- 0xC000, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_01),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(3),
+ AMBIENCE_IO_CRITTER_0_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 9
+ // AMBIENCE_ID_09
{
- 0xC00F, // PlayerIO Data
- 0xC000, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_2) | (1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_16),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(0),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(2),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_1_TYPE(AMBIENCE_CRITTER_12),
+ AMBIENCE_IO_CRITTER_1_BEND_PITCH(112),
+ AMBIENCE_IO_CRITTER_1_NUM_LAYERS(0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_2_TYPE(AMBIENCE_CRITTER_15),
+ AMBIENCE_IO_CRITTER_2_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_2_NUM_LAYERS(1),
+ AMBIENCE_IO_CRITTER_2_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 10
+ // AMBIENCE_ID_0A
{
- 0xC081, // PlayerIO Data
- 0xC000, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_6) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_1),
- NATURE_IO_STREAM_0_PORT3(8),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_6_TYPE(AMBIENCE_CRITTER_11),
+ AMBIENCE_IO_CRITTER_6_BEND_PITCH(112),
+ AMBIENCE_IO_CRITTER_6_NUM_LAYERS(2),
+ AMBIENCE_IO_CRITTER_6_PORT5(32),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 11
+ // AMBIENCE_ID_0B
{
- 0xC00F, // PlayerIO Data
- 0xC000, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) |
+ (1 << AMBIENCE_CHANNEL_CRITTER_2) | (1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_3),
- NATURE_IO_STREAM_0_PORT3(8),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_3),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_01),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(3),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_1_TYPE(AMBIENCE_CRITTER_00),
+ AMBIENCE_IO_CRITTER_1_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_1_NUM_LAYERS(2),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_2_TYPE(AMBIENCE_CRITTER_06),
+ AMBIENCE_IO_CRITTER_2_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_2_NUM_LAYERS(1),
+ AMBIENCE_IO_CRITTER_2_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 12
+ // AMBIENCE_ID_0C
{
- 0xC007, // PlayerIO Data
- 0xC000, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_CRITTER_1) |
+ (1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_00),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(1),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_1_TYPE(AMBIENCE_CRITTER_01),
+ AMBIENCE_IO_CRITTER_1_BEND_PITCH(127),
+ AMBIENCE_IO_CRITTER_1_NUM_LAYERS(3),
+ AMBIENCE_IO_CRITTER_1_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 13
+ // AMBIENCE_ID_0D
{
- 0xC003, // PlayerIO Data
- 0xC000, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(0),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(1),
+ AMBIENCE_IO_CRITTER_0_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 14
+ // AMBIENCE_ID_0E
{
- 0xC003, // PlayerIO Data
- 0xC000, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(0),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(1),
+ AMBIENCE_IO_CRITTER_0_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 15
+ // AMBIENCE_ID_0F
{
- 0xC003, // PlayerIO Data
- 0xC000, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(0),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(1),
+ AMBIENCE_IO_CRITTER_0_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 16
+ // AMBIENCE_ID_10
{
- 0xC003, // PlayerIO Data
- 0xC000, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(0),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(1),
+ AMBIENCE_IO_CRITTER_0_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 17
+ // AMBIENCE_ID_11
{
- 0xC003, // PlayerIO Data
- 0xC000, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(0),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(1),
+ AMBIENCE_IO_CRITTER_0_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 18
+ // AMBIENCE_ID_12
{
- 0xC000, // PlayerIO Data
- 0xC000, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
// Channel 0
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
- // natureSeqId: 19
+ // AMBIENCE_ID_13
{
- 0xC003, // PlayerIO Data
- 0xC000, // Channel Mask
+ // Init channel mask
+ ((1 << AMBIENCE_CHANNEL_STREAM_0) | (1 << AMBIENCE_CHANNEL_CRITTER_0) | (1 << AMBIENCE_CHANNEL_RAIN) |
+ (1 << AMBIENCE_CHANNEL_LIGHTNING)),
+ // Init mute channel mask
+ ((1 << AMBIENCE_CHANNEL_RAIN) | (1 << AMBIENCE_CHANNEL_LIGHTNING)),
{
- NATURE_IO_STREAM_0_TYPE(NATURE_STREAM_0),
- NATURE_IO_STREAM_0_PORT3(0),
+ AMBIENCE_IO_STREAM_0_TYPE(AMBIENCE_STREAM_0),
+ AMBIENCE_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),
+ AMBIENCE_IO_CRITTER_0_TYPE(AMBIENCE_CRITTER_04),
+ AMBIENCE_IO_CRITTER_0_BEND_PITCH(0),
+ AMBIENCE_IO_CRITTER_0_NUM_LAYERS(1),
+ AMBIENCE_IO_CRITTER_0_PORT5(16),
// End
- NATURE_IO_ENTRIES_END,
+ AMBIENCE_IO_ENTRIES_END,
},
},
@@ -3256,7 +3400,7 @@ u8 sRequestCustomSequence = false;
void AudioOcarina_SetCustomSequence(void) {
// Never passes true as sRequestCustomSequence is never set true
if (sRequestCustomSequence && gAudioContext.seqPlayers[SEQ_PLAYER_FANFARE].enabled &&
- ((u8)gAudioContext.seqPlayers[SEQ_PLAYER_FANFARE].soundScriptIO[0] == 0xFF)) {
+ ((u8)gAudioContext.seqPlayers[SEQ_PLAYER_FANFARE].soundScriptIO[0] == (u8)SEQ_IO_VAL_NONE)) {
gAudioContext.seqPlayers[SEQ_PLAYER_FANFARE].seqData = sCustomSequenceScript;
sRequestCustomSequence = false;
}
@@ -3477,17 +3621,46 @@ void AudioOcarina_ResetStaffs(void) {
D_801D8534 = 0;
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019DFF8.s")
+void Audio_Noop1(s32 arg0) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019E000.s")
+void Audio_Noop2(s32 arg0, s32 arg1) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019E00C.s")
+void Audio_Noop3(void) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019E014.s")
+void Audio_Update(void) {
+ if ((func_801A9768() == 0) && (func_801A982C() == 0)) {
+ AudioOcarina_SetCustomSequence();
+ AudioOcarina_Update();
+ func_801A5118();
+ Audio_StepFreqLerp(&sRiverFreqScaleLerp);
+ Audio_StepFreqLerp(&sWaterfallFreqScaleLerp);
+ Audio_UpdateRiverSoundVolumes();
+ Audio_UpdateSceneSequenceResumePoint();
+ func_801A312C();
+ func_8019FEDC();
+ func_801A1E0C();
+ func_801A1904();
+ func_801A2090();
+ func_801A3AC0();
+ func_801A1290();
+ Audio_ResetRequestedSceneSeqId();
+ AudioSfx_ProcessRequests();
+ func_801A89D0();
+ AudioSfx_ProcessActiveSfx();
+ func_801A8D5C();
+ AudioSfx_ProcessSfxSettings();
+ AudioThread_ScheduleProcessCmds();
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019E0FC.s")
+void Audio_Noop4(s32 arg0) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019E104.s")
+void Audio_Noop5(s32 arg0, s32 arg1) {
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019E110.s")
@@ -3582,7 +3755,7 @@ s8 AudioSfx_ComputeReverb(u8 bankId, u8 entryIndex, u8 channelIndex) {
if (IS_SEQUENCE_CHANNEL_VALID(gAudioContext.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex])) {
scriptAdd = gAudioContext.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->soundScriptIO[1];
- if (gAudioContext.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->soundScriptIO[1] < 0) {
+ if (gAudioContext.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->soundScriptIO[1] <= SEQ_IO_VAL_NONE) {
scriptAdd = 0;
}
}
@@ -3815,7 +3988,7 @@ void AudioSfx_SetProperties(u8 bankId, u8 entryIndex, u8 channelIndex) {
case BANK_ENV:
case BANK_ENEMY:
case BANK_VOICE:
- if (sSoundMode == SOUNDMODE_SURROUND) {
+ if (sSoundMode == SOUNDMODE_SURROUND_EXTERNAL) {
combFilterGain = AudioSfx_ComputeCombFilter(*entry->posY, entry->sfxParams);
}
// fallthrough
@@ -3826,7 +3999,7 @@ void AudioSfx_SetProperties(u8 bankId, u8 entryIndex, u8 channelIndex) {
panSigned = AudioSfx_ComputePanSigned(*entry->posX, *entry->posZ, entry->token);
freqScale = AudioSfx_ComputeFreqScale(bankId, entryIndex) * *entry->freqScale;
- if (sSoundMode == SOUNDMODE_SURROUND) {
+ if (sSoundMode == SOUNDMODE_SURROUND_EXTERNAL) {
if (*entry->posZ >= 0.0f) {
if (*entry->posZ < 200.0f) {
zVolume = 32.0f - ((*entry->posZ / 300.0f) * 32.0f);
@@ -3859,7 +4032,7 @@ void AudioSfx_SetProperties(u8 bankId, u8 entryIndex, u8 channelIndex) {
((entry->sfxFlags & SFX_FLAG2_APPLY_LOWPASS_FILTER) >> 2)) *
2);
filter &= 0xFF;
- } else if ((sSoundMode == SOUNDMODE_SURROUND) && !(entry->sfxParams & SFX_FLAG_VOLUME_NO_DIST)) {
+ } else if ((sSoundMode == SOUNDMODE_SURROUND_EXTERNAL) && !(entry->sfxParams & SFX_FLAG_VOLUME_NO_DIST)) {
filter = AudioSfx_ComputeSurroundSoundFilter(behindScreenZ, entry, panSigned);
}
break;
@@ -4189,7 +4362,7 @@ s32 Audio_SetGanonsTowerBgmVolume(u8 targetVolume) {
gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]) {
// soundScriptIO[5] was set to 0x40 in channels 0, 1, and 4 (BGM no longer in OoT)
if ((u8)gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->soundScriptIO[5] !=
- 0xFF) {
+ (u8)SEQ_IO_VAL_NONE) {
// Higher volume leads to lower reverb
reverb =
(((u16)gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->soundScriptIO[5] -
@@ -4350,9 +4523,51 @@ void Audio_ClearSariaBgmAtPos(Vec3f* pos) {
}
}
-u8 sBgmPlayers[2] = { SEQ_PLAYER_BGM_MAIN, SEQ_PLAYER_BGM_SUB };
-void Audio_SplitBgmChannels(s8 volumeSplit);
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/Audio_SplitBgmChannels.s")
+/**
+ * Turns on and off channels from both bgm players in a way that splits
+ * equally between the two bgm channels. Split based on note priority
+ */
+void Audio_SplitBgmChannels(s8 volumeSplit) {
+ u8 volume;
+ u8 notePriority;
+ u16 channelBits;
+ u8 sBgmPlayers[2] = { SEQ_PLAYER_BGM_MAIN, SEQ_PLAYER_BGM_SUB };
+ u8 i;
+ u8 channelIndex;
+
+ if ((Audio_GetActiveSequence(SEQ_PLAYER_FANFARE) == NA_BGM_DISABLED) &&
+ (Audio_GetActiveSequence(SEQ_PLAYER_BGM_SUB) != NA_BGM_ROMANI_RANCH)) {
+ for (i = 0; i < ARRAY_COUNT(sBgmPlayers); i++) {
+ if (i == 0) {
+ // Main Bgm SeqPlayer
+ volume = volumeSplit;
+ } else {
+ // Sub Bgm SeqPlayer
+ volume = 0x7F - volumeSplit;
+ }
+
+ if (volume > 100) {
+ notePriority = 11;
+ } else if (volume < 20) {
+ notePriority = 2;
+ } else {
+ notePriority = ((volume - 20) / 10) + 2;
+ }
+
+ channelBits = 0;
+ for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) {
+ if (gAudioContext.seqPlayers[sBgmPlayers[i]].channels[channelIndex]->notePriority < notePriority) {
+ // If the note currently playing in the channel is a high enough priority,
+ // then keep the channel on by setting a channelBit
+ // If this condition fails, then the channel will be shut off
+ channelBits += (1 << channelIndex);
+ }
+ }
+
+ Audio_QueueSeqCmd(0xA0000000 | ((u32)(sBgmPlayers[i]) << 24) | ((u32)(channelBits)));
+ }
+ }
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A0E44.s")
@@ -4404,7 +4619,7 @@ void Audio_PlaySariaBgm(Vec3f* pos, u16 seqId, u16 distMax) {
if (sRiverSoundBgmPos == NULL) {
sRiverSoundBgmPos = pos;
- func_801A3238(SEQ_PLAYER_BGM_SUB, seqId, 0, 7, 2);
+ Audio_PlaySequenceWithSeqPlayerIO(SEQ_PLAYER_BGM_SUB, seqId, 0, 7, 2);
} else {
prevDist = sqrtf(SQ(sRiverSoundBgmPos->z) + SQ(sRiverSoundBgmPos->x));
if (dist < prevDist) {
@@ -4441,15 +4656,80 @@ void Audio_ClearSariaBgm2(void) {
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A246C.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2544.s")
+void Audio_PlayMorningSceneSequence(u16 seqId, u8 dayMinusOne) {
+ Audio_StartMorningSceneSequence(seqId);
+ Audio_QueueSeqCmd(0x70000000 | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(4) << 0x10) | (u32)(dayMinusOne));
+}
+
+void Audio_StartMorningSceneSequence(u16 seqId) {
+ if (seqId != NA_BGM_AMBIENCE) {
+ Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_AMBIENCE) << 24) | ((0) << 16));
+ Audio_StartSceneSequence(seqId);
+ Audio_PlaySequenceWithSeqPlayerIO(SEQ_PLAYER_BGM_MAIN, seqId, 0, 0, 1);
+ } else {
+ Audio_PlayAmbience(AMBIENCE_ID_08);
+ }
+}
+
+void Audio_PlaySceneSequence(u16 seqId, u8 dayMinusOne) {
+ if (sRequestedSceneSeqId != seqId) {
+ if (seqId == NA_BGM_AMBIENCE) {
+ Audio_PlayAmbience(AMBIENCE_ID_08);
+ } else if ((seqId != NA_BGM_FINAL_HOURS) || (sPrevMainBgmSeqId == NA_BGM_DISABLED)) {
+ Audio_StartSceneSequence(seqId);
+ Audio_QueueSeqCmd(0x70000000 | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(4) << 0x10) |
+ (u32)(dayMinusOne));
+ }
+ sRequestedSceneSeqId = seqId;
+ }
+}
+
+void Audio_StartSceneSequence(u16 seqId) {
+ u8 fadeInDuration = 0;
+ u8 skipHarpIntro;
+
+ if ((sSeqFlags[sPrevSceneSeqId] & SEQ_FLAG_RESUME_PREV) && (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_RESUME)) {
+ // Resume the sequence from the point where it left off last time it was played in the scene
+ if ((sSeqResumePoint & 0x3F) != 0) {
+ fadeInDuration = 30;
+ }
+
+ // Write the sequence resumePoint to resume from into ioPort 7
+ Audio_PlaySequenceWithSeqPlayerIO(SEQ_PLAYER_BGM_MAIN, seqId, fadeInDuration, 7, sSeqResumePoint);
+
+ sSeqResumePoint = 0;
+ } else {
+ // Start the sequence from the beginning
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A257C.s")
+ // Writes to ioPort 7. See `SEQ_FLAG_SKIP_HARP_INTRO` for writing a value of 1 to ioPort 7.
+ if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_SKIP_HARP_INTRO) {
+ skipHarpIntro = 1;
+ } else {
+ skipHarpIntro = (u8)SEQ_IO_VAL_NONE;
+ }
+ Audio_PlaySequenceWithSeqPlayerIO(SEQ_PLAYER_BGM_MAIN, seqId, 0, 7, skipHarpIntro);
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A25E4.s")
+ if (!(sSeqFlags[seqId] & SEQ_FLAG_RESUME_PREV)) {
+ // Reset the sequence resumePoint
+ sSeqResumePoint = SEQ_RESUME_POINT_NONE;
+ }
+ }
+ sPrevSceneSeqId = seqId & 0xFF;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2670.s")
+void Audio_UpdateSceneSequenceResumePoint(void) {
+ u16 seqId = Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN);
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2778.s")
+ if ((seqId != NA_BGM_DISABLED) && (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_RESUME)) {
+ if (sSeqResumePoint != SEQ_RESUME_POINT_NONE) {
+ // Get the current point to resume from
+ sSeqResumePoint = gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].soundScriptIO[3];
+ } else {
+ // Initialize the point to resume from to the start of the sequence
+ sSeqResumePoint = 0;
+ }
+ }
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A27E8.s")
@@ -4463,35 +4743,238 @@ void Audio_ClearSariaBgm2(void) {
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2C44.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2C88.s")
+void Audio_PlaySequenceInCutscene(u16 seqId) {
+ if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE) {
+ Audio_PlayFanfare(seqId);
+ } else if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE_KAMARO) {
+ Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_FANFARE) << 24) | ((u32)(0) << 0x10) | (u32)(seqId));
+ } else if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_NO_AMBIENCE) {
+ Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_BGM_SUB) << 24) | ((u32)(0) << 0x10) | (u32)(seqId));
+ } else {
+ Audio_PlaySequenceWithSeqPlayerIO(SEQ_PLAYER_BGM_MAIN, seqId, 0, 7, SEQ_IO_VAL_NONE);
+ Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 1, 0x7F, 0);
+ Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 3, 0x7F, 0);
+ Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_FANFARE) << 24) | ((0) << 16));
+ }
+}
+
+void Audio_StopSequenceInCutscene(u16 seqId) {
+ if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE) {
+ Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_FANFARE) << 24) | ((0) << 16));
+ } else if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE_KAMARO) {
+ Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_FANFARE) << 24) | ((0) << 16));
+ } else if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_NO_AMBIENCE) {
+ Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_BGM_SUB) << 24) | ((0) << 16));
+ } else {
+ Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_BGM_MAIN) << 24) | ((0) << 16));
+ }
+}
+
+s32 Audio_IsSequencePlaying(u8 seqId) {
+ u8 playerIndex = SEQ_PLAYER_BGM_MAIN;
+
+ if (sSeqFlags[seqId & 0xFF] & SEQ_FLAG_FANFARE) {
+ playerIndex = SEQ_PLAYER_FANFARE;
+ } else if (sSeqFlags[seqId & 0xFF] & SEQ_FLAG_FANFARE_KAMARO) {
+ playerIndex = SEQ_PLAYER_FANFARE;
+ }
+
+ if (seqId == (Audio_GetActiveSequence(playerIndex) & 0xFF)) {
+ return true;
+ } else {
+ return false;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2D54.s")
+void Audio_PlayBgm_StorePrevBgm(u16 seqId) {
+ u16 curSeqId = Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN);
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/Audio_IsSequencePlaying.s")
+ if (curSeqId == NA_BGM_DISABLED) {
+ curSeqId = NA_BGM_GENERAL_SFX;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2E54.s")
+ if (curSeqId != seqId) {
+ Audio_SetSequenceMode(SEQ_MODE_IGNORE);
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2ED8.s")
+ // Ensure the sequence about to be stored isn't also storing a separate sequence
+ if (!(sSeqFlags[curSeqId] & SEQ_FLAG_RESTORE)) {
+ sPrevMainBgmSeqId = curSeqId;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2F88.s")
+ Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(0) << 0x10) | (u32)(seqId + 0x8000));
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2FC4.s")
+/**
+ * To be used in conjunction with Audio_PlayBgm_StorePrevBgm
+ */
+void Audio_RestorePrevBgm(void) {
+ if ((Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) &&
+ (sSeqFlags[Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN) & 0xFF] & SEQ_FLAG_RESTORE)) {
+ if ((sPrevMainBgmSeqId == NA_BGM_DISABLED) || (sPrevMainBgmSeqId == NA_BGM_GENERAL_SFX)) {
+ Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_BGM_MAIN) << 24) | ((0) << 16));
+ } else {
+ if (sPrevMainBgmSeqId == NA_BGM_AMBIENCE) {
+ sPrevMainBgmSeqId = sPrevAmbienceSeqId;
+ }
+ Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(0) << 0x10) |
+ (u32)(sPrevMainBgmSeqId + 0x8000));
+ }
+ sPrevMainBgmSeqId = NA_BGM_DISABLED;
+ }
+}
+
+// Unused
+void Audio_PlayAmbience_StorePrevBgm(u8 ambienceId) {
+ u16 seqId = Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN);
+
+ if (seqId != NA_BGM_AMBIENCE) {
+ sPrevMainBgmSeqId = seqId;
+ }
+
+ Audio_PlayAmbience(ambienceId);
+}
+
+// Unused
+void Audio_ForceRestorePreviousBgm(void) {
+ if (sPrevMainBgmSeqId != NA_BGM_DISABLED) {
+ Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(0) << 0x10) |
+ (u32)(sPrevMainBgmSeqId + 0x8000));
+ }
+
+ sPrevMainBgmSeqId = NA_BGM_DISABLED;
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3000.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3038.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3098.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/Audio_PlayFanfare.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A312C.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A31EC.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3238.s")
+void Audio_PlaySequenceWithSeqPlayerIO(s8 playerIndex, u16 seqId, u8 fadeInDuration, s8 ioPort, u8 ioData) {
+ u16 flaggedSeqId;
+
+ Audio_QueueSeqCmd(0x70000000 | ((u32)(playerIndex) << 24) | ((u32)(ioPort) << 0x10) | (u32)(ioData));
+ if ((seqId & 0xFF) < 2) {
+ flaggedSeqId = seqId;
+ } else {
+ flaggedSeqId = seqId | 0x8000;
+ }
+ Audio_QueueSeqCmd(0x00000000 | ((u32)(playerIndex) << 24) | ((u32)(fadeInDuration) << 0x10) | (u32)(flaggedSeqId));
+}
+
+void Audio_SetSequenceMode(u8 seqMode) {
+ s32 volumeFadeInTimer;
+ u16 seqId;
+ u8 volumeFadeOutTimer;
+
+ if ((sPrevMainBgmSeqId == NA_BGM_DISABLED) && (sPrevMainBgmSeqId == NA_BGM_DISABLED)) {
+ // clang-format off
+ if (sAudioCutsceneFlag || sSpatialSeqIsActive[SEQ_PLAYER_BGM_SUB]) { \
+ seqMode = SEQ_MODE_IGNORE;
+ }
+ // clang-format on
+
+ seqId = gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId;
+
+ if ((seqId == NA_BGM_DISABLED) || (sSeqFlags[(u8)(seqId & 0xFF)] & SEQ_FLAG_ENEMY) ||
+ ((sPrevSeqMode & 0x7F) == SEQ_MODE_ENEMY)) {
+ if (seqMode != (sPrevSeqMode & 0x7F)) {
+ if (seqMode == SEQ_MODE_ENEMY) {
+ // If only seqMode = SEQ_MODE_ENEMY (Start)
+ if (gActiveSeqs[SEQ_PLAYER_BGM_SUB].volScales[1] - sBgmEnemyVolume < 0) {
+ volumeFadeInTimer = -(gActiveSeqs[SEQ_PLAYER_BGM_SUB].volScales[1] - sBgmEnemyVolume);
+ } else {
+ volumeFadeInTimer = gActiveSeqs[SEQ_PLAYER_BGM_SUB].volScales[1] - sBgmEnemyVolume;
+ }
+
+ Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, 3, sBgmEnemyVolume, volumeFadeInTimer);
+ Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_BGM_SUB) << 24) | ((u32)(10) << 0x10) |
+ (u32)(NA_BGM_ENEMY | 0x800));
+
+ if (seqId >= NA_BGM_TERMINA_FIELD) {
+ Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 3, 0x7F - sBgmEnemyVolume, 10);
+ Audio_SplitBgmChannels(sBgmEnemyVolume);
+ }
+ } else if ((sPrevSeqMode & 0x7F) == SEQ_MODE_ENEMY) {
+ // If only sPrevSeqMode = SEQ_MODE_ENEMY (End)
+ Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_BGM_SUB) << 24) | ((10) << 16));
+
+ if (seqMode == SEQ_MODE_IGNORE) {
+ volumeFadeOutTimer = 0;
+ } else {
+ volumeFadeOutTimer = 10;
+ }
+
+ Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 3, 0x7F, volumeFadeOutTimer);
+ Audio_SplitBgmChannels(0);
+ }
+
+ sPrevSeqMode = seqMode + 0x80;
+ } else {
+ if (seqMode == SEQ_MODE_ENEMY) {
+ // If both seqMode = sPrevSeqMode = SEQ_MODE_ENEMY
+ if ((Audio_GetActiveSequence(SEQ_PLAYER_BGM_SUB) == NA_BGM_DISABLED) &&
+ (seqId != NA_BGM_DISABLED) && (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_ENEMY)) {
+ Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_BGM_SUB) << 24) | ((u32)(10) << 0x10) |
+ (u32)(NA_BGM_ENEMY | 0x800));
+ sPrevSeqMode = seqMode + 0x80;
+ }
+ }
+ }
+ } else {
+ // Remnant of OoT's Hyrule Field Sequence
+ if (seqMode == SEQ_MODE_DEFAULT) {
+ if (sPrevSeqMode == SEQ_MODE_STILL) {
+ sNumFramesMoving = 0;
+ }
+ sNumFramesStill = 0;
+ sNumFramesMoving++;
+ } else {
+ sNumFramesStill++;
+ }
+
+ if ((seqMode == SEQ_MODE_STILL) && (sNumFramesStill < 30) && (sNumFramesMoving > 20)) {
+ seqMode = SEQ_MODE_DEFAULT;
+ }
+
+ sPrevSeqMode = seqMode;
+ Audio_QueueSeqCmd(0x70000000 | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(2) << 0x10) | (u32)(seqMode));
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A32CC.s")
+void Audio_UpdateEnemyBgmVolume(f32 dist) {
+ f32 adjDist;
+ u16 seqId = gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId;
+
+ if (sPrevSeqMode == (SEQ_MODE_ENEMY | 0x80)) {
+ if (dist != sBgmEnemyDist) {
+ // clamp (dist - 150.0f) between 0 and 350
+ if (dist < 150.0f) {
+ adjDist = 0.0f;
+ } else if (dist > 500.0f) {
+ adjDist = 350.0f;
+ } else {
+ adjDist = dist - 150.0f;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3590.s")
+ sBgmEnemyVolume = ((350.0f - adjDist) * 127.0f) / 350.0f;
+ Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, 3, sBgmEnemyVolume, 10);
+
+ if ((seqId >= NA_BGM_TERMINA_FIELD) && !(sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE_KAMARO)) {
+ Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 3, (0x7F - sBgmEnemyVolume), 10);
+ }
+ }
+
+ Audio_SplitBgmChannels(sBgmEnemyVolume);
+ }
+ sBgmEnemyDist = dist;
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A36F0.s")
@@ -4521,7 +5004,9 @@ void Audio_ClearSariaBgm2(void) {
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3EC0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/Audio_SetCutsceneFlag.s")
+void Audio_SetCutsceneFlag(s8 flag) {
+ sAudioCutsceneFlag = flag;
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3F6C.s")
@@ -4529,7 +5014,7 @@ void Audio_ClearSariaBgm2(void) {
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3FFC.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/audio_setBGM.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/Audio_SetSpec.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A4058.s")
@@ -4551,7 +5036,9 @@ void Audio_ClearSariaBgm2(void) {
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/Audio_PreNMI.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A44C4.s")
+void Audio_ResetRequestedSceneSeqId(void) {
+ sRequestedSceneSeqId = NA_BGM_DISABLED;
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A44D4.s")
@@ -4562,14 +5049,111 @@ f32 sSfxOriginalPos[] = { 0.0f, 0.0f, 0.0f };
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A479C.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A47DC.s")
+void Audio_SetAmbienceChannelIO(u8 channelIndexRange, u8 ioPort, u8 ioData) {
+ u8 firstChannelIndex;
+ u8 lastChannelIndex;
+ u8 channelIndex;
+
+ if ((gActiveSeqs[SEQ_PLAYER_AMBIENCE].seqId != NA_BGM_AMBIENCE) && func_801A8ABC(NA_BGM_AMBIENCE, 0xF00000FF)) {
+ return;
+ }
+
+ // channelIndexRange = 01 on ioPort 1
+ if ((((channelIndexRange << 8) + (u32)ioPort) == ((1 << 8) | (u32)1)) &&
+ (Audio_GetActiveSequence(SEQ_PLAYER_BGM_SUB) != NA_BGM_ROMANI_RANCH)) {
+ D_801FD3A8 = 0;
+ }
+
+ firstChannelIndex = channelIndexRange >> 4;
+ lastChannelIndex = channelIndexRange & 0xF;
+
+ if (firstChannelIndex == 0) {
+ firstChannelIndex = channelIndexRange & 0xF;
+ }
+
+ for (channelIndex = firstChannelIndex; channelIndex <= lastChannelIndex; channelIndex++) {
+ Audio_QueueSeqCmd(0x80000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(ioPort) << 16) |
+ ((u32)(channelIndex) << 8) | (u32)(ioData));
+ }
+}
+
+void Audio_StartAmbience(u16 initChannelMask, u16 initMuteChannelMask) {
+ u8 channelIndex;
+
+ Audio_QueueSeqCmd(0x70000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(SEQ_PLAYER_IO_PORT_0) << 0x10) |
+ (u32)(1));
+ Audio_QueueSeqCmd(0x70000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(SEQ_PLAYER_IO_PORT_4) << 0x10) |
+ (u32)((u8)(initChannelMask >> 8)));
+ Audio_QueueSeqCmd(0x70000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(SEQ_PLAYER_IO_PORT_5) << 0x10) |
+ (u32)((u8)(initChannelMask & 0xFF)));
+ Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 0, 0x7F, 1);
+
+ if ((Audio_GetActiveSequence(SEQ_PLAYER_AMBIENCE) != NA_BGM_DISABLED) &&
+ (Audio_GetActiveSequence(SEQ_PLAYER_AMBIENCE) != NA_BGM_AMBIENCE)) {
+ Audio_StopSequence(SEQ_PLAYER_AMBIENCE, 0);
+ AudioThread_QueueCmdS32(0xF8 << 24, 0);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A48E0.s")
+ if (Audio_GetActiveSequence(SEQ_PLAYER_BGM_SUB) == (NA_BGM_ENEMY | 0x800)) {
+ Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 3, 0x7F, 1);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A4A28.s")
+ Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(0) << 0x10) | (u32)(NA_BGM_AMBIENCE));
-u32 Audio_SetNatureAmbienceRandomBend(u8 seqScriptValIn, SequenceChannel* channel);
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/Audio_SetNatureAmbienceRandomBend.s")
+ for (channelIndex = 0; channelIndex < 16; channelIndex++) {
+ if (!(initMuteChannelMask & (1 << channelIndex)) && (initChannelMask & (1 << channelIndex))) {
+ Audio_QueueSeqCmd(0x80000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(CHANNEL_IO_PORT_1) << 16) |
+ ((u32)(channelIndex) << 8) | (u32)(1));
+ }
+ }
+}
+
+void Audio_PlayAmbience(u8 ambienceId) {
+ u8 i = 0;
+ u8 channelIndex;
+ u8 ioPort;
+ u8 ioData;
+
+ if (!((gActiveSeqs[SEQ_PLAYER_AMBIENCE].seqId != NA_BGM_DISABLED) &&
+ (sSeqFlags[gActiveSeqs[SEQ_PLAYER_AMBIENCE].seqId & 0xFF & 0xFF] & SEQ_FLAG_NO_AMBIENCE))) {
+ if (gActiveSeqs[SEQ_PLAYER_AMBIENCE].seqId != NA_BGM_AMBIENCE) {
+ sPrevAmbienceSeqId = gActiveSeqs[SEQ_PLAYER_AMBIENCE].seqId;
+ }
+
+ Audio_StartAmbience(sAmbienceData[ambienceId].initChannelMask, sAmbienceData[ambienceId].initMuteChannelMask);
+
+ while ((sAmbienceData[ambienceId].channelProperties[i] != 0xFF) &&
+ (i < ARRAY_COUNT(sAmbienceData[ambienceId].channelProperties))) {
+ channelIndex = sAmbienceData[ambienceId].channelProperties[i++];
+ ioPort = sAmbienceData[ambienceId].channelProperties[i++];
+ ioData = sAmbienceData[ambienceId].channelProperties[i++];
+ Audio_QueueSeqCmd(0x80000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(ioPort) << 16) |
+ ((u32)(channelIndex) << 8) | (u32)(ioData));
+ }
+
+ Audio_QueueSeqCmd(0x80000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(CHANNEL_IO_PORT_7) << 16) |
+ ((u32)(AMBIENCE_CHANNEL_SOUND_MODE) << 8) | (u32)(sSoundMode));
+ }
+}
+
+u32 Audio_SetAmbienceRandomBend(u8 seqScriptValIn, SequenceChannel* channel) {
+ u32 seqScriptValOut = seqScriptValIn;
+
+ gAudioContext.seqPlayers[SEQ_PLAYER_AMBIENCE].applyBend = true;
+
+ if ((seqScriptValIn == 0) || (seqScriptValIn == 0xFF)) {
+ gAudioContext.seqPlayers[SEQ_PLAYER_AMBIENCE].bend = 1.0f;
+ } else {
+ seqScriptValOut = AudioThread_NextRandom();
+ gAudioContext.seqPlayers[SEQ_PLAYER_AMBIENCE].bend = 1.0293 - ((gAudioContext.audioRandom & 0xF) / 144.0f);
+
+ return seqScriptValOut;
+ }
+
+#ifdef AVOID_UB
+ return seqScriptValOut;
+#endif
+}
void Audio_Init(void) {
AudioLoad_Init(NULL, 0);
@@ -4587,7 +5171,7 @@ void AudioSfx_Init(u16 fadeTimer) {
}
AudioThread_QueueCmdS32(0xE4000000, AudioSfx_SetFreqAndStereoBits);
- AudioThread_QueueCmdS32(0xE4000001, Audio_SetNatureAmbienceRandomBend);
+ AudioThread_QueueCmdS32(0xE4000001, Audio_SetAmbienceRandomBend);
}
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A4D00.s")
diff --git a/src/code/audio/code_801A5BD0.c b/src/code/audio/code_801A5BD0.c
index 4cf1147bf..d76970829 100644
--- a/src/code/audio/code_801A5BD0.c
+++ b/src/code/audio/code_801A5BD0.c
@@ -671,7 +671,7 @@ void AudioSfx_PlayActiveSfx(u8 bankId) {
// "one-frame" sfx
entry->state = SFX_STATE_PLAYING_ONE_FRAME;
}
- } else if ((u8)channel->soundScriptIO[1] == 0xFF) {
+ } else if ((u8)channel->soundScriptIO[1] == (u8)SEQ_IO_VAL_NONE) {
// Signal from seq 0 that the sfx is finished playing. Remove entry
AudioSfx_RemoveBankEntry(bankId, entryIndex);
} else if (entry->state == SFX_STATE_PLAYING_REFRESH) {
diff --git a/src/code/audio/code_801A7B10.c b/src/code/audio/code_801A7B10.c
index f2f37a013..3f8446036 100644
--- a/src/code/audio/code_801A7B10.c
+++ b/src/code/audio/code_801A7B10.c
@@ -2,7 +2,7 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/Audio_StartSequence.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A7D04.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/Audio_StopSequence.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A7D84.s")
@@ -10,7 +10,7 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A89D0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A8A50.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/Audio_GetActiveSequence.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A8ABC.s")
diff --git a/src/code/game.c b/src/code/game.c
index da21de17f..73352379f 100644
--- a/src/code/game.c
+++ b/src/code/game.c
@@ -225,7 +225,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
void GameState_Destroy(GameState* gameState) {
AudioMgr_StopAllSfxExceptSystem();
- func_8019E014();
+ Audio_Update();
osRecvMesg(&gameState->gfxCtx->queue, NULL, OS_MESG_BLOCK);
if (gameState->destroy != NULL) {
diff --git a/src/code/graph.c b/src/code/graph.c
index 654d2c5f7..869740e4b 100644
--- a/src/code/graph.c
+++ b/src/code/graph.c
@@ -232,7 +232,7 @@ void Graph_UpdateGame(GameState* gameState) {
Game_UpdateInput(gameState);
Game_IncrementFrameCount(gameState);
if (SREG(20) < 3) {
- func_8019E014();
+ Audio_Update();
}
}
diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c
index c970282a8..0e682231f 100644
--- a/src/code/z_common_data.c
+++ b/src/code/z_common_data.c
@@ -6,8 +6,8 @@ void SaveContext_Init(void) {
bzero(&gSaveContext, sizeof(SaveContext));
gSaveContext.save.playerForm = 0;
- gSaveContext.seqIndex = (u8)NA_BGM_DISABLED;
- gSaveContext.nightSeqIndex = 0xFF;
+ gSaveContext.seqId = (u8)NA_BGM_DISABLED;
+ gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
gSaveContext.unk_3F46 = NA_BGM_GENERAL_SFX;
gSaveContext.nextCutsceneIndex = 0xFFEF;
gSaveContext.cutsceneTrigger = 0;
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index 4453bd674..69995db16 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -152,7 +152,7 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c
break;
case 0x2:
if (isStartFrame) {
- func_801A47DC(NATURE_CHANNEL_LIGHTNING, CHANNEL_IO_PORT_0, 0);
+ Audio_SetAmbienceChannelIO(AMBIENCE_CHANNEL_LIGHTNING, CHANNEL_IO_PORT_0, 0);
Environment_AddLightningBolts(play, 3);
D_801F4E68 = 1;
}
@@ -376,14 +376,14 @@ void Cutscene_Command_SetLighting(PlayState* play, CutsceneContext* csCtx, CsCmd
// Command 0x12C: Plays a sequence (Background music or Fanfare)
void Cutscene_Command_PlaySequence(PlayState* play, CutsceneContext* csCtx, CsCmdSequenceChange* cmd) {
if (csCtx->frames == cmd->startFrame) {
- func_801A2C88(cmd->sequence - 1);
+ Audio_PlaySequenceInCutscene(cmd->sequence - 1);
}
}
// Command 0x12D: Stops a sequence (Background music or Fanfare)
void Cutscene_Command_StopSequence(PlayState* play, CutsceneContext* csCtx, CsCmdSequenceChange* cmd) {
if ((csCtx->frames >= cmd->startFrame) && (cmd->endFrame >= csCtx->frames)) {
- func_801A2D54(cmd->sequence - 1);
+ Audio_StopSequenceInCutscene(cmd->sequence - 1);
}
}
@@ -403,9 +403,7 @@ void Cutscene_Command_FadeSequence(PlayState* play, CutsceneContext* csCtx, CsCm
// Command 0x12E: Play Ambience sequence
void Cutscene_Command_PlayAmbienceSequence(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
if (csCtx->frames == cmd->startFrame) {
- // Audio_PlayNatureAmbienceSequence
- // nightSeqIndex is natureAmbienceId
- func_801A4A28(play->soundCtx.nightSeqIndex);
+ Audio_PlayAmbience(play->sequenceCtx.ambienceId);
}
}
@@ -455,29 +453,27 @@ void func_800EADB0(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
break;
case 4:
- // func_801A246C(SEQ_PLAYER_NATURE, TYPE_1);
- func_801A246C(SEQ_PLAYER_NATURE, 1);
+ // func_801A246C(SEQ_PLAYER_AMBIENCE, TYPE_1);
+ func_801A246C(SEQ_PLAYER_AMBIENCE, 1);
break;
case 5:
- // func_801A246C(SEQ_PLAYER_NATURE, TYPE_0);
- func_801A246C(SEQ_PLAYER_NATURE, 0);
+ // func_801A246C(SEQ_PLAYER_AMBIENCE, TYPE_0);
+ func_801A246C(SEQ_PLAYER_AMBIENCE, 0);
break;
case 6:
- // func_801A246C(SEQ_PLAYER_NATURE, TYPE_2);
- func_801A246C(SEQ_PLAYER_NATURE, 2);
+ // func_801A246C(SEQ_PLAYER_AMBIENCE, TYPE_2);
+ func_801A246C(SEQ_PLAYER_AMBIENCE, 2);
break;
case 7:
- // Audio_GetActiveSequence
- seqId = func_801A8A50(0);
+ seqId = Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN);
break;
case 8:
if (seqId != NA_BGM_DISABLED) {
- // Audio_PlayBgmForDayScene
- func_801A25E4(seqId, dayMinusOne);
+ Audio_PlaySceneSequence(seqId, dayMinusOne);
}
break;
}
@@ -647,7 +643,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB
// Command 0x15F: Chooses between a cutscene or a rotating mask depending on whether the player has the corresponding
// mask
void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
- if ((csCtx->frames >= cmd->startFrame) && (func_801A3950(0, true) != 0xFF)) {
+ if ((csCtx->frames >= cmd->startFrame) && (func_801A3950(SEQ_PLAYER_BGM_MAIN, true) != 0xFF)) {
switch (cmd->base) {
case 1:
Cutscene_TerminatorImpl(play, csCtx, cmd);
diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c
index 9fc3dee25..776dc75d7 100644
--- a/src/code/z_game_over.c
+++ b/src/code/z_game_over.c
@@ -46,8 +46,8 @@ void GameOver_Update(PlayState* play) {
gSaveContext.unk_3DC0 = 2000;
gSaveContext.save.playerData.tatlTimer = 0;
- gSaveContext.seqIndex = (u8)NA_BGM_DISABLED;
- gSaveContext.nightSeqIndex = 0xFF;
+ gSaveContext.seqId = (u8)NA_BGM_DISABLED;
+ gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
gSaveContext.eventInf[0] = 0;
gSaveContext.eventInf[1] = 0;
gSaveContext.eventInf[2] = 0;
@@ -67,7 +67,7 @@ void GameOver_Update(PlayState* play) {
gameOverCtx->state = GAMEOVER_DEATH_WAIT_GROUND;
break;
case GAMEOVER_DEATH_FADE_OUT:
- if (func_801A8A50(1) != NA_BGM_GAME_OVER) {
+ if (Audio_GetActiveSequence(SEQ_PLAYER_FANFARE) != NA_BGM_GAME_OVER) {
func_80169F78(&play->state);
if (gSaveContext.respawnFlag != -7) {
gSaveContext.respawnFlag = -6;
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index a3a4e331d..ce5ddf769 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -436,11 +436,12 @@ void Scene_HeaderCmd09(PlayState* play, SceneCmd* cmd) {
// SceneTableEntry Header Command 0x15: Sound Settings=
void Scene_HeaderCmdSoundSettings(PlayState* play, SceneCmd* cmd) {
- play->soundCtx.seqIndex = cmd->soundSettings.musicSeq;
- play->soundCtx.nightSeqIndex = cmd->soundSettings.nighttimeSFX;
+ play->sequenceCtx.seqId = cmd->soundSettings.seqId;
+ play->sequenceCtx.ambienceId = cmd->soundSettings.ambienceId;
- if (gSaveContext.seqIndex == (u8)NA_BGM_DISABLED || func_801A8A50(0) == NA_BGM_FINAL_HOURS) {
- audio_setBGM(cmd->soundSettings.bgmId);
+ if (gSaveContext.seqId == (u8)NA_BGM_DISABLED ||
+ Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN) == NA_BGM_FINAL_HOURS) {
+ Audio_SetSpec(cmd->soundSettings.specId);
}
}