mirror of https://github.com/zeldaret/mm.git
Cleanup External Audio Headers (#1520)
* high level audio headers * move externs * cleanup enums * small thing * rm sfxid * small fix
This commit is contained in:
parent
a44f19225b
commit
ed4da0ecef
|
@ -912,106 +912,6 @@ void Audio_ResetForAudioHeapStep2(void);
|
|||
void Audio_ResetForAudioHeapStep1(s32 specId);
|
||||
void Audio_PreNMI(void);
|
||||
|
||||
void AudioOcarina_SetSongStartingPos(void);
|
||||
void AudioOcarina_StartAtSongStartingPos(u32 ocarinaFlags);
|
||||
void AudioOcarina_StartForSongCheck(u32 ocarinaFlags, u8 ocarinaStaffPlayingPosStart);
|
||||
void AudioOcarina_StartWithSongNoteLengths(u32 ocarinaFlags);
|
||||
void AudioOcarina_StartDefault(u32 ocarinaFlags);
|
||||
u8 func_8019B5AC(void);
|
||||
void AudioOcarina_ResetAndReadInput(void);
|
||||
void AudioOcarina_SetOcarinaDisableTimer(u8 unused, u8 timer);
|
||||
void AudioOcarina_SetInstrument(u8 ocarinaInstrumentId);
|
||||
void AudioOcarina_SetPlaybackSong(s8 songIndexPlusOne, u8 playbackState);
|
||||
void AudioOcarina_SetRecordingState(u8 recordingState);
|
||||
OcarinaStaff* AudioOcarina_GetRecordingStaff(void);
|
||||
OcarinaStaff* AudioOcarina_GetPlayingStaff(void);
|
||||
OcarinaStaff* AudioOcarina_GetPlaybackStaff(void);
|
||||
void AudioOcarina_TerminaWallGenerateNotes(void);
|
||||
void AudioOcarina_PlayLongScarecrowSong(void);
|
||||
|
||||
void AudioSfx_SetProperties(u8 bankId, u8 entryIndex, u8 channelIndex);
|
||||
void AudioSfx_LowerSfxSettingsReverb(Vec3f* pos, s8 isReverbLowered);
|
||||
void AudioSfx_SetChannelIO(Vec3f* pos, u16 sfxId, u8 ioData);
|
||||
|
||||
void Audio_PlayObjSoundBgm(Vec3f* pos, s8 seqId);
|
||||
void Audio_PlayObjSoundFanfare(Vec3f* pos, s8 seqId);
|
||||
void Audio_PlaySubBgmAtPos(Vec3f* pos, u8 seqId, f32 maxDist);
|
||||
void Audio_PlaySubBgmAtPosWithFilter(Vec3f* pos, u8 seqId, f32 maxDist);
|
||||
void Audio_PlaySequenceAtDefaultPos(u8 seqPlayerIndex, u16 seqId);
|
||||
void Audio_PlaySequenceAtPos(u8 seqPlayerIndex, Vec3f* pos, u16 seqId, f32 maxDist);
|
||||
void Audio_PlayMorningSceneSequence(u16 seqId, u8 dayMinusOne);
|
||||
void Audio_PlaySceneSequence(u16 seqId, u8 dayMinusOne);
|
||||
void Audio_PlaySubBgm(u16 seqId);
|
||||
void Audio_PlaySequenceInCutscene(u16 seqId);
|
||||
void Audio_PlayBgm_StorePrevBgm(u16 seqId);
|
||||
void Audio_PlayFanfareWithPlayerIOPort7(u16 seqId, u8 ioData);
|
||||
void Audio_PlayFanfare(u16 seqId);
|
||||
void Audio_PlayFanfareWithPlayerIOCustomPort(u16 seqId, s8 ioPort, u8 ioData);
|
||||
void Audio_PlaySequenceWithSeqPlayerIO(s8 seqPlayerIndex, u16 seqId, u8 fadeInDuration, s8 ioPort, u8 ioData);
|
||||
void Audio_PlayAmbience(u8 ambienceId);
|
||||
|
||||
void Audio_StopSequenceAtDefaultPos(void);
|
||||
void Audio_StopSubBgm(void);
|
||||
void Audio_StopSequenceInCutscene(u16 seqId);
|
||||
void Audio_StopFanfare(u16 duration);
|
||||
|
||||
void Audio_SetBgmVolumeOff(void);
|
||||
void Audio_SetBgmVolumeOn(void);
|
||||
void Audio_SetMainBgmVolume(u8 targetVolume, u8 volumeFadeTimer);
|
||||
void Audio_SetSequenceMode(u8 seqMode);
|
||||
void Audio_SetPauseState(u8 isPauseMenuOpen);
|
||||
void Audio_SetEnvReverb(s8 reverb);
|
||||
void Audio_SetCodeReverb(s8 reverb);
|
||||
void Audio_SetFileSelectSettings(s8 audioSetting);
|
||||
void Audio_SetBaseFilter(u8 filter);
|
||||
void Audio_SetExtraFilter(u8 filter);
|
||||
void Audio_SetCutsceneFlag(s8 flag);
|
||||
void Audio_SetSpec(u8 specId);
|
||||
void Audio_SetAmbienceChannelIO(u8 channelIndexRange, u8 ioPort, u8 ioData);
|
||||
void Audio_SetSeqTempoAndFreq(u8 seqPlayerIndex, f32 freqTempoScale, u8 duration);
|
||||
|
||||
void Audio_MuteSeqPlayerBgmSub(u8 isMuted);
|
||||
void Audio_MuteAllSeqExceptSystemAndOcarina(u16 duration);
|
||||
void Audio_MuteSfxAndAmbienceSeqExceptSysAndOca(u16 duration);
|
||||
|
||||
void func_801A0204(s8 seqId);
|
||||
void func_801A246C(u8 seqPlayerIndex, u8 type);
|
||||
s32 Audio_IsSequencePlaying(u8 seqId);
|
||||
void Audio_RestorePrevBgm(void);
|
||||
void Audio_UpdateEnemyBgmVolume(f32 dist);
|
||||
u8 func_801A3950(u8 seqPlayerIndex, u8 resetChannelIO);
|
||||
u8 func_801A39F8(void);
|
||||
s32 func_801A46F8(void);
|
||||
|
||||
void AudioSfx_MuteBanks(u16 muteMask);
|
||||
void AudioSfx_LowerBgmVolume(u8 channelIndex);
|
||||
void AudioSfx_RestoreBgmVolume(u8 channelIndex);
|
||||
void AudioSfx_PlaySfx(u16 sfxId, Vec3f* pos, u8 token, f32* freqScale, f32* volume, s8* reverbAdd);
|
||||
void AudioSfx_ProcessRequest(void);
|
||||
void AudioSfx_StopByBank(u8 bankId);
|
||||
void AudioSfx_StopByPosAndBank(u8 bankId, Vec3f* pos);
|
||||
void AudioSfx_StopByPos(Vec3f* pos);
|
||||
void AudioSfx_StopByPosAndId(Vec3f* pos, u16 sfxId);
|
||||
void AudioSfx_StopByTokenAndId(u8 token, u16 sfxId);
|
||||
void AudioSfx_StopById(u32 sfxId);
|
||||
void AudioSfx_ProcessRequests(void);
|
||||
void AudioSfx_ProcessActiveSfx(void);
|
||||
u8 AudioSfx_IsPlaying(u32 sfxId);
|
||||
void AudioSfx_Reset(void);
|
||||
|
||||
void AudioSeq_StartSequence(u8 seqPlayerIndex, u8 seqId, u8 seqArgs, u16 fadeInDuration);
|
||||
void AudioSeq_StopSequence(u8 seqPlayerIndex, u16 fadeOutDuration);
|
||||
void AudioSeq_QueueSeqCmd(u32 cmd);
|
||||
void AudioSeq_ProcessSeqCmds(void);
|
||||
u16 AudioSeq_GetActiveSeqId(u8 seqPlayerIndex);
|
||||
s32 AudioSeq_IsSeqCmdNotQueued(u32 cmdVal, u32 cmdMask);
|
||||
void AudioSeq_SetVolumeScale(u8 seqPlayerIndex, u8 scaleIndex, u8 targetVol, u8 volFadeTimer);
|
||||
void AudioSeq_UpdateActiveSequences(void);
|
||||
u8 AudioSeq_UpdateAudioHeapReset(void);
|
||||
u8 AudioSeq_ResetReverb(void);
|
||||
void AudioSeq_ResetActiveSequences(void);
|
||||
void AudioSeq_ResetActiveSequencesAndVolume(void);
|
||||
|
||||
void Regs_InitData(PlayState* play);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#ifndef SEQUENCE_H
|
||||
#define SEQUENCE_H
|
||||
|
||||
#include "PR/ultratypes.h"
|
||||
#include "z64math.h"
|
||||
|
||||
// For the defines below, the names in quotes come from the official soundtrack,
|
||||
// and the names in parentheses are internal names that come from MM3D.
|
||||
#define NA_BGM_GENERAL_SFX 0x00 // General Sound Effects
|
||||
|
@ -137,7 +140,7 @@
|
|||
|
||||
#define SEQ_FLAG_ASYNC 0x8000
|
||||
|
||||
typedef enum {
|
||||
typedef enum SequencePlayerId {
|
||||
/* 0 */ SEQ_PLAYER_BGM_MAIN,
|
||||
/* 1 */ SEQ_PLAYER_FANFARE,
|
||||
/* 2 */ SEQ_PLAYER_SFX,
|
||||
|
@ -147,25 +150,25 @@ typedef enum {
|
|||
/* 0xFF */ SEQ_PLAYER_INVALID = 0xFF
|
||||
} SequencePlayerId;
|
||||
|
||||
typedef enum {
|
||||
typedef enum SequenceMode {
|
||||
/* 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
|
||||
typedef enum ChannelIOPort {
|
||||
/* 0 */ CHANNEL_IO_PORT_0,
|
||||
/* 1 */ CHANNEL_IO_PORT_1,
|
||||
/* 2 */ CHANNEL_IO_PORT_2,
|
||||
/* 3 */ CHANNEL_IO_PORT_3,
|
||||
/* 4 */ CHANNEL_IO_PORT_4,
|
||||
/* 5 */ CHANNEL_IO_PORT_5,
|
||||
/* 6 */ CHANNEL_IO_PORT_6,
|
||||
/* 7 */ CHANNEL_IO_PORT_7
|
||||
} ChannelIOPort;
|
||||
|
||||
typedef enum {
|
||||
typedef enum VolumeScaleIndex {
|
||||
/* 0 */ VOL_SCALE_INDEX_BGM_MAIN,
|
||||
/* 1 */ VOL_SCALE_INDEX_FANFARE,
|
||||
/* 2 */ VOL_SCALE_INDEX_SFX,
|
||||
|
@ -173,7 +176,7 @@ typedef enum {
|
|||
/* 4 */ VOL_SCALE_INDEX_MAX
|
||||
} VolumeScaleIndex; // May be worth using SequencePlayerId instead
|
||||
|
||||
typedef enum {
|
||||
typedef enum AmbienceChannelIndex {
|
||||
/* 0x0 */ AMBIENCE_CHANNEL_STREAM_0,
|
||||
/* 0x1 */ AMBIENCE_CHANNEL_CRITTER_0,
|
||||
/* 0x2 */ AMBIENCE_CHANNEL_CRITTER_1,
|
||||
|
@ -189,7 +192,7 @@ typedef enum {
|
|||
/* 0xF */ AMBIENCE_CHANNEL_LIGHTNING
|
||||
} AmbienceChannelIndex; // seqPlayerIndex = SEQ_PLAYER_AMBIENCE
|
||||
|
||||
typedef enum {
|
||||
typedef enum AmbienceId {
|
||||
/* 0x00 */ AMBIENCE_ID_00,
|
||||
/* 0x01 */ AMBIENCE_ID_01,
|
||||
/* 0x02 */ AMBIENCE_ID_02,
|
||||
|
@ -213,14 +216,14 @@ typedef enum {
|
|||
/* 0xFF */ AMBIENCE_ID_DISABLED = 0xFF
|
||||
} AmbienceId; // seqPlayerIndex = SEQ_PLAYER_AMBIENCE
|
||||
|
||||
typedef enum {
|
||||
/* 0x00 */ AMBIENCE_STREAM_0,
|
||||
/* 0x01 */ AMBIENCE_STREAM_1,
|
||||
/* 0x02 */ AMBIENCE_STREAM_2,
|
||||
/* 0x03 */ AMBIENCE_STREAM_3
|
||||
typedef enum AmbienceStreamId {
|
||||
/* 0 */ AMBIENCE_STREAM_0,
|
||||
/* 1 */ AMBIENCE_STREAM_1,
|
||||
/* 2 */ AMBIENCE_STREAM_2,
|
||||
/* 3 */ AMBIENCE_STREAM_3
|
||||
} AmbienceStreamId;
|
||||
|
||||
typedef enum {
|
||||
typedef enum AmbienceCritterId {
|
||||
/* 0x00 */ AMBIENCE_CRITTER_00,
|
||||
/* 0x01 */ AMBIENCE_CRITTER_01,
|
||||
/* 0x02 */ AMBIENCE_CRITTER_02,
|
||||
|
@ -290,4 +293,123 @@ typedef enum {
|
|||
|
||||
#define AMBIENCE_IO_ENTRIES_END 0xFF
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ f32 volCur;
|
||||
/* 0x04 */ f32 volTarget;
|
||||
/* 0x08 */ f32 volStep;
|
||||
/* 0x0C */ f32 freqScaleCur;
|
||||
/* 0x10 */ f32 freqScaleTarget;
|
||||
/* 0x14 */ f32 freqScaleStep;
|
||||
/* 0x18 */ u16 volTimer;
|
||||
/* 0x1A */ u16 freqScaleTimer;
|
||||
} ActiveSequenceChannelData; // size = 0x1C
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ ActiveSequenceChannelData channelData[16]; // SEQ_NUM_CHANNELS
|
||||
/* 0x1C0 */ f32 volCur;
|
||||
/* 0x1C4 */ f32 volTarget;
|
||||
/* 0x1C8 */ f32 volStep;
|
||||
/* 0x1CC */ u32 tempoCmd;
|
||||
/* 0x1D0 */ f32 tempoCur;
|
||||
/* 0x1D4 */ f32 tempoTarget;
|
||||
/* 0x1D8 */ f32 tempoStep;
|
||||
/* 0x1DC */ u32 setupCmd[8]; // setup commands
|
||||
/* 0x1FC */ u32 startAsyncSeqCmd; // temporarily stores the seqCmd used in SEQCMD_PLAY_SEQUENCE, to be called again once the font is reloaded in
|
||||
/* 0x200 */ u16 volTimer;
|
||||
/* 0x202 */ u16 tempoOriginal;
|
||||
/* 0x204 */ u16 tempoTimer;
|
||||
/* 0x206 */ u16 freqScaleChannelFlags;
|
||||
/* 0x208 */ u16 volChannelFlags;
|
||||
/* 0x20A */ u16 seqId;
|
||||
/* 0x20C */ u16 prevSeqId; // last seqId played on a player
|
||||
/* 0x20E */ u16 channelPortMask;
|
||||
/* 0x210 */ u8 isWaitingForFonts;
|
||||
/* 0x211 */ u8 fontId;
|
||||
/* 0x212 */ u8 volScales[VOL_SCALE_INDEX_MAX];
|
||||
/* 0x216 */ u8 volFadeTimer;
|
||||
/* 0x217 */ u8 fadeVolUpdate;
|
||||
/* 0x218 */ u8 setupCmdTimer;
|
||||
/* 0x219 */ u8 setupCmdNum; // number of setup commands
|
||||
/* 0x21A */ u8 setupFadeTimer;
|
||||
/* 0x21B */ u8 isSeqPlayerInit;
|
||||
} ActiveSequence; // size = 0x21C
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ u8 seqId;
|
||||
/* 0x1 */ u8 priority;
|
||||
} SeqRequest; // size = 0x2
|
||||
|
||||
// functions in sequence.c
|
||||
|
||||
void AudioSeq_StartSequence(u8 seqPlayerIndex, u8 seqId, u8 seqArgs, u16 fadeInDuration);
|
||||
void AudioSeq_StopSequence(u8 seqPlayerIndex, u16 fadeOutDuration);
|
||||
void AudioSeq_QueueSeqCmd(u32 cmd);
|
||||
void AudioSeq_ProcessSeqCmds(void);
|
||||
u16 AudioSeq_GetActiveSeqId(u8 seqPlayerIndex);
|
||||
s32 AudioSeq_IsSeqCmdNotQueued(u32 cmdVal, u32 cmdMask);
|
||||
void AudioSeq_SetVolumeScale(u8 seqPlayerIndex, u8 scaleIndex, u8 targetVol, u8 volFadeTimer);
|
||||
void AudioSeq_UpdateActiveSequences(void);
|
||||
u8 AudioSeq_UpdateAudioHeapReset(void);
|
||||
u8 AudioSeq_ResetReverb(void);
|
||||
void AudioSeq_ResetActiveSequences(void);
|
||||
void AudioSeq_ResetActiveSequencesAndVolume(void);
|
||||
|
||||
// functions in code_8019AF00.c
|
||||
|
||||
void Audio_PlayObjSoundBgm(Vec3f* pos, s8 seqId);
|
||||
void Audio_PlayObjSoundFanfare(Vec3f* pos, s8 seqId);
|
||||
void Audio_PlaySubBgmAtPos(Vec3f* pos, u8 seqId, f32 maxDist);
|
||||
void Audio_PlaySubBgmAtPosWithFilter(Vec3f* pos, u8 seqId, f32 maxDist);
|
||||
void Audio_PlaySequenceAtDefaultPos(u8 seqPlayerIndex, u16 seqId);
|
||||
void Audio_PlaySequenceAtPos(u8 seqPlayerIndex, Vec3f* pos, u16 seqId, f32 maxDist);
|
||||
void Audio_PlayMorningSceneSequence(u16 seqId, u8 dayMinusOne);
|
||||
void Audio_PlaySceneSequence(u16 seqId, u8 dayMinusOne);
|
||||
void Audio_PlaySubBgm(u16 seqId);
|
||||
void Audio_PlaySequenceInCutscene(u16 seqId);
|
||||
void Audio_PlayBgm_StorePrevBgm(u16 seqId);
|
||||
void Audio_PlayFanfareWithPlayerIOPort7(u16 seqId, u8 ioData);
|
||||
void Audio_PlayFanfare(u16 seqId);
|
||||
void Audio_PlayFanfareWithPlayerIOCustomPort(u16 seqId, s8 ioPort, u8 ioData);
|
||||
void Audio_PlaySequenceWithSeqPlayerIO(s8 seqPlayerIndex, u16 seqId, u8 fadeInDuration, s8 ioPort, u8 ioData);
|
||||
void Audio_PlayAmbience(u8 ambienceId);
|
||||
|
||||
void Audio_StopSequenceAtDefaultPos(void);
|
||||
void Audio_StopSubBgm(void);
|
||||
void Audio_StopSequenceInCutscene(u16 seqId);
|
||||
void Audio_StopFanfare(u16 duration);
|
||||
|
||||
void Audio_SetBgmVolumeOff(void);
|
||||
void Audio_SetBgmVolumeOn(void);
|
||||
void Audio_SetMainBgmVolume(u8 targetVolume, u8 volumeFadeTimer);
|
||||
void Audio_SetSequenceMode(u8 seqMode);
|
||||
|
||||
void Audio_SetPauseState(u8 isPauseMenuOpen);
|
||||
void Audio_SetEnvReverb(s8 reverb);
|
||||
void Audio_SetCodeReverb(s8 reverb);
|
||||
void Audio_SetFileSelectSettings(s8 audioSetting);
|
||||
void Audio_SetBaseFilter(u8 filter);
|
||||
void Audio_SetExtraFilter(u8 filter);
|
||||
void Audio_SetCutsceneFlag(s8 flag);
|
||||
void Audio_SetSpec(u8 specId);
|
||||
void Audio_SetAmbienceChannelIO(u8 channelIndexRange, u8 ioPort, u8 ioData);
|
||||
void Audio_SetSeqTempoAndFreq(u8 seqPlayerIndex, f32 freqTempoScale, u8 duration);
|
||||
|
||||
void Audio_MuteSeqPlayerBgmSub(u8 isMuted);
|
||||
void Audio_MuteAllSeqExceptSystemAndOcarina(u16 duration);
|
||||
void Audio_MuteSfxAndAmbienceSeqExceptSysAndOca(u16 duration);
|
||||
|
||||
void func_801A0204(s8 seqId);
|
||||
void func_801A246C(u8 seqPlayerIndex, u8 type);
|
||||
s32 Audio_IsSequencePlaying(u8 seqId);
|
||||
void Audio_RestorePrevBgm(void);
|
||||
void Audio_UpdateEnemyBgmVolume(f32 dist);
|
||||
u8 func_801A3950(u8 seqPlayerIndex, u8 resetChannelIO);
|
||||
u8 func_801A39F8(void);
|
||||
s32 func_801A46F8(void);
|
||||
|
||||
extern SeqRequest sSeqRequests[][5];
|
||||
extern u8 sNumSeqRequests[5];
|
||||
extern u32 sAudioSeqCmds[0xB0];
|
||||
extern ActiveSequence gActiveSeqs[];
|
||||
|
||||
#endif
|
||||
|
|
162
include/sfx.h
162
include/sfx.h
|
@ -1,6 +1,7 @@
|
|||
#ifndef SFX_H
|
||||
#define SFX_H
|
||||
|
||||
#include "PR/ultratypes.h"
|
||||
#include "z64math.h"
|
||||
|
||||
/**
|
||||
|
@ -2361,6 +2362,153 @@ typedef enum SfxPauseMenu {
|
|||
/* 1 */ SFX_PAUSE_MENU_OPEN
|
||||
} SfxPauseMenu;
|
||||
|
||||
typedef enum SfxBankType {
|
||||
/* 0 */ BANK_PLAYER,
|
||||
/* 1 */ BANK_ITEM,
|
||||
/* 2 */ BANK_ENV,
|
||||
/* 3 */ BANK_ENEMY,
|
||||
/* 4 */ BANK_SYSTEM,
|
||||
/* 5 */ BANK_OCARINA,
|
||||
/* 6 */ BANK_VOICE
|
||||
} SfxBankType;
|
||||
|
||||
typedef enum SfxState {
|
||||
/* 0 */ SFX_STATE_EMPTY,
|
||||
/* 1 */ SFX_STATE_QUEUED,
|
||||
/* 2 */ SFX_STATE_READY,
|
||||
/* 3 */ SFX_STATE_PLAYING_REFRESH,
|
||||
/* 4 */ SFX_STATE_PLAYING,
|
||||
/* 5 */ SFX_STATE_PLAYING_ONE_FRAME
|
||||
} SfxState;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ f32* posX;
|
||||
/* 0x04 */ f32* posY;
|
||||
/* 0x08 */ f32* posZ;
|
||||
/* 0x0C */ f32* freqScale;
|
||||
/* 0x10 */ f32* volume;
|
||||
/* 0x14 */ s8* reverbAdd;
|
||||
/* 0x18 */ f32 dist;
|
||||
/* 0x1C */ u32 priority; // lower is more prioritized
|
||||
/* 0x20 */ u16 sfxParams;
|
||||
/* 0x22 */ u16 sfxId;
|
||||
/* 0x25 */ u8 sfxFlags;
|
||||
/* 0x24 */ u8 sfxImportance;
|
||||
/* 0x26 */ u8 state; // uses SfxState enum
|
||||
/* 0x27 */ u8 freshness;
|
||||
/* 0x28 */ u8 prev;
|
||||
/* 0x29 */ u8 next;
|
||||
/* 0x2A */ u8 channelIndex;
|
||||
/* 0x2B */ u8 randFreq;
|
||||
/* 0x2C */ u8 token;
|
||||
} SfxBankEntry; // size = 0x30
|
||||
|
||||
#define SFX_BANK_SHIFT(sfxId) (((sfxId) >> 12) & 0xFF)
|
||||
|
||||
#define SFX_BANK_MASK(sfxId) ((sfxId) & 0xF000)
|
||||
|
||||
#define SFX_INDEX(sfxId) ((sfxId) & 0x3FF)
|
||||
#define SFX_BANK(sfxId) SFX_BANK_SHIFT(SFX_BANK_MASK(sfxId))
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ u32 priority; // lower is more prioritized
|
||||
/* 0x4 */ u8 entryIndex;
|
||||
} ActiveSfx; // size = 0x08
|
||||
|
||||
// SfxParams bit-packing
|
||||
|
||||
// Slows the decay of volume with distance (a 3-bit number ranging from 0-7)
|
||||
#define SFX_PARAM_DIST_RANGE_SHIFT 0
|
||||
#define SFX_PARAM_DIST_RANGE_MASK_UPPER (4 << SFX_PARAM_DIST_RANGE_SHIFT)
|
||||
#define SFX_PARAM_DIST_RANGE_MASK (7 << SFX_PARAM_DIST_RANGE_SHIFT)
|
||||
|
||||
// Lower SEQ_PLAYER_BGM_MAIN and SEQ_PLAYER_BGM_SUB while the sfx is playing
|
||||
#define SFX_FLAG_LOWER_VOLUME_BGM (1 << 3)
|
||||
|
||||
// Sfx priority is not raised with distance (making it more likely to be ejected)
|
||||
#define SFX_FLAG_PRIORITY_NO_DIST (1 << 4)
|
||||
|
||||
// If a new sfx is requested at both the same position with the same importance,
|
||||
// Block that new sfx from replacing the current sfx
|
||||
// Note: Only 1 sfx can be played at a specific position at once
|
||||
#define SFX_FLAG_BLOCK_EQUAL_IMPORTANCE (1 << 5)
|
||||
|
||||
// Applies increasingly random offsets to frequency (a 2-bit number ranging from 0-3)
|
||||
#define SFX_PARAM_RAND_FREQ_RAISE_SHIFT 6
|
||||
#define SFX_PARAM_RAND_FREQ_RAISE_MASK (3 << SFX_PARAM_RAND_FREQ_RAISE_SHIFT)
|
||||
|
||||
// Sets a flag to ioPort 5
|
||||
#define SFX_FLAG_8 (1 << 8)
|
||||
|
||||
// Use lowpass filter on surround sound
|
||||
#define SFX_FLAG_SURROUND_LOWPASS_FILTER (1 << 9)
|
||||
|
||||
// Unused remnant of OoT
|
||||
#define SFX_FLAG_BEHIND_SCREEN_Z_INDEX_SHIFT 10
|
||||
#define SFX_FLAG_BEHIND_SCREEN_Z_INDEX (1 << SFX_FLAG_BEHIND_SCREEN_Z_INDEX_SHIFT)
|
||||
|
||||
// Randomly scale base frequency each frame through mutiplicative offset
|
||||
#define SFX_PARAM_RAND_FREQ_SCALE (1 << 11)
|
||||
|
||||
// Sfx reverb is not raised with distance
|
||||
#define SFX_FLAG_REVERB_NO_DIST (1 << 12)
|
||||
|
||||
// Sfx volume is not lowered with distance
|
||||
#define SFX_FLAG_VOLUME_NO_DIST (1 << 13)
|
||||
|
||||
// SFX_FLAG_VIBRATO
|
||||
// Randomly lower base frequency each frame through additive offset
|
||||
#define SFX_PARAM_RAND_FREQ_LOWER (1 << 14)
|
||||
|
||||
// Sfx frequency is not raised with distance
|
||||
#define SFX_FLAG_FREQ_NO_DIST (1 << 15)
|
||||
|
||||
// Force the sfx to reset from the beginning when requested again
|
||||
#define SFX_FLAG2_FORCE_RESET (1 << 0)
|
||||
|
||||
// Unused
|
||||
#define SFX_FLAG2_UNUSED2 (1 << 2)
|
||||
#define SFX_FLAG2_UNUSED4 (1 << 4)
|
||||
|
||||
// Do not use highpass filter on surround sound
|
||||
#define SFX_FLAG2_SURROUND_NO_HIGHPASS_FILTER (1 << 5)
|
||||
|
||||
// Unused
|
||||
#define SFX_FLAG2_UNUSED6 (1 << 6)
|
||||
|
||||
// Apply a low-pass filter with a lowPassCutoff of 4
|
||||
#define SFX_FLAG2_APPLY_LOWPASS_FILTER (1 << 7)
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ u8 importance;
|
||||
/* 0x1 */ u8 flags;
|
||||
/* 0x2 */ u16 params;
|
||||
} SfxParams; // size = 0x4
|
||||
|
||||
// functions in sfx.c
|
||||
|
||||
void AudioSfx_MuteBanks(u16 muteMask);
|
||||
void AudioSfx_LowerBgmVolume(u8 channelIndex);
|
||||
void AudioSfx_RestoreBgmVolume(u8 channelIndex);
|
||||
void AudioSfx_PlaySfx(u16 sfxId, Vec3f* pos, u8 token, f32* freqScale, f32* volume, s8* reverbAdd);
|
||||
void AudioSfx_ProcessRequest(void);
|
||||
void AudioSfx_StopByBank(u8 bankId);
|
||||
void AudioSfx_StopByPosAndBank(u8 bankId, Vec3f* pos);
|
||||
void AudioSfx_StopByPos(Vec3f* pos);
|
||||
void AudioSfx_StopByPosAndId(Vec3f* pos, u16 sfxId);
|
||||
void AudioSfx_StopByTokenAndId(u8 token, u16 sfxId);
|
||||
void AudioSfx_StopById(u32 sfxId);
|
||||
void AudioSfx_ProcessRequests(void);
|
||||
void AudioSfx_ProcessActiveSfx(void);
|
||||
u8 AudioSfx_IsPlaying(u32 sfxId);
|
||||
void AudioSfx_Reset(void);
|
||||
|
||||
// functions in code_8019AF00.c
|
||||
|
||||
void AudioSfx_SetProperties(u8 bankId, u8 entryIndex, u8 channelIndex);
|
||||
void AudioSfx_LowerSfxSettingsReverb(Vec3f* pos, s8 isReverbLowered);
|
||||
void AudioSfx_SetChannelIO(Vec3f* pos, u16 sfxId, u8 ioData);
|
||||
|
||||
// Various wrappers to AudioSfx_PlaySfx
|
||||
void Audio_PlaySfx(u16 sfxId);
|
||||
void Audio_PlaySfx_2(u16 sfxId);
|
||||
|
@ -2396,4 +2544,18 @@ void Audio_SetSfxTimerLerpInterval(s8 timerLerpRange1, s8 timerLerpRange2);
|
|||
void Audio_SetSfxVolumeTransition(f32* volume, f32 volumeTarget, u16 duration);
|
||||
void Audio_SetSfxReverbIndexExceptOcarinaBank(u8 reverbIndex);
|
||||
|
||||
extern ActiveSfx gActiveSfx[7][3];
|
||||
|
||||
extern u8 gIsLargeSfxBank[7];
|
||||
extern u8 D_801D6608[7];
|
||||
extern u8 gChannelsPerBank[4][7];
|
||||
extern u8 gUsedChannelsPerBank[4][7];
|
||||
extern f32 gSfxVolume;
|
||||
extern SfxParams* gSfxParams[7];
|
||||
extern SfxBankEntry* gSfxBanks[7];
|
||||
extern u8 gSfxChannelLayout;
|
||||
extern Vec3f gSfxDefaultPos;
|
||||
extern f32 gSfxDefaultFreqAndVolScale;
|
||||
extern s8 gSfxDefaultReverb;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -183,19 +183,7 @@ extern f32 gStereoPanVolume[];
|
|||
extern f32 gDefaultPanVolume[];
|
||||
extern s32 gAudioCtxInitalized;
|
||||
extern u8 D_801D6200[0x400];
|
||||
extern u8 gIsLargeSfxBank[7];
|
||||
extern u8 D_801D6608[7];
|
||||
extern u8 gChannelsPerBank[4][7];
|
||||
extern u8 gUsedChannelsPerBank[4][7];
|
||||
extern f32 gSfxVolume;
|
||||
extern u8* gScarecrowSpawnSongPtr;
|
||||
extern OcarinaSongButtons gOcarinaSongButtons[24];
|
||||
extern SfxParams* gSfxParams[7];
|
||||
extern SfxBankEntry* gSfxBanks[7];
|
||||
extern u8 gSfxChannelLayout;
|
||||
extern Vec3f gSfxDefaultPos;
|
||||
extern f32 gSfxDefaultFreqAndVolScale;
|
||||
extern s8 gSfxDefaultReverb;
|
||||
|
||||
extern u8 gAudioSpecId;
|
||||
extern u8 gAudioHeapResetState;
|
||||
extern AudioSpec gAudioSpecs[21];
|
||||
|
@ -1551,11 +1539,6 @@ extern MtxF* sCurrentMatrix;
|
|||
|
||||
extern s32 D_801FD120;
|
||||
|
||||
extern ActiveSfx gActiveSfx[7][3];
|
||||
extern SeqRequest sSeqRequests[][5];
|
||||
extern u8 sNumSeqRequests[5];
|
||||
extern u32 sAudioSeqCmds[0xB0];
|
||||
extern ActiveSequence gActiveSeqs[];
|
||||
extern u8 sResetAudioHeapTimer;
|
||||
extern u16 sResetAudioHeapFadeReverbVolume;
|
||||
extern u16 sResetAudioHeapFadeReverbVolumeStep;
|
||||
|
|
|
@ -662,185 +662,6 @@ typedef struct {
|
|||
/* 0x1A */ u16 combFilterGain;
|
||||
} NoteSubAttributes; // size = 0x1A
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ f32 volCur;
|
||||
/* 0x04 */ f32 volTarget;
|
||||
/* 0x08 */ f32 volStep;
|
||||
/* 0x0C */ f32 freqScaleCur;
|
||||
/* 0x10 */ f32 freqScaleTarget;
|
||||
/* 0x14 */ f32 freqScaleStep;
|
||||
/* 0x18 */ u16 volTimer;
|
||||
/* 0x1A */ u16 freqScaleTimer;
|
||||
} ActiveSequenceChannelData; // size = 0x1C
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ ActiveSequenceChannelData channelData[SEQ_NUM_CHANNELS];
|
||||
/* 0x1C0 */ f32 volCur;
|
||||
/* 0x1C4 */ f32 volTarget;
|
||||
/* 0x1C8 */ f32 volStep;
|
||||
/* 0x1CC */ u32 tempoCmd;
|
||||
/* 0x1D0 */ f32 tempoCur;
|
||||
/* 0x1D4 */ f32 tempoTarget;
|
||||
/* 0x1D8 */ f32 tempoStep;
|
||||
/* 0x1DC */ u32 setupCmd[8]; // setup commands
|
||||
/* 0x1FC */ u32 startAsyncSeqCmd; // temporarily stores the seqCmd used in SEQCMD_PLAY_SEQUENCE, to be called again once the font is reloaded in
|
||||
/* 0x200 */ u16 volTimer;
|
||||
/* 0x202 */ u16 tempoOriginal;
|
||||
/* 0x204 */ u16 tempoTimer;
|
||||
/* 0x206 */ u16 freqScaleChannelFlags;
|
||||
/* 0x208 */ u16 volChannelFlags;
|
||||
/* 0x20A */ u16 seqId;
|
||||
/* 0x20C */ u16 prevSeqId; // last seqId played on a player
|
||||
/* 0x20E */ u16 channelPortMask;
|
||||
/* 0x210 */ u8 isWaitingForFonts;
|
||||
/* 0x211 */ u8 fontId;
|
||||
/* 0x212 */ u8 volScales[VOL_SCALE_INDEX_MAX];
|
||||
/* 0x216 */ u8 volFadeTimer;
|
||||
/* 0x217 */ u8 fadeVolUpdate;
|
||||
/* 0x218 */ u8 setupCmdTimer;
|
||||
/* 0x219 */ u8 setupCmdNum; // number of setup commands
|
||||
/* 0x21A */ u8 setupFadeTimer;
|
||||
/* 0x21B */ u8 isSeqPlayerInit;
|
||||
} ActiveSequence; // size = 0x21C
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ u8 seqId;
|
||||
/* 0x1 */ u8 priority;
|
||||
} SeqRequest; // size = 0x02
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ BANK_PLAYER,
|
||||
/* 1 */ BANK_ITEM,
|
||||
/* 2 */ BANK_ENV,
|
||||
/* 3 */ BANK_ENEMY,
|
||||
/* 4 */ BANK_SYSTEM,
|
||||
/* 5 */ BANK_OCARINA,
|
||||
/* 6 */ BANK_VOICE
|
||||
} SfxBankType;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ SFX_STATE_EMPTY,
|
||||
/* 1 */ SFX_STATE_QUEUED,
|
||||
/* 2 */ SFX_STATE_READY,
|
||||
/* 3 */ SFX_STATE_PLAYING_REFRESH,
|
||||
/* 4 */ SFX_STATE_PLAYING,
|
||||
/* 5 */ SFX_STATE_PLAYING_ONE_FRAME
|
||||
} SfxState;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ f32* posX;
|
||||
/* 0x04 */ f32* posY;
|
||||
/* 0x08 */ f32* posZ;
|
||||
/* 0x0C */ f32* freqScale;
|
||||
/* 0x10 */ f32* volume;
|
||||
/* 0x14 */ s8* reverbAdd;
|
||||
/* 0x18 */ f32 dist;
|
||||
/* 0x1C */ u32 priority; // lower is more prioritized
|
||||
/* 0x20 */ u16 sfxParams;
|
||||
/* 0x22 */ u16 sfxId;
|
||||
/* 0x25 */ u8 sfxFlags;
|
||||
/* 0x24 */ u8 sfxImportance;
|
||||
/* 0x26 */ u8 state; // uses SfxState enum
|
||||
/* 0x27 */ u8 freshness;
|
||||
/* 0x28 */ u8 prev;
|
||||
/* 0x29 */ u8 next;
|
||||
/* 0x2A */ u8 channelIndex;
|
||||
/* 0x2B */ u8 randFreq;
|
||||
/* 0x2C */ u8 token;
|
||||
} SfxBankEntry; // size = 0x30
|
||||
|
||||
/*
|
||||
* SfxId:
|
||||
*
|
||||
* & 03FF 0000000111111111 index
|
||||
* & 0400 0000010000000000 unused flag
|
||||
* & 0800 0000100000000000 SFX_FLAG
|
||||
* & 0C00 0000110000000000 Flag Mask
|
||||
* & F000 1111000000000000 observed in audio code
|
||||
*/
|
||||
|
||||
#define SFX_BANK_SHIFT(sfxId) (((sfxId) >> 12) & 0xFF)
|
||||
|
||||
#define SFX_BANK_MASK(sfxId) ((sfxId) & 0xF000)
|
||||
|
||||
#define SFX_INDEX(sfxId) ((sfxId) & 0x3FF)
|
||||
#define SFX_BANK(sfxId) SFX_BANK_SHIFT(SFX_BANK_MASK(sfxId))
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ u32 priority; // lower is more prioritized
|
||||
/* 0x4 */ u8 entryIndex;
|
||||
} ActiveSfx; // size = 0x08
|
||||
|
||||
// SfxParams bit-packing
|
||||
|
||||
// Slows the decay of volume with distance (a 3-bit number ranging from 0-7)
|
||||
#define SFX_PARAM_DIST_RANGE_SHIFT 0
|
||||
#define SFX_PARAM_DIST_RANGE_MASK_UPPER (4 << SFX_PARAM_DIST_RANGE_SHIFT)
|
||||
#define SFX_PARAM_DIST_RANGE_MASK (7 << SFX_PARAM_DIST_RANGE_SHIFT)
|
||||
|
||||
// Lower SEQ_PLAYER_BGM_MAIN and SEQ_PLAYER_BGM_SUB while the sfx is playing
|
||||
#define SFX_FLAG_LOWER_VOLUME_BGM (1 << 3)
|
||||
|
||||
// Sfx priority is not raised with distance (making it more likely to be ejected)
|
||||
#define SFX_FLAG_PRIORITY_NO_DIST (1 << 4)
|
||||
|
||||
// If a new sfx is requested at both the same position with the same importance,
|
||||
// Block that new sfx from replacing the current sfx
|
||||
// Note: Only 1 sfx can be played at a specific position at once
|
||||
#define SFX_FLAG_BLOCK_EQUAL_IMPORTANCE (1 << 5)
|
||||
|
||||
// Applies increasingly random offsets to frequency (a 2-bit number ranging from 0-3)
|
||||
#define SFX_PARAM_RAND_FREQ_RAISE_SHIFT 6
|
||||
#define SFX_PARAM_RAND_FREQ_RAISE_MASK (3 << SFX_PARAM_RAND_FREQ_RAISE_SHIFT)
|
||||
|
||||
// Sets a flag to ioPort 5
|
||||
#define SFX_FLAG_8 (1 << 8)
|
||||
|
||||
// Use lowpass filter on surround sound
|
||||
#define SFX_FLAG_SURROUND_LOWPASS_FILTER (1 << 9)
|
||||
|
||||
// Unused remnant of OoT
|
||||
#define SFX_FLAG_BEHIND_SCREEN_Z_INDEX_SHIFT 10
|
||||
#define SFX_FLAG_BEHIND_SCREEN_Z_INDEX (1 << SFX_FLAG_BEHIND_SCREEN_Z_INDEX_SHIFT)
|
||||
|
||||
// Randomly scale base frequency each frame through mutiplicative offset
|
||||
#define SFX_PARAM_RAND_FREQ_SCALE (1 << 11)
|
||||
|
||||
// Sfx reverb is not raised with distance
|
||||
#define SFX_FLAG_REVERB_NO_DIST (1 << 12)
|
||||
|
||||
// Sfx volume is not lowered with distance
|
||||
#define SFX_FLAG_VOLUME_NO_DIST (1 << 13)
|
||||
|
||||
// SFX_FLAG_VIBRATO
|
||||
// Randomly lower base frequency each frame through additive offset
|
||||
#define SFX_PARAM_RAND_FREQ_LOWER (1 << 14)
|
||||
|
||||
// Sfx frequency is not raised with distance
|
||||
#define SFX_FLAG_FREQ_NO_DIST (1 << 15)
|
||||
|
||||
// Force the sfx to reset from the beginning when requested again
|
||||
#define SFX_FLAG2_FORCE_RESET (1 << 0)
|
||||
|
||||
// Unused
|
||||
#define SFX_FLAG2_UNUSED2 (1 << 2)
|
||||
#define SFX_FLAG2_UNUSED4 (1 << 4)
|
||||
|
||||
// Do not use highpass filter on surround sound
|
||||
#define SFX_FLAG2_SURROUND_NO_HIGHPASS_FILTER (1 << 5)
|
||||
|
||||
// Unused
|
||||
#define SFX_FLAG2_UNUSED6 (1 << 6)
|
||||
|
||||
// Apply a low-pass filter with a lowPassCutoff of 4
|
||||
#define SFX_FLAG2_APPLY_LOWPASS_FILTER (1 << 7)
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ u8 importance;
|
||||
/* 0x1 */ u8 flags;
|
||||
/* 0x2 */ u16 params;
|
||||
} SfxParams; // size = 0x4
|
||||
|
||||
typedef void (*AudioCustomUpdateFunction)(void);
|
||||
typedef u32 (*AudioCustomSeqFunction)(s8 value, SequenceChannel* channel);
|
||||
typedef void* (*AudioCustomReverbFunction)(Sample*, s32, s8, s32);
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#ifndef Z64OCARINA_H
|
||||
#define Z64OCARINA_H
|
||||
|
||||
#include "ultra64.h"
|
||||
#include "PR/ultratypes.h"
|
||||
|
||||
typedef enum {
|
||||
typedef enum OcarinaSongId {
|
||||
/* 0 */ OCARINA_SONG_SONATA,
|
||||
/* 1 */ OCARINA_SONG_GORON_LULLABY,
|
||||
/* 2 */ OCARINA_SONG_NEW_WAVE,
|
||||
|
@ -32,7 +32,7 @@ typedef enum {
|
|||
/* 24 */ OCARINA_SONG_SCARECROW_LONG = OCARINA_SONG_MAX // anything larger than 24 is considered the long scarecrow's song
|
||||
} OcarinaSongId;
|
||||
|
||||
typedef enum {
|
||||
typedef enum OcarinaSongActionId {
|
||||
/* 0x00 */ OCARINA_ACTION_0, // acts like free play but never set
|
||||
/* 0x01 */ OCARINA_ACTION_FREE_PLAY,
|
||||
/* 0x02 */ OCARINA_ACTION_DEMONSTRATE_SONATA, // Song demonstrated/previewed by another actor/teacher
|
||||
|
@ -117,7 +117,7 @@ typedef enum {
|
|||
/* 0x51 */ OCARINA_ACTION_TIMED_PROMPT_STORMS
|
||||
} OcarinaSongActionId;
|
||||
|
||||
typedef enum {
|
||||
typedef enum OcarinaMode {
|
||||
/* 0x00 */ OCARINA_MODE_NONE,
|
||||
/* 0x01 */ OCARINA_MODE_ACTIVE,
|
||||
/* 0x02 */ OCARINA_MODE_WARP,
|
||||
|
@ -163,7 +163,7 @@ typedef enum {
|
|||
/* 0x2A */ OCARINA_MODE_PLAYED_FULL_EVAN_SONG
|
||||
} OcarinaMode;
|
||||
|
||||
typedef enum {
|
||||
typedef enum OcarinaButtonIndex {
|
||||
/* 0 */ OCARINA_BTN_A,
|
||||
/* 1 */ OCARINA_BTN_C_DOWN,
|
||||
/* 2 */ OCARINA_BTN_C_RIGHT,
|
||||
|
@ -175,7 +175,7 @@ typedef enum {
|
|||
|
||||
// Uses scientific pitch notation relative to middle C
|
||||
// https://en.wikipedia.org/wiki/Scientific_pitch_notation
|
||||
typedef enum {
|
||||
typedef enum OcarinaPitch {
|
||||
/* 0x0 */ OCARINA_PITCH_C4,
|
||||
/* 0x1 */ OCARINA_PITCH_DFLAT4,
|
||||
/* 0x2 */ OCARINA_PITCH_D4,
|
||||
|
@ -192,11 +192,10 @@ typedef enum {
|
|||
/* 0xD */ OCARINA_PITCH_DFLAT5,
|
||||
/* 0xE */ OCARINA_PITCH_D5,
|
||||
/* 0xF */ OCARINA_PITCH_EFLAT5,
|
||||
/* -1 */ OCARINA_PITCH_NONE = 0xFF
|
||||
/* -1 */ OCARINA_PITCH_NONE = 0xFF
|
||||
} OcarinaPitch;
|
||||
|
||||
// Mainly set by func_80152CAC in z_message.c
|
||||
typedef enum {
|
||||
typedef enum OcarinaInstrumentId {
|
||||
/* 0 */ OCARINA_INSTRUMENT_OFF,
|
||||
/* 1 */ OCARINA_INSTRUMENT_DEFAULT,
|
||||
/* 2 */ OCARINA_INSTRUMENT_FEMALE_VOICE,
|
||||
|
@ -216,14 +215,14 @@ typedef enum {
|
|||
/* 16 */ OCARINA_INSTRUMENT_AMPLIFIED_GUITAR // Related to WEEKEVENTREG_41_20
|
||||
} OcarinaInstrumentId;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ OCARINA_RECORD_OFF,
|
||||
/* 1 */ OCARINA_RECORD_SCARECROW_LONG,
|
||||
/* 2 */ OCARINA_RECORD_SCARECROW_SPAWN,
|
||||
typedef enum OcarinaRecordingState {
|
||||
/* 0 */ OCARINA_RECORD_OFF,
|
||||
/* 1 */ OCARINA_RECORD_SCARECROW_LONG,
|
||||
/* 2 */ OCARINA_RECORD_SCARECROW_SPAWN,
|
||||
/* -1 */ OCARINA_RECORD_REJECTED = 0xFF
|
||||
} OcarinaRecordingState;
|
||||
|
||||
typedef enum {
|
||||
typedef enum OcarinaError {
|
||||
/* 0 */ OCARINA_ERROR_NONE,
|
||||
/* 1 */ OCARINA_ERROR_1,
|
||||
/* 2 */ OCARINA_ERROR_2,
|
||||
|
@ -268,4 +267,24 @@ typedef struct OcarinaStaff {
|
|||
/* 0x2 */ u8 pos; // original name: "locate"
|
||||
} OcarinaStaff; // size = 0x3
|
||||
|
||||
void AudioOcarina_SetSongStartingPos(void);
|
||||
void AudioOcarina_StartAtSongStartingPos(u32 ocarinaFlags);
|
||||
void AudioOcarina_StartForSongCheck(u32 ocarinaFlags, u8 ocarinaStaffPlayingPosStart);
|
||||
void AudioOcarina_StartWithSongNoteLengths(u32 ocarinaFlags);
|
||||
void AudioOcarina_StartDefault(u32 ocarinaFlags);
|
||||
u8 func_8019B5AC(void);
|
||||
void AudioOcarina_ResetAndReadInput(void);
|
||||
void AudioOcarina_SetOcarinaDisableTimer(u8 unused, u8 timer);
|
||||
void AudioOcarina_SetInstrument(u8 ocarinaInstrumentId);
|
||||
void AudioOcarina_SetPlaybackSong(s8 songIndexPlusOne, u8 playbackState);
|
||||
void AudioOcarina_SetRecordingState(u8 recordingState);
|
||||
OcarinaStaff* AudioOcarina_GetRecordingStaff(void);
|
||||
OcarinaStaff* AudioOcarina_GetPlayingStaff(void);
|
||||
OcarinaStaff* AudioOcarina_GetPlaybackStaff(void);
|
||||
void AudioOcarina_TerminaWallGenerateNotes(void);
|
||||
void AudioOcarina_PlayLongScarecrowSong(void);
|
||||
|
||||
extern u8* gScarecrowSpawnSongPtr;
|
||||
extern OcarinaSongButtons gOcarinaSongButtons[OCARINA_SONG_MAX];
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#include "prevent_bss_reordering.h"
|
||||
#include "z64.h"
|
||||
#include "regs.h"
|
||||
#include "functions.h"
|
||||
|
|
Loading…
Reference in New Issue