mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-03 14:34:32 +00:00
Audio Ocarina Documentation (#1026)
* Begin ocarina documentation * Many ocarina-related docs * More ocarina docs * Introduce Ocarina Fonts Enum * Fix ocarina font enum * Fix incorrect documentation, more documentation * Ocarina recording documentation * cleanup * Small touch-ups * Fix font -> instrument * format * Better docs on playback, memory game * more cleanup * Add z64ocarina.h * Clean up names * final cleanup * typo * Fix description * better docs * Fix channel -> channelIdx * Fix old "font" name to correct "instrument" name, add io port docs * Add comments to clarify certain lines/functions * format * Rename noteIdx to pitch * Missed a name * Add comment on pitch * `reset` -> `SetInstrument` and `displayed` -> `playback` * Clarify audio_update and windmill comment * Minor PR fixes * Revert Audio_Update because there are 2 different Audio_Update functions * PR Feedback * Ocarina Idx -> Index * Introduce OCARINA_BTN_C_RIGHT_OR_C_LEFT * PR Suggestions * Next PR Suggestions * Next PR Feedback * consistency * Better docs (PR) * Better comment
This commit is contained in:
parent
6cd8029cd5
commit
95b4317931
26 changed files with 1872 additions and 1593 deletions
|
@ -1928,16 +1928,16 @@ void AudioSeq_SkipForwardSequence(SequencePlayer* seqPlayer);
|
|||
void AudioSeq_ResetSequencePlayer(SequencePlayer* seqPlayer);
|
||||
void AudioSeq_InitSequencePlayerChannels(s32 playerIdx);
|
||||
void AudioSeq_InitSequencePlayers(void);
|
||||
void func_800ECC04(u16);
|
||||
void Audio_OcaSetInstrument(u8);
|
||||
void Audio_OcaSetSongPlayback(s8 songIdxPlusOne, s8 playbackState);
|
||||
void Audio_OcaSetRecordingState(u8);
|
||||
OcarinaStaff* Audio_OcaGetRecordingStaff(void);
|
||||
OcarinaStaff* Audio_OcaGetPlayingStaff(void);
|
||||
OcarinaStaff* Audio_OcaGetDisplayingStaff(void);
|
||||
void Audio_OcaMemoryGameStart(u8 minigameIdx);
|
||||
s32 Audio_OcaMemoryGameGenNote(void);
|
||||
void func_800EE824(void);
|
||||
void AudioOcarina_Start(u16 ocarinaFlags);
|
||||
void AudioOcarina_SetInstrument(u8 ocarinaInstrumentId);
|
||||
void AudioOcarina_SetPlaybackSong(s8 songIndexPlusOne, s8 playbackState);
|
||||
void AudioOcarina_SetRecordingState(u8 recordingState);
|
||||
OcarinaStaff* AudioOcarina_GetRecordingStaff(void);
|
||||
OcarinaStaff* AudioOcarina_GetPlayingStaff(void);
|
||||
OcarinaStaff* AudioOcarina_GetPlaybackStaff(void);
|
||||
void AudioOcarina_MemoryGameInit(u8 minigameRound);
|
||||
s32 AudioOcarina_MemoryGameNextNote(void);
|
||||
void AudioOcarina_PlayLongScarecrowAfterCredits(void);
|
||||
void AudioDebug_Draw(GfxPrint* printer);
|
||||
void AudioDebug_ScrPrt(const s8* str, u16 num);
|
||||
void func_800F3054(void);
|
||||
|
@ -2280,7 +2280,7 @@ s32 __osSpSetPc(void* pc);
|
|||
f32 absf(f32);
|
||||
void* __osMemset(void* dest, s32 val, size_t len);
|
||||
void* __osMemmove(void* dest, const void* src, size_t len);
|
||||
void Message_UpdateOcarinaGame(GlobalContext* globalCtx);
|
||||
void Message_UpdateOcarinaMemoryGame(GlobalContext* globalCtx);
|
||||
u8 Message_ShouldAdvance(GlobalContext* globalCtx);
|
||||
void Message_CloseTextbox(GlobalContext*);
|
||||
void Message_StartTextbox(GlobalContext* globalCtx, u16 textId, Actor* actor);
|
||||
|
|
|
@ -159,9 +159,9 @@
|
|||
#define R_TEXTBOX_BG_YPOS XREG(61)
|
||||
#define R_TEXTBOX_CLEF_XPOS VREG(7)
|
||||
#define R_TEXTBOX_CLEF_YPOS VREG(8)
|
||||
#define R_OCARINA_NOTES_XPOS VREG(28)
|
||||
#define R_OCARINA_NOTES_YPOS(note) VREG(45 + (note))
|
||||
#define R_OCARINA_NOTES_XPOS_OFFSET VREG(29)
|
||||
#define R_OCARINA_NOTES_YPOS_OFFSET VREG(51)
|
||||
#define R_OCARINA_BUTTONS_XPOS VREG(28)
|
||||
#define R_OCARINA_BUTTONS_YPOS(note) VREG(45 + (note))
|
||||
#define R_OCARINA_BUTTONS_XPOS_OFFSET VREG(29)
|
||||
#define R_OCARINA_BUTTONS_YPOS_OFFSET VREG(51)
|
||||
|
||||
#endif
|
||||
|
|
|
@ -115,7 +115,7 @@ extern volatile OSTime gIrqMgrRetraceTime;
|
|||
extern s16* gWaveSamples[9];
|
||||
extern f32 gBendPitchOneOctaveFrequencies[256];
|
||||
extern f32 gBendPitchTwoSemitonesFrequencies[256];
|
||||
extern f32 gNoteFrequencies[];
|
||||
extern f32 gPitchFrequencies[];
|
||||
extern u8 gDefaultShortNoteVelocityTable[16];
|
||||
extern u8 gDefaultShortNoteGateTimeTable[16];
|
||||
extern AdsrEnvelope gDefaultEnvelope[4];
|
||||
|
@ -134,9 +134,9 @@ extern u8 gChannelsPerBank[4][7];
|
|||
extern u8 gUsedChannelsPerBank[4][7];
|
||||
extern u8 gMorphaTransposeTable[16];
|
||||
extern u8* gFrogsSongPtr;
|
||||
extern OcarinaNote* gScarecrowCustomSongPtr;
|
||||
extern OcarinaNote* gScarecrowLongSongPtr;
|
||||
extern u8* gScarecrowSpawnSongPtr;
|
||||
extern OcarinaSongInfo gOcarinaSongNotes[];
|
||||
extern OcarinaSongButtons gOcarinaSongButtons[];
|
||||
extern SoundParams* gSoundParams[7];
|
||||
extern char D_80133390[];
|
||||
extern char D_80133398[];
|
||||
|
|
104
include/z64.h
104
include/z64.h
|
@ -10,6 +10,7 @@
|
|||
#include "z64player.h"
|
||||
#include "z64audio.h"
|
||||
#include "z64object.h"
|
||||
#include "z64ocarina.h"
|
||||
#include "z64camera.h"
|
||||
#include "z64environment.h"
|
||||
#include "z64cutscene.h"
|
||||
|
@ -359,97 +360,6 @@ typedef struct {
|
|||
/* 0x150 */ char unk_150[0x10];
|
||||
} SkyboxContext; // size = 0x160
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ OCARINA_SONG_MINUET,
|
||||
/* 1 */ OCARINA_SONG_BOLERO,
|
||||
/* 2 */ OCARINA_SONG_SERENADE,
|
||||
/* 3 */ OCARINA_SONG_REQUIEM,
|
||||
/* 4 */ OCARINA_SONG_NOCTURNE,
|
||||
/* 5 */ OCARINA_SONG_PRELUDE,
|
||||
/* 6 */ OCARINA_SONG_SARIAS,
|
||||
/* 7 */ OCARINA_SONG_EPONAS,
|
||||
/* 8 */ OCARINA_SONG_LULLABY,
|
||||
/* 9 */ OCARINA_SONG_SUNS,
|
||||
/* 10 */ OCARINA_SONG_TIME,
|
||||
/* 11 */ OCARINA_SONG_STORMS,
|
||||
/* 12 */ OCARINA_SONG_SCARECROW,
|
||||
/* 13 */ OCARINA_SONG_MEMORY_GAME,
|
||||
/* 14 */ OCARINA_SONG_MAX,
|
||||
/* 14 */ OCARINA_SONG_SCARECROW_LONG = OCARINA_SONG_MAX // anything larger than 13 is considered the long scarecrow's song
|
||||
} OcarinaSongId;
|
||||
|
||||
typedef enum {
|
||||
/* 0x00 */ OCARINA_ACTION_UNK_0, // acts like free play but never set
|
||||
/* 0x01 */ OCARINA_ACTION_FREE_PLAY,
|
||||
/* 0x02 */ OCARINA_ACTION_TEACH_MINUET, // Song demonstrations by teachers
|
||||
/* 0x03 */ OCARINA_ACTION_TEACH_BOLERO,
|
||||
/* 0x04 */ OCARINA_ACTION_TEACH_SERENADE,
|
||||
/* 0x05 */ OCARINA_ACTION_TEACH_REQUIEM,
|
||||
/* 0x06 */ OCARINA_ACTION_TEACH_NOCTURNE,
|
||||
/* 0x07 */ OCARINA_ACTION_TEACH_PRELUDE,
|
||||
/* 0x08 */ OCARINA_ACTION_TEACH_SARIA,
|
||||
/* 0x09 */ OCARINA_ACTION_TEACH_EPONA,
|
||||
/* 0x0A */ OCARINA_ACTION_TEACH_LULLABY,
|
||||
/* 0x0B */ OCARINA_ACTION_TEACH_SUNS,
|
||||
/* 0x0C */ OCARINA_ACTION_TEACH_TIME,
|
||||
/* 0x0D */ OCARINA_ACTION_TEACH_STORMS,
|
||||
/* 0x0E */ OCARINA_ACTION_UNK_E,
|
||||
/* 0x0F */ OCARINA_ACTION_PLAYBACK_MINUET, // Playing back a particular song
|
||||
/* 0x10 */ OCARINA_ACTION_PLAYBACK_BOLERO,
|
||||
/* 0x11 */ OCARINA_ACTION_PLAYBACK_SERENADE,
|
||||
/* 0x12 */ OCARINA_ACTION_PLAYBACK_REQUIEM,
|
||||
/* 0x13 */ OCARINA_ACTION_PLAYBACK_NOCTURNE,
|
||||
/* 0x14 */ OCARINA_ACTION_PLAYBACK_PRELUDE,
|
||||
/* 0x15 */ OCARINA_ACTION_PLAYBACK_SARIA,
|
||||
/* 0x16 */ OCARINA_ACTION_PLAYBACK_EPONA,
|
||||
/* 0x17 */ OCARINA_ACTION_PLAYBACK_LULLABY,
|
||||
/* 0x18 */ OCARINA_ACTION_PLAYBACK_SUNS,
|
||||
/* 0x19 */ OCARINA_ACTION_PLAYBACK_TIME,
|
||||
/* 0x1A */ OCARINA_ACTION_PLAYBACK_STORMS,
|
||||
/* 0x1B */ OCARINA_ACTION_UNK_1B,
|
||||
/* 0x1C */ OCARINA_ACTION_CHECK_MINUET, // Playing songs for check spots
|
||||
/* 0x1D */ OCARINA_ACTION_CHECK_BOLERO,
|
||||
/* 0x1E */ OCARINA_ACTION_CHECK_SERENADE,
|
||||
/* 0x1F */ OCARINA_ACTION_CHECK_REQUIEM,
|
||||
/* 0020 */ OCARINA_ACTION_CHECK_NOCTURNE,
|
||||
/* 0x21 */ OCARINA_ACTION_CHECK_PRELUDE,
|
||||
/* 0x22 */ OCARINA_ACTION_CHECK_SARIA,
|
||||
/* 0x23 */ OCARINA_ACTION_CHECK_EPONA,
|
||||
/* 0x24 */ OCARINA_ACTION_CHECK_LULLABY,
|
||||
/* 0x25 */ OCARINA_ACTION_CHECK_SUNS,
|
||||
/* 0x26 */ OCARINA_ACTION_CHECK_TIME,
|
||||
/* 0x27 */ OCARINA_ACTION_CHECK_STORMS,
|
||||
/* 0x28 */ OCARINA_ACTION_CHECK_SCARECROW, // Playing back the song as adult that was set as child
|
||||
/* 0x29 */ OCARINA_ACTION_FREE_PLAY_DONE,
|
||||
/* 0x2A */ OCARINA_ACTION_SCARECROW_LONG_RECORDING,
|
||||
/* 0x2B */ OCARINA_ACTION_SCARECROW_LONG_PLAYBACK,
|
||||
/* 0x2C */ OCARINA_ACTION_SCARECROW_RECORDING,
|
||||
/* 0x2D */ OCARINA_ACTION_SCARECROW_PLAYBACK,
|
||||
/* 0x2E */ OCARINA_ACTION_MEMORY_GAME,
|
||||
/* 0x2F */ OCARINA_ACTION_FROGS,
|
||||
/* 0x30 */ OCARINA_ACTION_CHECK_NOWARP, // Check for any of sarias - storms
|
||||
/* 0x31 */ OCARINA_ACTION_CHECK_NOWARP_DONE
|
||||
} OcarinaSongActionIDs;
|
||||
|
||||
typedef enum {
|
||||
/* 0x00 */ OCARINA_MODE_00,
|
||||
/* 0x01 */ OCARINA_MODE_01,
|
||||
/* 0x02 */ OCARINA_MODE_02,
|
||||
/* 0x03 */ OCARINA_MODE_03,
|
||||
/* 0x04 */ OCARINA_MODE_04,
|
||||
/* 0x05 */ OCARINA_MODE_05,
|
||||
/* 0x06 */ OCARINA_MODE_06,
|
||||
/* 0x07 */ OCARINA_MODE_07,
|
||||
/* 0x08 */ OCARINA_MODE_08,
|
||||
/* 0x09 */ OCARINA_MODE_09,
|
||||
/* 0x0A */ OCARINA_MODE_0A,
|
||||
/* 0x0B */ OCARINA_MODE_0B,
|
||||
/* 0x0C */ OCARINA_MODE_0C,
|
||||
/* 0x0D */ OCARINA_MODE_0D,
|
||||
/* 0x0E */ OCARINA_MODE_0E,
|
||||
/* 0x0F */ OCARINA_MODE_0F
|
||||
} OcarinaMode;
|
||||
|
||||
typedef enum {
|
||||
TEXTBOX_ICON_TRIANGLE,
|
||||
TEXTBOX_ICON_SQUARE,
|
||||
|
@ -508,11 +418,11 @@ typedef enum {
|
|||
/* 0x21 */ MSGMODE_SCARECROW_LONG_RECORDING_START,
|
||||
/* 0x22 */ MSGMODE_SCARECROW_LONG_RECORDING_ONGOING,
|
||||
/* 0x23 */ MSGMODE_SCARECROW_LONG_PLAYBACK,
|
||||
/* 0x24 */ MSGMODE_SCARECROW_RECORDING_START,
|
||||
/* 0x25 */ MSGMODE_SCARECROW_RECORDING_ONGOING,
|
||||
/* 0x26 */ MSGMODE_SCARECROW_RECORDING_FAILED,
|
||||
/* 0x27 */ MSGMODE_SCARECROW_RECORDING_DONE,
|
||||
/* 0x28 */ MSGMODE_SCARECROW_PLAYBACK,
|
||||
/* 0x24 */ MSGMODE_SCARECROW_SPAWN_RECORDING_START,
|
||||
/* 0x25 */ MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING,
|
||||
/* 0x26 */ MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED,
|
||||
/* 0x27 */ MSGMODE_SCARECROW_SPAWN_RECORDING_DONE,
|
||||
/* 0x28 */ MSGMODE_SCARECROW_SPAWN_PLAYBACK,
|
||||
/* 0x29 */ MSGMODE_MEMORY_GAME_START,
|
||||
/* 0x2A */ MSGMODE_MEMORY_GAME_LEFT_SKULLKID_PLAYING,
|
||||
/* 0x2B */ MSGMODE_MEMORY_GAME_LEFT_SKULLKID_WAIT,
|
||||
|
@ -626,7 +536,7 @@ typedef struct {
|
|||
/* 0xE408 */ Actor* talkActor;
|
||||
/* 0xE40C */ s16 disableWarpSongs; // warp song flag set by scene commands
|
||||
/* 0xE40E */ s16 unk_E40E; // ocarina related
|
||||
/* 0xE410 */ u8 lastOcaNoteIdx;
|
||||
/* 0xE410 */ u8 lastOcarinaButtonIndex;
|
||||
} MessageContext; // size = 0xE418
|
||||
|
||||
typedef enum {
|
||||
|
|
|
@ -814,7 +814,7 @@ typedef struct {
|
|||
/* 0x2894 */ s32 numNotes;
|
||||
/* 0x2898 */ s16 tempoInternalToExternal;
|
||||
/* 0x289A */ s8 soundMode;
|
||||
/* 0x289C */ s32 totalTaskCnt;
|
||||
/* 0x289C */ s32 totalTaskCount;
|
||||
/* 0x28A0 */ s32 curAudioFrameDmaCount;
|
||||
/* 0x28A4 */ s32 rspTaskIdx;
|
||||
/* 0x28A8 */ s32 curAIBufIdx;
|
||||
|
@ -1011,34 +1011,4 @@ typedef struct {
|
|||
u16 params;
|
||||
} SoundParams;
|
||||
|
||||
typedef struct {
|
||||
/* 0x0000 */ u8 noteIdx;
|
||||
/* 0x0001 */ u8 unk_01;
|
||||
/* 0x0002 */ u16 unk_02;
|
||||
/* 0x0004 */ u8 volume;
|
||||
/* 0x0005 */ u8 vibrato;
|
||||
/* 0x0006 */ s8 tone;
|
||||
/* 0x0007 */ u8 semitone;
|
||||
} OcarinaNote; // size = 0x8
|
||||
|
||||
typedef struct {
|
||||
u8 len;
|
||||
u8 notesIdx[8];
|
||||
} OcarinaSongInfo;
|
||||
|
||||
typedef struct {
|
||||
u8 noteIdx;
|
||||
u8 state; // original name: "status"
|
||||
u8 pos; // original name: "locate"
|
||||
} OcarinaStaff;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ OCARINA_NOTE_A,
|
||||
/* 1 */ OCARINA_NOTE_C_DOWN,
|
||||
/* 2 */ OCARINA_NOTE_C_RIGHT,
|
||||
/* 3 */ OCARINA_NOTE_C_LEFT,
|
||||
/* 4 */ OCARINA_NOTE_C_UP,
|
||||
/* -1 */ OCARINA_NOTE_INVALID = 0xFF
|
||||
} OcarinaNoteIdx;
|
||||
|
||||
#endif
|
||||
|
|
180
include/z64ocarina.h
Normal file
180
include/z64ocarina.h
Normal file
|
@ -0,0 +1,180 @@
|
|||
#ifndef Z64OCARINA_H
|
||||
#define Z64OCARINA_H
|
||||
|
||||
#include "ultra64.h"
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ OCARINA_SONG_MINUET,
|
||||
/* 1 */ OCARINA_SONG_BOLERO,
|
||||
/* 2 */ OCARINA_SONG_SERENADE,
|
||||
/* 3 */ OCARINA_SONG_REQUIEM,
|
||||
/* 4 */ OCARINA_SONG_NOCTURNE,
|
||||
/* 5 */ OCARINA_SONG_PRELUDE,
|
||||
/* 6 */ OCARINA_SONG_SARIAS,
|
||||
/* 7 */ OCARINA_SONG_EPONAS,
|
||||
/* 8 */ OCARINA_SONG_LULLABY,
|
||||
/* 9 */ OCARINA_SONG_SUNS,
|
||||
/* 10 */ OCARINA_SONG_TIME,
|
||||
/* 11 */ OCARINA_SONG_STORMS,
|
||||
/* 12 */ OCARINA_SONG_SCARECROW_SPAWN,
|
||||
/* 13 */ OCARINA_SONG_MEMORY_GAME,
|
||||
/* 14 */ OCARINA_SONG_MAX,
|
||||
/* 14 */ OCARINA_SONG_SCARECROW_LONG = OCARINA_SONG_MAX // anything larger than 13 is considered the long scarecrow's song
|
||||
} OcarinaSongId;
|
||||
|
||||
typedef enum {
|
||||
/* 0x00 */ OCARINA_ACTION_UNK_0, // acts like free play but never set
|
||||
/* 0x01 */ OCARINA_ACTION_FREE_PLAY,
|
||||
/* 0x02 */ OCARINA_ACTION_TEACH_MINUET, // Song demonstrations by teachers
|
||||
/* 0x03 */ OCARINA_ACTION_TEACH_BOLERO,
|
||||
/* 0x04 */ OCARINA_ACTION_TEACH_SERENADE,
|
||||
/* 0x05 */ OCARINA_ACTION_TEACH_REQUIEM,
|
||||
/* 0x06 */ OCARINA_ACTION_TEACH_NOCTURNE,
|
||||
/* 0x07 */ OCARINA_ACTION_TEACH_PRELUDE,
|
||||
/* 0x08 */ OCARINA_ACTION_TEACH_SARIA,
|
||||
/* 0x09 */ OCARINA_ACTION_TEACH_EPONA,
|
||||
/* 0x0A */ OCARINA_ACTION_TEACH_LULLABY,
|
||||
/* 0x0B */ OCARINA_ACTION_TEACH_SUNS,
|
||||
/* 0x0C */ OCARINA_ACTION_TEACH_TIME,
|
||||
/* 0x0D */ OCARINA_ACTION_TEACH_STORMS,
|
||||
/* 0x0E */ OCARINA_ACTION_UNK_E,
|
||||
/* 0x0F */ OCARINA_ACTION_PLAYBACK_MINUET, // Playing back a particular song
|
||||
/* 0x10 */ OCARINA_ACTION_PLAYBACK_BOLERO,
|
||||
/* 0x11 */ OCARINA_ACTION_PLAYBACK_SERENADE,
|
||||
/* 0x12 */ OCARINA_ACTION_PLAYBACK_REQUIEM,
|
||||
/* 0x13 */ OCARINA_ACTION_PLAYBACK_NOCTURNE,
|
||||
/* 0x14 */ OCARINA_ACTION_PLAYBACK_PRELUDE,
|
||||
/* 0x15 */ OCARINA_ACTION_PLAYBACK_SARIA,
|
||||
/* 0x16 */ OCARINA_ACTION_PLAYBACK_EPONA,
|
||||
/* 0x17 */ OCARINA_ACTION_PLAYBACK_LULLABY,
|
||||
/* 0x18 */ OCARINA_ACTION_PLAYBACK_SUNS,
|
||||
/* 0x19 */ OCARINA_ACTION_PLAYBACK_TIME,
|
||||
/* 0x1A */ OCARINA_ACTION_PLAYBACK_STORMS,
|
||||
/* 0x1B */ OCARINA_ACTION_UNK_1B,
|
||||
/* 0x1C */ OCARINA_ACTION_CHECK_MINUET, // Playing songs for check spots
|
||||
/* 0x1D */ OCARINA_ACTION_CHECK_BOLERO,
|
||||
/* 0x1E */ OCARINA_ACTION_CHECK_SERENADE,
|
||||
/* 0x1F */ OCARINA_ACTION_CHECK_REQUIEM,
|
||||
/* 0x20 */ OCARINA_ACTION_CHECK_NOCTURNE,
|
||||
/* 0x21 */ OCARINA_ACTION_CHECK_PRELUDE,
|
||||
/* 0x22 */ OCARINA_ACTION_CHECK_SARIA,
|
||||
/* 0x23 */ OCARINA_ACTION_CHECK_EPONA,
|
||||
/* 0x24 */ OCARINA_ACTION_CHECK_LULLABY,
|
||||
/* 0x25 */ OCARINA_ACTION_CHECK_SUNS,
|
||||
/* 0x26 */ OCARINA_ACTION_CHECK_TIME,
|
||||
/* 0x27 */ OCARINA_ACTION_CHECK_STORMS,
|
||||
/* 0x28 */ OCARINA_ACTION_CHECK_SCARECROW_SPAWN, // Playing back the song as adult that was set as child
|
||||
/* 0x29 */ OCARINA_ACTION_FREE_PLAY_DONE,
|
||||
/* 0x2A */ OCARINA_ACTION_SCARECROW_LONG_RECORDING,
|
||||
/* 0x2B */ OCARINA_ACTION_SCARECROW_LONG_PLAYBACK,
|
||||
/* 0x2C */ OCARINA_ACTION_SCARECROW_SPAWN_RECORDING,
|
||||
/* 0x2D */ OCARINA_ACTION_SCARECROW_SPAWN_PLAYBACK,
|
||||
/* 0x2E */ OCARINA_ACTION_MEMORY_GAME,
|
||||
/* 0x2F */ OCARINA_ACTION_FROGS,
|
||||
/* 0x30 */ OCARINA_ACTION_CHECK_NOWARP, // Check for any of sarias - storms
|
||||
/* 0x31 */ OCARINA_ACTION_CHECK_NOWARP_DONE
|
||||
} OcarinaSongActionId;
|
||||
|
||||
typedef enum {
|
||||
/* 0x00 */ OCARINA_MODE_00,
|
||||
/* 0x01 */ OCARINA_MODE_01,
|
||||
/* 0x02 */ OCARINA_MODE_02,
|
||||
/* 0x03 */ OCARINA_MODE_03,
|
||||
/* 0x04 */ OCARINA_MODE_04,
|
||||
/* 0x05 */ OCARINA_MODE_05,
|
||||
/* 0x06 */ OCARINA_MODE_06,
|
||||
/* 0x07 */ OCARINA_MODE_07,
|
||||
/* 0x08 */ OCARINA_MODE_08,
|
||||
/* 0x09 */ OCARINA_MODE_09,
|
||||
/* 0x0A */ OCARINA_MODE_0A,
|
||||
/* 0x0B */ OCARINA_MODE_0B,
|
||||
/* 0x0C */ OCARINA_MODE_0C,
|
||||
/* 0x0D */ OCARINA_MODE_0D,
|
||||
/* 0x0E */ OCARINA_MODE_0E,
|
||||
/* 0x0F */ OCARINA_MODE_0F
|
||||
} OcarinaMode;
|
||||
|
||||
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,
|
||||
/* 5 */ OCARINA_BTN_C_RIGHT_OR_C_LEFT, // Special case for bFlat4: Interface/Overlap between C_RIGHT and C_LEFT
|
||||
/* 0xFF */ OCARINA_BTN_INVALID = 0xFF
|
||||
} OcarinaButtonIndex;
|
||||
|
||||
// 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,
|
||||
/* 0xFF */ OCARINA_PITCH_NONE = 0xFF
|
||||
} OcarinaPitch;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ OCARINA_INSTRUMENT_OFF,
|
||||
/* 1 */ OCARINA_INSTRUMENT_DEFAULT,
|
||||
/* 2 */ OCARINA_INSTRUMENT_MALON,
|
||||
/* 3 */ OCARINA_INSTRUMENT_WHISTLE,
|
||||
/* 4 */ OCARINA_INSTRUMENT_HARP,
|
||||
/* 5 */ OCARINA_INSTRUMENT_GRIND_ORGAN,
|
||||
/* 6 */ OCARINA_INSTRUMENT_FLUTE,
|
||||
/* 7 */ OCARINA_INSTRUMENT_MAX,
|
||||
/* 7 */ OCARINA_INSTRUMENT_DEFAULT_COPY1 = OCARINA_INSTRUMENT_MAX, // Unused but present in Sequence 0 table
|
||||
/* 8 */ OCARINA_INSTRUMENT_DEFAULT_COPY2 = OCARINA_INSTRUMENT_MAX + 1 // Unused but present in Sequence 0 table
|
||||
} OcarinaInstrumentId;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ OCARINA_RECORD_OFF,
|
||||
/* 1 */ OCARINA_RECORD_SCARECROW_LONG,
|
||||
/* 2 */ OCARINA_RECORD_SCARECROW_SPAWN,
|
||||
/* 0xFF */ OCARINA_RECORD_REJECTED = 0xFF
|
||||
} OcarinaRecordingState;
|
||||
|
||||
/**
|
||||
* bFlat4Flag Note:
|
||||
* Flag for resolving whether (pitch = OCARINA_PITCH_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 (OCARINA_PITCH_A4 and OCARINA_PITCH_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 pitch; // 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
|
||||
/* 0x7 */ u8 bFlat4Flag; // See note above
|
||||
} OcarinaNote; // size = 0x8
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ u8 numButtons;
|
||||
/* 0x1 */ u8 buttonsIndex[8];
|
||||
} OcarinaSongButtons; // size = 0x9
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ u8 buttonIndex;
|
||||
/* 0x1 */ u8 state; // multi-use. Playing: used as songIndex. Playback: used as repeat count of song. Recording: used as OcarinaRecordingState. "status"
|
||||
/* 0x2 */ u8 pos; // "locate"
|
||||
} OcarinaStaff; // size = 0x3
|
||||
|
||||
#endif
|
|
@ -104,8 +104,8 @@ typedef struct {
|
|||
/* 0x0F34 */ char unk_F34[0x04];
|
||||
/* 0x0F38 */ u32 worldMapAreaData; // "area_arrival"
|
||||
/* 0x0F3C */ char unk_F3C[0x4];
|
||||
/* 0x0F40 */ u8 scarecrowCustomSongSet;
|
||||
/* 0x0F41 */ u8 scarecrowCustomSong[0x360];
|
||||
/* 0x0F40 */ u8 scarecrowLongSongSet;
|
||||
/* 0x0F41 */ u8 scarecrowLongSong[0x360];
|
||||
/* 0x12A1 */ char unk_12A1[0x24];
|
||||
/* 0x12C5 */ u8 scarecrowSpawnSongSet;
|
||||
/* 0x12C6 */ u8 scarecrowSpawnSong[0x80];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue