summaryrefslogtreecommitdiff
path: root/src/audio
diff options
context:
space:
mode:
authorTharo <17233964+Thar0@users.noreply.github.com>2024-09-15 23:26:27 +0100
committerGitHub <noreply@github.com>2024-09-15 18:26:27 -0400
commitdbbeb656f8634c3aec9308eeb9555babd3e3a57d (patch)
treebc4de922a94a384ca2f112da92da7f50b0db5569 /src/audio
parent03a15027063f643ff238266745aabc707e650608 (diff)
[Audio 8/?] Check-in handwritten sequences, build sequences, automate various sfx arrays (#2137)
* [Audio 8/?] Check-in handwritten sequences, build sequences, automate various sfx arrays * Fix whitespace in aseq.h * Fix sequence 0 sfx id generator * Suggested changes, adjust some MML syntax and add more instruction descriptions * Correct some formatting in aseq.h * 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 * aseq.h tweaks * MM review suggestions, aseq.h adjustments
Diffstat (limited to 'src/audio')
-rw-r--r--src/audio/general.c145
-rw-r--r--src/audio/sfx_params.c2
-rw-r--r--src/audio/tables/sequence_table.c51
3 files changed, 82 insertions, 116 deletions
diff --git a/src/audio/general.c b/src/audio/general.c
index fadbed0a9..615a359c3 100644
--- a/src/audio/general.c
+++ b/src/audio/general.c
@@ -79,7 +79,31 @@ typedef struct OcarinaStick {
s8 y;
} OcarinaStick;
-u8 gIsLargeSfxBank[7] = { 0, 0, 0, 1, 0, 0, 0 };
+#define DEFINE_SFX(_0, _1, _2, _3, _4, _5) 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
// Only the first row of these is supported by sequence 0. (gSfxChannelLayout is always 0.)
u8 gChannelsPerBank[4][7] = {
@@ -168,122 +192,13 @@ u8 sSeqModeInput = 0;
#define SEQ_FLAG_SKIP_HARP_INTRO (1 << 6)
#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[] = {
-#if PLATFORM_N64
- SEQ_FLAG_FANFARE | SEQ_FLAG_ENEMY, // NA_BGM_GENERAL_SFX
-#else
- SEQ_FLAG_FANFARE, // NA_BGM_GENERAL_SFX
-#endif
- SEQ_FLAG_ENEMY, // NA_BGM_NATURE_BACKGROUND
- 0, // NA_BGM_FIELD_LOGIC
- 0, // NA_BGM_FIELD_INIT
- 0, // NA_BGM_FIELD_DEFAULT_1
- 0, // NA_BGM_FIELD_DEFAULT_2
- 0, // NA_BGM_FIELD_DEFAULT_3
- 0, // NA_BGM_FIELD_DEFAULT_4
- 0, // NA_BGM_FIELD_DEFAULT_5
- 0, // NA_BGM_FIELD_DEFAULT_6
- 0, // NA_BGM_FIELD_DEFAULT_7
- 0, // NA_BGM_FIELD_DEFAULT_8
- 0, // NA_BGM_FIELD_DEFAULT_9
- 0, // NA_BGM_FIELD_DEFAULT_A
- 0, // NA_BGM_FIELD_DEFAULT_B
- 0, // NA_BGM_FIELD_ENEMY_INIT
- 0, // NA_BGM_FIELD_ENEMY_1
- 0, // NA_BGM_FIELD_ENEMY_2
- 0, // NA_BGM_FIELD_ENEMY_3
- 0, // NA_BGM_FIELD_ENEMY_4
- 0, // NA_BGM_FIELD_STILL_1
- 0, // NA_BGM_FIELD_STILL_2
- 0, // NA_BGM_FIELD_STILL_3
- 0, // NA_BGM_FIELD_STILL_4
- SEQ_FLAG_RESUME_PREV | SEQ_FLAG_ENEMY, // NA_BGM_DUNGEON
- SEQ_FLAG_RESUME, // NA_BGM_KAKARIKO_ADULT
- 0, // NA_BGM_ENEMY
- SEQ_FLAG_NO_AMBIENCE | SEQ_FLAG_RESTORE, // NA_BGM_BOSS
- SEQ_FLAG_ENEMY, // NA_BGM_INSIDE_DEKU_TREE
- 0, // NA_BGM_MARKET
- 0, // NA_BGM_TITLE
- SEQ_FLAG_RESUME_PREV, // NA_BGM_LINK_HOUSE
- 0, // NA_BGM_GAME_OVER
- 0, // NA_BGM_BOSS_CLEAR
- SEQ_FLAG_FANFARE, // NA_BGM_ITEM_GET
- SEQ_FLAG_FANFARE_GANON, // NA_BGM_OPENING_GANON
- SEQ_FLAG_FANFARE, // NA_BGM_HEART_GET
- SEQ_FLAG_FANFARE, // NA_BGM_OCA_LIGHT
- SEQ_FLAG_ENEMY, // NA_BGM_JABU_JABU
- SEQ_FLAG_RESUME, // NA_BGM_KAKARIKO_KID
- 0, // NA_BGM_GREAT_FAIRY
- 0, // NA_BGM_ZELDA_THEME
- SEQ_FLAG_ENEMY, // NA_BGM_FIRE_TEMPLE
- SEQ_FLAG_FANFARE, // NA_BGM_OPEN_TRE_BOX
- SEQ_FLAG_ENEMY, // NA_BGM_FOREST_TEMPLE
- 0, // NA_BGM_COURTYARD
- SEQ_FLAG_NO_AMBIENCE, // NA_BGM_GANON_TOWER
- 0, // NA_BGM_LONLON
- SEQ_FLAG_NO_AMBIENCE, // NA_BGM_GORON_CITY
- 0, // NA_BGM_FIELD_MORNING
- SEQ_FLAG_FANFARE, // NA_BGM_SPIRITUAL_STONE
- SEQ_FLAG_FANFARE, // NA_BGM_OCA_BOLERO
- SEQ_FLAG_FANFARE, // NA_BGM_OCA_MINUET
- SEQ_FLAG_FANFARE, // NA_BGM_OCA_SERENADE
- SEQ_FLAG_FANFARE, // NA_BGM_OCA_REQUIEM
- SEQ_FLAG_FANFARE, // NA_BGM_OCA_NOCTURNE
- SEQ_FLAG_NO_AMBIENCE | SEQ_FLAG_RESTORE, // NA_BGM_MINI_BOSS
- SEQ_FLAG_FANFARE, // NA_BGM_SMALL_ITEM_GET
- 0, // NA_BGM_TEMPLE_OF_TIME
- SEQ_FLAG_FANFARE, // NA_BGM_EVENT_CLEAR
- SEQ_FLAG_RESUME | SEQ_FLAG_ENEMY, // NA_BGM_KOKIRI
- SEQ_FLAG_FANFARE, // NA_BGM_OCA_FAIRY_GET
- SEQ_FLAG_ENEMY, // NA_BGM_SARIA_THEME
- SEQ_FLAG_ENEMY, // NA_BGM_SPIRIT_TEMPLE
- 0, // NA_BGM_HORSE
- 0, // NA_BGM_HORSE_GOAL
- 0, // NA_BGM_INGO
- SEQ_FLAG_FANFARE, // NA_BGM_MEDALLION_GET
- SEQ_FLAG_FANFARE, // NA_BGM_OCA_SARIA
- SEQ_FLAG_FANFARE, // NA_BGM_OCA_EPONA
- SEQ_FLAG_FANFARE, // NA_BGM_OCA_ZELDA
- SEQ_FLAG_FANFARE, // NA_BGM_OCA_SUNS
- SEQ_FLAG_FANFARE, // NA_BGM_OCA_TIME
- SEQ_FLAG_FANFARE, // NA_BGM_OCA_STORM
- 0, // NA_BGM_NAVI_OPENING
- 0, // NA_BGM_DEKU_TREE_CS
- 0, // NA_BGM_WINDMILL
- 0, // NA_BGM_HYRULE_CS
- SEQ_FLAG_RESUME_PREV, // NA_BGM_MINI_GAME
- 0, // NA_BGM_SHEIK
- SEQ_FLAG_RESUME, // NA_BGM_ZORA_DOMAIN
- SEQ_FLAG_FANFARE, // NA_BGM_APPEAR
- 0, // NA_BGM_ADULT_LINK
- 0, // NA_BGM_MASTER_SWORD
- SEQ_FLAG_FANFARE_GANON, // NA_BGM_INTRO_GANON
- SEQ_FLAG_RESUME_PREV, // NA_BGM_SHOP
- SEQ_FLAG_SKIP_HARP_INTRO, // NA_BGM_CHAMBER_OF_SAGES
- SEQ_FLAG_SKIP_HARP_INTRO, // NA_BGM_FILE_SELECT
- SEQ_FLAG_ENEMY, // NA_BGM_ICE_CAVERN
- SEQ_FLAG_FANFARE, // NA_BGM_DOOR_OF_TIME
- SEQ_FLAG_FANFARE, // NA_BGM_OWL
- SEQ_FLAG_ENEMY, // NA_BGM_SHADOW_TEMPLE
- SEQ_FLAG_ENEMY, // NA_BGM_WATER_TEMPLE
- SEQ_FLAG_FANFARE, // NA_BGM_BRIDGE_TO_GANONS
- 0, // NA_BGM_OCARINA_OF_TIME
- SEQ_FLAG_RESUME | SEQ_FLAG_ENEMY, // NA_BGM_GERUDO_VALLEY
- 0, // NA_BGM_POTION_SHOP
- 0, // NA_BGM_KOTAKE_KOUME
- SEQ_FLAG_NO_AMBIENCE, // NA_BGM_ESCAPE
- 0, // NA_BGM_UNDERGROUND
- SEQ_FLAG_NO_AMBIENCE, // NA_BGM_GANON_BATTLE_1
- SEQ_FLAG_NO_AMBIENCE, // NA_BGM_GANON_BATTLE_2
- 0, // NA_BGM_END_DEMO
- 0, // NA_BGM_STAFF_1
- 0, // NA_BGM_STAFF_2
- 0, // NA_BGM_STAFF_3
- 0, // NA_BGM_STAFF_4
- 0, // NA_BGM_FIRE_BOSS
- SEQ_FLAG_RESTORE, // NA_BGM_TIMED_MINI_GAME
- 0, // NA_BGM_CUTSCENE_EFFECTS
+#include "tables/sequence_table.h"
};
+#undef DEFINE_SEQUENCE
+#undef DEFINE_SEQUENCE_PTR
s8 sSpecReverbs[20] = { 0, 0, 0, 0, 0, 0, 0, 40, 0, 15, 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 6269dffa4..4f52fbdf0 100644
--- a/src/audio/sfx_params.c
+++ b/src/audio/sfx_params.c
@@ -1,7 +1,7 @@
#include "ultra64.h"
#include "global.h"
-#define DEFINE_SFX(_0, importance, distParam, randParam, flags) \
+#define DEFINE_SFX(_0, _1, importance, distParam, randParam, flags) \
{ importance, ((((distParam) << SFX_PARAM_01_SHIFT) & SFX_PARAM_01_MASK) | \
(((randParam) << SFX_PARAM_67_SHIFT) & SFX_PARAM_67_MASK) | (flags)) },
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
+};