summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTharo <17233964+Thar0@users.noreply.github.com>2024-09-15 23:26:32 +0100
committerGitHub <noreply@github.com>2024-09-15 15:26:32 -0700
commitd14e1ac1dfcfaec4ea7ba7db99cc092692f64f67 (patch)
treeca4a116dc3c474a09eb88335a34b4580fbff023b /src
parentb9ea1c19ab8c8f273cf8cddfc372dcb47106f1f3 (diff)
[Audio 8/?] Check-in handwritten sequences, build sequences, automate various sfx arrays (#1679)
* [Audio 8/?] Check-in handwritten sequences, build sequences, automate various sfx arrays * Fix whitespace in aseq.h * Suggested changes, adjust some MML syntax and add more instruction descriptions * Special case progress script (#9) * Hack progress script * Small adjustment to text fileSectionFixer * Add the dir of the input .seq file to the list of includes to sequence assembling so that assembler-level includes like .include or .incbin work intuitively * Remove old comment that was missed before * aseq.h tweaks * Review suggestions, aseq.h adjustments --------- Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/audio/code_8019AF00.c162
-rw-r--r--src/audio/sfx_params.c2
-rw-r--r--src/audio/tables/sequence_table.c51
3 files changed, 84 insertions, 131 deletions
diff --git a/src/audio/code_8019AF00.c b/src/audio/code_8019AF00.c
index f1e0c1057..ebcabcf4a 100644
--- a/src/audio/code_8019AF00.c
+++ b/src/audio/code_8019AF00.c
@@ -179,12 +179,37 @@ u16 sCustomSequencePc;
// Sfx Data
// If the Sfx Bank has more than 255 values (max value of u8)
-u8 gIsLargeSfxBank[] = {
- true, false, true, true, false, false, true,
+#define DEFINE_SFX(_0, _1, _2, _3, _4, _5, _6) 1 +
+u8 gIsLargeSfxBank[7] = {
+ (
+#include "tables/sfx/playerbank_table.h"
+ 0) > UINT8_MAX,
+ (
+#include "tables/sfx/itembank_table.h"
+ 0) > UINT8_MAX,
+ (
+#include "tables/sfx/environmentbank_table.h"
+ 0) > UINT8_MAX,
+ (
+#include "tables/sfx/enemybank_table.h"
+ 0) > UINT8_MAX,
+ (
+#include "tables/sfx/systembank_table.h"
+ 0) > UINT8_MAX,
+ (
+#include "tables/sfx/ocarinabank_table.h"
+ 0) > UINT8_MAX,
+ (
+#include "tables/sfx/voicebank_table.h"
+ 0) > UINT8_MAX,
};
+#undef DEFINE_SFX
+
+// TODO generate this similarly to above?
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 },
@@ -279,136 +304,13 @@ u8 sObjSoundMainBgmSeqId = NA_BGM_GENERAL_SFX;
// Unused, repurposed for SubBgm
#define SEQ_FLAG_NO_AMBIENCE (1 << 7)
+#define DEFINE_SEQUENCE(name, seqId, storageMedium, cachePolicy, seqFlags) seqFlags,
+#define DEFINE_SEQUENCE_PTR(seqIdReal, seqId, storageMediumReal, cachePolicyReal, seqFlags) seqFlags,
u8 sSeqFlags[] = {
- 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_PALACE
- 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_CLOCK_TOWN_MAIN_SEQUENCE
- 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_CLOCK_TOWN_DAY_2_PTR
- 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_OCARINA_EPONA
- SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_SUNS
- SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_TIME
- SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_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_SHOOTING_GALLERY
- SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_SOARING
- SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_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_OCARINA_LULLABY_INTRO
- SEQ_FLAG_FANFARE, // NA_BGM_LEARNED_NEW_SONG
- 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_OCARINA_SONATA
- SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_LULLABY
- SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_NEW_WAVE
- SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_ELEGY
- SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_OATH
- 0, // NA_BGM_MAJORAS_LAIR
- SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_LULLABY_INTRO_PTR
- SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_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_SECOND_HALF
+#include "tables/sequence_table.h"
};
+#undef DEFINE_SEQUENCE
+#undef DEFINE_SEQUENCE_PTR
s8 sSpecReverbs[] = {
0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
diff --git a/src/audio/sfx_params.c b/src/audio/sfx_params.c
index 0066328b1..51afde7d6 100644
--- a/src/audio/sfx_params.c
+++ b/src/audio/sfx_params.c
@@ -1,6 +1,6 @@
#include "global.h"
-#define DEFINE_SFX(_0, importance, distParam, randParam, flags2, flags1) \
+#define DEFINE_SFX(_0, _1, importance, distParam, randParam, flags2, flags1) \
{ importance, flags2, \
((((distParam) << SFX_PARAM_DIST_RANGE_SHIFT) & SFX_PARAM_DIST_RANGE_MASK) | \
(((randParam) << SFX_PARAM_RAND_FREQ_RAISE_SHIFT) & SFX_PARAM_RAND_FREQ_RAISE_MASK) | (flags1)) },
diff --git a/src/audio/tables/sequence_table.c b/src/audio/tables/sequence_table.c
new file mode 100644
index 000000000..7a08ce79c
--- /dev/null
+++ b/src/audio/tables/sequence_table.c
@@ -0,0 +1,51 @@
+#include "attributes.h"
+#include "z64audio.h"
+
+// Symbol definition
+
+extern AudioTable gSequenceTable;
+#pragma weak gSequenceTable = sSequenceTableHeader
+
+// Externs for table
+
+#define DEFINE_SEQUENCE(name, seqId, storageMedium, cachePolicy, seqFlags) \
+ extern u8 name##_Start[]; \
+ extern u8 name##_Size[];
+#define DEFINE_SEQUENCE_PTR(seqIdReal, seqId, storageMediumReal, cachePolicyReal, seqFlags) /*empty*/
+
+#include "tables/sequence_table.h"
+
+#undef DEFINE_SEQUENCE
+#undef DEFINE_SEQUENCE_PTR
+
+// Table header
+
+NO_REORDER AudioTableHeader sSequenceTableHeader = {
+// The table contains the number of sequences, count them with the preprocessor
+#define DEFINE_SEQUENCE(name, seqId, storageMedium, cachePolicy, seqFlags) 1 +
+#define DEFINE_SEQUENCE_PTR(seqIdReal, seqId, storageMediumReal, cachePolicyReal, seqFlags) 1 +
+
+#include "tables/sequence_table.h"
+
+#undef DEFINE_SEQUENCE
+#undef DEFINE_SEQUENCE_PTR
+ 0,
+
+ 0,
+ 0x00000000,
+ { 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+
+// Table body
+
+NO_REORDER AudioTableEntry sSequenceTableEntries[] = {
+#define DEFINE_SEQUENCE(name, seqId, storageMedium, cachePolicy, seqFlags) \
+ { (u32)name##_Start, (u32)name##_Size, (storageMedium), (cachePolicy), 0, 0, 0 },
+#define DEFINE_SEQUENCE_PTR(seqIdReal, seqId, storageMediumReal, cachePolicyReal, seqFlags) \
+ { (seqIdReal), 0, (storageMediumReal), (cachePolicyReal), 0, 0, 0 },
+
+#include "tables/sequence_table.h"
+
+#undef DEFINE_SEQUENCE
+#undef DEFINE_SEQUENCE_PTR
+};