Import code_8019AF00.c (Audio) data & bss, introduce z64ocarina.h (#575)

* Import code_8018AF00 Data

* code_8019AF00.c BSS Imported

* format

* Small touch-up

* rename `bgm.h` to `sequence.h`

* Missed a variable

* PR Feedback 1
This commit is contained in:
engineer124
2022-02-14 12:38:46 +11:00
committed by GitHub
parent 7565f9f052
commit 01ca078226
9 changed files with 2353 additions and 290 deletions
+144 -2
View File
@@ -1,5 +1,5 @@
#ifndef BGM_H
#define BGM_H
#ifndef SEQUENCE_H
#define SEQUENCE_H
#define NA_BGM_STOP 0x100000FF
@@ -133,4 +133,146 @@
#define NA_BGM_END_CREDITS_2 0x82 // The End/Credits II "STAFFROLL2"
#define NA_BGM_DISABLED 0xFFFF
typedef enum {
/* 0 */ SEQ_PLAYER_BGM_MAIN,
/* 1 */ SEQ_PLAYER_FANFARE,
/* 2 */ SEQ_PLAYER_SFX,
/* 3 */ SEQ_PLAYER_BGM_SUB,
/* 4 */ SEQ_PLAYER_NATURE
} SequencePlayerId;
typedef enum {
/* 0 */ SEQ_MODE_DEFAULT,
/* 1 */ SEQ_MODE_ENEMY,
/* 2 */ SEQ_MODE_STILL, // Not moving or first-person view
/* 3 */ SEQ_MODE_IGNORE
} SequenceMode;
typedef enum {
/* 0x0 */ CHANNEL_IO_PORT_0,
/* 0x1 */ CHANNEL_IO_PORT_1,
/* 0x2 */ CHANNEL_IO_PORT_2,
/* 0x3 */ CHANNEL_IO_PORT_3,
/* 0x4 */ CHANNEL_IO_PORT_4,
/* 0x5 */ CHANNEL_IO_PORT_5,
/* 0x6 */ CHANNEL_IO_PORT_6,
/* 0x7 */ CHANNEL_IO_PORT_7
} ChannelIOPort;
typedef enum {
/* 0x0 */ NATURE_CHANNEL_STREAM_0,
/* 0x1 */ NATURE_CHANNEL_CRITTER_0,
/* 0x2 */ NATURE_CHANNEL_CRITTER_1,
/* 0x3 */ NATURE_CHANNEL_CRITTER_2,
/* 0x4 */ NATURE_CHANNEL_CRITTER_3,
/* 0x5 */ NATURE_CHANNEL_CRITTER_4,
/* 0x6 */ NATURE_CHANNEL_CRITTER_5,
/* 0x7 */ NATURE_CHANNEL_CRITTER_6,
/* 0x8 */ NATURE_CHANNEL_CRITTER_7,
/* 0xC */ NATURE_CHANNEL_STREAM_1 = 12,
/* 0xD */ NATURE_CHANNEL_UNK,
/* 0xE */ NATURE_CHANNEL_RAIN,
/* 0xF */ NATURE_CHANNEL_LIGHTNING
} NatureChannelIdx; // playerIdx = 4
typedef enum {
/* 0x00 */ NATURE_AMBIENCE_0,
/* 0x01 */ NATURE_AMBIENCE_1,
/* 0x02 */ NATURE_AMBIENCE_2,
/* 0x03 */ NATURE_AMBIENCE_3,
/* 0x04 */ NATURE_AMBIENCE_4,
/* 0x05 */ NATURE_AMBIENCE_5,
/* 0x06 */ NATURE_AMBIENCE_6,
/* 0x07 */ NATURE_AMBIENCE_7,
/* 0x08 */ NATURE_AMBIENCE_8,
/* 0x09 */ NATURE_AMBIENCE_9,
/* 0x0A */ NATURE_AMBIENCE_A,
/* 0x0B */ NATURE_AMBIENCE_B,
/* 0x0C */ NATURE_AMBIENCE_C,
/* 0x0D */ NATURE_AMBIENCE_D,
/* 0x0E */ NATURE_AMBIENCE_E,
/* 0x0F */ NATURE_AMBIENCE_F,
/* 0x10 */ NATURE_AMBIENCE_10,
/* 0x11 */ NATURE_AMBIENCE_11,
/* 0x12 */ NATURE_AMBIENCE_12,
/* 0x13 */ NATURE_AMBIENCE_13
} NatureAmbienceId; // playerIdx = 4
typedef enum {
/* 0x00 */ NATURE_STREAM_0,
/* 0x01 */ NATURE_STREAM_1,
/* 0x02 */ NATURE_STREAM_2,
/* 0x03 */ NATURE_STREAM_3
} NatureStreamId;
typedef enum {
/* 0x00 */ NATURE_CRITTER_00,
/* 0x01 */ NATURE_CRITTER_01,
/* 0x02 */ NATURE_CRITTER_02,
/* 0x03 */ NATURE_CRITTER_03,
/* 0x04 */ NATURE_CRITTER_04,
/* 0x05 */ NATURE_CRITTER_05,
/* 0x06 */ NATURE_CRITTER_06,
/* 0x07 */ NATURE_CRITTER_07,
/* 0x08 */ NATURE_CRITTER_08,
/* 0x09 */ NATURE_CRITTER_09,
/* 0x0A */ NATURE_CRITTER_10,
/* 0x0B */ NATURE_CRITTER_11,
/* 0x0C */ NATURE_CRITTER_12,
/* 0x0D */ NATURE_CRITTER_13,
/* 0x0E */ NATURE_CRITTER_14,
/* 0x0F */ NATURE_CRITTER_15,
/* 0x10 */ NATURE_CRITTER_16,
/* 0x11 */ NATURE_CRITTER_17,
/* 0x12 */ NATURE_CRITTER_18,
/* 0x13 */ NATURE_CRITTER_19
} NatureAmimalId;
#define NATURE_IO_CRITTER_0_TYPE(type) NATURE_CHANNEL_CRITTER_0, CHANNEL_IO_PORT_2, type
#define NATURE_IO_CRITTER_0_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_0, CHANNEL_IO_PORT_3, bend
#define NATURE_IO_CRITTER_0_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_0, CHANNEL_IO_PORT_4, num
#define NATURE_IO_CRITTER_0_PORT5(reverb) NATURE_CHANNEL_CRITTER_0, CHANNEL_IO_PORT_5, reverb
#define NATURE_IO_CRITTER_1_TYPE(type) NATURE_CHANNEL_CRITTER_1, CHANNEL_IO_PORT_2, type
#define NATURE_IO_CRITTER_1_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_1, CHANNEL_IO_PORT_3, bend
#define NATURE_IO_CRITTER_1_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_1, CHANNEL_IO_PORT_4, num
#define NATURE_IO_CRITTER_1_PORT5(reverb) NATURE_CHANNEL_CRITTER_1, CHANNEL_IO_PORT_5, reverb
#define NATURE_IO_CRITTER_2_TYPE(type) NATURE_CHANNEL_CRITTER_2, CHANNEL_IO_PORT_2, type
#define NATURE_IO_CRITTER_2_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_2, CHANNEL_IO_PORT_3, bend
#define NATURE_IO_CRITTER_2_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_2, CHANNEL_IO_PORT_4, num
#define NATURE_IO_CRITTER_2_PORT5(reverb) NATURE_CHANNEL_CRITTER_2, CHANNEL_IO_PORT_5, reverb
#define NATURE_IO_CRITTER_3_TYPE(type) NATURE_CHANNEL_CRITTER_3, CHANNEL_IO_PORT_2, type
#define NATURE_IO_CRITTER_3_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_3, CHANNEL_IO_PORT_3, bend
#define NATURE_IO_CRITTER_3_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_3, CHANNEL_IO_PORT_4, num
#define NATURE_IO_CRITTER_3_PORT5(reverb) NATURE_CHANNEL_CRITTER_3, CHANNEL_IO_PORT_5, reverb
#define NATURE_IO_CRITTER_4_TYPE(type) NATURE_CHANNEL_CRITTER_4, CHANNEL_IO_PORT_2, type
#define NATURE_IO_CRITTER_4_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_4, CHANNEL_IO_PORT_3, bend
#define NATURE_IO_CRITTER_4_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_4, CHANNEL_IO_PORT_4, num
#define NATURE_IO_CRITTER_4_PORT5(reverb) NATURE_CHANNEL_CRITTER_4, CHANNEL_IO_PORT_5, reverb
#define NATURE_IO_CRITTER_5_TYPE(type) NATURE_CHANNEL_CRITTER_5, CHANNEL_IO_PORT_2, type
#define NATURE_IO_CRITTER_5_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_5, CHANNEL_IO_PORT_3, bend
#define NATURE_IO_CRITTER_5_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_5, CHANNEL_IO_PORT_4, num
#define NATURE_IO_CRITTER_5_PORT5(reverb) NATURE_CHANNEL_CRITTER_5, CHANNEL_IO_PORT_5, reverb
#define NATURE_IO_CRITTER_6_TYPE(type) NATURE_CHANNEL_CRITTER_6, CHANNEL_IO_PORT_2, type
#define NATURE_IO_CRITTER_6_BEND_PITCH(bend) NATURE_CHANNEL_CRITTER_6, CHANNEL_IO_PORT_3, bend
#define NATURE_IO_CRITTER_6_NUM_LAYERS(num) NATURE_CHANNEL_CRITTER_6, CHANNEL_IO_PORT_4, num
#define NATURE_IO_CRITTER_6_PORT5(reverb) NATURE_CHANNEL_CRITTER_6, CHANNEL_IO_PORT_5, reverb
#define NATURE_IO_STREAM_0_TYPE(type) NATURE_CHANNEL_STREAM_0, CHANNEL_IO_PORT_2, type
#define NATURE_IO_STREAM_0_PORT3(data) NATURE_CHANNEL_STREAM_0, CHANNEL_IO_PORT_3, data
#define NATURE_IO_STREAM_0_PORT4(data) NATURE_CHANNEL_STREAM_0, CHANNEL_IO_PORT_4, data
#define NATURE_IO_STREAM_1_TYPE(type) NATURE_CHANNEL_STREAM_1, CHANNEL_IO_PORT_2, type
#define NATURE_IO_STREAM_1_PORT3(data) NATURE_CHANNEL_STREAM_1, CHANNEL_IO_PORT_3, data
#define NATURE_IO_STREAM_1_PORT4(data) NATURE_CHANNEL_STREAM_1, CHANNEL_IO_PORT_4, data
#define NATURE_IO_RAIN_PORT4(data) NATURE_CHANNEL_RAIN, CHANNEL_IO_PORT_4, data
#define NATURE_IO_ENTRIES_END 0xFF
#endif
+2 -1
View File
@@ -1689,7 +1689,7 @@ extern UNK_PTR D_801D618C;
// extern UNK_TYPE1 D_801D6648;
// extern UNK_TYPE1 D_801D664C;
// extern UNK_TYPE1 D_801D6650;
extern f32 D_801D6654;
extern f32 gSfxVolume;
// extern UNK_TYPE1 D_801D6658;
// extern UNK_TYPE1 D_801D665C;
// extern UNK_TYPE1 D_801D6660;
@@ -3340,6 +3340,7 @@ extern FaultAddrConvClient sGraphFaultAddrConvClient;
extern FaultClient sGraphFaultClient;
extern GfxMasterList* gGfxMasterDL;
extern CfbInfo sGraphCfbInfos[3];
extern OSTime sGraphTaskStartTime;
extern OSMesgQueue sSiIntMsgQ;
extern OSMesg sSiIntMsgBuf[1];
extern u32 gSegments[NUM_SEGMENTS];
+2 -1
View File
@@ -17,9 +17,9 @@
#include "scheduler.h"
#include "xstdio.h"
#include "bgm.h"
#include "color.h"
#include "ichain.h"
#include "sequence.h"
#include "sfx.h"
#include "z64actor.h"
@@ -34,6 +34,7 @@
#include "z64light.h"
#include "z64math.h"
#include "z64object.h"
#include "z64ocarina.h"
#include "z64player.h"
#include "z64scene.h"
#include "z64save.h"
+7 -84
View File
@@ -20,6 +20,13 @@
#define AIBUF_LEN 0x580
typedef enum {
/* 0 */ AUDIO_FS_STEREO,
/* 1 */ AUDIO_FS_HEADSET,
/* 2 */ AUDIO_FS_SURROUND,
/* 3 */ AUDIO_FS_MONO
} AudioFileSelectOption;
typedef enum {
/* 0 */ AUDIO_MODE_STEREO,
/* 1 */ AUDIO_MODE_HEADSET,
@@ -71,63 +78,6 @@ typedef enum {
/* 3 */ CACHE_PERMANENT
} AudioCacheType;
typedef enum {
/* 0 */ OCARINA_SONG_SONATA,
/* 1 */ OCARINA_SONG_GORON_LULLABY,
/* 2 */ OCARINA_SONG_NEW_WAVE,
/* 3 */ OCARINA_SONG_ELEGY,
/* 4 */ OCARINA_SONG_OATH,
/* 5 */ OCARINA_SONG_SARIAS,
/* 6 */ OCARINA_SONG_TIME,
/* 7 */ OCARINA_SONG_HEALING,
/* 8 */ OCARINA_SONG_EPONAS,
/* 9 */ OCARINA_SONG_SOARING,
/* 10 */ OCARINA_SONG_STORMS,
/* 11 */ OCARINA_SONG_SUNS,
/* 12 */ OCARINA_SONG_INVERTED_TIME,
/* 13 */ OCARINA_SONG_DOUBLE_TIME,
/* 14 */ OCARINA_SONG_GORON_LULLABY_INTRO,
/* 15 */ OCARINA_SONG_WIND_FISH_HUMAN, // "Ballad of the Wind Fish"
/* 16 */ OCARINA_SONG_WIND_FISH_GORON,
/* 17 */ OCARINA_SONG_WIND_FISH_ZORA,
/* 18 */ OCARINA_SONG_WIND_FISH_DEKU,
/* 19 */ OCARINA_SONG_EVAN_PART1,
/* 20 */ OCARINA_SONG_EVAN_PART2,
/* 21 */ OCARINA_SONG_ZELDAS_LULLABY,
/* 22 */ OCARINA_SONG_SCARECROW,
/* 23 */ OCARINA_SONG_TERMINA_WALL,
/* 24 */ OCARINA_SONG_MAX,
} OcarinaSongId;
typedef enum {
/* 0 */ OCARINA_BTN_A,
/* 1 */ OCARINA_BTN_C_DOWN,
/* 2 */ OCARINA_BTN_C_RIGHT,
/* 3 */ OCARINA_BTN_C_LEFT,
/* 4 */ OCARINA_BTN_C_UP,
/* -1 */ OCARINA_BTN_INVALID = 0xFF
} OcarinaButtonIdx;
typedef enum {
/* 0x0 */ OCARINA_PITCH_C4,
/* 0x1 */ OCARINA_PITCH_DFLAT4,
/* 0x2 */ OCARINA_PITCH_D4,
/* 0x3 */ OCARINA_PITCH_EFLAT4,
/* 0x4 */ OCARINA_PITCH_E4,
/* 0x5 */ OCARINA_PITCH_F4,
/* 0x6 */ OCARINA_PITCH_GFLAT4,
/* 0x7 */ OCARINA_PITCH_G4,
/* 0x8 */ OCARINA_PITCH_AFLAT4,
/* 0x9 */ OCARINA_PITCH_A4,
/* 0xA */ OCARINA_PITCH_BFLAT4,
/* 0xB */ OCARINA_PITCH_B4,
/* 0xC */ OCARINA_PITCH_C5,
/* 0xD */ OCARINA_PITCH_DFLAT5,
/* 0xE */ OCARINA_PITCH_D5,
/* 0xF */ OCARINA_PITCH_EFLAT5,
/* -1 */ OCARINA_PITCH_NONE = 0xFF
} OcarinaNoteIdx;
typedef s32 (*DmaHandler)(OSPiHandle* handle, OSIoMesg* mb, s32 direction);
struct Note;
@@ -1155,31 +1105,4 @@ typedef struct {
/* 0x10 */ f32* vol;
} SoundRequest; // size = 0x14
/**
* Note:
* Flag for resolving C_RIGHT and C_LEFT only being two semitones apart
* 0x40 - BTN_Z is pressed to lower note by a semitone
* 0x80 - BTN_R is pressed to raise note by a semitone
*/
typedef struct {
/* 0x0 */ u8 noteIdx;
/* 0x2 */ u16 length; // number of frames the note is sustained
/* 0x4 */ u8 volume;
/* 0x5 */ u8 vibrato;
/* 0x6 */ s8 bend;
/* 0x7 */ u8 BFlat4Flag; // BFlat4Flag See note above
} OcarinaNote; // size = 0x8
typedef struct {
/* 0x0 */ u8 numButtons;
/* 0x1 */ u8 buttonIdx[8];
} OcarinaSongButtons; // size = 0x9
typedef struct {
/* 0x0 */ u8 buttonIdx;
/* 0x1 */ u8 state;
/* 0x2 */ u8 pos;
} OcarinaStaff; // size = 0x3
#endif
+125
View File
@@ -0,0 +1,125 @@
#ifndef Z64OCARINA_H
#define Z64OCARINA_H
#include "ultra64.h"
typedef enum {
/* 0 */ OCARINA_SONG_SONATA,
/* 1 */ OCARINA_SONG_GORON_LULLABY,
/* 2 */ OCARINA_SONG_NEW_WAVE,
/* 3 */ OCARINA_SONG_ELEGY,
/* 4 */ OCARINA_SONG_OATH,
/* 5 */ OCARINA_SONG_SARIAS,
/* 6 */ OCARINA_SONG_TIME,
/* 7 */ OCARINA_SONG_HEALING,
/* 8 */ OCARINA_SONG_EPONAS,
/* 9 */ OCARINA_SONG_SOARING,
/* 10 */ OCARINA_SONG_STORMS,
/* 11 */ OCARINA_SONG_SUNS,
/* 12 */ OCARINA_SONG_INVERTED_TIME,
/* 13 */ OCARINA_SONG_DOUBLE_TIME,
/* 14 */ OCARINA_SONG_GORON_LULLABY_INTRO,
/* 15 */ OCARINA_SONG_WIND_FISH_HUMAN, // "Ballad of the Wind Fish"
/* 16 */ OCARINA_SONG_WIND_FISH_GORON,
/* 17 */ OCARINA_SONG_WIND_FISH_ZORA,
/* 18 */ OCARINA_SONG_WIND_FISH_DEKU,
/* 19 */ OCARINA_SONG_EVAN_PART1,
/* 20 */ OCARINA_SONG_EVAN_PART2,
/* 21 */ OCARINA_SONG_ZELDAS_LULLABY,
/* 22 */ OCARINA_SONG_SCARECROW,
/* 23 */ OCARINA_SONG_TERMINA_WALL,
/* 24 */ OCARINA_SONG_MAX,
/* 24 */ OCARINA_SONG_SCARECROW_LONG = OCARINA_SONG_MAX
} OcarinaSongId;
typedef enum {
/* 0 */ OCARINA_BTN_A,
/* 1 */ OCARINA_BTN_C_DOWN,
/* 2 */ OCARINA_BTN_C_RIGHT,
/* 3 */ OCARINA_BTN_C_LEFT,
/* 4 */ OCARINA_BTN_C_UP,
/* -1 */ OCARINA_BTN_INVALID = 0xFF
} OcarinaButtonIdx;
// Uses scientific pitch notation relative to middle C
// https://en.wikipedia.org/wiki/Scientific_pitch_notation
typedef enum {
/* 0x0 */ OCARINA_PITCH_C4,
/* 0x1 */ OCARINA_PITCH_DFLAT4,
/* 0x2 */ OCARINA_PITCH_D4,
/* 0x3 */ OCARINA_PITCH_EFLAT4,
/* 0x4 */ OCARINA_PITCH_E4,
/* 0x5 */ OCARINA_PITCH_F4,
/* 0x6 */ OCARINA_PITCH_GFLAT4,
/* 0x7 */ OCARINA_PITCH_G4,
/* 0x8 */ OCARINA_PITCH_AFLAT4,
/* 0x9 */ OCARINA_PITCH_A4,
/* 0xA */ OCARINA_PITCH_BFLAT4,
/* 0xB */ OCARINA_PITCH_B4,
/* 0xC */ OCARINA_PITCH_C5,
/* 0xD */ OCARINA_PITCH_DFLAT5,
/* 0xE */ OCARINA_PITCH_D5,
/* 0xF */ OCARINA_PITCH_EFLAT5,
/* -1 */ OCARINA_PITCH_NONE = 0xFF
} OcarinaPitch;
// Mainly set by func_80152CAC in z_message.c
typedef enum {
/* 0 */ OCARINA_INSTRUMENT_OFF,
/* 1 */ OCARINA_INSTRUMENT_DEFAULT,
/* 2 */ OCARINA_INSTRUMENT_FEMALE_VOICE,
/* 3 */ OCARINA_INSTRUMENT_WHISTLING_FLUTE,
/* 4 */ OCARINA_INSTRUMENT_HARP,
/* 5 */ OCARINA_INSTRUMENT_IKANA_KING,
/* 6 */ OCARINA_INSTRUMENT_TATL,
/* 7 */ OCARINA_INSTRUMENT_GORON_DRUMS,
/* 8 */ OCARINA_INSTRUMENT_ZORA_GUITAR,
/* 9 */ OCARINA_INSTRUMENT_DEKU_PIPES,
/* 10 */ OCARINA_INSTRUMENT_MONKEY,
/* 11 */ OCARINA_INSTRUMENT_DEKU_TRUMPET, // Pull out ocarina for captured monkey
/* 12 */ OCARINA_INSTRUMENT_ELDER_GORON_DRUMS,
/* 13 */ OCARINA_INSTRUMENT_PIANO,
/* 14 */ OCARINA_INSTRUMENT_BASS_GUITAR,
/* 15 */ OCARINA_INSTRUMENT_BABY_SINGING,
/* 16 */ OCARINA_INSTRUMENT_AMPLIFIED_GUITAR, // Related to (gSaveContext.weekEventReg[0x29] & 0x20)
} OcarinaInstrumentId;
typedef enum {
/* 0 */ OCARINA_RECORD_OFF,
/* 1 */ OCARINA_RECORD_SCARECROW_LONG,
/* 2 */ OCARINA_RECORD_SCARECROW_SPAWN,
/* -1 */ OCARINA_RECORD_REJECTED = 0xFF
} OcarinaRecordingState;
/**
* BFlat4Flag Note:
* Flag for resolving whether (noteIdx = NOTE_BFLAT4)
* gets mapped to either C_RIGHT and C_LEFT
*
* This is required as C_RIGHT and C_LEFT are the only notes
* that map to two semitones apart (NOTE_A4 and NOTE_B4)
* 0x40 - BTN_Z is pressed to lower note by a semitone
* 0x80 - BTN_R is pressed to raise note by a semitone
*/
typedef struct {
/* 0x0 */ u8 noteIdx; // number of semitones above middle C
/* 0x2 */ u16 length; // number of frames the note is sustained
/* 0x4 */ u8 volume;
/* 0x5 */ u8 vibrato;
/* 0x6 */ s8 bend; // frequency multiplicative offset from the pitch defined by noteIdx
/* 0x7 */ u8 BFlat4Flag; // See note above
} OcarinaNote; // size = 0x8
typedef struct {
/* 0x0 */ u8 numButtons;
/* 0x1 */ u8 buttonIdx[8];
} OcarinaSongButtons; // size = 0x9
typedef struct {
/* 0x0 */ u8 buttonIdx;
/* 0x1 */ u8 state; // original name: "status"
/* 0x2 */ u8 pos; // original name: "locate"
} OcarinaStaff; // size = 0x3
#endif