diff --git a/README.md b/README.md
index 9d746db2a..d94b47950 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,7 @@ please be aware that the codebase could drastically change at any time. Also not
parts of the ROM may not be 'shiftable' yet, so modifying them could currently be difficult.
```
-This is a WIP **decompilation** of ***The Legend of Zelda: Majora's Mask***. The purpose of the project is to recreate a source code base for the game from scratch, using information found inside the game along with static and/or dynamic analysis. **It is not, and will not, produce a PC port.** For frequently asked questions, you can visit [our website](https://zelda64.dev/mm), and for more information you can get in touch with the team on our [Discord server](https://discord.zelda64.dev).
+This is a WIP **decompilation** of ***The Legend of Zelda: Majora's Mask***. The purpose of the project is to recreate a source code base for the game from scratch, using information found inside the game along with static and/or dynamic analysis. **It is not, and will not, produce a PC port.** For frequently asked questions, you can visit [our website](https://zelda64.dev/games/mm), and for more information you can get in touch with the team on our [Discord server](https://discord.zelda64.dev).
The only version currently supported is N64 US, but we intend to eventually support every retail version of the original game (i.e. not versions of MM3D, which is a totally different game).
diff --git a/assets/xml/objects/object_kaizoku_obj.xml b/assets/xml/objects/object_kaizoku_obj.xml
index 6a7457e1c..9ae61accf 100644
--- a/assets/xml/objects/object_kaizoku_obj.xml
+++ b/assets/xml/objects/object_kaizoku_obj.xml
@@ -7,13 +7,13 @@
-
-
+
+
-
-
+
+
diff --git a/assets/xml/objects/object_kin2_obj.xml b/assets/xml/objects/object_kin2_obj.xml
index e0ae09106..d36766ee4 100644
--- a/assets/xml/objects/object_kin2_obj.xml
+++ b/assets/xml/objects/object_kin2_obj.xml
@@ -1,33 +1,51 @@
+
-
+
+
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
+
+
-
+
+
+
-
+
+
-
+
+
+
+
+
diff --git a/include/functions.h b/include/functions.h
index 0afc638f4..b833b5b72 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -960,115 +960,6 @@ s32 DynaPolyActor_IsInSwitchPressedState(DynaPolyActor* dynaActor);
s32 DynaPolyActor_IsInHeavySwitchPressedState(DynaPolyActor* dynaActor);
s32 DynaPolyActor_ValidateMove(PlayState* play, DynaPolyActor* dynaActor, s16 startRadius, s16 endRadius, s16 startHeight);
-// void func_800CBC84(void);
-// void func_800CBFA4(void);
-// void func_800CC000(void);
-// void func_800CC128(void);
-// void func_800CC1C4(void);
-// void func_800CC260(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE2 param_6);
-// void func_800CC488(void);
-// void func_800CC56C(void);
-// void func_800CC5C8(void);
-// void Camera_GetBgCamOrActorCsCamSetting(void);
-// void Camera_GetBgCamOrActorCsCamFuncData(void);
-// void Camera_GetBgCamIndex(void);
-// void Camera_GetWaterBoxBgCamSetting(void);
-// void func_800CC938(void);
-// void func_800CC958(void);
-// void func_800CC9C0(void);
-// void func_800CCCEC(void);
-// void func_800CD04C(void);
-// void func_800CD288(void);
-// void func_800CD2E0(void);
-// void func_800CD2F0(void);
-// void func_800CD3E4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_800CD44C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5);
-// void func_800CD634(void);
-// void func_800CD6CC(void);
-// void func_800CD6F8(void);
-// void func_800CD834(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_800CDA14(void);
-// void func_800CDB6C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE2 param_6);
-// void func_800CDE6C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE2 param_8);
-// void func_800CE2B8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE2 param_9);
-// void func_800CE5E0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5);
-// void func_800CE79C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5);
-// void func_800CE930(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5);
-// void func_800CEAD8(void);
-// void func_800CEC38(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_800CED90(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7);
-s32 Camera_ModeNop(Camera* camera);
-s32 Camera_ModeNORM1(Camera* camera);
-s32 Camera_ModeNORM2(Camera* camera);
-s32 Camera_ModeNORM3(Camera* camera);
-s32 Camera_ModeNORM4(Camera* camera);
-s32 Camera_ModeNORM0(Camera* camera);
-s32 Camera_ModePARA1(Camera* camera);
-s32 Camera_ModePARA2(Camera* camera);
-s32 Camera_ModePARA3(Camera* camera);
-s32 Camera_ModePARA4(Camera* camera);
-s32 Camera_ModePARA0(Camera* camera);
-s32 Camera_ModeJUMP1(Camera* camera);
-s32 Camera_ModeJUMP2(Camera* camera);
-s32 Camera_ModeJUMP3(Camera* camera);
-s32 Camera_ModeJUMP4(Camera* camera);
-s32 Camera_ModeJUMP0(Camera* camera);
-s32 Camera_ModeBATT1(Camera* camera);
-s32 Camera_ModeBATT2(Camera* camera);
-s32 Camera_ModeBATT3(Camera* camera);
-s32 Camera_ModeBATT4(Camera* camera);
-s32 Camera_ModeBATT0(Camera* camera);
-s32 Camera_ModeKEEP1(Camera* camera);
-s32 Camera_ModeKEEP2(Camera* camera);
-s32 Camera_ModeKEEP3(Camera* camera);
-s32 Camera_ModeKEEP4(Camera* camera);
-// void func_800D7C44(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6, UNK_TYPE1 param_7, UNK_TYPE1 param_8, UNK_TYPE1 param_9, UNK_TYPE1 param_10, UNK_TYPE2 param_11, UNK_TYPE2 param_12);
-s32 Camera_ModeKEEP0(Camera* camera);
-s32 Camera_ModeFIXD1(Camera* camera);
-s32 Camera_ModeFIXD2(Camera* camera);
-s32 Camera_ModeFIXD3(Camera* camera);
-s32 Camera_ModeFIXD4(Camera* camera);
-s32 Camera_ModeFIXD0(Camera* camera);
-s32 Camera_ModeSUBJ1(Camera* camera);
-s32 Camera_ModeSUBJ2(Camera* camera);
-s32 Camera_ModeSUBJ3(Camera* camera);
-s32 Camera_ModeSUBJ4(Camera* camera);
-s32 Camera_ModeSUBJ0(Camera* camera);
-s32 Camera_ModeDATA0(Camera* camera);
-s32 Camera_ModeDATA1(Camera* camera);
-s32 Camera_ModeDATA2(Camera* camera);
-s32 Camera_ModeDATA3(Camera* camera);
-s32 Camera_ModeDATA4(Camera* camera);
-s32 Camera_ModeUNIQ1(Camera* camera);
-s32 Camera_ModeUNIQ2(Camera* camera);
-s32 Camera_ModeUNIQ3(Camera* camera);
-s32 Camera_ModeUNIQ4(Camera* camera);
-s32 Camera_ModeUNIQ5(Camera* camera);
-s32 Camera_ModeUNIQ0(Camera* camera);
-s32 Camera_ModeUNIQ6(Camera* camera);
-s32 Camera_ModeUNIQ7(Camera* camera);
-s32 Camera_ModeUNIQ8(Camera* camera);
-s32 Camera_ModeUNIQ9(Camera* camera);
-s32 Camera_ModeDEMO1(Camera* camera);
-s32 Camera_ModeDEMO2(Camera* camera);
-s32 Camera_ModeDEMO3(Camera* camera);
-s32 Camera_ModeDEMO4(Camera* camera);
-s32 Camera_ModeDEMO5(Camera* camera);
-s32 Camera_ModeDEMO6(Camera* camera);
-s32 Camera_ModeDEMO7(Camera* camera);
-s32 Camera_ModeDEMO8(Camera* camera);
-s32 Camera_ModeDEMO9(Camera* camera);
-s32 Camera_ModeDEMO0(Camera* camera);
-s32 Camera_ModeSPEC0(Camera* camera);
-s32 Camera_ModeSPEC1(Camera* camera);
-s32 Camera_ModeSPEC2(Camera* camera);
-s32 Camera_ModeSPEC3(Camera* camera);
-s32 Camera_ModeSPEC4(Camera* camera);
-s32 Camera_ModeSPEC5(Camera* camera);
-s32 Camera_ModeSPEC6(Camera* camera);
-s32 Camera_ModeSPEC7(Camera* camera);
-s32 Camera_ModeSPEC8(Camera* camera);
-s32 Camera_ModeSPEC9(Camera* camera);
Camera* Camera_Alloc(View* view, CollisionContext* bg, PlayState* play);
void Camera_Free(Camera* camera);
void Camera_Init(Camera* camera, View* view, CollisionContext* bg, PlayState* play);
@@ -1102,7 +993,7 @@ s32 Camera_SetViewParam(Camera* camera, s32 viewFlag, void* param);
// UNK_TYPE4 func_800DFF44(void);
s16 Camera_SetFlags(Camera* iParm1, s16 flags);
s16 Camera_ClearFlags(Camera* camera, s16 flags);
-s32 Camera_ChangeDoorCam(Camera* camera, Actor* doorActor, s16 bgCamDataId, f32 arg3, s16 timer1, s16 timer2, s16 timer3);
+s32 Camera_ChangeDoorCam(Camera* camera, Actor* doorActor, s16 bgCamIndex, f32 arg3, s16 timer1, s16 timer2, s16 timer3);
s32 Camera_Copy(Camera* dstCamera, Camera* srcCamera);
// UNK_TYPE4 func_800E01AC(void);
Vec3f* Camera_GetQuakeOffset(Vec3f* dst, Camera* camera);
@@ -1113,6 +1004,7 @@ void Camera_SetToTrackActor(Camera* camera, Actor* actor);
void Camera_SetTargetActor(Camera* camera, Actor* actor);
f32 Camera_GetWaterYPos(Camera* camera);
void func_800E0348(Camera* camera);
+
DamageTable* DamageTable_Get(s32 index);
void DamageTable_Clear(DamageTable* damageTable);
f32 CollisionCheck_GetDamageAndEffectOnBumper(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo, u32* effect);
@@ -3037,7 +2929,7 @@ void AudioOcarina_StartDefault(u32 ocarinaFlags);
u8 func_8019B5AC(void);
void AudioOcarina_ResetAndReadInput(void);
void AudioOcarina_SetOcarinaDisableTimer(u8 unused, u8 timer);
-u32 AudioOcarina_SetInstrument(u8 ocarinaInstrumentId);
+void AudioOcarina_SetInstrument(u8 ocarinaInstrumentId);
void AudioOcarina_SetPlaybackSong(s8 songIndexPlusOne, u8 playbackState);
void AudioOcarina_SetRecordingState(u8 recordingState);
OcarinaStaff* AudioOcarina_GetRecordingStaff(void);
diff --git a/include/regs.h b/include/regs.h
index 4ad6acbfb..ab31e6d25 100644
--- a/include/regs.h
+++ b/include/regs.h
@@ -50,6 +50,9 @@
#define R_PAUSE_WORLD_MAP_YAW YREG(24)
#define R_PAUSE_WORLD_MAP_Y_OFFSET YREG(25)
#define R_PAUSE_WORLD_MAP_DEPTH YREG(26)
+#define R_PAUSE_DBG_QUEST_CURSOR_ON YREG(69)
+#define R_PAUSE_DBG_QUEST_CURSOR_X YREG(70)
+#define R_PAUSE_DBG_QUEST_CURSOR_Y YREG(71)
#define R_MAGIC_FILL_COLOR(i) ZREG(0 + i)
#define R_C_BTN_COLOR(i) ZREG(39 + i)
#define R_B_BTN_COLOR(i) ZREG(43 + i)
diff --git a/include/variables.h b/include/variables.h
index e865f890e..5b40e1161 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -433,392 +433,7 @@ extern s32 gMaxActorId;
extern BgCheckSceneSubdivisionEntry sSceneSubdivisionList[];
extern BgSpecialSceneMaxObjects sCustomDynapolyMem[];
// extern UNK_TYPE1 D_801B4708;
-// extern UNK_TYPE1 D_801B4710;
-// extern UNK_TYPE1 D_801B4738;
-// extern UNK_TYPE1 D_801B4768;
-// extern UNK_TYPE1 D_801B4798;
-// extern UNK_TYPE1 D_801B47CC;
-// extern UNK_TYPE1 D_801B47F0;
-// extern UNK_TYPE1 D_801B4824;
-// extern UNK_TYPE1 D_801B4848;
-// extern UNK_TYPE1 D_801B486C;
-// extern UNK_TYPE1 D_801B4890;
-// extern UNK_TYPE1 D_801B48B0;
-// extern UNK_TYPE1 D_801B48D4;
-// extern UNK_TYPE1 D_801B48F8;
-// extern UNK_TYPE1 D_801B491C;
-// extern UNK_TYPE1 D_801B4944;
-// extern UNK_TYPE1 D_801B4974;
-// extern UNK_TYPE1 D_801B49A4;
-// extern UNK_TYPE1 D_801B49D4;
-// extern UNK_TYPE1 D_801B4A04;
-// extern UNK_TYPE1 D_801B4A34;
-// extern UNK_TYPE1 D_801B4A5C;
-// extern UNK_TYPE1 D_801B4A8C;
-// extern UNK_TYPE1 D_801B4ABC;
-// extern UNK_TYPE1 D_801B4AE0;
-// extern UNK_TYPE1 D_801B4B08;
-// extern UNK_TYPE1 D_801B4B38;
-// extern UNK_TYPE1 D_801B4B60;
-// extern UNK_TYPE1 D_801B4B90;
-// extern UNK_TYPE1 D_801B4BB8;
-// extern UNK_TYPE1 D_801B4BDC;
-// extern UNK_TYPE1 D_801B4C04;
-// extern UNK_TYPE1 D_801B4C34;
-// extern UNK_TYPE1 D_801B4C5C;
-// extern UNK_TYPE1 D_801B4C84;
-// extern UNK_TYPE1 D_801B4CAC;
-// extern UNK_TYPE1 D_801B4CD4;
-// extern UNK_TYPE1 D_801B4CFC;
-// extern UNK_TYPE1 D_801B4D24;
-// extern UNK_TYPE1 D_801B4D34;
-// extern UNK_TYPE1 D_801B4D44;
-// extern UNK_TYPE1 D_801B4D68;
-// extern UNK_TYPE1 D_801B4D8C;
-// extern UNK_TYPE1 D_801B4DB0;
-// extern UNK_TYPE1 D_801B4DD4;
-// extern UNK_TYPE1 D_801B4DF8;
-// extern UNK_TYPE1 D_801B4E2C;
-// extern UNK_TYPE1 D_801B4E5C;
-// extern UNK_TYPE1 D_801B4E90;
-// extern UNK_TYPE1 D_801B4EB4;
-// extern UNK_TYPE1 D_801B4ED8;
-// extern UNK_TYPE1 D_801B4EDC;
-// extern UNK_TYPE1 D_801B4EE4;
-// extern UNK_TYPE1 D_801B4EF0;
-// extern UNK_TYPE1 D_801B4EF4;
-// extern UNK_TYPE1 D_801B4EF8;
-// extern UNK_TYPE1 D_801B4F20;
-// extern UNK_TYPE1 D_801B4F50;
-// extern UNK_TYPE1 D_801B4F78;
-// extern UNK_TYPE1 D_801B4FA0;
-// extern UNK_TYPE1 D_801B4FC8;
-// extern UNK_TYPE1 D_801B4FF0;
-// extern UNK_TYPE1 D_801B5018;
-// extern UNK_TYPE1 D_801B5034;
-// extern UNK_TYPE1 D_801B5050;
-// extern UNK_TYPE1 D_801B506C;
-// extern UNK_TYPE1 D_801B507C;
-// extern UNK_TYPE1 D_801B5094;
-// extern UNK_TYPE1 D_801B50BC;
-// extern UNK_TYPE1 D_801B50EC;
-// extern UNK_TYPE1 D_801B511C;
-// extern UNK_TYPE1 D_801B5150;
-// extern UNK_TYPE1 D_801B5180;
-// extern UNK_TYPE1 D_801B51A8;
-// extern UNK_TYPE1 D_801B51D8;
-// extern UNK_TYPE1 D_801B51FC;
-// extern UNK_TYPE1 D_801B5220;
-// extern UNK_TYPE1 D_801B5250;
-// extern UNK_TYPE1 D_801B5280;
-// extern UNK_TYPE1 D_801B52B0;
-// extern UNK_TYPE1 D_801B52E0;
-// extern UNK_TYPE1 D_801B5308;
-// extern UNK_TYPE1 D_801B5338;
-// extern UNK_TYPE1 D_801B535C;
-// extern UNK_TYPE1 D_801B5380;
-// extern UNK_TYPE1 D_801B53A4;
-// extern UNK_TYPE1 D_801B53C8;
-// extern UNK_TYPE1 D_801B53EC;
-// extern UNK_TYPE1 D_801B5410;
-// extern UNK_TYPE1 D_801B5434;
-// extern UNK_TYPE1 D_801B5458;
-// extern UNK_TYPE1 D_801B547C;
-// extern UNK_TYPE1 D_801B54A0;
-// extern UNK_TYPE1 D_801B54C4;
-// extern UNK_TYPE1 D_801B54E8;
-// extern UNK_TYPE1 D_801B550C;
-// extern UNK_TYPE1 D_801B5530;
-// extern UNK_TYPE1 D_801B5554;
-// extern UNK_TYPE1 D_801B5578;
-// extern UNK_TYPE1 D_801B559C;
-// extern UNK_TYPE1 D_801B55C0;
-// extern UNK_TYPE1 D_801B55E4;
-// extern UNK_TYPE1 D_801B5608;
-// extern UNK_TYPE1 D_801B562C;
-// extern UNK_TYPE1 D_801B5650;
-// extern UNK_TYPE1 D_801B5674;
-// extern UNK_TYPE1 D_801B5698;
-// extern UNK_TYPE1 D_801B56BC;
-// extern UNK_TYPE1 D_801B56E0;
-// extern UNK_TYPE1 D_801B5704;
-// extern UNK_TYPE1 D_801B5728;
-// extern UNK_TYPE1 D_801B574C;
-// extern UNK_TYPE1 D_801B5770;
-// extern UNK_TYPE1 D_801B577C;
-// extern UNK_TYPE1 D_801B57A4;
-// extern UNK_TYPE1 D_801B57CC;
-// extern UNK_TYPE1 D_801B57F4;
-// extern UNK_TYPE1 D_801B5824;
-// extern UNK_TYPE1 D_801B5834;
-// extern UNK_TYPE1 D_801B5844;
-// extern UNK_TYPE1 D_801B5864;
-// extern UNK_TYPE1 D_801B5884;
-// extern UNK_TYPE1 D_801B58A0;
-// extern UNK_TYPE1 D_801B58BC;
-// extern UNK_TYPE1 D_801B58D8;
-// extern UNK_TYPE1 D_801B58F4;
-// extern UNK_TYPE1 D_801B5904;
-// extern UNK_TYPE1 D_801B5928;
-// extern UNK_TYPE1 D_801B5950;
-// extern UNK_TYPE1 D_801B5978;
-// extern UNK_TYPE1 D_801B59A8;
-// extern UNK_TYPE1 D_801B59D0;
-// extern UNK_TYPE1 D_801B59F4;
-// extern UNK_TYPE1 D_801B5A00;
-// extern UNK_TYPE1 D_801B5A0C;
-// extern UNK_TYPE1 D_801B5A30;
-// extern UNK_TYPE1 D_801B5A64;
-// extern UNK_TYPE1 D_801B5A94;
-// extern UNK_TYPE1 D_801B5ABC;
-// extern UNK_TYPE1 D_801B5AF0;
-// extern UNK_TYPE1 D_801B5B18;
-// extern UNK_TYPE1 D_801B5B40;
-// extern UNK_TYPE1 D_801B5B70;
-// extern UNK_TYPE1 D_801B5B98;
-// extern UNK_TYPE1 D_801B5BC8;
-// extern UNK_TYPE1 D_801B5BFC;
-// extern UNK_TYPE1 D_801B5C30;
-// extern UNK_TYPE1 D_801B5C58;
-// extern UNK_TYPE1 D_801B5C80;
-// extern UNK_TYPE1 D_801B5CB0;
-// extern UNK_TYPE1 D_801B5CCC;
-// extern UNK_TYPE1 D_801B5CE8;
-// extern UNK_TYPE1 D_801B5D10;
-// extern UNK_TYPE1 D_801B5D40;
-// extern UNK_TYPE1 D_801B5D74;
-// extern UNK_TYPE1 D_801B5D9C;
-// extern UNK_TYPE1 D_801B5DC4;
-// extern UNK_TYPE1 D_801B5DD4;
-// extern UNK_TYPE1 D_801B5DFC;
-// extern UNK_TYPE1 D_801B5E2C;
-// extern UNK_TYPE1 D_801B5E48;
-// extern UNK_TYPE1 D_801B5E64;
-// extern UNK_TYPE1 D_801B5E8C;
-// extern UNK_TYPE1 D_801B5EB4;
-// extern UNK_TYPE1 D_801B5EDC;
-// extern UNK_TYPE1 D_801B5F0C;
-// extern UNK_TYPE1 D_801B5F34;
-// extern UNK_TYPE1 D_801B5F5C;
-// extern UNK_TYPE1 D_801B5F8C;
-// extern UNK_TYPE1 D_801B5FB0;
-// extern UNK_TYPE1 D_801B5FD4;
-// extern UNK_TYPE1 D_801B5FF8;
-// extern UNK_TYPE1 D_801B601C;
-// extern UNK_TYPE1 D_801B6044;
-// extern UNK_TYPE1 D_801B6074;
-// extern UNK_TYPE1 D_801B60A4;
-// extern UNK_TYPE1 D_801B60D8;
-// extern UNK_TYPE1 D_801B610C;
-// extern UNK_TYPE1 D_801B6130;
-// extern UNK_TYPE1 D_801B6154;
-// extern UNK_TYPE1 D_801B617C;
-// extern UNK_TYPE1 D_801B61AC;
-// extern UNK_TYPE1 D_801B61DC;
-// extern UNK_TYPE1 D_801B620C;
-// extern UNK_TYPE1 D_801B623C;
-// extern UNK_TYPE1 D_801B626C;
-// extern UNK_TYPE1 D_801B6294;
-// extern UNK_TYPE1 D_801B62C4;
-// extern UNK_TYPE1 D_801B62F4;
-// extern UNK_TYPE1 D_801B631C;
-// extern UNK_TYPE1 D_801B634C;
-// extern UNK_TYPE1 D_801B6374;
-// extern UNK_TYPE1 D_801B63A4;
-// extern UNK_TYPE1 D_801B63CC;
-// extern UNK_TYPE1 D_801B63FC;
-// extern UNK_TYPE1 D_801B6418;
-// extern UNK_TYPE1 D_801B6434;
-// extern UNK_TYPE1 D_801B645C;
-// extern UNK_TYPE1 D_801B648C;
-// extern UNK_TYPE1 D_801B64B4;
-// extern UNK_TYPE1 D_801B64D8;
-// extern UNK_TYPE1 D_801B64FC;
-// extern UNK_TYPE1 D_801B652C;
-// extern UNK_TYPE1 D_801B655C;
-// extern UNK_TYPE1 D_801B6584;
-// extern UNK_TYPE1 D_801B65AC;
-// extern UNK_TYPE1 D_801B65DC;
-// extern UNK_TYPE1 D_801B660C;
-// extern UNK_TYPE1 D_801B6640;
-// extern UNK_TYPE1 D_801B6674;
-// extern UNK_TYPE1 D_801B6698;
-// extern UNK_TYPE1 D_801B66C0;
-// extern UNK_TYPE1 D_801B66E8;
-// extern UNK_TYPE1 D_801B6710;
-// extern UNK_TYPE1 D_801B6740;
-// extern UNK_TYPE1 D_801B6774;
-// extern UNK_TYPE1 D_801B679C;
-// extern UNK_TYPE1 D_801B67C4;
-// extern UNK_TYPE1 D_801B67EC;
-// extern UNK_TYPE1 D_801B681C;
-// extern UNK_TYPE1 D_801B684C;
-// extern UNK_TYPE1 D_801B6880;
-// extern UNK_TYPE1 D_801B68A8;
-// extern UNK_TYPE1 D_801B68D0;
-// extern UNK_TYPE1 D_801B68F8;
-// extern UNK_TYPE1 D_801B692C;
-// extern UNK_TYPE1 D_801B6954;
-// extern UNK_TYPE1 D_801B697C;
-// extern UNK_TYPE1 D_801B69A4;
-// extern UNK_TYPE1 D_801B69CC;
-// extern UNK_TYPE1 D_801B69FC;
-// extern UNK_TYPE1 D_801B6A30;
-// extern UNK_TYPE1 D_801B6A58;
-// extern UNK_TYPE1 D_801B6A80;
-// extern UNK_TYPE1 D_801B6AA8;
-// extern UNK_TYPE1 D_801B6AD0;
-// extern UNK_TYPE1 D_801B6AF8;
-// extern UNK_TYPE1 D_801B6B28;
-// extern UNK_TYPE1 D_801B6B50;
-// extern UNK_TYPE1 D_801B6B78;
-// extern UNK_TYPE1 D_801B6BA0;
-// extern UNK_TYPE1 D_801B6BC8;
-// extern UNK_TYPE1 D_801B6BF0;
-// extern UNK_TYPE1 D_801B6C18;
-// extern UNK_TYPE1 D_801B6C48;
-// extern UNK_TYPE1 D_801B6C70;
-// extern UNK_TYPE1 D_801B6C98;
-// extern UNK_TYPE1 D_801B6CC0;
-// extern UNK_TYPE1 D_801B6CF0;
-// extern UNK_TYPE1 D_801B6D24;
-// extern UNK_TYPE1 D_801B6D4C;
-// extern UNK_TYPE1 D_801B6D74;
-// extern UNK_TYPE1 D_801B6D90;
-// extern UNK_TYPE1 D_801B6DB8;
-// extern UNK_TYPE1 D_801B6DE0;
-// extern UNK_TYPE1 D_801B6E08;
-// extern UNK_TYPE1 D_801B6E30;
-// extern UNK_TYPE1 D_801B6E58;
-// extern UNK_TYPE1 D_801B6E80;
-// extern UNK_TYPE1 D_801B6EA8;
-// extern UNK_TYPE1 D_801B6ED0;
-// extern UNK_TYPE1 D_801B6EF8;
-// extern UNK_TYPE1 D_801B6F20;
-// extern UNK_TYPE1 D_801B6F50;
-// extern UNK_TYPE1 D_801B6F78;
-// extern UNK_TYPE1 D_801B6FA0;
-// extern UNK_TYPE1 D_801B6FB0;
-// extern UNK_TYPE1 D_801B6FD8;
-// extern UNK_TYPE1 D_801B7008;
-// extern UNK_TYPE1 D_801B703C;
-// extern UNK_TYPE1 D_801B7064;
-// extern UNK_TYPE1 D_801B708C;
-// extern UNK_TYPE1 D_801B70BC;
-// extern UNK_TYPE1 D_801B70E4;
-// extern UNK_TYPE1 D_801B7114;
-// extern UNK_TYPE1 D_801B7148;
-// extern UNK_TYPE1 D_801B7170;
-// extern UNK_TYPE1 D_801B71A0;
-// extern UNK_TYPE1 D_801B71D4;
-// extern UNK_TYPE1 D_801B7204;
-// extern UNK_TYPE1 D_801B7210;
-// extern UNK_TYPE1 D_801B7244;
-// extern UNK_TYPE1 D_801B7278;
-// extern UNK_TYPE1 D_801B729C;
-// extern UNK_TYPE1 D_801B72C0;
-// extern UNK_TYPE1 D_801B72E4;
-// extern UNK_TYPE1 D_801B7308;
-// extern UNK_TYPE1 D_801B732C;
-// extern UNK_TYPE1 D_801B7354;
-// extern UNK_TYPE1 D_801B7384;
-// extern UNK_TYPE1 D_801B73AC;
-// extern UNK_TYPE1 D_801B73D4;
-// extern UNK_TYPE1 D_801B74C4;
-// extern UNK_TYPE1 D_801B759C;
-// extern UNK_TYPE1 D_801B75F4;
-// extern UNK_TYPE1 D_801B767C;
-// extern UNK_TYPE1 D_801B7684;
-// extern UNK_TYPE1 D_801B768C;
-// extern UNK_TYPE1 D_801B7694;
-// extern UNK_TYPE1 D_801B769C;
-// extern UNK_TYPE1 D_801B76A4;
-// extern UNK_TYPE1 D_801B76AC;
-// extern UNK_TYPE1 D_801B777C;
-// extern UNK_TYPE1 D_801B784C;
-// extern UNK_TYPE1 D_801B791C;
-// extern UNK_TYPE1 D_801B7984;
-// extern UNK_TYPE1 D_801B79EC;
-// extern UNK_TYPE1 D_801B79F4;
-// extern UNK_TYPE1 D_801B7AE4;
-// extern UNK_TYPE1 D_801B7B14;
-// extern UNK_TYPE1 D_801B7B44;
-// extern UNK_TYPE1 D_801B7B74;
-// extern UNK_TYPE1 D_801B7BA4;
-// extern UNK_TYPE1 D_801B7BAC;
-// extern UNK_TYPE1 D_801B7BDC;
-// extern UNK_TYPE1 D_801B7C0C;
-// extern UNK_TYPE1 D_801B7C3C;
-// extern UNK_TYPE1 D_801B7C44;
-// extern UNK_TYPE1 D_801B7C54;
-// extern UNK_TYPE1 D_801B7C5C;
-// extern UNK_TYPE1 D_801B7C64;
-// extern UNK_TYPE1 D_801B7D34;
-// extern UNK_TYPE1 D_801B7D3C;
-// extern UNK_TYPE1 D_801B7D44;
-// extern UNK_TYPE1 D_801B7D4C;
-// extern UNK_TYPE1 D_801B7D54;
-// extern UNK_TYPE1 D_801B7D5C;
-// extern UNK_TYPE1 D_801B7D64;
-// extern UNK_TYPE1 D_801B7DCC;
-// extern UNK_TYPE1 D_801B7DD4;
-// extern UNK_TYPE1 D_801B7E3C;
-// extern UNK_TYPE1 D_801B7F0C;
-// extern UNK_TYPE1 D_801B7F14;
-// extern UNK_TYPE1 D_801B7F1C;
-// extern UNK_TYPE1 D_801B7F24;
-// extern UNK_TYPE1 D_801B7F2C;
-// extern UNK_TYPE1 D_801B7F34;
-// extern UNK_TYPE1 D_801B7F3C;
-// extern UNK_TYPE1 D_801B7FAC;
-// extern UNK_TYPE1 D_801B807C;
-// extern UNK_TYPE1 D_801B8084;
-// extern UNK_TYPE1 D_801B8154;
-// extern UNK_TYPE1 D_801B8224;
-// extern UNK_TYPE1 D_801B82F4;
-// extern UNK_TYPE1 D_801B82FC;
-// extern UNK_TYPE1 D_801B8304;
-// extern UNK_TYPE1 D_801B83D4;
-// extern UNK_TYPE1 D_801B83DC;
-// extern UNK_TYPE1 D_801B8434;
-// extern UNK_TYPE1 D_801B843C;
-// extern UNK_TYPE1 D_801B8444;
-// extern UNK_TYPE1 D_801B8514;
-// extern UNK_TYPE1 D_801B85E4;
-// extern UNK_TYPE1 D_801B8664;
-// extern UNK_TYPE1 D_801B8754;
-// extern UNK_TYPE1 D_801B875C;
-// extern UNK_TYPE1 D_801B87C4;
-// extern UNK_TYPE1 D_801B8894;
-// extern UNK_TYPE1 D_801B8964;
-// extern UNK_TYPE1 D_801B8A34;
-// extern UNK_TYPE1 D_801B8B04;
-// extern UNK_TYPE1 D_801B8BD4;
-// extern UNK_TYPE1 D_801B8CAC;
-// extern UNK_TYPE1 D_801B8CB4;
-// extern UNK_TYPE1 D_801B8D8C;
-// extern UNK_TYPE1 D_801B8E5C;
-// extern UNK_TYPE1 D_801B8F2C;
-// extern UNK_TYPE1 D_801B8F34;
-// extern UNK_TYPE1 D_801B900C;
-// extern UNK_TYPE1 D_801B90D4;
-// extern UNK_TYPE1 D_801B91A4;
-// extern UNK_TYPE1 D_801B91AC;
-// extern UNK_TYPE1 D_801B927C;
-// extern UNK_TYPE1 D_801B9354;
-// extern UNK_TYPE1 D_801B9424;
-// extern UNK_TYPE1 D_801B94F4;
-// extern UNK_TYPE1 D_801B95C4;
-// extern UNK_TYPE1 D_801B95CC;
-// extern UNK_TYPE1 D_801B969C;
-// extern UNK_TYPE1 D_801B976C;
-// extern UNK_TYPE1 D_801B979C;
-// extern CameraStateParams cameraStates[91];
-// extern UNK_TYPE1 D_801B9CE2;
-// extern UNK_PTR D_801B9CE4;
-// extern camera_update_func cameraUpdateFuncs[71];
-// extern UNK_TYPE2 D_801B9E04;
-// extern UNK_TYPE4 D_801B9E08;
+
// extern UNK_TYPE4 D_801B9E0C;
// extern UNK_TYPE4 D_801B9E10;
// extern UNK_TYPE4 D_801B9E14;
@@ -833,8 +448,8 @@ extern BgSpecialSceneMaxObjects sCustomDynapolyMem[];
// extern UNK_TYPE1 D_801B9E84;
// extern UNK_TYPE4 D_801B9EB4;
// extern UNK_TYPE4 D_801B9ED4;
-// extern UNK_TYPE4 D_801B9F04;
-// extern UNK_TYPE2 D_801B9F0C;
+// extern UNK_TYPE4 sEarthquakeFreq;
+// extern UNK_TYPE2 sEarthquakeTimer;
extern UNK_TYPE4 D_801B9F10;
extern DamageTable sDamageTablePresets[23];
extern f32 damageMultipliers[16];
@@ -1309,7 +924,7 @@ extern u8 gUpgradeShifts[8];
extern u16 gUpgradeCapacities[][4];
extern u32 gGsFlagsMask[];
extern u32 gGsFlagsShift[];
-extern void* gItemIcons[];
+extern TexturePtr gItemIcons[];
extern u8 gItemSlots[];
extern s16 gItemPrices[];
extern u16 gSceneIdsPerRegion[11][27];
@@ -1358,7 +973,7 @@ extern struct_801C5F44 D_801C5F44[]; // D_801C5F44
extern u8 D_801CFC98;
extern s16 D_801CFCA4[9];
// extern UNK_TYPE2 D_801CFCAC;
-// extern UNK_TYPE1 D_801CFCB8;
+extern s16 gOcarinaSongItemMap[];
// extern UNK_TYPE2 D_801CFCD8;
// extern UNK_TYPE2 D_801CFCE4;
// extern UNK_TYPE2 D_801CFCF0;
@@ -1571,7 +1186,7 @@ extern f32 gDefaultPanVolume[];
// extern UNK_TYPE1 D_801D5FD4;
extern UNK_PTR D_801D5FE0;
// extern UNK_TYPE1 D_801D5FE4;
-extern s32 gAudioContextInitalized;
+extern s32 gAudioCtxInitalized;
// extern UNK_TYPE4 D_801D5FEC;
// extern UNK_TYPE4 D_801D5FF0;
// extern UNK_TYPE4 D_801D5FF4;
@@ -3466,7 +3081,7 @@ extern ActiveSequence gActiveSeqs[];
// extern UNK_TYPE1 D_80200BCC;
// extern UNK_TYPE1 D_80200BCE;
// extern UNK_TYPE1 D_80200BD0;
-extern AudioContext gAudioContext; // at 0x80200C70
+extern AudioContext gAudioCtx; // at 0x80200C70
extern void (*gCustomAudioUpdateFunction)(void);
extern u32 (*gCustomAudioSeqFunction)(s8 value, SequenceChannel* channel);
extern s32 (*gCustomAudioReverbFunction)(Sample*, s32, s8, s32);
diff --git a/include/z64.h b/include/z64.h
index b18ab8d86..da1f88323 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -111,17 +111,6 @@ typedef struct {
/* 0x8 */ void* end;
} PolygonType2; // size = 0xC
-typedef struct {
- /* 0x0 */ s16 func;
- /* 0x2 */ UNK_TYPE1 pad2[0x6];
-} CameraModeParams; // size = 0x8
-
-typedef struct {
- /* 0x0 */ u32 validModes;
- /* 0x4 */ UNK_TYPE1 pad4[0x4];
- /* 0x8 */ CameraModeParams* modes;
-} CameraStateParams; // size = 0xC
-
typedef struct {
/* 0x0 */ s16 x;
/* 0x2 */ s16 y;
@@ -418,7 +407,7 @@ typedef struct {
/* 0x1E8 */ OSMesg loadMsg;
/* 0x1EC */ u16 state;
/* 0x1EE */ u16 debugEditor;
- /* 0x1F0 */ u8 unk_1F0;
+ /* 0x1F0 */ u8 bombersNotebookOpen;
/* 0x1F4 */ Vec3f eye;
/* 0x200 */ u16 unk_200;
/* 0x202 */ u16 mode;
@@ -463,7 +452,7 @@ typedef struct {
/* 0x298 */ f32 unk_298;
/* 0x29C */ s16 promptChoice; // save/continue choice: 0 = yes; 4 = no
/* 0x29E */ s16 promptAlpha;
- /* 0x2A0 */ s16 unk_2A0;
+ /* 0x2A0 */ s16 ocarinaSongIndex;
/* 0x2A2 */ u8 worldMapPoints[20];
/* 0x2B6 */ u8 unk_2B6;
/* 0x2B7 */ u8 unk_2B7;
@@ -471,9 +460,9 @@ typedef struct {
/* 0x2B9 */ u8 itemDescriptionOn; // helpful description of item given through a message box
/* 0x2BA */ s16 equipAnimScale; // scale of item icon while moving being equipped to c-button
/* 0x2BC */ s16 equipAnimShrinkRate; // rate the scale is shrinking for the item icon while moving being equipped to c-button
- /* 0x2BE */ s16 unk_2BE[5];
+ /* 0x2BE */ s16 ocarinaButtonsY[5];
/* 0x2C8 */ u16 unk_2C8; // Uses PauseMenuPage enum for Owl Warp. Never set.
- /* 0x2CA */ s16 unk_2CA; // Uses OwlStatueId enum for Owl Warp. Never set.
+ /* 0x2CA */ s16 unk_2CA; // Uses OwlWarpId enum for Owl Warp. Never set.
} PauseContext; // size = 0x2D0
typedef struct {
diff --git a/include/z64audio.h b/include/z64audio.h
index 264e8d9e3..17f0e84f9 100644
--- a/include/z64audio.h
+++ b/include/z64audio.h
@@ -7,7 +7,7 @@
#define TATUMS_PER_BEAT 48
-#define IS_SEQUENCE_CHANNEL_VALID(ptr) ((uintptr_t)(ptr) != (uintptr_t)&gAudioContext.sequenceChannelNone)
+#define IS_SEQUENCE_CHANNEL_VALID(ptr) ((uintptr_t)(ptr) != (uintptr_t)&gAudioCtx.sequenceChannelNone)
#define SEQ_NUM_CHANNELS 16
#define SEQ_IO_VAL_NONE -1
diff --git a/include/z64bgcheck.h b/include/z64bgcheck.h
index c2a9bab7c..ad5d4c4fb 100644
--- a/include/z64bgcheck.h
+++ b/include/z64bgcheck.h
@@ -108,7 +108,7 @@ typedef struct {
// 0x0008_0000 = ?
// 0x0007_E000 = room index, 0x3F = all rooms
// 0x0000_1F00 = lighting setting index
- // 0x0000_00FF = CamData index
+ // 0x0000_00FF = bgCam index
} WaterBox; // size = 0x10
typedef struct {
@@ -122,7 +122,7 @@ typedef struct {
// 0x001C_0000 = ?
// 0x0003_E000 = ?
// 0x0000_1F00 = scene exit index
- // 0x0000_00FF = CamData index
+ // 0x0000_00FF = bgCam index
// Word 1
// 0x0800_0000 = wall damage
// 0x07E0_0000 = conveyor direction
diff --git a/include/z64camera.h b/include/z64camera.h
index e3b3a4483..9c101bf73 100644
--- a/include/z64camera.h
+++ b/include/z64camera.h
@@ -2,6 +2,7 @@
#define Z64CAMERA_H
#include "ultra64.h"
+#include "z64save.h"
// these two angle conversion macros are slightly inaccurate
#define CAM_DEG_TO_BINANG(degrees) (s16)((degrees) * ((f32)0xFFFF / 360) + .5f)
@@ -16,6 +17,72 @@
#define SUB_CAM_ID_DONE 0 // Used in some actors for variables holding sub camera IDs to indicate "subcam is finished"
+#define CAM_HUD_VISIBILITY_SHIFT 8
+#define CAM_HUD_VISIBILITY_MASK (0x0F00)
+#define CAM_HUD_VISIBILITY(hudVisibility) (((hudVisibility) & 0xF) << CAM_HUD_VISIBILITY_SHIFT)
+
+#define CAM_HUD_VISIBILITY_ALL \
+ CAM_HUD_VISIBILITY(0) // HUD_VISIBILITY_ALL
+#define CAM_HUD_VISIBILITY_NONE \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_NONE)
+#define CAM_HUD_VISIBILITY_NONE_ALT \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_NONE_ALT)
+#define CAM_HUD_VISIBILITY_HEARTS_WITH_OVERWRITE \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS_WITH_OVERWRITE)
+#define CAM_HUD_VISIBILITY_A \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_A)
+#define CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE)
+#define CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE)
+#define CAM_HUD_VISIBILITY_ALL_NO_MINIMAP_W_DISABLED \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_ALL_NO_MINIMAP_W_DISABLED)
+#define CAM_HUD_VISIBILITY_B \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_B)
+#define CAM_HUD_VISIBILITY_HEARTS_MAGIC \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS_MAGIC)
+#define CAM_HUD_VISIBILITY_B_ALT \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_B_ALT)
+#define CAM_HUD_VISIBILITY_HEARTS \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS)
+#define CAM_HUD_VISIBILITY_A_B_MINIMAP \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_A_B_MINIMAP)
+#define CAM_HUD_VISIBILITY_HEARTS_MAGIC_WITH_OVERWRITE \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS_MAGIC_WITH_OVERWRITE)
+#define CAM_HUD_VISIBILITY_HEARTS_MAGIC_C \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS_MAGIC_C)
+// HUD_VISIBILITY_ALL_NO_MINIMAP and above can not be set using `CAM_HUD_VISIBILITY`
+#define CAM_HUD_VISIBILITY_IGNORE \
+ CAM_HUD_VISIBILITY(0xF)
+
+/**
+ * letterboxFlag: determines the size of the letter-box window. See CAM_LETTERBOX_* enums.
+ * Can also add on the flag ( | CAM_LETTERBOX_INSTANT) to make the size change immediately
+ * hudVisibility: hides certain hud icons
+ * - A value of 0 in camera is translated to a hudVisibility of 50,
+ * which is the value to restore all hud icons to the screen (CAM_HUD_VISIBILITY_ALL)
+ * - A value of 0xF in camera results in no change in the hudVisibility (CAM_HUD_VISIBILITY_IGNORE)
+ * funcFlags: Custom flags for functions
+ */
+#define CAM_INTERFACE_FLAGS(letterboxFlag, hudVisibility, funcFlags) \
+ (((letterboxFlag) & CAM_LETTERBOX_MASK) | (hudVisibility) | ((funcFlags) & 0xFF))
+
+// Shrinking the window from the top and bottom with black borders (letterboxing)
+#define CAM_LETTERBOX_MASK 0xF000
+
+#define CAM_LETTERBOX_SIZE_MASK 0x7000
+#define CAM_LETTERBOX_NONE 0x0000
+// small/medium/large black borders
+#define CAM_LETTERBOX_SMALL 0x1000
+#define CAM_LETTERBOX_MEDIUM 0x2000
+#define CAM_LETTERBOX_LARGE 0x3000
+#define CAM_LETTERBOX_NONE_4 0x4000
+
+#define CAM_LETTERBOX_INSTANT 0x8000 // Bit to determine whether to set the current value directly (on), or to set the size target (off)
+
+#define CAM_LETTERBOX_IGNORE 0xF000 // No change in letterbox size, keep the previous size
+
+
// Camera behaviorFlags. Flags specifically for settings, modes, and bgCam
// Used to store current state, only CAM_BEHAVIOR_SETTING_1 and CAM_BEHAVIOR_BG_2 are read from and used in logic
// Setting (0x1, 0x10)
@@ -280,9 +347,9 @@ typedef enum {
/* 0x04 */ CAM_DATA_04,
/* 0x05 */ CAM_DATA_05,
/* 0x06 */ CAM_DATA_06,
- /* 0x07 */ CAM_DATA_07,
+ /* 0x07 */ CAM_DATA_FOV,
/* 0x08 */ CAM_DATA_08,
- /* 0x09 */ CAM_DATA_09,
+ /* 0x09 */ CAM_DATA_INTERFACE_FLAGS,
/* 0x0A */ CAM_DATA_10,
/* 0x0B */ CAM_DATA_11,
/* 0x0C */ CAM_DATA_12,
@@ -297,31 +364,1188 @@ typedef enum {
/* 0x15 */ CAM_DATA_21,
} CameraDataType;
-typedef struct {
- /* 0x0 */ s16 val;
- /* 0x2 */ s16 param;
-} CameraModeValue; // size = 0x4
-
-typedef struct {
- /* 0x0 */ s16 funcId;
- /* 0x2 */ s16 numValues;
- /* 0x4 */ CameraModeValue* values;
-} CameraMode; // size = 0x8
-
-/**
- * Flags:
- * (flags & 0xF): Priority (lower value has higher priority)
- * (flags & 0x40000000): Store previous setting and bgCamData, also ignores water checks
- * (flags & 0x80000000): Set camera setting based on bg/scene data and reset action function state
+/*================================
+ * MISC DATA
+ *================================
*/
+
+// Camera Collision Check
typedef struct {
- /* 0x0 */ u32 validModes;
- /* 0x4 */ u32 flags;
- /* 0x8 */ CameraMode* cameraModes;
-} CameraSetting; // size = 0xC
+ /* 0x00 */ Vec3f pos;
+ /* 0x0C */ Vec3f norm;
+ /* 0x18 */ CollisionPoly* poly;
+ /* 0x1C */ VecSph sphNorm;
+ /* 0x24 */ s32 bgId;
+} CameraCollision; // size = 0x28
+
+typedef struct {
+ /* 0x00 */ Vec3f collisionClosePoint;
+ /* 0x0C */ CameraCollision atEyeColChk;
+ /* 0x34 */ CameraCollision eyeAtColChk;
+ /* 0x5C */ f32 swingUpdateRate;
+ /* 0x60 */ s16 pitch;
+ /* 0x62 */ s16 yaw;
+ /* 0x64 */ s16 unk_64;
+ /* 0x66 */ s16 timer; // startSwingTimer
+} SwingAnimation; // size = 0x68
+
+
+/*================================
+ * Camera Update-Function Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_INTERFACE_FLAGS(interfaceFlags) \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+
+/*================================
+ * Camera_Normal1() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_NORM1(yOffset, data01, data02, pitchTarget, eyeStepScale, posStepScale, yawDiffRange, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { eyeStepScale, CAM_DATA_04 }, \
+ { posStepScale, CAM_DATA_05 }, \
+ { yawDiffRange, CAM_DATA_06 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00; // yOffset
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14; // attenuationYawDiffRange
+ /* 0x18 */ f32 unk_18; // fovTarget
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ s16 unk_20; // pitchTarget
+ /* 0x22 */ s16 interfaceFlags;
+} Normal1ReadOnlyData; // size = 0x24
+
+typedef struct {
+ /* 0x00 */ f32 unk_00; // yPos
+ /* 0x04 */ f32 unk_04; // xzSpeed
+ /* 0x08 */ s16 unk_08;
+ /* 0x0A */ s16 unk_0A; // angle
+ /* 0x0C */ s16 unk_0C; // flags (May be s32)
+ /* 0x0E */ s16 unk_0E;
+ /* 0x10 */ f32 unk_10; // set to float
+} Normal1ReadWriteData; // size = 0x14
+
+typedef struct {
+ /* 0x00 */ Normal1ReadOnlyData roData;
+ /* 0x24 */ Normal1ReadWriteData rwData;
+} Normal1; // size = 0x38
+
+#define NORMAL1_FLAG_0 (1 << 0)
+#define NORMAL1_FLAG_1 (1 << 1)
+#define NORMAL1_FLAG_2 (1 << 2)
+#define NORMAL1_FLAG_3 (1 << 3)
+#define NORMAL1_FLAG_4 (1 << 4)
+#define NORMAL1_FLAG_5 (1 << 5)
+#define NORMAL1_FLAG_6 (1 << 6)
+#define NORMAL1_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_Normal2() Data
+ *================================
+ */
+
+// Unused Camera RemoteBomb Setting
+
+#define CAM_FUNCDATA_NORM2(yOffset, data01, data02, pitchTarget, data04, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { data04, CAM_DATA_04 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+#define NORMAL2_FLAG_1 (1 << 1)
+
+
+/*================================
+ * Camera_Normal3() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_NORM3(yOffset, data01, data02, pitchTarget, eyeStepScale, posStepScale, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { eyeStepScale, CAM_DATA_04 }, \
+ { posStepScale, CAM_DATA_05 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 yOffset;
+ /* 0x04 */ f32 distMin;
+ /* 0x08 */ f32 distMax;
+ /* 0x0C */ f32 yawUpdateRateInv;
+ /* 0x10 */ f32 pitchUpdateRateInv;
+ /* 0x14 */ f32 fovTarget;
+ /* 0x18 */ f32 maxAtLERPScale;
+ /* 0x1C */ s16 pitchTarget;
+ /* 0x1E */ s16 interfaceFlags;
+} Normal3ReadOnlyData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ f32 isZero; // set but unused
+ /* 0x04 */ f32 yPosOffset;
+ /* 0x08 */ s16 curPitch;
+ /* 0x0A */ s16 yawUpdateRate;
+ /* 0x0C */ s16 yawTimer;
+ /* 0x0E */ s16 distTimer;
+ /* 0x10 */ s16 flag;
+ /* 0x12 */ s16 is1200; // set but unused
+} Normal3ReadWriteData; // size = 0x14
+
+typedef struct {
+ /* 0x00 */ Normal3ReadOnlyData roData;
+ /* 0x20 */ Normal3ReadWriteData rwData;
+} Normal3; // size = 0x34
+
+#define NORMAL3_FLAG_1 (1 << 1)
+#define NORMAL3_FLAG_5 (1 << 5)
+#define NORMAL3_FLAG_6 (1 << 6)
+#define NORMAL3_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_Normal0() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_NORM0(yOffset, data01, data02, data21, data04, yawDiffRange, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data21, CAM_DATA_21 }, \
+ { data04, CAM_DATA_04 }, \
+ { yawDiffRange, CAM_DATA_06 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ s16 unk_1C;
+ /* 0x1E */ s16 interfaceFlags;
+} Normal0ReadOnlyData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ Vec3f unk_0C;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ s16 unk_20;
+ /* 0x22 */ s16 unk_22;
+ /* 0x24 */ f32 unk_24;
+ /* 0x28 */ f32 unk_28;
+ /* 0x2C */ s16 unk_2C;
+} Normal0ReadWriteData; // size = 0x30
+
+typedef struct {
+ /* 0x00 */ Normal0ReadOnlyData roData;
+ /* 0x20 */ Normal0ReadWriteData rwData;
+} Normal0; // size = 0x50
+
+#define NORMAL0_FLAG_0 (1 << 0)
+#define NORMAL0_FLAG_2 (1 << 2)
+#define NORMAL0_FLAG_4 (1 << 4)
+#define NORMAL0_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_Parallel1() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_PARA1(yOffset, data01, data02, pitchTarget, data10, data04, data05, fov, data08, interfaceFlags, data11, data12) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { data10, CAM_DATA_10 }, \
+ { data04, CAM_DATA_04 }, \
+ { data05, CAM_DATA_05 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }, \
+ { data11, CAM_DATA_11 }, \
+ { data12, CAM_DATA_12 }
+
+// Same as above but with extra unused entry
+#define CAM_FUNCDATA_PARA1_ALT(yOffset, data01, data02, pitchTarget, data10, data04, data05, fov, data08, interfaceFlags, data11, data12, data18) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { data10, CAM_DATA_10 }, \
+ { data04, CAM_DATA_04 }, \
+ { data05, CAM_DATA_05 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }, \
+ { data11, CAM_DATA_11 }, \
+ { data12, CAM_DATA_12 }, \
+ { data18, CAM_DATA_18 }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ s16 unk_20;
+ /* 0x22 */ s16 unk_22;
+ /* 0x24 */ s16 unk_24;
+ /* 0x26 */ s16 interfaceFlags;
+} Parallel1ReadOnlyData; // size = 0x28
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 timer1;
+ /* 0x10 */ Vec3f unk_10;
+ /* 0x1C */ s16 unk_1C;
+ /* 0x1E */ s16 unk_1E;
+ /* 0x20 */ s16 unk_20;
+ /* 0x22 */ s16 timer2;
+ /* 0x24 */ s16 timer3;
+ /* 0x26 */ s16 unk_26;
+} Parallel1ReadWriteData; // size = 0x28
+
+typedef struct {
+ /* 0x00 */ Parallel1ReadOnlyData roData;
+ /* 0x28 */ Parallel1ReadWriteData rwData;
+} Parallel1; // size = 0x50
+
+#define PARALLEL1_FLAG_0 (1 << 0)
+#define PARALLEL1_FLAG_1 (1 << 1)
+#define PARALLEL1_FLAG_2 (1 << 2)
+#define PARALLEL1_FLAG_3 (1 << 3)
+#define PARALLEL1_FLAG_4 (1 << 4)
+#define PARALLEL1_FLAG_5 (1 << 5)
+#define PARALLEL1_FLAG_6 (1 << 6)
+#define PARALLEL1_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_Parallel2() Data
+ *================================
+ */
+
+// Unused Camera Maze Setting
+
+#define CAM_FUNCDATA_PARA2(yOffset, data02, data01, pitchTarget, data04, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data02, CAM_DATA_02 }, \
+ { data01, CAM_DATA_01 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { data04, CAM_DATA_04 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+#define PARALLEL2_FLAG_1 (1 << 1)
+
+
+/*================================
+ * Camera_Jump2() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_JUMP2(yOffset, data01, data02, data20, data04, data05, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data20, CAM_DATA_20 }, \
+ { data04, CAM_DATA_04 }, \
+ { data05, CAM_DATA_05 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ s16 interfaceFlags;
+} Jump2ReadOnlyData; // size = 0x24
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ s16 unk_04;
+ /* 0x06 */ s16 unk_06;
+ /* 0x08 */ s16 unk_08;
+ /* 0x0A */ s16 unk_0A;
+ /* 0x0C */ s16 timer;
+ /* 0x0E */ s16 unk_0E;
+ /* 0x10 */ s32 unk_10; // unused?
+ /* 0x1C */ s16 unk_1C;
+} Jump2ReadWriteData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ Jump2ReadOnlyData roData;
+ /* 0x24 */ Jump2ReadWriteData rwData;
+} Jump2; // size = 0x44
+
+#define JUMP2_FLAG_1 (1 << 1)
+#define JUMP2_FLAG_2 (1 << 2)
+
+
+/*================================
+ * Camera_Jump3() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_JUMP3(yOffset, data01, data02, pitchTarget, data04, data05, yawDiffRange, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { data04, CAM_DATA_04 }, \
+ { data05, CAM_DATA_05 }, \
+ { yawDiffRange, CAM_DATA_06 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00; // yOffset
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14; // attenuationYawDiffRange
+ /* 0x18 */ f32 unk_18; // fovTarget
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ s16 unk_20;
+ /* 0x22 */ s16 interfaceFlags;
+} Jump3ReadOnlyData; // size = 0x24
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ s16 unk_04;
+ /* 0x06 */ s16 unk_06;
+ /* 0x08 */ s16 timer1;
+ /* 0x0A */ s16 unk_0A;
+ /* 0x0C */ s32 timer2;
+ /* 0x10 */ s16 unk_10;
+ /* 0x12 */ s16 unk_12;
+ /* 0x1C */ s16 unk_1C;
+} Jump3ReadWriteData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ Jump3ReadOnlyData roData; // yOffset
+ /* 0x24 */ Jump3ReadWriteData rwData;
+} Jump3; // size = 0x44
+
+#define JUMP3_FLAG_0 (1 << 0)
+#define JUMP3_FLAG_2 (1 << 2)
+#define JUMP3_FLAG_3 (1 << 3)
+#define JUMP3_FLAG_4 (1 << 4)
+#define JUMP3_FLAG_5 (1 << 5)
+#define JUMP3_FLAG_6 (1 << 6)
+#define JUMP3_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_Battle1() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_BATT1(yOffset, data01, data02, data13, data14, data15, data16, data17, fov, data08, interfaceFlags, data11, data18) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data13, CAM_DATA_13 }, \
+ { data14, CAM_DATA_14 }, \
+ { data15, CAM_DATA_15 }, \
+ { data16, CAM_DATA_16 }, \
+ { data17, CAM_DATA_17 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }, \
+ { data11, CAM_DATA_11 }, \
+ { data18, CAM_DATA_18 }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ f32 unk_20;
+ /* 0x24 */ f32 unk_24;
+ /* 0x28 */ f32 unk_28;
+ /* 0x2C */ f32 unk_2C;
+ /* 0x30 */ s16 interfaceFlags;
+} Battle1ReadOnlyData; // size = 0x34
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ Actor* unk_08; // targe3t
+ /* 0x0C */ s32 unk_0C; // unused?
+ /* 0x10 */ s16 unk_10;
+ /* 0x12 */ s16 unk_12;
+ /* 0x14 */ s16 unk_14;
+ /* 0x16 */ s16 unk_16;
+ /* 0x18 */ s16 unk_18;
+ /* 0x1A */ s16 unk_1A;
+} Battle1ReadWriteData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ Battle1ReadOnlyData roData;
+ /* 0x24 */ Battle1ReadWriteData rwData;
+} Battle1; // size = 0x50
+
+#define BATTLE1_FLAG_0 (1 << 0)
+#define BATTLE1_FLAG_1 (1 << 1)
+#define BATTLE1_FLAG_4 (1 << 4)
+#define BATTLE1_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_KeepOn1() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_KEEP1(yOffset, data01, data02, data13, data14, data15, data16, data17, fov, data08, interfaceFlags, data11) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data13, CAM_DATA_13 }, \
+ { data14, CAM_DATA_14 }, \
+ { data15, CAM_DATA_15 }, \
+ { data16, CAM_DATA_16 }, \
+ { data17, CAM_DATA_17 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }, \
+ { data11, CAM_DATA_11 }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ f32 unk_20;
+ /* 0x24 */ f32 unk_24;
+ /* 0x28 */ f32 unk_28;
+ /* 0x2C */ s16 interfaceFlags;
+} KeepOn1ReadOnlyData; // size = 0x30
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ Actor* unk_0C;
+ /* 0x10 */ s16 unk_10;
+ /* 0x12 */ s16 unk_12;
+ /* 0x14 */ s16 unk_14;
+ /* 0x16 */ s16 unk_16;
+ /* 0x18 */ s16 unk_18;
+} KeepOn1ReadWriteData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ KeepOn1ReadOnlyData roData;
+ /* 0x30 */ KeepOn1ReadWriteData rwData;
+} KeepOn1; // size = 0x4C
+
+#define KEEPON1_FLAG_0 (1 << 0)
+#define KEEPON1_FLAG_1 (1 << 1)
+#define KEEPON1_FLAG_4 (1 << 4)
+#define KEEPON1_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_KeepOn3() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_KEEP3(yOffset, data01, data02, data13, data14, data15, data16, data17, fov, data08, timer, interfaceFlags, data18) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data13, CAM_DATA_13 }, \
+ { data14, CAM_DATA_14 }, \
+ { data15, CAM_DATA_15 }, \
+ { data16, CAM_DATA_16 }, \
+ { data17, CAM_DATA_17 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { timer, CAM_DATA_04 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }, \
+ { data18, CAM_DATA_18 }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ f32 unk_20;
+ /* 0x24 */ f32 unk_24;
+ /* 0x28 */ f32 unk_28;
+ /* 0x2C */ s16 timer; // initial timer, stored at twice the value used in code
+ /* 0x2E */ s16 interfaceFlags;
+} KeepOn3ReadOnlyData; // size = 0x30
+
+typedef struct {
+ /* 0x00 */ f32 unk_00; // Vec3f?
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ Actor* unk_0C;
+ /* 0x10 */ Vec3f unk_10;
+ /* 0x1C */ s16 timer;
+} KeepOn3ReadWriteData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ KeepOn3ReadOnlyData roData;
+ /* 0x30 */ KeepOn3ReadWriteData rwData;
+} KeepOn3; // size = 0x50
+
+#define KEEPON3_FLAG_5 (1 << 5)
+#define KEEPON3_FLAG_6 (1 << 6)
+#define KEEPON3_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_KeepOn4() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_KEEP4(yOffset, data01, pitchTarget, data10, data18, fov, interfaceFlags, data04, timer) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { data10, CAM_DATA_10 }, \
+ { data18, CAM_DATA_18 }, \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }, \
+ { data04, CAM_DATA_04 }, \
+ { timer, CAM_DATA_12 }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ s16 interfaceFlags;
+ /* 0x1E */ s16 timer;
+} KeepOn4ReadOnlyData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ f32 unk_00; // Vec3f?
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ Actor* unk_0C;
+ /* 0x10 */ s16 unk_10;
+ /* 0x12 */ s16 unk_12;
+ /* 0x14 */ s16 timer;
+ /* 0x16 */ s16 unk_16;
+ /* 0x18 */ s16 unk_18;
+} KeepOn4ReadWriteData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ KeepOn4ReadOnlyData roData;
+ /* 0x20 */ KeepOn4ReadWriteData rwData;
+} KeepOn4; // size = 0x3C
+
+#define KEEPON4_FLAG_1 (1 << 1)
+#define KEEPON4_FLAG_2 (1 << 2)
+#define KEEPON4_FLAG_3 (1 << 3)
+#define KEEPON4_FLAG_6 (1 << 6)
+
+
+/*================================
+ * Camera_Fixed1() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_FIXD1(yOffset, data04, fov, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data04, CAM_DATA_04 }, \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 fov;
+ /* 0x0C */ s16 interfaceFlags;
+} Fixed1ReadOnlyData; // size = 0x10
+
+typedef struct {
+ /* 0x00 */ PosRot eyePosRotTarget;
+ /* 0x14 */ s16 fov;
+ /* 0x18 */ Actor* focalActor;
+} Fixed1ReadWriteData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ Fixed1ReadOnlyData roData;
+ /* 0x10 */ Fixed1ReadWriteData rwData;
+} Fixed1; // size = 0x2C
+
+#define FIXED1_FLAG_4 (1 << 4)
+
+
+/*================================
+ * Camera_Fixed2() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_FIXD2(yOffset, data01, data02, data04, data05, fov, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data04, CAM_DATA_04 }, \
+ { data05, CAM_DATA_05 }, \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ s16 interfaceFlags;
+} Fixed2ReadOnlyData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ s16 unk_1C;
+} Fixed2ReadWriteData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ Fixed2ReadOnlyData roData;
+ /* 0x1C */ Fixed2ReadWriteData rwData;
+} Fixed2; // size = 0x3C
+
+#define FIXED2_FLAG_0 (1 << 0)
+#define FIXED2_FLAG_1 (1 << 1)
+#define FIXED2_FLAG_2 (1 << 2)
+#define FIXED2_FLAG_3 (1 << 3)
+#define FIXED2_FLAG_4 (1 << 4)
+#define FIXED2_FLAG_5 (1 << 5)
+#define FIXED2_FLAG_6 (1 << 6)
+#define FIXED2_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_Fixed3() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_FIXD3(interfaceFlags) \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+
+/*================================
+ * Camera_Subject1() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_SUBJ1(yOffset, data01, data02, data04, data19, data17, data18, fov, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data04, CAM_DATA_04 }, \
+ { data19, CAM_DATA_19 }, \
+ { data17, CAM_DATA_17 }, \
+ { data18, CAM_DATA_18 }, \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ s16 interfaceFlags;
+} Subject1ReadOnlyData; // size = 0x24
+
+typedef struct {
+ /* 0x0 */ f32 unk_00;
+ /* 0x4 */ s16 unk_04; // yaw
+ /* 0x6 */ s16 unk_06; // pitch
+ /* 0x8 */ s16 timer;
+} Subject1ReadWriteData; // size = 0xC
+
+typedef struct {
+ /* 0x00 */ Subject1ReadOnlyData roData;
+ /* 0x24 */ Subject1ReadWriteData rwData;
+} Subject1; // size = 0x30
+
+#define SUBJECT1_FLAG_4 (1 << 4)
+
+
+/*================================
+ * Camera_Unique2() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_UNIQ2(yOffset, data01, fov, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ s16 interfaceFlags;
+} Unique2ReadOnlyData; // size = 0x14
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ s16 unk_04;
+} Unique2ReadWriteData; // size = 0x8
+
+typedef struct {
+ /* 0x00 */ Unique2ReadOnlyData roData;
+ /* 0x14 */ Unique2ReadWriteData rwData;
+} Unique2; // size = 0x1C
+
+#define UNIQUE2_FLAG_0 (1 << 0)
+#define UNIQUE2_FLAG_1 (1 << 1)
+#define UNIQUE2_FLAG_4 (1 << 4)
+#define UNIQUE2_FLAG_5 (1 << 5)
+
+
+/*================================
+ * Camera_Unique0() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_UNIQ0(yOffset, data04, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data04, CAM_DATA_04 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x0 */ f32 unk_00;
+ /* 0x4 */ f32 unk_04;
+ /* 0x8 */ s16 interfaceFlags;
+} Unique0ReadOnlyData; // size = 0xC
+
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ Vec3f unk_0C;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ Vec3f unk_1C;
+ /* 0x28 */ Vec3f unk_28;
+ /* 0x34 */ Vec3s unk_34;
+ /* 0x3A */ s16 unk_3A;
+ /* 0x3C */ s16 timer;
+ /* 0x3E */ s16 unk_3E;
+} Unique0ReadWriteData; // size = 0x40
+
+typedef struct {
+ /* 0x00 */ Unique0ReadOnlyData roData;
+ /* 0x0C */ Unique0ReadWriteData rwData;
+} Unique0; // size = 0x4C
+
+#define UNIQUE0_FLAG_0 (1 << 0)
+#define UNIQUE0_FLAG_1 (1 << 1)
+#define UNIQUE0_FLAG_4 (1 << 4)
+
+
+/*================================
+ * Camera_Unique6() Data
+ *================================
+ */
+
+typedef struct {
+ /* 0x00 */ s16 interfaceFlags;
+} Unique6ReadOnlyData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ Unique6ReadOnlyData roData;
+} Unique6; // size = 0x4
+
+#define UNIQUE6_FLAG_0 (1 << 0)
+
+
+/*================================
+ * Camera_Unique7() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_UNIQ7(fov, interfaceFlags) \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+
+/*================================
+ * Camera_Demo1() Data
+ *================================
+ */
+
+typedef struct {
+ /* 0x00 */ s16 interfaceFlags;
+} Demo1ReadOnlyData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ VecSph unk_0C;
+ /* 0x14 */ VecSph unk_14;
+ /* 0x1C */ s16 unk_1C;
+} Demo1ReadWriteData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ Demo1ReadOnlyData roData;
+ /* 0x04 */ Demo1ReadWriteData rwData;
+} Demo1; // size = 0x24
+
+
+/*================================
+ * Camera_Demo2() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_DEMO2(fov, data08, interfaceFlags) \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 fov;
+ /* 0x04 */ f32 unk_04; // unused
+ /* 0x08 */ s16 interfaceFlags;
+} Demo2ReadOnlyData; // size = 0xC
+
+typedef struct {
+ /* 0x00 */ Vec3f initialAt;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ s16 animFrame;
+ /* 0x12 */ s16 yawDir;
+} Demo2ReadWriteData; // size = 0x14
+
+typedef struct {
+ /* 0x08 */ Demo2ReadOnlyData roData;
+ /* 0x0C */ Demo2ReadWriteData rwData;
+} Demo2; // size = 0x20
+
+
+/*================================
+ * Camera_Demo3() Data
+ *================================
+ */
+
+typedef struct {
+ /* 0x00 */ s16 interfaceFlags;
+} Demo3ReadOnlyData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ s16 unk_04;
+ /* 0x06 */ s16 timer;
+} Demo3ReadWriteData; // size = 0x8
+
+typedef struct {
+ /* 0x00 */ Demo3ReadOnlyData roData;
+ /* 0x04 */ Demo3ReadWriteData rwData;
+} Demo3; // size = 0xC
+
+
+/*================================
+ * Camera_Demo4() Data
+ *================================
+ */
+
+typedef struct {
+ /* 0x00 */ s16 interfaceFlags;
+} Demo4ReadOnlyData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ VecSph unk_18; // sp18-1C-20--24-26-28 // CutsceneCameraPoint?
+ /* 0x20 */ s16 unk_20;
+ /* 0x22 */ s16 timer;
+} Demo4ReadWriteData; // size = 0x24
+
+typedef struct {
+ /* 0x00 */ Demo4ReadOnlyData roData;
+ /* 0x04 */ Demo4ReadWriteData rwData;
+} Demo4; // size = 0x28
+
+
+/*================================
+ * Camera_Demo5() Data
+ *================================
+ */
+
+typedef struct {
+ /* 0x00 */ s16 interfaceFlags;
+} Demo5ReadOnlyData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ VecSph unk_1C;
+ /* 0x24 */ s16 unk_24;
+ /* 0x26 */ s16 timer;
+} Demo5ReadWriteData; // size = 0x28
+
+typedef struct {
+ /* 0x00 */ Demo5ReadOnlyData roData;
+ /* 0x04 */ Demo5ReadWriteData rwData;
+} Demo5; // size = 0x2C
+
+
+/*================================
+ * Camera_Demo0() Data
+ *================================
+ */
+
+typedef struct {
+ /* 0x00 */ s16 interfaceFlags;
+} Demo0ReadOnlyData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ VecSph subAtToEye;
+ /* 0x0C */ VecSph atToEye;
+ /* 0x14 */ s16 unk_14;
+ /* 0x16 */ s16 unk_16;
+ /* 0x18 */ s16 unk_18;
+ /* 0x1A */ s16 timer;
+} Demo0ReadWriteData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ Demo0ReadOnlyData roData;
+ /* 0x04 */ Demo0ReadWriteData rwData;
+} Demo0; // size = 0x20
+
+
+/*================================
+ * Camera_Special5() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_SPEC5(yOffset, eyeDist, minDistForRot, fov, atMaxLERPScale, timerInit, pitch, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { eyeDist, CAM_DATA_01 }, \
+ { minDistForRot, CAM_DATA_02 }, \
+ { fov, CAM_DATA_03 }, \
+ { atMaxLERPScale, CAM_DATA_FOV }, \
+ { timerInit, CAM_DATA_08 }, \
+ { pitch, CAM_DATA_12 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 yOffset;
+ /* 0x04 */ f32 eyeDist;
+ /* 0x08 */ f32 minDistForRot;
+ /* 0x0C */ f32 fovTarget;
+ /* 0x10 */ f32 atMaxLERPScale;
+ /* 0x14 */ s16 timerInit;
+ /* 0x16 */ s16 pitch;
+ /* 0x18 */ s16 interfaceFlags;
+} Special5ReadOnlyData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ s16 animTimer;
+} Special5ReadWriteData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ Special5ReadOnlyData roData;
+ /* 0x1C */ Special5ReadWriteData rwData;
+} Special5; // size = 0x20
+
+
+/*================================
+ * DOOR Data
+ *================================
+ */
+
+// For functions that deal with doors, an extra struct is added to the paramData
+
+typedef struct {
+ /* 0x00 */ Actor* doorActor;
+ /* 0x04 */ s16 bgCamIndex;
+ /* 0x06 */ union {
+ Vec3s eye; // position of the camera while exiting a spiral staircase
+ struct {
+ s16 timer1; // timer while camera is fixed in front of the door
+ s16 timer2; // timer while camera is behind the door looking at player
+ s16 timer3; // timer while camera turns around to face forward
+ };
+ };
+} DoorParams; // size = 0xC
+
+#define CAM_GET_DOOR_PARAMS(type) &((type*)camera->paramData)->doorParams
+
+
+/*================================
+ * Camera_Special8() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_SPEC8(yOffset, eyeStepScale, posStepScale, fov, spiralDoorCsLength, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { eyeStepScale, CAM_DATA_04 }, \
+ { posStepScale, CAM_DATA_05 }, \
+ { fov, CAM_DATA_FOV }, \
+ { spiralDoorCsLength, CAM_DATA_12 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 yOffset;
+ /* 0x04 */ f32 eyeStepScale;
+ /* 0x08 */ f32 posStepScale;
+ /* 0x0C */ f32 fov;
+ /* 0x10 */ s16 spiralDoorCsLength;
+ /* 0x12 */ s16 interfaceFlags;
+} Special8ReadOnlyData; // size = 0x14
+
+typedef struct {
+ /* 0x00 */ Vec3f eye;
+ /* 0x0C */ s16 spiralDoorCsFrame; // 1/5th of the length of the cutscene
+ /* 0x0E */ s16 fov;
+} Special8ReadWriteData; // size = 0x10
+
+typedef struct {
+ /* 0x00 */ Special8ReadOnlyData roData;
+ /* 0x14 */ Special8ReadWriteData rwData;
+} Special8; // size = 0x24
+
+#define SPECIAL8_FLAG_0 (1 << 0)
+#define SPECIAL8_FLAG_3 (1 << 3)
+
+
+/*================================
+ * Camera_Special9() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_SPEC9(yOffset, fov, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 yOffset;
+ /* 0x04 */ f32 fov;
+ /* 0x08 */ s16 interfaceFlags;
+} Special9ReadOnlyData; // size = 0xC
+
+typedef struct {
+ /* 0x00 */ s16 unk_00;
+} Special9ReadWriteData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ Special9ReadOnlyData roData;
+ /* 0x0C */ Special9ReadWriteData rwData;
+} Special9; // size = 0x10
+
+#define SPECIAL9_FLAG_0 (1 << 0)
+#define SPECIAL9_FLAG_1 (1 << 1)
+#define SPECIAL9_FLAG_3 (1 << 3)
+
+typedef union {
+ Normal1 norm1;
+ Normal3 norm3;
+ Normal0 norm0;
+ Parallel1 para1;
+ Jump2 jump2;
+ Jump3 jump3;
+ Battle1 batt1;
+ KeepOn1 keep1;
+ KeepOn3 keep3;
+ KeepOn4 keep4;
+ Fixed1 fixd1;
+ Fixed2 fixd2;
+ Subject1 subj1;
+ Unique2 uniq2;
+ Unique0 uniq0;
+ Unique6 uniq6;
+ Demo1 demo1;
+ Demo2 demo2;
+ Demo3 demo3;
+ Demo4 demo4;
+ Demo5 demo5;
+ Demo0 demo0;
+ Special5 spec5;
+ struct {
+ /* 0x0 */ DoorParams doorParams;
+ /* 0xC */ union {
+ Special8 spec8;
+ Special9 spec9;
+ };
+ };
+} CamParamData; // size = 0x50
+
+/*================================
+ * MAIN CAMERA STRUCT
+ *================================
+ */
typedef struct Camera {
- /* 0x000 */ u8 paramData[0x50]; // function Data, acts like a heap that's reset every time a new action function is switched to
+ /* 0x000 */ CamParamData paramData; // update function data that's reset every time a new update function is switched to
/* 0x050 */ Vec3f at;
/* 0x05C */ Vec3f eye;
/* 0x068 */ Vec3f up;
diff --git a/include/z64item.h b/include/z64item.h
index 7c6b719ca..2f17c67c7 100644
--- a/include/z64item.h
+++ b/include/z64item.h
@@ -40,7 +40,7 @@ typedef enum {
} UpgradeType;
typedef enum {
- /* 0x00 */ QUEST_REMAINS_ODOWLA,
+ /* 0x00 */ QUEST_REMAINS_ODOLWA,
/* 0x01 */ QUEST_REMAINS_GOHT,
/* 0x02 */ QUEST_REMAINS_GYORG,
/* 0x03 */ QUEST_REMAINS_TWINMOLD,
@@ -59,8 +59,12 @@ typedef enum {
/* 0x10 */ QUEST_SONG_STORMS,
/* 0x11 */ QUEST_SONG_SUN,
/* 0x12 */ QUEST_BOMBERS_NOTEBOOK, // Obtained Bombers Notebook
- /* 0x13 */ QUEST_SKULL_TOKEN,
- /* 0x18 */ QUEST_SONG_LULLABY_INTRO = 0x18,
+ /* 0x13 */ QUEST_QUIVER,
+ /* 0x14 */ QUEST_BOMB_BAG,
+ /* 0x15 */ QUEST_SKULL_TOKEN,
+ /* 0x16 */ QUEST_HEART_PIECE, // for `pauseCtx->cursorPoint[PAUSE_QUEST]`
+ /* 0x17 */ QUEST_17, // Used in a conditional for quest cursors
+ /* 0x18 */ QUEST_SONG_LULLABY_INTRO,
/* 0x19 */ QUEST_PICTOGRAPH, // A photo from the pictograph box is saved
/* 0x1C */ QUEST_HEART_PIECE_COUNT = 0x1C
} QuestItem;
diff --git a/include/z64scene.h b/include/z64scene.h
index bb82574f8..3af90e02c 100644
--- a/include/z64scene.h
+++ b/include/z64scene.h
@@ -289,7 +289,7 @@ typedef struct {
typedef struct {
struct {
s8 room; // Room to switch to
- s8 bgCamDataId; // How the camera reacts during the transition. -2 for spiral staircase. -1 for generic door. 0+ will index scene CamData
+ s8 bgCamIndex; // How the camera reacts during the transition. -2 for spiral staircase. -1 for generic door. 0+ will index scene CamData
} /* 0x0 */ sides[2]; // 0 = front, 1 = back
/* 0x4 */ s16 id;
/* 0x6 */ Vec3s pos;
diff --git a/spec b/spec
index 1d0df61d1..e955c0d31 100644
--- a/spec
+++ b/spec
@@ -451,8 +451,6 @@ beginseg
include "build/src/code/z_bg_collect.o"
include "build/src/code/z_bg_item.o"
include "build/src/code/z_camera.o"
- include "build/data/code/z_camera.data.o"
- include "build/data/code/z_camera.bss.o"
include "build/src/code/z_collision_btltbls.o"
pad_text
include "build/src/code/z_collision_check.o"
@@ -3943,8 +3941,7 @@ beginseg
name "ovl_Bg_Kin2_Picture"
compress
include "build/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.o"
- include "build/data/ovl_Bg_Kin2_Picture/ovl_Bg_Kin2_Picture.data.o"
- include "build/data/ovl_Bg_Kin2_Picture/ovl_Bg_Kin2_Picture.reloc.o"
+ include "build/src/overlays/actors/ovl_Bg_Kin2_Picture/ovl_Bg_Kin2_Picture_reloc.o"
endseg
beginseg
@@ -4136,8 +4133,7 @@ beginseg
name "ovl_Obj_Y2shutter"
compress
include "build/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.o"
- include "build/data/ovl_Obj_Y2shutter/ovl_Obj_Y2shutter.data.o"
- include "build/data/ovl_Obj_Y2shutter/ovl_Obj_Y2shutter.reloc.o"
+ include "build/src/overlays/actors/ovl_Obj_Y2shutter/ovl_Obj_Y2shutter_reloc.o"
endseg
beginseg
diff --git a/src/boot_O2_g3/idle.c b/src/boot_O2_g3/idle.c
index 942435fa7..da93f13fd 100644
--- a/src/boot_O2_g3/idle.c
+++ b/src/boot_O2_g3/idle.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
u8 D_80096B20 = 1;
diff --git a/src/code/audio/audio_effects.c b/src/code/audio/audio_effects.c
index bc27a6e22..3f50f003c 100644
--- a/src/code/audio/audio_effects.c
+++ b/src/code/audio/audio_effects.c
@@ -268,7 +268,7 @@ f32 AudioEffects_AdsrUpdate(AdsrState* adsr) {
break;
default:
- adsr->delay *= gAudioContext.audioBufferParameters.updatesPerFrameScaled;
+ adsr->delay *= gAudioCtx.audioBufferParameters.updatesPerFrameScaled;
if (adsr->delay == 0) {
adsr->delay = 1;
}
diff --git a/src/code/audio/audio_heap.c b/src/code/audio/audio_heap.c
index 8412220a3..1c05e9441 100644
--- a/src/code/audio/audio_heap.c
+++ b/src/code/audio/audio_heap.c
@@ -20,7 +20,7 @@ void AudioHeap_InitReverb(s32 reverbIndex, ReverbSettings* settings, s32 isFirst
* i.e. (256.0f * `updatesPerFrameInvScaled`) is just `updatesPerFrameInv`
*/
f32 AudioHeap_CalculateAdsrDecay(f32 scaleInv) {
- return 256.0f * gAudioContext.audioBufferParameters.updatesPerFrameInvScaled / scaleInv;
+ return 256.0f * gAudioCtx.audioBufferParameters.updatesPerFrameInvScaled / scaleInv;
}
/**
@@ -29,45 +29,45 @@ f32 AudioHeap_CalculateAdsrDecay(f32 scaleInv) {
void AudioHeap_InitAdsrDecayTable(void) {
s32 i;
- gAudioContext.adsrDecayTable[255] = AudioHeap_CalculateAdsrDecay(0.25f);
- gAudioContext.adsrDecayTable[254] = AudioHeap_CalculateAdsrDecay(0.33f);
- gAudioContext.adsrDecayTable[253] = AudioHeap_CalculateAdsrDecay(0.5f);
- gAudioContext.adsrDecayTable[252] = AudioHeap_CalculateAdsrDecay(0.66f);
- gAudioContext.adsrDecayTable[251] = AudioHeap_CalculateAdsrDecay(0.75f);
+ gAudioCtx.adsrDecayTable[255] = AudioHeap_CalculateAdsrDecay(0.25f);
+ gAudioCtx.adsrDecayTable[254] = AudioHeap_CalculateAdsrDecay(0.33f);
+ gAudioCtx.adsrDecayTable[253] = AudioHeap_CalculateAdsrDecay(0.5f);
+ gAudioCtx.adsrDecayTable[252] = AudioHeap_CalculateAdsrDecay(0.66f);
+ gAudioCtx.adsrDecayTable[251] = AudioHeap_CalculateAdsrDecay(0.75f);
for (i = 128; i < 251; i++) {
- gAudioContext.adsrDecayTable[i] = AudioHeap_CalculateAdsrDecay(251 - i);
+ gAudioCtx.adsrDecayTable[i] = AudioHeap_CalculateAdsrDecay(251 - i);
}
for (i = 16; i < 128; i++) {
- gAudioContext.adsrDecayTable[i] = AudioHeap_CalculateAdsrDecay(4 * (143 - i));
+ gAudioCtx.adsrDecayTable[i] = AudioHeap_CalculateAdsrDecay(4 * (143 - i));
}
for (i = 1; i < 16; i++) {
- gAudioContext.adsrDecayTable[i] = AudioHeap_CalculateAdsrDecay(60 * (23 - i));
+ gAudioCtx.adsrDecayTable[i] = AudioHeap_CalculateAdsrDecay(60 * (23 - i));
}
- gAudioContext.adsrDecayTable[0] = 0.0f;
+ gAudioCtx.adsrDecayTable[0] = 0.0f;
}
void AudioHeap_ResetLoadStatus(void) {
s32 i;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.fontLoadStatus); i++) {
- if (gAudioContext.fontLoadStatus[i] != LOAD_STATUS_PERMANENT) {
- gAudioContext.fontLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.fontLoadStatus); i++) {
+ if (gAudioCtx.fontLoadStatus[i] != LOAD_STATUS_PERMANENT) {
+ gAudioCtx.fontLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
}
}
- for (i = 0; i < ARRAY_COUNT(gAudioContext.sampleFontLoadStatus); i++) {
- if (gAudioContext.sampleFontLoadStatus[i] != LOAD_STATUS_PERMANENT) {
- gAudioContext.sampleFontLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.sampleFontLoadStatus); i++) {
+ if (gAudioCtx.sampleFontLoadStatus[i] != LOAD_STATUS_PERMANENT) {
+ gAudioCtx.sampleFontLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
}
}
- for (i = 0; i < ARRAY_COUNT(gAudioContext.seqLoadStatus); i++) {
- if (gAudioContext.seqLoadStatus[i] != LOAD_STATUS_PERMANENT) {
- gAudioContext.seqLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.seqLoadStatus); i++) {
+ if (gAudioCtx.seqLoadStatus[i] != LOAD_STATUS_PERMANENT) {
+ gAudioCtx.seqLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
}
}
}
@@ -75,8 +75,8 @@ void AudioHeap_ResetLoadStatus(void) {
void AudioHeap_DiscardFont(s32 fontId) {
s32 i;
- for (i = 0; i < gAudioContext.numNotes; i++) {
- Note* note = &gAudioContext.notes[i];
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ Note* note = &gAudioCtx.notes[i];
if (note->playbackState.fontId == fontId) {
if ((note->playbackState.status == PLAYBACK_STATUS_0) && (note->playbackState.priority != 0)) {
@@ -86,7 +86,7 @@ void AudioHeap_DiscardFont(s32 fontId) {
AudioPlayback_NoteDisable(note);
AudioPlayback_AudioListRemove(¬e->listItem);
- AudioSeq_AudioListPushBack(&gAudioContext.noteFreeLists.disabled, ¬e->listItem);
+ AudioSeq_AudioListPushBack(&gAudioCtx.noteFreeLists.disabled, ¬e->listItem);
}
}
}
@@ -94,14 +94,14 @@ void AudioHeap_DiscardFont(s32 fontId) {
void AudioHeap_ReleaseNotesForFont(s32 fontId) {
s32 i;
- for (i = 0; i < gAudioContext.numNotes; i++) {
- Note* note = &gAudioContext.notes[i];
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ Note* note = &gAudioCtx.notes[i];
NotePlaybackState* playbackState = ¬e->playbackState;
if (playbackState->fontId == fontId) {
if (playbackState->priority != 0) {
playbackState->priority = 1;
- playbackState->adsr.fadeOutVel = gAudioContext.audioBufferParameters.updatesPerFrameInv;
+ playbackState->adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv;
playbackState->adsr.action.s.release = true;
}
}
@@ -111,9 +111,9 @@ void AudioHeap_ReleaseNotesForFont(s32 fontId) {
void AudioHeap_DiscardSequence(s32 seqId) {
s32 i;
- for (i = 0; i < gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
- if (gAudioContext.seqPlayers[i].enabled && gAudioContext.seqPlayers[i].seqId == seqId) {
- AudioSeq_SequencePlayerDisable(&gAudioContext.seqPlayers[i]);
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ if (gAudioCtx.seqPlayers[i].enabled && gAudioCtx.seqPlayers[i].seqId == seqId) {
+ AudioSeq_SequencePlayerDisable(&gAudioCtx.seqPlayers[i]);
}
}
}
@@ -137,8 +137,8 @@ void* AudioHeap_WritebackDCache(void* addr, size_t size) {
void* AudioHeap_AllocZeroedAttemptExternal(AudioAllocPool* pool, size_t size) {
void* addr = NULL;
- if (gAudioContext.externalPool.startAddr != NULL) {
- addr = AudioHeap_AllocZeroed(&gAudioContext.externalPool, size);
+ if (gAudioCtx.externalPool.startAddr != NULL) {
+ addr = AudioHeap_AllocZeroed(&gAudioCtx.externalPool, size);
}
if (addr == NULL) {
@@ -155,8 +155,8 @@ void* AudioHeap_AllocZeroedAttemptExternal(AudioAllocPool* pool, size_t size) {
void* AudioHeap_AllocAttemptExternal(AudioAllocPool* pool, size_t size) {
void* addr = NULL;
- if (gAudioContext.externalPool.startAddr != NULL) {
- addr = AudioHeap_Alloc(&gAudioContext.externalPool, size);
+ if (gAudioCtx.externalPool.startAddr != NULL) {
+ addr = AudioHeap_Alloc(&gAudioCtx.externalPool, size);
}
if (addr == NULL) {
@@ -277,18 +277,18 @@ void AudioHeap_PopPersistentCache(s32 tableType) {
switch (tableType) {
case SEQUENCE_TABLE:
- loadedCache = &gAudioContext.seqCache;
- loadStatus = gAudioContext.seqLoadStatus;
+ loadedCache = &gAudioCtx.seqCache;
+ loadStatus = gAudioCtx.seqLoadStatus;
break;
case FONT_TABLE:
- loadedCache = &gAudioContext.fontCache;
- loadStatus = gAudioContext.fontLoadStatus;
+ loadedCache = &gAudioCtx.fontCache;
+ loadStatus = gAudioCtx.fontLoadStatus;
break;
case SAMPLE_TABLE:
- loadedCache = &gAudioContext.sampleBankCache;
- loadStatus = gAudioContext.sampleFontLoadStatus;
+ loadedCache = &gAudioCtx.sampleBankCache;
+ loadStatus = gAudioCtx.sampleFontLoadStatus;
break;
}
@@ -315,64 +315,63 @@ void AudioHeap_PopPersistentCache(s32 tableType) {
}
void AudioHeap_InitMainPool(size_t initPoolSize) {
- AudioHeap_InitPool(&gAudioContext.initPool, gAudioContext.audioHeap, initPoolSize);
- AudioHeap_InitPool(&gAudioContext.sessionPool, gAudioContext.audioHeap + initPoolSize,
- gAudioContext.audioHeapSize - initPoolSize);
+ AudioHeap_InitPool(&gAudioCtx.initPool, gAudioCtx.audioHeap, initPoolSize);
+ AudioHeap_InitPool(&gAudioCtx.sessionPool, gAudioCtx.audioHeap + initPoolSize,
+ gAudioCtx.audioHeapSize - initPoolSize);
- gAudioContext.externalPool.startAddr = NULL;
+ gAudioCtx.externalPool.startAddr = NULL;
}
void AudioHeap_InitSessionPool(AudioSessionPoolSplit* split) {
- gAudioContext.sessionPool.curAddr = gAudioContext.sessionPool.startAddr;
+ gAudioCtx.sessionPool.curAddr = gAudioCtx.sessionPool.startAddr;
- AudioHeap_InitPool(&gAudioContext.miscPool, AudioHeap_Alloc(&gAudioContext.sessionPool, split->miscPoolSize),
+ AudioHeap_InitPool(&gAudioCtx.miscPool, AudioHeap_Alloc(&gAudioCtx.sessionPool, split->miscPoolSize),
split->miscPoolSize);
- AudioHeap_InitPool(&gAudioContext.cachePool, AudioHeap_Alloc(&gAudioContext.sessionPool, split->cachePoolSize),
+ AudioHeap_InitPool(&gAudioCtx.cachePool, AudioHeap_Alloc(&gAudioCtx.sessionPool, split->cachePoolSize),
split->cachePoolSize);
}
void AudioHeap_InitCachePool(AudioCachePoolSplit* split) {
- gAudioContext.cachePool.curAddr = gAudioContext.cachePool.startAddr;
+ gAudioCtx.cachePool.curAddr = gAudioCtx.cachePool.startAddr;
- AudioHeap_InitPool(&gAudioContext.persistentCommonPool,
- AudioHeap_Alloc(&gAudioContext.cachePool, split->persistentCommonPoolSize),
+ AudioHeap_InitPool(&gAudioCtx.persistentCommonPool,
+ AudioHeap_Alloc(&gAudioCtx.cachePool, split->persistentCommonPoolSize),
split->persistentCommonPoolSize);
- AudioHeap_InitPool(&gAudioContext.temporaryCommonPool,
- AudioHeap_Alloc(&gAudioContext.cachePool, split->temporaryCommonPoolSize),
+ AudioHeap_InitPool(&gAudioCtx.temporaryCommonPool,
+ AudioHeap_Alloc(&gAudioCtx.cachePool, split->temporaryCommonPoolSize),
split->temporaryCommonPoolSize);
}
void AudioHeap_InitPersistentPoolsAndCaches(AudioCommonPoolSplit* split) {
- gAudioContext.persistentCommonPool.curAddr = gAudioContext.persistentCommonPool.startAddr;
+ gAudioCtx.persistentCommonPool.curAddr = gAudioCtx.persistentCommonPool.startAddr;
- AudioHeap_InitPool(&gAudioContext.seqCache.persistent.pool,
- AudioHeap_Alloc(&gAudioContext.persistentCommonPool, split->seqCacheSize), split->seqCacheSize);
- AudioHeap_InitPool(&gAudioContext.fontCache.persistent.pool,
- AudioHeap_Alloc(&gAudioContext.persistentCommonPool, split->fontCacheSize),
- split->fontCacheSize);
- AudioHeap_InitPool(&gAudioContext.sampleBankCache.persistent.pool,
- AudioHeap_Alloc(&gAudioContext.persistentCommonPool, split->sampleBankCacheSize),
+ AudioHeap_InitPool(&gAudioCtx.seqCache.persistent.pool,
+ AudioHeap_Alloc(&gAudioCtx.persistentCommonPool, split->seqCacheSize), split->seqCacheSize);
+ AudioHeap_InitPool(&gAudioCtx.fontCache.persistent.pool,
+ AudioHeap_Alloc(&gAudioCtx.persistentCommonPool, split->fontCacheSize), split->fontCacheSize);
+ AudioHeap_InitPool(&gAudioCtx.sampleBankCache.persistent.pool,
+ AudioHeap_Alloc(&gAudioCtx.persistentCommonPool, split->sampleBankCacheSize),
split->sampleBankCacheSize);
- AudioHeap_InitPersistentCache(&gAudioContext.seqCache.persistent);
- AudioHeap_InitPersistentCache(&gAudioContext.fontCache.persistent);
- AudioHeap_InitPersistentCache(&gAudioContext.sampleBankCache.persistent);
+ AudioHeap_InitPersistentCache(&gAudioCtx.seqCache.persistent);
+ AudioHeap_InitPersistentCache(&gAudioCtx.fontCache.persistent);
+ AudioHeap_InitPersistentCache(&gAudioCtx.sampleBankCache.persistent);
}
void AudioHeap_InitTemporaryPoolsAndCaches(AudioCommonPoolSplit* split) {
- gAudioContext.temporaryCommonPool.curAddr = gAudioContext.temporaryCommonPool.startAddr;
+ gAudioCtx.temporaryCommonPool.curAddr = gAudioCtx.temporaryCommonPool.startAddr;
- AudioHeap_InitPool(&gAudioContext.seqCache.temporary.pool,
- AudioHeap_Alloc(&gAudioContext.temporaryCommonPool, split->seqCacheSize), split->seqCacheSize);
- AudioHeap_InitPool(&gAudioContext.fontCache.temporary.pool,
- AudioHeap_Alloc(&gAudioContext.temporaryCommonPool, split->fontCacheSize), split->fontCacheSize);
- AudioHeap_InitPool(&gAudioContext.sampleBankCache.temporary.pool,
- AudioHeap_Alloc(&gAudioContext.temporaryCommonPool, split->sampleBankCacheSize),
+ AudioHeap_InitPool(&gAudioCtx.seqCache.temporary.pool,
+ AudioHeap_Alloc(&gAudioCtx.temporaryCommonPool, split->seqCacheSize), split->seqCacheSize);
+ AudioHeap_InitPool(&gAudioCtx.fontCache.temporary.pool,
+ AudioHeap_Alloc(&gAudioCtx.temporaryCommonPool, split->fontCacheSize), split->fontCacheSize);
+ AudioHeap_InitPool(&gAudioCtx.sampleBankCache.temporary.pool,
+ AudioHeap_Alloc(&gAudioCtx.temporaryCommonPool, split->sampleBankCacheSize),
split->sampleBankCacheSize);
- AudioHeap_InitTemporaryCache(&gAudioContext.seqCache.temporary);
- AudioHeap_InitTemporaryCache(&gAudioContext.fontCache.temporary);
- AudioHeap_InitTemporaryCache(&gAudioContext.sampleBankCache.temporary);
+ AudioHeap_InitTemporaryCache(&gAudioCtx.seqCache.temporary);
+ AudioHeap_InitTemporaryCache(&gAudioCtx.fontCache.temporary);
+ AudioHeap_InitTemporaryCache(&gAudioCtx.sampleBankCache.temporary);
}
void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
@@ -389,18 +388,18 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
switch (tableType) {
case SEQUENCE_TABLE:
- loadedCache = &gAudioContext.seqCache;
- loadStatus = gAudioContext.seqLoadStatus;
+ loadedCache = &gAudioCtx.seqCache;
+ loadStatus = gAudioCtx.seqLoadStatus;
break;
case FONT_TABLE:
- loadedCache = &gAudioContext.fontCache;
- loadStatus = gAudioContext.fontLoadStatus;
+ loadedCache = &gAudioCtx.fontCache;
+ loadStatus = gAudioCtx.fontLoadStatus;
break;
case SAMPLE_TABLE:
- loadedCache = &gAudioContext.sampleBankCache;
- loadStatus = gAudioContext.sampleFontLoadStatus;
+ loadedCache = &gAudioCtx.sampleBankCache;
+ loadStatus = gAudioCtx.sampleFontLoadStatus;
break;
}
@@ -419,28 +418,28 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
if (tableType == FONT_TABLE) {
if (loadStatusEntry0 == LOAD_STATUS_MAYBE_DISCARDABLE) {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[0].id) &&
- gAudioContext.notes[i].sampleState.bitField0.enabled) {
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ if ((gAudioCtx.notes[i].playbackState.fontId == temporaryCache->entries[0].id) &&
+ gAudioCtx.notes[i].sampleState.bitField0.enabled) {
break;
}
}
- if (i == gAudioContext.numNotes) {
+ if (i == gAudioCtx.numNotes) {
AudioLoad_SetFontLoadStatus(temporaryCache->entries[0].id, LOAD_STATUS_DISCARDABLE);
loadStatusEntry0 = LOAD_STATUS_DISCARDABLE;
}
}
if (loadStatusEntry1 == LOAD_STATUS_MAYBE_DISCARDABLE) {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[1].id) &&
- gAudioContext.notes[i].sampleState.bitField0.enabled) {
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ if ((gAudioCtx.notes[i].playbackState.fontId == temporaryCache->entries[1].id) &&
+ gAudioCtx.notes[i].sampleState.bitField0.enabled) {
break;
}
}
- if (i == gAudioContext.numNotes) {
+ if (i == gAudioCtx.numNotes) {
AudioLoad_SetFontLoadStatus(temporaryCache->entries[1].id, LOAD_STATUS_DISCARDABLE);
loadStatusEntry1 = LOAD_STATUS_DISCARDABLE;
}
@@ -461,54 +460,54 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
// Check if there is a side which isn't in active use, if so, evict that one.
if (tableType == SEQUENCE_TABLE) {
if (loadStatusEntry0 == LOAD_STATUS_COMPLETE) {
- for (i = 0; i < gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
- if (gAudioContext.seqPlayers[i].enabled &&
- gAudioContext.seqPlayers[i].seqId == temporaryCache->entries[0].id) {
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ if (gAudioCtx.seqPlayers[i].enabled &&
+ gAudioCtx.seqPlayers[i].seqId == temporaryCache->entries[0].id) {
break;
}
}
- if (i == gAudioContext.audioBufferParameters.numSequencePlayers) {
+ if (i == gAudioCtx.audioBufferParameters.numSequencePlayers) {
temporaryCache->nextSide = 0;
goto done;
}
}
if (loadStatusEntry1 == LOAD_STATUS_COMPLETE) {
- for (i = 0; i < gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
- if (gAudioContext.seqPlayers[i].enabled &&
- gAudioContext.seqPlayers[i].seqId == temporaryCache->entries[1].id) {
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ if (gAudioCtx.seqPlayers[i].enabled &&
+ gAudioCtx.seqPlayers[i].seqId == temporaryCache->entries[1].id) {
break;
}
}
- if (i == gAudioContext.audioBufferParameters.numSequencePlayers) {
+ if (i == gAudioCtx.audioBufferParameters.numSequencePlayers) {
temporaryCache->nextSide = 1;
goto done;
}
}
} else if (tableType == FONT_TABLE) {
if (loadStatusEntry0 == LOAD_STATUS_COMPLETE) {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[0].id) &&
- gAudioContext.notes[i].sampleState.bitField0.enabled) {
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ if ((gAudioCtx.notes[i].playbackState.fontId == temporaryCache->entries[0].id) &&
+ gAudioCtx.notes[i].sampleState.bitField0.enabled) {
break;
}
}
- if (i == gAudioContext.numNotes) {
+ if (i == gAudioCtx.numNotes) {
temporaryCache->nextSide = 0;
goto done;
}
}
if (loadStatusEntry1 == LOAD_STATUS_COMPLETE) {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[1].id) &&
- gAudioContext.notes[i].sampleState.bitField0.enabled) {
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ if ((gAudioCtx.notes[i].playbackState.fontId == temporaryCache->entries[1].id) &&
+ gAudioCtx.notes[i].sampleState.bitField0.enabled) {
break;
}
}
- if (i == gAudioContext.numNotes) {
+ if (i == gAudioCtx.numNotes) {
temporaryCache->nextSide = 1;
goto done;
}
@@ -667,15 +666,15 @@ void* AudioHeap_SearchRegularCaches(s32 tableType, s32 cache, s32 id) {
switch (tableType) {
case SEQUENCE_TABLE:
- loadedCache = &gAudioContext.seqCache;
+ loadedCache = &gAudioCtx.seqCache;
break;
case FONT_TABLE:
- loadedCache = &gAudioContext.fontCache;
+ loadedCache = &gAudioCtx.fontCache;
break;
case SAMPLE_TABLE:
- loadedCache = &gAudioContext.sampleBankCache;
+ loadedCache = &gAudioCtx.sampleBankCache;
break;
}
@@ -817,15 +816,15 @@ void AudioHeap_UpdateReverbs(void) {
s32 reverbIndex;
s32 j;
- if (gAudioContext.audioBufferParameters.specUnk4 == 2) {
+ if (gAudioCtx.audioBufferParameters.specUnk4 == 2) {
count = 2;
} else {
count = 1;
}
- for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
+ for (reverbIndex = 0; reverbIndex < gAudioCtx.numSynthesisReverbs; reverbIndex++) {
for (j = 0; j < count; j++) {
- AudioHeap_UpdateReverb(&gAudioContext.synthesisReverbs[reverbIndex]);
+ AudioHeap_UpdateReverb(&gAudioCtx.synthesisReverbs[reverbIndex]);
}
}
}
@@ -834,13 +833,13 @@ void AudioHeap_UpdateReverbs(void) {
* Clear the Audio Interface Buffers
*/
void AudioHeap_ClearAiBuffers(void) {
- s32 curAiBufferIndex = gAudioContext.curAiBufferIndex;
+ s32 curAiBufferIndex = gAudioCtx.curAiBufferIndex;
s32 i;
- gAudioContext.aiBufNumSamples[curAiBufferIndex] = gAudioContext.audioBufferParameters.numSamplesPerFrameMin;
+ gAudioCtx.aiBufNumSamples[curAiBufferIndex] = gAudioCtx.audioBufferParameters.numSamplesPerFrameMin;
for (i = 0; i < AIBUF_LEN; i++) {
- gAudioContext.aiBuffers[curAiBufferIndex][i] = 0;
+ gAudioCtx.aiBuffers[curAiBufferIndex][i] = 0;
}
}
@@ -849,55 +848,55 @@ s32 AudioHeap_ResetStep(void) {
s32 j;
s32 count;
- if (gAudioContext.audioBufferParameters.specUnk4 == 2) {
+ if (gAudioCtx.audioBufferParameters.specUnk4 == 2) {
count = 2;
} else {
count = 1;
}
- switch (gAudioContext.resetStatus) {
+ switch (gAudioCtx.resetStatus) {
case 5:
- for (i = 0; i < gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
- AudioSeq_SequencePlayerDisableAsFinished(&gAudioContext.seqPlayers[i]);
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ AudioSeq_SequencePlayerDisableAsFinished(&gAudioCtx.seqPlayers[i]);
}
- gAudioContext.audioResetFadeOutFramesLeft = 2 / count;
- gAudioContext.resetStatus--;
+ gAudioCtx.audioResetFadeOutFramesLeft = 2 / count;
+ gAudioCtx.resetStatus--;
break;
case 4:
- if (gAudioContext.audioResetFadeOutFramesLeft != 0) {
- gAudioContext.audioResetFadeOutFramesLeft--;
+ if (gAudioCtx.audioResetFadeOutFramesLeft != 0) {
+ gAudioCtx.audioResetFadeOutFramesLeft--;
AudioHeap_UpdateReverbs();
} else {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- if (gAudioContext.notes[i].sampleState.bitField0.enabled &&
- gAudioContext.notes[i].playbackState.adsr.action.s.state != ADSR_STATE_DISABLED) {
- gAudioContext.notes[i].playbackState.adsr.fadeOutVel =
- gAudioContext.audioBufferParameters.updatesPerFrameInv;
- gAudioContext.notes[i].playbackState.adsr.action.s.release = true;
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ if (gAudioCtx.notes[i].sampleState.bitField0.enabled &&
+ gAudioCtx.notes[i].playbackState.adsr.action.s.state != ADSR_STATE_DISABLED) {
+ gAudioCtx.notes[i].playbackState.adsr.fadeOutVel =
+ gAudioCtx.audioBufferParameters.updatesPerFrameInv;
+ gAudioCtx.notes[i].playbackState.adsr.action.s.release = true;
}
}
- gAudioContext.audioResetFadeOutFramesLeft = 8 / count;
- gAudioContext.resetStatus--;
+ gAudioCtx.audioResetFadeOutFramesLeft = 8 / count;
+ gAudioCtx.resetStatus--;
}
break;
case 3:
- if (gAudioContext.audioResetFadeOutFramesLeft != 0) {
- gAudioContext.audioResetFadeOutFramesLeft--;
+ if (gAudioCtx.audioResetFadeOutFramesLeft != 0) {
+ gAudioCtx.audioResetFadeOutFramesLeft--;
AudioHeap_UpdateReverbs();
} else {
- gAudioContext.audioResetFadeOutFramesLeft = 2 / count;
- gAudioContext.resetStatus--;
+ gAudioCtx.audioResetFadeOutFramesLeft = 2 / count;
+ gAudioCtx.resetStatus--;
}
break;
case 2:
AudioHeap_ClearAiBuffers();
- if (gAudioContext.audioResetFadeOutFramesLeft != 0) {
- gAudioContext.audioResetFadeOutFramesLeft--;
+ if (gAudioCtx.audioResetFadeOutFramesLeft != 0) {
+ gAudioCtx.audioResetFadeOutFramesLeft--;
} else {
- gAudioContext.resetStatus--;
+ gAudioCtx.resetStatus--;
AudioHeap_DiscardSampleCaches();
AudioHeap_DiscardSampleBanks();
}
@@ -905,17 +904,17 @@ s32 AudioHeap_ResetStep(void) {
case 1:
AudioHeap_Init();
- gAudioContext.resetStatus = 0;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.aiBufNumSamples); i++) {
- gAudioContext.aiBufNumSamples[i] = gAudioContext.audioBufferParameters.numSamplesPerFrameMax;
+ gAudioCtx.resetStatus = 0;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.aiBufNumSamples); i++) {
+ gAudioCtx.aiBufNumSamples[i] = gAudioCtx.audioBufferParameters.numSamplesPerFrameMax;
for (j = 0; j < AIBUF_LEN; j++) {
- gAudioContext.aiBuffers[i][j] = 0;
+ gAudioCtx.aiBuffers[i][j] = 0;
}
}
break;
}
- if (gAudioContext.resetStatus < 3) {
+ if (gAudioCtx.resetStatus < 3) {
return false;
}
@@ -933,72 +932,67 @@ void AudioHeap_Init(void) {
s32 reverbIndex;
s32 i;
s32 pad2;
- AudioSpec* spec = &gAudioSpecs[gAudioContext.audioResetSpecIdToLoad]; // Audio Specifications
+ AudioSpec* spec = &gAudioSpecs[gAudioCtx.audioResetSpecIdToLoad]; // Audio Specifications
- gAudioContext.sampleDmaCount = 0;
+ gAudioCtx.sampleDmaCount = 0;
// audio buffer parameters
- gAudioContext.audioBufferParameters.samplingFreq = spec->samplingFreq;
- gAudioContext.audioBufferParameters.aiSamplingFreq =
- osAiSetFrequency(gAudioContext.audioBufferParameters.samplingFreq);
+ gAudioCtx.audioBufferParameters.samplingFreq = spec->samplingFreq;
+ gAudioCtx.audioBufferParameters.aiSamplingFreq = osAiSetFrequency(gAudioCtx.audioBufferParameters.samplingFreq);
- gAudioContext.audioBufferParameters.numSamplesPerFrameTarget =
- ALIGN16(gAudioContext.audioBufferParameters.samplingFreq / gAudioContext.refreshRate);
- gAudioContext.audioBufferParameters.numSamplesPerFrameMin =
- gAudioContext.audioBufferParameters.numSamplesPerFrameTarget - 0x10;
- gAudioContext.audioBufferParameters.numSamplesPerFrameMax =
- gAudioContext.audioBufferParameters.numSamplesPerFrameTarget + 0x10;
- gAudioContext.audioBufferParameters.updatesPerFrame =
- ((gAudioContext.audioBufferParameters.numSamplesPerFrameTarget + 0x10) / 0xD0) + 1;
- gAudioContext.audioBufferParameters.numSamplesPerUpdate =
- (gAudioContext.audioBufferParameters.numSamplesPerFrameTarget /
- gAudioContext.audioBufferParameters.updatesPerFrame) &
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget =
+ ALIGN16(gAudioCtx.audioBufferParameters.samplingFreq / gAudioCtx.refreshRate);
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameMin =
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget - 0x10;
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameMax =
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget + 0x10;
+ gAudioCtx.audioBufferParameters.updatesPerFrame =
+ ((gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget + 0x10) / 0xD0) + 1;
+ gAudioCtx.audioBufferParameters.numSamplesPerUpdate =
+ (gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget / gAudioCtx.audioBufferParameters.updatesPerFrame) &
~7;
- gAudioContext.audioBufferParameters.numSamplesPerUpdateMax =
- gAudioContext.audioBufferParameters.numSamplesPerUpdate + 8;
- gAudioContext.audioBufferParameters.numSamplesPerUpdateMin =
- gAudioContext.audioBufferParameters.numSamplesPerUpdate - 8;
- gAudioContext.audioBufferParameters.resampleRate = 32000.0f / (s32)gAudioContext.audioBufferParameters.samplingFreq;
- gAudioContext.audioBufferParameters.updatesPerFrameInvScaled =
- (1.0f / 256.0f) / gAudioContext.audioBufferParameters.updatesPerFrame;
- gAudioContext.audioBufferParameters.updatesPerFrameScaled =
- gAudioContext.audioBufferParameters.updatesPerFrame / 4.0f;
- gAudioContext.audioBufferParameters.updatesPerFrameInv = 1.0f / gAudioContext.audioBufferParameters.updatesPerFrame;
+ gAudioCtx.audioBufferParameters.numSamplesPerUpdateMax = gAudioCtx.audioBufferParameters.numSamplesPerUpdate + 8;
+ gAudioCtx.audioBufferParameters.numSamplesPerUpdateMin = gAudioCtx.audioBufferParameters.numSamplesPerUpdate - 8;
+ gAudioCtx.audioBufferParameters.resampleRate = 32000.0f / (s32)gAudioCtx.audioBufferParameters.samplingFreq;
+ gAudioCtx.audioBufferParameters.updatesPerFrameInvScaled =
+ (1.0f / 256.0f) / gAudioCtx.audioBufferParameters.updatesPerFrame;
+ gAudioCtx.audioBufferParameters.updatesPerFrameScaled = gAudioCtx.audioBufferParameters.updatesPerFrame / 4.0f;
+ gAudioCtx.audioBufferParameters.updatesPerFrameInv = 1.0f / gAudioCtx.audioBufferParameters.updatesPerFrame;
// sample dma size
- gAudioContext.sampleDmaBufSize1 = spec->sampleDmaBufSize1;
- gAudioContext.sampleDmaBufSize2 = spec->sampleDmaBufSize2;
+ gAudioCtx.sampleDmaBufSize1 = spec->sampleDmaBufSize1;
+ gAudioCtx.sampleDmaBufSize2 = spec->sampleDmaBufSize2;
- gAudioContext.numNotes = spec->numNotes;
- gAudioContext.audioBufferParameters.numSequencePlayers = spec->numSequencePlayers;
+ gAudioCtx.numNotes = spec->numNotes;
+ gAudioCtx.audioBufferParameters.numSequencePlayers = spec->numSequencePlayers;
- if (gAudioContext.audioBufferParameters.numSequencePlayers > 5) {
- gAudioContext.audioBufferParameters.numSequencePlayers = 5;
+ if (gAudioCtx.audioBufferParameters.numSequencePlayers > 5) {
+ gAudioCtx.audioBufferParameters.numSequencePlayers = 5;
}
- gAudioContext.unk_29BC = 8;
- gAudioContext.unk_2 = spec->unk_14;
- gAudioContext.tempoInternalToExternal = (u32)(gAudioContext.audioBufferParameters.updatesPerFrame * 2880000.0f /
- gTatumsPerBeat / gAudioContext.unk_2960);
+ gAudioCtx.unk_29BC = 8;
+ gAudioCtx.unk_2 = spec->unk_14;
+ gAudioCtx.tempoInternalToExternal =
+ (u32)(gAudioCtx.audioBufferParameters.updatesPerFrame * 2880000.0f / gTatumsPerBeat / gAudioCtx.unk_2960);
- gAudioContext.unk_2870 = gAudioContext.refreshRate;
- gAudioContext.unk_2870 *= gAudioContext.audioBufferParameters.updatesPerFrame;
- gAudioContext.unk_2870 /= gAudioContext.audioBufferParameters.aiSamplingFreq;
- gAudioContext.unk_2870 /= gAudioContext.tempoInternalToExternal;
+ gAudioCtx.unk_2870 = gAudioCtx.refreshRate;
+ gAudioCtx.unk_2870 *= gAudioCtx.audioBufferParameters.updatesPerFrame;
+ gAudioCtx.unk_2870 /= gAudioCtx.audioBufferParameters.aiSamplingFreq;
+ gAudioCtx.unk_2870 /= gAudioCtx.tempoInternalToExternal;
- gAudioContext.audioBufferParameters.specUnk4 = spec->unk_04;
- gAudioContext.audioBufferParameters.numSamplesPerFrameTarget *= gAudioContext.audioBufferParameters.specUnk4;
- gAudioContext.audioBufferParameters.numSamplesPerFrameMax *= gAudioContext.audioBufferParameters.specUnk4;
- gAudioContext.audioBufferParameters.numSamplesPerFrameMin *= gAudioContext.audioBufferParameters.specUnk4;
- gAudioContext.audioBufferParameters.updatesPerFrame *= gAudioContext.audioBufferParameters.specUnk4;
+ gAudioCtx.audioBufferParameters.specUnk4 = spec->unk_04;
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget *= gAudioCtx.audioBufferParameters.specUnk4;
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameMax *= gAudioCtx.audioBufferParameters.specUnk4;
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameMin *= gAudioCtx.audioBufferParameters.specUnk4;
+ gAudioCtx.audioBufferParameters.updatesPerFrame *= gAudioCtx.audioBufferParameters.specUnk4;
- if (gAudioContext.audioBufferParameters.specUnk4 >= 2) {
- gAudioContext.audioBufferParameters.numSamplesPerFrameMax -= 0x10;
+ if (gAudioCtx.audioBufferParameters.specUnk4 >= 2) {
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameMax -= 0x10;
}
// Determine the maximum allowable number of audio command list entries for the rsp microcode
- gAudioContext.maxAudioCmds =
- gAudioContext.numNotes * 20 * gAudioContext.audioBufferParameters.updatesPerFrame + spec->numReverbs * 30 + 800;
+ gAudioCtx.maxAudioCmds =
+ gAudioCtx.numNotes * 20 * gAudioCtx.audioBufferParameters.updatesPerFrame + spec->numReverbs * 30 + 800;
// Calculate sizes for various caches on the audio heap
persistentSize =
@@ -1006,81 +1000,81 @@ void AudioHeap_Init(void) {
temporarySize =
spec->temporarySeqCacheSize + spec->temporaryFontCacheSize + spec->temporarySampleBankCacheSize + 0x10;
cachePoolSize = persistentSize + temporarySize;
- miscPoolSize = gAudioContext.sessionPool.size - cachePoolSize - 0x100;
+ miscPoolSize = gAudioCtx.sessionPool.size - cachePoolSize - 0x100;
- if (gAudioContext.externalPool.startAddr != NULL) {
- gAudioContext.externalPool.curAddr = gAudioContext.externalPool.startAddr;
+ if (gAudioCtx.externalPool.startAddr != NULL) {
+ gAudioCtx.externalPool.curAddr = gAudioCtx.externalPool.startAddr;
}
// Session Pool Split (split into Cache and Misc heaps)
- gAudioContext.sessionPoolSplit.miscPoolSize = miscPoolSize;
- gAudioContext.sessionPoolSplit.cachePoolSize = cachePoolSize;
- AudioHeap_InitSessionPool(&gAudioContext.sessionPoolSplit);
+ gAudioCtx.sessionPoolSplit.miscPoolSize = miscPoolSize;
+ gAudioCtx.sessionPoolSplit.cachePoolSize = cachePoolSize;
+ AudioHeap_InitSessionPool(&gAudioCtx.sessionPoolSplit);
// Cache Pool Split (Split into Persistent and Temporary heaps)
- gAudioContext.cachePoolSplit.persistentCommonPoolSize = persistentSize;
- gAudioContext.cachePoolSplit.temporaryCommonPoolSize = temporarySize;
- AudioHeap_InitCachePool(&gAudioContext.cachePoolSplit);
+ gAudioCtx.cachePoolSplit.persistentCommonPoolSize = persistentSize;
+ gAudioCtx.cachePoolSplit.temporaryCommonPoolSize = temporarySize;
+ AudioHeap_InitCachePool(&gAudioCtx.cachePoolSplit);
// Persistent Pool Split (Split into Sequences, SoundFonts, Samples)
- gAudioContext.persistentCommonPoolSplit.seqCacheSize = spec->persistentSeqCacheSize;
- gAudioContext.persistentCommonPoolSplit.fontCacheSize = spec->persistentFontCacheSize;
- gAudioContext.persistentCommonPoolSplit.sampleBankCacheSize = spec->persistentSampleBankCacheSize;
- AudioHeap_InitPersistentPoolsAndCaches(&gAudioContext.persistentCommonPoolSplit);
+ gAudioCtx.persistentCommonPoolSplit.seqCacheSize = spec->persistentSeqCacheSize;
+ gAudioCtx.persistentCommonPoolSplit.fontCacheSize = spec->persistentFontCacheSize;
+ gAudioCtx.persistentCommonPoolSplit.sampleBankCacheSize = spec->persistentSampleBankCacheSize;
+ AudioHeap_InitPersistentPoolsAndCaches(&gAudioCtx.persistentCommonPoolSplit);
// Temporary Pool Split (Split into Sequences, SoundFonts, Samples)
- gAudioContext.temporaryCommonPoolSplit.seqCacheSize = spec->temporarySeqCacheSize;
- gAudioContext.temporaryCommonPoolSplit.fontCacheSize = spec->temporaryFontCacheSize;
- gAudioContext.temporaryCommonPoolSplit.sampleBankCacheSize = spec->temporarySampleBankCacheSize;
- AudioHeap_InitTemporaryPoolsAndCaches(&gAudioContext.temporaryCommonPoolSplit);
+ gAudioCtx.temporaryCommonPoolSplit.seqCacheSize = spec->temporarySeqCacheSize;
+ gAudioCtx.temporaryCommonPoolSplit.fontCacheSize = spec->temporaryFontCacheSize;
+ gAudioCtx.temporaryCommonPoolSplit.sampleBankCacheSize = spec->temporarySampleBankCacheSize;
+ AudioHeap_InitTemporaryPoolsAndCaches(&gAudioCtx.temporaryCommonPoolSplit);
AudioHeap_ResetLoadStatus();
// Initialize notes
- gAudioContext.notes = AudioHeap_AllocZeroed(&gAudioContext.miscPool, gAudioContext.numNotes * sizeof(Note));
+ gAudioCtx.notes = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, gAudioCtx.numNotes * sizeof(Note));
AudioPlayback_NoteInitAll();
AudioPlayback_InitNoteFreeList();
- gAudioContext.sampleStateList =
- AudioHeap_AllocZeroed(&gAudioContext.miscPool, gAudioContext.audioBufferParameters.updatesPerFrame *
- gAudioContext.numNotes * sizeof(NoteSampleState));
+ gAudioCtx.sampleStateList =
+ AudioHeap_AllocZeroed(&gAudioCtx.miscPool, gAudioCtx.audioBufferParameters.updatesPerFrame *
+ gAudioCtx.numNotes * sizeof(NoteSampleState));
// Initialize audio binary interface command list buffer
- for (i = 0; i < ARRAY_COUNT(gAudioContext.abiCmdBufs); i++) {
- gAudioContext.abiCmdBufs[i] =
- AudioHeap_AllocDmaMemoryZeroed(&gAudioContext.miscPool, gAudioContext.maxAudioCmds * sizeof(Acmd));
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.abiCmdBufs); i++) {
+ gAudioCtx.abiCmdBufs[i] =
+ AudioHeap_AllocDmaMemoryZeroed(&gAudioCtx.miscPool, gAudioCtx.maxAudioCmds * sizeof(Acmd));
}
// Initialize the decay rate table for ADSR
- gAudioContext.adsrDecayTable = AudioHeap_Alloc(&gAudioContext.miscPool, 0x100 * sizeof(f32));
+ gAudioCtx.adsrDecayTable = AudioHeap_Alloc(&gAudioCtx.miscPool, 0x100 * sizeof(f32));
AudioHeap_InitAdsrDecayTable();
// Initialize reverbs
- for (reverbIndex = 0; reverbIndex < ARRAY_COUNT(gAudioContext.synthesisReverbs); reverbIndex++) {
- gAudioContext.synthesisReverbs[reverbIndex].useReverb = 0;
+ for (reverbIndex = 0; reverbIndex < ARRAY_COUNT(gAudioCtx.synthesisReverbs); reverbIndex++) {
+ gAudioCtx.synthesisReverbs[reverbIndex].useReverb = 0;
}
- gAudioContext.numSynthesisReverbs = spec->numReverbs;
- for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
+ gAudioCtx.numSynthesisReverbs = spec->numReverbs;
+ for (reverbIndex = 0; reverbIndex < gAudioCtx.numSynthesisReverbs; reverbIndex++) {
AudioHeap_InitReverb(reverbIndex, &spec->reverbSettings[reverbIndex], true);
}
// Initialize sequence players
AudioSeq_InitSequencePlayers();
- for (i = 0; i < gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
AudioSeq_InitSequencePlayerChannels(i);
- AudioSeq_ResetSequencePlayer(&gAudioContext.seqPlayers[i]);
+ AudioSeq_ResetSequencePlayer(&gAudioCtx.seqPlayers[i]);
}
// Initialize two additional caches on the audio heap to store individual audio samples
AudioHeap_InitSampleCaches(spec->persistentSampleCacheSize, spec->temporarySampleCacheSize);
- AudioLoad_InitSampleDmaBuffers(gAudioContext.numNotes);
+ AudioLoad_InitSampleDmaBuffers(gAudioCtx.numNotes);
// Initalize Loads
- gAudioContext.preloadSampleStackTop = 0;
+ gAudioCtx.preloadSampleStackTop = 0;
AudioLoad_InitSlowLoads();
AudioLoad_InitScriptLoads();
AudioLoad_InitAsyncLoads();
- gAudioContext.unk_4 = 0x1000;
+ gAudioCtx.unk_4 = 0x1000;
AudioLoad_LoadPermanentSamples();
intMask = osSetIntMask(1);
@@ -1091,9 +1085,9 @@ void AudioHeap_Init(void) {
void* AudioHeap_SearchPermanentCache(s32 tableType, s32 id) {
s32 i;
- for (i = 0; i < gAudioContext.permanentPool.count; i++) {
- if (gAudioContext.permanentEntries[i].tableType == tableType && gAudioContext.permanentEntries[i].id == id) {
- return gAudioContext.permanentEntries[i].addr;
+ for (i = 0; i < gAudioCtx.permanentPool.count; i++) {
+ if (gAudioCtx.permanentEntries[i].tableType == tableType && gAudioCtx.permanentEntries[i].id == id) {
+ return gAudioCtx.permanentEntries[i].addr;
}
}
return NULL;
@@ -1101,18 +1095,18 @@ void* AudioHeap_SearchPermanentCache(s32 tableType, s32 id) {
void* AudioHeap_AllocPermanent(s32 tableType, s32 id, size_t size) {
void* addr;
- s32 index = gAudioContext.permanentPool.count;
+ s32 index = gAudioCtx.permanentPool.count;
- addr = AudioHeap_Alloc(&gAudioContext.permanentPool, size);
- gAudioContext.permanentEntries[index].addr = addr;
+ addr = AudioHeap_Alloc(&gAudioCtx.permanentPool, size);
+ gAudioCtx.permanentEntries[index].addr = addr;
if (addr == NULL) {
return NULL;
}
- gAudioContext.permanentEntries[index].tableType = tableType;
- gAudioContext.permanentEntries[index].id = id;
- gAudioContext.permanentEntries[index].size = size;
+ gAudioCtx.permanentEntries[index].tableType = tableType;
+ gAudioCtx.permanentEntries[index].id = id;
+ gAudioCtx.permanentEntries[index].size = size;
//! @bug UB: missing return. "addr" is in v0 at this point, but doing an
// explicit return uses an additional register.
// return addr;
@@ -1143,22 +1137,22 @@ void* AudioHeap_AllocSampleCache(size_t size, s32 sampleBankId, void* sampleAddr
void AudioHeap_InitSampleCaches(size_t persistentSampleCacheSize, size_t temporarySampleCacheSize) {
void* addr;
- addr = AudioHeap_AllocAttemptExternal(&gAudioContext.miscPool, persistentSampleCacheSize);
+ addr = AudioHeap_AllocAttemptExternal(&gAudioCtx.miscPool, persistentSampleCacheSize);
if (addr == NULL) {
- gAudioContext.persistentSampleCache.pool.size = 0;
+ gAudioCtx.persistentSampleCache.pool.size = 0;
} else {
- AudioHeap_InitPool(&gAudioContext.persistentSampleCache.pool, addr, persistentSampleCacheSize);
+ AudioHeap_InitPool(&gAudioCtx.persistentSampleCache.pool, addr, persistentSampleCacheSize);
}
- addr = AudioHeap_AllocAttemptExternal(&gAudioContext.miscPool, temporarySampleCacheSize);
+ addr = AudioHeap_AllocAttemptExternal(&gAudioCtx.miscPool, temporarySampleCacheSize);
if (addr == NULL) {
- gAudioContext.temporarySampleCache.pool.size = 0;
+ gAudioCtx.temporarySampleCache.pool.size = 0;
} else {
- AudioHeap_InitPool(&gAudioContext.temporarySampleCache.pool, addr, temporarySampleCacheSize);
+ AudioHeap_InitPool(&gAudioCtx.temporarySampleCache.pool, addr, temporarySampleCacheSize);
}
- gAudioContext.persistentSampleCache.numEntries = 0;
- gAudioContext.temporarySampleCache.numEntries = 0;
+ gAudioCtx.persistentSampleCache.numEntries = 0;
+ gAudioCtx.temporarySampleCache.numEntries = 0;
}
SampleCacheEntry* AudioHeap_AllocTemporarySampleCacheEntry(size_t size) {
@@ -1176,7 +1170,7 @@ SampleCacheEntry* AudioHeap_AllocTemporarySampleCacheEntry(size_t size) {
u8* startAddr;
u8* endAddr;
- cache = &gAudioContext.temporarySampleCache;
+ cache = &gAudioCtx.temporarySampleCache;
allocBefore = cache->pool.curAddr;
addr = AudioHeap_Alloc(&cache->pool, size);
if (addr == NULL) {
@@ -1197,8 +1191,8 @@ SampleCacheEntry* AudioHeap_AllocTemporarySampleCacheEntry(size_t size) {
allocAfter = cache->pool.curAddr;
index = -1;
- for (i = 0; i < gAudioContext.preloadSampleStackTop; i++) {
- preload = &gAudioContext.preloadSampleStack[i];
+ for (i = 0; i < gAudioCtx.preloadSampleStackTop; i++) {
+ preload = &gAudioCtx.preloadSampleStack[i];
if (preload->isFree == false) {
startAddr = preload->ramAddr;
endAddr = preload->ramAddr + preload->sample->size - 1;
@@ -1270,7 +1264,7 @@ void AudioHeap_UnapplySampleCacheForFont(SampleCacheEntry* entry, s32 fontId) {
s32 drumId;
s32 sfxId;
- for (instId = 0; instId < gAudioContext.soundFontList[fontId].numInstruments; instId++) {
+ for (instId = 0; instId < gAudioCtx.soundFontList[fontId].numInstruments; instId++) {
inst = AudioPlayback_GetInstrumentInner(fontId, instId);
if (inst != NULL) {
if (inst->normalRangeLo != 0) {
@@ -1283,14 +1277,14 @@ void AudioHeap_UnapplySampleCacheForFont(SampleCacheEntry* entry, s32 fontId) {
}
}
- for (drumId = 0; drumId < gAudioContext.soundFontList[fontId].numDrums; drumId++) {
+ for (drumId = 0; drumId < gAudioCtx.soundFontList[fontId].numDrums; drumId++) {
drum = AudioPlayback_GetDrum(fontId, drumId);
if (drum != NULL) {
AudioHeap_UnapplySampleCache(entry, drum->tunedSample.sample);
}
}
- for (sfxId = 0; sfxId < gAudioContext.soundFontList[fontId].numSfx; sfxId++) {
+ for (sfxId = 0; sfxId < gAudioCtx.soundFontList[fontId].numSfx; sfxId++) {
soundEffect = AudioPlayback_GetSoundEffect(fontId, sfxId);
if (soundEffect != NULL) {
AudioHeap_UnapplySampleCache(entry, soundEffect->tunedSample.sample);
@@ -1304,10 +1298,10 @@ void AudioHeap_DiscardSampleCacheEntry(SampleCacheEntry* entry) {
s32 sampleBankId2;
s32 fontId;
- numFonts = gAudioContext.soundFontTable->numEntries;
+ numFonts = gAudioCtx.soundFontTable->numEntries;
for (fontId = 0; fontId < numFonts; fontId++) {
- sampleBankId1 = gAudioContext.soundFontList[fontId].sampleBankId1;
- sampleBankId2 = gAudioContext.soundFontList[fontId].sampleBankId2;
+ sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
+ sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
if (((sampleBankId1 != 0xFF) && (entry->sampleBankId == sampleBankId1)) ||
((sampleBankId2 != 0xFF) && (entry->sampleBankId == sampleBankId2)) || entry->sampleBankId == 0 ||
entry->sampleBankId == 0xFE) {
@@ -1335,7 +1329,7 @@ SampleCacheEntry* AudioHeap_AllocPersistentSampleCacheEntry(size_t size) {
SampleCacheEntry* entry;
void* addr;
- cache = &gAudioContext.persistentSampleCache;
+ cache = &gAudioCtx.persistentSampleCache;
addr = AudioHeap_Alloc(&cache->pool, size);
if (addr == NULL) {
return NULL;
@@ -1368,10 +1362,10 @@ void AudioHeap_DiscardSampleCaches(void) {
s32 fontId;
s32 j;
- numFonts = gAudioContext.soundFontTable->numEntries;
+ numFonts = gAudioCtx.soundFontTable->numEntries;
for (fontId = 0; fontId < numFonts; fontId++) {
- sampleBankId1 = gAudioContext.soundFontList[fontId].sampleBankId1;
- sampleBankId2 = gAudioContext.soundFontList[fontId].sampleBankId2;
+ sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
+ sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
if ((sampleBankId1 == 0xFF) && (sampleBankId2 == 0xFF)) {
continue;
}
@@ -1380,12 +1374,12 @@ void AudioHeap_DiscardSampleCaches(void) {
continue;
}
- for (j = 0; j < gAudioContext.persistentSampleCache.numEntries; j++) {
- AudioHeap_DiscardSampleCacheForFont(&gAudioContext.persistentSampleCache.entries[j], sampleBankId1,
+ for (j = 0; j < gAudioCtx.persistentSampleCache.numEntries; j++) {
+ AudioHeap_DiscardSampleCacheForFont(&gAudioCtx.persistentSampleCache.entries[j], sampleBankId1,
sampleBankId2, fontId);
}
- for (j = 0; j < gAudioContext.temporarySampleCache.numEntries; j++) {
- AudioHeap_DiscardSampleCacheForFont(&gAudioContext.temporarySampleCache.entries[j], sampleBankId1,
+ for (j = 0; j < gAudioCtx.temporarySampleCache.numEntries; j++) {
+ AudioHeap_DiscardSampleCacheForFont(&gAudioCtx.temporarySampleCache.entries[j], sampleBankId1,
sampleBankId2, fontId);
}
}
@@ -1442,8 +1436,8 @@ void AudioHeap_ApplySampleBankCacheInternal(s32 apply, s32 sampleBankId) {
uintptr_t* newAddr;
s32 pad[4];
- sampleBankTable = gAudioContext.sampleBankTable;
- numFonts = gAudioContext.soundFontTable->numEntries;
+ sampleBankTable = gAudioCtx.sampleBankTable;
+ numFonts = gAudioCtx.soundFontTable->numEntries;
change.oldAddr = AudioHeap_SearchCaches(SAMPLE_TABLE, CACHE_EITHER, sampleBankId);
if (change.oldAddr == 0) {
return;
@@ -1465,8 +1459,8 @@ void AudioHeap_ApplySampleBankCacheInternal(s32 apply, s32 sampleBankId) {
}
for (fontId = 0; fontId < numFonts; fontId++) {
- sampleBankId1 = gAudioContext.soundFontList[fontId].sampleBankId1;
- sampleBankId2 = gAudioContext.soundFontList[fontId].sampleBankId2;
+ sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
+ sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
if ((sampleBankId1 != 0xFF) || (sampleBankId2 != 0xFF)) {
if (!AudioLoad_IsFontLoadComplete(fontId) ||
AudioHeap_SearchCaches(FONT_TABLE, CACHE_EITHER, fontId) == NULL) {
@@ -1479,7 +1473,7 @@ void AudioHeap_ApplySampleBankCacheInternal(s32 apply, s32 sampleBankId) {
continue;
}
- for (instId = 0; instId < gAudioContext.soundFontList[fontId].numInstruments; instId++) {
+ for (instId = 0; instId < gAudioCtx.soundFontList[fontId].numInstruments; instId++) {
inst = AudioPlayback_GetInstrumentInner(fontId, instId);
if (inst != NULL) {
if (inst->normalRangeLo != 0) {
@@ -1492,14 +1486,14 @@ void AudioHeap_ApplySampleBankCacheInternal(s32 apply, s32 sampleBankId) {
}
}
- for (drumId = 0; drumId < gAudioContext.soundFontList[fontId].numDrums; drumId++) {
+ for (drumId = 0; drumId < gAudioCtx.soundFontList[fontId].numDrums; drumId++) {
drum = AudioPlayback_GetDrum(fontId, drumId);
if (drum != NULL) {
AudioHeap_ChangeStorage(&change, drum->tunedSample.sample);
}
}
- for (sfxId = 0; sfxId < gAudioContext.soundFontList[fontId].numSfx; sfxId++) {
+ for (sfxId = 0; sfxId < gAudioCtx.soundFontList[fontId].numSfx; sfxId++) {
soundEffect = AudioPlayback_GetSoundEffect(fontId, sfxId);
if (soundEffect != NULL) {
AudioHeap_ChangeStorage(&change, soundEffect->tunedSample.sample);
@@ -1515,7 +1509,7 @@ void AudioHeap_DiscardSampleBanks(void) {
AudioTemporaryCache* temporary;
u32 i;
- cache = &gAudioContext.sampleBankCache;
+ cache = &gAudioCtx.sampleBankCache;
temporary = &cache->temporary;
if (temporary->entries[0].id != -1) {
@@ -1534,7 +1528,7 @@ void AudioHeap_DiscardSampleBanks(void) {
void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirstInit) {
s32 delayNumSamples;
- SynthesisReverb* reverb = &gAudioContext.synthesisReverbs[reverbIndex];
+ SynthesisReverb* reverb = &gAudioCtx.synthesisReverbs[reverbIndex];
switch (dataType) {
case REVERB_DATA_TYPE_SETTINGS:
@@ -1568,14 +1562,10 @@ void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirs
if ((reverb->downsampleRate != 1) || reverb->resampleEffectOn) {
reverb->downsamplePitch = 0x8000 / reverb->downsampleRate;
if (reverb->leftLoadResampleBuf == NULL) {
- reverb->leftLoadResampleBuf =
- AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(RESAMPLE_STATE));
- reverb->rightLoadResampleBuf =
- AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(RESAMPLE_STATE));
- reverb->leftSaveResampleBuf =
- AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(RESAMPLE_STATE));
- reverb->rightSaveResampleBuf =
- AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(RESAMPLE_STATE));
+ reverb->leftLoadResampleBuf = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, sizeof(RESAMPLE_STATE));
+ reverb->rightLoadResampleBuf = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, sizeof(RESAMPLE_STATE));
+ reverb->leftSaveResampleBuf = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, sizeof(RESAMPLE_STATE));
+ reverb->rightSaveResampleBuf = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, sizeof(RESAMPLE_STATE));
if (reverb->rightSaveResampleBuf == NULL) {
reverb->downsampleRate = 1;
}
@@ -1584,31 +1574,31 @@ void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirs
break;
case REVERB_DATA_TYPE_DECAY:
- gAudioContext.synthesisReverbs[reverbIndex].decayRatio = data;
+ gAudioCtx.synthesisReverbs[reverbIndex].decayRatio = data;
break;
case REVERB_DATA_TYPE_SUB_VOLUME:
- gAudioContext.synthesisReverbs[reverbIndex].subVolume = data;
+ gAudioCtx.synthesisReverbs[reverbIndex].subVolume = data;
break;
case REVERB_DATA_TYPE_VOLUME:
- gAudioContext.synthesisReverbs[reverbIndex].volume = data;
+ gAudioCtx.synthesisReverbs[reverbIndex].volume = data;
break;
case REVERB_DATA_TYPE_LEAK_RIGHT:
- gAudioContext.synthesisReverbs[reverbIndex].leakRtl = data;
+ gAudioCtx.synthesisReverbs[reverbIndex].leakRtl = data;
break;
case REVERB_DATA_TYPE_LEAK_LEFT:
- gAudioContext.synthesisReverbs[reverbIndex].leakLtr = data;
+ gAudioCtx.synthesisReverbs[reverbIndex].leakLtr = data;
break;
case REVERB_DATA_TYPE_FILTER_LEFT:
if (data != 0) {
if (isFirstInit || (reverb->filterLeftInit == NULL)) {
- reverb->filterLeftState = AudioHeap_AllocDmaMemoryZeroed(&gAudioContext.miscPool,
- 2 * (FILTER_BUF_PART1 + FILTER_BUF_PART2));
- reverb->filterLeftInit = AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, FILTER_SIZE);
+ reverb->filterLeftState =
+ AudioHeap_AllocDmaMemoryZeroed(&gAudioCtx.miscPool, 2 * (FILTER_BUF_PART1 + FILTER_BUF_PART2));
+ reverb->filterLeftInit = AudioHeap_AllocDmaMemory(&gAudioCtx.miscPool, FILTER_SIZE);
}
reverb->filterLeft = reverb->filterLeftInit;
@@ -1627,9 +1617,9 @@ void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirs
case REVERB_DATA_TYPE_FILTER_RIGHT:
if (data != 0) {
if (isFirstInit || (reverb->filterRightInit == NULL)) {
- reverb->filterRightState = AudioHeap_AllocDmaMemoryZeroed(
- &gAudioContext.miscPool, 2 * (FILTER_BUF_PART1 + FILTER_BUF_PART2));
- reverb->filterRightInit = AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, FILTER_SIZE);
+ reverb->filterRightState =
+ AudioHeap_AllocDmaMemoryZeroed(&gAudioCtx.miscPool, 2 * (FILTER_BUF_PART1 + FILTER_BUF_PART2));
+ reverb->filterRightInit = AudioHeap_AllocDmaMemory(&gAudioCtx.miscPool, FILTER_SIZE);
}
reverb->filterRight = reverb->filterRightInit;
if (reverb->filterRight != NULL) {
@@ -1658,7 +1648,7 @@ void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirs
}
void AudioHeap_InitReverb(s32 reverbIndex, ReverbSettings* settings, s32 isFirstInit) {
- SynthesisReverb* reverb = &gAudioContext.synthesisReverbs[reverbIndex];
+ SynthesisReverb* reverb = &gAudioCtx.synthesisReverbs[reverbIndex];
if (isFirstInit) {
reverb->delayNumSamplesAfterDownsampling = settings->delayNumSamples / settings->downsampleRate;
@@ -1684,10 +1674,8 @@ void AudioHeap_InitReverb(s32 reverbIndex, ReverbSettings* settings, s32 isFirst
reverb->useReverb = 8; // used as a boolean
if (isFirstInit) {
- reverb->leftReverbBuf =
- AudioHeap_AllocZeroedAttemptExternal(&gAudioContext.miscPool, reverb->delayNumSamples * 2);
- reverb->rightReverbBuf =
- AudioHeap_AllocZeroedAttemptExternal(&gAudioContext.miscPool, reverb->delayNumSamples * 2);
+ reverb->leftReverbBuf = AudioHeap_AllocZeroedAttemptExternal(&gAudioCtx.miscPool, reverb->delayNumSamples * 2);
+ reverb->rightReverbBuf = AudioHeap_AllocZeroedAttemptExternal(&gAudioCtx.miscPool, reverb->delayNumSamples * 2);
reverb->resampleFlags = 1;
reverb->nextReverbBufPos = 0;
reverb->delayNumSamplesUnk = 0;
diff --git a/src/code/audio/audio_init_params.c b/src/code/audio/audio_init_params.c
index 59c6658ac..6bba865e9 100644
--- a/src/code/audio/audio_init_params.c
+++ b/src/code/audio/audio_init_params.c
@@ -14,7 +14,7 @@ const s16 gAudioTatumInit[] = {
#define SOUNDFONT_2_SIZE 0xCE0
// Sizes of everything on the init pool
-#define AI_BUFFERS_SIZE (AIBUF_SIZE * ARRAY_COUNT(gAudioContext.aiBuffers))
+#define AI_BUFFERS_SIZE (AIBUF_SIZE * ARRAY_COUNT(gAudioCtx.aiBuffers))
#define SOUNDFONT_LIST_SIZE (NUM_SOUNDFONTS * sizeof(SoundFont))
// 0x19BD0
diff --git a/src/code/audio/audio_load.c b/src/code/audio/audio_load.c
index c9b5ad30b..d101b53f5 100644
--- a/src/code/audio/audio_load.c
+++ b/src/code/audio/audio_load.c
@@ -92,38 +92,38 @@ s32 D_801FD1E0;
DmaHandler sDmaHandler = osEPiStartDma;
void* sUnusedHandler = NULL;
-s32 gAudioContextInitalized = false;
+s32 gAudioCtxInitalized = false;
void AudioLoad_DecreaseSampleDmaTtls(void) {
u32 i;
- for (i = 0; i < gAudioContext.sampleDmaListSize1; i++) {
- SampleDma* dma = &gAudioContext.sampleDmas[i];
+ for (i = 0; i < gAudioCtx.sampleDmaListSize1; i++) {
+ SampleDma* dma = &gAudioCtx.sampleDmas[i];
if (dma->ttl != 0) {
dma->ttl--;
if (dma->ttl == 0) {
- dma->reuseIndex = gAudioContext.sampleDmaReuseQueue1WrPos;
- gAudioContext.sampleDmaReuseQueue1[gAudioContext.sampleDmaReuseQueue1WrPos] = i;
- gAudioContext.sampleDmaReuseQueue1WrPos++;
+ dma->reuseIndex = gAudioCtx.sampleDmaReuseQueue1WrPos;
+ gAudioCtx.sampleDmaReuseQueue1[gAudioCtx.sampleDmaReuseQueue1WrPos] = i;
+ gAudioCtx.sampleDmaReuseQueue1WrPos++;
}
}
}
- for (i = gAudioContext.sampleDmaListSize1; i < gAudioContext.sampleDmaCount; i++) {
- SampleDma* dma = &gAudioContext.sampleDmas[i];
+ for (i = gAudioCtx.sampleDmaListSize1; i < gAudioCtx.sampleDmaCount; i++) {
+ SampleDma* dma = &gAudioCtx.sampleDmas[i];
if (dma->ttl != 0) {
dma->ttl--;
if (dma->ttl == 0) {
- dma->reuseIndex = gAudioContext.sampleDmaReuseQueue2WrPos;
- gAudioContext.sampleDmaReuseQueue2[gAudioContext.sampleDmaReuseQueue2WrPos] = i;
- gAudioContext.sampleDmaReuseQueue2WrPos++;
+ dma->reuseIndex = gAudioCtx.sampleDmaReuseQueue2WrPos;
+ gAudioCtx.sampleDmaReuseQueue2[gAudioCtx.sampleDmaReuseQueue2WrPos] = i;
+ gAudioCtx.sampleDmaReuseQueue2WrPos++;
}
}
}
- gAudioContext.unused2648 = 0;
+ gAudioCtx.unused2648 = 0;
}
void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaIndexRef, s32 medium) {
@@ -137,24 +137,22 @@ void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaI
s32 bufferPos;
u32 i;
- if (arg2 != 0 || *dmaIndexRef >= gAudioContext.sampleDmaListSize1) {
- for (i = gAudioContext.sampleDmaListSize1; i < gAudioContext.sampleDmaCount; i++) {
- dma = &gAudioContext.sampleDmas[i];
+ if (arg2 != 0 || *dmaIndexRef >= gAudioCtx.sampleDmaListSize1) {
+ for (i = gAudioCtx.sampleDmaListSize1; i < gAudioCtx.sampleDmaCount; i++) {
+ dma = &gAudioCtx.sampleDmas[i];
bufferPos = devAddr - dma->devAddr;
if (0 <= bufferPos && ((u32)bufferPos <= dma->size - size)) {
// We already have a DMA request for this memory range.
- if (dma->ttl == 0 &&
- gAudioContext.sampleDmaReuseQueue2RdPos != gAudioContext.sampleDmaReuseQueue2WrPos) {
+ if (dma->ttl == 0 && gAudioCtx.sampleDmaReuseQueue2RdPos != gAudioCtx.sampleDmaReuseQueue2WrPos) {
// Move the DMA out of the reuse queue, by swapping it with the
// read pos, and then incrementing the read pos.
- if (dma->reuseIndex != gAudioContext.sampleDmaReuseQueue2RdPos) {
- gAudioContext.sampleDmaReuseQueue2[dma->reuseIndex] =
- gAudioContext.sampleDmaReuseQueue2[gAudioContext.sampleDmaReuseQueue2RdPos];
- gAudioContext
- .sampleDmas[gAudioContext.sampleDmaReuseQueue2[gAudioContext.sampleDmaReuseQueue2RdPos]]
+ if (dma->reuseIndex != gAudioCtx.sampleDmaReuseQueue2RdPos) {
+ gAudioCtx.sampleDmaReuseQueue2[dma->reuseIndex] =
+ gAudioCtx.sampleDmaReuseQueue2[gAudioCtx.sampleDmaReuseQueue2RdPos];
+ gAudioCtx.sampleDmas[gAudioCtx.sampleDmaReuseQueue2[gAudioCtx.sampleDmaReuseQueue2RdPos]]
.reuseIndex = dma->reuseIndex;
}
- gAudioContext.sampleDmaReuseQueue2RdPos++;
+ gAudioCtx.sampleDmaReuseQueue2RdPos++;
}
dma->ttl = 32;
*dmaIndexRef = (u8)i;
@@ -166,16 +164,16 @@ void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaI
goto search_short_lived;
}
- if (gAudioContext.sampleDmaReuseQueue2RdPos != gAudioContext.sampleDmaReuseQueue2WrPos && arg2 != 0) {
+ if (gAudioCtx.sampleDmaReuseQueue2RdPos != gAudioCtx.sampleDmaReuseQueue2WrPos && arg2 != 0) {
// Allocate a DMA from reuse queue 2, unless full.
- dmaIndex = gAudioContext.sampleDmaReuseQueue2[gAudioContext.sampleDmaReuseQueue2RdPos];
- gAudioContext.sampleDmaReuseQueue2RdPos++;
- dma = gAudioContext.sampleDmas + dmaIndex;
+ dmaIndex = gAudioCtx.sampleDmaReuseQueue2[gAudioCtx.sampleDmaReuseQueue2RdPos];
+ gAudioCtx.sampleDmaReuseQueue2RdPos++;
+ dma = gAudioCtx.sampleDmas + dmaIndex;
hasDma = true;
}
} else {
search_short_lived:
- dma = gAudioContext.sampleDmas + *dmaIndexRef;
+ dma = gAudioCtx.sampleDmas + *dmaIndexRef;
i = 0;
again:
bufferPos = devAddr - dma->devAddr;
@@ -184,31 +182,30 @@ void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaI
if (dma->ttl == 0) {
// Move the DMA out of the reuse queue, by swapping it with the
// read pos, and then incrementing the read pos.
- if (dma->reuseIndex != gAudioContext.sampleDmaReuseQueue1RdPos) {
- gAudioContext.sampleDmaReuseQueue1[dma->reuseIndex] =
- gAudioContext.sampleDmaReuseQueue1[gAudioContext.sampleDmaReuseQueue1RdPos];
- gAudioContext
- .sampleDmas[gAudioContext.sampleDmaReuseQueue1[gAudioContext.sampleDmaReuseQueue1RdPos]]
+ if (dma->reuseIndex != gAudioCtx.sampleDmaReuseQueue1RdPos) {
+ gAudioCtx.sampleDmaReuseQueue1[dma->reuseIndex] =
+ gAudioCtx.sampleDmaReuseQueue1[gAudioCtx.sampleDmaReuseQueue1RdPos];
+ gAudioCtx.sampleDmas[gAudioCtx.sampleDmaReuseQueue1[gAudioCtx.sampleDmaReuseQueue1RdPos]]
.reuseIndex = dma->reuseIndex;
}
- gAudioContext.sampleDmaReuseQueue1RdPos++;
+ gAudioCtx.sampleDmaReuseQueue1RdPos++;
}
dma->ttl = 2;
return dma->ramAddr + (devAddr - dma->devAddr);
}
- dma = gAudioContext.sampleDmas + i++;
- if (i <= gAudioContext.sampleDmaListSize1) {
+ dma = gAudioCtx.sampleDmas + i++;
+ if (i <= gAudioCtx.sampleDmaListSize1) {
goto again;
}
}
if (!hasDma) {
- if (gAudioContext.sampleDmaReuseQueue1RdPos == gAudioContext.sampleDmaReuseQueue1WrPos) {
+ if (gAudioCtx.sampleDmaReuseQueue1RdPos == gAudioCtx.sampleDmaReuseQueue1WrPos) {
return NULL;
}
// Allocate a DMA from reuse queue 1.
- dmaIndex = gAudioContext.sampleDmaReuseQueue1[gAudioContext.sampleDmaReuseQueue1RdPos++];
- dma = gAudioContext.sampleDmas + dmaIndex;
+ dmaIndex = gAudioCtx.sampleDmaReuseQueue1[gAudioCtx.sampleDmaReuseQueue1RdPos++];
+ dma = gAudioCtx.sampleDmas + dmaIndex;
hasDma = true;
}
@@ -217,9 +214,8 @@ void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaI
dma->ttl = 3;
dma->devAddr = dmaDevAddr;
dma->sizeUnused = transfer;
- AudioLoad_Dma(&gAudioContext.currAudioFrameDmaIoMesgBuf[gAudioContext.curAudioFrameDmaCount++], OS_MESG_PRI_NORMAL,
- OS_READ, dmaDevAddr, dma->ramAddr, transfer, &gAudioContext.curAudioFrameDmaQueue, medium,
- "SUPERDMA");
+ AudioLoad_Dma(&gAudioCtx.currAudioFrameDmaIoMesgBuf[gAudioCtx.curAudioFrameDmaCount++], OS_MESG_PRI_NORMAL, OS_READ,
+ dmaDevAddr, dma->ramAddr, transfer, &gAudioCtx.curAudioFrameDmaQueue, medium, "SUPERDMA");
*dmaIndexRef = dmaIndex;
return (devAddr - dmaDevAddr) + dma->ramAddr;
}
@@ -233,78 +229,77 @@ void AudioLoad_InitSampleDmaBuffers(s32 numNotes) {
s32 t2;
s32 j;
- gAudioContext.sampleDmaBufSize = gAudioContext.sampleDmaBufSize1;
- gAudioContext.sampleDmas =
- AudioHeap_Alloc(&gAudioContext.miscPool,
- 4 * gAudioContext.numNotes * sizeof(SampleDma) * gAudioContext.audioBufferParameters.specUnk4);
- t2 = 3 * gAudioContext.numNotes * gAudioContext.audioBufferParameters.specUnk4;
+ gAudioCtx.sampleDmaBufSize = gAudioCtx.sampleDmaBufSize1;
+ gAudioCtx.sampleDmas = AudioHeap_Alloc(&gAudioCtx.miscPool, 4 * gAudioCtx.numNotes * sizeof(SampleDma) *
+ gAudioCtx.audioBufferParameters.specUnk4);
+ t2 = 3 * gAudioCtx.numNotes * gAudioCtx.audioBufferParameters.specUnk4;
// First 3/4 sampleDmas
for (i = 0; i < t2; i++) {
- dma = &gAudioContext.sampleDmas[gAudioContext.sampleDmaCount];
- dma->ramAddr = AudioHeap_AllocAttemptExternal(&gAudioContext.miscPool, gAudioContext.sampleDmaBufSize);
+ dma = &gAudioCtx.sampleDmas[gAudioCtx.sampleDmaCount];
+ dma->ramAddr = AudioHeap_AllocAttemptExternal(&gAudioCtx.miscPool, gAudioCtx.sampleDmaBufSize);
if (dma->ramAddr == NULL) {
break;
} else {
- AudioHeap_WritebackDCache(dma->ramAddr, gAudioContext.sampleDmaBufSize);
- dma->size = gAudioContext.sampleDmaBufSize;
+ AudioHeap_WritebackDCache(dma->ramAddr, gAudioCtx.sampleDmaBufSize);
+ dma->size = gAudioCtx.sampleDmaBufSize;
dma->devAddr = 0;
dma->sizeUnused = 0;
dma->unused = 0;
dma->ttl = 0;
- gAudioContext.sampleDmaCount++;
+ gAudioCtx.sampleDmaCount++;
}
}
- for (i = 0; (u32)i < gAudioContext.sampleDmaCount; i++) {
- gAudioContext.sampleDmaReuseQueue1[i] = i;
- gAudioContext.sampleDmas[i].reuseIndex = i;
+ for (i = 0; (u32)i < gAudioCtx.sampleDmaCount; i++) {
+ gAudioCtx.sampleDmaReuseQueue1[i] = i;
+ gAudioCtx.sampleDmas[i].reuseIndex = i;
}
- for (i = gAudioContext.sampleDmaCount; i < 0x100; i++) {
- gAudioContext.sampleDmaReuseQueue1[i] = 0;
+ for (i = gAudioCtx.sampleDmaCount; i < 0x100; i++) {
+ gAudioCtx.sampleDmaReuseQueue1[i] = 0;
}
- gAudioContext.sampleDmaReuseQueue1RdPos = 0;
- gAudioContext.sampleDmaReuseQueue1WrPos = gAudioContext.sampleDmaCount;
- gAudioContext.sampleDmaListSize1 = gAudioContext.sampleDmaCount;
- gAudioContext.sampleDmaBufSize = gAudioContext.sampleDmaBufSize2;
+ gAudioCtx.sampleDmaReuseQueue1RdPos = 0;
+ gAudioCtx.sampleDmaReuseQueue1WrPos = gAudioCtx.sampleDmaCount;
+ gAudioCtx.sampleDmaListSize1 = gAudioCtx.sampleDmaCount;
+ gAudioCtx.sampleDmaBufSize = gAudioCtx.sampleDmaBufSize2;
- for (j = 0; j < gAudioContext.numNotes; j++) {
- dma = &gAudioContext.sampleDmas[gAudioContext.sampleDmaCount];
- dma->ramAddr = AudioHeap_AllocAttemptExternal(&gAudioContext.miscPool, gAudioContext.sampleDmaBufSize);
+ for (j = 0; j < gAudioCtx.numNotes; j++) {
+ dma = &gAudioCtx.sampleDmas[gAudioCtx.sampleDmaCount];
+ dma->ramAddr = AudioHeap_AllocAttemptExternal(&gAudioCtx.miscPool, gAudioCtx.sampleDmaBufSize);
if (dma->ramAddr == NULL) {
break;
} else {
- AudioHeap_WritebackDCache(dma->ramAddr, gAudioContext.sampleDmaBufSize);
- dma->size = gAudioContext.sampleDmaBufSize;
+ AudioHeap_WritebackDCache(dma->ramAddr, gAudioCtx.sampleDmaBufSize);
+ dma->size = gAudioCtx.sampleDmaBufSize;
dma->devAddr = 0;
dma->sizeUnused = 0;
dma->unused = 0;
dma->ttl = 0;
- gAudioContext.sampleDmaCount++;
+ gAudioCtx.sampleDmaCount++;
}
}
- for (i = gAudioContext.sampleDmaListSize1; (u32)i < gAudioContext.sampleDmaCount; i++) {
- gAudioContext.sampleDmaReuseQueue2[i - gAudioContext.sampleDmaListSize1] = i;
- gAudioContext.sampleDmas[i].reuseIndex = i - gAudioContext.sampleDmaListSize1;
+ for (i = gAudioCtx.sampleDmaListSize1; (u32)i < gAudioCtx.sampleDmaCount; i++) {
+ gAudioCtx.sampleDmaReuseQueue2[i - gAudioCtx.sampleDmaListSize1] = i;
+ gAudioCtx.sampleDmas[i].reuseIndex = i - gAudioCtx.sampleDmaListSize1;
}
- for (i = gAudioContext.sampleDmaCount; i < 0x100; i++) {
- gAudioContext.sampleDmaReuseQueue2[i] = gAudioContext.sampleDmaListSize1;
+ for (i = gAudioCtx.sampleDmaCount; i < 0x100; i++) {
+ gAudioCtx.sampleDmaReuseQueue2[i] = gAudioCtx.sampleDmaListSize1;
}
- gAudioContext.sampleDmaReuseQueue2RdPos = 0;
- gAudioContext.sampleDmaReuseQueue2WrPos = gAudioContext.sampleDmaCount - gAudioContext.sampleDmaListSize1;
+ gAudioCtx.sampleDmaReuseQueue2RdPos = 0;
+ gAudioCtx.sampleDmaReuseQueue2WrPos = gAudioCtx.sampleDmaCount - gAudioCtx.sampleDmaListSize1;
}
s32 AudioLoad_IsFontLoadComplete(s32 fontId) {
if (fontId == 0xFF) {
return true;
- } else if (gAudioContext.fontLoadStatus[fontId] >= LOAD_STATUS_COMPLETE) {
+ } else if (gAudioCtx.fontLoadStatus[fontId] >= LOAD_STATUS_COMPLETE) {
return true;
- } else if (gAudioContext.fontLoadStatus[AudioLoad_GetRealTableIndex(FONT_TABLE, fontId)] >= LOAD_STATUS_COMPLETE) {
+ } else if (gAudioCtx.fontLoadStatus[AudioLoad_GetRealTableIndex(FONT_TABLE, fontId)] >= LOAD_STATUS_COMPLETE) {
return true;
} else {
return false;
@@ -314,10 +309,9 @@ s32 AudioLoad_IsFontLoadComplete(s32 fontId) {
s32 AudioLoad_IsSeqLoadComplete(s32 seqId) {
if (seqId == 0xFF) {
return true;
- } else if (gAudioContext.seqLoadStatus[seqId] >= LOAD_STATUS_COMPLETE) {
+ } else if (gAudioCtx.seqLoadStatus[seqId] >= LOAD_STATUS_COMPLETE) {
return true;
- } else if (gAudioContext.seqLoadStatus[AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId)] >=
- LOAD_STATUS_COMPLETE) {
+ } else if (gAudioCtx.seqLoadStatus[AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId)] >= LOAD_STATUS_COMPLETE) {
return true;
} else {
return false;
@@ -327,9 +321,9 @@ s32 AudioLoad_IsSeqLoadComplete(s32 seqId) {
s32 AudioLoad_IsSampleLoadComplete(s32 sampleBankId) {
if (sampleBankId == 0xFF) {
return true;
- } else if (gAudioContext.sampleFontLoadStatus[sampleBankId] >= LOAD_STATUS_COMPLETE) {
+ } else if (gAudioCtx.sampleFontLoadStatus[sampleBankId] >= LOAD_STATUS_COMPLETE) {
return true;
- } else if (gAudioContext.sampleFontLoadStatus[AudioLoad_GetRealTableIndex(SAMPLE_TABLE, sampleBankId)] >=
+ } else if (gAudioCtx.sampleFontLoadStatus[AudioLoad_GetRealTableIndex(SAMPLE_TABLE, sampleBankId)] >=
LOAD_STATUS_COMPLETE) {
return true;
} else {
@@ -338,33 +332,33 @@ s32 AudioLoad_IsSampleLoadComplete(s32 sampleBankId) {
}
void AudioLoad_SetFontLoadStatus(s32 fontId, s32 loadStatus) {
- if ((fontId != 0xFF) && (gAudioContext.fontLoadStatus[fontId] != LOAD_STATUS_PERMANENT)) {
- gAudioContext.fontLoadStatus[fontId] = loadStatus;
+ if ((fontId != 0xFF) && (gAudioCtx.fontLoadStatus[fontId] != LOAD_STATUS_PERMANENT)) {
+ gAudioCtx.fontLoadStatus[fontId] = loadStatus;
}
}
void AudioLoad_SetSeqLoadStatus(s32 seqId, s32 loadStatus) {
- if ((seqId != 0xFF) && (gAudioContext.seqLoadStatus[seqId] != LOAD_STATUS_PERMANENT)) {
- gAudioContext.seqLoadStatus[seqId] = loadStatus;
+ if ((seqId != 0xFF) && (gAudioCtx.seqLoadStatus[seqId] != LOAD_STATUS_PERMANENT)) {
+ gAudioCtx.seqLoadStatus[seqId] = loadStatus;
}
}
void AudioLoad_SetSampleFontLoadStatusAndApplyCaches(s32 sampleBankId, s32 loadStatus) {
if (sampleBankId != 0xFF) {
- if (gAudioContext.sampleFontLoadStatus[sampleBankId] != LOAD_STATUS_PERMANENT) {
- gAudioContext.sampleFontLoadStatus[sampleBankId] = loadStatus;
+ if (gAudioCtx.sampleFontLoadStatus[sampleBankId] != LOAD_STATUS_PERMANENT) {
+ gAudioCtx.sampleFontLoadStatus[sampleBankId] = loadStatus;
}
- if ((gAudioContext.sampleFontLoadStatus[sampleBankId] == LOAD_STATUS_PERMANENT) ||
- (gAudioContext.sampleFontLoadStatus[sampleBankId] == LOAD_STATUS_COMPLETE)) {
+ if ((gAudioCtx.sampleFontLoadStatus[sampleBankId] == LOAD_STATUS_PERMANENT) ||
+ (gAudioCtx.sampleFontLoadStatus[sampleBankId] == LOAD_STATUS_COMPLETE)) {
AudioHeap_ApplySampleBankCache(sampleBankId);
}
}
}
void AudioLoad_SetSampleFontLoadStatus(s32 sampleBankId, s32 loadStatus) {
- if ((sampleBankId != 0xFF) && (gAudioContext.sampleFontLoadStatus[sampleBankId] != LOAD_STATUS_PERMANENT)) {
- gAudioContext.sampleFontLoadStatus[sampleBankId] = loadStatus;
+ if ((sampleBankId != 0xFF) && (gAudioCtx.sampleFontLoadStatus[sampleBankId] != LOAD_STATUS_PERMANENT)) {
+ gAudioCtx.sampleFontLoadStatus[sampleBankId] = loadStatus;
}
}
@@ -389,16 +383,16 @@ SoundFontData* AudioLoad_SyncLoadSeqFonts(s32 seqId, u32* outDefaultFontId) {
s32 fontId;
s32 i;
- if (seqId >= gAudioContext.numSequences) {
+ if (seqId >= gAudioCtx.numSequences) {
return NULL;
}
fontId = 0xFF;
- index = ((u16*)gAudioContext.sequenceFontTable)[seqId];
- numFonts = gAudioContext.sequenceFontTable[index++];
+ index = ((u16*)gAudioCtx.sequenceFontTable)[seqId];
+ numFonts = gAudioCtx.sequenceFontTable[index++];
while (numFonts > 0) {
- fontId = gAudioContext.sequenceFontTable[index++];
+ fontId = gAudioCtx.sequenceFontTable[index++];
fontData = AudioLoad_SyncLoadFont(fontId);
numFonts--;
}
@@ -411,7 +405,7 @@ void AudioLoad_SyncLoadSeqParts(s32 seqId, s32 arg1, s32 arg2, OSMesgQueue* arg3
s32 pad;
u32 defaultFontId;
- if (seqId < gAudioContext.numSequences) {
+ if (seqId < gAudioCtx.numSequences) {
if (arg1 & 2) {
AudioLoad_SyncLoadSeqFonts(seqId, &defaultFontId);
}
@@ -437,7 +431,7 @@ s32 AudioLoad_SyncLoadSample(Sample* sample, s32 fontId) {
if (sample->medium == MEDIUM_UNK) {
AudioLoad_SyncDmaUnkMedium(sample->sampleAddr, sampleAddr, sample->size,
- gAudioContext.sampleBankTable->unkMediumParam);
+ gAudioCtx.sampleBankTable->unkMediumParam);
} else {
AudioLoad_SyncDma(sample->sampleAddr, sampleAddr, sample->size, sample->medium);
}
@@ -493,23 +487,23 @@ void AudioLoad_AsyncLoadFont(s32 fontId, s32 arg1, s32 retData, OSMesgQueue* ret
}
u8* AudioLoad_GetFontsForSequence(s32 seqId, u32* outNumFonts) {
- s32 index = ((u16*)gAudioContext.sequenceFontTable)[seqId];
+ s32 index = ((u16*)gAudioCtx.sequenceFontTable)[seqId];
- *outNumFonts = gAudioContext.sequenceFontTable[index++];
+ *outNumFonts = gAudioCtx.sequenceFontTable[index++];
if (*outNumFonts == 0) {
return NULL;
}
- return &gAudioContext.sequenceFontTable[index];
+ return &gAudioCtx.sequenceFontTable[index];
}
void AudioLoad_DiscardSeqFonts(s32 seqId) {
s32 fontId;
- s32 index = ((u16*)gAudioContext.sequenceFontTable)[seqId];
- s32 numFonts = gAudioContext.sequenceFontTable[index++];
+ s32 index = ((u16*)gAudioCtx.sequenceFontTable)[seqId];
+ s32 numFonts = gAudioCtx.sequenceFontTable[index++];
while (numFonts > 0) {
numFonts--;
- fontId = AudioLoad_GetRealTableIndex(FONT_TABLE, gAudioContext.sequenceFontTable[index++]);
+ fontId = AudioLoad_GetRealTableIndex(FONT_TABLE, gAudioCtx.sequenceFontTable[index++]);
if (AudioHeap_SearchPermanentCache(FONT_TABLE, fontId) == NULL) {
AudioLoad_DiscardFont(fontId);
AudioLoad_SetFontLoadStatus(fontId, LOAD_STATUS_NOT_LOADED);
@@ -519,7 +513,7 @@ void AudioLoad_DiscardSeqFonts(s32 seqId) {
void AudioLoad_DiscardFont(s32 fontId) {
u32 i;
- AudioCache* pool = &gAudioContext.fontCache;
+ AudioCache* pool = &gAudioCtx.fontCache;
AudioPersistentCache* persistent;
if (fontId == pool->temporary.entries[0].id) {
@@ -556,11 +550,11 @@ void func_8018FA60(u32 tableType, u32 id, s32 type, s32 data) {
}
s32 AudioLoad_SyncInitSeqPlayer(s32 playerIndex, s32 seqId, s32 arg2) {
- if (gAudioContext.resetTimer != 0) {
+ if (gAudioCtx.resetTimer != 0) {
return 0;
}
- gAudioContext.seqPlayers[playerIndex].skipTicks = 0;
+ gAudioCtx.seqPlayers[playerIndex].skipTicks = 0;
AudioLoad_SyncInitSeqPlayerInternal(playerIndex, seqId, arg2);
// Intentionally missing return. Returning the result of the above function
// call matches but is UB because it too is missing a return, and using the
@@ -569,23 +563,23 @@ s32 AudioLoad_SyncInitSeqPlayer(s32 playerIndex, s32 seqId, s32 arg2) {
}
s32 AudioLoad_SyncInitSeqPlayerSkipTicks(s32 playerIndex, s32 seqId, s32 skipTicks) {
- if (gAudioContext.resetTimer != 0) {
+ if (gAudioCtx.resetTimer != 0) {
return 0;
}
- gAudioContext.seqPlayers[playerIndex].skipTicks = skipTicks;
+ gAudioCtx.seqPlayers[playerIndex].skipTicks = skipTicks;
AudioLoad_SyncInitSeqPlayerInternal(playerIndex, seqId, 0);
// Missing return, see above.
}
s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIndex, s32 seqId, s32 arg2) {
- SequencePlayer* seqPlayer = &gAudioContext.seqPlayers[playerIndex];
+ SequencePlayer* seqPlayer = &gAudioCtx.seqPlayers[playerIndex];
u8* seqData;
s32 index;
s32 numFonts;
s32 fontId;
- if (seqId >= gAudioContext.numSequences) {
+ if (seqId >= gAudioCtx.numSequences) {
return 0;
}
@@ -593,11 +587,11 @@ s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIndex, s32 seqId, s32 arg2) {
if (1) {}
fontId = 0xFF;
- index = ((u16*)gAudioContext.sequenceFontTable)[seqId];
- numFonts = gAudioContext.sequenceFontTable[index++];
+ index = ((u16*)gAudioCtx.sequenceFontTable)[seqId];
+ numFonts = gAudioCtx.sequenceFontTable[index++];
while (numFonts > 0) {
- fontId = gAudioContext.sequenceFontTable[index++];
+ fontId = gAudioCtx.sequenceFontTable[index++];
AudioLoad_SyncLoadFont(fontId);
numFonts--;
}
@@ -630,7 +624,7 @@ u8* AudioLoad_SyncLoadSeq(s32 seqId) {
s32 pad;
s32 didAllocate;
- if (gAudioContext.seqLoadStatus[AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId)] == LOAD_STATUS_IN_PROGRESS) {
+ if (gAudioCtx.seqLoadStatus[AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId)] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
@@ -651,7 +645,7 @@ u32 AudioLoad_TrySyncLoadSampleBank(u32 sampleBankId, u32* outMedium, s32 noLoad
addr = AudioLoad_SearchCaches(SAMPLE_TABLE, realTableId);
if (addr != NULL) {
- if (gAudioContext.sampleFontLoadStatus[realTableId] != LOAD_STATUS_IN_PROGRESS) {
+ if (gAudioCtx.sampleFontLoadStatus[realTableId] != LOAD_STATUS_IN_PROGRESS) {
AudioLoad_SetSampleFontLoadStatus(realTableId, LOAD_STATUS_COMPLETE);
}
@@ -684,12 +678,12 @@ SoundFontData* AudioLoad_SyncLoadFont(u32 fontId) {
SampleBankRelocInfo sampleBankReloc;
s32 realFontId = AudioLoad_GetRealTableIndex(FONT_TABLE, fontId);
- if (gAudioContext.fontLoadStatus[realFontId] == LOAD_STATUS_IN_PROGRESS) {
+ if (gAudioCtx.fontLoadStatus[realFontId] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
- sampleBankId1 = gAudioContext.soundFontList[realFontId].sampleBankId1;
- sampleBankId2 = gAudioContext.soundFontList[realFontId].sampleBankId2;
+ sampleBankId1 = gAudioCtx.soundFontList[realFontId].sampleBankId1;
+ sampleBankId2 = gAudioCtx.soundFontList[realFontId].sampleBankId2;
sampleBankReloc.sampleBankId1 = sampleBankId1;
sampleBankReloc.sampleBankId2 = sampleBankId2;
@@ -780,7 +774,7 @@ void* AudioLoad_SyncLoad(s32 tableType, u32 id, s32* didAllocate) {
}
if (tableType == FONT_TABLE) {
- SoundFont* soundFont = &gAudioContext.soundFontList[realId];
+ SoundFont* soundFont = &gAudioCtx.soundFontList[realId];
soundFont->numInstruments = ((UnloadedFonts*)romAddr)->numInstruments;
soundFont->numDrums = ((UnloadedFonts*)romAddr)->numDrums;
@@ -847,16 +841,16 @@ AudioTable* AudioLoad_GetLoadTable(s32 tableType) {
switch (tableType) {
case SEQUENCE_TABLE:
- table = gAudioContext.sequenceTable;
+ table = gAudioCtx.sequenceTable;
break;
case FONT_TABLE:
- table = gAudioContext.soundFontTable;
+ table = gAudioCtx.soundFontTable;
break;
default:
table = NULL;
break;
case SAMPLE_TABLE:
- table = gAudioContext.sampleBankTable;
+ table = gAudioCtx.sampleBankTable;
break;
}
return table;
@@ -877,9 +871,9 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* fontDataStartAddr, Sample
Drum* drum;
SoundEffect* soundEffect;
s32 i;
- s32 numDrums = gAudioContext.soundFontList[fontId].numDrums;
- s32 numInstruments = gAudioContext.soundFontList[fontId].numInstruments;
- s32 numSfx = gAudioContext.soundFontList[fontId].numSfx;
+ s32 numDrums = gAudioCtx.soundFontList[fontId].numDrums;
+ s32 numInstruments = gAudioCtx.soundFontList[fontId].numInstruments;
+ s32 numSfx = gAudioCtx.soundFontList[fontId].numSfx;
u32* fontData = (u32*)fontDataStartAddr;
// Relocate an offset (relative to the start of the font data) to a pointer (a ram address)
@@ -985,14 +979,14 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* fontDataStartAddr, Sample
#undef RELOC_TO_RAM
// Store the relocated pointers
- gAudioContext.soundFontList[fontId].drums = (Drum**)fontData[0];
- gAudioContext.soundFontList[fontId].soundEffects = (SoundEffect*)fontData[1];
- gAudioContext.soundFontList[fontId].instruments = (Instrument**)(&fontData[2]);
+ gAudioCtx.soundFontList[fontId].drums = (Drum**)fontData[0];
+ gAudioCtx.soundFontList[fontId].soundEffects = (SoundEffect*)fontData[1];
+ gAudioCtx.soundFontList[fontId].instruments = (Instrument**)(&fontData[2]);
}
void AudioLoad_SyncDma(uintptr_t devAddr, u8* ramAddr, size_t size, s32 medium) {
- OSMesgQueue* msgQueue = &gAudioContext.syncDmaQueue;
- OSIoMesg* ioMesg = &gAudioContext.syncDmaIoMesg;
+ OSMesgQueue* msgQueue = &gAudioCtx.syncDmaQueue;
+ OSIoMesg* ioMesg = &gAudioCtx.syncDmaIoMesg;
size = ALIGN16(size);
Audio_InvalDCache(ramAddr, size);
@@ -1021,19 +1015,19 @@ s32 AudioLoad_Dma(OSIoMesg* mesg, u32 priority, s32 direction, uintptr_t devAddr
OSMesgQueue* reqQueue, s32 medium, const char* dmaFuncType) {
OSPiHandle* handle;
- if (gAudioContext.resetTimer > 16) {
+ if (gAudioCtx.resetTimer > 16) {
return -1;
}
switch (medium) {
case MEDIUM_CART:
- handle = gAudioContext.cartHandle;
+ handle = gAudioCtx.cartHandle;
break;
case MEDIUM_DISK_DRIVE:
// driveHandle is uninitialized and corresponds to stubbed-out disk drive support.
// SM64 Shindou called osDriveRomInit here.
- handle = gAudioContext.driveHandle;
+ handle = gAudioCtx.driveHandle;
break;
default:
@@ -1077,19 +1071,19 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
switch (tableType) {
case SEQUENCE_TABLE:
- if (gAudioContext.seqLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
+ if (gAudioCtx.seqLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
break;
case FONT_TABLE:
- if (gAudioContext.fontLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
+ if (gAudioCtx.fontLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
break;
case SAMPLE_TABLE:
- if (gAudioContext.sampleFontLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
+ if (gAudioCtx.sampleFontLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
break;
@@ -1146,7 +1140,7 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
}
if (tableType == FONT_TABLE) {
- soundFont = &gAudioContext.soundFontList[realId];
+ soundFont = &gAudioCtx.soundFontList[realId];
soundFont->numInstruments = ((UnloadedFonts*)romAddr)->numInstruments;
soundFont->numDrums = ((UnloadedFonts*)romAddr)->numDrums;
@@ -1199,8 +1193,8 @@ void AudioLoad_SetUnusedHandler(void* callback) {
}
void AudioLoad_InitSoundFont(s32 fontId) {
- SoundFont* font = &gAudioContext.soundFontList[fontId];
- AudioTableEntry* entry = &gAudioContext.soundFontTable->entries[fontId];
+ SoundFont* font = &gAudioCtx.soundFontList[fontId];
+ AudioTableEntry* entry = &gAudioCtx.soundFontTable->entries[fontId];
font->sampleBankId1 = (entry->shortData1 >> 8) & 0xFF;
font->sampleBankId2 = (entry->shortData1) & 0xFF;
@@ -1213,7 +1207,7 @@ void AudioLoad_Init(void* heap, size_t heapSize) {
s32 pad1[9];
s32 numFonts;
s32 pad2[2];
- u8* audioContextPtr;
+ u8* audioCtxPtr;
void* addr;
s32 i;
s32 j;
@@ -1222,120 +1216,120 @@ void AudioLoad_Init(void* heap, size_t heapSize) {
gCustomAudioReverbFunction = NULL;
gCustomAudioSynthFunction = NULL;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.unk_29A8); i++) {
- gAudioContext.unk_29A8[i] = NULL;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.unk_29A8); i++) {
+ gAudioCtx.unk_29A8[i] = NULL;
}
- gAudioContext.resetTimer = 0;
- gAudioContext.unk_29B8 = false;
+ gAudioCtx.resetTimer = 0;
+ gAudioCtx.unk_29B8 = false;
- // Set all of gAudioContext to 0
- audioContextPtr = (u8*)&gAudioContext;
- for (j = sizeof(gAudioContext); j >= 0; j--) {
- *audioContextPtr++ = 0;
+ // Set all of gAudioCtx to 0
+ audioCtxPtr = (u8*)&gAudioCtx;
+ for (j = sizeof(gAudioCtx); j >= 0; j--) {
+ *audioCtxPtr++ = 0;
}
switch (osTvType) {
case OS_TV_PAL:
- gAudioContext.unk_2960 = 20.03042f;
- gAudioContext.refreshRate = 50;
+ gAudioCtx.unk_2960 = 20.03042f;
+ gAudioCtx.refreshRate = 50;
break;
case OS_TV_MPAL:
- gAudioContext.unk_2960 = 16.546f;
- gAudioContext.refreshRate = 60;
+ gAudioCtx.unk_2960 = 16.546f;
+ gAudioCtx.refreshRate = 60;
break;
case OS_TV_NTSC:
default:
- gAudioContext.unk_2960 = 16.713f;
- gAudioContext.refreshRate = 60;
+ gAudioCtx.unk_2960 = 16.713f;
+ gAudioCtx.refreshRate = 60;
}
AudioThread_InitMesgQueues();
- for (i = 0; i < ARRAY_COUNT(gAudioContext.aiBufNumSamples); i++) {
- gAudioContext.aiBufNumSamples[i] = 0xA0;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.aiBufNumSamples); i++) {
+ gAudioCtx.aiBufNumSamples[i] = 0xA0;
}
- gAudioContext.totalTaskCount = 0;
- gAudioContext.rspTaskIndex = 0;
- gAudioContext.curAiBufferIndex = 0;
- gAudioContext.soundMode = SOUNDMODE_STEREO;
- gAudioContext.curTask = NULL;
- gAudioContext.rspTask[0].task.t.dataSize = 0;
- gAudioContext.rspTask[1].task.t.dataSize = 0;
+ gAudioCtx.totalTaskCount = 0;
+ gAudioCtx.rspTaskIndex = 0;
+ gAudioCtx.curAiBufferIndex = 0;
+ gAudioCtx.soundMode = SOUNDMODE_STEREO;
+ gAudioCtx.curTask = NULL;
+ gAudioCtx.rspTask[0].task.t.dataSize = 0;
+ gAudioCtx.rspTask[1].task.t.dataSize = 0;
- osCreateMesgQueue(&gAudioContext.syncDmaQueue, &gAudioContext.syncDmaMesg, 1);
- osCreateMesgQueue(&gAudioContext.curAudioFrameDmaQueue, gAudioContext.currAudioFrameDmaMesgBuf,
- ARRAY_COUNT(gAudioContext.currAudioFrameDmaMesgBuf));
- osCreateMesgQueue(&gAudioContext.externalLoadQueue, gAudioContext.externalLoadMesgBuf,
- ARRAY_COUNT(gAudioContext.externalLoadMesgBuf));
- osCreateMesgQueue(&gAudioContext.preloadSampleQueue, gAudioContext.preloadSampleMesgBuf,
- ARRAY_COUNT(gAudioContext.preloadSampleMesgBuf));
- gAudioContext.curAudioFrameDmaCount = 0;
- gAudioContext.sampleDmaCount = 0;
- gAudioContext.cartHandle = osCartRomInit();
+ osCreateMesgQueue(&gAudioCtx.syncDmaQueue, &gAudioCtx.syncDmaMesg, 1);
+ osCreateMesgQueue(&gAudioCtx.curAudioFrameDmaQueue, gAudioCtx.currAudioFrameDmaMesgBuf,
+ ARRAY_COUNT(gAudioCtx.currAudioFrameDmaMesgBuf));
+ osCreateMesgQueue(&gAudioCtx.externalLoadQueue, gAudioCtx.externalLoadMesgBuf,
+ ARRAY_COUNT(gAudioCtx.externalLoadMesgBuf));
+ osCreateMesgQueue(&gAudioCtx.preloadSampleQueue, gAudioCtx.preloadSampleMesgBuf,
+ ARRAY_COUNT(gAudioCtx.preloadSampleMesgBuf));
+ gAudioCtx.curAudioFrameDmaCount = 0;
+ gAudioCtx.sampleDmaCount = 0;
+ gAudioCtx.cartHandle = osCartRomInit();
if (heap == NULL) {
- gAudioContext.audioHeap = gAudioHeap;
- gAudioContext.audioHeapSize = gAudioHeapInitSizes.heapSize;
+ gAudioCtx.audioHeap = gAudioHeap;
+ gAudioCtx.audioHeapSize = gAudioHeapInitSizes.heapSize;
} else {
void** hp = &heap;
- gAudioContext.audioHeap = *hp;
- gAudioContext.audioHeapSize = heapSize;
+ gAudioCtx.audioHeap = *hp;
+ gAudioCtx.audioHeapSize = heapSize;
}
- for (i = 0; i < ((s32)gAudioContext.audioHeapSize / (s32)sizeof(u64)); i++) {
- ((u64*)gAudioContext.audioHeap)[i] = 0;
+ for (i = 0; i < ((s32)gAudioCtx.audioHeapSize / (s32)sizeof(u64)); i++) {
+ ((u64*)gAudioCtx.audioHeap)[i] = 0;
}
// Main Pool Split (split entirety of audio heap into initPool and sessionPool)
AudioHeap_InitMainPool(gAudioHeapInitSizes.initPoolSize);
// Initialize the audio interface buffers
- for (i = 0; i < ARRAY_COUNT(gAudioContext.aiBuffers); i++) {
- gAudioContext.aiBuffers[i] = AudioHeap_AllocZeroed(&gAudioContext.initPool, AIBUF_LEN * sizeof(s16));
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.aiBuffers); i++) {
+ gAudioCtx.aiBuffers[i] = AudioHeap_AllocZeroed(&gAudioCtx.initPool, AIBUF_LEN * sizeof(s16));
}
// Connect audio tables to their tables in memory
- gAudioContext.sequenceTable = (AudioTable*)gSequenceTable;
- gAudioContext.soundFontTable = (AudioTable*)gSoundFontTable;
- gAudioContext.sampleBankTable = (AudioTable*)gSampleBankTable;
- gAudioContext.sequenceFontTable = gSequenceFontTable;
+ gAudioCtx.sequenceTable = (AudioTable*)gSequenceTable;
+ gAudioCtx.soundFontTable = (AudioTable*)gSoundFontTable;
+ gAudioCtx.sampleBankTable = (AudioTable*)gSampleBankTable;
+ gAudioCtx.sequenceFontTable = gSequenceFontTable;
- gAudioContext.numSequences = gAudioContext.sequenceTable->numEntries;
+ gAudioCtx.numSequences = gAudioCtx.sequenceTable->numEntries;
- gAudioContext.audioResetSpecIdToLoad = 0;
- gAudioContext.resetStatus = 1; // Set reset to immediately initialize the audio heap
+ gAudioCtx.audioResetSpecIdToLoad = 0;
+ gAudioCtx.resetStatus = 1; // Set reset to immediately initialize the audio heap
AudioHeap_ResetStep();
// Initialize audio tables
- AudioLoad_InitTable(gAudioContext.sequenceTable, SEGMENT_ROM_START(Audioseq), 0);
- AudioLoad_InitTable(gAudioContext.soundFontTable, SEGMENT_ROM_START(Audiobank), 0);
- AudioLoad_InitTable(gAudioContext.sampleBankTable, SEGMENT_ROM_START(Audiotable), 0);
+ AudioLoad_InitTable(gAudioCtx.sequenceTable, SEGMENT_ROM_START(Audioseq), 0);
+ AudioLoad_InitTable(gAudioCtx.soundFontTable, SEGMENT_ROM_START(Audiobank), 0);
+ AudioLoad_InitTable(gAudioCtx.sampleBankTable, SEGMENT_ROM_START(Audiotable), 0);
- numFonts = gAudioContext.soundFontTable->numEntries;
- gAudioContext.soundFontList = AudioHeap_Alloc(&gAudioContext.initPool, numFonts * sizeof(SoundFont));
+ numFonts = gAudioCtx.soundFontTable->numEntries;
+ gAudioCtx.soundFontList = AudioHeap_Alloc(&gAudioCtx.initPool, numFonts * sizeof(SoundFont));
for (i = 0; i < numFonts; i++) {
AudioLoad_InitSoundFont(i);
}
- if (addr = AudioHeap_Alloc(&gAudioContext.initPool, gAudioHeapInitSizes.permanentPoolSize), addr == NULL) {
+ if (addr = AudioHeap_Alloc(&gAudioCtx.initPool, gAudioHeapInitSizes.permanentPoolSize), addr == NULL) {
// cast away const from gAudioHeapInitSizes
*((u32*)&gAudioHeapInitSizes.permanentPoolSize) = 0;
}
- AudioHeap_InitPool(&gAudioContext.permanentPool, addr, gAudioHeapInitSizes.permanentPoolSize);
- gAudioContextInitalized = true;
- osSendMesg(gAudioContext.taskStartQueueP, (void*)gAudioContext.totalTaskCount, OS_MESG_NOBLOCK);
+ AudioHeap_InitPool(&gAudioCtx.permanentPool, addr, gAudioHeapInitSizes.permanentPoolSize);
+ gAudioCtxInitalized = true;
+ osSendMesg(gAudioCtx.taskStartQueueP, (void*)gAudioCtx.totalTaskCount, OS_MESG_NOBLOCK);
}
void AudioLoad_InitSlowLoads(void) {
- gAudioContext.slowLoads[0].status = 0;
- gAudioContext.slowLoads[1].status = 0;
+ gAudioCtx.slowLoads[0].status = 0;
+ gAudioCtx.slowLoads[1].status = 0;
}
s32 AudioLoad_SlowLoadSample(s32 fontId, s32 instId, s8* isDone) {
@@ -1353,7 +1347,7 @@ s32 AudioLoad_SlowLoadSample(s32 fontId, s32 instId, s8* isDone) {
return 0;
}
- slowLoad = &gAudioContext.slowLoads[gAudioContext.slowLoadPos];
+ slowLoad = &gAudioCtx.slowLoads[gAudioCtx.slowLoadPos];
if (slowLoad->status == LOAD_STATUS_DONE) {
slowLoad->status = LOAD_STATUS_WAITING;
}
@@ -1382,10 +1376,10 @@ s32 AudioLoad_SlowLoadSample(s32 fontId, s32 instId, s8* isDone) {
slowLoad->instId = instId;
if (slowLoad->medium == MEDIUM_UNK) {
- slowLoad->unkMediumParam = gAudioContext.sampleBankTable->unkMediumParam;
+ slowLoad->unkMediumParam = gAudioCtx.sampleBankTable->unkMediumParam;
}
- gAudioContext.slowLoadPos ^= 1;
+ gAudioCtx.slowLoadPos ^= 1;
return 0;
}
@@ -1442,9 +1436,9 @@ void AudioLoad_ProcessSlowLoads(s32 resetStatus) {
AudioSlowLoad* slowLoad;
s32 i;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.slowLoads); i++) {
- slowLoad = &gAudioContext.slowLoads[i];
- switch (gAudioContext.slowLoads[i].status) {
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.slowLoads); i++) {
+ slowLoad = &gAudioCtx.slowLoads[i];
+ switch (gAudioCtx.slowLoads[i].status) {
case LOAD_STATUS_LOADING:
if (slowLoad->medium != MEDIUM_UNK) {
osRecvMesg(&slowLoad->msgqueue, NULL, OS_MESG_BLOCK);
@@ -1501,14 +1495,14 @@ s32 AudioLoad_SlowLoadSeq(s32 seqId, u8* ramAddr, s8* isDone) {
AudioTable* seqTable;
size_t size;
- if (seqId >= gAudioContext.numSequences) {
+ if (seqId >= gAudioCtx.numSequences) {
*isDone = 0;
return -1;
}
seqId = AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId);
seqTable = AudioLoad_GetLoadTable(SEQUENCE_TABLE);
- slowLoad = &gAudioContext.slowLoads[gAudioContext.slowLoadPos];
+ slowLoad = &gAudioCtx.slowLoads[gAudioCtx.slowLoadPos];
if (slowLoad->status == LOAD_STATUS_DONE) {
slowLoad->status = LOAD_STATUS_WAITING;
}
@@ -1529,15 +1523,15 @@ s32 AudioLoad_SlowLoadSeq(s32 seqId, u8* ramAddr, s8* isDone) {
slowLoad->unkMediumParam = seqTable->unkMediumParam;
}
- gAudioContext.slowLoadPos ^= 1;
+ gAudioCtx.slowLoadPos ^= 1;
return 0;
}
void AudioLoad_InitAsyncLoads(void) {
s32 i;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.asyncLoads); i++) {
- gAudioContext.asyncLoads[i].status = 0;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.asyncLoads); i++) {
+ gAudioCtx.asyncLoads[i].status = 0;
}
}
@@ -1550,7 +1544,7 @@ AudioAsyncLoad* AudioLoad_StartAsyncLoadUnkMedium(s32 unkMediumParam, uintptr_t
return NULL;
}
- osSendMesg(&gAudioContext.asyncLoadUnkMediumQueue, asyncLoad, OS_MESG_NOBLOCK);
+ osSendMesg(&gAudioCtx.asyncLoadUnkMediumQueue, asyncLoad, OS_MESG_NOBLOCK);
asyncLoad->unkMediumParam = unkMediumParam;
return asyncLoad;
}
@@ -1560,15 +1554,15 @@ AudioAsyncLoad* AudioLoad_StartAsyncLoad(uintptr_t devAddr, void* ramAddr, size_
AudioAsyncLoad* asyncLoad;
s32 i;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.asyncLoads); i++) {
- if (gAudioContext.asyncLoads[i].status == 0) {
- asyncLoad = &gAudioContext.asyncLoads[i];
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.asyncLoads); i++) {
+ if (gAudioCtx.asyncLoads[i].status == 0) {
+ asyncLoad = &gAudioCtx.asyncLoads[i];
break;
}
}
// no more available async loads
- if (i == ARRAY_COUNT(gAudioContext.asyncLoads)) {
+ if (i == ARRAY_COUNT(gAudioCtx.asyncLoads)) {
return NULL;
}
@@ -1601,29 +1595,29 @@ void AudioLoad_ProcessAsyncLoads(s32 resetStatus) {
AudioAsyncLoad* asyncLoad;
s32 i;
- if (gAudioContext.resetTimer == 1) {
+ if (gAudioCtx.resetTimer == 1) {
return;
}
- if (gAudioContext.curUnkMediumLoad == NULL) {
+ if (gAudioCtx.curUnkMediumLoad == NULL) {
if (resetStatus != 0) {
// Clear and ignore queue if resetting.
do {
- } while (osRecvMesg(&gAudioContext.asyncLoadUnkMediumQueue, (OSMesg*)&asyncLoad, OS_MESG_NOBLOCK) != -1);
- } else if (osRecvMesg(&gAudioContext.asyncLoadUnkMediumQueue, (OSMesg*)&asyncLoad, OS_MESG_NOBLOCK) == -1) {
- gAudioContext.curUnkMediumLoad = NULL;
+ } while (osRecvMesg(&gAudioCtx.asyncLoadUnkMediumQueue, (OSMesg*)&asyncLoad, OS_MESG_NOBLOCK) != -1);
+ } else if (osRecvMesg(&gAudioCtx.asyncLoadUnkMediumQueue, (OSMesg*)&asyncLoad, OS_MESG_NOBLOCK) == -1) {
+ gAudioCtx.curUnkMediumLoad = NULL;
} else {
- gAudioContext.curUnkMediumLoad = asyncLoad;
+ gAudioCtx.curUnkMediumLoad = asyncLoad;
}
}
- if (gAudioContext.curUnkMediumLoad != NULL) {
- AudioLoad_ProcessAsyncLoadUnkMedium(gAudioContext.curUnkMediumLoad, resetStatus);
+ if (gAudioCtx.curUnkMediumLoad != NULL) {
+ AudioLoad_ProcessAsyncLoadUnkMedium(gAudioCtx.curUnkMediumLoad, resetStatus);
}
- for (i = 0; i < ARRAY_COUNT(gAudioContext.asyncLoads); i++) {
- if (gAudioContext.asyncLoads[i].status == 1) {
- asyncLoad = &gAudioContext.asyncLoads[i];
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.asyncLoads); i++) {
+ if (gAudioCtx.asyncLoads[i].status == 1) {
+ asyncLoad = &gAudioCtx.asyncLoads[i];
if (asyncLoad->medium != MEDIUM_UNK) {
AudioLoad_ProcessAsyncLoad(asyncLoad, resetStatus);
}
@@ -1653,8 +1647,8 @@ void AudioLoad_FinishAsyncLoad(AudioAsyncLoad* asyncLoad) {
break;
case FONT_TABLE:
fontId = ASYNC_ID(retMsg);
- sampleBankId1 = gAudioContext.soundFontList[fontId].sampleBankId1;
- sampleBankId2 = gAudioContext.soundFontList[fontId].sampleBankId2;
+ sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
+ sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
sampleBankReloc.sampleBankId1 = sampleBankId1;
sampleBankReloc.sampleBankId2 = sampleBankId2;
sampleBankReloc.baseAddr1 =
@@ -1673,7 +1667,7 @@ void AudioLoad_FinishAsyncLoad(AudioAsyncLoad* asyncLoad) {
}
void AudioLoad_ProcessAsyncLoad(AudioAsyncLoad* asyncLoad, s32 resetStatus) {
- AudioTable* sampleBankTable = gAudioContext.sampleBankTable;
+ AudioTable* sampleBankTable = gAudioCtx.sampleBankTable;
if (asyncLoad->delay >= 2) {
asyncLoad->delay--;
@@ -1797,7 +1791,7 @@ void AudioLoad_RelocateSample(TunedSample* tunedSample, SoundFontData* fontData,
sample->isRelocated = true;
if (sample->unk_bit26 && (sample->medium != MEDIUM_RAM)) {
- gAudioContext.usedSamples[gAudioContext.numUsedSamples++] = sample;
+ gAudioCtx.usedSamples[gAudioCtx.numUsedSamples++] = sample;
}
}
}
@@ -1823,27 +1817,27 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* fontData
s32 i;
preloadInProgress = false;
- if (gAudioContext.preloadSampleStackTop != 0) {
+ if (gAudioCtx.preloadSampleStackTop != 0) {
preloadInProgress = true;
} else {
D_801FD1E0 = 0;
}
- gAudioContext.numUsedSamples = 0;
+ gAudioCtx.numUsedSamples = 0;
AudioLoad_RelocateFont(fontId, fontData, sampleBankReloc);
size = 0;
- for (i = 0; i < gAudioContext.numUsedSamples; i++) {
- size += ALIGN16(gAudioContext.usedSamples[i]->size);
+ for (i = 0; i < gAudioCtx.numUsedSamples; i++) {
+ size += ALIGN16(gAudioCtx.usedSamples[i]->size);
}
if (size && size) {}
- for (i = 0; i < gAudioContext.numUsedSamples; i++) {
- if (gAudioContext.preloadSampleStackTop == 120) {
+ for (i = 0; i < gAudioCtx.numUsedSamples; i++) {
+ if (gAudioCtx.preloadSampleStackTop == 120) {
break;
}
- sample = gAudioContext.usedSamples[i];
+ sample = gAudioCtx.usedSamples[i];
sampleRamAddr = NULL;
switch (isAsync) {
case false:
@@ -1883,7 +1877,7 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* fontData
case false:
if (sample->medium == MEDIUM_UNK) {
AudioLoad_SyncDmaUnkMedium((uintptr_t)sample->sampleAddr, sampleRamAddr, sample->size,
- gAudioContext.sampleBankTable->unkMediumParam);
+ gAudioCtx.sampleBankTable->unkMediumParam);
sample->sampleAddr = sampleRamAddr;
sample->medium = MEDIUM_RAM;
} else {
@@ -1895,27 +1889,27 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* fontData
break;
case true:
- preload = &gAudioContext.preloadSampleStack[gAudioContext.preloadSampleStackTop];
+ preload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop];
preload->sample = sample;
preload->ramAddr = sampleRamAddr;
- preload->encodedInfo = (gAudioContext.preloadSampleStackTop << 24) | 0xFFFFFF;
+ preload->encodedInfo = (gAudioCtx.preloadSampleStackTop << 24) | 0xFFFFFF;
preload->isFree = false;
preload->endAndMediumKey = (uintptr_t)sample->sampleAddr + sample->size + sample->medium;
- gAudioContext.preloadSampleStackTop++;
+ gAudioCtx.preloadSampleStackTop++;
break;
default:
break;
}
}
- gAudioContext.numUsedSamples = 0;
+ gAudioCtx.numUsedSamples = 0;
- if (gAudioContext.preloadSampleStackTop != 0 && !preloadInProgress) {
- topPreload = &gAudioContext.preloadSampleStack[gAudioContext.preloadSampleStackTop - 1];
+ if (gAudioCtx.preloadSampleStackTop != 0 && !preloadInProgress) {
+ topPreload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop - 1];
sample = topPreload->sample;
nChunks = (sample->size >> 12) + 1;
AudioLoad_StartAsyncLoad((uintptr_t)sample->sampleAddr, topPreload->ramAddr, sample->size, sample->medium,
- nChunks, &gAudioContext.preloadSampleQueue, topPreload->encodedInfo);
+ nChunks, &gAudioCtx.preloadSampleQueue, topPreload->encodedInfo);
}
}
@@ -1927,20 +1921,20 @@ s32 AudioLoad_ProcessSamplePreloads(s32 resetStatus) {
u32 nChunks;
s32 pad;
- if (gAudioContext.preloadSampleStackTop > 0) {
+ if (gAudioCtx.preloadSampleStackTop > 0) {
if (resetStatus != 0) {
// Clear result queue and preload stack and return.
- osRecvMesg(&gAudioContext.preloadSampleQueue, (OSMesg*)&preloadIndex, OS_MESG_NOBLOCK);
- gAudioContext.preloadSampleStackTop = 0;
+ osRecvMesg(&gAudioCtx.preloadSampleQueue, (OSMesg*)&preloadIndex, OS_MESG_NOBLOCK);
+ gAudioCtx.preloadSampleStackTop = 0;
return false;
}
- if (osRecvMesg(&gAudioContext.preloadSampleQueue, (OSMesg*)&preloadIndex, OS_MESG_NOBLOCK) == -1) {
+ if (osRecvMesg(&gAudioCtx.preloadSampleQueue, (OSMesg*)&preloadIndex, OS_MESG_NOBLOCK) == -1) {
// Previous preload is not done yet.
return false;
}
preloadIndex >>= 24;
- preload = &gAudioContext.preloadSampleStack[preloadIndex];
+ preload = &gAudioCtx.preloadSampleStack[preloadIndex];
if (preload->isFree == false) {
sample = preload->sample;
@@ -1956,12 +1950,12 @@ s32 AudioLoad_ProcessSamplePreloads(s32 resetStatus) {
// Pop requests with isFree = true off the stack, as far as possible,
// and dispatch the next DMA.
for (;;) {
- if (gAudioContext.preloadSampleStackTop <= 0) {
+ if (gAudioCtx.preloadSampleStackTop <= 0) {
break;
}
- preload = &gAudioContext.preloadSampleStack[gAudioContext.preloadSampleStackTop - 1];
+ preload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop - 1];
if (preload->isFree == true) {
- gAudioContext.preloadSampleStackTop--;
+ gAudioCtx.preloadSampleStackTop--;
continue;
}
@@ -1970,10 +1964,10 @@ s32 AudioLoad_ProcessSamplePreloads(s32 resetStatus) {
key = (uintptr_t)sample->sampleAddr + sample->size + sample->medium;
if (key != preload->endAndMediumKey) {
preload->isFree = true;
- gAudioContext.preloadSampleStackTop--;
+ gAudioCtx.preloadSampleStackTop--;
} else {
AudioLoad_StartAsyncLoad((uintptr_t)sample->sampleAddr, preload->ramAddr, sample->size, sample->medium,
- nChunks, &gAudioContext.preloadSampleQueue, preload->encodedInfo);
+ nChunks, &gAudioCtx.preloadSampleQueue, preload->encodedInfo);
break;
}
}
@@ -2001,8 +1995,8 @@ s32 AudioLoad_AddToSampleSet(Sample* sample, s32 numSamples, Sample** sampleSet)
s32 AudioLoad_GetSamplesForFont(s32 fontId, Sample** sampleSet) {
s32 i;
s32 numSamples = 0;
- s32 numDrums = gAudioContext.soundFontList[fontId].numDrums;
- s32 numInstruments = gAudioContext.soundFontList[fontId].numInstruments;
+ s32 numDrums = gAudioCtx.soundFontList[fontId].numDrums;
+ s32 numInstruments = gAudioCtx.soundFontList[fontId].numInstruments;
for (i = 0; i < numDrums; i++) {
Drum* drum = AudioPlayback_GetDrum(fontId, i);
@@ -2035,7 +2029,7 @@ void AudioLoad_AddUsedSample(TunedSample* tunedSample) {
Sample* sample = tunedSample->sample;
if ((sample->size != 0) && (sample->unk_bit26) && (sample->medium != MEDIUM_RAM)) {
- gAudioContext.usedSamples[gAudioContext.numUsedSamples++] = sample;
+ gAudioCtx.usedSamples[gAudioCtx.numUsedSamples++] = sample;
}
}
@@ -2056,15 +2050,15 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, SampleBankRelocInfo*
s32 nChunks;
preloadInProgress = false;
- if (gAudioContext.preloadSampleStackTop != 0) {
+ if (gAudioCtx.preloadSampleStackTop != 0) {
preloadInProgress = true;
}
- gAudioContext.numUsedSamples = 0;
+ gAudioCtx.numUsedSamples = 0;
- numDrums = gAudioContext.soundFontList[fontId].numDrums;
- numInstruments = gAudioContext.soundFontList[fontId].numInstruments;
- numSfx = gAudioContext.soundFontList[fontId].numSfx;
+ numDrums = gAudioCtx.soundFontList[fontId].numDrums;
+ numInstruments = gAudioCtx.soundFontList[fontId].numInstruments;
+ numSfx = gAudioCtx.soundFontList[fontId].numSfx;
for (i = 0; i < numInstruments; i++) {
instrument = AudioPlayback_GetInstrumentInner(fontId, i);
@@ -2093,22 +2087,22 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, SampleBankRelocInfo*
}
}
- if (gAudioContext.numUsedSamples == 0) {
+ if (gAudioCtx.numUsedSamples == 0) {
return;
}
size = 0;
- for (i = 0; i < gAudioContext.numUsedSamples; i++) {
- size += ALIGN16(gAudioContext.usedSamples[i]->size);
+ for (i = 0; i < gAudioCtx.numUsedSamples; i++) {
+ size += ALIGN16(gAudioCtx.usedSamples[i]->size);
}
if (size) {}
- for (i = 0; i < gAudioContext.numUsedSamples; i++) {
- if (gAudioContext.preloadSampleStackTop == 120) {
+ for (i = 0; i < gAudioCtx.numUsedSamples; i++) {
+ if (gAudioCtx.preloadSampleStackTop == 120) {
break;
}
- sample = gAudioContext.usedSamples[i];
+ sample = gAudioCtx.usedSamples[i];
if (sample->medium == MEDIUM_RAM) {
continue;
}
@@ -2142,7 +2136,7 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, SampleBankRelocInfo*
case false:
if (sample->medium == MEDIUM_UNK) {
AudioLoad_SyncDmaUnkMedium((uintptr_t)sample->sampleAddr, addr, sample->size,
- gAudioContext.sampleBankTable->unkMediumParam);
+ gAudioCtx.sampleBankTable->unkMediumParam);
sample->sampleAddr = addr;
sample->medium = MEDIUM_RAM;
} else {
@@ -2153,24 +2147,24 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, SampleBankRelocInfo*
break;
case true:
- preload = &gAudioContext.preloadSampleStack[gAudioContext.preloadSampleStackTop];
+ preload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop];
preload->sample = sample;
preload->ramAddr = addr;
- preload->encodedInfo = (gAudioContext.preloadSampleStackTop << 24) | 0xFFFFFF;
+ preload->encodedInfo = (gAudioCtx.preloadSampleStackTop << 24) | 0xFFFFFF;
preload->isFree = false;
preload->endAndMediumKey = (uintptr_t)sample->sampleAddr + sample->size + sample->medium;
- gAudioContext.preloadSampleStackTop++;
+ gAudioCtx.preloadSampleStackTop++;
break;
}
}
- gAudioContext.numUsedSamples = 0;
+ gAudioCtx.numUsedSamples = 0;
- if (gAudioContext.preloadSampleStackTop != 0 && !preloadInProgress) {
- topPreload = &gAudioContext.preloadSampleStack[gAudioContext.preloadSampleStackTop - 1];
+ if (gAudioCtx.preloadSampleStackTop != 0 && !preloadInProgress) {
+ topPreload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop - 1];
sample = topPreload->sample;
nChunks = (sample->size >> 12) + 1;
AudioLoad_StartAsyncLoad((uintptr_t)sample->sampleAddr, topPreload->ramAddr, sample->size, sample->medium,
- nChunks, &gAudioContext.preloadSampleQueue, topPreload->encodedInfo);
+ nChunks, &gAudioCtx.preloadSampleQueue, topPreload->encodedInfo);
}
}
@@ -2182,13 +2176,13 @@ void AudioLoad_LoadPermanentSamples(void) {
s32 i;
sampleBankTable = AudioLoad_GetLoadTable(SAMPLE_TABLE);
- for (i = 0; i < gAudioContext.permanentPool.count; i++) {
+ for (i = 0; i < gAudioCtx.permanentPool.count; i++) {
SampleBankRelocInfo sampleBankReloc;
- if (gAudioContext.permanentEntries[i].tableType == FONT_TABLE) {
- fontId = AudioLoad_GetRealTableIndex(FONT_TABLE, gAudioContext.permanentEntries[i].id);
- sampleBankReloc.sampleBankId1 = gAudioContext.soundFontList[fontId].sampleBankId1;
- sampleBankReloc.sampleBankId2 = gAudioContext.soundFontList[fontId].sampleBankId2;
+ if (gAudioCtx.permanentEntries[i].tableType == FONT_TABLE) {
+ fontId = AudioLoad_GetRealTableIndex(FONT_TABLE, gAudioCtx.permanentEntries[i].id);
+ sampleBankReloc.sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
+ sampleBankReloc.sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
if (sampleBankReloc.sampleBankId1 != 0xFF) {
sampleBankReloc.sampleBankId1 =
diff --git a/src/code/audio/audio_playback.c b/src/code/audio/audio_playback.c
index a7cc9a588..07315d56e 100644
--- a/src/code/audio/audio_playback.c
+++ b/src/code/audio/audio_playback.c
@@ -35,7 +35,7 @@ void AudioPlayback_InitSampleState(Note* note, NoteSampleState* sampleState, Not
sampleState->bitField0.strongLeft = false;
sampleState->bitField0.strongReverbRight = stereoData.strongReverbRight;
sampleState->bitField0.strongReverbLeft = stereoData.strongReverbLeft;
- if (stereoHeadsetEffects && (gAudioContext.soundMode == SOUNDMODE_HEADSET)) {
+ if (stereoHeadsetEffects && (gAudioCtx.soundMode == SOUNDMODE_HEADSET)) {
halfPanIndex = pan >> 1;
if (halfPanIndex > 0x3F) {
halfPanIndex = 0x3F;
@@ -47,7 +47,7 @@ void AudioPlayback_InitSampleState(Note* note, NoteSampleState* sampleState, Not
volLeft = gHeadsetPanVolume[pan];
volRight = gHeadsetPanVolume[0x7F - pan];
- } else if (stereoHeadsetEffects && (gAudioContext.soundMode == SOUNDMODE_STEREO)) {
+ } else if (stereoHeadsetEffects && (gAudioCtx.soundMode == SOUNDMODE_STEREO)) {
strongLeft = strongRight = false;
sampleState->haasEffectLeftDelaySize = 0;
sampleState->haasEffectRightDelaySize = 0;
@@ -85,7 +85,7 @@ void AudioPlayback_InitSampleState(Note* note, NoteSampleState* sampleState, Not
break;
}
- } else if (gAudioContext.soundMode == SOUNDMODE_MONO) {
+ } else if (gAudioCtx.soundMode == SOUNDMODE_MONO) {
sampleState->bitField0.strongReverbRight = false;
sampleState->bitField0.strongReverbLeft = false;
volLeft = 0.707f; // approx 1/sqrt(2)
@@ -170,9 +170,9 @@ void AudioPlayback_ProcessNotes(void) {
f32 scale;
s32 i;
- for (i = 0; i < gAudioContext.numNotes; i++) {
- note = &gAudioContext.notes[i];
- sampleState = &gAudioContext.sampleStateList[gAudioContext.sampleStateOffset + i];
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ note = &gAudioCtx.notes[i];
+ sampleState = &gAudioCtx.sampleStateList[gAudioCtx.sampleStateOffset + i];
playbackState = ¬e->playbackState;
if (playbackState->parentLayer != NO_LAYER) {
if ((u32)playbackState->parentLayer < 0x7FFFFFFF) {
@@ -181,7 +181,7 @@ void AudioPlayback_ProcessNotes(void) {
if ((note != playbackState->parentLayer->note) && (playbackState->status == PLAYBACK_STATUS_0)) {
playbackState->adsr.action.s.release = true;
- playbackState->adsr.fadeOutVel = gAudioContext.audioBufferParameters.updatesPerFrameInv;
+ playbackState->adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv;
playbackState->priority = 1;
playbackState->status = PLAYBACK_STATUS_2;
goto out;
@@ -316,7 +316,7 @@ void AudioPlayback_ProcessNotes(void) {
}
subAttrs.frequency *= playbackState->vibratoFreqScale * playbackState->portamentoFreqScale;
- subAttrs.frequency *= gAudioContext.audioBufferParameters.resampleRate;
+ subAttrs.frequency *= gAudioCtx.audioBufferParameters.resampleRate;
subAttrs.velocity *= scale;
AudioPlayback_InitSampleState(note, sampleState, &subAttrs);
noteSampleState->bitField1.bookOffset = bookOffset;
@@ -347,18 +347,18 @@ Instrument* AudioPlayback_GetInstrumentInner(s32 fontId, s32 instId) {
}
if (!AudioLoad_IsFontLoadComplete(fontId)) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(0, fontId, AUDIO_ERROR_FONT_NOT_LOADED);
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(0, fontId, AUDIO_ERROR_FONT_NOT_LOADED);
return NULL;
}
- if (instId >= gAudioContext.soundFontList[fontId].numInstruments) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(fontId, instId, AUDIO_ERROR_INVALID_INST_ID);
+ if (instId >= gAudioCtx.soundFontList[fontId].numInstruments) {
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(fontId, instId, AUDIO_ERROR_INVALID_INST_ID);
return NULL;
}
- inst = gAudioContext.soundFontList[fontId].instruments[instId];
+ inst = gAudioCtx.soundFontList[fontId].instruments[instId];
if (inst == NULL) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(fontId, instId, AUDIO_ERROR_NO_INST);
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(fontId, instId, AUDIO_ERROR_NO_INST);
return inst;
}
@@ -373,21 +373,21 @@ Drum* AudioPlayback_GetDrum(s32 fontId, s32 drumId) {
}
if (!AudioLoad_IsFontLoadComplete(fontId)) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(0, fontId, AUDIO_ERROR_FONT_NOT_LOADED);
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(0, fontId, AUDIO_ERROR_FONT_NOT_LOADED);
return NULL;
}
- if (drumId >= gAudioContext.soundFontList[fontId].numDrums) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(fontId, drumId, AUDIO_ERROR_INVALID_DRUM_SFX_ID);
+ if (drumId >= gAudioCtx.soundFontList[fontId].numDrums) {
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(fontId, drumId, AUDIO_ERROR_INVALID_DRUM_SFX_ID);
return NULL;
}
- if ((u32)gAudioContext.soundFontList[fontId].drums < AUDIO_RELOCATED_ADDRESS_START) {
+ if ((u32)gAudioCtx.soundFontList[fontId].drums < AUDIO_RELOCATED_ADDRESS_START) {
return NULL;
}
- drum = gAudioContext.soundFontList[fontId].drums[drumId];
+ drum = gAudioCtx.soundFontList[fontId].drums[drumId];
if (drum == NULL) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(fontId, drumId, AUDIO_ERROR_NO_DRUM_SFX);
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(fontId, drumId, AUDIO_ERROR_NO_DRUM_SFX);
}
return drum;
@@ -401,23 +401,23 @@ SoundEffect* AudioPlayback_GetSoundEffect(s32 fontId, s32 sfxId) {
}
if (!AudioLoad_IsFontLoadComplete(fontId)) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(0, fontId, AUDIO_ERROR_FONT_NOT_LOADED);
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(0, fontId, AUDIO_ERROR_FONT_NOT_LOADED);
return NULL;
}
- if (sfxId >= gAudioContext.soundFontList[fontId].numSfx) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(fontId, sfxId, AUDIO_ERROR_INVALID_DRUM_SFX_ID);
+ if (sfxId >= gAudioCtx.soundFontList[fontId].numSfx) {
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(fontId, sfxId, AUDIO_ERROR_INVALID_DRUM_SFX_ID);
return NULL;
}
- if ((u32)gAudioContext.soundFontList[fontId].soundEffects < AUDIO_RELOCATED_ADDRESS_START) {
+ if ((u32)gAudioCtx.soundFontList[fontId].soundEffects < AUDIO_RELOCATED_ADDRESS_START) {
return NULL;
}
- soundEffect = &gAudioContext.soundFontList[fontId].soundEffects[sfxId];
+ soundEffect = &gAudioCtx.soundFontList[fontId].soundEffects[sfxId];
if (soundEffect == NULL) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(fontId, sfxId, AUDIO_ERROR_NO_DRUM_SFX);
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(fontId, sfxId, AUDIO_ERROR_NO_DRUM_SFX);
}
if (soundEffect->tunedSample.sample == NULL) {
@@ -438,24 +438,24 @@ s32 AudioPlayback_SetFontInstrument(s32 instrumentType, s32 fontId, s32 index, v
switch (instrumentType) {
case 0:
- if (index >= gAudioContext.soundFontList[fontId].numDrums) {
+ if (index >= gAudioCtx.soundFontList[fontId].numDrums) {
return -3;
}
- gAudioContext.soundFontList[fontId].drums[index] = value;
+ gAudioCtx.soundFontList[fontId].drums[index] = value;
break;
case 1:
- if (index >= gAudioContext.soundFontList[fontId].numSfx) {
+ if (index >= gAudioCtx.soundFontList[fontId].numSfx) {
return -3;
}
- gAudioContext.soundFontList[fontId].soundEffects[index] = *(SoundEffect*)value;
+ gAudioCtx.soundFontList[fontId].soundEffects[index] = *(SoundEffect*)value;
break;
default:
- if (index >= gAudioContext.soundFontList[fontId].numInstruments) {
+ if (index >= gAudioCtx.soundFontList[fontId].numInstruments) {
return -3;
}
- gAudioContext.soundFontList[fontId].instruments[index] = value;
+ gAudioCtx.soundFontList[fontId].instruments[index] = value;
break;
}
@@ -488,7 +488,7 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) {
if (note->playbackState.parentLayer != layer) {
if (note->playbackState.parentLayer == NO_LAYER && note->playbackState.wantedParentLayer == NO_LAYER &&
note->playbackState.prevParentLayer == layer && target != ADSR_STATE_DECAY) {
- note->playbackState.adsr.fadeOutVel = gAudioContext.audioBufferParameters.updatesPerFrameInv;
+ note->playbackState.adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv;
note->playbackState.adsr.action.s.release = true;
}
return;
@@ -549,16 +549,16 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) {
note->playbackState.prevParentLayer = note->playbackState.parentLayer;
note->playbackState.parentLayer = NO_LAYER;
if (target == ADSR_STATE_RELEASE) {
- note->playbackState.adsr.fadeOutVel = gAudioContext.audioBufferParameters.updatesPerFrameInv;
+ note->playbackState.adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv;
note->playbackState.adsr.action.s.release = true;
note->playbackState.status = PLAYBACK_STATUS_2;
} else {
note->playbackState.status = PLAYBACK_STATUS_1;
note->playbackState.adsr.action.s.decay = true;
if (layer->adsr.decayIndex == 0) {
- note->playbackState.adsr.fadeOutVel = gAudioContext.adsrDecayTable[layer->channel->adsr.decayIndex];
+ note->playbackState.adsr.fadeOutVel = gAudioCtx.adsrDecayTable[layer->channel->adsr.decayIndex];
} else {
- note->playbackState.adsr.fadeOutVel = gAudioContext.adsrDecayTable[layer->adsr.decayIndex];
+ note->playbackState.adsr.fadeOutVel = gAudioCtx.adsrDecayTable[layer->adsr.decayIndex];
}
note->playbackState.adsr.sustain =
((f32)(s32)(layer->channel->adsr.sustain) * note->playbackState.adsr.current) / 256.0f;
@@ -665,11 +665,11 @@ void AudioPlayback_InitNoteLists(NotePool* pool) {
void AudioPlayback_InitNoteFreeList(void) {
s32 i;
- AudioPlayback_InitNoteLists(&gAudioContext.noteFreeLists);
- for (i = 0; i < gAudioContext.numNotes; i++) {
- gAudioContext.notes[i].listItem.u.value = &gAudioContext.notes[i];
- gAudioContext.notes[i].listItem.prev = NULL;
- AudioSeq_AudioListPushBack(&gAudioContext.noteFreeLists.disabled, &gAudioContext.notes[i].listItem);
+ AudioPlayback_InitNoteLists(&gAudioCtx.noteFreeLists);
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ gAudioCtx.notes[i].listItem.u.value = &gAudioCtx.notes[i];
+ gAudioCtx.notes[i].listItem.prev = NULL;
+ AudioSeq_AudioListPushBack(&gAudioCtx.noteFreeLists.disabled, &gAudioCtx.notes[i].listItem);
}
}
@@ -683,22 +683,22 @@ void AudioPlayback_NotePoolClear(NotePool* pool) {
switch (i) {
case 0:
source = &pool->disabled;
- dest = &gAudioContext.noteFreeLists.disabled;
+ dest = &gAudioCtx.noteFreeLists.disabled;
break;
case 1:
source = &pool->decaying;
- dest = &gAudioContext.noteFreeLists.decaying;
+ dest = &gAudioCtx.noteFreeLists.decaying;
break;
case 2:
source = &pool->releasing;
- dest = &gAudioContext.noteFreeLists.releasing;
+ dest = &gAudioCtx.noteFreeLists.releasing;
break;
case 3:
source = &pool->active;
- dest = &gAudioContext.noteFreeLists.active;
+ dest = &gAudioCtx.noteFreeLists.active;
break;
}
@@ -729,22 +729,22 @@ void AudioPlayback_NotePoolFill(NotePool* pool, s32 count) {
switch (i) {
case 0:
- source = &gAudioContext.noteFreeLists.disabled;
+ source = &gAudioCtx.noteFreeLists.disabled;
dest = &pool->disabled;
break;
case 1:
- source = &gAudioContext.noteFreeLists.decaying;
+ source = &gAudioCtx.noteFreeLists.decaying;
dest = &pool->decaying;
break;
case 2:
- source = &gAudioContext.noteFreeLists.releasing;
+ source = &gAudioCtx.noteFreeLists.releasing;
dest = &pool->releasing;
break;
case 3:
- source = &gAudioContext.noteFreeLists.active;
+ source = &gAudioCtx.noteFreeLists.active;
dest = &pool->active;
break;
}
@@ -862,7 +862,7 @@ void AudioPlayback_NoteReleaseAndTakeOwnership(Note* note, SequenceLayer* layer)
note->playbackState.wantedParentLayer = layer;
note->playbackState.priority = layer->channel->notePriority;
- note->playbackState.adsr.fadeOutVel = gAudioContext.audioBufferParameters.updatesPerFrameInv;
+ note->playbackState.adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv;
note->playbackState.adsr.action.s.release = true;
}
@@ -958,9 +958,9 @@ Note* AudioPlayback_AllocNote(SequenceLayer* layer) {
}
if (policy & 8) {
- if (!(note = AudioPlayback_AllocNoteFromDisabled(&gAudioContext.noteFreeLists, layer)) &&
- !(note = AudioPlayback_AllocNoteFromDecaying(&gAudioContext.noteFreeLists, layer)) &&
- !(note = AudioPlayback_AllocNoteFromActive(&gAudioContext.noteFreeLists, layer))) {
+ if (!(note = AudioPlayback_AllocNoteFromDisabled(&gAudioCtx.noteFreeLists, layer)) &&
+ !(note = AudioPlayback_AllocNoteFromDecaying(&gAudioCtx.noteFreeLists, layer)) &&
+ !(note = AudioPlayback_AllocNoteFromActive(&gAudioCtx.noteFreeLists, layer))) {
goto null_return;
}
return note;
@@ -968,13 +968,13 @@ Note* AudioPlayback_AllocNote(SequenceLayer* layer) {
if (!(note = AudioPlayback_AllocNoteFromDisabled(&layer->channel->notePool, layer)) &&
!(note = AudioPlayback_AllocNoteFromDisabled(&layer->channel->seqPlayer->notePool, layer)) &&
- !(note = AudioPlayback_AllocNoteFromDisabled(&gAudioContext.noteFreeLists, layer)) &&
+ !(note = AudioPlayback_AllocNoteFromDisabled(&gAudioCtx.noteFreeLists, layer)) &&
!(note = AudioPlayback_AllocNoteFromDecaying(&layer->channel->notePool, layer)) &&
!(note = AudioPlayback_AllocNoteFromDecaying(&layer->channel->seqPlayer->notePool, layer)) &&
- !(note = AudioPlayback_AllocNoteFromDecaying(&gAudioContext.noteFreeLists, layer)) &&
+ !(note = AudioPlayback_AllocNoteFromDecaying(&gAudioCtx.noteFreeLists, layer)) &&
!(note = AudioPlayback_AllocNoteFromActive(&layer->channel->notePool, layer)) &&
!(note = AudioPlayback_AllocNoteFromActive(&layer->channel->seqPlayer->notePool, layer)) &&
- !(note = AudioPlayback_AllocNoteFromActive(&gAudioContext.noteFreeLists, layer))) {
+ !(note = AudioPlayback_AllocNoteFromActive(&gAudioCtx.noteFreeLists, layer))) {
goto null_return;
}
return note;
@@ -988,8 +988,8 @@ void AudioPlayback_NoteInitAll(void) {
Note* note;
s32 i;
- for (i = 0; i < gAudioContext.numNotes; i++) {
- note = &gAudioContext.notes[i];
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ note = &gAudioCtx.notes[i];
note->sampleState = gZeroedSampleState;
note->playbackState.priority = 0;
note->playbackState.status = PLAYBACK_STATUS_0;
@@ -1006,7 +1006,7 @@ void AudioPlayback_NoteInitAll(void) {
note->playbackState.stereoHeadsetEffects = false;
note->playbackState.startSamplePos = 0;
note->synthesisState.synthesisBuffers =
- AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, sizeof(NoteSynthesisBuffers));
- note->playbackState.attributes.filterBuf = AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, FILTER_SIZE);
+ AudioHeap_AllocDmaMemory(&gAudioCtx.miscPool, sizeof(NoteSynthesisBuffers));
+ note->playbackState.attributes.filterBuf = AudioHeap_AllocDmaMemory(&gAudioCtx.miscPool, FILTER_SIZE);
}
}
diff --git a/src/code/audio/audio_seqplayer.c b/src/code/audio/audio_seqplayer.c
index bc5115f8f..099f646fe 100644
--- a/src/code/audio/audio_seqplayer.c
+++ b/src/code/audio/audio_seqplayer.c
@@ -269,7 +269,7 @@ s32 AudioSeq_HandleScriptFlowControl(SequencePlayer* seqPlayer, SeqScriptState*
void AudioSeq_InitSequenceChannel(SequenceChannel* channel) {
s32 i;
- if (channel == &gAudioContext.sequenceChannelNone) {
+ if (channel == &gAudioCtx.sequenceChannelNone) {
return;
}
@@ -330,7 +330,7 @@ s32 AudioSeq_SeqChannelSetLayer(SequenceChannel* channel, s32 layerIndex) {
s32 pad;
if (channel->layers[layerIndex] == NULL) {
- layer = AudioSeq_AudioListPopBack(&gAudioContext.layerFreeList);
+ layer = AudioSeq_AudioListPopBack(&gAudioCtx.layerFreeList);
channel->layers[layerIndex] = layer;
if (layer == NULL) {
channel->layers[layerIndex] = NULL;
@@ -384,7 +384,7 @@ s32 AudioSeq_SeqChannelSetLayer(SequenceChannel* channel, s32 layerIndex) {
void AudioSeq_SeqLayerDisable(SequenceLayer* layer) {
if (layer != NULL) {
- if ((layer->channel != &gAudioContext.sequenceChannelNone) && (layer->channel->seqPlayer->finished == true)) {
+ if ((layer->channel != &gAudioCtx.sequenceChannelNone) && (layer->channel->seqPlayer->finished == true)) {
AudioPlayback_SeqLayerNoteRelease(layer);
} else {
AudioPlayback_SeqLayerNoteDecay(layer);
@@ -398,7 +398,7 @@ void AudioSeq_SeqLayerFree(SequenceChannel* channel, s32 layerIndex) {
SequenceLayer* layer = channel->layers[layerIndex];
if (layer != NULL) {
- AudioSeq_AudioListPushBack(&gAudioContext.layerFreeList, &layer->listItem);
+ AudioSeq_AudioListPushBack(&gAudioCtx.layerFreeList, &layer->listItem);
AudioSeq_SeqLayerDisable(layer);
channel->layers[layerIndex] = NULL;
}
@@ -484,10 +484,10 @@ void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
AudioLoad_SetFontLoadStatus(seqPlayer->defaultFont, LOAD_STATUS_MAYBE_DISCARDABLE);
}
- if (seqPlayer->defaultFont == gAudioContext.fontCache.temporary.entries[0].id) {
- gAudioContext.fontCache.temporary.nextSide = 1;
- } else if (seqPlayer->defaultFont == gAudioContext.fontCache.temporary.entries[1].id) {
- gAudioContext.fontCache.temporary.nextSide = 0;
+ if (seqPlayer->defaultFont == gAudioCtx.fontCache.temporary.entries[0].id) {
+ gAudioCtx.fontCache.temporary.nextSide = 1;
+ } else if (seqPlayer->defaultFont == gAudioCtx.fontCache.temporary.entries[1].id) {
+ gAudioCtx.fontCache.temporary.nextSide = 0;
}
}
@@ -520,15 +520,15 @@ void* AudioSeq_AudioListPopBack(AudioListItem* list) {
void AudioSeq_InitLayerFreelist(void) {
s32 i;
- gAudioContext.layerFreeList.prev = &gAudioContext.layerFreeList;
- gAudioContext.layerFreeList.next = &gAudioContext.layerFreeList;
- gAudioContext.layerFreeList.u.count = 0;
- gAudioContext.layerFreeList.pool = NULL;
+ gAudioCtx.layerFreeList.prev = &gAudioCtx.layerFreeList;
+ gAudioCtx.layerFreeList.next = &gAudioCtx.layerFreeList;
+ gAudioCtx.layerFreeList.u.count = 0;
+ gAudioCtx.layerFreeList.pool = NULL;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.sequenceLayers); i++) {
- gAudioContext.sequenceLayers[i].listItem.u.value = &gAudioContext.sequenceLayers[i];
- gAudioContext.sequenceLayers[i].listItem.prev = NULL;
- AudioSeq_AudioListPushBack(&gAudioContext.layerFreeList, &gAudioContext.sequenceLayers[i].listItem);
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.sequenceLayers); i++) {
+ gAudioCtx.sequenceLayers[i].listItem.u.value = &gAudioCtx.sequenceLayers[i];
+ gAudioCtx.sequenceLayers[i].listItem.prev = NULL;
+ AudioSeq_AudioListPushBack(&gAudioCtx.layerFreeList, &gAudioCtx.sequenceLayers[i].listItem);
}
}
@@ -918,7 +918,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
layer->tunedSample = NULL;
tuning = 1.0f;
if (instOrWave >= 0xC0) {
- layer->tunedSample = &gAudioContext.synthesisReverbs[instOrWave - 0xC0].tunedSample;
+ layer->tunedSample = &gAudioCtx.synthesisReverbs[instOrWave - 0xC0].tunedSample;
}
}
@@ -948,12 +948,12 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
portamento->extent = (freqScale2 / freqScale) - 1.0f;
if (PORTAMENTO_IS_SPECIAL(*portamento)) {
- speed = seqPlayer->tempo * 0x8000 / gAudioContext.tempoInternalToExternal;
+ speed = seqPlayer->tempo * 0x8000 / gAudioCtx.tempoInternalToExternal;
if (layer->delay != 0) {
speed = speed * 0x100 / (layer->delay * layer->portamentoTime);
}
} else {
- speed = 0x20000 / (layer->portamentoTime * gAudioContext.audioBufferParameters.updatesPerFrame);
+ speed = 0x20000 / (layer->portamentoTime * gAudioCtx.audioBufferParameters.updatesPerFrame);
}
if (speed >= 0x7FFF) {
@@ -980,7 +980,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
layer->tunedSample = NULL;
layer->freqScale = gPitchFrequencies[semitone2];
if (instOrWave >= 0xC0) {
- layer->tunedSample = &gAudioContext.synthesisReverbs[instOrWave - 0xC0].tunedSample;
+ layer->tunedSample = &gAudioCtx.synthesisReverbs[instOrWave - 0xC0].tunedSample;
}
}
break;
@@ -996,7 +996,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
time = 0.0f;
}
time *= seqPlayer->tempo;
- time *= gAudioContext.unk_2870;
+ time *= gAudioCtx.unk_2870;
time /= layer->freqScale;
//! FAKE:
if (1) {}
@@ -1011,7 +1011,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
// (It's a bit unclear if 'portamento' has actually always been
// set when this is reached...)
if (PORTAMENTO_IS_SPECIAL(*portamento)) {
- speed2 = seqPlayer->tempo * 0x8000 / gAudioContext.tempoInternalToExternal;
+ speed2 = seqPlayer->tempo * 0x8000 / gAudioCtx.tempoInternalToExternal;
speed2 = speed2 * 0x100 / (layer->delay * layer->portamentoTime);
if (speed2 >= 0x7FFF) {
speed2 = 0x7FFF;
@@ -1090,8 +1090,8 @@ s32 AudioSeq_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd) {
}
if (channel->velocityRandomVariance != 0) {
- floatDelta = layer->velocitySquare * (gAudioContext.audioRandom % channel->velocityRandomVariance) / 100.0f;
- if ((gAudioContext.audioRandom & 0x8000) != 0) {
+ floatDelta = layer->velocitySquare * (gAudioCtx.audioRandom % channel->velocityRandomVariance) / 100.0f;
+ if ((gAudioCtx.audioRandom & 0x8000) != 0) {
floatDelta = -floatDelta;
}
@@ -1111,8 +1111,8 @@ s32 AudioSeq_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd) {
if (channel->gateTimeRandomVariance != 0) {
//! @bug should probably be gateTimeRandomVariance
- intDelta = (layer->gateDelay * (gAudioContext.audioRandom % channel->velocityRandomVariance)) / 100;
- if ((gAudioContext.audioRandom & 0x4000) != 0) {
+ intDelta = (layer->gateDelay * (gAudioCtx.audioRandom % channel->velocityRandomVariance)) / 100;
+ if ((gAudioCtx.audioRandom & 0x4000) != 0) {
intDelta = -intDelta;
}
@@ -1297,9 +1297,9 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
cmd = (u8)cmdArgs[0];
if (seqPlayer->defaultFont != 0xFF) {
- cmdArgU16 = ((u16*)gAudioContext.sequenceFontTable)[seqPlayer->seqId];
- lowBits = gAudioContext.sequenceFontTable[cmdArgU16];
- cmd = gAudioContext.sequenceFontTable[cmdArgU16 + lowBits - cmd];
+ cmdArgU16 = ((u16*)gAudioCtx.sequenceFontTable)[seqPlayer->seqId];
+ lowBits = gAudioCtx.sequenceFontTable[cmdArgU16];
+ cmd = gAudioCtx.sequenceFontTable[cmdArgU16 + lowBits - cmd];
}
if (AudioHeap_SearchCaches(FONT_TABLE, CACHE_EITHER, cmd)) {
@@ -1426,9 +1426,9 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
cmd = (u8)cmdArgs[0];
if (seqPlayer->defaultFont != 0xFF) {
- cmdArgU16 = ((u16*)gAudioContext.sequenceFontTable)[seqPlayer->seqId];
- lowBits = gAudioContext.sequenceFontTable[cmdArgU16];
- cmd = gAudioContext.sequenceFontTable[cmdArgU16 + lowBits - cmd];
+ cmdArgU16 = ((u16*)gAudioCtx.sequenceFontTable)[seqPlayer->seqId];
+ lowBits = gAudioCtx.sequenceFontTable[cmdArgU16];
+ cmd = gAudioCtx.sequenceFontTable[cmdArgU16 + lowBits - cmd];
}
if (AudioHeap_SearchCaches(FONT_TABLE, CACHE_EITHER, cmd)) {
@@ -1625,13 +1625,13 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
break;
case 0xB7: // channel: random large
- channel->unk_22 = (cmdArgs[0] == 0) ? (gAudioContext.audioRandom & 0xFFFF)
- : (gAudioContext.audioRandom % cmdArgs[0]);
+ channel->unk_22 =
+ (cmdArgs[0] == 0) ? (gAudioCtx.audioRandom & 0xFFFF) : (gAudioCtx.audioRandom % cmdArgs[0]);
break;
case 0xB8: // channel: random value
- scriptState->value = (cmdArgs[0] == 0) ? (gAudioContext.audioRandom & 0xFFFF)
- : (gAudioContext.audioRandom % cmdArgs[0]);
+ scriptState->value =
+ (cmdArgs[0] == 0) ? (gAudioCtx.audioRandom & 0xFFFF) : (gAudioCtx.audioRandom % cmdArgs[0]);
break;
case 0xA8: // channel: random range large (only cmd that differs from OoT)
@@ -1667,8 +1667,8 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
case 0xBE: // channel:
if (cmdArgs[0] < 5) {
if (1) {}
- if (gAudioContext.unk_29A8[cmdArgs[0]] != NULL) {
- gCustomAudioSeqFunction = gAudioContext.unk_29A8[cmdArgs[0]];
+ if (gAudioCtx.unk_29A8[cmdArgs[0]] != NULL) {
+ gCustomAudioSeqFunction = gAudioCtx.unk_29A8[cmdArgs[0]];
scriptState->value = gCustomAudioSeqFunction(scriptState->value, channel);
}
}
@@ -1880,17 +1880,17 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
seqPlayer->scriptCounter++;
tempoChange = seqPlayer->tempo + seqPlayer->unk_0C;
- if (tempoChange > gAudioContext.tempoInternalToExternal) {
- tempoChange = gAudioContext.tempoInternalToExternal;
+ if (tempoChange > gAudioCtx.tempoInternalToExternal) {
+ tempoChange = gAudioCtx.tempoInternalToExternal;
}
seqPlayer->tempoAcc += tempoChange;
- if (seqPlayer->tempoAcc < gAudioContext.tempoInternalToExternal) {
+ if (seqPlayer->tempoAcc < gAudioCtx.tempoInternalToExternal) {
return;
}
- seqPlayer->tempoAcc -= (u16)gAudioContext.tempoInternalToExternal;
+ seqPlayer->tempoAcc -= (u16)gAudioCtx.tempoInternalToExternal;
seqPlayer->unk_16++;
if (seqPlayer->stopScript == true) {
@@ -1943,8 +1943,8 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
case 0xDD: // seqPlayer: set tempo
seqPlayer->tempo = AudioSeq_ScriptReadU8(seqScript) * TATUMS_PER_BEAT;
- if (seqPlayer->tempo > gAudioContext.tempoInternalToExternal) {
- seqPlayer->tempo = gAudioContext.tempoInternalToExternal;
+ if (seqPlayer->tempo > gAudioCtx.tempoInternalToExternal) {
+ seqPlayer->tempo = gAudioCtx.tempoInternalToExternal;
}
if ((s16)seqPlayer->tempo <= 0) {
@@ -2041,9 +2041,9 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
case 0xCE: // seqPlayer: random value
cmd = AudioSeq_ScriptReadU8(seqScript);
if (cmd == 0) {
- seqScript->value = (gAudioContext.audioRandom >> 2) & 0xFF;
+ seqScript->value = (gAudioCtx.audioRandom >> 2) & 0xFF;
} else {
- seqScript->value = (gAudioContext.audioRandom >> 2) % cmd;
+ seqScript->value = (gAudioCtx.audioRandom >> 2) % cmd;
}
break;
@@ -2198,11 +2198,10 @@ void AudioSeq_ProcessSequences(s32 arg0) {
SequencePlayer* seqPlayer;
u32 i;
- gAudioContext.sampleStateOffset =
- (gAudioContext.audioBufferParameters.updatesPerFrame - arg0 - 1) * gAudioContext.numNotes;
+ gAudioCtx.sampleStateOffset = (gAudioCtx.audioBufferParameters.updatesPerFrame - arg0 - 1) * gAudioCtx.numNotes;
- for (i = 0; i < (u32)gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
- seqPlayer = &gAudioContext.seqPlayers[i];
+ for (i = 0; i < (u32)gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ seqPlayer = &gAudioCtx.seqPlayers[i];
if (seqPlayer->enabled == true) {
AudioSeq_SequencePlayerProcessSequence(seqPlayer);
AudioEffects_SequencePlayerProcessSound(seqPlayer);
@@ -2250,14 +2249,14 @@ void AudioSeq_ResetSequencePlayer(SequencePlayer* seqPlayer) {
void AudioSeq_InitSequencePlayerChannels(s32 playerIndex) {
SequenceChannel* channel;
- SequencePlayer* seqPlayer = &gAudioContext.seqPlayers[playerIndex];
+ SequencePlayer* seqPlayer = &gAudioCtx.seqPlayers[playerIndex];
s32 i;
s32 j;
for (i = 0; i < SEQ_NUM_CHANNELS; i++) {
- seqPlayer->channels[i] = AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(SequenceChannel));
+ seqPlayer->channels[i] = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, sizeof(SequenceChannel));
if (seqPlayer->channels[i] == NULL) {
- seqPlayer->channels[i] = &gAudioContext.sequenceChannelNone;
+ seqPlayer->channels[i] = &gAudioCtx.sequenceChannelNone;
} else {
channel = seqPlayer->channels[i];
channel->seqPlayer = seqPlayer;
@@ -2277,7 +2276,7 @@ void AudioSeq_InitSequencePlayer(SequencePlayer* seqPlayer) {
s32 j;
for (i = 0; i < SEQ_NUM_CHANNELS; i++) {
- seqPlayer->channels[i] = &gAudioContext.sequenceChannelNone;
+ seqPlayer->channels[i] = &gAudioCtx.sequenceChannelNone;
}
seqPlayer->enabled = false;
@@ -2303,12 +2302,12 @@ void AudioSeq_InitSequencePlayers(void) {
AudioSeq_InitLayerFreelist();
- for (i = 0; i < ARRAY_COUNT(gAudioContext.sequenceLayers); i++) {
- gAudioContext.sequenceLayers[i].channel = NULL;
- gAudioContext.sequenceLayers[i].enabled = false;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.sequenceLayers); i++) {
+ gAudioCtx.sequenceLayers[i].channel = NULL;
+ gAudioCtx.sequenceLayers[i].enabled = false;
}
- for (i = 0; i < ARRAY_COUNT(gAudioContext.seqPlayers); i++) {
- AudioSeq_InitSequencePlayer(&gAudioContext.seqPlayers[i]);
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.seqPlayers); i++) {
+ AudioSeq_InitSequencePlayer(&gAudioCtx.seqPlayers[i]);
}
}
diff --git a/src/code/audio/audio_synthesis.c b/src/code/audio/audio_synthesis.c
index d3b25f446..5c72c4452 100644
--- a/src/code/audio/audio_synthesis.c
+++ b/src/code/audio/audio_synthesis.c
@@ -80,13 +80,13 @@ void AudioSynth_AddReverbBufferEntry(s32 numSamples, s32 updateIndex, s32 reverb
s32 count2;
s32 nextReverbSubBufPos;
- reverb = &gAudioContext.synthesisReverbs[reverbIndex];
+ reverb = &gAudioCtx.synthesisReverbs[reverbIndex];
entry = &reverb->bufEntry[reverb->curFrame][updateIndex];
- numSamplesAfterDownsampling = numSamples / gAudioContext.synthesisReverbs[reverbIndex].downsampleRate;
+ numSamplesAfterDownsampling = numSamples / gAudioCtx.synthesisReverbs[reverbIndex].downsampleRate;
// Apply resampling effect
- if (gAudioContext.synthesisReverbs[reverbIndex].resampleEffectOn) {
+ if (gAudioCtx.synthesisReverbs[reverbIndex].resampleEffectOn) {
if (reverb->downsampleRate == 1) {
count1 = 0;
count2 = 0;
@@ -199,10 +199,10 @@ void AudioSynth_SyncSampleStates(s32 updateIndex) {
s32 sampleStateBaseIndex;
s32 i;
- sampleStateBaseIndex = gAudioContext.numNotes * updateIndex;
- for (i = 0; i < gAudioContext.numNotes; i++) {
- noteSampleState = &gAudioContext.notes[i].sampleState;
- sampleState = &gAudioContext.sampleStateList[sampleStateBaseIndex + i];
+ sampleStateBaseIndex = gAudioCtx.numNotes * updateIndex;
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ noteSampleState = &gAudioCtx.notes[i].sampleState;
+ sampleState = &gAudioCtx.sampleStateList[sampleStateBaseIndex + i];
if (noteSampleState->bitField0.enabled) {
noteSampleState->bitField0.needsInit = false;
} else {
@@ -221,51 +221,51 @@ Acmd* AudioSynth_Update(Acmd* abiCmdStart, s32* numAbiCmds, s16* aiBufStart, s32
s32 reverbIndex;
SynthesisReverb* reverb;
- for (reverseUpdateIndex = gAudioContext.audioBufferParameters.updatesPerFrame; reverseUpdateIndex > 0;
+ for (reverseUpdateIndex = gAudioCtx.audioBufferParameters.updatesPerFrame; reverseUpdateIndex > 0;
reverseUpdateIndex--) {
AudioSeq_ProcessSequences(reverseUpdateIndex - 1);
- AudioSynth_SyncSampleStates(gAudioContext.audioBufferParameters.updatesPerFrame - reverseUpdateIndex);
+ AudioSynth_SyncSampleStates(gAudioCtx.audioBufferParameters.updatesPerFrame - reverseUpdateIndex);
}
curAiBufPos = aiBufStart;
- gAudioContext.adpcmCodeBook = NULL;
+ gAudioCtx.adpcmCodeBook = NULL;
// Process/Update all samples multiple times in a single frame
- for (reverseUpdateIndex = gAudioContext.audioBufferParameters.updatesPerFrame; reverseUpdateIndex > 0;
+ for (reverseUpdateIndex = gAudioCtx.audioBufferParameters.updatesPerFrame; reverseUpdateIndex > 0;
reverseUpdateIndex--) {
if (reverseUpdateIndex == 1) {
// Final Update
numSamplesPerUpdate = numSamplesPerFrame;
} else if ((numSamplesPerFrame / reverseUpdateIndex) >=
- gAudioContext.audioBufferParameters.numSamplesPerUpdateMax) {
- numSamplesPerUpdate = gAudioContext.audioBufferParameters.numSamplesPerUpdateMax;
+ gAudioCtx.audioBufferParameters.numSamplesPerUpdateMax) {
+ numSamplesPerUpdate = gAudioCtx.audioBufferParameters.numSamplesPerUpdateMax;
} else if ((numSamplesPerFrame / reverseUpdateIndex) <=
- gAudioContext.audioBufferParameters.numSamplesPerUpdateMin) {
- numSamplesPerUpdate = gAudioContext.audioBufferParameters.numSamplesPerUpdateMin;
+ gAudioCtx.audioBufferParameters.numSamplesPerUpdateMin) {
+ numSamplesPerUpdate = gAudioCtx.audioBufferParameters.numSamplesPerUpdateMin;
} else {
- numSamplesPerUpdate = gAudioContext.audioBufferParameters.numSamplesPerUpdate;
+ numSamplesPerUpdate = gAudioCtx.audioBufferParameters.numSamplesPerUpdate;
}
- for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
- if (gAudioContext.synthesisReverbs[reverbIndex].useReverb) {
- AudioSynth_AddReverbBufferEntry(
- numSamplesPerUpdate, gAudioContext.audioBufferParameters.updatesPerFrame - reverseUpdateIndex,
- reverbIndex);
+ for (reverbIndex = 0; reverbIndex < gAudioCtx.numSynthesisReverbs; reverbIndex++) {
+ if (gAudioCtx.synthesisReverbs[reverbIndex].useReverb) {
+ AudioSynth_AddReverbBufferEntry(numSamplesPerUpdate,
+ gAudioCtx.audioBufferParameters.updatesPerFrame - reverseUpdateIndex,
+ reverbIndex);
}
}
curCmd = AudioSynth_ProcessSamples(curAiBufPos, numSamplesPerUpdate, curCmd,
- gAudioContext.audioBufferParameters.updatesPerFrame - reverseUpdateIndex);
+ gAudioCtx.audioBufferParameters.updatesPerFrame - reverseUpdateIndex);
numSamplesPerFrame -= numSamplesPerUpdate;
curAiBufPos += numSamplesPerUpdate * SAMPLE_SIZE;
}
// Update reverb frame info
- for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
- if (gAudioContext.synthesisReverbs[reverbIndex].framesToIgnore != 0) {
- gAudioContext.synthesisReverbs[reverbIndex].framesToIgnore--;
+ for (reverbIndex = 0; reverbIndex < gAudioCtx.numSynthesisReverbs; reverbIndex++) {
+ if (gAudioCtx.synthesisReverbs[reverbIndex].framesToIgnore != 0) {
+ gAudioCtx.synthesisReverbs[reverbIndex].framesToIgnore--;
}
- gAudioContext.synthesisReverbs[reverbIndex].curFrame ^= 1;
+ gAudioCtx.synthesisReverbs[reverbIndex].curFrame ^= 1;
}
*numAbiCmds = curCmd - abiCmdStart;
@@ -276,8 +276,8 @@ void AudioSynth_DisableSampleStates(s32 updateIndex, s32 noteIndex) {
NoteSampleState* sampleState;
s32 i;
- for (i = updateIndex + 1; i < gAudioContext.audioBufferParameters.updatesPerFrame; i++) {
- sampleState = &gAudioContext.sampleStateList[(gAudioContext.numNotes * i) + noteIndex];
+ for (i = updateIndex + 1; i < gAudioCtx.audioBufferParameters.updatesPerFrame; i++) {
+ sampleState = &gAudioCtx.sampleStateList[(gAudioCtx.numNotes * i) + noteIndex];
if (sampleState->bitField0.needsInit) {
break;
}
@@ -572,11 +572,11 @@ Acmd* AudioSynth_FilterReverb(Acmd* cmd, s32 size, SynthesisReverb* reverb) {
Acmd* AudioSynth_MixOtherReverbIndex(Acmd* cmd, SynthesisReverb* reverb, s32 updateIndex) {
SynthesisReverb* mixReverb;
- if (reverb->mixReverbIndex >= gAudioContext.numSynthesisReverbs) {
+ if (reverb->mixReverbIndex >= gAudioCtx.numSynthesisReverbs) {
return cmd;
}
- mixReverb = &gAudioContext.synthesisReverbs[reverb->mixReverbIndex];
+ mixReverb = &gAudioCtx.synthesisReverbs[reverb->mixReverbIndex];
if (mixReverb->downsampleRate == 1) {
cmd = AudioSynth_LoadMixedReverbSamples(cmd, mixReverb, updateIndex);
aMix(cmd++, DMEM_2CH_SIZE >> 4, reverb->mixReverbStrength, DMEM_WET_LEFT_CH, DMEM_WET_TEMP);
@@ -758,31 +758,31 @@ Acmd* AudioSynth_ProcessSamples(s16* aiBuf, s32 numSamplesPerUpdate, Acmd* cmd,
s16 reverbIndex;
SynthesisReverb* reverb;
s32 useReverb;
- s32 sampleStateOffset = gAudioContext.numNotes * updateIndex;
+ s32 sampleStateOffset = gAudioCtx.numNotes * updateIndex;
s32 i;
- if (gAudioContext.numSynthesisReverbs == 0) {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- if (gAudioContext.sampleStateList[sampleStateOffset + i].bitField0.enabled) {
+ if (gAudioCtx.numSynthesisReverbs == 0) {
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ if (gAudioCtx.sampleStateList[sampleStateOffset + i].bitField0.enabled) {
noteIndices[noteCount++] = i;
}
}
} else {
NoteSampleState* sampleState;
- for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- sampleState = &gAudioContext.sampleStateList[sampleStateOffset + i];
+ for (reverbIndex = 0; reverbIndex < gAudioCtx.numSynthesisReverbs; reverbIndex++) {
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ sampleState = &gAudioCtx.sampleStateList[sampleStateOffset + i];
if (sampleState->bitField0.enabled && (sampleState->bitField1.reverbIndex == reverbIndex)) {
noteIndices[noteCount++] = i;
}
}
}
- for (i = 0; i < gAudioContext.numNotes; i++) {
- sampleState = &gAudioContext.sampleStateList[sampleStateOffset + i];
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ sampleState = &gAudioCtx.sampleStateList[sampleStateOffset + i];
if (sampleState->bitField0.enabled &&
- (sampleState->bitField1.reverbIndex >= gAudioContext.numSynthesisReverbs)) {
+ (sampleState->bitField1.reverbIndex >= gAudioCtx.numSynthesisReverbs)) {
noteIndices[noteCount++] = i;
}
}
@@ -791,11 +791,11 @@ Acmd* AudioSynth_ProcessSamples(s16* aiBuf, s32 numSamplesPerUpdate, Acmd* cmd,
aClearBuffer(cmd++, DMEM_LEFT_CH, DMEM_2CH_SIZE);
i = 0;
- for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
+ for (reverbIndex = 0; reverbIndex < gAudioCtx.numSynthesisReverbs; reverbIndex++) {
s32 subDelay;
NoteSampleState* sampleState;
- reverb = &gAudioContext.synthesisReverbs[reverbIndex];
+ reverb = &gAudioCtx.synthesisReverbs[reverbIndex];
useReverb = reverb->useReverb;
if (useReverb) {
@@ -815,7 +815,7 @@ Acmd* AudioSynth_ProcessSamples(s16* aiBuf, s32 numSamplesPerUpdate, Acmd* cmd,
// Decays reverb over time. The (+ 0x8000) here is -100%
aMix(cmd++, DMEM_2CH_SIZE >> 4, reverb->decayRatio + 0x8000, DMEM_WET_LEFT_CH, DMEM_WET_LEFT_CH);
- if (((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) && (gAudioContext.soundMode != SOUNDMODE_MONO)) {
+ if (((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) && (gAudioCtx.soundMode != SOUNDMODE_MONO)) {
cmd = AudioSynth_LeakReverb(cmd, reverb);
}
@@ -830,13 +830,12 @@ Acmd* AudioSynth_ProcessSamples(s16* aiBuf, s32 numSamplesPerUpdate, Acmd* cmd,
}
while (i < noteCount) {
- sampleState = &gAudioContext.sampleStateList[sampleStateOffset + noteIndices[i]];
+ sampleState = &gAudioCtx.sampleStateList[sampleStateOffset + noteIndices[i]];
if (sampleState->bitField1.reverbIndex != reverbIndex) {
break;
}
- cmd = AudioSynth_ProcessSample(noteIndices[i], sampleState,
- &gAudioContext.notes[noteIndices[i]].synthesisState, aiBuf,
- numSamplesPerUpdate, cmd, updateIndex);
+ cmd = AudioSynth_ProcessSample(noteIndices[i], sampleState, &gAudioCtx.notes[noteIndices[i]].synthesisState,
+ aiBuf, numSamplesPerUpdate, cmd, updateIndex);
i++;
}
@@ -858,9 +857,9 @@ Acmd* AudioSynth_ProcessSamples(s16* aiBuf, s32 numSamplesPerUpdate, Acmd* cmd,
}
while (i < noteCount) {
- cmd = AudioSynth_ProcessSample(
- noteIndices[i], &gAudioContext.sampleStateList[sampleStateOffset + noteIndices[i]],
- &gAudioContext.notes[noteIndices[i]].synthesisState, aiBuf, numSamplesPerUpdate, cmd, updateIndex);
+ cmd = AudioSynth_ProcessSample(noteIndices[i], &gAudioCtx.sampleStateList[sampleStateOffset + noteIndices[i]],
+ &gAudioCtx.notes[noteIndices[i]].synthesisState, aiBuf, numSamplesPerUpdate, cmd,
+ updateIndex);
i++;
}
@@ -928,7 +927,7 @@ Acmd* AudioSynth_ProcessSample(s32 noteIndex, NoteSampleState* sampleState, Note
s32 sampleDataChunkSize;
s16 sampleDataDmemAddr;
- note = &gAudioContext.notes[noteIndex];
+ note = &gAudioCtx.notes[noteIndex];
flags = A_CONTINUE;
// Initialize the synthesis state
@@ -1013,23 +1012,23 @@ Acmd* AudioSynth_ProcessSample(s32 noteIndex, NoteSampleState* sampleState, Note
// Load the ADPCM codeBook
if ((sample->codec == CODEC_ADPCM) || (sample->codec == CODEC_SMALL_ADPCM)) {
- if (gAudioContext.adpcmCodeBook != sample->book->codeBook) {
+ if (gAudioCtx.adpcmCodeBook != sample->book->codeBook) {
u32 numEntries;
switch (bookOffset) {
case 1:
- gAudioContext.adpcmCodeBook = &gInvalidAdpcmCodeBook[1];
+ gAudioCtx.adpcmCodeBook = &gInvalidAdpcmCodeBook[1];
break;
case 2:
case 3:
default:
- gAudioContext.adpcmCodeBook = sample->book->codeBook;
+ gAudioCtx.adpcmCodeBook = sample->book->codeBook;
break;
}
numEntries = SAMPLES_PER_FRAME * sample->book->order * sample->book->numPredictors;
- aLoadADPCM(cmd++, numEntries, gAudioContext.adpcmCodeBook);
+ aLoadADPCM(cmd++, numEntries, gAudioCtx.adpcmCodeBook);
}
}
@@ -1163,7 +1162,7 @@ Acmd* AudioSynth_ProcessSample(s32 noteIndex, NoteSampleState* sampleState, Note
if (sample->medium == MEDIUM_RAM) {
// Sample is already loaded into ram
samplesToLoadAddr = sampleAddr + (zeroOffset + sampleAddrOffset);
- } else if (gAudioContext.unk_29B8) { // always false
+ } else if (gAudioCtx.unk_29B8) { // always false
return cmd;
} else if (sample->medium == MEDIUM_UNK) {
// This medium is unsupported so terminate processing this note
@@ -1405,7 +1404,7 @@ Acmd* AudioSynth_ProcessSample(s32 noteIndex, NoteSampleState* sampleState, Note
}
// Apply an unknown effect based on the surround sound-mode
- if (gAudioContext.soundMode == SOUNDMODE_SURROUND) {
+ if (gAudioCtx.soundMode == SOUNDMODE_SURROUND) {
sampleState->targetVolLeft = sampleState->targetVolLeft >> 1;
sampleState->targetVolRight = sampleState->targetVolRight >> 1;
if (sampleState->surroundEffectIndex != 0xFF) {
@@ -1512,7 +1511,7 @@ Acmd* AudioSynth_ProcessEnvelope(Acmd* cmd, NoteSampleState* sampleState, NoteSy
targetVolRight = sampleState->targetVolRight;
targetVolRight <<= 4;
- if ((gAudioContext.soundMode == SOUNDMODE_SURROUND) && (sampleState->surroundEffectIndex != 0xFF)) {
+ if ((gAudioCtx.soundMode == SOUNDMODE_SURROUND) && (sampleState->surroundEffectIndex != 0xFF)) {
defaultPanVolume = gDefaultPanVolume[sampleState->surroundEffectIndex];
targetVolLeft *= defaultPanVolume;
targetVolRight *= defaultPanVolume;
diff --git a/src/code/audio/code_8019AF00.c b/src/code/audio/code_8019AF00.c
index 6d1468d82..5fd58a487 100644
--- a/src/code/audio/code_8019AF00.c
+++ b/src/code/audio/code_8019AF00.c
@@ -2733,7 +2733,7 @@ void AudioOcarina_SetOcarinaDisableTimer(u8 unused, u8 timer) {
sOcarinaUnused = unused;
}
-u32 AudioOcarina_SetInstrument(u8 ocarinaInstrumentId) {
+void AudioOcarina_SetInstrument(u8 ocarinaInstrumentId) {
if ((sOcarinaInstrumentId != ocarinaInstrumentId) || (ocarinaInstrumentId == OCARINA_INSTRUMENT_DEFAULT)) {
Audio_QueueSeqCmd(0x80000000 | ((u32)(SEQ_PLAYER_SFX) << 24) | ((u32)(1) << 16) |
((u32)(SFX_CHANNEL_OCARINA) << 8) | (u32)(ocarinaInstrumentId));
@@ -3311,7 +3311,7 @@ s32 AudioOcarina_MemoryGameNextNote(void) {
#undef OCARINA_SONG_MEMORY_GAME
void AudioOcarina_Update(void) {
- sOcarinaUpdateTaskStart = gAudioContext.totalTaskCount;
+ sOcarinaUpdateTaskStart = gAudioCtx.totalTaskCount;
if (sOcarinaInstrumentId != OCARINA_INSTRUMENT_OFF) {
if (sIsOcarinaInputEnabled == true) {
AudioOcarina_ReadControllerInput();
@@ -3399,9 +3399,9 @@ u8 sRequestCustomSequence = false;
void AudioOcarina_SetCustomSequence(void) {
// Never passes true as sRequestCustomSequence is never set true
- if (sRequestCustomSequence && gAudioContext.seqPlayers[SEQ_PLAYER_FANFARE].enabled &&
- ((u8)gAudioContext.seqPlayers[SEQ_PLAYER_FANFARE].soundScriptIO[0] == (u8)SEQ_IO_VAL_NONE)) {
- gAudioContext.seqPlayers[SEQ_PLAYER_FANFARE].seqData = sCustomSequenceScript;
+ if (sRequestCustomSequence && gAudioCtx.seqPlayers[SEQ_PLAYER_FANFARE].enabled &&
+ ((u8)gAudioCtx.seqPlayers[SEQ_PLAYER_FANFARE].soundScriptIO[0] == (u8)SEQ_IO_VAL_NONE)) {
+ gAudioCtx.seqPlayers[SEQ_PLAYER_FANFARE].seqData = sCustomSequenceScript;
sRequestCustomSequence = false;
}
}
@@ -3753,9 +3753,9 @@ s8 AudioSfx_ComputeReverb(u8 bankId, u8 entryIndex, u8 channelIndex) {
}
}
- if (IS_SEQUENCE_CHANNEL_VALID(gAudioContext.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex])) {
- scriptAdd = gAudioContext.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->soundScriptIO[1];
- if (gAudioContext.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->soundScriptIO[1] <= SEQ_IO_VAL_NONE) {
+ if (IS_SEQUENCE_CHANNEL_VALID(gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex])) {
+ scriptAdd = gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->soundScriptIO[1];
+ if (gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->soundScriptIO[1] <= SEQ_IO_VAL_NONE) {
scriptAdd = 0;
}
}
@@ -3815,7 +3815,7 @@ f32 AudioSfx_ComputeFreqScale(u8 bankId, u8 entryIndex) {
f32 freq = 1.0f;
if (entry->sfxParams & SFX_PARAM_RAND_FREQ_LOWER) {
- freq = 1.0f - ((gAudioContext.audioRandom & 0xF) / 192.0f);
+ freq = 1.0f - ((gAudioCtx.audioRandom & 0xF) / 192.0f);
}
switch (bankId) {
@@ -3850,7 +3850,7 @@ f32 AudioSfx_ComputeFreqScale(u8 bankId, u8 entryIndex) {
}
if ((applyRandScaling == true) && !(entry->sfxParams & SFX_PARAM_RAND_FREQ_SCALE)) {
- freq *= 1.0293 - ((gAudioContext.audioRandom & 0xF) / 144.0f);
+ freq *= 1.0293 - ((gAudioCtx.audioRandom & 0xF) / 144.0f);
}
dist = entry->dist;
@@ -4356,18 +4356,16 @@ s32 Audio_SetGanonsTowerBgmVolume(u8 targetVolume) {
(u8)(lowPassFilterCutoff));
// Sets the reverb
- for (channelIndex = 0; channelIndex < ARRAY_COUNT(gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels);
+ for (channelIndex = 0; channelIndex < ARRAY_COUNT(gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels);
channelIndex++) {
- if (&gAudioContext.sequenceChannelNone !=
- gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]) {
+ if (&gAudioCtx.sequenceChannelNone != gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]) {
// soundScriptIO[5] was set to 0x40 in channels 0, 1, and 4 (BGM no longer in OoT)
- if ((u8)gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->soundScriptIO[5] !=
+ if ((u8)gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->soundScriptIO[5] !=
(u8)SEQ_IO_VAL_NONE) {
// Higher volume leads to lower reverb
- reverb =
- (((u16)gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->soundScriptIO[5] -
- targetVolume) +
- 0x7F);
+ reverb = (((u16)gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->soundScriptIO[5] -
+ targetVolume) +
+ 0x7F);
if (reverb > 0x7F) {
reverb = 0x7F;
@@ -4556,7 +4554,7 @@ void Audio_SplitBgmChannels(s8 volumeSplit) {
channelBits = 0;
for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) {
- if (gAudioContext.seqPlayers[sBgmPlayers[i]].channels[channelIndex]->notePriority < notePriority) {
+ if (gAudioCtx.seqPlayers[sBgmPlayers[i]].channels[channelIndex]->notePriority < notePriority) {
// If the note currently playing in the channel is a high enough priority,
// then keep the channel on by setting a channelBit
// If this condition fails, then the channel will be shut off
@@ -4723,7 +4721,7 @@ void Audio_UpdateSceneSequenceResumePoint(void) {
if ((seqId != NA_BGM_DISABLED) && (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_RESUME)) {
if (sSeqResumePoint != SEQ_RESUME_POINT_NONE) {
// Get the current point to resume from
- sSeqResumePoint = gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].soundScriptIO[3];
+ sSeqResumePoint = gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].soundScriptIO[3];
} else {
// Initialize the point to resume from to the start of the sequence
sSeqResumePoint = 0;
@@ -5139,13 +5137,13 @@ void Audio_PlayAmbience(u8 ambienceId) {
u32 Audio_SetAmbienceRandomBend(u8 seqScriptValIn, SequenceChannel* channel) {
u32 seqScriptValOut = seqScriptValIn;
- gAudioContext.seqPlayers[SEQ_PLAYER_AMBIENCE].applyBend = true;
+ gAudioCtx.seqPlayers[SEQ_PLAYER_AMBIENCE].applyBend = true;
if ((seqScriptValIn == 0) || (seqScriptValIn == 0xFF)) {
- gAudioContext.seqPlayers[SEQ_PLAYER_AMBIENCE].bend = 1.0f;
+ gAudioCtx.seqPlayers[SEQ_PLAYER_AMBIENCE].bend = 1.0f;
} else {
seqScriptValOut = AudioThread_NextRandom();
- gAudioContext.seqPlayers[SEQ_PLAYER_AMBIENCE].bend = 1.0293 - ((gAudioContext.audioRandom & 0xF) / 144.0f);
+ gAudioCtx.seqPlayers[SEQ_PLAYER_AMBIENCE].bend = 1.0293 - ((gAudioCtx.audioRandom & 0xF) / 144.0f);
return seqScriptValOut;
}
diff --git a/src/code/audio/code_801A5BD0.c b/src/code/audio/code_801A5BD0.c
index d76970829..0e509670b 100644
--- a/src/code/audio/code_801A5BD0.c
+++ b/src/code/audio/code_801A5BD0.c
@@ -599,7 +599,7 @@ void AudioSfx_PlayActiveSfx(u8 bankId) {
// If entry is not empty
if (entryIndex != 0xFF) {
entry = &gSfxBanks[bankId][entryIndex];
- channel = gAudioContext.seqPlayers[SEQ_PLAYER_SFX].channels[sCurSfxPlayerChannelIndex];
+ channel = gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].channels[sCurSfxPlayerChannelIndex];
if (entry->state == SFX_STATE_READY) {
// Initialize a sfx (new sfx request)
@@ -847,7 +847,7 @@ void AudioSfx_StopById(u32 sfxId) {
}
void AudioSfx_ProcessRequests(void) {
- if (gAudioContext.seqPlayers[SEQ_PLAYER_SFX].enabled) {
+ if (gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].enabled) {
while (sSfxRequestWriteIndex != sSfxRequestReadIndex) {
AudioSfx_ProcessRequest();
sSfxRequestReadIndex++;
@@ -886,7 +886,7 @@ void AudioSfx_StepBankLerp(u8 bankId) {
void AudioSfx_ProcessActiveSfx(void) {
u8 bankId;
- if (gAudioContext.seqPlayers[SEQ_PLAYER_SFX].enabled) {
+ if (gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].enabled) {
sCurSfxPlayerChannelIndex = 0;
for (bankId = 0; bankId < ARRAY_COUNT(gSfxBanks); bankId++) {
diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c
index eb70cfbc8..fb6f0743d 100644
--- a/src/code/code_8012EC80.c
+++ b/src/code/code_8012EC80.c
@@ -661,17 +661,17 @@ void Inventory_SetWorldMapCloudVisibility(s16 tingleIndex) {
i++;
}
- if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[0]) {
+ if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_CLOCK_TOWN]) {
gSaveContext.save.worldMapCloudVisibility |= 3;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[1]) {
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_WOODFALL]) {
gSaveContext.save.worldMapCloudVisibility |= 0x1C;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[2]) {
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_SNOWHEAD]) {
gSaveContext.save.worldMapCloudVisibility |= 0xE0;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[3]) {
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_ROMANI_RANCH]) {
gSaveContext.save.worldMapCloudVisibility |= 0x100;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[4]) {
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_GREAT_BAY]) {
gSaveContext.save.worldMapCloudVisibility |= 0x1E00;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[5]) {
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_STONE_TOWER]) {
gSaveContext.save.worldMapCloudVisibility |= 0x6000;
}
}
diff --git a/src/code/z_camera.c b/src/code/z_camera.c
index da8a5f35a..b4b6e5785 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -1,8 +1,23 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#include "z64quake.h"
#include "z64shrink_window.h"
#include "z64view.h"
+#include "z_camera_data.inc.c"
+
+// BSS
+s16 D_801EDBF0;
+f32 D_801EDBF4;
+f32 D_801EDBF8;
+CameraCollision D_801EDC00;
+
+PlayState* sCamPlayState;
+SwingAnimation D_801EDC30[4];
+Vec3f D_801EDDD0;
+Vec3f D_801EDDE0;
+Vec3f D_801EDDF0;
+
/**
* Returns the absolute value for floats
*/
@@ -535,6 +550,9 @@ s32 Camera_GetWaterBoxBgCamSetting(Camera* camera, f32* waterY) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC9C0.s")
+s32 D_801B9E5C = 0;
+f32 D_801B9E60 = 0.0f;
+
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CCCEC.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CD04C.s")
@@ -577,147 +595,175 @@ s32 Camera_GetWaterBoxBgCamSetting(Camera* camera, f32* waterY) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CED90.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeNop.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Noop.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeNORM1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeNORM2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeNORM3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeNORM4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeNORM0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModePARA1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModePARA2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModePARA3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModePARA4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModePARA0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeJUMP1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeJUMP2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeJUMP3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeJUMP4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeJUMP0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeBATT1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeBATT2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeBATT3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeBATT4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeBATT0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeKEEP1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeKEEP2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeKEEP3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeKEEP4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeKEEP0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeFIXD1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeFIXD2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeFIXD3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeFIXD4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeFIXD0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSUBJ1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSUBJ2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSUBJ3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSUBJ4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSUBJ0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDATA0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDATA1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDATA2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDATA3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDATA4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ5.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique5.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ6.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique6.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ7.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique7.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique8.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ9.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique9.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO2.s")
+// Data for opening chests (default)
+VecSph D_801B9E64[] = {
+ { 50.0f, 0xEE3A, 0xD558 },
+ { 75.0f, 0x0000, 0x8008 },
+ { 80.0f, 0xEE3A, 0x8008 },
+ { 15.0f, 0xEE3A, 0x8008 },
+};
+Vec3f D_801B9E84[] = {
+ { 0.0f, 40.0f, 20.0f },
+ { 0.0f, 40.0f, 0.0f },
+ { 0.0f, 3.0f, -3.0f },
+ { 0.0f, 3.0f, -3.0f },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO3.s")
+// Data for opening chests (goron)
+VecSph D_801B9EB4[] = {
+ { 60.0f, 0xEE3A, 0xD558 },
+ { 95.0f, 0x0000, 0x8008 },
+ { 90.0f, 0xEE3A, 0x8008 },
+ { 20.0f, 0xEE3A, 0x8008 },
+};
+Vec3f D_801B9ED4[] = {
+ { 0.0f, 40.0f, 20.0f },
+ { 0.0f, 40.0f, 0.0f },
+ { 0.0f, 3.0f, -3.0f },
+ { 0.0f, 3.0f, -3.0f },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO5.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO6.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO7.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo5.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo6.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO9.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo7.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo8.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo9.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC5.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC6.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC7.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special5.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special6.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC9.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special7.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special8.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special9.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Alloc.s")
@@ -735,6 +781,14 @@ s32 Camera_GetWaterBoxBgCamSetting(Camera* camera, f32* waterY) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DE324.s")
+s16 sEarthquakeFreq[] = {
+ 0xFFC, // 1 Large Earthquake between CLOCK_TIME(0, 00) to CLOCK_TIME(1, 30)
+ 0x7FC, // 2 Large Earthquakes between CLOCK_TIME(1, 30) to CLOCK_TIME(3, 00)
+ 0x3FC, // 4 Large Earthquakes between CLOCK_TIME(3, 00) to CLOCK_TIME(4, 30)
+ 0x1FC, // 8 Large Earthquakes between CLOCK_TIME(4, 30) to CLOCK_TIME(6, 00)
+};
+s16 sEarthquakeTimer = 0;
+
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DE62C.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DE840.s")
@@ -745,6 +799,8 @@ s32 Camera_GetWaterBoxBgCamSetting(Camera* camera, f32* waterY) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Update.s")
+s32 sModeChangeFlags = 0;
+
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DF498.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_SetMode.s")
diff --git a/src/code/z_camera_data.inc.c b/src/code/z_camera_data.inc.c
new file mode 100644
index 000000000..a8e9fbb80
--- /dev/null
+++ b/src/code/z_camera_data.inc.c
@@ -0,0 +1,3810 @@
+#include "ultra64.h"
+#include "global.h"
+
+/**
+ * All the data from `CameraSetting`, `CameraMode`, `sCameraUpdateHandlers`, and `CameraModeValue` below
+ * can be thought of as a single 2D ragged array table with holes in it, indexed by `[camSetting][camMode]`.
+ *
+ * The `CameraSetting` and `CameraMode` together build this 2D table, with data/functions/flags for each entry.
+ *
+ * Each entry in this 2D table consists of a both a camera-update function to run (`sCameraUpdateHandlers`),
+ * and a set of data to accompany that camera-update function (`CameraModeValue`). Often, `CameraModeValue`
+ * data entries are reused. Not every entry is valid, and the flags in the entry are used to indicate this.
+ */
+
+typedef s32 (*CameraUpdateFunc)(Camera*);
+
+typedef struct {
+ /* 0x0 */ s16 val;
+ /* 0x2 */ s16 param;
+} CameraModeValue; // size = 0x4
+
+typedef struct {
+ /* 0x0 */ s16 funcId;
+ /* 0x2 */ s16 numValues;
+ /* 0x4 */ CameraModeValue* values;
+} CameraMode; // size = 0x8
+
+/**
+ * Flags:
+ * (flags & 0xF): Priority (lower value has higher priority)
+ * (flags & 0x40000000): Store previous setting and bgCamData, also ignores water checks
+ * (flags & 0x80000000): Set camera setting based on bg/scene data and reset action function state
+ */
+typedef struct {
+ /* 0x0 */ u32 validModes;
+ /* 0x4 */ u32 flags;
+ /* 0x8 */ CameraMode* cameraModes;
+} CameraSetting; // size = 0xC
+
+/*=====================================================================
+ * Default Data: NORMAL0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetNormal0ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 22, 15, 40, 60, 84,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal0ModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(0, 350, 50, 0, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue sSetNormal0ModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(-30, 180, 200, 20, 40, -5, 10, 15, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue sSetNormal0ModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(-30, 150, 250, 10, 60, -5, 20, 35, 55, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 40),
+};
+
+CameraModeValue sSetNormal0ModeFirstPersonData[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 10, 0, 0, 0, 45, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeTalkData[] = {
+ CAM_FUNCDATA_KEEP3(-20, 80, 150, 50, 5, 20, 5, 40, 35, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, 0),
+ 60),
+};
+
+CameraModeValue sSetNormal0ModeClimbData[] = {
+ CAM_FUNCDATA_JUMP2(-20, 280, 320, 20, 5, 5, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeBowArrowData[] = {
+ CAM_FUNCDATA_SUBJ1(0xFFF9, 0xE, 50, 10, 0, -30, -5, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeBowArrowZData[] = {
+ CAM_FUNCDATA_SUBJ1(20, 70, 70, 10, 0xFF88, 20, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeHookshotData[] = {
+ CAM_FUNCDATA_SPEC5(-20, 80, 250, 45, 60, 40, 6,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeBoomerangData[] = {
+ CAM_FUNCDATA_SUBJ1(5, 50, 50, 10, 0, 0, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeSlingshotData[] = {
+ CAM_FUNCDATA_SUBJ1(0xFFF9, 14, 50, 10, 0, -50, -10, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeClimbZData[] = {
+ CAM_FUNCDATA_JUMP2(-20, 280, 320, 20, 999, 5, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, JUMP2_FLAG_2 | JUMP2_FLAG_1)),
+};
+
+CameraModeValue sSetNormal0ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 240, 340, 10, 30, 12, 40, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal0ModeHangData[] = {
+ CAM_FUNCDATA_PARA1(-40, 320, 50, 40, 0, 8, 5, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 60, 12),
+};
+
+CameraModeValue sSetNormal0ModeHangZData[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 300, 50, 70, 0, 12, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 60, 2),
+};
+
+CameraModeValue sSetNormal0ModeFreeFallData[] = {
+ CAM_FUNCDATA_PARA1(
+ -10, 320, 100, 70, 0, 4, 5, 70, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_7 | PARALLEL1_FLAG_3), 60, 12),
+};
+
+CameraModeValue sSetNormal0ModeChargeData[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 300, -20, 50, 0, 50, 5, 80, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0), 60, 10),
+};
+
+CameraModeValue sSetNormal0ModeChargeZData[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 300, -20, 40, 0, 50, 5, 80, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue sSetNormal0ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal0ModePushPullData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 350, 5, 45, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+CameraModeValue sSetNormal0ModeFollowBoomerangData[] = {
+ CAM_FUNCDATA_KEEP1(-5, 220, 240, 5, 75, 10, 5, 40, 50, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue sSetNormal0ModeDekuShootData[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 10, 0, 50, 65, 45, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeGoronDashData[] = {
+ CAM_FUNCDATA_NORM1(50, 160, 255, -2, 12, 10, 40, 92, 88,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_2 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal0ModeDekuHideData[] = {
+ CAM_FUNCDATA_PARA1(
+ 100, 300, -20, 40, 0, 4, 5, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 80,
+ 20),
+};
+
+CameraModeValue sSetNormal0ModeDekuFlyData[] = {
+ CAM_FUNCDATA_NORM1(0xFFB0, 280, 320, 40, 20, 12, 40, 80, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal0ModeDekuFlyZData[] = {
+ CAM_FUNCDATA_PARA1(0xFFBA, 350, 10, 10, 0, 5, 5, 70, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 90, 0),
+};
+
+CameraModeValue sSetNormal0ModeGoronJumpData[] = {
+ CAM_FUNCDATA_NORM1(
+ -10, 160, 400, 0, 18, 12, 40, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_2 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal0ModeZoraFinData[] = {
+ CAM_FUNCDATA_SUBJ1(5, 100, 100, 10, 0, 0, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: NORMAL3 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetNormal3ModeNormalData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 280, 300, 20, 15, 5, 40, 60, 100,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetNormal3ModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(
+ -50, 280, 40, 10, 0, 15, 5, 60, 100,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1 | PARALLEL1_FLAG_0), 80, 0),
+};
+
+CameraModeValue sSetNormal3ModeFreeFallData[] = {
+ CAM_FUNCDATA_JUMP3(0, 80, 100, 30, 10, 5, 40, 80, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetNormal3ModeGoronJumpData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 150, 240, -5, 18, 5, 40, 70, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetNormal3ModeDekuFlyData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 150, 250, 10, 18, 5, 60, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetNormal3ModeDekuHideData[] = {
+ CAM_FUNCDATA_JUMP3(
+ 0xFFC4, 150, 250, -15, 18, 5, 60, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetNormal3ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-40, 80, 300, 20, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal3ModeGoronDashData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 180, 200, 5, 20, 5, 40, 80, 35,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+/*=====================================================================
+ * Custom Data: PIVOT_DIVING Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetPivotDivingModeNormalData[] = {
+ CAM_FUNCDATA_UNIQ2(-40, 60, 60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, UNIQUE2_FLAG_1)),
+};
+
+CameraModeValue sSetPivotDivingModeTargetData[] = {
+ CAM_FUNCDATA_UNIQ2(-30, 45, 100, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, UNIQUE2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: HORSE Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetHorseModeNormalData[] = {
+ CAM_FUNCDATA_NORM3(-50, 220, 250, 10, 10, 20, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE,
+ NORMAL3_FLAG_5)),
+};
+
+CameraModeValue sSetHorseModeTargetData[] = {
+ CAM_FUNCDATA_NORM3(-40, 180, 200, -3, 2, 100, 50, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM,
+ CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE, NORMAL3_FLAG_1)),
+};
+
+CameraModeValue sSetHorseModeJumpData[] = {
+ CAM_FUNCDATA_NORM3(
+ -50, 220, 260, 10, 10, 20, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE, 0)),
+};
+
+CameraModeValue sSetHorseModeBowArrowData[] = {
+ CAM_FUNCDATA_SUBJ1(
+ 0xFFF9, 14, 100, 10, 0, -30, -5, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE, 0)),
+};
+
+CameraModeValue sSetHorseModeSlingShotData[] = {
+ CAM_FUNCDATA_SUBJ1(0xFFF9, 14, 100, 10, 0, -50, -10, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetHorseModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(0xFFC4, 180, 280, 10, 60, -5, 20, 60, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 40),
+};
+
+CameraModeValue sSetHorseModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(0xFFC4, 180, 220, 25, 45, -5, 15, 15, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM,
+ CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE, KEEPON1_FLAG_0),
+ 20),
+};
+
+CameraModeValue sSetHorseModeTalkData[] = {
+ CAM_FUNCDATA_KEEP3(-50, 140, 200, 40, 10, 0, 5, 100, 45, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, 0),
+ 60),
+};
+
+CameraModeValue sSetHorseModeStillData[] = {
+ CAM_FUNCDATA_NORM3(-40, 180, 200, -3, 100, 100, 60, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, NORMAL3_FLAG_7)),
+};
+
+/*=====================================================================
+ * Custom Data: ZORA_DIVING Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetZoraDivingModeNormalData[] = {
+ CAM_FUNCDATA_NORM3(-20, 250, 250, 0, 20, 20, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE,
+ NORMAL3_FLAG_7)),
+};
+
+/*=====================================================================
+ * Custom Data: PREREND_FIXED Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetPrerendFixedModeNormalData[] = {
+ CAM_FUNCDATA_FIXD3(CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: PREREND_PIVOT Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetPrerendPivotModeNormalData[] = {
+ CAM_FUNCDATA_UNIQ7(60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: DOORC Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDoorCModeNormalData[] = {
+ CAM_FUNCDATA_SPEC9(-5, 60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE_4, CAM_HUD_VISIBILITY_NONE_ALT, SPECIAL9_FLAG_1)),
+};
+
+/*=====================================================================
+ * Custom Data: DEMO0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B4EF0[] = {
+ CAM_FUNCDATA_INTERFACE_FLAGS(CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_NONE_ALT, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: Various Cutscenes
+ *=====================================================================
+ */
+
+// Camera Settings: FREE0, NAVI, TRANSFORM, ATTENTION, WARP1, STOP0, CONNECT0
+CameraModeValue sSetCutscenesModeNormalData[] = {
+ CAM_FUNCDATA_INTERFACE_FLAGS(CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: FUKAN0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B4EF8[] = {
+ CAM_FUNCDATA_NORM1(
+ -40, 600, 600, 45, 50, 10, 50, 45, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_6 | NORMAL1_FLAG_1)),
+};
+
+CameraModeValue D_801B4F20[] = {
+ CAM_FUNCDATA_PARA1(-40, 400, 25, 60, 0, 5, 5, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 80, 0),
+};
+
+CameraModeValue D_801B4F50[] = {
+ CAM_FUNCDATA_NORM1(-40, 600, 600, 45, 50, 10, 50, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B4F78[] = {
+ CAM_FUNCDATA_NORM1(-40, 600, 600, 45, 100, 100, 100, 45, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: NORMAL1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetNormal1ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 15, 18, 12, 70, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_1)),
+};
+
+CameraModeValue sSetNormal1ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 15, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: NANAME Setting
+ *=====================================================================
+ */
+
+// Normal4
+CameraModeValue D_801B4FF0[] = {
+ CAM_FUNCDATA_NORM1(
+ -20, 280, 320, 10, 18, 12, 40, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5018[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 10, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, FIXED2_FLAG_0)),
+};
+
+CameraModeValue D_801B5034[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 100, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, FIXED2_FLAG_6)),
+};
+
+CameraModeValue D_801B5050[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 200, 100, 50, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, FIXED2_FLAG_7)),
+};
+
+/*=====================================================================
+ * Custom Data: FIXED0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B506C[] = {
+ CAM_FUNCDATA_FIXD1(-40, 10, 60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: SPIRAL_DOOR Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetSpiralDoorModeNormalData[] = {
+ CAM_FUNCDATA_SPEC8(-40, 50, 80, 60, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, SPECIAL8_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: DUNGEON0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDungeon0ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-20, 150, 250, 5, 18, 5, 45, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon0ModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 200, 25, 5, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_6 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+CameraModeValue sSetDungeon0ModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(-20, 120, 140, 25, 45, -5, 15, 15, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 20),
+};
+
+CameraModeValue sSetDungeon0ModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(-30, 150, 240, 10, 50, 5, 10, 25, 50, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 50),
+};
+
+CameraModeValue sSetDungeon0ModeFollowBoomerangData[] = {
+ CAM_FUNCDATA_KEEP1(-5, 150, 240, 5, 65, 10, 5, 40, 55, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue sSetDungeon0ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 150, 250, 5, 24, 5, 50, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon0ModeFreeFallData[] = {
+ CAM_FUNCDATA_PARA1(
+ -10, 250, 100, 70, 0, 4, 5, 70, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_7 | PARALLEL1_FLAG_3), 70, 12),
+};
+
+CameraModeValue sSetDungeon0ModeClimbData[] = {
+ CAM_FUNCDATA_JUMP2(-40, 150, 250, 20, 5, 5, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetDungeon0ModeClimbZData[] = {
+ CAM_FUNCDATA_JUMP2(-40, 250, 250, 20, 999, 5, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, JUMP2_FLAG_2 | JUMP2_FLAG_1)),
+};
+
+CameraModeValue sSetDungeon0ModeChargeData[] = {
+ CAM_FUNCDATA_PARA1(0, 250, -20, 50, 0, 50, 5, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0), 60, 10),
+};
+
+CameraModeValue sSetDungeon0ModeChargeZData[] = {
+ CAM_FUNCDATA_PARA1(50, 250, -20, 40, 0, 50, 5, 80, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue sSetDungeon0ModeHangData[] = {
+ CAM_FUNCDATA_PARA1(-40, 220, 50, 40, 0, 12, 5, 60, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 60, 12),
+};
+
+CameraModeValue sSetDungeon0ModeHangZData[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 250, 50, 70, 0, 10, 5, 45, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 60, 2),
+};
+
+CameraModeValue sSetDungeon0ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(
+ -10, 180, 220, 10, 100, 100, 100, 60, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon0ModePushPullData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 250, 5, 30, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+/*=====================================================================
+ * Custom Data: ITEM0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5338[] = {
+ CAM_FUNCDATA_KEEP4(5, 70, 25, 0, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B535C[] = {
+ CAM_FUNCDATA_KEEP4(-30, 35, 40, 0, 6, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B5380[] = {
+ CAM_FUNCDATA_KEEP4(-15, 90, -8, 0, 0, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B53A4[] = {
+ CAM_FUNCDATA_KEEP4(20, 45, 0x0037, 0, 12, 55,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B53C8[] = {
+ CAM_FUNCDATA_KEEP4(10, 70, 30, 0, 4, 42,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+/*=====================================================================
+ * Custom Data: ITEM1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B53EC[] = {
+ CAM_FUNCDATA_KEEP4(-45, 75, 0xFFF4, 165, 5, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B5410[] = {
+ CAM_FUNCDATA_KEEP4(-40, 70, 20, 140, 5, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B5434[] = {
+ CAM_FUNCDATA_KEEP4(-20, 85, -5, 140, 15, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B5458[] = {
+ CAM_FUNCDATA_KEEP4(-50, 0x005F, -15, 160, 6, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B547C[] = {
+ CAM_FUNCDATA_KEEP4(
+ 0xFFC4, 70, -15, 0xFF74, 30, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3 | KEEPON4_FLAG_2), 25, 6),
+};
+
+/*=====================================================================
+ * Custom Data: ITEM2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B54A0[] = {
+ CAM_FUNCDATA_KEEP4(-40, 0x006E, 5, 150, 5, 65,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B54C4[] = {
+ CAM_FUNCDATA_KEEP4(0xFFC4, 0x0082, -10, 0x00AA, 5, 65,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B54E8[] = {
+ CAM_FUNCDATA_KEEP4(-40, 0x006E, 0, 140, 5, 65,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B550C[] = {
+ CAM_FUNCDATA_KEEP4(-50, 140, -10, 160, 5, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B5530[] = {
+ CAM_FUNCDATA_KEEP4(0xFFC4, 120, -8, 150, 5, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+/*=====================================================================
+ * Custom Data: ITEM3 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5554[] = {
+ CAM_FUNCDATA_KEEP4(
+ -15, 65, 50, 0xFF65, 5, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3 | KEEPON4_FLAG_2), 25, 6),
+};
+
+CameraModeValue D_801B5578[] = {
+ CAM_FUNCDATA_KEEP4(
+ -20, 60, 50, 0xFF65, 5, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3 | KEEPON4_FLAG_2), 25, 6),
+};
+
+CameraModeValue D_801B559C[] = {
+ CAM_FUNCDATA_KEEP4(-15, 60, 40, 0x00AA, 5, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B55C0[] = {
+ CAM_FUNCDATA_KEEP4(
+ -25, 0x005F, 50, 0xFF65, 5, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3 | KEEPON4_FLAG_2), 25, 6),
+};
+
+CameraModeValue D_801B55E4[] = {
+ CAM_FUNCDATA_KEEP4(
+ -20, 75, 45, 0xFF6A, -5, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3 | KEEPON4_FLAG_2), 25, 6),
+};
+
+/*=====================================================================
+ * Custom Data: WARP0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5608[] = {
+ CAM_FUNCDATA_KEEP4(-45, 165, 0, 0x00B2, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE,
+ KEEPON4_FLAG_6 | KEEPON4_FLAG_3 | KEEPON4_FLAG_2 | KEEPON4_FLAG_1),
+ 30, 10),
+};
+
+CameraModeValue D_801B562C[] = {
+ CAM_FUNCDATA_KEEP4(0xFFC9, 180, 0, 0x00B2, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE,
+ KEEPON4_FLAG_6 | KEEPON4_FLAG_3 | KEEPON4_FLAG_2 | KEEPON4_FLAG_1),
+ 30, 10),
+};
+
+CameraModeValue D_801B5650[] = {
+ CAM_FUNCDATA_KEEP4(-20, 0x00AF, 0, 0x00B2, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE,
+ KEEPON4_FLAG_6 | KEEPON4_FLAG_3 | KEEPON4_FLAG_2 | KEEPON4_FLAG_1),
+ 30, 10),
+};
+
+CameraModeValue D_801B5674[] = {
+ CAM_FUNCDATA_KEEP4(-50, 220, 0, 0x00B2, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE,
+ KEEPON4_FLAG_6 | KEEPON4_FLAG_3 | KEEPON4_FLAG_2 | KEEPON4_FLAG_1),
+ 30, 10),
+};
+
+CameraModeValue D_801B5698[] = {
+ CAM_FUNCDATA_KEEP4(0xFFC4, 200, 0, 0x00B2, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE,
+ KEEPON4_FLAG_6 | KEEPON4_FLAG_3 | KEEPON4_FLAG_2 | KEEPON4_FLAG_1),
+ 30, 10),
+};
+
+/*=====================================================================
+ * Custom Data: DEATH Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDeathModeNormalData[] = {
+ CAM_FUNCDATA_KEEP4(0xFFBA, 160, 0, 0, 10, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0), 5, 100),
+};
+
+CameraModeValue sSetDeathModeJumpData[] = {
+ CAM_FUNCDATA_KEEP4(0xFFBA, 160, 0, 0, 5, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0), 5, 100),
+};
+
+CameraModeValue sSetDeathModeDekuShootData[] = {
+ CAM_FUNCDATA_KEEP4(0xFFBA, 150, 0, 0, 5, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0), 5, 100),
+};
+
+/*=====================================================================
+ * Custom Data: REBIRTH Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5728[] = {
+ CAM_FUNCDATA_KEEP4(
+ 0xFFC4, 160, 30, 160, 10, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_2 | KEEPON4_FLAG_1), 5, 100),
+};
+
+CameraModeValue D_801B574C[] = {
+ CAM_FUNCDATA_KEEP4(
+ -20, 140, 30, 160, 10, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_2 | KEEPON4_FLAG_1), 5, 100),
+};
+
+/*=====================================================================
+ * Custom Data: LONG_CHEST_OPENING Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetLongChestOpeningModeNormalData[] = {
+ CAM_FUNCDATA_DEMO2(60, 30, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: DUNGEON1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDungeon1ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-20, 350, 400, 45, 50, 20, 70, 50, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon1ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 350, 400, 40, 50, 20, 50, 50, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon1ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-20, 350, 400, 45, 100, 100, 100, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon1ModePushPullData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 250, 5, 30, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 30, 0),
+};
+
+/*=====================================================================
+ * Custom Data: FIXED1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5824[] = {
+ CAM_FUNCDATA_FIXD1(-40, 100, 60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: FIXED2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5834[] = {
+ CAM_FUNCDATA_FIXD1(-40, 10, 60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: MAZE Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetMazeModeNormalData[] = {
+ CAM_FUNCDATA_PARA2(0xFFDD, 160, 65, -5, 2, 70, 99,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL2_FLAG_1)),
+};
+
+/*=====================================================================
+ * Custom Data: REMOTEBOMB Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetRemoteBombModeNormalData[] = {
+ CAM_FUNCDATA_NORM2(20, 200, 800, 15, 6, 70, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL2_FLAG_1)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5884[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 10, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B58A0[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 100, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE3 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B58BC[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 100, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE4 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B58D8[] = {
+ CAM_FUNCDATA_FIXD2(
+ -40, 40, 0x3200, 100, 10, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED2_FLAG_3 | FIXED2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: FIXED3 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B58F4[] = {
+ CAM_FUNCDATA_FIXD1(-40, 100, 60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: CAM_SET_TOWER_ASCENT Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetTowerClimbModeNormalData[] = {
+ CAM_FUNCDATA_NORM0(0, 350, 400, 20, 20, 50, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL0_FLAG_0)),
+};
+
+CameraModeValue sSetTowerClimbModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 340, 400, 10, 30, 12, 40, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetTowerClimbModeStillData[] = {
+ CAM_FUNCDATA_NORM1(0, 350, 400, 10, 100, 100, 100, 65, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: PARALLEL0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5978[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 400, 20, 0, 0, 20, 5, 70, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_3 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+/*=====================================================================
+ * Custom Data: NORMALD Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B59A8[] = {
+ CAM_FUNCDATA_NORM1(
+ 0, 400, 0x01F4, 15, 18, 12, 35, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: SUBJECTD Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B59D0[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 10, 0, 0, 10, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: START0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B59F4[] = {
+ CAM_FUNCDATA_UNIQ0(0, 100, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, UNIQUE0_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: START2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5A00[] = {
+ CAM_FUNCDATA_UNIQ0(
+ 0, 30, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, UNIQUE0_FLAG_4 | UNIQUE0_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: BOAT_CRUISE Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetBoatCruiseModeNormalData[] = {
+ CAM_FUNCDATA_SUBJ1(20, 90, 80, 10, 0, 50, 0xFF38, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: VERTICAL_CLIMB Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetVerticalClimbModeClimbData[] = {
+ CAM_FUNCDATA_PARA1_ALT(0, 400, 50, 0, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 70, 0,
+ 50),
+};
+
+/*=====================================================================
+ * Custom Data: SIDED Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5A64[] = {
+ CAM_FUNCDATA_PARA1(0, 400, 10, 0, 0xFFA6, 20, 5, 70, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_5 | PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 70, 0),
+};
+
+/*=====================================================================
+ * Custom Data: DUNGEON2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDungeon2ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-10, 270, 300, 20, 0x001C, 20, 65, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon2ModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(-40, 200, 240, 50, 20, 5, 10, 20, 50, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 40),
+};
+
+CameraModeValue sSetDungeon2ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 270, 300, 40, 50, 20, 50, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon2ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-10, 270, 300, 20, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon2ModePushPullData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 200, 5, 15, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 30, 0),
+};
+
+/*=====================================================================
+ * Custom Data: BOSS_ODOLWA Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetBossOdolwaModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-20, 250, 350, 10, 24, 12, 40, 65, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossOdolwaModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(-50, 300, 350, 10, 20, 5, 12, 70, 60, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0), 20),
+};
+
+CameraModeValue sSetBossOdolwaModeTalkData[] = {
+ CAM_FUNCDATA_KEEP3(
+ -20, 230, 260, 20, 10, 20, 15, 40, 55, 20, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, KEEPON3_FLAG_5), 40),
+};
+
+CameraModeValue sSetBossOdolwaModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(0xFFC4, 200, 220, 20, 10, 0, 10, 60, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 10, 40),
+};
+
+CameraModeValue sSetBossOdolwaModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 250, 350, 10, 30, 12, 40, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossOdolwaModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-20, 250, 350, 10, 100, 100, 100, 65, 15,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: KEEP_BACK Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5C80[] = {
+ CAM_FUNCDATA_PARA1(
+ 100, 300, -20, 40, 0, 4, 5, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 60, 20),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE6 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5CB0[] = {
+ CAM_FUNCDATA_FIXD2(
+ -40, 60, 0x3200, 10, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED2_FLAG_1 | FIXED2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE7 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5CCC[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 200, 10, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED2_FLAG_5)),
+};
+
+/*=====================================================================
+ * Custom Data: MINI_BOSS Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetMiniBossModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-15, 220, 280, 17, 14, 5, 65, 70, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetMiniBossModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(0, 200, 250, 25, 45, 40, 15, 40, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 20),
+};
+
+CameraModeValue sSetMiniBossModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(-25, 180, 220, 10, 40, 10, 0, 40, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 20, 50),
+};
+
+CameraModeValue sSetMiniBossModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-15, 220, 280, 16, 12, 5, 60, 70, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetMiniBossModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-15, 220, 280, 16, 100, 100, 100, 70, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: RFIXED1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5DC4[] = {
+ CAM_FUNCDATA_FIXD1(-40, 10, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED1_FLAG_4)),
+};
+
+/*=====================================================================
+ * Custom Data: TRESURE1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetTreasureChestMinigameModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(
+ -20, 80, 120, -10, 15, 20, 40, 70, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_7 | NORMAL1_FLAG_1)),
+};
+
+CameraModeValue sSetTreasureChestMinigameModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0xFFC4, 0x0226, 0, 65, 0, 5, 5, 75, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_6 | PARALLEL1_FLAG_1), 60, 0),
+};
+
+/*=====================================================================
+ * Custom Data: BOMBBASKET Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5E2C[] = {
+ CAM_FUNCDATA_FIXD2(70, 50, 0x3200, 100, 30, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, FIXED2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE8 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5E48[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 100, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED2_FLAG_3)),
+};
+
+/*=====================================================================
+ * Custom Data: BIRDS_EYE_VIEW_1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5E64[] = {
+ CAM_FUNCDATA_NORM1(
+ -20, 800, 800, 60, 50, 10, 50, 45, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_6 | NORMAL1_FLAG_1)),
+};
+
+CameraModeValue D_801B5E8C[] = {
+ CAM_FUNCDATA_NORM1(-20, 800, 800, 60, 100, 100, 100, 45, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: DUNGEON3 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDungeon3ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(
+ -30, 180, 250, -5, 18, 20, 60, 55, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_7 | NORMAL1_FLAG_1)),
+};
+
+CameraModeValue sSetDungeon3ModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(
+ -30, 180, 20, 0, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_6 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+CameraModeValue sSetDungeon3ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-30, 160, 190, 0, 30, 20, 60, 55, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon3ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-40, 0x00AA, 200, 0, 100, 100, 100, 55, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon3ModePushPullData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 180, 5, 5, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 30, 0),
+};
+
+/*=====================================================================
+ * Custom Data: TELESCOPE Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetTelescopeModeNormalData[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 10, 0, 0, 0, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_NONE_ALT, 0)),
+};
+
+CameraModeValue sSetTelescopeModeTargetData[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 10, 0, 0, 0, 15,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_NONE_ALT, 0)),
+};
+
+CameraModeValue sSetTelescopeModeFirstPersonData[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 10, 0, 0, 0, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_NONE_ALT, SUBJECT1_FLAG_4)),
+};
+
+CameraModeValue sSetTelescopeModeDekuHideData[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 0x0001, 0, 0, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_NONE_ALT, SUBJECT1_FLAG_4)),
+};
+
+/*=====================================================================
+ * Custom Data: ROOM0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B601C[] = {
+ CAM_FUNCDATA_NORM1(0xFFDD, 100, 220, 15, 0x0011, 12, 35, 65, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B6044[] = {
+ CAM_FUNCDATA_PARA1(-10, 200, 50, 0, 0, 5, 5, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_6 | PARALLEL1_FLAG_4 | PARALLEL1_FLAG_1),
+ 60, 0),
+};
+
+CameraModeValue D_801B6074[] = {
+ CAM_FUNCDATA_KEEP1(-30, 60, 200, 20, 40, -5, 10, 30, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue D_801B60A4[] = {
+ CAM_FUNCDATA_KEEP3(
+ -20, 50, 100, 50, 5, 20, 5, 40, 35, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, KEEPON3_FLAG_5), 60),
+};
+
+CameraModeValue D_801B60D8[] = {
+ CAM_FUNCDATA_BATT1(-25, 100, 140, 10, 40, -2, 10, 25, 50, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 50),
+};
+
+CameraModeValue D_801B610C[] = {
+ CAM_FUNCDATA_JUMP2(-20, 100, 220, 20, 5, 5, 65, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue D_801B6130[] = {
+ CAM_FUNCDATA_JUMP2(-20, 120, 240, 20, 999, 5, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, JUMP2_FLAG_2 | JUMP2_FLAG_1)),
+};
+
+CameraModeValue D_801B6154[] = {
+ CAM_FUNCDATA_NORM1(-30, 100, 220, 10, 30, 12, 80, 65, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B617C[] = {
+ CAM_FUNCDATA_PARA1(-40, 200, 50, 40, 0, 8, 5, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 60, 12),
+};
+
+CameraModeValue D_801B61AC[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 240, 50, 70, 0, 12, 5, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 60, 2),
+};
+
+CameraModeValue D_801B61DC[] = {
+ CAM_FUNCDATA_PARA1(
+ -10, 200, 100, 70, 0, 4, 5, 70, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_7 | PARALLEL1_FLAG_3), 65, 12),
+};
+
+CameraModeValue D_801B620C[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 240, -20, 50, 0, 50, 5, 80, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0), 65, 10),
+};
+
+CameraModeValue D_801B623C[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 240, -20, 40, 0, 50, 5, 80, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 65, 0),
+};
+
+CameraModeValue D_801B626C[] = {
+ CAM_FUNCDATA_NORM1(-20, 100, 220, 10, 100, 100, 100, 65, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B6294[] = {
+ CAM_FUNCDATA_PARA1(0, 200, 5, 45, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_5 | PARALLEL1_FLAG_4 | PARALLEL1_FLAG_1),
+ 80, 0),
+};
+
+CameraModeValue D_801B62C4[] = {
+ CAM_FUNCDATA_KEEP1(-5, 120, 140, 5, 85, 10, 5, 25, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue D_801B62F4[] = {
+ CAM_FUNCDATA_NORM1(50, 140, 220, 0, 0xC, 10, 40, 90, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_2 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B631C[] = {
+ CAM_FUNCDATA_PARA1(
+ 100, 220, -20, 40, 0, 4, 5, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 80,
+ 20),
+};
+
+CameraModeValue D_801B634C[] = {
+ CAM_FUNCDATA_NORM1(0xFFC4, 150, 250, 40, 20, 12, 40, 80, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B6374[] = {
+ CAM_FUNCDATA_PARA1(0xFFC4, 220, 20, 10, 0, 5, 5, 60, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 90, 0),
+};
+
+CameraModeValue D_801B63A4[] = {
+ CAM_FUNCDATA_NORM1(
+ -10, 120, 240, 0, 18, 12, 40, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_2 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B63CC[] = {
+ CAM_FUNCDATA_PARA1(0, 220, 50, 0, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+/*=====================================================================
+ * Custom Data: RCIRC0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B63FC[] = {
+ CAM_FUNCDATA_FIXD2(
+ -10, 40, 0x3200, 100, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED2_FLAG_4 | FIXED2_FLAG_3)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRC9 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6418[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 5, 25, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, FIXED2_FLAG_2 | FIXED2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: ONTHEPOLE Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6434[] = {
+ CAM_FUNCDATA_NORM1(-15, 60, 600, 35, 40, 20, 60, 45, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_1)),
+};
+
+CameraModeValue D_801B645C[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 300, 5, 35, 0, 5, 5, 60, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_6 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+CameraModeValue D_801B648C[] = {
+ CAM_FUNCDATA_NORM1(-10, 320, 0x017C, 30, 0x0016, 10, 0x0020, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B64B4[] = {
+ CAM_FUNCDATA_JUMP2(-20, 280, 320, 20, 5, 5, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue D_801B64D8[] = {
+ CAM_FUNCDATA_JUMP2(-20, 280, 320, 20, 999, 5, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, JUMP2_FLAG_2 | JUMP2_FLAG_1)),
+};
+
+CameraModeValue D_801B64FC[] = {
+ CAM_FUNCDATA_PARA1(-40, 320, 50, 40, 0, 8, 5, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 50, 12),
+};
+
+CameraModeValue D_801B652C[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 300, 50, 70, 0, 12, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 50, 2),
+};
+
+CameraModeValue D_801B655C[] = {
+ CAM_FUNCDATA_NORM1(-15, 340, 350, 30, 100, 100, 100, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: INBUSH Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6584[] = {
+ CAM_FUNCDATA_NORM1(
+ 0, 260, 280, 20, 20, 12, 50, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_7 | NORMAL1_FLAG_1)),
+};
+
+CameraModeValue D_801B65AC[] = {
+ CAM_FUNCDATA_PARA1(10, 260, 50, 15, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue D_801B65DC[] = {
+ CAM_FUNCDATA_KEEP1(10, 200, 220, 20, 40, 20, 30, 15, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue D_801B660C[] = {
+ CAM_FUNCDATA_KEEP3(
+ 10, 180, 200, 30, 10, 30, 30, 70, 45, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, KEEPON3_FLAG_6), 60),
+};
+
+CameraModeValue D_801B6640[] = {
+ CAM_FUNCDATA_BATT1(10, 220, 220, 10, 80, 20, 30, 25, 50, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 60),
+};
+
+CameraModeValue D_801B6674[] = {
+ CAM_FUNCDATA_SUBJ1(0, 10, 60, 10, 0, 50, 0, 45, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue D_801B6698[] = {
+ CAM_FUNCDATA_NORM1(0, 260, 280, 40, 20, 12, 40, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1)),
+};
+
+CameraModeValue D_801B66C0[] = {
+ CAM_FUNCDATA_NORM1(0, 260, 280, 20, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: BOSS_MAJORA Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetBossMajoraModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(0, 280, 320, -5, 24, 12, 0x0020, 65, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossMajoraModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(-30, 240, 260, 20, 40, 10, 5, 60, 50, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0), 30),
+};
+
+CameraModeValue sSetBossMajoraModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(0xFFC4, 180, 200, 10, 20, 20, 10, 20, 70, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 10, 40),
+};
+
+CameraModeValue sSetBossMajoraModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 30, 12, 40, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossMajoraModeStillData[] = {
+ CAM_FUNCDATA_NORM1(0, 280, 320, 0, 100, 100, 100, 65, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: BOSS_TWINMOLD Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetBossTwinmoldModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(20, 350, 400, 0, 0x001A, 12, 0x0020, 75, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossTwinmoldModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(0, 400, 50, 0, 0, 5, 5, 55, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue sSetBossTwinmoldModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(-30, 250, 300, 20, 40, 10, 5, 60, 50, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0), 30),
+};
+
+CameraModeValue sSetBossTwinmoldModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(0, 150, 200, 10, 30, 10, 0, 20, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 10, 40),
+};
+
+CameraModeValue sSetBossTwinmoldModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 350, 400, 10, 30, 12, 40, 75, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossTwinmoldModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_4 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: BOSS_GOHT Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetBossGohtModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 20, 12, 50, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossGohtModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(-25, 220, 220, 10, 80, -2, 10, 25, 50, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 50),
+};
+
+CameraModeValue sSetBossGohtModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 30, 12, 40, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossGohtModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 100, 100, 100, 60, 15,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossGohtModeGoronDashData[] = {
+ CAM_FUNCDATA_NORM1(60, 200, 340, 10, 15, 10, 50, 85, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_2 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: BOSS_GYORG Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetBossGyorgModeNormalData[] = {
+ CAM_FUNCDATA_JUMP3(-20, 280, 320, 10, 20, 12, 40, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetBossGyorgModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(-30, 200, 240, 20, 40, -5, 10, 15, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue sSetBossGyorgModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(-30, 190, 250, 10, 50, 0, 10, 20, 50, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 50),
+};
+
+CameraModeValue sSetBossGyorgModeGoronJumpData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 160, 260, -5, 18, 5, 40, 70, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetBossGyorgModeDekuFlyData[] = {
+ CAM_FUNCDATA_JUMP3(-30, 220, 280, 0, 18, 5, 60, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetBossGyorgModeDekuHideData[] = {
+ CAM_FUNCDATA_JUMP3(
+ 0xFFC4, 160, 280, -15, 18, 5, 60, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetBossGyorgModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-40, 100, 320, 20, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: PINNACLE_ROCK Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetPinnacleRockModeNormalData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 250, 350, 30, 15, 5, 40, 60, 100,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetPinnacleRockModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(
+ -50, 350, 40, 10, 0, 15, 5, 60, 100,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1 | PARALLEL1_FLAG_0), 80, 0),
+};
+
+CameraModeValue sSetPinnacleRockModeGoronJumpData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 320, 400, -5, 18, 5, 40, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetPinnacleRockModeDekuFlyData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 300, 350, 10, 18, 5, 60, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetPinnacleRockModeDekuHideData[] = {
+ CAM_FUNCDATA_JUMP3(
+ 0xFFC4, 150, 250, -18, 18, 5, 60, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetPinnacleRockModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-40, 250, 350, 30, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetPinnacleRockModeGoronDashData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 250, 280, 5, 0x0011, 5, 40, 75, 35,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+/*=====================================================================
+ * Custom Data: NORMAL2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetNormal2ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-10, 350, 400, 14, 25, 14, 60, 65, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal2ModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(0, 350, 80, 0, 0, 5, 5, 50, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue sSetNormal2ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-10, 350, 0x01A4, 10, 30, 10, 40, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal2ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-10, 350, 400, 14, 100, 100, 100, 65, 16,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: BOMBBOWL Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6C98[] = {
+ CAM_FUNCDATA_NORM1(-30, 300, 320, 15, 0x0016, 12, 30, 55, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B6CC0[] = {
+ CAM_FUNCDATA_KEEP1(-30, 180, 200, 20, 30, -5, 10, 40, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue D_801B6CF0[] = {
+ CAM_FUNCDATA_KEEP3(
+ -30, 65, 70, 10, 10, 5, 5, 20, 45, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, KEEPON3_FLAG_5), 50),
+};
+
+CameraModeValue D_801B6D24[] = {
+ CAM_FUNCDATA_NORM1(-20, 300, 320, 10, 30, 12, 40, 55, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B6D4C[] = {
+ CAM_FUNCDATA_NORM1(-30, 300, 320, 15, 100, 100, 100, 55, 25,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCA Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6D74[] = {
+ CAM_FUNCDATA_FIXD2(-40, 60, 0x3200, 100, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE,
+ FIXED2_FLAG_3 | FIXED2_FLAG_1 | FIXED2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: WHIRLPOOL Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetWhirlpoolModeNormalData[] = {
+ CAM_FUNCDATA_JUMP3(
+ -10, 280, 350, 50, 12, 5, 30, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_5 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetWhirlpoolModeFreeFallData[] = {
+ CAM_FUNCDATA_JUMP3(0, 180, 300, 30, 12, 5, 25, 75, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_4 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetWhirlpoolModeGoronJumpData[] = {
+ CAM_FUNCDATA_JUMP3(
+ -40, 320, 350, -5, 12, 5, 25, 65, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_4 | JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetWhirlpoolModeDekuFlyData[] = {
+ CAM_FUNCDATA_JUMP3(
+ -40, 300, 350, 10, 15, 5, 30, 65, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_5 | JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetWhirlpoolModeDekuHideData[] = {
+ CAM_FUNCDATA_JUMP3(
+ 0xFFC4, 150, 250, -18, 15, 5, 30, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_4 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetWhirlpoolModeGoronDashData[] = {
+ CAM_FUNCDATA_JUMP3(
+ -40, 220, 260, 5, 8, 5, 20, 75, 35,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_4 | JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+/*=====================================================================
+ * Custom Data: CUCCO_SHACK Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetCuccoShackModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(0xFFBA, 250, 0x01F4, 5, 30, 12, 45, 50, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetCuccoShackModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-40, 250, 0x01F4, 5, 100, 100, 100, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetCuccoShackModeDekuHideData[] = {
+ CAM_FUNCDATA_NORM1(-40, 250, 0x01F4, 5, 25, 12, 40, 50, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: GIANT Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetGiantModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-40, 150, 160, -15, 25, 14, 50, 50, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetGiantModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(-40, 180, 80, 0, 0, 5, 5, 50, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue sSetGiantModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-10, 100, 150, 10, 30, 10, 40, 70, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetGiantModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-40, 150, 160, 0xFFF4, 25, 14, 50, 50, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: SCENE0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6FA0[] = {
+ CAM_FUNCDATA_UNIQ2(-40, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ UNIQUE2_FLAG_5 | UNIQUE2_FLAG_4 | UNIQUE2_FLAG_1)),
+};
+
+/*=====================================================================
+ * Custom Data: ROOM1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6FB0[] = {
+ CAM_FUNCDATA_NORM1(-15, 120, 250, 16, 16, 5, 65, 60, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B6FD8[] = {
+ CAM_FUNCDATA_KEEP1(-20, 100, 150, 0, 4, 20, 10, 40, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 20),
+};
+
+CameraModeValue D_801B7008[] = {
+ CAM_FUNCDATA_BATT1(-25, 100, 180, 10, 40, 10, 0, 40, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 20, 50),
+};
+
+CameraModeValue D_801B703C[] = {
+ CAM_FUNCDATA_NORM1(-15, 120, 250, 16, 12, 5, 60, 70, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B7064[] = {
+ CAM_FUNCDATA_NORM1(-15, 120, 250, 16, 100, 100, 100, 70, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B708C[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 200, 5, 30, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+/*=====================================================================
+ * Custom Data: WATER2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B70BC[] = {
+ CAM_FUNCDATA_JUMP3(-10, 270, 300, 20, 30, 20, 65, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue D_801B70E4[] = {
+ CAM_FUNCDATA_PARA1(
+ -30, 280, 40, 10, 0, 15, 5, 60, 100,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1 | PARALLEL1_FLAG_0), 60, 0),
+};
+
+CameraModeValue D_801B7114[] = {
+ CAM_FUNCDATA_KEEP3(-20, 50, 100, 50, 5, 20, 10, 40, 45, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, 0),
+ 60),
+};
+
+CameraModeValue D_801B7148[] = {
+ CAM_FUNCDATA_JUMP3(-40, 180, 200, 5, 20, 5, 40, 75, 35,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+/*=====================================================================
+ * Custom Data: FORCEKEEP Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B7170[] = {
+ CAM_FUNCDATA_KEEP1(
+ -30, 180, 200, 20, 40, -5, 10, 15, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_4 | KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue D_801B71A0[] = {
+ CAM_FUNCDATA_BATT1(
+ -30, 150, 250, 10, 60, -5, 20, 35, 55, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_4 | BATTLE1_FLAG_1), 25, 40),
+};
+
+/*=====================================================================
+ * Custom Data: PARALLEL1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B71D4[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 400, 20, 20, 0, 20, 5, 70, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_3 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+/*=====================================================================
+ * Custom Data: START1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B7204[] = {
+ CAM_FUNCDATA_UNIQ0(0, 100, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, UNIQUE0_FLAG_1)),
+};
+
+/*=====================================================================
+ * Custom Data: ROOM2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B7210[] = {
+ CAM_FUNCDATA_KEEP3(
+ -10, 120, 180, 50, 5, 10, 5, 70, 35, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, KEEPON3_FLAG_5), 60),
+};
+
+/*=====================================================================
+ * Custom Data: NORMAL4 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetNormal4ModeTalkData[] = {
+ CAM_FUNCDATA_KEEP3(
+ -20, 0x006E, 160, 80, 15, 10, 0, 70, 40, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, KEEPON3_FLAG_5), 50),
+};
+
+/*=====================================================================
+ * Custom Data: ELEGY_SHELL Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetElegyShellModeNormalData[] = {
+ CAM_FUNCDATA_KEEP4(-45, 150, -10, 165, 5, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 30),
+};
+
+CameraModeValue sSetElegyShellModeJumpData[] = {
+ CAM_FUNCDATA_KEEP4(-40, 150, 18, 140, 5, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 30),
+};
+
+CameraModeValue sSetElegyShellModeDekuShootData[] = {
+ CAM_FUNCDATA_KEEP4(-20, 150, -2, 140, 15, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 30),
+};
+
+CameraModeValue sSetElegyShellModeGoronDashData[] = {
+ CAM_FUNCDATA_KEEP4(-50, 150, 0xFFF4, 160, 6, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 30),
+};
+
+CameraModeValue sSetElegyShellModeDekuFlyData[] = {
+ CAM_FUNCDATA_KEEP4(
+ 0xFFC4, 150, 0xFFF4, 0xFF74, 30, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3 | KEEPON4_FLAG_2), 25, 30),
+};
+
+/*=====================================================================
+ * Custom Data: DUNGEON4 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDungeon4ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(0, 150, 250, -5, 16, 5, 0x0034, 55, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon4ModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(0, 200, 25, 5, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 80, 0),
+};
+
+CameraModeValue sSetDungeon4ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(0, 150, 250, 0, 24, 5, 50, 55, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon4ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(
+ 0, 180, 220, 5, 100, 100, 100, 55, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/**
+ * =====================================================================
+ * CAMERA SETTINGS: USAGE OF FUNCTIONS AND DATA FOR SPECIFIC MODES
+ * =====================================================================
+ */
+
+#define CAM_SETTING_MODE_ENTRY(func, data) \
+ { func, ARRAY_COUNT(data), data }
+
+#define CAM_SETTING_MODE_NULL \
+ { CAM_FUNC_NONE, 0, NULL }
+
+CameraMode sCamSetNormal0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronJumpData), // CAM_MODE_GORONJUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeZData), // CAM_MODE_CHARGEZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_ZORAFINZ
+};
+
+CameraMode sCamSetNormal3Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal3ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_NULL, // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal3ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeGoronJumpData), // CAM_MODE_GORONJUMP
+};
+
+CameraMode sCamSetPivotDivingModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE2, sSetPivotDivingModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_NULL, // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE2, sSetPivotDivingModeTargetData), // CAM_MODE_TARGET
+};
+
+CameraMode sCamSetHorseModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL3, sSetHorseModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL3, sSetHorseModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_NULL, // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetHorseModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL3, sSetHorseModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetHorseModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetHorseModeSlingShotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetHorseModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetHorseModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL3, sSetHorseModeStillData), // CAM_MODE_STILL
+};
+
+CameraMode sCamSetZoraDivingModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL3, sSetZoraDivingModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetPreRendFixedModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED3, sSetPrerendFixedModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetPreRendPivotModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE7, sSetPrerendPivotModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetDoorCModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL9, sSetDoorCModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetDemo0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO1, D_801B4EF0), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetFree0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE6, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetFukan0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4EF8), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4F50), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B4F20), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4F78), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4EF8), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetNormal1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal1ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal1ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetNanameModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL4, D_801B4FF0), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetCirc0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5018), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5034), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5050), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+};
+
+CameraMode sCamSetFixed0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED1, D_801B506C), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+};
+
+CameraMode sCamSetSpiralDoorModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL8, sSetSpiralDoorModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetDungeon0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon0ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetDungeon0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronJumpData), // CAM_MODE_GORONJUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeZData), // CAM_MODE_CHARGEZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_ZORAFINZ
+};
+
+CameraMode sCamSetItem0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5338), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B535C), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B53A4), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5380), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B53C8), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetItem1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B53EC), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5410), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5458), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5434), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B547C), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetItem2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B54A0), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B54C4), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B550C), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B54E8), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5530), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetItem3Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5554), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5578), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B55C0), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B559C), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B55E4), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetNaviModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE6, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetWarp0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5608), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B562C), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5674), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5650), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5698), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetDeathModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetDeathModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetDeathModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetDeathModeJumpData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetDeathModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetDeathModeJumpData), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetRebirthModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5728), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5728), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5728), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B574C), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5728), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetLongChestOpeningModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO2, sSetLongChestOpeningModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetMaskTransformationModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO4, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO5, sSetCutscenesModeNormalData), // CAM_MODE_JUMP
+};
+
+CameraMode sCamSetAttentionModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO1, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetWarp1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO3, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetDungeon1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon1ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon1ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetDungeon0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon1ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon1ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetFixed1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED1, D_801B5824), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetFixed2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED1, D_801B5834), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetMazeModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL2, sSetMazeModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetRemoteBombModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL2, sSetRemoteBombModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetCirc1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5884), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetCirc2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B58A0), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetCirc3Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B58BC), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5034), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5050), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+};
+
+CameraMode sCamSetCirc4Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B58D8), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetFixed3Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED1, D_801B58F4), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+};
+
+CameraMode sCamSetTowerClimbModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL0, sSetTowerClimbModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetTowerClimbModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetTowerClimbModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetParallel0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B5978), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetNormDModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B59A8), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetSubjectDModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, D_801B59D0), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetStart0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE0, D_801B59F4), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetStart2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE0, D_801B5A00), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetStop0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE6, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetBoatCruiseModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetBoatCruiseModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_NULL, // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+};
+
+CameraMode sCamSetVerticalClimbModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetVerticalClimbModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetVerticalClimbModeClimbData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetSidedModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B5A64), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetDungeon2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon2ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon2ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetDungeon2ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon2ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon2ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetBossOdolwaModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossOdolwaModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossOdolwaModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetBossOdolwaModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetBossOdolwaModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetBossOdolwaModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossOdolwaModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetKeepBackModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B5C80), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetVerticalClimbModeClimbData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetCirc6Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5CB0), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetCirc7Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5CCC), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetMiniBossModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetMiniBossModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetMiniBossModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetMiniBossModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetMiniBossModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetMiniBossModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetRFixed1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED1, D_801B5DC4), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetTreasureChestMinigameModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetTreasureChestMinigameModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_NULL, // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetTreasureChestMinigameModeTargetData), // CAM_MODE_TARGET
+};
+
+CameraMode sCamSetBombBasketModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5E2C), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetCirc8Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5E48), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetFukan1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B5E64), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4F50), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B4F20), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B5E8C), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4EF8), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetDungeon3Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon3ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon3ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon3ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetDungeon0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon3ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon3ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetTelescopeModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetTelescopeModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetTelescopeModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_NULL, // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetTelescopeModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TALK
+ CAM_SETTING_MODE_NULL, // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetTelescopeModeDekuHideData), // CAM_MODE_DEKUHIDE
+};
+
+CameraMode sCamSetRoom0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B601C), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6154), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B62F4), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B634C), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B62C4), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B6074), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B6044), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B60A4), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, D_801B60D8), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B631C), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B626C), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B620C), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, D_801B610C), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, D_801B6130), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B61DC), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B617C), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B61AC), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B6294), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B6374), // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B63A4), // CAM_MODE_GORONJUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B623C), // CAM_MODE_CHARGEZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B63CC), // CAM_MODE_ZORAFINZ
+};
+
+CameraMode sCamSetRCirc0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B63FC), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetCirc9Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B6418), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5034), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5050), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+};
+
+CameraMode sCamSetOnThePoleModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6434), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B648C), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B645C), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetDungeon0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B655C), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, D_801B64B4), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, D_801B64D8), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B64FC), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B652C), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon1ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetInBushModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6584), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6698), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, D_801B6674), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B65DC), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B65AC), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B660C), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, D_801B6640), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B66C0), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4EF8), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetBossMajoraModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossMajoraModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossMajoraModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetBossMajoraModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetBossMajoraModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossMajoraModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetBossTwinmoldModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossTwinmoldModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossTwinmoldModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetBossTwinmoldModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetBossTwinmoldModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetBossTwinmoldModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossTwinmoldModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetBossGohtModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossGohtModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossGohtModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossGohtModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetBossGohtModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossGohtModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetBossGyorgModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetBossGyorgModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetBossGyorgModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetBossGyorgModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_NULL, // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetBossGyorgModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetBossGyorgModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossGyorgModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetBossGyorgModeGoronJumpData), // CAM_MODE_GORONJUMP
+};
+
+CameraMode sCamSetConnect0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO0, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetPinnacleRockModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetPinnacleRockModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetPinnacleRockModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetPinnacleRockModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetPinnacleRockModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_NULL, // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetPinnacleRockModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetPinnacleRockModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetPinnacleRockModeGoronJumpData), // CAM_MODE_GORONJUMP
+};
+
+CameraMode sCamSetNormal2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal2ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal2ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal2ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal2ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetBombBowlModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6C98), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6D24), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B62F4), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B634C), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B62C4), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B6CC0), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B6044), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B6CF0), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, D_801B60D8), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B631C), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6D4C), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B620C), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, D_801B610C), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, D_801B6130), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B61DC), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B617C), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B61AC), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B6294), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B6374), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetCircAModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B6D74), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetWhirlpoolModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetWhirlpoolModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetWhirlpoolModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetWhirlpoolModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetPinnacleRockModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_NULL, // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetWhirlpoolModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetWhirlpoolModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetWhirlpoolModeGoronJumpData), // CAM_MODE_GORONJUMP
+};
+
+CameraMode sCamSetCuccoShackModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetCuccoShackModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal2ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal2ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetCuccoShackModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetCuccoShackModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+};
+
+CameraMode sCamSetGiantModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetGiantModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetGiantModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetGiantModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetGiantModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetScene0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE2, D_801B6FA0), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetRoom1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6FB0), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B703C), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B62C4), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B6FD8), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B60A4), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, D_801B7008), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B7064), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B708C), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetWater2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, D_801B70BC), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, D_801B7148), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B70E4), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B7114), // CAM_MODE_TALK
+ CAM_SETTING_MODE_NULL, // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal3ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeGoronJumpData), // CAM_MODE_GORONJUMP
+};
+
+CameraMode sCamSetWoodfallSwampModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE3, D_801B6584), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE3, D_801B6698), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE3, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE3, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, D_801B6674), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B65DC), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, D_801B65AC), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B660C), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE5, D_801B6640), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE3, D_801B66C0), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE3, D_801B6584), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetForceKeepModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B7170), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, D_801B71A0), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetParallel1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B71D4), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetStart1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE0, D_801B7204), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetRoom2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6FB0), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B703C), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B62C4), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B6FD8), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B7210), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, D_801B7008), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B7064), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B708C), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetNorm4Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal4ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetElegyShellModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetElegyShellModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetElegyShellModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetElegyShellModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetElegyShellModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetElegyShellModeDekuFlyData), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetDungeon4Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon4ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon4ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon4ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetDungeon0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon4ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraSetting sCameraSettings[] = {
+ { 0x00000000, 0x00000000, NULL }, // CAM_SET_NONE
+ { 0x3FFFFFFF, 0x00000005, sCamSetNormal0Modes }, // CAM_SET_NORMAL0
+ { 0x05FFEFF7, 0x00000005, sCamSetNormal3Modes }, // CAM_SET_NORMAL3
+ { 0x00000401, 0x00000005, sCamSetPivotDivingModes }, // CAM_SET_PIVOT_DIVING
+ { 0x00017E13, 0x80000005, sCamSetHorseModes }, // CAM_SET_HORSE
+ { 0x00000001, 0x80000005, sCamSetZoraDivingModes }, // CAM_SET_ZORA_DIVING
+ { 0x00000001, 0x8000000C, sCamSetPreRendFixedModes }, // CAM_SET_PREREND_FIXED
+ { 0x00000001, 0x8000000C, sCamSetPreRendPivotModes }, // CAM_SET_PREREND_PIVOT
+ { 0x00000001, 0xC0000007, sCamSetDoorCModes }, // CAM_SET_DOORC
+ { 0x00000001, 0xC000000E, sCamSetDemo0Modes }, // CAM_SET_DEMO0
+ { 0x00000001, 0x80000005, sCamSetFree0Modes }, // CAM_SET_FREE0
+ { 0x03FFFFFF, 0x00000005, sCamSetFukan0Modes }, // CAM_SET_BIRDS_EYE_VIEW_0
+ { 0x03FFFFFF, 0x00000005, sCamSetNormal1Modes }, // CAM_SET_NORMAL1
+ { 0x03FFFFFF, 0x80000005, sCamSetNanameModes }, // CAM_SET_NANAME
+ { 0x00001BD9, 0x80000005, sCamSetCirc0Modes }, // CAM_SET_CIRCLE0
+ { 0x000011D9, 0x80000005, sCamSetFixed0Modes }, // CAM_SET_FIXED0
+ { 0x00000001, 0x40000005, sCamSetSpiralDoorModes }, // CAM_SET_SPIRAL_DOOR
+ { 0x3FFFFFFF, 0x00000005, sCamSetDungeon0Modes }, // CAM_SET_DUNGEON0
+ { 0x0000002F, 0x00000005, sCamSetItem0Modes }, // CAM_SET_ITEM0
+ { 0x0000002F, 0x00000005, sCamSetItem1Modes }, // CAM_SET_ITEM1
+ { 0x0000002F, 0x00000005, sCamSetItem2Modes }, // CAM_SET_ITEM2
+ { 0x0000002F, 0x00000005, sCamSetItem3Modes }, // CAM_SET_ITEM3
+ { 0x00000001, 0x00000005, sCamSetNaviModes }, // CAM_SET_NAVI
+ { 0x0000002F, 0x00000005, sCamSetWarp0Modes }, // CAM_SET_WARP_PAD_MOON
+ { 0x0000002F, 0x00000005, sCamSetDeathModes }, // CAM_SET_DEATH
+ { 0x0000002F, 0x00000005, sCamSetRebirthModes }, // CAM_SET_REBIRTH
+ { 0x00000001, 0x40000005, sCamSetLongChestOpeningModes }, // CAM_SET_LONG_CHEST_OPENING
+ { 0x00000003, 0x00000005, sCamSetMaskTransformationModes }, // CAM_SET_MASK_TRANSFORMATION
+ { 0x00000001, 0x00000005, sCamSetAttentionModes }, // CAM_SET_ATTENTION
+ { 0x00000001, 0x00000005, sCamSetWarp1Modes }, // CAM_SET_WARP_PAD_ENTRANCE
+ { 0x03FFFFFF, 0x00000005, sCamSetDungeon1Modes }, // CAM_SET_DUNGEON1
+ { 0x00000001, 0x80000005, sCamSetFixed1Modes }, // CAM_SET_FIXED1
+ { 0x00000001, 0x80000005, sCamSetFixed2Modes }, // CAM_SET_FIXED2
+ { 0x00000001, 0x00000005, sCamSetMazeModes }, // CAM_SET_MAZE
+ { 0x00000001, 0x00000005, sCamSetRemoteBombModes }, // CAM_SET_REMOTEBOMB
+ { 0x00000001, 0x80000005, sCamSetCirc1Modes }, // CAM_SET_CIRCLE1
+ { 0x00000001, 0x80000005, sCamSetCirc2Modes }, // CAM_SET_CIRCLE2
+ { 0x00001BD9, 0x80000005, sCamSetCirc3Modes }, // CAM_SET_CIRCLE3
+ { 0x00000001, 0x80000005, sCamSetCirc4Modes }, // CAM_SET_CIRCLE4
+ { 0x000011D9, 0x80000005, sCamSetFixed3Modes }, // CAM_SET_FIXED3
+ { 0x03FFFFFF, 0x80000005, sCamSetTowerClimbModes }, // CAM_SET_TOWER_ASCENT
+ { 0x00000001, 0x80000005, sCamSetParallel0Modes }, // CAM_SET_PARALLEL0
+ { 0x00000001, 0x00000005, sCamSetNormDModes }, // CAM_SET_NORMALD
+ { 0x00000001, 0x00000005, sCamSetSubjectDModes }, // CAM_SET_SUBJECTD
+ { 0x00000001, 0xC0000008, sCamSetStart0Modes }, // CAM_SET_START0
+ { 0x00000001, 0xC0000008, sCamSetStart2Modes }, // CAM_SET_START2
+ { 0x00000001, 0x00000005, sCamSetStop0Modes }, // CAM_SET_STOP0
+ { 0x00003051, 0x00000005, sCamSetBoatCruiseModes }, // CAM_SET_BOAT_CRUISE
+ { 0x03FFFFFF, 0x00000005, sCamSetVerticalClimbModes }, // CAM_SET_VERTICAL_CLIMB
+ { 0x00000001, 0x00000005, sCamSetSidedModes }, // CAM_SET_SIDED
+ { 0x03FFFFFF, 0x00000005, sCamSetDungeon2Modes }, // CAM_SET_DUNGEON2
+ { 0x03FFFFFF, 0x00000005, sCamSetBossOdolwaModes }, // CAM_SET_BOSS_ODOLWA
+ { 0x03FFFFFF, 0x80000005, sCamSetKeepBackModes }, // CAM_SET_KEEPBACK
+ { 0x00000001, 0x80000005, sCamSetCirc6Modes }, // CAM_SET_CIRCLE6
+ { 0x00000001, 0x80000005, sCamSetCirc7Modes }, // CAM_SET_CIRCLE7
+ { 0x03FFFFFF, 0x00000005, sCamSetMiniBossModes }, // CAM_SET_MINI_BOSS
+ { 0x00000001, 0x80000005, sCamSetRFixed1Modes }, // CAM_SET_RFIXED1
+ { 0x00000401, 0x00000005, sCamSetTreasureChestMinigameModes }, // CAM_SET_TREASURE_CHEST_MINIGAME
+ { 0x00000001, 0x80000005, sCamSetBombBasketModes }, // CAM_SET_HONEY_AND_DARLING_1
+ { 0x00000001, 0x80000005, sCamSetCirc8Modes }, // CAM_SET_CIRCLE8
+ { 0x03FFFFFF, 0x00000005, sCamSetFukan1Modes }, // CAM_SET_BIRDS_EYE_VIEW_1
+ { 0x03FFFFFF, 0x00000005, sCamSetDungeon3Modes }, // CAM_SET_DUNGEON3
+ { 0x00008441, 0x0000000A, sCamSetTelescopeModes }, // CAM_SET_TELESCOPE
+ { 0x3FFFFFFF, 0x00000005, sCamSetRoom0Modes }, // CAM_SET_ROOM0
+ { 0x00000001, 0x80000005, sCamSetRCirc0Modes }, // CAM_SET_RCIRC0
+ { 0x00001BD9, 0x80000005, sCamSetCirc9Modes }, // CAM_SET_CIRCLE9
+ { 0x03FFFFFF, 0x00000005, sCamSetOnThePoleModes }, // CAM_SET_ONTHEPOLE
+ { 0x03FFFFFF, 0x00000005, sCamSetInBushModes }, // CAM_SET_INBUSH
+ { 0x03FFFFFF, 0x00000005, sCamSetBossMajoraModes }, // CAM_SET_BOSS_MAJORA
+ { 0x03FFFFFF, 0x00000005, sCamSetBossTwinmoldModes }, // CAM_SET_BOSS_TWINMOLD
+ { 0x03FFFFFF, 0x00000005, sCamSetBossGohtModes }, // CAM_SET_BOSS_GOHT
+ { 0x05FFEFF7, 0x00000005, sCamSetBossGyorgModes }, // CAM_SET_BOSS_GYORG
+ { 0x00000001, 0x00000005, sCamSetConnect0Modes }, // CAM_SET_CONNECT0
+ { 0x05FFEFF7, 0x00000005, sCamSetPinnacleRockModes }, // CAM_SET_PINNACLE_ROCK
+ { 0x03FFFFFF, 0x00000005, sCamSetNormal2Modes }, // CAM_SET_NORMAL2
+ { 0x03FFFFFF, 0x00000005, sCamSetBombBowlModes }, // CAM_SET_HONEY_AND_DARLING_2
+ { 0x00000001, 0x80000005, sCamSetCircAModes }, // CAM_SET_CIRCLEA
+ { 0x05FFEFF7, 0x00000005, sCamSetWhirlpoolModes }, // CAM_SET_WHIRLPOOL
+ { 0x01FFFFDF, 0x00000005, sCamSetCuccoShackModes }, // CAM_SET_CUCCO_SHACK
+ { 0x03FFFFFF, 0x00000005, sCamSetGiantModes }, // CAM_SET_GIANT
+ { 0x00000001, 0x00000008, sCamSetScene0Modes }, // CAM_SET_SCENE0
+ { 0x03FFFFFF, 0x00000005, sCamSetRoom1Modes }, // CAM_SET_ROOM1
+ { 0x05FFEFF7, 0x00000005, sCamSetWater2Modes }, // CAM_SET_WATER2
+ { 0x03FFFFFF, 0x00000005, sCamSetWoodfallSwampModes }, // CAM_SET_WOODFALL_SWAMP
+ { 0x03FFFFFF, 0x00000005, sCamSetForceKeepModes }, // CAM_SET_FORCEKEEP
+ { 0x03FFFFFF, 0x80000005, sCamSetParallel1Modes }, // CAM_SET_PARALLEL1
+ { 0x00000001, 0xC0000008, sCamSetStart1Modes }, // CAM_SET_START1
+ { 0x03FFFFFF, 0x00000005, sCamSetRoom2Modes }, // CAM_SET_ROOM2
+ { 0x03FFFFFF, 0x00000005, sCamSetNorm4Modes }, // CAM_SET_NORMAL4
+ { 0x0000002F, 0x00000005, sCamSetElegyShellModes }, // CAM_SET_ELEGY_SHELL
+ { 0x03FFFFFF, 0x00000005, sCamSetDungeon4Modes }, // CAM_SET_DUNGEON4
+};
+
+s16 sGlobalCamDataSettings[] = {
+ /* -25 */ CAM_SET_ELEGY_SHELL,
+ /* -24 */ CAM_SET_SIDED,
+ /* -23 */ CAM_SET_BOAT_CRUISE,
+ /* -22 */ CAM_SET_NONE,
+ /* -21 */ CAM_SET_SUBJECTD,
+ /* -20 */ CAM_SET_NORMALD,
+ /* -19 */ CAM_SET_NONE,
+ /* -18 */ CAM_SET_NONE,
+ /* -17 */ CAM_SET_NONE,
+ /* -16 */ CAM_SET_WARP_PAD_ENTRANCE,
+ /* -15 */ CAM_SET_ATTENTION,
+ /* -14 */ CAM_SET_CONNECT0,
+ /* -13 */ CAM_SET_REMOTEBOMB,
+ /* -12 */ CAM_SET_NONE,
+ /* -11 */ CAM_SET_MASK_TRANSFORMATION,
+ /* -10 */ CAM_SET_LONG_CHEST_OPENING,
+ /* -9 */ CAM_SET_REBIRTH,
+ /* -8 */ CAM_SET_DEATH,
+ /* -7 */ CAM_SET_WARP_PAD_MOON,
+ /* -6 */ CAM_SET_NAVI,
+ /* -5 */ CAM_SET_ITEM3,
+ /* -4 */ CAM_SET_ITEM2,
+ /* -3 */ CAM_SET_ITEM1,
+ /* -2 */ CAM_SET_ITEM0,
+ /* -1 */ CAM_SET_STOP0,
+ /* 0 */ CAM_SET_NONE,
+};
+
+s16* sGlobalCamDataSettingsPtr = &sGlobalCamDataSettings[ARRAY_COUNT(sGlobalCamDataSettings) - 1];
+
+s32 Camera_Noop(Camera* camera);
+s32 Camera_Normal1(Camera* camera);
+s32 Camera_Normal2(Camera* camera);
+s32 Camera_Normal3(Camera* camera);
+s32 Camera_Normal4(Camera* camera);
+s32 Camera_Normal0(Camera* camera);
+s32 Camera_Parallel1(Camera* camera);
+s32 Camera_Parallel2(Camera* camera);
+s32 Camera_Parallel3(Camera* camera);
+s32 Camera_Parallel4(Camera* camera);
+s32 Camera_Parallel0(Camera* camera);
+s32 Camera_Jump1(Camera* camera);
+s32 Camera_Jump2(Camera* camera);
+s32 Camera_Jump3(Camera* camera);
+s32 Camera_Jump4(Camera* camera);
+s32 Camera_Jump0(Camera* camera);
+s32 Camera_Battle1(Camera* camera);
+s32 Camera_Battle2(Camera* camera);
+s32 Camera_Battle3(Camera* camera);
+s32 Camera_Battle4(Camera* camera);
+s32 Camera_Battle0(Camera* camera);
+s32 Camera_KeepOn1(Camera* camera);
+s32 Camera_KeepOn2(Camera* camera);
+s32 Camera_KeepOn3(Camera* camera);
+s32 Camera_KeepOn4(Camera* camera);
+s32 Camera_KeepOn0(Camera* camera);
+s32 Camera_Fixed1(Camera* camera);
+s32 Camera_Fixed2(Camera* camera);
+s32 Camera_Fixed3(Camera* camera);
+s32 Camera_Fixed4(Camera* camera);
+s32 Camera_Fixed0(Camera* camera);
+s32 Camera_Subject1(Camera* camera);
+s32 Camera_Subject2(Camera* camera);
+s32 Camera_Subject3(Camera* camera);
+s32 Camera_Subject4(Camera* camera);
+s32 Camera_Subject0(Camera* camera);
+s32 Camera_Data0(Camera* camera);
+s32 Camera_Data1(Camera* camera);
+s32 Camera_Data2(Camera* camera);
+s32 Camera_Data3(Camera* camera);
+s32 Camera_Data4(Camera* camera);
+s32 Camera_Unique1(Camera* camera);
+s32 Camera_Unique2(Camera* camera);
+s32 Camera_Unique3(Camera* camera);
+s32 Camera_Unique4(Camera* camera);
+s32 Camera_Unique5(Camera* camera);
+s32 Camera_Unique0(Camera* camera);
+s32 Camera_Unique6(Camera* camera);
+s32 Camera_Unique7(Camera* camera);
+s32 Camera_Unique8(Camera* camera);
+s32 Camera_Unique9(Camera* camera);
+s32 Camera_Demo1(Camera* camera);
+s32 Camera_Demo2(Camera* camera);
+s32 Camera_Demo3(Camera* camera);
+s32 Camera_Demo4(Camera* camera);
+s32 Camera_Demo5(Camera* camera);
+s32 Camera_Demo6(Camera* camera);
+s32 Camera_Demo7(Camera* camera);
+s32 Camera_Demo8(Camera* camera);
+s32 Camera_Demo9(Camera* camera);
+s32 Camera_Demo0(Camera* camera);
+s32 Camera_Special0(Camera* camera);
+s32 Camera_Special1(Camera* camera);
+s32 Camera_Special2(Camera* camera);
+s32 Camera_Special3(Camera* camera);
+s32 Camera_Special4(Camera* camera);
+s32 Camera_Special5(Camera* camera);
+s32 Camera_Special6(Camera* camera);
+s32 Camera_Special7(Camera* camera);
+s32 Camera_Special8(Camera* camera);
+s32 Camera_Special9(Camera* camera);
+
+CameraUpdateFunc sCameraUpdateHandlers[] = {
+ NULL,
+ Camera_Normal0,
+ Camera_Normal1,
+ Camera_Normal2,
+ Camera_Normal3,
+ Camera_Normal4,
+ Camera_Parallel0,
+ Camera_Parallel1,
+ Camera_Parallel2,
+ Camera_Parallel3,
+ Camera_Parallel4,
+ Camera_KeepOn0,
+ Camera_KeepOn1,
+ Camera_KeepOn2,
+ Camera_KeepOn3,
+ Camera_KeepOn4,
+ Camera_Subject0,
+ Camera_Subject1,
+ Camera_Subject2,
+ Camera_Subject3,
+ Camera_Subject4,
+ Camera_Jump0,
+ Camera_Jump1,
+ Camera_Jump2,
+ Camera_Jump3,
+ Camera_Jump4,
+ Camera_Battle0,
+ Camera_Battle1,
+ Camera_Battle2,
+ Camera_Battle3,
+ Camera_Battle4,
+ Camera_Fixed0,
+ Camera_Fixed1,
+ Camera_Fixed2,
+ Camera_Fixed3,
+ Camera_Fixed4,
+ Camera_Data0,
+ Camera_Data1,
+ Camera_Data2,
+ Camera_Data3,
+ Camera_Data4,
+ Camera_Unique0,
+ Camera_Unique1,
+ Camera_Unique2,
+ Camera_Unique3,
+ Camera_Unique4,
+ Camera_Unique5,
+ Camera_Unique6,
+ Camera_Unique7,
+ Camera_Unique8,
+ Camera_Unique9,
+ Camera_Demo0,
+ Camera_Demo1,
+ Camera_Demo2,
+ Camera_Demo3,
+ Camera_Demo4,
+ Camera_Demo5,
+ Camera_Demo6,
+ Camera_Demo7,
+ Camera_Demo8,
+ Camera_Demo9,
+ Camera_Special0,
+ Camera_Special1,
+ Camera_Special2,
+ Camera_Special3,
+ Camera_Special4,
+ Camera_Special5,
+ Camera_Special6,
+ Camera_Special7,
+ Camera_Special8,
+ Camera_Special9,
+};
+
+s16 sCameraNextUID = 0;
+s32 sCameraInterfaceFlags = 1;
+s32 sCameraHudVisibility = 2;
+s32 sCameraLetterboxSize = 32;
+s32 sCameraNegOne = -1;
+
+// VecSph yaw data
+s16 D_801B9E18[] = {
+ 0x0AAA, 0xF556, 0x1555, 0xEAAB, 0x2AAA, 0xD556, 0x3FFF, 0xC001, 0x5555, 0xAAAB, 0x6AAA, 0x9556, 0x7FFF, 0x0000,
+};
+
+// VecSph pitch data
+s16 D_801B9E34[] = {
+ 0x0000, 0x02C6, 0x058C, 0x0000, 0x0000, 0xFD3A, 0x0000, 0x0852, 0x0000, 0x0000, 0x0B18, 0x02C6, 0xFA74, 0x0000,
+};
+
+s32 sUpdateCameraDirection = false;
+static s32 sIsFalse = false;
+s32 sCameraInitSceneTimer = 0;
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index 1fa041be1..25b2b471a 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -990,7 +990,7 @@ void Cutscene_Command_Textbox(PlayState* play, CutsceneContext* csCtx, CsCmdText
D_801BB160 = CS_TEXTBOX_TYPE_1;
D_801BB124 = cmd->base;
if (cmd->type == CS_TEXTBOX_TYPE_BOSSES_REMAINS) {
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) &&
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) &&
CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) {
if (cmd->textId1 != 0xFFFF) {
Message_StartTextbox(play, cmd->textId1, NULL);
diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c
index 2f2e3c388..a096aaabe 100644
--- a/src/code/z_kaleido_setup.c
+++ b/src/code/z_kaleido_setup.c
@@ -137,8 +137,8 @@ void KaleidoSetup_Init(PlayState* play) {
pauseCtx->cursorSlot[PAUSE_ITEM] = 0;
pauseCtx->cursorSlot[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1);
- pauseCtx->cursorColorSet = 2;
- pauseCtx->unk_2A0 = -1;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
+ pauseCtx->ocarinaSongIndex = -1;
pauseCtx->equipAnimScale = 320;
pauseCtx->equipAnimShrinkRate = 40;
pauseCtx->promptAlpha = 100;
diff --git a/src/code/z_message.c b/src/code/z_message.c
index de3a81c73..5b3598617 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -329,7 +329,7 @@ void func_80151938(PlayState* play, u16 textId) {
}
msgCtx->unk1203C = msgCtx->unk1203A;
- if (play->pauseCtx.unk_1F0 != 0) {
+ if (play->pauseCtx.bombersNotebookOpen) {
msgCtx->unk12004 = 0x22;
msgCtx->unk12006 = 0x15E;
func_80149C18(play);
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index 4620dd816..d463edff3 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -1172,7 +1172,9 @@ u8 Item_Give(PlayState* play, u8 item) {
}
if (item == ITEM_SKULL_TOKEN) {
- SET_QUEST_ITEM(item - ITEM_SKULL_TOKEN + QUEST_SKULL_TOKEN);
+ //! @bug: Sets QUEST_QUIVER instead of QUEST_SKULL_TOKEN
+ // Setting `QUEST_SKULL_TOKEN` will result in misplaced digits on the pause menu - Quest Status page.
+ SET_QUEST_ITEM(item - ITEM_SKULL_TOKEN + QUEST_QUIVER);
Inventory_IncrementSkullTokenCount(play->sceneId);
return ITEM_NONE;
@@ -1446,7 +1448,7 @@ u8 Item_Give(PlayState* play, u8 item) {
return ITEM_NONE;
} else if ((item >= ITEM_REMAINS_ODOLWA) && (item <= ITEM_REMAINS_TWINMOLD)) {
- SET_QUEST_ITEM(item - ITEM_REMAINS_ODOLWA + QUEST_REMAINS_ODOWLA);
+ SET_QUEST_ITEM(item - ITEM_REMAINS_ODOLWA + QUEST_REMAINS_ODOLWA);
return ITEM_NONE;
} else if (item == ITEM_RECOVERY_HEART) {
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c
index 09f71c4ff..34aba7769 100644
--- a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c
+++ b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c
@@ -150,7 +150,7 @@ void BgKin2Fence_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
DynaPolyActor_Init(&this->dyna, 0);
- DynaPolyActor_LoadMesh(play, &this->dyna, &object_kin2_obj_Colheader_000908);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gOceanSpiderHouseFireplaceGrateCol);
Collider_InitJntSph(play, &this->collider);
Collider_SetJntSph(play, &this->collider, &this->dyna.actor, &sJntSphInit, this->colliderElements);
Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c
index 2f50ca820..39c72a108 100644
--- a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c
+++ b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c
@@ -5,6 +5,7 @@
*/
#include "z_bg_kin2_picture.h"
+#include "assets/objects/object_kin2_obj/object_kin2_obj.h"
#define FLAGS 0x00000000
@@ -15,13 +16,17 @@ void BgKin2Picture_Destroy(Actor* thisx, PlayState* play);
void BgKin2Picture_Update(Actor* thisx, PlayState* play);
void BgKin2Picture_Draw(Actor* thisx, PlayState* play);
-void func_80B6F4D4(BgKin2Picture* this, PlayState* play);
-void func_80B6F5B8(BgKin2Picture* this, PlayState* play);
-void func_80B6F640(BgKin2Picture* this, PlayState* play);
-void func_80B6F72C(BgKin2Picture* this, PlayState* play);
-void func_80B6F90C(BgKin2Picture* this, PlayState* play);
+void BgKin2Picture_SetupWait(BgKin2Picture* this);
+void BgKin2Picture_Wait(BgKin2Picture* this, PlayState* play);
+void BgKin2Picture_SetupPlayCutscene(BgKin2Picture* this);
+void BgKin2Picture_PlayCutscene(BgKin2Picture* this, PlayState* play);
+void BgKin2Picture_SetupShiver(BgKin2Picture* this);
+void BgKin2Picture_Shiver(BgKin2Picture* this, PlayState* play);
+void BgKin2Picture_SetupFall(BgKin2Picture* this);
+void BgKin2Picture_Fall(BgKin2Picture* this, PlayState* play);
+void BgKin2Picture_SetupDoNothing(BgKin2Picture* this);
+void BgKin2Picture_DoNothing(BgKin2Picture* this, PlayState* play);
-#if 0
const ActorInit Bg_Kin2_Picture_InitVars = {
ACTOR_BG_KIN2_PICTURE,
ACTORCAT_PROP,
@@ -34,73 +39,307 @@ const ActorInit Bg_Kin2_Picture_InitVars = {
(ActorFunc)BgKin2Picture_Draw,
};
-// static ColliderTrisElementInit sTrisElementsInit[2] = {
-static ColliderTrisElementInit D_80B6F990[2] = {
+static ColliderTrisElementInit sTrisElementsInit[] = {
{
- { ELEMTYPE_UNK4, { 0x00000000, 0x00, 0x00 }, { 0x000138B0, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
- { { { -20.0f, 53.29999923706055f, 9.0f }, { -20.0f, 3.0f, 9.0f }, { 20.0f, 3.0f, 9.0f } } },
+ {
+ ELEMTYPE_UNK4,
+ { 0x00000000, 0x00, 0x00 },
+ { 0x000138B0, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_NONE,
+ },
+ { { { -20.0f, 53.3f, 9.0f }, { -20.0f, 3.0f, 9.0f }, { 20.0f, 3.0f, 9.0f } } },
},
{
- { ELEMTYPE_UNK4, { 0x00000000, 0x00, 0x00 }, { 0x000138B0, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
- { { { -20.0f, 53.29999923706055f, 9.0f }, { 20.0f, 3.0f, 9.0f }, { 20.0f, 53.29999923706055f, 9.0f } } },
+ {
+ ELEMTYPE_UNK4,
+ { 0x00000000, 0x00, 0x00 },
+ { 0x000138B0, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_NONE,
+ },
+ { { { -20.0f, 53.3f, 9.0f }, { 20.0f, 3.0f, 9.0f }, { 20.0f, 53.3f, 9.0f } } },
},
};
-// static ColliderTrisInit sTrisInit = {
-static ColliderTrisInit D_80B6FA08 = {
- { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_NONE, OC2_NONE, COLSHAPE_TRIS, },
- ARRAY_COUNT(sTrisElementsInit), D_80B6F990, // sTrisElementsInit,
+static ColliderTrisInit sTrisInit = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_ON | AC_TYPE_PLAYER,
+ OC1_NONE,
+ OC2_NONE,
+ COLSHAPE_TRIS,
+ },
+ ARRAY_COUNT(sTrisElementsInit),
+ sTrisElementsInit,
};
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_80B6FA24[] = {
- ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE),
- ICHAIN_F32_DIV1000(terminalVelocity, -20000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE),
- ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
+static Vec3f sDustBasePos = { 0.0f, 23.0f, 0.0f };
+
+static InitChainEntry sInitChain[] = {
+ ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(terminalVelocity, -20000, ICHAIN_CONTINUE),
+ ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE),
+ ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
-#endif
+s32 BgKin2Picture_IsSkulltulaCollected(PlayState* play, s32 skulltulaParams) {
+ s32 flag = -1;
-extern ColliderTrisElementInit D_80B6F990[2];
-extern ColliderTrisInit D_80B6FA08;
-extern InitChainEntry D_80B6FA24[];
+ if ((u8)skulltulaParams & 3) {
+ flag = BG_KIN2_PICTURE_GET_3FC(skulltulaParams);
+ }
-extern UNK_TYPE D_06000658;
-extern UNK_TYPE D_06000798;
+ return (flag >= 0) && Flags_GetTreasure(play, flag);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6EFA0.s")
+void BgKin2Picture_SpawnSkulltula(BgKin2Picture* this, PlayState* play2) {
+ PlayState* play = play2;
+ s32 skulltulaSpawnParams;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6EFEC.s")
+ if (!BG_KIN2_PICTURE_SKULLTULA_COLLECTED(&this->dyna.actor)) { // Gold Skulltula is still here.
+ skulltulaSpawnParams = BG_KIN2_PICTURE_SKULLTULA_SPAWN_PARAM(&this->dyna.actor);
+ if (!BgKin2Picture_IsSkulltulaCollected(play, skulltulaSpawnParams) &&
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_SW, this->dyna.actor.home.pos.x,
+ this->dyna.actor.home.pos.y + 23.0f, this->dyna.actor.home.pos.z, 0,
+ this->dyna.actor.home.rot.y, 0, skulltulaSpawnParams)) {
+ play_sound(NA_SE_SY_TRE_BOX_APPEAR);
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F098.s")
+#define DUST_COUNT 20
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/BgKin2Picture_Init.s")
+void BgKin2Picture_SpawnDust(BgKin2Picture* this, PlayState* play) {
+ f32 offset;
+ Vec3f basePos;
+ Vec3f pos;
+ Vec3f velocity;
+ Vec3f accel;
+ s32 angle;
+ s32 scale;
+ s16 scaleStep;
+ s32 baseAngle;
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/BgKin2Picture_Destroy.s")
+ Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x,
+ this->dyna.actor.world.pos.y +
+ (this->dyna.actor.shape.yOffset * this->dyna.actor.scale.y),
+ this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot);
+ Matrix_MultVec3f(&sDustBasePos, &basePos);
+ pos.y = basePos.y - 7.0f;
+ velocity.y = 0.0f;
+ accel.y = 0.2f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F4C0.s")
+ for (i = 0, baseAngle = 0; i < DUST_COUNT; i++, baseAngle += (0x10000 / DUST_COUNT)) {
+ angle = (s32)(Rand_ZeroOne() * (0x10000 / DUST_COUNT)) + baseAngle;
+ offset = (Rand_ZeroOne() * 14.0f) + 4.0f;
+ pos.x = Math_SinS(angle) * offset;
+ pos.z = Math_CosS(angle) * offset;
+ velocity.x = (Rand_ZeroOne() - 0.5f) + (pos.x * (1.0f / 6.0f));
+ velocity.z = (Rand_ZeroOne() - 0.5f) + (pos.z * (1.0f / 6.0f));
+ pos.x += basePos.x;
+ pos.z += basePos.z;
+ accel.x = velocity.x * -0.09f;
+ accel.z = velocity.z * -0.09f;
+ scale = (s32)(Rand_ZeroOne() * 10.0f) + 10;
+ scaleStep = (s32)(Rand_ZeroOne() * 10.0f) + 15;
+ func_800B1210(play, &pos, &velocity, &accel, scale, scaleStep);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F4D4.s")
+void BgKin2Picture_Init(Actor* thisx, PlayState* play) {
+ s32 pad;
+ BgKin2Picture* this = THIS;
+ s32 skulltulaParams;
+ Vec3f vertices[3];
+ s32 i;
+ s32 j;
+ ColliderTrisElementInit* element;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F5A4.s")
+ Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
+ DynaPolyActor_Init(&this->dyna, 0);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gOceanSpiderHouseSkullkidPaintingCol);
+ func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ Collider_InitTris(play, &this->colliderTris);
+ Collider_SetTris(play, &this->colliderTris, &this->dyna.actor, &sTrisInit, this->colliderElement);
+ Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
+ this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F5B8.s")
+ for (i = 0; i < ARRAY_COUNT(sTrisElementsInit); i++) {
+ for (j = 0; j < ARRAY_COUNT(vertices); j++) {
+ element = &sTrisInit.elements[i];
+ Matrix_MultVec3f(&element->dim.vtx[j], &vertices[j]);
+ }
+ Collider_SetTrisVertices(&this->colliderTris, i, &vertices[0], &vertices[1], &vertices[2]);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F61C.s")
+ Actor_SetFocus(&this->dyna.actor, 23.0f);
+ skulltulaParams = BG_KIN2_PICTURE_SKULLTULA_SPAWN_PARAM(&this->dyna.actor);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F640.s")
+ if (BG_KIN2_PICTURE_SKULLTULA_COLLECTED(&this->dyna.actor) ||
+ BgKin2Picture_IsSkulltulaCollected(play, skulltulaParams)) {
+ this->skulltulaNoiseTimer = -1;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F708.s")
+ BgKin2Picture_SetupWait(this);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F72C.s")
+void BgKin2Picture_Destroy(Actor* thisx, PlayState* play) {
+ BgKin2Picture* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F8F8.s")
+ DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
+ Collider_DestroyTris(play, &this->colliderTris);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F90C.s")
+void BgKin2Picture_SetupWait(BgKin2Picture* this) {
+ this->actionFunc = BgKin2Picture_Wait;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/BgKin2Picture_Update.s")
+void BgKin2Picture_Wait(BgKin2Picture* this, PlayState* play) {
+ // hit by projectile
+ if (this->colliderTris.base.acFlags & AC_HIT) {
+ this->colliderTris.base.acFlags &= ~AC_HIT;
+ ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ BgKin2Picture_SetupPlayCutscene(this);
+ } else { // Gold Skulltula can be heard behind Skullkid's painting.
+ if (this->skulltulaNoiseTimer >= 0) {
+ if (this->skulltulaNoiseTimer == 0) {
+ Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EN_STALGOLD_ROLL);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/BgKin2Picture_Draw.s")
+ if (Rand_ZeroOne() < 0.1f) {
+ this->skulltulaNoiseTimer = Rand_S16Offset(40, 80);
+ } else {
+ this->skulltulaNoiseTimer = 8;
+ }
+ } else {
+ this->skulltulaNoiseTimer--;
+ }
+ }
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderTris.base);
+ }
+}
+
+void BgKin2Picture_SetupPlayCutscene(BgKin2Picture* this) {
+ this->actionFunc = BgKin2Picture_PlayCutscene;
+}
+
+void BgKin2Picture_PlayCutscene(BgKin2Picture* this, PlayState* play) {
+ if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
+ ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ this->cutsceneStarted = true;
+ BgKin2Picture_SetupShiver(this);
+ } else {
+ ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ }
+}
+
+void BgKin2Picture_SetupShiver(BgKin2Picture* this) {
+ this->paintingTimer = 13;
+ this->xOffsetAngle = 0;
+ this->yOffsetAngle = 0;
+ this->actionFunc = BgKin2Picture_Shiver;
+}
+
+void BgKin2Picture_Shiver(BgKin2Picture* this, PlayState* play) {
+ s32 pad;
+ Vec3f basePosOffset;
+ Vec3f posOffset;
+
+ this->paintingTimer--;
+ if (this->paintingTimer <= 0) {
+ Math_Vec3f_Copy(&this->dyna.actor.world.pos, &this->dyna.actor.home.pos);
+ BgKin2Picture_SetupFall(this);
+ } else {
+ this->xOffsetAngle += 0x7BAC;
+ this->yOffsetAngle += 0x4E20;
+ basePosOffset.x = Math_CosS(this->xOffsetAngle);
+ basePosOffset.y = Math_CosS(this->yOffsetAngle) * 0.2f;
+ basePosOffset.z = 0.0f;
+ Matrix_RotateYS(this->dyna.actor.shape.rot.y, MTXMODE_NEW);
+ Matrix_MultVec3f(&basePosOffset, &posOffset);
+ Math_Vec3f_Sum(&this->dyna.actor.home.pos, &posOffset, &this->dyna.actor.world.pos);
+ }
+}
+
+void BgKin2Picture_SetupFall(BgKin2Picture* this) {
+ this->landTimer = 0;
+ this->step = 0;
+ this->paintingTimer = 4;
+ this->actionFunc = BgKin2Picture_Fall;
+}
+
+void BgKin2Picture_Fall(BgKin2Picture* this, PlayState* play) {
+ if (this->paintingTimer > 0) {
+ this->paintingTimer--;
+
+ if (this->paintingTimer == 0) {
+ BgKin2Picture_SpawnSkulltula(this, play);
+ }
+ }
+
+ Actor_MoveWithGravity(&this->dyna.actor);
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 4);
+
+ if (this->dyna.actor.bgCheckFlags & 1) {
+ Math_StepToS(&this->step, 0x7D0, 0x78);
+
+ if (this->landTimer < 3) {
+ this->landTimer++;
+
+ if (this->dyna.actor.velocity.y <= 0.01f) {
+ this->dyna.actor.velocity.y *= -0.7f;
+
+ if (this->dyna.actor.velocity.y > 6.0f) {
+ this->dyna.actor.velocity.y = 6.0f;
+ }
+
+ if (this->landTimer < 3) {
+ Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SMALL_WOODPLATE_BOUND_0);
+ }
+ }
+ }
+ }
+
+ Actor_SetFocus(&this->dyna.actor, 23.0f);
+
+ if (!this->hasSpawnedDust && (this->dyna.actor.shape.rot.x > 0x3300)) {
+ BgKin2Picture_SpawnDust(this, play);
+ this->hasSpawnedDust = true;
+ }
+
+ if (Math_ScaledStepToS(&this->dyna.actor.shape.rot.x, 0x4000, this->step)) { // facing the floor
+ this->dyna.actor.shape.yOffset = 40.0f;
+
+ if (this->cutsceneStarted) {
+ ActorCutscene_Stop(this->dyna.actor.cutscene);
+ }
+
+ func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WOODPLATE_BROKEN);
+ BgKin2Picture_SetupDoNothing(this);
+ } else {
+ this->dyna.actor.shape.yOffset = Math_SinS(this->dyna.actor.shape.rot.x) * 40.0f;
+ }
+}
+
+void BgKin2Picture_SetupDoNothing(BgKin2Picture* this) {
+ this->actionFunc = BgKin2Picture_DoNothing;
+}
+
+void BgKin2Picture_DoNothing(BgKin2Picture* this, PlayState* play) {
+}
+
+void BgKin2Picture_Update(Actor* thisx, PlayState* play) {
+ BgKin2Picture* this = THIS;
+
+ this->actionFunc(this, play);
+}
+
+void BgKin2Picture_Draw(Actor* thisx, PlayState* play) {
+ BgKin2Picture* this = THIS;
+
+ Gfx_DrawDListOpa(play, gOceanSpiderHouseSkullkidPaintingDL);
+}
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.h b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.h
index 19651ef57..ce7cf95fb 100644
--- a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.h
+++ b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.h
@@ -3,17 +3,27 @@
#include "global.h"
+#define BG_KIN2_PICTURE_SKULLTULA_COLLECTED(thisx) (((thisx)->params >> 5) & 1)
+#define BG_KIN2_PICTURE_GET_3FC(thisx) ((u8)(((thisx & 0x3FC)) >> 2))
+#define BG_KIN2_PICTURE_SKULLTULA_SPAWN_PARAM(thisx) ((((thisx)->params & 0x1F) << 2) | 0xFF03)
+
struct BgKin2Picture;
typedef void (*BgKin2PictureActionFunc)(struct BgKin2Picture*, PlayState*);
typedef struct BgKin2Picture {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0xF0];
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ ColliderTris colliderTris;
+ /* 0x17C */ ColliderTrisElement colliderElement[2];
/* 0x234 */ BgKin2PictureActionFunc actionFunc;
- /* 0x238 */ char unk_238[0xC];
+ /* 0x238 */ s16 step;
+ /* 0x23A */ s8 paintingTimer; // Used for when painting is shaking and for timing Gold Skulltula spawn.
+ /* 0x23B */ s8 landTimer;
+ /* 0x23C */ s16 xOffsetAngle;
+ /* 0x23E */ s16 yOffsetAngle;
+ /* 0x240 */ s8 cutsceneStarted;
+ /* 0x241 */ s8 hasSpawnedDust;
+ /* 0x242 */ s8 skulltulaNoiseTimer;
} BgKin2Picture; // size = 0x244
-extern const ActorInit Bg_Kin2_Picture_InitVars;
-
#endif // Z_BG_KIN2_PICTURE_H
diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
index 03531bb31..2d384ccf6 100644
--- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
+++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
@@ -75,7 +75,7 @@ void DoorWarp1_SetupAction(DoorWarp1* this, DoorWarp1ActionFunc actionFunc) {
s32 func_808B849C(DoorWarp1* this, PlayState* play) {
s32 ret = 0;
- if ((play->sceneId == SCENE_MITURIN_BS) && !CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA)) {
+ if ((play->sceneId == SCENE_MITURIN_BS) && !CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA)) {
ret = 1;
} else if ((play->sceneId == SCENE_HAKUGIN_BS) && !CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT)) {
ret = 2;
@@ -239,7 +239,7 @@ void func_808B8C48(DoorWarp1* this, PlayState* play) {
this->dyna.actor.world.pos.z, 200, 255, 255, 255);
Lights_PointNoGlowSetInfo(&this->unk_1F4, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
this->dyna.actor.world.pos.z, 200, 255, 255, 255);
- if (((DOORWARP1_GET_FF(&this->dyna.actor) == ENDOORWARP1_FF_2) && CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA)) ||
+ if (((DOORWARP1_GET_FF(&this->dyna.actor) == ENDOORWARP1_FF_2) && CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA)) ||
((DOORWARP1_GET_FF(&this->dyna.actor) == ENDOORWARP1_FF_3) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT)) ||
((DOORWARP1_GET_FF(&this->dyna.actor) == ENDOORWARP1_FF_4) && CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG)) ||
((DOORWARP1_GET_FF(&this->dyna.actor) == ENDOORWARP1_FF_5) && CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD))) {
diff --git a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c
index e8c874df4..c21da42b0 100644
--- a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c
+++ b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c
@@ -41,7 +41,7 @@ static InitChainEntry sInitChain[] = {
};
s32 func_80BA15A0(void) {
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA) && !(gSaveContext.save.weekEventReg[87] & 0x10)) {
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && !(gSaveContext.save.weekEventReg[87] & 0x10)) {
return true;
}
@@ -61,7 +61,7 @@ s32 func_80BA15A0(void) {
}
void func_80BA165C(void) {
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA)) {
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA)) {
gSaveContext.save.weekEventReg[87] |= 0x10;
}
@@ -88,7 +88,7 @@ s32 func_80BA16F4(ElfMsg6* this, PlayState* play) {
return true;
}
- if (!CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA)) {
+ if (!CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA)) {
this->actor.textId = 0x256;
return false;
}
diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.c b/src/overlays/actors/ovl_En_Fall/z_en_fall.c
index d7d3e446e..508090fd5 100644
--- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c
+++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c
@@ -324,7 +324,7 @@ void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) {
break;
case 2:
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) &&
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) &&
CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) {
if (gSaveContext.save.weekEventReg[93] & 4) {
if (ActorCutscene_GetCanPlayNext(0xC)) {
diff --git a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c
index cc19acb63..9b4836637 100644
--- a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c
+++ b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c
@@ -115,9 +115,12 @@ void EnGakufu_ProcessNotes(EnGakufu* this) {
songIndex = this->songIndex;
ocarinaSongButtons = &gOcarinaSongButtons[songIndex];
+
+ //! FAKE:
+ if (1) {}
songNumButtons = gOcarinaSongButtons[this->songIndex].numButtons;
- for (i = 0; i < songNumButtons; i++) {
+ for (i = 0; i < (u8)songNumButtons; i++) {
this->buttonIndex[i] = ocarinaSongButtons->buttonIndex[i];
}
diff --git a/src/overlays/actors/ovl_En_Giant/z_en_giant.c b/src/overlays/actors/ovl_En_Giant/z_en_giant.c
index 7d2819ff9..10951f76d 100644
--- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c
+++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c
@@ -110,7 +110,7 @@ s32 EnGiant_IsImprisoned(EnGiant* this) {
case GIANT_TYPE_SWAMP_CLOCK_TOWER_SUCCESS:
case GIANT_TYPE_SWAMP_GIANTS_CHAMBER_AND_ENDING:
case GIANT_TYPE_SWAMP_CLOCK_TOWER_FAILURE:
- if (!CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA)) {
+ if (!CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA)) {
return true;
}
break;
diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c
index 04e44bb16..a8e74ff6e 100644
--- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c
+++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c
@@ -91,7 +91,7 @@ void func_80AC9FE4(EnTimeTag* this, PlayState* play) {
ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
this->actionFunc = func_80AC9FD4;
gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF;
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) &&
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) &&
CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) {
gSaveContext.save.weekEventReg[25] |= 2;
}
diff --git a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c
index 6b67bc068..b8110ce6a 100644
--- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c
+++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c
@@ -1,10 +1,11 @@
/*
* File: z_obj_y2shutter.c
* Overlay: ovl_Obj_Y2shutter
- * Description: Pirates' Fortress sliding grate
+ * Description: Pirates' Fortress sliding grated/barred shutters
*/
#include "z_obj_y2shutter.h"
+#include "objects/object_kaizoku_obj/object_kaizoku_obj.h"
#define FLAGS (ACTOR_FLAG_10)
@@ -15,7 +16,19 @@ void ObjY2shutter_Destroy(Actor* thisx, PlayState* play);
void ObjY2shutter_Update(Actor* thisx, PlayState* play);
void ObjY2shutter_Draw(Actor* thisx, PlayState* play);
-#if 0
+typedef struct ShutterInfo {
+ /* 0x00 */ Gfx* dList;
+ /* 0x04 */ CollisionHeader* colHeader;
+ /* 0x08 */ f32 openedOffsetY;
+ /* 0x0C */ f32 openVelocity;
+ /* 0x10 */ f32 openAccel;
+ /* 0x14 */ f32 closeVelocity;
+ /* 0x18 */ f32 closeAccel;
+ /* 0x1C */ u8 openStartSettleTimer;
+ /* 0x1D */ u8 openEndAndCloseSettleTimer;
+ /* 0x1E */ u8 openTimer;
+} ShutterInfo; // size = 0x20
+
const ActorInit Obj_Y2shutter_InitVars = {
ACTOR_OBJ_Y2SHUTTER,
ACTORCAT_BG,
@@ -28,24 +41,136 @@ const ActorInit Obj_Y2shutter_InitVars = {
(ActorFunc)ObjY2shutter_Draw,
};
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_80B9AEB0[] = {
+ShutterInfo sShutterInfo[] = {
+ { gPirateBarredShutterDL, &gPirateBarredShutterCol, 120.0f, 20.0f, 3.0f, -20.0f, 3.0f, 4, 8, 160 },
+ { gPirateGratedShutterDL, &gPirateGratedShutterCol, 150.0f, 1.0f, 0.04f, -1.0f, 0.04f, 6, 12, 160 },
+};
+
+static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneScale, 800, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneDownward, 800, ICHAIN_STOP),
};
-#endif
+void ObjY2shutter_Init(Actor* thisx, PlayState* play) {
+ s32 pad[2];
+ ShutterInfo* info = &sShutterInfo[OBJY2SHUTTER_GET_TYPE(thisx)];
+ ObjY2shutter* this = THIS;
-extern InitChainEntry D_80B9AEB0[];
+ Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
+ DynaPolyActor_Init(&this->dyna, 0);
+ DynaPolyActor_LoadMesh(play, &this->dyna, info->colHeader);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Y2shutter/ObjY2shutter_Init.s")
+void ObjY2shutter_Destroy(Actor* thisx, PlayState* play) {
+ ObjY2shutter* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Y2shutter/ObjY2shutter_Destroy.s")
+ DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Y2shutter/func_80B9AA20.s")
+void ObjY2shutter_SetupOpen(ObjY2shutter* this, ShutterInfo* info, ShutterType shutterType) {
+ this->openTimer = info->openTimer;
+ this->settleTimer = info->openStartSettleTimer;
+ if (shutterType == SHUTTER_BARRED) {
+ Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_METALDOOR_OPEN);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Y2shutter/ObjY2shutter_Update.s")
+void ObjY2shutter_Update(Actor* thisx, PlayState* play) {
+ s32 pad;
+ ObjY2shutter* this = THIS;
+ ShutterType shutterType = OBJY2SHUTTER_GET_TYPE(&this->dyna.actor);
+ ShutterInfo* info = &sShutterInfo[shutterType];
+ f32 targetPosY = this->dyna.actor.world.pos.y;
+ f32 targetVelocityY = 0.0f;
+ f32 accelY = 0.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Y2shutter/ObjY2shutter_Draw.s")
+ sShutterInfo[0].openTimer = DREG(84) + 160;
+ sShutterInfo[1].openTimer = DREG(85) + 160;
+
+ if (((shutterType == SHUTTER_BARRED) && (DREG(86) != 0)) || ((shutterType != SHUTTER_BARRED) && (DREG(87) != 0))) {
+ if (shutterType == SHUTTER_BARRED) {
+ DREG(86) = 0;
+ } else {
+ DREG(87) = 0;
+ }
+
+ if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor))) {
+ Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor));
+ } else {
+ Flags_SetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor));
+ }
+ }
+
+ if (this->settleTimer == 0) {
+ if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor))) {
+ s16 cutscene = this->dyna.actor.cutscene;
+
+ if (this->openTimer == 0) {
+ if ((cutscene >= 0) && !ActorCutscene_GetCanPlayNext(cutscene)) {
+ ActorCutscene_SetIntentToPlay(cutscene);
+ } else if (cutscene >= 0) {
+ ActorCutscene_StartAndSetUnkLinkFields(cutscene, &this->dyna.actor);
+ this->openTimer = -1;
+ } else {
+ ObjY2shutter_SetupOpen(this, info, shutterType);
+ }
+ } else if (this->openTimer < 0) {
+ if (func_800F22C4(cutscene, &this->dyna.actor)) {
+ ObjY2shutter_SetupOpen(this, info, shutterType);
+ }
+ } else {
+ targetPosY = this->dyna.actor.home.pos.y + info->openedOffsetY;
+ targetVelocityY = info->openVelocity;
+ accelY = info->openAccel;
+ if (this->openTimer < 2) {
+ Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor));
+ } else {
+ this->openTimer--;
+ }
+ }
+ } else if (this->openTimer != 0) {
+ this->openTimer = 0;
+ this->settleTimer = info->openStartSettleTimer;
+ if (shutterType == SHUTTER_BARRED) {
+ Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_METALDOOR_CLOSE);
+ }
+ } else {
+ targetPosY = this->dyna.actor.home.pos.y;
+ targetVelocityY = info->closeVelocity;
+ accelY = info->closeAccel;
+ }
+ }
+
+ Math_StepToF(&this->dyna.actor.velocity.y, targetVelocityY, accelY);
+ this->dyna.actor.world.pos.y += this->dyna.actor.velocity.y;
+
+ if (((this->dyna.actor.world.pos.y - targetPosY) * targetVelocityY) >= 0.0f) {
+ this->dyna.actor.world.pos.y = targetPosY;
+ this->dyna.actor.velocity.y = 0.0f;
+ if (!this->isStationary) {
+ this->isStationary = true;
+ this->settleTimer = info->openEndAndCloseSettleTimer;
+ if (shutterType != SHUTTER_BARRED) {
+ Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_METALDOOR_STOP);
+ }
+ }
+ } else {
+ this->isStationary = false;
+ if (shutterType != SHUTTER_BARRED) {
+ func_800B9010(&this->dyna.actor, NA_SE_EV_METALDOOR_SLIDE - SFX_FLAG);
+ }
+ }
+
+ if (DECR(this->settleTimer)) {
+ this->dyna.actor.shape.yOffset = 2.0f * (this->settleTimer & 1) * this->settleTimer;
+ }
+}
+
+void ObjY2shutter_Draw(Actor* thisx, PlayState* play) {
+ ObjY2shutter* this = THIS;
+ ShutterInfo* info = &sShutterInfo[(OBJY2SHUTTER_GET_TYPE(&this->dyna.actor))];
+
+ Gfx_DrawDListOpa(play, info->dList);
+}
diff --git a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h
index 217bcee6c..dcc95b1b1 100644
--- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h
+++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h
@@ -6,10 +6,20 @@
struct ObjY2shutter;
typedef struct ObjY2shutter {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x1C];
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ s16 openTimer;
+ /* 0x15E */ u8 isStationary; // true if the door is neither opening nor closing
+ /* 0x15F */ u8 settleTimer;
} ObjY2shutter; // size = 0x160
extern const ActorInit Obj_Y2shutter_InitVars;
+typedef enum {
+ /* 0x0 */ SHUTTER_BARRED,
+ /* 0x1 */ SHUTTER_GRATED,
+} ShutterType;
+
+#define OBJY2SHUTTER_GET_TYPE(thisx) (((thisx)->params >> 7) & 1)
+#define OBJY2SHUTTER_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+
#endif // Z_OBJ_Y2SHUTTER_H
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c
index 316ad3355..90a1a0eff 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c
@@ -1,103 +1,1003 @@
/*
* File: z_kaleido_collect.c
* Overlay: ovl_kaleido_scope
- * Description:
+ * Description: Pause Menu - Quest Status Page
*/
#include "z_kaleido_scope.h"
+#include "interface/parameter_static/parameter_static.h"
-extern UNK_TYPE D_02001360;
-extern UNK_TYPE D_020044A0;
-extern UNK_TYPE D_02004AA0;
-extern UNK_TYPE D_0200B998;
-extern UNK_TYPE D_08062000;
-extern UNK_TYPE D_08064340;
-extern UNK_TYPE D_0B000000;
-extern UNK_TYPE D_0C000000;
-extern UNK_TYPE D_0C006C00;
+s32 KaleidoScope_UpdateQuestStatusPoint(PauseContext* pauseCtx, s16 point);
-s16 D_8082AED0[] = { 120, 60, 2, 80 };
+extern TexturePtr D_08061000; // gBombersNotebookIconTex
+extern TexturePtr D_08062000; // gSongNoteIconTex
-s16 D_8082AED8[] = { 20, 4, 20, 10 };
-
-s32 D_8082AEE0 = 0;
-
-s32 D_8082AEE4[] = { 0, 0, 0 };
-
-s32 D_8082AEF0[] = { 0, 0, 0, 0, 0 };
-
-s16 D_8082AF04[] = {
- 255, 0, 0, 255, 255, 70, 0, 150, 255, 70, 0, 150, 255, 0, 0, 255,
+s16 sQuestRemainsColorTimerInit[] = { 120, 60, 2, 80 };
+s16 sQuestHpColorTimerInit[] = { 20, 4, 20, 10 };
+s16 sQuestSongPlayedOcarinaButtonsNum = 0;
+u8 sQuestSongPlayedOcarinaButtons[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+s16 sQuestSongPlayedOcarinaButtonsAlpha[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+s16 sQuestHpPrimColorTargets[][4] = {
+ { 255, 0, 0, 255 },
+ { 255, 70, 0, 150 },
+ { 255, 70, 0, 150 },
+ { 255, 0, 0, 255 },
+};
+s16 sQuestRemainsEnvTargets[][3] = {
+ { 0, 0, 0 }, // QUEST_REMAINS_ODOLWA Target 1
+ { 0, 0, 0 }, // QUEST_REMAINS_GOHT Target 1
+ { 0, 0, 0 }, // QUEST_REMAINS_GYORG Target 1
+ { 0, 0, 0 }, // QUEST_REMAINS_TWINMOLD Target 1
+ { 0, 0, 0 }, // Unused
+ { 0, 0, 0 }, // Unused
+ { 0, 60, 0 }, // QUEST_REMAINS_ODOLWA Target 2
+ { 90, 0, 0 }, // QUEST_REMAINS_GOHT Target 2
+ { 0, 40, 110 }, // QUEST_REMAINS_GYORG Target 2
+ { 80, 40, 0 }, // QUEST_REMAINS_TWINMOLD Target 2
+ { 70, 0, 90 }, // Unused
+ { 90, 90, 0 }, // Unused
+};
+s16 sQuestRemainsEnvRed[] = {
+ 255, // QUEST_REMAINS_ODOLWA
+ 255, // QUEST_REMAINS_GOHT
+ 255, // QUEST_REMAINS_GYORG
+ 255, // QUEST_REMAINS_TWINMOLD
+ 255, // Unused
+ 255, // Unused
+};
+s16 sQuestRemainsEnvGreen[] = {
+ 255, // QUEST_REMAINS_ODOLWA
+ 255, // QUEST_REMAINS_GOHT
+ 255, // QUEST_REMAINS_GYORG
+ 255, // QUEST_REMAINS_TWINMOLD
+ 255, // Unused
+ 255, // Unused
+};
+s16 sQuestRemainsEnvBlue[] = {
+ 150, // QUEST_REMAINS_ODOLWA
+ 150, // QUEST_REMAINS_GOHT
+ 150, // QUEST_REMAINS_GYORG
+ 150, // QUEST_REMAINS_TWINMOLD
+ 150, // Unused
+ 150, // Unused
};
-s16 D_8082AF24[] = {
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x003C, 0x0000, 0x005A, 0x0000, 0x0000,
- 0x0000, 0x0028, 0x006E, 0x0050, 0x0028, 0x0000, 0x0046, 0x0000, 0x005A, 0x005A, 0x005A, 0x0000,
+#ifdef NON_EQUIVALENT
+// TODO: is actually NON_MATCHING, update once `z_kaleido_scope_NES.c` is decompiled
+// A single small regalloc at the first `func_8010DC58` for the heart piece count (see `gItemIcons`)
+void KaleidoScope_DrawQuestStatus(PlayState* play) {
+ static s16 sQuestRemainsColorTimer = 20;
+ static s16 sQuestRemainsColorTimerIndex = 0;
+ static s16 sQuestHpPrimRed = 0;
+ static s16 sQuestHpPrimGreen = 0;
+ static s16 sQuestHpPrimBlue = 0;
+ static s16 sQuestHpPrimAlpha = 0;
+ static s16 sQuestHpColorTimer = 20;
+ static s16 sQuestHpPrimColorTargetIndex = 0;
+ static TexturePtr sOcarinaButtonTextures[] = {
+ gOcarinaATex, gOcarinaCDownTex, gOcarinaCRightTex, gOcarinaCLeftTex, gOcarinaCUpTex,
+ };
+ static s16 sQuestSongsPrimRed[] = {
+ 150, // QUEST_SONG_SONATA
+ 255, // QUEST_SONG_LULLABY
+ 100, // QUEST_SONG_BOSSA_NOVA
+ 255, // QUEST_SONG_ELEGY
+ 255, // QUEST_SONG_OATH
+ 255, // QUEST_SONG_SARIA
+ 255, // QUEST_SONG_TIME
+ 255, // QUEST_SONG_HEALING
+ 255, // QUEST_SONG_EPONA
+ 255, // QUEST_SONG_SOARING
+ 255, // QUEST_SONG_STORMS
+ 255, // QUEST_SONG_SUN
+ };
+ static s16 sQuestSongsPrimGreen[] = {
+ 255, // QUEST_SONG_SONATA
+ 80, // QUEST_SONG_LULLABY
+ 150, // QUEST_SONG_BOSSA_NOVA
+ 160, // QUEST_SONG_ELEGY
+ 100, // QUEST_SONG_OATH
+ 240, // QUEST_SONG_SARIA
+ 255, // QUEST_SONG_TIME
+ 255, // QUEST_SONG_HEALING
+ 255, // QUEST_SONG_EPONA
+ 255, // QUEST_SONG_SOARING
+ 255, // QUEST_SONG_STORMS
+ 255, // QUEST_SONG_SUN
+ };
+ static s16 sQuestSongsPrimBlue[] = {
+ 100, // QUEST_SONG_SONATA
+ 40, // QUEST_SONG_LULLABY
+ 255, // QUEST_SONG_BOSSA_NOVA
+ 0, // QUEST_SONG_ELEGY
+ 255, // QUEST_SONG_OATH
+ 100, // QUEST_SONG_SARIA
+ 255, // QUEST_SONG_TIME
+ 255, // QUEST_SONG_HEALING
+ 255, // QUEST_SONG_EPONA
+ 255, // QUEST_SONG_SOARING
+ 255, // QUEST_SONG_STORMS
+ 255, // QUEST_SONG_SUN
+ };
+ static TexturePtr sQuestUpgradeTextures[][3] = {
+ { 0x08053000, 0x08054000, 0x08055000 }, // UPG_QUIVER
+ { 0x08056000, 0x08057000, 0x08058000 }, // UPG_BOMB_BAG
+ };
+ static u8 sQuestUpgrades[] = { UPG_QUIVER, UPG_BOMB_BAG };
+ PauseContext* pauseCtx = &play->pauseCtx;
+ s16 sp1CA; // colorSetR and numOcarinaButtons
+ s16 sp1C8; // colorSetG and ocarinaButtonIndex
+ s16 sp1C6;
+ s16 sp1C4;
+ s16 var_v1;
+ s16 i;
+ s16 j;
+ s16 k;
+ s16 skullTokenDigits[3];
+ u16 isDigitDrawn;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ KaleidoScope_SetCursorVtx(pauseCtx, pauseCtx->cursorSlot[PAUSE_QUEST] * 4, pauseCtx->questVtx);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+
+ // Draw the Boss Remains icons
+ sQuestRemainsColorTimer--;
+ for (i = 0, j = 0; i < 4; i++, j += 4) {
+ if ((sQuestRemainsColorTimerIndex != 1) && (sQuestRemainsColorTimerIndex != 3)) {
+ var_v1 = (sQuestRemainsColorTimerIndex != 0) ? (i + 6) : i;
+
+ if (sQuestRemainsColorTimer != 0) {
+ sp1CA = ABS_ALT(sQuestRemainsEnvRed[i] - sQuestRemainsEnvTargets[var_v1][0]) / sQuestRemainsColorTimer;
+ sp1C8 =
+ ABS_ALT(sQuestRemainsEnvGreen[i] - sQuestRemainsEnvTargets[var_v1][1]) / sQuestRemainsColorTimer;
+ sp1C6 = ABS_ALT(sQuestRemainsEnvBlue[i] - sQuestRemainsEnvTargets[var_v1][2]) / sQuestRemainsColorTimer;
+
+ if (sQuestRemainsEnvRed[i] >= sQuestRemainsEnvTargets[var_v1][0]) {
+ sQuestRemainsEnvRed[i] -= sp1CA;
+ } else {
+ sQuestRemainsEnvRed[i] += sp1CA;
+ }
+ if (sQuestRemainsEnvGreen[i] >= sQuestRemainsEnvTargets[var_v1][1]) {
+ sQuestRemainsEnvGreen[i] -= sp1C8;
+ } else {
+ sQuestRemainsEnvGreen[i] += sp1C8;
+ }
+ if (sQuestRemainsEnvBlue[i] >= sQuestRemainsEnvTargets[var_v1][2]) {
+ sQuestRemainsEnvBlue[i] -= sp1C6;
+ } else {
+ sQuestRemainsEnvBlue[i] += sp1C6;
+ }
+ } else {
+ sQuestRemainsEnvRed[i] = sQuestRemainsEnvTargets[var_v1][0];
+ sQuestRemainsEnvGreen[i] = sQuestRemainsEnvTargets[var_v1][1];
+ sQuestRemainsEnvBlue[i] = sQuestRemainsEnvTargets[var_v1][2];
+ }
+ }
+
+ if (CHECK_QUEST_ITEM(i)) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, sQuestRemainsEnvRed[i], sQuestRemainsEnvGreen[i], sQuestRemainsEnvBlue[i],
+ 0);
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+ KaleidoScope_DrawTexQuadRGBA32(play->state.gfxCtx, gItemIcons[ITEM_REMAINS_ODOLWA + i], 32, 32, 0);
+ }
+ }
+
+ if (sQuestRemainsColorTimer == 0) {
+ sQuestRemainsColorTimer = sQuestRemainsColorTimerInit[sQuestRemainsColorTimerIndex];
+ if (++sQuestRemainsColorTimerIndex > 3) {
+ sQuestRemainsColorTimerIndex = 0;
+ }
+ }
+
+ // Draw shield
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+
+ if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) != EQUIP_VALUE_SHIELD_NONE) {
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+ KaleidoScope_DrawTexQuadRGBA32(play->state.gfxCtx, gItemIcons[(ITEM_SHIELD_HERO - 1) + GET_CUR_EQUIP_VALUE(1)],
+ 32, 32, 0);
+ }
+
+ j += 4;
+
+ // Draw Sword
+ if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) != EQUIP_VALUE_SWORD_NONE) {
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+ KaleidoScope_DrawTexQuadRGBA32(play->state.gfxCtx, gItemIcons[(ITEM_SWORD_KOKIRI - 1) + GET_CUR_EQUIP_VALUE(0)],
+ 32, 32, 0);
+ }
+
+ j += 4;
+
+ // Draw Songs
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+
+ gDPLoadTextureBlock(POLY_OPA_DISP++, &D_08062000, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ for (i = 0; i < 12; i++, j += 4) {
+ if (CHECK_QUEST_ITEM(i + QUEST_SONG_SONATA) ||
+ ((i == (QUEST_SONG_LULLABY - QUEST_SONG_SONATA)) && !CHECK_QUEST_ITEM(i + QUEST_SONG_SONATA) &&
+ CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO))) {
+ if ((i + QUEST_SONG_SONATA) == pauseCtx->cursorSlot[PAUSE_QUEST]) {
+ pauseCtx->questVtx[j + 0].v.ob[0] = pauseCtx->questVtx[j + 2].v.ob[0] =
+ pauseCtx->questVtx[j + 0].v.ob[0] - 2;
+
+ pauseCtx->questVtx[j + 1].v.ob[0] = pauseCtx->questVtx[j + 3].v.ob[0] =
+ pauseCtx->questVtx[j + 1].v.ob[0] + 4;
+
+ pauseCtx->questVtx[j + 0].v.ob[1] = pauseCtx->questVtx[j + 1].v.ob[1] =
+ pauseCtx->questVtx[j + 0].v.ob[1] + 2;
+
+ pauseCtx->questVtx[j + 2].v.ob[1] = pauseCtx->questVtx[j + 3].v.ob[1] =
+ pauseCtx->questVtx[j + 2].v.ob[1] - 4;
+ }
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sQuestSongsPrimRed[i], sQuestSongsPrimGreen[i],
+ sQuestSongsPrimBlue[i], pauseCtx->alpha);
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+ }
+ }
+
+ // Draw Bombers Notebook
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+
+ if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+ KaleidoScope_DrawTexQuadRGBA32(play->state.gfxCtx, &D_08061000, 32, 32, 0);
+ }
+
+ j += 4;
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+
+ // Loop over quest item upgrades
+ for (i = 0; i < 2; i++, j += 4) {
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+
+ if (GET_CUR_UPG_VALUE(sQuestUpgrades[i]) != 0) {
+ KaleidoScope_DrawTexQuadRGBA32(
+ play->state.gfxCtx, sQuestUpgradeTextures[i][GET_CUR_UPG_VALUE(sQuestUpgrades[i]) - 1], 32, 32, 0);
+ }
+ }
+
+ // Skip over &pauseCtx->questVtx[84], which should be `QUEST_SKULL_TOKEN`
+ j += 4;
+
+ sp1CA = ABS_ALT(sQuestHpPrimRed - sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][0]) / sQuestHpColorTimer;
+ sp1C8 = ABS_ALT(sQuestHpPrimGreen - sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][1]) / sQuestHpColorTimer;
+ sp1C6 = ABS_ALT(sQuestHpPrimBlue - sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][2]) / sQuestHpColorTimer;
+ sp1C4 = ABS_ALT(sQuestHpPrimAlpha - sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][3]) / sQuestHpColorTimer;
+
+ if (sQuestHpPrimRed >= sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][0]) {
+ sQuestHpPrimRed -= sp1CA;
+ } else {
+ sQuestHpPrimRed += sp1CA;
+ }
+
+ if (sQuestHpPrimGreen >= sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][1]) {
+ sQuestHpPrimGreen -= sp1C8;
+ } else {
+ sQuestHpPrimGreen += sp1C8;
+ }
+
+ if (sQuestHpPrimBlue >= sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][2]) {
+ sQuestHpPrimBlue -= sp1C6;
+ } else {
+ sQuestHpPrimBlue += sp1C6;
+ }
+
+ if (sQuestHpPrimAlpha >= sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][3]) {
+ sQuestHpPrimAlpha -= sp1C4;
+ } else {
+ sQuestHpPrimAlpha += sp1C4;
+ }
+
+ sQuestHpColorTimer--;
+ if (sQuestHpColorTimer == 0) {
+ sQuestHpPrimRed = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][0];
+ sQuestHpPrimGreen = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][1];
+ sQuestHpPrimBlue = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][2];
+ sQuestHpPrimAlpha = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][3];
+ sQuestHpColorTimer = sQuestHpColorTimerInit[sQuestHpPrimColorTargetIndex];
+ if (++sQuestHpPrimColorTargetIndex > 3) {
+ sQuestHpPrimColorTargetIndex = 0;
+ }
+ }
+
+ if ((GET_SAVE_INVENTORY_QUEST_ITEMS >> QUEST_HEART_PIECE_COUNT) != 0) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+
+ if ((pauseCtx->state == 4) || (pauseCtx->state == 0x1A)) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sQuestHpPrimColorTargets[0][0], sQuestHpPrimColorTargets[0][1],
+ sQuestHpPrimColorTargets[0][2], pauseCtx->alpha);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sQuestHpPrimRed, sQuestHpPrimGreen, sQuestHpPrimBlue,
+ sQuestHpPrimAlpha);
+ }
+
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+
+ POLY_OPA_DISP = func_8010DC58(
+ POLY_OPA_DISP,
+ gItemIcons[(0x7A + ((GET_SAVE_INVENTORY_QUEST_ITEMS & 0xF0000000) >> QUEST_HEART_PIECE_COUNT))], 48, 48, 0);
+ }
+
+ j += 4;
+
+ if (pauseCtx->state == 6) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+
+ if (pauseCtx->unk_200 == 2) {
+ // Draw ocarina buttons as they are played back
+ pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+
+ if (pauseCtx->ocarinaStaff->pos != 0) {
+ if (sQuestSongPlayedOcarinaButtonsNum == (pauseCtx->ocarinaStaff->pos - 1)) {
+ sQuestSongPlayedOcarinaButtonsNum++;
+ sQuestSongPlayedOcarinaButtons[pauseCtx->ocarinaStaff->pos - 1] =
+ pauseCtx->ocarinaStaff->buttonIndex;
+ }
+
+ for (i = 0, k = 0; i < 8; i++, k += 4, j += 4) {
+ if (sQuestSongPlayedOcarinaButtons[i] == OCARINA_BTN_INVALID) {
+ break;
+ }
+
+ if (sQuestSongPlayedOcarinaButtonsAlpha[i] != 255) {
+ sQuestSongPlayedOcarinaButtonsAlpha[i] += 50;
+ if (sQuestSongPlayedOcarinaButtonsAlpha[i] >= 255) {
+ sQuestSongPlayedOcarinaButtonsAlpha[i] = 255;
+ }
+ }
+
+ pauseCtx->questVtx[j + 0].v.ob[1] = pauseCtx->questVtx[j + 1].v.ob[1] =
+ pauseCtx->ocarinaButtonsY[sQuestSongPlayedOcarinaButtons[i]];
+
+ pauseCtx->questVtx[j + 2].v.ob[1] = pauseCtx->questVtx[j + 3].v.ob[1] =
+ pauseCtx->questVtx[j + 0].v.ob[1] - 12;
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ if (sQuestSongPlayedOcarinaButtons[i] == OCARINA_BTN_A) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 80, 150, 255, sQuestSongPlayedOcarinaButtonsAlpha[i]);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 50, sQuestSongPlayedOcarinaButtonsAlpha[i]);
+ }
+
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+
+ POLY_OPA_DISP = func_8010DC58(POLY_OPA_DISP,
+ sOcarinaButtonTextures[sQuestSongPlayedOcarinaButtons[i]], 16, 16, 0);
+ }
+ }
+ } else if (((pauseCtx->unk_200 >= 4) && (pauseCtx->unk_200 <= 6)) || (pauseCtx->unk_200 == 8)) {
+ // Draw the buttons for playing a song
+ sp1C8 = pauseCtx->ocarinaSongIndex;
+ sp1CA = gOcarinaSongButtons[sp1C8].numButtons;
+
+ i = j;
+
+ for (k = 0; k < sp1CA; k++, j += 4) {
+ pauseCtx->questVtx[j + 0].v.ob[1] = pauseCtx->questVtx[j + 1].v.ob[1] =
+ pauseCtx->ocarinaButtonsY[gOcarinaSongButtons[sp1C8].buttonIndex[k]];
+
+ pauseCtx->questVtx[j + 2].v.ob[1] = pauseCtx->questVtx[j + 3].v.ob[1] =
+ pauseCtx->questVtx[j + 0].v.ob[1] - 12;
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ if (pauseCtx->unk_200 == 8) {
+ // Draw ocarina buttons colored
+ if (gOcarinaSongButtons[sp1C8].buttonIndex[k] == OCARINA_BTN_A) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 80, 150, 255, 200);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 50, 200);
+ }
+ } else {
+ // Gray out buttons while reading ocarina song inputs
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 150, 150, 150);
+ }
+
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+
+ POLY_OPA_DISP = func_8010DC58(
+ POLY_OPA_DISP, sOcarinaButtonTextures[gOcarinaSongButtons[sp1C8].buttonIndex[k]], 16, 16, 0);
+ }
+
+ if (pauseCtx->unk_200 != 8) {
+ pauseCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+
+ // Update ocarina song inputs
+ if (pauseCtx->ocarinaStaff->pos != 0) {
+ if (sQuestSongPlayedOcarinaButtonsNum == (pauseCtx->ocarinaStaff->pos - 1)) {
+ if (pauseCtx->ocarinaStaff->buttonIndex <= OCARINA_BTN_C_UP) {
+ sQuestSongPlayedOcarinaButtons[pauseCtx->ocarinaStaff->pos - 1] =
+ pauseCtx->ocarinaStaff->buttonIndex;
+ sQuestSongPlayedOcarinaButtons[pauseCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
+ sQuestSongPlayedOcarinaButtonsNum++;
+ }
+ }
+ }
+
+ // Draw the buttons colored as the ocarina song inputs are read from
+ j = i + 32;
+ k = 0;
+ for (; k < 8; k++, j += 4) {
+ if (sQuestSongPlayedOcarinaButtons[k] == OCARINA_BTN_INVALID) {
+ continue;
+ }
+
+ if (sQuestSongPlayedOcarinaButtonsAlpha[k] != 255) {
+ sQuestSongPlayedOcarinaButtonsAlpha[k] += 50;
+ if (sQuestSongPlayedOcarinaButtonsAlpha[k] >= 255) {
+ sQuestSongPlayedOcarinaButtonsAlpha[k] = 255;
+ }
+ }
+
+ pauseCtx->questVtx[j + 0].v.ob[1] = pauseCtx->questVtx[j + 1].v.ob[1] =
+ pauseCtx->ocarinaButtonsY[sQuestSongPlayedOcarinaButtons[k]];
+
+ pauseCtx->questVtx[j + 2].v.ob[1] = pauseCtx->questVtx[j + 3].v.ob[1] =
+ pauseCtx->questVtx[j + 0].v.ob[1] - 12;
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ if (sQuestSongPlayedOcarinaButtons[k] == OCARINA_BTN_A) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 80, 150, 255, sQuestSongPlayedOcarinaButtonsAlpha[k]);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 50, sQuestSongPlayedOcarinaButtonsAlpha[k]);
+ }
+
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+
+ POLY_OPA_DISP = func_8010DC58(POLY_OPA_DISP,
+ sOcarinaButtonTextures[sQuestSongPlayedOcarinaButtons[k]], 16, 16, 0);
+ }
+
+ if (pauseCtx->unk_200 == 4) {
+ for (k = 0; k < 8; k++) {
+ sQuestSongPlayedOcarinaButtons[k] = OCARINA_BTN_INVALID;
+ sQuestSongPlayedOcarinaButtonsAlpha[k] = 0;
+ }
+
+ sQuestSongPlayedOcarinaButtonsNum = 0;
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_StartDefault((1 << pauseCtx->ocarinaSongIndex) | 0x80000000);
+ pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ pauseCtx->ocarinaStaff->pos = 0;
+ pauseCtx->ocarinaStaff->state = 0xFE;
+ pauseCtx->unk_200 = 5;
+ }
+ }
+ }
+ }
+
+ // Draw Skull Token Count
+ // QUEST_SKULL_TOKEN never properly set, see Item_Give(),
+ // Vertices not well placed, digits are not aligned and placed in unintended positions
+ if (CHECK_QUEST_ITEM(QUEST_SKULL_TOKEN) && ((play->sceneId == SCENE_KINSTA1) || (play->sceneId == SCENE_KINDAN2))) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
+
+ skullTokenDigits[0] = skullTokenDigits[1] = 0;
+ skullTokenDigits[2] = Inventory_GetSkullTokenCount(play->sceneId);
+
+ while (skullTokenDigits[2] >= 100) {
+ skullTokenDigits[0]++;
+ skullTokenDigits[2] -= 100;
+ }
+
+ while (skullTokenDigits[2] >= 10) {
+ skullTokenDigits[1]++;
+ skullTokenDigits[2] -= 10;
+ }
+
+ //! @bug: &pauseCtx->questVtx[84] is the questVtx for skull tokens
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[152], 24, 0);
+
+ // Loop over two sets of digits, the first is shadowed, the second is colored
+ for (k = 0, i = 0; k < 2; k++) {
+ if (k == 0) {
+ // shadow
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, pauseCtx->alpha);
+ } else {
+ if (Inventory_GetSkullTokenCount(play->sceneId) == 100) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 200, 50, 50, pauseCtx->alpha);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+ }
+ }
+
+ isDigitDrawn = false;
+ for (j = 0; j < 3; j++, i += 4) {
+ if ((j >= 2) || (skullTokenDigits[j] != 0) || isDigitDrawn) {
+ gDPLoadTextureBlock(POLY_OPA_DISP++, ((u8*)gCounterDigit0Tex + (8 * 16 * skullTokenDigits[j])),
+ G_IM_FMT_I, G_IM_SIZ_8b, 8, 16, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ gSP1Quadrangle(POLY_OPA_DISP++, i, i + 2, i + 3, i + 1, 0);
+
+ isDigitDrawn = true;
+ }
+ }
+ }
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+#else
+s16 sQuestRemainsColorTimer = 20;
+s16 sQuestRemainsColorTimerIndex = 0;
+s16 sQuestHpPrimRed = 0;
+s16 sQuestHpPrimGreen = 0;
+s16 sQuestHpPrimBlue = 0;
+s16 sQuestHpPrimAlpha = 0;
+s16 sQuestHpColorTimer = 20;
+s16 sQuestHpPrimColorTargetIndex = 0;
+TexturePtr sOcarinaButtonTextures[] = {
+ gOcarinaATex, gOcarinaCDownTex, gOcarinaCRightTex, gOcarinaCLeftTex, gOcarinaCUpTex,
};
-
-s16 D_8082AF6C[] = {
- 255, 255, 255, 255, 255, 255,
-};
-
-s16 D_8082AF78[] = {
- 255, 255, 255, 255, 255, 255,
-};
-
-s16 D_8082AF84[] = {
- 150, 150, 150, 150, 150, 150,
-};
-
-s16 D_8082AF90 = 20;
-
-s32 D_8082AF94 = 0;
-
-s32 D_8082AF98 = 0;
-
-s32 D_8082AF9C = 0;
-
-s32 D_8082AFA0 = 0;
-
-s32 D_8082AFA4 = 0;
-
-s16 D_8082AFA8 = 20;
-
-s32 D_8082AFAC = 0;
-
-void* D_8082AFB0[] = {
- 0x020024A0, 0x020025A0, 0x020026A0, 0x020027A0, 0x020028A0,
-};
-
-s16 D_8082AFC4[] = {
+s16 sQuestSongsPrimRed[] = {
150, 255, 100, 255, 255, 255, 255, 255, 255, 255, 255, 255,
};
-
-s16 D_8082AFDC[] = {
+s16 sQuestSongsPrimGreen[] = {
255, 80, 150, 160, 100, 240, 255, 255, 255, 255, 255, 255,
};
-
-s16 D_8082AFF4[] = { 100, 40, 255, 0, 255, 100, 255, 255, 255, 255, 255, 255 };
-
-void* D_8082B00C[] = {
- 0x08053000, 0x08054000, 0x08055000, 0x08056000, 0x08057000, 0x08058000,
+s16 sQuestSongsPrimBlue[] = {
+ 100, 40, 255, 0, 255, 100, 255, 255, 255, 255, 255, 255,
};
-
-s16 D_8082B024 = 1;
-
-s16 D_8082B028 = 0;
-
-s16 D_8082B02C[] = {
- 0xFFFF, 0x0003, 0x0002, 0x0001, 0x0000, 0x0004, 0x0003, 0xFFFE, 0x0000, 0x0005, 0x0016, 0x0003, 0x0000, 0x0004,
- 0x0002, 0x0001, 0x0001, 0x0014, 0x0005, 0xFFFE, 0x0002, 0x0013, 0x0010, 0x0004, 0x000C, 0xFFFF, 0xFFFD, 0x0007,
- 0x000D, 0xFFFF, 0x0006, 0x0008, 0x000E, 0xFFFF, 0x0007, 0x0009, 0x000F, 0xFFFF, 0x0008, 0x000A, 0x0010, 0xFFFF,
- 0x0009, 0x0013, 0x0011, 0xFFFF, 0x000A, 0x0005, 0x0012, 0x0006, 0xFFFD, 0x000D, 0x0012, 0x0007, 0x000C, 0x000E,
- 0x0016, 0x0008, 0x000D, 0x000F, 0x0016, 0x0009, 0x000E, 0x0010, 0x0016, 0x000A, 0x000F, 0x0005, 0x0016, 0x000B,
- 0x0010, 0x0005, 0xFFFF, 0x000C, 0xFFFD, 0x0016, 0x0005, 0xFFFF, 0x000A, 0x0014, 0x0004, 0xFFFF, 0x0013, 0xFFFE,
- 0x0013, 0x000C, 0xFFFD, 0x0016, 0xFFFF, 0x0010, 0x0012, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+TexturePtr sQuestUpgradeTextures[][3] = {
+ { 0x08053000, 0x08054000, 0x08055000 },
+ { 0x08056000, 0x08057000, 0x08058000 },
};
+u8 sQuestUpgrades[] = { UPG_QUIVER, UPG_BOMB_BAG };
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_DrawQuestStatus.s")
+#endif
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_808160A0.s")
+typedef enum {
+ /* -3 */ CURSOR_TO_LEFT = -3, // Cursor on the "scroll to left page" position
+ /* -2 */ CURSOR_TO_RIGHT, // Cursor on the "scroll to right page" position
+ /* -1 */ CURSOR_NONE // No position in that direction, cursor stays where it is
+} CursorPointNext;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80817B5C.s")
+typedef struct {
+ /* 0x0 */ s16 up;
+ /* 0x2 */ s16 down;
+ /* 0x4 */ s16 left;
+ /* 0x6 */ s16 right;
+} CursorPointDirection;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80818904.s")
+void KaleidoScope_UpdateQuestCursor(PlayState* play) {
+ static s16 sQuestSongPlaybackDelayTimer = 0;
+ static CursorPointDirection sCursorPointLinks[] = {
+ { CURSOR_NONE, QUEST_REMAINS_TWINMOLD, QUEST_REMAINS_GYORG, QUEST_REMAINS_GOHT }, // QUEST_REMAINS_ODOLWA
+ { QUEST_REMAINS_ODOLWA, QUEST_SHIELD, QUEST_REMAINS_TWINMOLD, CURSOR_TO_RIGHT }, // QUEST_REMAINS_GOHT
+ { QUEST_REMAINS_ODOLWA, QUEST_SWORD, QUEST_HEART_PIECE, QUEST_REMAINS_TWINMOLD }, // QUEST_REMAINS_GYORG
+ { QUEST_REMAINS_ODOLWA, QUEST_SHIELD, QUEST_REMAINS_GYORG, QUEST_REMAINS_GOHT }, // QUEST_REMAINS_TWINMOLD
+ { QUEST_REMAINS_GOHT, QUEST_BOMB_BAG, QUEST_SWORD, CURSOR_TO_RIGHT }, // QUEST_SHIELD
+ { QUEST_REMAINS_GYORG, QUEST_QUIVER, QUEST_SONG_STORMS, QUEST_SHIELD }, // QUEST_SWORD
+ { QUEST_SONG_TIME, CURSOR_NONE, CURSOR_TO_LEFT, QUEST_SONG_LULLABY }, // QUEST_SONG_SONATA
+ { QUEST_SONG_HEALING, CURSOR_NONE, QUEST_SONG_SONATA, QUEST_SONG_BOSSA_NOVA }, // QUEST_SONG_LULLABY
+ { QUEST_SONG_EPONA, CURSOR_NONE, QUEST_SONG_LULLABY, QUEST_SONG_ELEGY }, // QUEST_SONG_BOSSA_NOVA
+ { QUEST_SONG_SOARING, CURSOR_NONE, QUEST_SONG_BOSSA_NOVA, QUEST_SONG_OATH }, // QUEST_SONG_ELEGY
+ { QUEST_SONG_STORMS, CURSOR_NONE, QUEST_SONG_ELEGY, QUEST_QUIVER }, // QUEST_SONG_OATH
+ { QUEST_SONG_SUN, CURSOR_NONE, QUEST_SONG_OATH, QUEST_SWORD }, // QUEST_SONG_SARIA
+ { QUEST_BOMBERS_NOTEBOOK, QUEST_SONG_SONATA, CURSOR_TO_LEFT, QUEST_SONG_HEALING }, // QUEST_SONG_TIME
+ { QUEST_BOMBERS_NOTEBOOK, QUEST_SONG_LULLABY, QUEST_SONG_TIME, QUEST_SONG_EPONA }, // QUEST_SONG_HEALING
+ { QUEST_HEART_PIECE, QUEST_SONG_BOSSA_NOVA, QUEST_SONG_HEALING, QUEST_SONG_SOARING }, // QUEST_SONG_EPONA
+ { QUEST_HEART_PIECE, QUEST_SONG_ELEGY, QUEST_SONG_EPONA, QUEST_SONG_STORMS }, // QUEST_SONG_SOARING
+ { QUEST_HEART_PIECE, QUEST_SONG_OATH, QUEST_SONG_SOARING, QUEST_SWORD }, // QUEST_SONG_STORMS
+ { QUEST_HEART_PIECE, QUEST_SONG_SARIA, QUEST_SONG_STORMS, QUEST_SWORD }, // QUEST_SONG_SUN
+ { CURSOR_NONE, QUEST_SONG_TIME, CURSOR_TO_LEFT, QUEST_HEART_PIECE }, // QUEST_BOMBERS_NOTEBOOK
+ { QUEST_SWORD, CURSOR_NONE, QUEST_SONG_OATH, QUEST_BOMB_BAG }, // QUEST_QUIVER
+ { QUEST_SHIELD, CURSOR_NONE, QUEST_QUIVER, CURSOR_TO_RIGHT }, // QUEST_BOMB_BAG
+ { QUEST_QUIVER, QUEST_SONG_TIME, CURSOR_TO_LEFT, QUEST_HEART_PIECE }, // QUEST_SKULL_TOKEN
+ { CURSOR_NONE, QUEST_SONG_STORMS, QUEST_BOMBERS_NOTEBOOK, QUEST_REMAINS_GYORG }, // QUEST_HEART_PIECE
+ };
+ PauseContext* pauseCtx = &play->pauseCtx;
+ MessageContext* msgCtx = &play->msgCtx;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ s32 pad;
+ s16 nextCursorPoint;
+ s16 oldCursorPoint;
+ s16 i;
+ u16 cursor;
+ u16 cursorItem;
+
+ pauseCtx->nameColorSet = PAUSE_NAME_COLOR_SET_WHITE;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
+
+ // != 0
+ if ((pauseCtx->state == 6) && (!pauseCtx->unk_200 || (pauseCtx->unk_200 == 5) || (pauseCtx->unk_200 == 8)) &&
+ (pauseCtx->pageIndex == PAUSE_QUEST) && !pauseCtx->itemDescriptionOn) {
+ if (pauseCtx->cursorSpecialPos == 0) {
+ oldCursorPoint = pauseCtx->cursorPoint[PAUSE_QUEST];
+
+ if (pauseCtx->stickAdjX < -30) {
+ // Move cursor left
+ if (pauseCtx->unk_200 == 5) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ pauseCtx->unk_298 = 4.0f;
+
+ nextCursorPoint = sCursorPointLinks[oldCursorPoint].left;
+ if (nextCursorPoint == CURSOR_TO_LEFT) {
+ KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_LEFT);
+ pauseCtx->unk_200 = 0;
+ if (interfaceCtx->unk_212 == 6) {
+ func_8011552C(play, 0x15);
+ }
+ return;
+ } else {
+ while (nextCursorPoint > CURSOR_NONE) {
+ if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) {
+ break;
+ }
+ nextCursorPoint = sCursorPointLinks[nextCursorPoint].left;
+ }
+ }
+ } else if (pauseCtx->stickAdjX > 30) {
+ // Move cursor right
+ if (pauseCtx->unk_200 == 5) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ pauseCtx->unk_298 = 4.0f;
+ nextCursorPoint = sCursorPointLinks[oldCursorPoint].right;
+
+ if (nextCursorPoint == CURSOR_TO_RIGHT) {
+ KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_RIGHT);
+ pauseCtx->unk_200 = 0;
+ return;
+ }
+
+ while (nextCursorPoint > CURSOR_NONE) {
+ if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) {
+ break;
+ }
+ nextCursorPoint = sCursorPointLinks[nextCursorPoint].right;
+ }
+ }
+
+ if (pauseCtx->stickAdjY < -30) {
+ // Move cursor down
+ if (pauseCtx->unk_200 == 5) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ nextCursorPoint = sCursorPointLinks[oldCursorPoint].down;
+
+ while (nextCursorPoint > CURSOR_NONE) {
+ pauseCtx->unk_298 = 4.0f;
+ if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) {
+ break;
+ }
+ nextCursorPoint = sCursorPointLinks[nextCursorPoint].down;
+ }
+ } else if (pauseCtx->stickAdjY > 30) {
+ // Move cursor up
+ if (pauseCtx->unk_200 == 5) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ nextCursorPoint = sCursorPointLinks[oldCursorPoint].up;
+ while (nextCursorPoint > CURSOR_NONE) {
+ pauseCtx->unk_298 = 4.0f;
+ if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) {
+ break;
+ }
+ nextCursorPoint = sCursorPointLinks[nextCursorPoint].up;
+ }
+ }
+
+ // if the cursor point changed
+ if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_QUEST]) {
+ pauseCtx->unk_200 = 0;
+ play_sound(NA_SE_SY_CURSOR);
+ }
+
+ // Update cursor item and slot
+ if (pauseCtx->cursorPoint[PAUSE_QUEST] != QUEST_HEART_PIECE) {
+ if (pauseCtx->cursorPoint[PAUSE_QUEST] <= QUEST_REMAINS_TWINMOLD) {
+ // Boss Remains
+ if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) {
+ cursorItem = ITEM_REMAINS_ODOLWA + pauseCtx->cursorPoint[PAUSE_QUEST];
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else if (pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_BOMBERS_NOTEBOOK) {
+ // Bombers Notebook
+ if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) {
+ cursorItem = ITEM_BOMBERS_NOTEBOOK;
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else if (pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_SHIELD) {
+ // Shield
+ if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) != EQUIP_VALUE_SHIELD_NONE) {
+ cursorItem = (ITEM_SHIELD_HERO - EQUIP_TYPE_SHIELD) + GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD);
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else if (pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_SWORD) {
+ // Sword
+ if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) != EQUIP_VALUE_SWORD_NONE) {
+ cursorItem =
+ (ITEM_SWORD_KOKIRI - EQUIP_VALUE_SWORD_KOKIRI) + GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD);
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else if (pauseCtx->cursorPoint[PAUSE_QUEST] <= QUEST_SONG_SUN) {
+ // Songs
+ if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) {
+ cursorItem = ITEM_WALLET_GIANT + pauseCtx->cursorPoint[PAUSE_QUEST];
+ } else if ((pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_SONG_LULLABY) &&
+ CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO)) {
+ cursorItem = ITEM_SONG_LULLABY_INTRO;
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else if (pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_QUIVER) {
+ // Quiver Upgrade
+ if (GET_CUR_UPG_VALUE(UPG_QUIVER) != 0) {
+ cursorItem = (ITEM_QUIVER_30 - 1) + GET_CUR_UPG_VALUE(UPG_QUIVER);
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else if (pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_BOMB_BAG) {
+ // Bomb Bag Upgrade
+ if (GET_CUR_UPG_VALUE(UPG_BOMB_BAG) != 0) {
+ cursorItem = (ITEM_BOMB_BAG_20 - 1) + GET_CUR_UPG_VALUE(UPG_BOMB_BAG);
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else {
+ // Heart Piece Count
+ if ((GET_SAVE_INVENTORY_QUEST_ITEMS >> QUEST_HEART_PIECE_COUNT) != 0) {
+ cursorItem = ITEM_HEART_CONTAINER;
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ }
+
+ cursor = pauseCtx->cursorPoint[PAUSE_QUEST];
+ pauseCtx->cursorItem[pauseCtx->pageIndex] = cursorItem;
+ pauseCtx->cursorSlot[pauseCtx->pageIndex] = cursor;
+
+ if ((pauseCtx->debugEditor == DEBUG_EDITOR_NONE) && (pauseCtx->state == 6) && (pauseCtx->unk_200 == 0) &&
+ (pauseCtx->cursorSpecialPos == 0)) {
+ if ((cursor >= QUEST_SONG_SONATA) && (cursor <= QUEST_SONG_SUN)) {
+ // Handle part of the ocarina songs playback
+ if ((CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST]) ||
+ ((cursor == QUEST_SONG_LULLABY) && !CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST]) &&
+ CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO))) &&
+ (msgCtx->msgLength == 0)) {
+ // The cursor is on a learned song
+ // Set some things up for song playback
+
+ if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) {
+ cursor = pauseCtx->cursorSlot[PAUSE_QUEST];
+ } else {
+ cursor = QUEST_BOMB_BAG;
+ }
+
+ pauseCtx->ocarinaSongIndex = gOcarinaSongItemMap[cursor - QUEST_SONG_SONATA];
+ sQuestSongPlaybackDelayTimer = 10;
+
+ for (i = 0; i < 8; i++) {
+ sQuestSongPlayedOcarinaButtons[i] = OCARINA_BTN_INVALID;
+ sQuestSongPlayedOcarinaButtonsAlpha[i] = 0;
+ }
+
+ sQuestSongPlayedOcarinaButtonsNum = 0;
+
+ // Setup the song to receive user input, immediately cancelled below
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_StartDefault((1 << pauseCtx->ocarinaSongIndex) | 0x80000000);
+
+ // Clear the playback staff
+ pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ pauseCtx->ocarinaStaff->pos = 0;
+ pauseCtx->ocarinaStaff->state = 0xFF;
+
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_A] = -62;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_DOWN] = -56;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_RIGHT] = -49;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_LEFT] = -46;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_UP] = -41;
+
+ pauseCtx->unk_200 = 8;
+
+ if (interfaceCtx->unk_212 != 6) {
+ func_8011552C(play, 6);
+ }
+
+ // Stop receiving input to play a song as mentioned above
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_A] == BTN_DISABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED;
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ }
+ } else {
+ if (interfaceCtx->unk_212 != 6) {
+ func_8011552C(play, 6);
+ }
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_A] != BTN_DISABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_DISABLED;
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ }
+ }
+ } else {
+ if ((cursor == QUEST_BOMBERS_NOTEBOOK) && (pauseCtx->cursorItem[PAUSE_QUEST] != PAUSE_ITEM_NONE)) {
+ if (interfaceCtx->unk_212 != 6) {
+ func_8011552C(play, 6);
+ }
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_BLUE;
+ } else if (interfaceCtx->unk_212 == 6) {
+ func_8011552C(play, 0x15);
+ }
+
+ if ((pauseCtx->cursorItem[PAUSE_QUEST] != PAUSE_ITEM_NONE) && (msgCtx->msgLength == 0)) {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_A] == BTN_DISABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED;
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ }
+
+ if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) && (msgCtx->msgLength == 0)) {
+ if (pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_BOMBERS_NOTEBOOK) {
+ play->pauseCtx.bombersNotebookOpen = true;
+ pauseCtx->unk_200 = 0x10;
+ play_sound(NA_SE_SY_DECIDE);
+ } else {
+ pauseCtx->itemDescriptionOn = true;
+ if (pauseCtx->cursorYIndex[PAUSE_QUEST] < 2) {
+ if (pauseCtx->cursorItem[PAUSE_QUEST] < ITEM_REMAINS_ODOLWA) {
+ func_801514B0(play, 0x1737 + pauseCtx->cursorItem[PAUSE_QUEST], 1);
+ } else {
+ func_801514B0(play, 0x173B + pauseCtx->cursorItem[PAUSE_QUEST], 3);
+ }
+ } else {
+ if (pauseCtx->cursorItem[PAUSE_QUEST] < ITEM_REMAINS_ODOLWA) {
+ func_801514B0(play, 0x1737 + pauseCtx->cursorItem[PAUSE_QUEST], 1);
+ } else {
+ func_801514B0(play, 0x173B + pauseCtx->cursorItem[PAUSE_QUEST], 1);
+ }
+ }
+ }
+ }
+ } else if (gSaveContext.buttonStatus[EQUIP_SLOT_A] != BTN_DISABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_DISABLED;
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ }
+ }
+ } else if (pauseCtx->unk_200 == 5) {
+ // Abort reading ocarina song input if the stick is moved
+ if ((pauseCtx->stickAdjX != 0) || (pauseCtx->stickAdjY != 0)) {
+ pauseCtx->unk_200 = 0;
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ } else if ((pauseCtx->unk_200 == 8) && CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) &&
+ (msgCtx->msgLength == 0) && (cursor >= QUEST_SONG_SONATA) && (cursor <= QUEST_SONG_SUN)) {
+ pauseCtx->unk_200 = 9;
+ sQuestSongPlaybackDelayTimer = 10;
+ }
+
+ if (pauseCtx->cursorSpecialPos == 0) {
+ if ((pauseCtx->cursorSlot[PAUSE_QUEST] >= 6) && (pauseCtx->cursorSlot[PAUSE_QUEST] < 0x12) &&
+ ((pauseCtx->unk_200 <= 2) || (pauseCtx->unk_200 == 5) || (pauseCtx->unk_200 == 8)) &&
+ (pauseCtx->cursorItem[pauseCtx->pageIndex] != PAUSE_ITEM_NONE)) {
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_BLUE;
+ if ((pauseCtx->unk_200 >= 2) && (pauseCtx->unk_200 <= 6)) {
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
+ }
+ }
+ }
+ } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) {
+ if (pauseCtx->stickAdjX > 30) {
+ if (pauseCtx->unk_200 == 5) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+
+ func_80821A04(play);
+
+ pauseCtx->cursorPoint[PAUSE_QUEST] = QUEST_BOMBERS_NOTEBOOK;
+ if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
+ cursorItem = ITEM_BOMBERS_NOTEBOOK;
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+
+ cursor = pauseCtx->cursorPoint[PAUSE_QUEST];
+ pauseCtx->cursorItem[pauseCtx->pageIndex] = cursorItem;
+ pauseCtx->cursorSlot[pauseCtx->pageIndex] = cursor;
+ }
+ } else if (pauseCtx->stickAdjX < -30) {
+ if (pauseCtx->unk_200 == 5) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+
+ func_80821A04(play);
+
+ pauseCtx->cursorPoint[PAUSE_QUEST] = QUEST_REMAINS_GOHT;
+ if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) {
+ cursorItem = (ITEM_REMAINS_GOHT - 1) + pauseCtx->cursorPoint[PAUSE_QUEST];
+ if (pauseCtx->cursorPoint[PAUSE_QUEST] != QUEST_REMAINS_ODOLWA) {
+ // This condition is always true as `cursorPoint` is set three lines above
+ cursorItem = ITEM_MASK_GIANT;
+ }
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+
+ cursor = pauseCtx->cursorPoint[PAUSE_QUEST];
+ pauseCtx->cursorItem[pauseCtx->pageIndex] = cursorItem;
+ pauseCtx->cursorSlot[pauseCtx->pageIndex] = cursor;
+ }
+ } else if (pauseCtx->unk_200 == 9) {
+ // After a short delay, start the playback of the selected song
+
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_BLUE;
+ sQuestSongPlaybackDelayTimer--;
+ if (sQuestSongPlaybackDelayTimer == 0) {
+ for (i = 0; i < 8; i++) {
+ sQuestSongPlayedOcarinaButtons[i] = OCARINA_BTN_INVALID;
+ sQuestSongPlayedOcarinaButtonsAlpha[i] = 0;
+ }
+ sQuestSongPlayedOcarinaButtonsNum = 0;
+
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_A] = -62;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_DOWN] = -56;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_RIGHT] = -49;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_LEFT] = -46;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_UP] = -41;
+
+ if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) {
+ cursor = pauseCtx->cursorSlot[PAUSE_QUEST];
+ } else {
+ cursor = QUEST_BOMB_BAG;
+ }
+
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ pauseCtx->ocarinaSongIndex = gOcarinaSongItemMap[cursor - QUEST_SONG_SONATA];
+ AudioOcarina_SetPlaybackSong(pauseCtx->ocarinaSongIndex + 1, 1);
+ pauseCtx->unk_200 = 2;
+ pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ pauseCtx->ocarinaStaff->pos = 0;
+ }
+ }
+}
+
+s32 KaleidoScope_UpdateQuestStatusPoint(PauseContext* pauseCtx, s16 point) {
+ pauseCtx->cursorPoint[PAUSE_QUEST] = point;
+
+ return true;
+}
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c
index c1f67b079..1152db202 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c
@@ -472,7 +472,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
// Loop over columns (i), (counterDigits[1] stores rectLeft)
for (counterDigits[1] = 44, i = 0; i < 4; i++) {
counterDigits[2] = 0;
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA + i)) {
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA + i)) {
counterDigits[2] = 1;
}
KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 112);
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c
index be23b56de..120a07c0a 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c
@@ -306,8 +306,8 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
}
gSPVertex(POLY_OPA_DISP++, &pauseCtx->itemVtx[j + 0], 4, 0);
- KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx,
- gItemIcons[((void)0, gSaveContext.save.inventory.items[i])], 32, 32, 0);
+ KaleidoScope_DrawTexQuadRGBA32(play->state.gfxCtx,
+ gItemIcons[((void)0, gSaveContext.save.inventory.items[i])], 32, 32, 0);
}
}
@@ -354,8 +354,8 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
s16 moveCursorResult;
s16 pad2;
- pauseCtx->cursorColorSet = 0;
- pauseCtx->nameColorSet = 0;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
+ pauseCtx->nameColorSet = PAUSE_NAME_COLOR_SET_WHITE;
if ((pauseCtx->state == 6) && (pauseCtx->unk_200 == 0) && (pauseCtx->pageIndex == PAUSE_ITEM) &&
!pauseCtx->itemDescriptionOn) {
@@ -367,7 +367,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
// Move cursor left/right
if (pauseCtx->cursorSpecialPos == 0) {
// cursor is currently on a slot
- pauseCtx->cursorColorSet = 2;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
if (ABS_ALT(pauseCtx->stickAdjX) > 30) {
cursorPoint = pauseCtx->cursorPoint[PAUSE_ITEM];
@@ -561,7 +561,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
}
cursorSlot = pauseCtx->cursorPoint[PAUSE_ITEM];
- pauseCtx->cursorColorSet = 2;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) {
cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]];
@@ -571,7 +571,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
if (cursorItem == ITEM_NONE) {
cursorItem = PAUSE_ITEM_NONE;
- pauseCtx->cursorColorSet = 0;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
}
if ((cursorItem != (u32)PAUSE_ITEM_NONE) && (msgCtx->msgLength == 0)) {
@@ -691,7 +691,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
play_sound(NA_SE_SY_CURSOR);
}
} else if ((pauseCtx->unk_200 == 3) && (pauseCtx->pageIndex == PAUSE_ITEM)) {
- pauseCtx->cursorColorSet = 2;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
}
}
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c
index 5f4c136e0..823a3d63f 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c
@@ -306,7 +306,7 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) {
if (pauseCtx->state == 6) {
if ((pauseCtx->unk_200 == 0) && (pauseCtx->pageIndex == PAUSE_MAP)) {
- pauseCtx->cursorColorSet = 0;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_MAP];
if (pauseCtx->stickAdjX > 30) {
pauseCtx->unk_298 = 4.0f;
@@ -826,7 +826,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) {
s16 oldCursorPoint;
if ((pauseCtx->state == 6) && (pauseCtx->unk_200 == 0) && (pauseCtx->pageIndex == PAUSE_MAP)) {
- pauseCtx->cursorColorSet = 0;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
if (gSaveContext.buttonStatus[EQUIP_SLOT_A] != BTN_DISABLED) {
@@ -937,7 +937,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) {
play_sound(NA_SE_SY_CURSOR);
}
} else if (pauseCtx->state == 0x17) {
- pauseCtx->cursorColorSet = 4;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_BLUE;
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
if (pauseCtx->stickAdjX > 30) {
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c
index cedcbf8f3..77835026f 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c
@@ -257,7 +257,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) {
}
gSPVertex(POLY_OPA_DISP++, &pauseCtx->maskVtx[j + 0], 4, 0);
- KaleidoScope_DrawQuadTextureRGBA32(
+ KaleidoScope_DrawTexQuadRGBA32(
play->state.gfxCtx, gItemIcons[((void)0, gSaveContext.save.inventory.items[i + NUM_ITEM_SLOTS])],
32, 32, 0);
}
@@ -285,8 +285,8 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
s16 moveCursorResult;
s16 pad2;
- pauseCtx->cursorColorSet = 0;
- pauseCtx->nameColorSet = 0;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
+ pauseCtx->nameColorSet = PAUSE_NAME_COLOR_SET_WHITE;
if ((pauseCtx->state == 6) && (pauseCtx->unk_200 == 0) && (pauseCtx->pageIndex == PAUSE_MASK) &&
!pauseCtx->itemDescriptionOn) {
@@ -298,7 +298,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
// Move cursor left/right
if (pauseCtx->cursorSpecialPos == 0) {
// cursor is currently on a slot
- pauseCtx->cursorColorSet = 2;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
if (ABS_ALT(pauseCtx->stickAdjX) > 30) {
cursorPoint = pauseCtx->cursorPoint[PAUSE_MASK];
@@ -497,7 +497,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
}
cursorSlot = pauseCtx->cursorPoint[PAUSE_MASK];
- pauseCtx->cursorColorSet = 2;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) {
cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS];
@@ -513,7 +513,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
if (cursorItem == ITEM_NONE) {
cursorItem = PAUSE_ITEM_NONE;
- pauseCtx->cursorColorSet = 0;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
}
if ((cursorItem != PAUSE_ITEM_NONE) && (msgCtx->msgLength == 0)) {
@@ -614,7 +614,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
play_sound(NA_SE_SY_CURSOR);
}
} else if ((pauseCtx->unk_200 == 0xF) && (pauseCtx->pageIndex == PAUSE_MASK)) {
- pauseCtx->cursorColorSet = 2;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
}
}
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h
index 72392390b..14c16ddcd 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h
@@ -30,12 +30,19 @@ typedef enum {
} EquipState;
typedef enum {
- /* 0 */ DEBUG_EDITOR_NONE,
- /* 1 */ DEBUG_EDITOR_INVENTORY_INIT,
- /* 2 */ DEBUG_EDITOR_INVENTORY,
- /* 3 */ DEBUG_EDITOR_EVENTS
+ /* 0 */ DEBUG_EDITOR_NONE,
+ /* 1 */ DEBUG_EDITOR_INVENTORY_INIT,
+ /* 2 */ DEBUG_EDITOR_INVENTORY,
+ /* 3 */ DEBUG_EDITOR_EVENTS
} DebugEditor;
+#define PAUSE_NAME_COLOR_SET_WHITE 0
+#define PAUSE_NAME_COLOR_SET_GREY 1
+
+#define PAUSE_CURSOR_COLOR_SET_WHITE 0
+#define PAUSE_CURSOR_COLOR_SET_YELLOW 2
+#define PAUSE_CURSOR_COLOR_SET_BLUE 4
+
// To be used for Item-Page cursor and Mask-Page cursor
typedef enum {
/* 0 */ PAUSE_CURSOR_RESULT_NONE,
@@ -51,8 +58,8 @@ typedef enum {
// NES
void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, s16 cursorSpecialPos);
-void KaleidoScope_DrawQuadTextureRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, u16 width, u16 height, u16 point);
-void KaleidoScope_SetView(PauseContext* pauseCtx, f32 x, f32 y, f32 z);
+void KaleidoScope_DrawTexQuadRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, u16 width, u16 height, u16 point);
+void KaleidoScope_SetView(PauseContext* pauseCtx, f32 eyeX, f32 eyeY, f32 eyeZ);
void func_80821A04(PlayState* play);
// Map
@@ -61,6 +68,10 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play);
void KaleidoScope_DrawWorldMap(PlayState* play);
void KaleidoScope_UpdateWorldMapCursor(PlayState* play);
+// Collect
+void KaleidoScope_DrawQuestStatus(PlayState* play);
+void KaleidoScope_UpdateQuestCursor(PlayState* play);
+
// Item
void KaleidoScope_SetCursorVtx(PauseContext* pauseCtx, u16 index, Vtx* vtx);
void KaleidoScope_DrawItemSelect(PlayState* play);
@@ -72,6 +83,9 @@ void KaleidoScope_DrawMaskSelect(PlayState* play);
void KaleidoScope_UpdateMaskCursor(PlayState* play);
void KaleidoScope_UpdateMaskEquip(PlayState* play);
+// Prompt
+void KaleidoScope_UpdatePrompt(PlayState* play);
+
// Debug
void KaleidoScope_DrawInventoryEditor(PlayState* play);
void KaleidoScope_UpdateInventoryEditor(PlayState* play);
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c
index 6c6754b3d..a322fda1f 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c
@@ -222,30 +222,173 @@ s16 D_8082BB68[] = {
0x000E, 0xFFFE, 0xFFFE, 0xFFEE, 0xFFEE, 0x0000,
};
-s16 D_8082BB74[] = {
- 0x002D, 0x004E, 0x000A, 0x002D, 0x0050, 0x000B, 0xFF93, 0xFFA9, 0xFFBF, 0xFFD7, 0xFFED, 0xFFEE, 0xFF93, 0xFFA9,
- 0xFFBF, 0xFFD7, 0xFFED, 0xFFEE, 0xFF99, 0x0007, 0x0052, 0xFF92, 0xFFCA, 0xFF9E, 0xFFAA, 0xFFB6, 0xFFC2, 0xFFCE,
- 0xFFDA, 0xFFE6, 0xFFF2, 0xFF9E, 0xFFAA, 0xFFB6, 0xFFC2, 0xFFCE, 0xFFDA, 0xFFE6, 0xFFF2, 0x0000,
+s16 sQuestVtxRectLeft[] = {
+ 45, // QUEST_REMAINS_ODOLWA
+ 78, // QUEST_REMAINS_GOHT
+ 10, // QUEST_REMAINS_GYORG
+ 45, // QUEST_REMAINS_TWINMOLD
+ 80, // QUEST_SHIELD
+ 11, // QUEST_SWORD
+ -109, // QUEST_SONG_SONATA
+ -87, // QUEST_SONG_LULLABY
+ -65, // QUEST_SONG_BOSSA_NOVA
+ -41, // QUEST_SONG_ELEGY
+ -19, // QUEST_SONG_OATH
+ -18, // QUEST_SONG_SARIA
+ -109, // QUEST_SONG_TIME
+ -87, // QUEST_SONG_HEALING
+ -65, // QUEST_SONG_EPONA
+ -41, // QUEST_SONG_SOARING
+ -19, // QUEST_SONG_STORMS
+ -18, // QUEST_SONG_SUN
+ -103, // QUEST_BOMBERS_NOTEBOOK
+ 7, // QUEST_QUIVER
+ 82, // QUEST_BOMB_BAG
+ -110, // QUEST_SKULL_TOKEN (unused)
+ -54, // QUEST_HEART_PIECE
+ -98, // ocarina song button index 0
+ -86, // ocarina song button index 1
+ -74, // ocarina song button index 2
+ -62, // ocarina song button index 3
+ -50, // ocarina song button index 4
+ -38, // ocarina song button index 5
+ -26, // ocarina song button index 6
+ -14, // ocarina song button index 7
+ -98, // ocarina input button index 0
+ -86, // ocarina input button index 1
+ -74, // ocarina input button index 2
+ -62, // ocarina input button index 3
+ -50, // ocarina input button index 4
+ -38, // ocarina input button index 5
+ -26, // ocarina input button index 6
+ -14, // ocarina input button index 7
};
-s16 D_8082BBC4[] = {
- 0x003E, 0x002A, 0x002A, 0x0014, 0xFFF7, 0xFFF7, 0xFFEC, 0xFFEC, 0xFFEC, 0xFFEC, 0xFFEC, 0xFFEC, 0x0002, 0x0002,
- 0x0002, 0x0002, 0x0002, 0x0002, 0x0036, 0xFFD4, 0xFFD4, 0x0022, 0x003A, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC,
- 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0x0000,
+s16 sQuestVtxRectTop[] = {
+ 62, // QUEST_REMAINS_ODOLWA
+ 42, // QUEST_REMAINS_GOHT
+ 42, // QUEST_REMAINS_GYORG
+ 20, // QUEST_REMAINS_TWINMOLD
+ -9, // QUEST_SHIELD
+ -9, // QUEST_SWORD
+ -20, // QUEST_SONG_SONATA
+ -20, // QUEST_SONG_LULLABY
+ -20, // QUEST_SONG_BOSSA_NOVA
+ -20, // QUEST_SONG_ELEGY
+ -20, // QUEST_SONG_OATH
+ -20, // QUEST_SONG_SARIA
+ 2, // QUEST_SONG_TIME
+ 2, // QUEST_SONG_HEALING
+ 2, // QUEST_SONG_EPONA
+ 2, // QUEST_SONG_SOARING
+ 2, // QUEST_SONG_STORMS
+ 2, // QUEST_SONG_SUN
+ 54, // QUEST_BOMBERS_NOTEBOOK
+ -44, // QUEST_QUIVER
+ -44, // QUEST_BOMB_BAG
+ 34, // QUEST_SKULL_TOKEN (unused)
+ 58, // QUEST_HEART_PIECE
+ -52, // ocarina song button index 0
+ -52, // ocarina song button index 1
+ -52, // ocarina song button index 2
+ -52, // ocarina song button index 3
+ -52, // ocarina song button index 4
+ -52, // ocarina song button index 5
+ -52, // ocarina song button index 6
+ -52, // ocarina song button index 7
+ -52, // ocarina input button index 0
+ -52, // ocarina input button index 1
+ -52, // ocarina input button index 2
+ -52, // ocarina input button index 3
+ -52, // ocarina input button index 4
+ -52, // ocarina input button index 5
+ -52, // ocarina input button index 6
+ -52, // ocarina input button index 7
};
-s16 D_8082BC14[] = {
- 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
- 0x0010, 0x0010, 0x0010, 0x0010, 0x0020, 0x0020, 0x0020, 0x0018, 0x0030, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
- 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000,
+s16 sQuestVtxWidths[] = {
+ 32, // QUEST_REMAINS_ODOLWA
+ 32, // QUEST_REMAINS_GOHT
+ 32, // QUEST_REMAINS_GYORG
+ 32, // QUEST_REMAINS_TWINMOLD
+ 32, // QUEST_SHIELD
+ 32, // QUEST_SWORD
+ 16, // QUEST_SONG_SONATA
+ 16, // QUEST_SONG_LULLABY
+ 16, // QUEST_SONG_BOSSA_NOVA
+ 16, // QUEST_SONG_ELEGY
+ 16, // QUEST_SONG_OATH
+ 16, // QUEST_SONG_SARIA
+ 16, // QUEST_SONG_TIME
+ 16, // QUEST_SONG_HEALING
+ 16, // QUEST_SONG_EPONA
+ 16, // QUEST_SONG_SOARING
+ 16, // QUEST_SONG_STORMS
+ 16, // QUEST_SONG_SUN
+ 32, // QUEST_BOMBERS_NOTEBOOK
+ 32, // QUEST_QUIVER
+ 32, // QUEST_BOMB_BAG
+ 24, // QUEST_SKULL_TOKEN (unused)
+ 48, // QUEST_HEART_PIECE
+ 16, // ocarina song button index 0
+ 16, // ocarina song button index 1
+ 16, // ocarina song button index 2
+ 16, // ocarina song button index 3
+ 16, // ocarina song button index 4
+ 16, // ocarina song button index 5
+ 16, // ocarina song button index 6
+ 16, // ocarina song button index 7
+ 16, // ocarina input button index 0
+ 16, // ocarina input button index 1
+ 16, // ocarina input button index 2
+ 16, // ocarina input button index 3
+ 16, // ocarina input button index 4
+ 16, // ocarina input button index 5
+ 16, // ocarina input button index 6
+ 16, // ocarina input button index 7
};
-s16 D_8082BC64[] = {
- 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
- 0x0018, 0x0018, 0x0018, 0x0018, 0x0020, 0x0020, 0x0020, 0x0018, 0x0030, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
- 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000,
+s16 sQuestVtxHeights[] = {
+ 32, // QUEST_REMAINS_ODOLWA
+ 32, // QUEST_REMAINS_GOHT
+ 32, // QUEST_REMAINS_GYORG
+ 32, // QUEST_REMAINS_TWINMOLD
+ 32, // QUEST_SHIELD
+ 32, // QUEST_SWORD
+ 24, // QUEST_SONG_SONATA
+ 24, // QUEST_SONG_LULLABY
+ 24, // QUEST_SONG_BOSSA_NOVA
+ 24, // QUEST_SONG_ELEGY
+ 24, // QUEST_SONG_OATH
+ 24, // QUEST_SONG_SARIA
+ 24, // QUEST_SONG_TIME
+ 24, // QUEST_SONG_HEALING
+ 24, // QUEST_SONG_EPONA
+ 24, // QUEST_SONG_SOARING
+ 24, // QUEST_SONG_STORMS
+ 24, // QUEST_SONG_SUN
+ 32, // QUEST_BOMBERS_NOTEBOOK
+ 32, // QUEST_QUIVER
+ 32, // QUEST_BOMB_BAG
+ 24, // QUEST_SKULL_TOKEN (unused)
+ 48, // QUEST_HEART_PIECE
+ 16, // ocarina song button index 0
+ 16, // ocarina song button index 1
+ 16, // ocarina song button index 2
+ 16, // ocarina song button index 3
+ 16, // ocarina song button index 4
+ 16, // ocarina song button index 5
+ 16, // ocarina song button index 6
+ 16, // ocarina song button index 7
+ 16, // ocarina input button index 0
+ 16, // ocarina input button index 1
+ 16, // ocarina input button index 2
+ 16, // ocarina input button index 3
+ 16, // ocarina input button index 4
+ 16, // ocarina input button index 5
+ 16, // ocarina input button index 6
+ 16, // ocarina input button index 7
};
-
f32 D_8082BCB4[] = {
-62.0f, -36.0f, -10.0f, 16.0f, 42.0f, 68.0f,
};
@@ -323,7 +466,7 @@ s32 D_8082BEB8[] = { 0, 0 };
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821A04.s")
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_DrawQuadTextureRGBA32.s")
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_DrawTexQuadRGBA32.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821CC4.s")
diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt
index 5cadee35f..cacce741d 100644
--- a/tools/disasm/functions.txt
+++ b/tools/disasm/functions.txt
@@ -1182,77 +1182,77 @@
0x800CEAD8:("func_800CEAD8",),
0x800CEC38:("func_800CEC38",),
0x800CED90:("func_800CED90",),
- 0x800CF3A4:("Camera_ModeNop",),
- 0x800CF3B4:("Camera_ModeNORM1",),
- 0x800D0874:("Camera_ModeNORM2",),
- 0x800D0894:("Camera_ModeNORM3",),
- 0x800D1228:("Camera_ModeNORM4",),
- 0x800D12B8:("Camera_ModeNORM0",),
- 0x800D1A78:("Camera_ModePARA1",),
- 0x800D2AA8:("Camera_ModePARA2",),
- 0x800D2AC8:("Camera_ModePARA3",),
- 0x800D2AE8:("Camera_ModePARA4",),
- 0x800D2B08:("Camera_ModePARA0",),
- 0x800D2B28:("Camera_ModeJUMP1",),
- 0x800D2B48:("Camera_ModeJUMP2",),
- 0x800D3520:("Camera_ModeJUMP3",),
- 0x800D41E0:("Camera_ModeJUMP4",),
- 0x800D4200:("Camera_ModeJUMP0",),
- 0x800D4220:("Camera_ModeBATT1",),
- 0x800D55A8:("Camera_ModeBATT2",),
- 0x800D55C8:("Camera_ModeBATT3",),
- 0x800D55E8:("Camera_ModeBATT4",),
- 0x800D5608:("Camera_ModeBATT0",),
- 0x800D5628:("Camera_ModeKEEP1",),
- 0x800D67DC:("Camera_ModeKEEP2",),
- 0x800D67FC:("Camera_ModeKEEP3",),
- 0x800D73C8:("Camera_ModeKEEP4",),
- 0x800D7FA4:("Camera_ModeKEEP0",),
- 0x800D7FC4:("Camera_ModeFIXD1",),
- 0x800D83C8:("Camera_ModeFIXD2",),
- 0x800D8E08:("Camera_ModeFIXD3",),
- 0x800D8E28:("Camera_ModeFIXD4",),
- 0x800D8E48:("Camera_ModeFIXD0",),
- 0x800D8E68:("Camera_ModeSUBJ1",),
- 0x800D947C:("Camera_ModeSUBJ2",),
- 0x800D949C:("Camera_ModeSUBJ3",),
- 0x800D94BC:("Camera_ModeSUBJ4",),
- 0x800D94DC:("Camera_ModeSUBJ0",),
- 0x800D94FC:("Camera_ModeDATA0",),
- 0x800D951C:("Camera_ModeDATA1",),
- 0x800D953C:("Camera_ModeDATA2",),
- 0x800D955C:("Camera_ModeDATA3",),
- 0x800D957C:("Camera_ModeDATA4",),
- 0x800D959C:("Camera_ModeUNIQ1",),
- 0x800D95BC:("Camera_ModeUNIQ2",),
- 0x800D99D0:("Camera_ModeUNIQ3",),
- 0x800D9A2C:("Camera_ModeUNIQ4",),
- 0x800D9A88:("Camera_ModeUNIQ5",),
- 0x800D9AE4:("Camera_ModeUNIQ0",),
- 0x800DA3B8:("Camera_ModeUNIQ6",),
- 0x800DA4EC:("Camera_ModeUNIQ7",),
- 0x800DA50C:("Camera_ModeUNIQ8",),
- 0x800DA52C:("Camera_ModeUNIQ9",),
- 0x800DA54C:("Camera_ModeDEMO1",),
- 0x800DAD10:("Camera_ModeDEMO2",),
- 0x800DB804:("Camera_ModeDEMO3",),
- 0x800DBB14:("Camera_ModeDEMO4",),
- 0x800DC270:("Camera_ModeDEMO5",),
- 0x800DC718:("Camera_ModeDEMO6",),
- 0x800DC738:("Camera_ModeDEMO7",),
- 0x800DC758:("Camera_ModeDEMO8",),
- 0x800DC778:("Camera_ModeDEMO9",),
- 0x800DC798:("Camera_ModeDEMO0",),
- 0x800DCC90:("Camera_ModeSPEC0",),
- 0x800DCCB0:("Camera_ModeSPEC1",),
- 0x800DCCD0:("Camera_ModeSPEC2",),
- 0x800DCCF0:("Camera_ModeSPEC3",),
- 0x800DCD10:("Camera_ModeSPEC4",),
- 0x800DCD30:("Camera_ModeSPEC5",),
- 0x800DD0FC:("Camera_ModeSPEC6",),
- 0x800DD11C:("Camera_ModeSPEC7",),
- 0x800DD13C:("Camera_ModeSPEC8",),
- 0x800DD5B8:("Camera_ModeSPEC9",),
+ 0x800CF3A4:("Camera_Noop",),
+ 0x800CF3B4:("Camera_Normal1",),
+ 0x800D0874:("Camera_Normal2",),
+ 0x800D0894:("Camera_Normal3",),
+ 0x800D1228:("Camera_Normal4",),
+ 0x800D12B8:("Camera_Normal0",),
+ 0x800D1A78:("Camera_Parallel1",),
+ 0x800D2AA8:("Camera_Parallel2",),
+ 0x800D2AC8:("Camera_Parallel3",),
+ 0x800D2AE8:("Camera_Parallel4",),
+ 0x800D2B08:("Camera_Parallel0",),
+ 0x800D2B28:("Camera_Jump1",),
+ 0x800D2B48:("Camera_Jump2",),
+ 0x800D3520:("Camera_Jump3",),
+ 0x800D41E0:("Camera_Jump4",),
+ 0x800D4200:("Camera_Jump0",),
+ 0x800D4220:("Camera_Battle1",),
+ 0x800D55A8:("Camera_Battle2",),
+ 0x800D55C8:("Camera_Battle3",),
+ 0x800D55E8:("Camera_Battle4",),
+ 0x800D5608:("Camera_Battle0",),
+ 0x800D5628:("Camera_KeepOn1",),
+ 0x800D67DC:("Camera_KeepOn2",),
+ 0x800D67FC:("Camera_KeepOn3",),
+ 0x800D73C8:("Camera_KeepOn4",),
+ 0x800D7FA4:("Camera_KeepOn0",),
+ 0x800D7FC4:("Camera_Fixed1",),
+ 0x800D83C8:("Camera_Fixed2",),
+ 0x800D8E08:("Camera_Fixed3",),
+ 0x800D8E28:("Camera_Fixed4",),
+ 0x800D8E48:("Camera_Fixed0",),
+ 0x800D8E68:("Camera_Subject1",),
+ 0x800D947C:("Camera_Subject2",),
+ 0x800D949C:("Camera_Subject3",),
+ 0x800D94BC:("Camera_Subject4",),
+ 0x800D94DC:("Camera_Subject0",),
+ 0x800D94FC:("Camera_Data0",),
+ 0x800D951C:("Camera_Data1",),
+ 0x800D953C:("Camera_Data2",),
+ 0x800D955C:("Camera_Data3",),
+ 0x800D957C:("Camera_Data4",),
+ 0x800D959C:("Camera_Unique1",),
+ 0x800D95BC:("Camera_Unique2",),
+ 0x800D99D0:("Camera_Unique3",),
+ 0x800D9A2C:("Camera_Unique4",),
+ 0x800D9A88:("Camera_Unique5",),
+ 0x800D9AE4:("Camera_Unique0",),
+ 0x800DA3B8:("Camera_Unique6",),
+ 0x800DA4EC:("Camera_Unique7",),
+ 0x800DA50C:("Camera_Unique8",),
+ 0x800DA52C:("Camera_Unique9",),
+ 0x800DA54C:("Camera_Demo1",),
+ 0x800DAD10:("Camera_Demo2",),
+ 0x800DB804:("Camera_Demo3",),
+ 0x800DBB14:("Camera_Demo4",),
+ 0x800DC270:("Camera_Demo5",),
+ 0x800DC718:("Camera_Demo6",),
+ 0x800DC738:("Camera_Demo7",),
+ 0x800DC758:("Camera_Demo8",),
+ 0x800DC778:("Camera_Demo9",),
+ 0x800DC798:("Camera_Demo0",),
+ 0x800DCC90:("Camera_Special0",),
+ 0x800DCCB0:("Camera_Special1",),
+ 0x800DCCD0:("Camera_Special2",),
+ 0x800DCCF0:("Camera_Special3",),
+ 0x800DCD10:("Camera_Special4",),
+ 0x800DCD30:("Camera_Special5",),
+ 0x800DD0FC:("Camera_Special6",),
+ 0x800DD11C:("Camera_Special7",),
+ 0x800DD13C:("Camera_Special8",),
+ 0x800DD5B8:("Camera_Special9",),
0x800DDD58:("Camera_Alloc",),
0x800DDDA8:("Camera_Free",),
0x800DDDD0:("Camera_Init",),
@@ -4197,9 +4197,9 @@
0x80815770:("DayTelop_Noop",),
0x8081577C:("DayTelop_LoadGraphics",),
0x80815820:("DayTelop_Init",),
- 0x808160A0:("func_808160A0",),
- 0x80817B5C:("func_80817B5C",),
- 0x80818904:("func_80818904",),
+ 0x808160A0:("KaleidoScope_DrawQuestStatus",),
+ 0x80817B5C:("KaleidoScope_UpdateQuestCursor",),
+ 0x80818904:("KaleidoScope_UpdateQuestStatusPoint",),
0x80818920:("KaleidoScope_DrawInventoryEditorText",),
0x808190C4:("KaleidoScope_DrawDigit",),
0x80819238:("KaleidoScope_DrawInventoryEditor",),
@@ -4223,7 +4223,7 @@
0x80821958:("func_80821958",),
0x80821984:("KaleidoScope_MoveCursorToSpecialPos",),
0x80821A04:("func_80821A04",),
- 0x80821AD4:("KaleidoScope_DrawQuadTextureRGBA32",),
+ 0x80821AD4:("KaleidoScope_DrawTexQuadRGBA32",),
0x80821CC4:("func_80821CC4",),
0x80821D84:("func_80821D84",),
0x80821F30:("func_80821F30",),
@@ -14322,21 +14322,21 @@
0x80B6ED58:("BgKin2Fence_DoNothing",),
0x80B6ED68:("BgKin2Fence_Update",),
0x80B6ED8C:("BgKin2Fence_Draw",),
- 0x80B6EFA0:("func_80B6EFA0",),
- 0x80B6EFEC:("func_80B6EFEC",),
- 0x80B6F098:("func_80B6F098",),
+ 0x80B6EFA0:("BgKin2Picture_IsSkulltulaCollected",),
+ 0x80B6EFEC:("BgKin2Picture_SpawnSkulltula",),
+ 0x80B6F098:("BgKin2Picture_SpawnDust",),
0x80B6F2DC:("BgKin2Picture_Init",),
0x80B6F478:("BgKin2Picture_Destroy",),
- 0x80B6F4C0:("func_80B6F4C0",),
- 0x80B6F4D4:("func_80B6F4D4",),
- 0x80B6F5A4:("func_80B6F5A4",),
- 0x80B6F5B8:("func_80B6F5B8",),
- 0x80B6F61C:("func_80B6F61C",),
- 0x80B6F640:("func_80B6F640",),
- 0x80B6F708:("func_80B6F708",),
- 0x80B6F72C:("func_80B6F72C",),
- 0x80B6F8F8:("func_80B6F8F8",),
- 0x80B6F90C:("func_80B6F90C",),
+ 0x80B6F4C0:("BgKin2Picture_SetupWait",),
+ 0x80B6F4D4:("BgKin2Picture_Wait",),
+ 0x80B6F5A4:("BgKin2Picture_SetupPlayCutscene",),
+ 0x80B6F5B8:("BgKin2Picture_PlayCutscene",),
+ 0x80B6F61C:("BgKin2Picture_SetupShiver",),
+ 0x80B6F640:("BgKin2Picture_Shiver",),
+ 0x80B6F708:("BgKin2Picture_SetupFall",),
+ 0x80B6F72C:("BgKin2Picture_Fall",),
+ 0x80B6F8F8:("BgKin2Picture_SetupDoNothing",),
+ 0x80B6F90C:("BgKin2Picture_DoNothing",),
0x80B6F91C:("BgKin2Picture_Update",),
0x80B6F940:("BgKin2Picture_Draw",),
0x80B6FB30:("func_80B6FB30",),
@@ -14954,7 +14954,7 @@
0x80B9A8E8:("ObjY2lift_Draw",),
0x80B9A980:("ObjY2shutter_Init",),
0x80B9A9EC:("ObjY2shutter_Destroy",),
- 0x80B9AA20:("func_80B9AA20",),
+ 0x80B9AA20:("ObjY2shutter_SetupOpen",),
0x80B9AA54:("ObjY2shutter_Update",),
0x80B9AE00:("ObjY2shutter_Draw",),
0x80B9AF50:("func_80B9AF50",),
diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt
index e57cf3931..5ab4106ce 100644
--- a/tools/disasm/variables.txt
+++ b/tools/disasm/variables.txt
@@ -454,87 +454,100 @@
0x801B46DC:("sSceneSubdivisionList","BgCheckSceneSubdivisionEntry","[3]",0x24),
0x801B4700:("sCustomDynapolyMem","BgSpecialSceneMaxObjects","[1]",0x8),
0x801B4708:("D_801B4708","UNK_TYPE1","",0x1),
- 0x801B4710:("D_801B4710","UNK_TYPE1","",0x1),
- 0x801B4738:("D_801B4738","UNK_TYPE1","",0x1),
- 0x801B4768:("D_801B4768","UNK_TYPE1","",0x1),
- 0x801B4798:("D_801B4798","UNK_TYPE1","",0x1),
- 0x801B47CC:("D_801B47CC","UNK_TYPE1","",0x1),
- 0x801B47F0:("D_801B47F0","UNK_TYPE1","",0x1),
- 0x801B4824:("D_801B4824","UNK_TYPE1","",0x1),
- 0x801B4848:("D_801B4848","UNK_TYPE1","",0x1),
- 0x801B486C:("D_801B486C","UNK_TYPE1","",0x1),
- 0x801B4890:("D_801B4890","UNK_TYPE1","",0x1),
- 0x801B48B0:("D_801B48B0","UNK_TYPE1","",0x1),
- 0x801B48D4:("D_801B48D4","UNK_TYPE1","",0x1),
- 0x801B48F8:("D_801B48F8","UNK_TYPE1","",0x1),
- 0x801B491C:("D_801B491C","UNK_TYPE1","",0x1),
- 0x801B4944:("D_801B4944","UNK_TYPE1","",0x1),
- 0x801B4974:("D_801B4974","UNK_TYPE1","",0x1),
- 0x801B49A4:("D_801B49A4","UNK_TYPE1","",0x1),
- 0x801B49D4:("D_801B49D4","UNK_TYPE1","",0x1),
- 0x801B4A04:("D_801B4A04","UNK_TYPE1","",0x1),
- 0x801B4A34:("D_801B4A34","UNK_TYPE1","",0x1),
- 0x801B4A5C:("D_801B4A5C","UNK_TYPE1","",0x1),
- 0x801B4A8C:("D_801B4A8C","UNK_TYPE1","",0x1),
- 0x801B4ABC:("D_801B4ABC","UNK_TYPE1","",0x1),
- 0x801B4AE0:("D_801B4AE0","UNK_TYPE1","",0x1),
- 0x801B4B08:("D_801B4B08","UNK_TYPE1","",0x1),
- 0x801B4B38:("D_801B4B38","UNK_TYPE1","",0x1),
- 0x801B4B60:("D_801B4B60","UNK_TYPE1","",0x1),
- 0x801B4B90:("D_801B4B90","UNK_TYPE1","",0x1),
- 0x801B4BB8:("D_801B4BB8","UNK_TYPE1","",0x1),
- 0x801B4BDC:("D_801B4BDC","UNK_TYPE1","",0x1),
- 0x801B4C04:("D_801B4C04","UNK_TYPE1","",0x1),
- 0x801B4C34:("D_801B4C34","UNK_TYPE1","",0x1),
- 0x801B4C5C:("D_801B4C5C","UNK_TYPE1","",0x1),
- 0x801B4C84:("D_801B4C84","UNK_TYPE1","",0x1),
- 0x801B4CAC:("D_801B4CAC","UNK_TYPE1","",0x1),
- 0x801B4CD4:("D_801B4CD4","UNK_TYPE1","",0x1),
- 0x801B4CFC:("D_801B4CFC","UNK_TYPE1","",0x1),
- 0x801B4D24:("D_801B4D24","UNK_TYPE1","",0x1),
- 0x801B4D34:("D_801B4D34","UNK_TYPE1","",0x1),
- 0x801B4D44:("D_801B4D44","UNK_TYPE1","",0x1),
- 0x801B4D68:("D_801B4D68","UNK_TYPE1","",0x1),
- 0x801B4D8C:("D_801B4D8C","UNK_TYPE1","",0x1),
- 0x801B4DB0:("D_801B4DB0","UNK_TYPE1","",0x1),
- 0x801B4DD4:("D_801B4DD4","UNK_TYPE1","",0x1),
- 0x801B4DF8:("D_801B4DF8","UNK_TYPE1","",0x1),
- 0x801B4E2C:("D_801B4E2C","UNK_TYPE1","",0x1),
- 0x801B4E5C:("D_801B4E5C","UNK_TYPE1","",0x1),
- 0x801B4E90:("D_801B4E90","UNK_TYPE1","",0x1),
- 0x801B4EB4:("D_801B4EB4","UNK_TYPE1","",0x1),
- 0x801B4ED8:("D_801B4ED8","UNK_TYPE1","",0x1),
- 0x801B4EDC:("D_801B4EDC","UNK_TYPE1","",0x1),
- 0x801B4EE4:("D_801B4EE4","UNK_TYPE1","",0x1),
+ 0x801B4710:("sSetNormal0ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4738:("sSetNormal0ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B4768:("sSetNormal0ModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B4798:("sSetNormal0ModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B47CC:("sSetNormal0ModeFirstPersonData","UNK_TYPE1","",0x1),
+ 0x801B47F0:("sSetNormal0ModeTalkData","UNK_TYPE1","",0x1),
+ 0x801B4824:("sSetNormal0ModeClimbData","UNK_TYPE1","",0x1),
+ 0x801B4848:("sSetNormal0ModeBowArrowData","UNK_TYPE1","",0x1),
+ 0x801B486C:("sSetNormal0ModeBowArrowZData","UNK_TYPE1","",0x1),
+ 0x801B4890:("sSetNormal0ModeHookshotData","UNK_TYPE1","",0x1),
+ 0x801B48B0:("sSetNormal0ModeBoomerangData","UNK_TYPE1","",0x1),
+ 0x801B48D4:("sSetNormal0ModeSlingshotData","UNK_TYPE1","",0x1),
+ 0x801B48F8:("sSetNormal0ModeClimbZData","UNK_TYPE1","",0x1),
+ 0x801B4710:("sSetNormal0ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4738:("sSetNormal0ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B4768:("sSetNormal0ModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B4798:("sSetNormal0ModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B47CC:("sSetNormal0ModeFirstPersonData","UNK_TYPE1","",0x1),
+ 0x801B47F0:("sSetNormal0ModeTalkData","UNK_TYPE1","",0x1),
+ 0x801B4824:("sSetNormal0ModeClimbData","UNK_TYPE1","",0x1),
+ 0x801B4848:("sSetNormal0ModeBowArrowData","UNK_TYPE1","",0x1),
+ 0x801B486C:("sSetNormal0ModeBowArrowZData","UNK_TYPE1","",0x1),
+ 0x801B4890:("sSetNormal0ModeHookshotData","UNK_TYPE1","",0x1),
+ 0x801B48B0:("sSetNormal0ModeBoomerangData","UNK_TYPE1","",0x1),
+ 0x801B48D4:("sSetNormal0ModeSlingshotData","UNK_TYPE1","",0x1),
+ 0x801B48F8:("sSetNormal0ModeClimbZData","UNK_TYPE1","",0x1),
+ 0x801B491C:("sSetNormal0ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B4944:("sSetNormal0ModeHangData","UNK_TYPE1","",0x1),
+ 0x801B4974:("sSetNormal0ModeHangZData","UNK_TYPE1","",0x1),
+ 0x801B49A4:("sSetNormal0ModeFreeFallData","UNK_TYPE1","",0x1),
+ 0x801B49D4:("sSetNormal0ModeChargeData","UNK_TYPE1","",0x1),
+ 0x801B4A04:("sSetNormal0ModeChargeZData","UNK_TYPE1","",0x1),
+ 0x801B4A34:("sSetNormal0ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B4A5C:("sSetNormal0ModePushPullData","UNK_TYPE1","",0x1),
+ 0x801B4A8C:("sSetNormal0ModeFollowBoomerangData","UNK_TYPE1","",0x1),
+ 0x801B4ABC:("sSetNormal0ModeDekuShootData","UNK_TYPE1","",0x1),
+ 0x801B4AE0:("sSetNormal0ModeGoronDashData","UNK_TYPE1","",0x1),
+ 0x801B4B08:("sSetNormal0ModeDekuHideData","UNK_TYPE1","",0x1),
+ 0x801B4B38:("sSetNormal0ModeDekuFlyData","UNK_TYPE1","",0x1),
+ 0x801B4B60:("sSetNormal0ModeDekuFlyZData","UNK_TYPE1","",0x1),
+ 0x801B4B90:("sSetNormal0ModeGoronJumpData","UNK_TYPE1","",0x1),
+ 0x801B4BB8:("sSetNormal0ModeZoraFinData","UNK_TYPE1","",0x1),
+ 0x801B4BDC:("sSetNormal3ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4C04:("sSetNormal3ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B4C34:("sSetNormal3ModeFreeFallData","UNK_TYPE1","",0x1),
+ 0x801B4C5C:("sSetNormal3ModeGoronJumpData","UNK_TYPE1","",0x1),
+ 0x801B4C84:("sSetNormal3ModeDekuFlyData","UNK_TYPE1","",0x1),
+ 0x801B4CAC:("sSetNormal3ModeDekuHideData","UNK_TYPE1","",0x1),
+ 0x801B4CD4:("sSetNormal3ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B4CFC:("sSetNormal3ModeGoronDashData","UNK_TYPE1","",0x1),
+ 0x801B4D24:("sSetPivotDivingModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4D34:("sSetPivotDivingModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B4D44:("sSetHorseModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4D68:("sSetHorseModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B4D8C:("sSetHorseModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B4DB0:("sSetHorseModeBowArrowData","UNK_TYPE1","",0x1),
+ 0x801B4DD4:("sSetHorseModeSlingShotData","UNK_TYPE1","",0x1),
+ 0x801B4DF8:("sSetHorseModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B4E2C:("sSetHorseModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B4E5C:("sSetHorseModeTalkData","UNK_TYPE1","",0x1),
+ 0x801B4E90:("sSetHorseModeStillData","UNK_TYPE1","",0x1),
+ 0x801B4EB4:("sSetZoraDivingModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4ED8:("sSetPrerendFixedModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4EDC:("sSetPrerendPivotModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4EE4:("sSetDoorCModeNormalData","UNK_TYPE1","",0x1),
0x801B4EF0:("D_801B4EF0","UNK_TYPE1","",0x1),
- 0x801B4EF4:("D_801B4EF4","UNK_TYPE1","",0x1),
+ 0x801B4EF4:("sSetCutscenesModeNormalData","UNK_TYPE1","",0x1),
0x801B4EF8:("D_801B4EF8","UNK_TYPE1","",0x1),
0x801B4F20:("D_801B4F20","UNK_TYPE1","",0x1),
0x801B4F50:("D_801B4F50","UNK_TYPE1","",0x1),
0x801B4F78:("D_801B4F78","UNK_TYPE1","",0x1),
- 0x801B4FA0:("D_801B4FA0","UNK_TYPE1","",0x1),
- 0x801B4FC8:("D_801B4FC8","UNK_TYPE1","",0x1),
+ 0x801B4FA0:("sSetNormal1ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4FC8:("sSetNormal1ModeStillData","UNK_TYPE1","",0x1),
0x801B4FF0:("D_801B4FF0","UNK_TYPE1","",0x1),
0x801B5018:("D_801B5018","UNK_TYPE1","",0x1),
0x801B5034:("D_801B5034","UNK_TYPE1","",0x1),
0x801B5050:("D_801B5050","UNK_TYPE1","",0x1),
0x801B506C:("D_801B506C","UNK_TYPE1","",0x1),
- 0x801B507C:("D_801B507C","UNK_TYPE1","",0x1),
- 0x801B5094:("D_801B5094","UNK_TYPE1","",0x1),
- 0x801B50BC:("D_801B50BC","UNK_TYPE1","",0x1),
- 0x801B50EC:("D_801B50EC","UNK_TYPE1","",0x1),
- 0x801B511C:("D_801B511C","UNK_TYPE1","",0x1),
- 0x801B5150:("D_801B5150","UNK_TYPE1","",0x1),
- 0x801B5180:("D_801B5180","UNK_TYPE1","",0x1),
- 0x801B51A8:("D_801B51A8","UNK_TYPE1","",0x1),
- 0x801B51D8:("D_801B51D8","UNK_TYPE1","",0x1),
- 0x801B51FC:("D_801B51FC","UNK_TYPE1","",0x1),
- 0x801B5220:("D_801B5220","UNK_TYPE1","",0x1),
- 0x801B5250:("D_801B5250","UNK_TYPE1","",0x1),
- 0x801B5280:("D_801B5280","UNK_TYPE1","",0x1),
- 0x801B52B0:("D_801B52B0","UNK_TYPE1","",0x1),
- 0x801B52E0:("D_801B52E0","UNK_TYPE1","",0x1),
- 0x801B5308:("D_801B5308","UNK_TYPE1","",0x1),
+ 0x801B507C:("sSetSpiralDoorModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5094:("sSetDungeon0ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B50BC:("sSetDungeon0ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B50EC:("sSetDungeon0ModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B511C:("sSetDungeon0ModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B5150:("sSetDungeon0ModeFollowBoomerangData","UNK_TYPE1","",0x1),
+ 0x801B5180:("sSetDungeon0ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B51A8:("sSetDungeon0ModeFreeFallData","UNK_TYPE1","",0x1),
+ 0x801B51D8:("sSetDungeon0ModeClimbData","UNK_TYPE1","",0x1),
+ 0x801B51FC:("sSetDungeon0ModeClimbZData","UNK_TYPE1","",0x1),
+ 0x801B5220:("sSetDungeon0ModeChargeData","UNK_TYPE1","",0x1),
+ 0x801B5250:("sSetDungeon0ModeChargeZData","UNK_TYPE1","",0x1),
+ 0x801B5280:("sSetDungeon0ModeHangData","UNK_TYPE1","",0x1),
+ 0x801B52B0:("sSetDungeon0ModeHangZData","UNK_TYPE1","",0x1),
+ 0x801B52E0:("sSetDungeon0ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B5308:("sSetDungeon0ModePushPullData","UNK_TYPE1","",0x1),
0x801B5338:("D_801B5338","UNK_TYPE1","",0x1),
0x801B535C:("D_801B535C","UNK_TYPE1","",0x1),
0x801B5380:("D_801B5380","UNK_TYPE1","",0x1),
@@ -560,71 +573,71 @@
0x801B5650:("D_801B5650","UNK_TYPE1","",0x1),
0x801B5674:("D_801B5674","UNK_TYPE1","",0x1),
0x801B5698:("D_801B5698","UNK_TYPE1","",0x1),
- 0x801B56BC:("D_801B56BC","UNK_TYPE1","",0x1),
- 0x801B56E0:("D_801B56E0","UNK_TYPE1","",0x1),
- 0x801B5704:("D_801B5704","UNK_TYPE1","",0x1),
+ 0x801B56BC:("sSetDeathModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B56E0:("sSetDeathModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B5704:("sSetDeathModeDekuShootData","UNK_TYPE1","",0x1),
0x801B5728:("D_801B5728","UNK_TYPE1","",0x1),
0x801B574C:("D_801B574C","UNK_TYPE1","",0x1),
- 0x801B5770:("D_801B5770","UNK_TYPE1","",0x1),
- 0x801B577C:("D_801B577C","UNK_TYPE1","",0x1),
- 0x801B57A4:("D_801B57A4","UNK_TYPE1","",0x1),
- 0x801B57CC:("D_801B57CC","UNK_TYPE1","",0x1),
- 0x801B57F4:("D_801B57F4","UNK_TYPE1","",0x1),
+ 0x801B5770:("sSetLongChestOpeningModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B577C:("sSetDungeon1ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B57A4:("sSetDungeon1ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B57CC:("sSetDungeon1ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B57F4:("sSetDungeon1ModePushPullData","UNK_TYPE1","",0x1),
0x801B5824:("D_801B5824","UNK_TYPE1","",0x1),
0x801B5834:("D_801B5834","UNK_TYPE1","",0x1),
- 0x801B5844:("D_801B5844","UNK_TYPE1","",0x1),
- 0x801B5864:("D_801B5864","UNK_TYPE1","",0x1),
+ 0x801B5844:("sSetMazeModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5864:("sSetRemoteBombModeNormalData","UNK_TYPE1","",0x1),
0x801B5884:("D_801B5884","UNK_TYPE1","",0x1),
0x801B58A0:("D_801B58A0","UNK_TYPE1","",0x1),
0x801B58BC:("D_801B58BC","UNK_TYPE1","",0x1),
0x801B58D8:("D_801B58D8","UNK_TYPE1","",0x1),
0x801B58F4:("D_801B58F4","UNK_TYPE1","",0x1),
- 0x801B5904:("D_801B5904","UNK_TYPE1","",0x1),
- 0x801B5928:("D_801B5928","UNK_TYPE1","",0x1),
- 0x801B5950:("D_801B5950","UNK_TYPE1","",0x1),
+ 0x801B5904:("sSetTowerClimbModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5928:("sSetTowerClimbModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B5950:("sSetTowerClimbModeStillData","UNK_TYPE1","",0x1),
0x801B5978:("D_801B5978","UNK_TYPE1","",0x1),
0x801B59A8:("D_801B59A8","UNK_TYPE1","",0x1),
0x801B59D0:("D_801B59D0","UNK_TYPE1","",0x1),
0x801B59F4:("D_801B59F4","UNK_TYPE1","",0x1),
0x801B5A00:("D_801B5A00","UNK_TYPE1","",0x1),
- 0x801B5A0C:("D_801B5A0C","UNK_TYPE1","",0x1),
- 0x801B5A30:("D_801B5A30","UNK_TYPE1","",0x1),
+ 0x801B5A0C:("sSetBoatCruiseModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5A30:("sSetVerticalClimbModeClimbData","UNK_TYPE1","",0x1),
0x801B5A64:("D_801B5A64","UNK_TYPE1","",0x1),
- 0x801B5A94:("D_801B5A94","UNK_TYPE1","",0x1),
- 0x801B5ABC:("D_801B5ABC","UNK_TYPE1","",0x1),
- 0x801B5AF0:("D_801B5AF0","UNK_TYPE1","",0x1),
- 0x801B5B18:("D_801B5B18","UNK_TYPE1","",0x1),
- 0x801B5B40:("D_801B5B40","UNK_TYPE1","",0x1),
- 0x801B5B70:("D_801B5B70","UNK_TYPE1","",0x1),
- 0x801B5B98:("D_801B5B98","UNK_TYPE1","",0x1),
- 0x801B5BC8:("D_801B5BC8","UNK_TYPE1","",0x1),
- 0x801B5BFC:("D_801B5BFC","UNK_TYPE1","",0x1),
- 0x801B5C30:("D_801B5C30","UNK_TYPE1","",0x1),
- 0x801B5C58:("D_801B5C58","UNK_TYPE1","",0x1),
+ 0x801B5A94:("sSetDungeon2ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5ABC:("sSetDungeon2ModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B5AF0:("sSetDungeon2ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B5B18:("sSetDungeon2ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B5B40:("sSetDungeon2ModePushPullData","UNK_TYPE1","",0x1),
+ 0x801B5B70:("sSetBossOdolwaModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5B98:("sSetBossOdolwaModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B5BC8:("sSetBossOdolwaModeTalkData","UNK_TYPE1","",0x1),
+ 0x801B5BFC:("sSetBossOdolwaModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B5C30:("sSetBossOdolwaModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B5C58:("sSetBossOdolwaModeStillData","UNK_TYPE1","",0x1),
0x801B5C80:("D_801B5C80","UNK_TYPE1","",0x1),
0x801B5CB0:("D_801B5CB0","UNK_TYPE1","",0x1),
0x801B5CCC:("D_801B5CCC","UNK_TYPE1","",0x1),
- 0x801B5CE8:("D_801B5CE8","UNK_TYPE1","",0x1),
- 0x801B5D10:("D_801B5D10","UNK_TYPE1","",0x1),
- 0x801B5D40:("D_801B5D40","UNK_TYPE1","",0x1),
- 0x801B5D74:("D_801B5D74","UNK_TYPE1","",0x1),
- 0x801B5D9C:("D_801B5D9C","UNK_TYPE1","",0x1),
+ 0x801B5CE8:("sSetMiniBossModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5D10:("sSetMiniBossModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B5D40:("sSetMiniBossModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B5D74:("sSetMiniBossModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B5D9C:("sSetMiniBossModeStillData","UNK_TYPE1","",0x1),
0x801B5DC4:("D_801B5DC4","UNK_TYPE1","",0x1),
- 0x801B5DD4:("D_801B5DD4","UNK_TYPE1","",0x1),
- 0x801B5DFC:("D_801B5DFC","UNK_TYPE1","",0x1),
+ 0x801B5DD4:("sSetTreasureChestMinigameModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5DFC:("sSetTreasureChestMinigameModeTargetData","UNK_TYPE1","",0x1),
0x801B5E2C:("D_801B5E2C","UNK_TYPE1","",0x1),
0x801B5E48:("D_801B5E48","UNK_TYPE1","",0x1),
0x801B5E64:("D_801B5E64","UNK_TYPE1","",0x1),
0x801B5E8C:("D_801B5E8C","UNK_TYPE1","",0x1),
- 0x801B5EB4:("D_801B5EB4","UNK_TYPE1","",0x1),
- 0x801B5EDC:("D_801B5EDC","UNK_TYPE1","",0x1),
- 0x801B5F0C:("D_801B5F0C","UNK_TYPE1","",0x1),
- 0x801B5F34:("D_801B5F34","UNK_TYPE1","",0x1),
- 0x801B5F5C:("D_801B5F5C","UNK_TYPE1","",0x1),
- 0x801B5F8C:("D_801B5F8C","UNK_TYPE1","",0x1),
- 0x801B5FB0:("D_801B5FB0","UNK_TYPE1","",0x1),
- 0x801B5FD4:("D_801B5FD4","UNK_TYPE1","",0x1),
- 0x801B5FF8:("D_801B5FF8","UNK_TYPE1","",0x1),
+ 0x801B5EB4:("sSetDungeon3ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5EDC:("sSetDungeon3ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B5F0C:("sSetDungeon3ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B5F34:("sSetDungeon3ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B5F5C:("sSetDungeon3ModePushPullData","UNK_TYPE1","",0x1),
+ 0x801B5F8C:("sSetTelescopeModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5FB0:("sSetTelescopeModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B5FD4:("sSetTelescopeModeFirstPersonData","UNK_TYPE1","",0x1),
+ 0x801B5FF8:("sSetTelescopeModeDekuHideData","UNK_TYPE1","",0x1),
0x801B601C:("D_801B601C","UNK_TYPE1","",0x1),
0x801B6044:("D_801B6044","UNK_TYPE1","",0x1),
0x801B6074:("D_801B6074","UNK_TYPE1","",0x1),
@@ -665,59 +678,59 @@
0x801B6674:("D_801B6674","UNK_TYPE1","",0x1),
0x801B6698:("D_801B6698","UNK_TYPE1","",0x1),
0x801B66C0:("D_801B66C0","UNK_TYPE1","",0x1),
- 0x801B66E8:("D_801B66E8","UNK_TYPE1","",0x1),
- 0x801B6710:("D_801B6710","UNK_TYPE1","",0x1),
- 0x801B6740:("D_801B6740","UNK_TYPE1","",0x1),
- 0x801B6774:("D_801B6774","UNK_TYPE1","",0x1),
- 0x801B679C:("D_801B679C","UNK_TYPE1","",0x1),
- 0x801B67C4:("D_801B67C4","UNK_TYPE1","",0x1),
- 0x801B67EC:("D_801B67EC","UNK_TYPE1","",0x1),
- 0x801B681C:("D_801B681C","UNK_TYPE1","",0x1),
- 0x801B684C:("D_801B684C","UNK_TYPE1","",0x1),
- 0x801B6880:("D_801B6880","UNK_TYPE1","",0x1),
- 0x801B68A8:("D_801B68A8","UNK_TYPE1","",0x1),
- 0x801B68D0:("D_801B68D0","UNK_TYPE1","",0x1),
- 0x801B68F8:("D_801B68F8","UNK_TYPE1","",0x1),
- 0x801B692C:("D_801B692C","UNK_TYPE1","",0x1),
- 0x801B6954:("D_801B6954","UNK_TYPE1","",0x1),
- 0x801B697C:("D_801B697C","UNK_TYPE1","",0x1),
- 0x801B69A4:("D_801B69A4","UNK_TYPE1","",0x1),
- 0x801B69CC:("D_801B69CC","UNK_TYPE1","",0x1),
- 0x801B69FC:("D_801B69FC","UNK_TYPE1","",0x1),
- 0x801B6A30:("D_801B6A30","UNK_TYPE1","",0x1),
- 0x801B6A58:("D_801B6A58","UNK_TYPE1","",0x1),
- 0x801B6A80:("D_801B6A80","UNK_TYPE1","",0x1),
- 0x801B6AA8:("D_801B6AA8","UNK_TYPE1","",0x1),
- 0x801B6AD0:("D_801B6AD0","UNK_TYPE1","",0x1),
- 0x801B6AF8:("D_801B6AF8","UNK_TYPE1","",0x1),
- 0x801B6B28:("D_801B6B28","UNK_TYPE1","",0x1),
- 0x801B6B50:("D_801B6B50","UNK_TYPE1","",0x1),
- 0x801B6B78:("D_801B6B78","UNK_TYPE1","",0x1),
- 0x801B6BA0:("D_801B6BA0","UNK_TYPE1","",0x1),
- 0x801B6BC8:("D_801B6BC8","UNK_TYPE1","",0x1),
- 0x801B6BF0:("D_801B6BF0","UNK_TYPE1","",0x1),
- 0x801B6C18:("D_801B6C18","UNK_TYPE1","",0x1),
- 0x801B6C48:("D_801B6C48","UNK_TYPE1","",0x1),
- 0x801B6C70:("D_801B6C70","UNK_TYPE1","",0x1),
+ 0x801B66E8:("sSetBossMajoraModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B6710:("sSetBossMajoraModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B6740:("sSetBossMajoraModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B6774:("sSetBossMajoraModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B679C:("sSetBossMajoraModeStillData","UNK_TYPE1","",0x1),
+ 0x801B67C4:("sSetBossTwinmoldModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B67EC:("sSetBossTwinmoldModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B681C:("sSetBossTwinmoldModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B684C:("sSetBossTwinmoldModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B6880:("sSetBossTwinmoldModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B68A8:("sSetBossTwinmoldModeStillData","UNK_TYPE1","",0x1),
+ 0x801B68D0:("sSetBossGohtModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B68F8:("sSetBossGohtModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B692C:("sSetBossGohtModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B6954:("sSetBossGohtModeStillData","UNK_TYPE1","",0x1),
+ 0x801B697C:("sSetBossGohtModeGoronDashData","UNK_TYPE1","",0x1),
+ 0x801B69A4:("sSetBossGyorgModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B69CC:("sSetBossGyorgModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B69FC:("sSetBossGyorgModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B6A30:("sSetBossGyorgModeGoronJumpData","UNK_TYPE1","",0x1),
+ 0x801B6A58:("sSetBossGyorgModeDekuFlyData","UNK_TYPE1","",0x1),
+ 0x801B6A80:("sSetBossGyorgModeDekuHideData","UNK_TYPE1","",0x1),
+ 0x801B6AA8:("sSetBossGyorgModeStillData","UNK_TYPE1","",0x1),
+ 0x801B6AD0:("sSetPinnacleRockModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B6AF8:("sSetPinnacleRockModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B6B28:("sSetPinnacleRockModeGoronJumpData","UNK_TYPE1","",0x1),
+ 0x801B6B50:("sSetPinnacleRockModeDekuFlyData","UNK_TYPE1","",0x1),
+ 0x801B6B78:("sSetPinnacleRockModeDekuHideData","UNK_TYPE1","",0x1),
+ 0x801B6BA0:("sSetPinnacleRockModeStillData","UNK_TYPE1","",0x1),
+ 0x801B6BC8:("sSetPinnacleRockModeGoronDashData","UNK_TYPE1","",0x1),
+ 0x801B6BF0:("sSetNormal2ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B6C18:("sSetNormal2ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B6C48:("sSetNormal2ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B6C70:("sSetNormal2ModeStillData","UNK_TYPE1","",0x1),
0x801B6C98:("D_801B6C98","UNK_TYPE1","",0x1),
0x801B6CC0:("D_801B6CC0","UNK_TYPE1","",0x1),
0x801B6CF0:("D_801B6CF0","UNK_TYPE1","",0x1),
0x801B6D24:("D_801B6D24","UNK_TYPE1","",0x1),
0x801B6D4C:("D_801B6D4C","UNK_TYPE1","",0x1),
0x801B6D74:("D_801B6D74","UNK_TYPE1","",0x1),
- 0x801B6D90:("D_801B6D90","UNK_TYPE1","",0x1),
- 0x801B6DB8:("D_801B6DB8","UNK_TYPE1","",0x1),
- 0x801B6DE0:("D_801B6DE0","UNK_TYPE1","",0x1),
- 0x801B6E08:("D_801B6E08","UNK_TYPE1","",0x1),
- 0x801B6E30:("D_801B6E30","UNK_TYPE1","",0x1),
- 0x801B6E58:("D_801B6E58","UNK_TYPE1","",0x1),
- 0x801B6E80:("D_801B6E80","UNK_TYPE1","",0x1),
- 0x801B6EA8:("D_801B6EA8","UNK_TYPE1","",0x1),
- 0x801B6ED0:("D_801B6ED0","UNK_TYPE1","",0x1),
- 0x801B6EF8:("D_801B6EF8","UNK_TYPE1","",0x1),
- 0x801B6F20:("D_801B6F20","UNK_TYPE1","",0x1),
- 0x801B6F50:("D_801B6F50","UNK_TYPE1","",0x1),
- 0x801B6F78:("D_801B6F78","UNK_TYPE1","",0x1),
+ 0x801B6D90:("sSetWhirlpoolModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B6DB8:("sSetWhirlpoolModeFreeFallData","UNK_TYPE1","",0x1),
+ 0x801B6DE0:("sSetWhirlpoolModeGoronJumpData","UNK_TYPE1","",0x1),
+ 0x801B6E08:("sSetWhirlpoolModeDekuFlyData","UNK_TYPE1","",0x1),
+ 0x801B6E30:("sSetWhirlpoolModeDekuHideData","UNK_TYPE1","",0x1),
+ 0x801B6E58:("sSetWhirlpoolModeGoronDashData","UNK_TYPE1","",0x1),
+ 0x801B6E80:("sSetCuccoShackModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B6EA8:("sSetCuccoShackModeStillData","UNK_TYPE1","",0x1),
+ 0x801B6ED0:("sSetCuccoShackModeDekuHideData","UNK_TYPE1","",0x1),
+ 0x801B6EF8:("sSetGiantModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B6F20:("sSetGiantModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B6F50:("sSetGiantModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B6F78:("sSetGiantModeStillData","UNK_TYPE1","",0x1),
0x801B6FA0:("D_801B6FA0","UNK_TYPE1","",0x1),
0x801B6FB0:("D_801B6FB0","UNK_TYPE1","",0x1),
0x801B6FD8:("D_801B6FD8","UNK_TYPE1","",0x1),
@@ -734,130 +747,129 @@
0x801B71D4:("D_801B71D4","UNK_TYPE1","",0x1),
0x801B7204:("D_801B7204","UNK_TYPE1","",0x1),
0x801B7210:("D_801B7210","UNK_TYPE1","",0x1),
- 0x801B7244:("D_801B7244","UNK_TYPE1","",0x1),
- 0x801B7278:("D_801B7278","UNK_TYPE1","",0x1),
- 0x801B729C:("D_801B729C","UNK_TYPE1","",0x1),
- 0x801B72C0:("D_801B72C0","UNK_TYPE1","",0x1),
- 0x801B72E4:("D_801B72E4","UNK_TYPE1","",0x1),
- 0x801B7308:("D_801B7308","UNK_TYPE1","",0x1),
- 0x801B732C:("D_801B732C","UNK_TYPE1","",0x1),
- 0x801B7354:("D_801B7354","UNK_TYPE1","",0x1),
- 0x801B7384:("D_801B7384","UNK_TYPE1","",0x1),
- 0x801B73AC:("D_801B73AC","UNK_TYPE1","",0x1),
- 0x801B73D4:("D_801B73D4","UNK_TYPE1","",0x1),
- 0x801B74C4:("D_801B74C4","UNK_TYPE1","",0x1),
- 0x801B759C:("D_801B759C","UNK_TYPE1","",0x1),
- 0x801B75F4:("D_801B75F4","UNK_TYPE1","",0x1),
- 0x801B767C:("D_801B767C","UNK_TYPE1","",0x1),
- 0x801B7684:("D_801B7684","UNK_TYPE1","",0x1),
- 0x801B768C:("D_801B768C","UNK_TYPE1","",0x1),
- 0x801B7694:("D_801B7694","UNK_TYPE1","",0x1),
- 0x801B769C:("D_801B769C","UNK_TYPE1","",0x1),
- 0x801B76A4:("D_801B76A4","UNK_TYPE1","",0x1),
- 0x801B76AC:("D_801B76AC","UNK_TYPE1","",0x1),
- 0x801B777C:("D_801B777C","UNK_TYPE1","",0x1),
- 0x801B784C:("D_801B784C","UNK_TYPE1","",0x1),
- 0x801B791C:("D_801B791C","UNK_TYPE1","",0x1),
- 0x801B7984:("D_801B7984","UNK_TYPE1","",0x1),
- 0x801B79EC:("D_801B79EC","UNK_TYPE1","",0x1),
- 0x801B79F4:("D_801B79F4","UNK_TYPE1","",0x1),
- 0x801B7AE4:("D_801B7AE4","UNK_TYPE1","",0x1),
- 0x801B7B14:("D_801B7B14","UNK_TYPE1","",0x1),
- 0x801B7B44:("D_801B7B44","UNK_TYPE1","",0x1),
- 0x801B7B74:("D_801B7B74","UNK_TYPE1","",0x1),
- 0x801B7BA4:("D_801B7BA4","UNK_TYPE1","",0x1),
- 0x801B7BAC:("D_801B7BAC","UNK_TYPE1","",0x1),
- 0x801B7BDC:("D_801B7BDC","UNK_TYPE1","",0x1),
- 0x801B7C0C:("D_801B7C0C","UNK_TYPE1","",0x1),
- 0x801B7C3C:("D_801B7C3C","UNK_TYPE1","",0x1),
- 0x801B7C44:("D_801B7C44","UNK_TYPE1","",0x1),
- 0x801B7C54:("D_801B7C54","UNK_TYPE1","",0x1),
- 0x801B7C5C:("D_801B7C5C","UNK_TYPE1","",0x1),
- 0x801B7C64:("D_801B7C64","UNK_TYPE1","",0x1),
- 0x801B7D34:("D_801B7D34","UNK_TYPE1","",0x1),
- 0x801B7D3C:("D_801B7D3C","UNK_TYPE1","",0x1),
- 0x801B7D44:("D_801B7D44","UNK_TYPE1","",0x1),
- 0x801B7D4C:("D_801B7D4C","UNK_TYPE1","",0x1),
- 0x801B7D54:("D_801B7D54","UNK_TYPE1","",0x1),
- 0x801B7D5C:("D_801B7D5C","UNK_TYPE1","",0x1),
- 0x801B7D64:("D_801B7D64","UNK_TYPE1","",0x1),
- 0x801B7DCC:("D_801B7DCC","UNK_TYPE1","",0x1),
- 0x801B7DD4:("D_801B7DD4","UNK_TYPE1","",0x1),
- 0x801B7E3C:("D_801B7E3C","UNK_TYPE1","",0x1),
- 0x801B7F0C:("D_801B7F0C","UNK_TYPE1","",0x1),
- 0x801B7F14:("D_801B7F14","UNK_TYPE1","",0x1),
- 0x801B7F1C:("D_801B7F1C","UNK_TYPE1","",0x1),
- 0x801B7F24:("D_801B7F24","UNK_TYPE1","",0x1),
- 0x801B7F2C:("D_801B7F2C","UNK_TYPE1","",0x1),
- 0x801B7F34:("D_801B7F34","UNK_TYPE1","",0x1),
- 0x801B7F3C:("D_801B7F3C","UNK_TYPE1","",0x1),
- 0x801B7FAC:("D_801B7FAC","UNK_TYPE1","",0x1),
- 0x801B807C:("D_801B807C","UNK_TYPE1","",0x1),
- 0x801B8084:("D_801B8084","UNK_TYPE1","",0x1),
- 0x801B8154:("D_801B8154","UNK_TYPE1","",0x1),
- 0x801B8224:("D_801B8224","UNK_TYPE1","",0x1),
- 0x801B82F4:("D_801B82F4","UNK_TYPE1","",0x1),
- 0x801B82FC:("D_801B82FC","UNK_TYPE1","",0x1),
- 0x801B8304:("D_801B8304","UNK_TYPE1","",0x1),
- 0x801B83D4:("D_801B83D4","UNK_TYPE1","",0x1),
- 0x801B83DC:("D_801B83DC","UNK_TYPE1","",0x1),
- 0x801B8434:("D_801B8434","UNK_TYPE1","",0x1),
- 0x801B843C:("D_801B843C","UNK_TYPE1","",0x1),
- 0x801B8444:("D_801B8444","UNK_TYPE1","",0x1),
- 0x801B8514:("D_801B8514","UNK_TYPE1","",0x1),
- 0x801B85E4:("D_801B85E4","UNK_TYPE1","",0x1),
- 0x801B8664:("D_801B8664","UNK_TYPE1","",0x1),
- 0x801B8754:("D_801B8754","UNK_TYPE1","",0x1),
- 0x801B875C:("D_801B875C","UNK_TYPE1","",0x1),
- 0x801B87C4:("D_801B87C4","UNK_TYPE1","",0x1),
- 0x801B8894:("D_801B8894","UNK_TYPE1","",0x1),
- 0x801B8964:("D_801B8964","UNK_TYPE1","",0x1),
- 0x801B8A34:("D_801B8A34","UNK_TYPE1","",0x1),
- 0x801B8B04:("D_801B8B04","UNK_TYPE1","",0x1),
- 0x801B8BD4:("D_801B8BD4","UNK_TYPE1","",0x1),
- 0x801B8CAC:("D_801B8CAC","UNK_TYPE1","",0x1),
- 0x801B8CB4:("D_801B8CB4","UNK_TYPE1","",0x1),
- 0x801B8D8C:("D_801B8D8C","UNK_TYPE1","",0x1),
- 0x801B8E5C:("D_801B8E5C","UNK_TYPE1","",0x1),
- 0x801B8F2C:("D_801B8F2C","UNK_TYPE1","",0x1),
- 0x801B8F34:("D_801B8F34","UNK_TYPE1","",0x1),
- 0x801B900C:("D_801B900C","UNK_TYPE1","",0x1),
- 0x801B90D4:("D_801B90D4","UNK_TYPE1","",0x1),
- 0x801B91A4:("D_801B91A4","UNK_TYPE1","",0x1),
- 0x801B91AC:("D_801B91AC","UNK_TYPE1","",0x1),
- 0x801B927C:("D_801B927C","UNK_TYPE1","",0x1),
- 0x801B9354:("D_801B9354","UNK_TYPE1","",0x1),
- 0x801B9424:("D_801B9424","UNK_TYPE1","",0x1),
- 0x801B94F4:("D_801B94F4","UNK_TYPE1","",0x1),
- 0x801B95C4:("D_801B95C4","UNK_TYPE1","",0x1),
- 0x801B95CC:("D_801B95CC","UNK_TYPE1","",0x1),
- 0x801B969C:("D_801B969C","UNK_TYPE1","",0x1),
- 0x801B976C:("D_801B976C","UNK_TYPE1","",0x1),
- 0x801B979C:("D_801B979C","UNK_TYPE1","",0x1),
- 0x801B986C:("cameraStates","CameraStateParams","[91]",0x444),
- 0x801B9CB0:("D_801B9CB0","UNK_TYPE1","",0x1),
- 0x801B9CE2:("D_801B9CE2","UNK_TYPE1","",0x1),
- 0x801B9CE4:("D_801B9CE4","UNK_PTR","",0x4),
- 0x801B9CE8:("cameraUpdateFuncs","camera_update_func","[71]",0x11c),
- 0x801B9E04:("D_801B9E04","UNK_TYPE2","",0x2),
- 0x801B9E08:("D_801B9E08","UNK_TYPE4","",0x4),
- 0x801B9E0C:("D_801B9E0C","UNK_TYPE4","",0x4),
- 0x801B9E10:("D_801B9E10","UNK_TYPE4","",0x4),
- 0x801B9E14:("D_801B9E14","UNK_TYPE4","",0x4),
+ 0x801B7244:("sSetNormal4ModeTalkData","UNK_TYPE1","",0x1),
+ 0x801B7278:("sSetElegyShellModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B729C:("sSetElegyShellModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B72C0:("sSetElegyShellModeDekuShootData","UNK_TYPE1","",0x1),
+ 0x801B72E4:("sSetElegyShellModeGoronDashData","UNK_TYPE1","",0x1),
+ 0x801B7308:("sSetElegyShellModeDekuFlyData","UNK_TYPE1","",0x1),
+ 0x801B732C:("sSetDungeon4ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B7354:("sSetDungeon4ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B7384:("sSetDungeon4ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B73AC:("sSetDungeon4ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B73D4:("sCamSetNormal0Modes","UNK_TYPE1","",0x1),
+ 0x801B74C4:("sCamSetNormal3Modes","UNK_TYPE1","",0x1),
+ 0x801B759C:("sCamSetPivotDivingModes","UNK_TYPE1","",0x1),
+ 0x801B75F4:("sCamSetHorseModes","UNK_TYPE1","",0x1),
+ 0x801B767C:("sCamSetZoraDivingModes","UNK_TYPE1","",0x1),
+ 0x801B7684:("sCamSetPreRendFixedModes","UNK_TYPE1","",0x1),
+ 0x801B768C:("sCamSetPreRendPivotModes","UNK_TYPE1","",0x1),
+ 0x801B7694:("sCamSetDoorCModes","UNK_TYPE1","",0x1),
+ 0x801B769C:("sCamSetDemo0Modes","UNK_TYPE1","",0x1),
+ 0x801B76A4:("sCamSetFree0Modes","UNK_TYPE1","",0x1),
+ 0x801B76AC:("sCamSetFukan0Modes","UNK_TYPE1","",0x1),
+ 0x801B777C:("sCamSetNormal1Modes","UNK_TYPE1","",0x1),
+ 0x801B784C:("sCamSetNanameModes","UNK_TYPE1","",0x1),
+ 0x801B791C:("sCamSetCirc0Modes","UNK_TYPE1","",0x1),
+ 0x801B7984:("sCamSetFixed0Modes","UNK_TYPE1","",0x1),
+ 0x801B79EC:("sCamSetSpiralDoorModes","UNK_TYPE1","",0x1),
+ 0x801B79F4:("sCamSetDungeon0Modes","UNK_TYPE1","",0x1),
+ 0x801B7AE4:("sCamSetItem0Modes","UNK_TYPE1","",0x1),
+ 0x801B7B14:("sCamSetItem1Modes","UNK_TYPE1","",0x1),
+ 0x801B7B44:("sCamSetItem2Modes","UNK_TYPE1","",0x1),
+ 0x801B7B74:("sCamSetItem3Modes","UNK_TYPE1","",0x1),
+ 0x801B7BA4:("sCamSetNaviModes","UNK_TYPE1","",0x1),
+ 0x801B7BAC:("sCamSetWarp0Modes","UNK_TYPE1","",0x1),
+ 0x801B7BDC:("sCamSetDeathModes","UNK_TYPE1","",0x1),
+ 0x801B7C0C:("sCamSetRebirthModes","UNK_TYPE1","",0x1),
+ 0x801B7C3C:("sCamSetLongChestOpeningModes","UNK_TYPE1","",0x1),
+ 0x801B7C44:("sCamSetMaskTransformationModes","UNK_TYPE1","",0x1),
+ 0x801B7C54:("sCamSetAttentionModes","UNK_TYPE1","",0x1),
+ 0x801B7C5C:("sCamSetWarp1Modes","UNK_TYPE1","",0x1),
+ 0x801B7C64:("sCamSetDungeon1Modes","UNK_TYPE1","",0x1),
+ 0x801B7D34:("sCamSetFixed1Modes","UNK_TYPE1","",0x1),
+ 0x801B7D3C:("sCamSetFixed2Modes","UNK_TYPE1","",0x1),
+ 0x801B7D44:("sCamSetMazeModes","UNK_TYPE1","",0x1),
+ 0x801B7D4C:("sCamSetRemoteBombModes","UNK_TYPE1","",0x1),
+ 0x801B7D54:("sCamSetCirc1Modes","UNK_TYPE1","",0x1),
+ 0x801B7D5C:("sCamSetCirc2Modes","UNK_TYPE1","",0x1),
+ 0x801B7D64:("sCamSetCirc3Modes","UNK_TYPE1","",0x1),
+ 0x801B7DCC:("sCamSetCirc4Modes","UNK_TYPE1","",0x1),
+ 0x801B7DD4:("sCamSetFixed3Modes","UNK_TYPE1","",0x1),
+ 0x801B7E3C:("sCamSetTowerClimbModes","UNK_TYPE1","",0x1),
+ 0x801B7F0C:("sCamSetParallel0Modes","UNK_TYPE1","",0x1),
+ 0x801B7F14:("sCamSetNormDModes","UNK_TYPE1","",0x1),
+ 0x801B7F1C:("sCamSetSubjectDModes","UNK_TYPE1","",0x1),
+ 0x801B7F24:("sCamSetStart0Modes","UNK_TYPE1","",0x1),
+ 0x801B7F2C:("sCamSetStart2Modes","UNK_TYPE1","",0x1),
+ 0x801B7F34:("sCamSetStop0Modes","UNK_TYPE1","",0x1),
+ 0x801B7F3C:("sCamSetBoatCruiseModes","UNK_TYPE1","",0x1),
+ 0x801B7FAC:("sCamSetVerticalClimbModes","UNK_TYPE1","",0x1),
+ 0x801B807C:("sCamSetSidedModes","UNK_TYPE1","",0x1),
+ 0x801B8084:("sCamSetDungeon2Modes","UNK_TYPE1","",0x1),
+ 0x801B8154:("sCamSetBossOdolwaModes","UNK_TYPE1","",0x1),
+ 0x801B8224:("sCamSetKeepBackModes","UNK_TYPE1","",0x1),
+ 0x801B82F4:("sCamSetCirc6Modes","UNK_TYPE1","",0x1),
+ 0x801B82FC:("sCamSetCirc7Modes","UNK_TYPE1","",0x1),
+ 0x801B8304:("sCamSetMiniBossModes","UNK_TYPE1","",0x1),
+ 0x801B83D4:("sCamSetRFixed1Modes","UNK_TYPE1","",0x1),
+ 0x801B83DC:("sCamSetTreasureChestMinigameModes","UNK_TYPE1","",0x1),
+ 0x801B8434:("sCamSetBombBasketModes","UNK_TYPE1","",0x1),
+ 0x801B843C:("sCamSetCirc8Modes","UNK_TYPE1","",0x1),
+ 0x801B8444:("sCamSetFukan1Modes","UNK_TYPE1","",0x1),
+ 0x801B8514:("sCamSetDungeon3Modes","UNK_TYPE1","",0x1),
+ 0x801B85E4:("sCamSetTelescopeModes","UNK_TYPE1","",0x1),
+ 0x801B8664:("sCamSetRoom0Modes","UNK_TYPE1","",0x1),
+ 0x801B8754:("sCamSetRCirc0Modes","UNK_TYPE1","",0x1),
+ 0x801B875C:("sCamSetCirc9Modes","UNK_TYPE1","",0x1),
+ 0x801B87C4:("sCamSetOnThePoleModes","UNK_TYPE1","",0x1),
+ 0x801B8894:("sCamSetInBushModes","UNK_TYPE1","",0x1),
+ 0x801B8964:("sCamSetBossMajoraModes","UNK_TYPE1","",0x1),
+ 0x801B8A34:("sCamSetBossTwinmoldModes","UNK_TYPE1","",0x1),
+ 0x801B8B04:("sCamSetBossGohtModes","UNK_TYPE1","",0x1),
+ 0x801B8BD4:("sCamSetBossGyorgModes","UNK_TYPE1","",0x1),
+ 0x801B8CAC:("sCamSetConnect0Modes","UNK_TYPE1","",0x1),
+ 0x801B8CB4:("sCamSetPinnacleRockModes","UNK_TYPE1","",0x1),
+ 0x801B8D8C:("sCamSetNormal2Modes","UNK_TYPE1","",0x1),
+ 0x801B8E5C:("sCamSetBombBowlModes","UNK_TYPE1","",0x1),
+ 0x801B8F2C:("sCamSetCircAModes","UNK_TYPE1","",0x1),
+ 0x801B8F34:("sCamSetWhirlpoolModes","UNK_TYPE1","",0x1),
+ 0x801B900C:("sCamSetCuccoShackModes","UNK_TYPE1","",0x1),
+ 0x801B90D4:("sCamSetGiantModes","UNK_TYPE1","",0x1),
+ 0x801B91A4:("sCamSetScene0Modes","UNK_TYPE1","",0x1),
+ 0x801B91AC:("sCamSetRoom1Modes","UNK_TYPE1","",0x1),
+ 0x801B927C:("sCamSetWater2Modes","UNK_TYPE1","",0x1),
+ 0x801B9354:("sCamSetWoodfallSwampModes","UNK_TYPE1","",0x1),
+ 0x801B9424:("sCamSetForceKeepModes","UNK_TYPE1","",0x1),
+ 0x801B94F4:("sCamSetParallel1Modes","UNK_TYPE1","",0x1),
+ 0x801B95C4:("sCamSetStart1Modes","UNK_TYPE1","",0x1),
+ 0x801B95CC:("sCamSetRoom2Modes","UNK_TYPE1","",0x1),
+ 0x801B969C:("sCamSetNorm4Modes","UNK_TYPE1","",0x1),
+ 0x801B976C:("sCamSetElegyShellModes","UNK_TYPE1","",0x1),
+ 0x801B979C:("sCamSetDungeon4Modes","UNK_TYPE1","",0x1),
+ 0x801B986C:("sCameraSettings","CameraSetting","[91]",0x444),
+ 0x801B9CB0:("sGlobalCamDataSettings","s16","[26]",0x34),
+ 0x801B9CE4:("sGlobalCamDataSettingsPtr","s16*","",0x4),
+ 0x801B9CE8:("sCameraUpdateHandlers","camera_update_func","[71]",0x11c),
+ 0x801B9E04:("sCameraNextUID","UNK_TYPE2","",0x2),
+ 0x801B9E08:("sCameraInterfaceFlags","UNK_TYPE4","",0x4),
+ 0x801B9E0C:("sCameraHudVisibility","UNK_TYPE4","",0x4),
+ 0x801B9E10:("sCameraLetterboxSize","UNK_TYPE4","",0x4),
+ 0x801B9E14:("sCameraNegOne","UNK_TYPE4","",0x4),
0x801B9E18:("D_801B9E18","UNK_TYPE2","",0x2),
0x801B9E34:("D_801B9E34","UNK_TYPE2","",0x2),
- 0x801B9E50:("D_801B9E50","UNK_TYPE4","",0x4),
- 0x801B9E54:("D_801B9E54","UNK_TYPE4","",0x4),
- 0x801B9E58:("D_801B9E58","UNK_TYPE4","",0x4),
+ 0x801B9E50:("sUpdateCameraDirection","UNK_TYPE4","",0x4),
+ 0x801B9E54:("sIsFalse","UNK_TYPE4","",0x4),
+ 0x801B9E58:("sCameraInitSceneTimer","UNK_TYPE4","",0x4),
0x801B9E5C:("D_801B9E5C","UNK_TYPE4","",0x4),
0x801B9E60:("D_801B9E60","f32","",0x4),
0x801B9E64:("D_801B9E64","UNK_TYPE1","",0x1),
0x801B9E84:("D_801B9E84","UNK_TYPE1","",0x1),
0x801B9EB4:("D_801B9EB4","UNK_TYPE4","",0x4),
0x801B9ED4:("D_801B9ED4","UNK_TYPE4","",0x4),
- 0x801B9F04:("D_801B9F04","UNK_TYPE4","",0x4),
- 0x801B9F0C:("D_801B9F0C","UNK_TYPE2","",0x2),
- 0x801B9F10:("D_801B9F10","UNK_TYPE4","",0x4),
+ 0x801B9F04:("sEarthquakeFreq","UNK_TYPE4","",0x4),
+ 0x801B9F0C:("sEarthquakeTimer","UNK_TYPE2","",0x2),
+ 0x801B9F10:("sModeChangeFlags","UNK_TYPE4","",0x4),
0x801B9F20:("sDamageTablePresets","DamageTable","[23]",0x2e0),
0x801BA200:("damageMultipliers","f32","[16]",0x40),
0x801BA240:("defaultCollider","Collider","",0x18),
@@ -1991,7 +2003,7 @@
0x801CFC98:("D_801CFC98","UNK_TYPE1","",0x1),
0x801CFCA4:("D_801CFCA4","UNK_TYPE2","",0x2),
0x801CFCAC:("D_801CFCAC","UNK_TYPE2","",0x2),
- 0x801CFCB8:("D_801CFCB8","UNK_TYPE1","",0x1),
+ 0x801CFCB8:("gOcarinaSongItemMap","UNK_TYPE1","",0x1),
0x801CFCD8:("D_801CFCD8","UNK_TYPE2","",0x2),
0x801CFCE4:("D_801CFCE4","UNK_TYPE2","",0x2),
0x801CFCF0:("D_801CFCF0","UNK_TYPE2","",0x2),
@@ -2237,7 +2249,7 @@
0x801D5FD4:("D_801D5FD4","UNK_TYPE1","",0x1),
0x801D5FE0:("D_801D5FE0","UNK_PTR","",0x4),
0x801D5FE4:("D_801D5FE4","UNK_TYPE1","",0x1),
- 0x801D5FE8:("gAudioContextInitalized","UNK_TYPE4","",0x4),
+ 0x801D5FE8:("gAudioCtxInitalized","UNK_TYPE4","",0x4),
0x801D5FEC:("D_801D5FEC","UNK_TYPE4","",0x4),
0x801D5FF0:("D_801D5FF0","UNK_TYPE4","",0x4),
0x801D5FF4:("D_801D5FF4","UNK_TYPE4","",0x4),
@@ -3861,26 +3873,14 @@
0x801EDBA8:("D_801EDBA8","Sphere16","",0x8),
0x801EDBB0:("D_801EDBB0","TriNorm","",0x34),
0x801EDBF0:("D_801EDBF0","s16","",0x2),
- 0x801EDBF4:("D_801EDBF4","UNK_TYPE1","",0x1),
- 0x801EDBF8:("D_801EDBF8","UNK_TYPE1","",0x1),
- 0x801EDC00:("D_801EDC00","UNK_TYPE1","",0x1),
- 0x801EDC04:("D_801EDC04","UNK_TYPE1","",0x1),
- 0x801EDC08:("D_801EDC08","UNK_TYPE1","",0x1),
- 0x801EDC0C:("D_801EDC0C","UNK_TYPE1","",0x1),
- 0x801EDC10:("D_801EDC10","UNK_TYPE1","",0x1),
- 0x801EDC14:("D_801EDC14","UNK_TYPE1","",0x1),
- 0x801EDC28:("D_801EDC28","UNK_TYPE1","",0x1),
- 0x801EDC30:("D_801EDC30","UNK_TYPE1","",0x1),
- 0x801EDC8C:("D_801EDC8C","UNK_TYPE1","",0x1),
- 0x801EDC90:("D_801EDC90","UNK_TYPE1","",0x1),
- 0x801EDC92:("D_801EDC92","UNK_TYPE1","",0x1),
- 0x801EDC94:("D_801EDC94","UNK_TYPE1","",0x1),
- 0x801EDC96:("D_801EDC96","UNK_TYPE1","",0x1),
- 0x801EDDD0:("D_801EDDD0","UNK_TYPE1","",0x1),
- 0x801EDDD4:("D_801EDDD4","UNK_TYPE1","",0x1),
- 0x801EDDD8:("D_801EDDD8","UNK_TYPE1","",0x1),
- 0x801EDDE0:("D_801EDDE0","UNK_TYPE1","",0x1),
- 0x801EDDF0:("D_801EDDF0","UNK_TYPE1","",0x1),
+ 0x801EDBF4:("D_801EDBF4","f32","",0x4),
+ 0x801EDBF8:("D_801EDBF8","f32","",0x4),
+ 0x801EDC00:("D_801EDC00","CameraCollision","",0x28),
+ 0x801EDC28:("sCamPlayState","PlayState*","",0x4),
+ 0x801EDC30:("D_801EDC30","SwingAnimation","[4]",0x1A0),
+ 0x801EDDD0:("D_801EDDD0","Vec3f","",0xc),
+ 0x801EDDE0:("D_801EDDE0","Vec3f","",0xc),
+ 0x801EDDF0:("D_801EDDF0","Vec3f","",0xc),
0x801EDE00:("D_801EDE00","Vec3f","",0xc),
0x801EDE10:("D_801EDE10","Vec3f","",0xc),
0x801EDE20:("D_801EDE20","Vec3f","",0xc),
@@ -4353,7 +4353,7 @@
0x80200BCC:("D_80200BCC","UNK_TYPE1","",0x1),
0x80200BCE:("D_80200BCE","UNK_TYPE1","",0x1),
0x80200BD0:("D_80200BD0","UNK_TYPE1","",0x1),
- 0x80200C70:("gAudioContext","AudioContext","",0x81F8),
+ 0x80200C70:("gAudioCtx","AudioContext","",0x81F8),
0x80208E68:("gCustomAudioUpdateFunction","UNK_TYPE4","",0x4),
0x80208E6C:("gCustomAudioSeqFunction","UNK_TYPE4","",0x4),
0x80208E70:("gCustomAudioReverbFunction","UNK_TYPE4","",0x4),
@@ -4660,32 +4660,32 @@
0x80815FF4:("sDayLeftTextures","TexturePtr","[4]",0x10),
0x80816004:("sDayRightTextures","TexturePtr","[4]",0x10),
0x80816014:("sHoursLeftTextures","TexturePtr","[3]",0xC),
- 0x8082AED0:("D_8082AED0","UNK_TYPE1","",0x1),
- 0x8082AED8:("D_8082AED8","UNK_TYPE1","",0x1),
- 0x8082AEE0:("D_8082AEE0","UNK_TYPE2","",0x2),
- 0x8082AEE4:("D_8082AEE4","UNK_TYPE1","",0x1),
- 0x8082AEF0:("D_8082AEF0","UNK_TYPE2","",0x2),
- 0x8082AF04:("D_8082AF04","UNK_TYPE2","",0x2),
- 0x8082AF24:("D_8082AF24","UNK_TYPE1","",0x1),
- 0x8082AF6C:("D_8082AF6C","UNK_TYPE2","",0x2),
- 0x8082AF78:("D_8082AF78","UNK_TYPE2","",0x2),
- 0x8082AF84:("D_8082AF84","UNK_TYPE2","",0x2),
- 0x8082AF90:("D_8082AF90","UNK_TYPE2","",0x2),
- 0x8082AF94:("D_8082AF94","UNK_TYPE2","",0x2),
- 0x8082AF98:("D_8082AF98","UNK_TYPE2","",0x2),
- 0x8082AF9C:("D_8082AF9C","UNK_TYPE2","",0x2),
- 0x8082AFA0:("D_8082AFA0","UNK_TYPE2","",0x2),
- 0x8082AFA4:("D_8082AFA4","UNK_TYPE2","",0x2),
- 0x8082AFA8:("D_8082AFA8","UNK_TYPE2","",0x2),
- 0x8082AFAC:("D_8082AFAC","UNK_TYPE2","",0x2),
- 0x8082AFB0:("D_8082AFB0","UNK_TYPE1","",0x1),
- 0x8082AFC4:("D_8082AFC4","UNK_TYPE2","",0x2),
- 0x8082AFDC:("D_8082AFDC","UNK_TYPE2","",0x2),
- 0x8082AFF4:("D_8082AFF4","s16","[12]",0x18),
- 0x8082B00C:("D_8082B00C","void*","[6]",0x18),
- 0x8082B024:("D_8082B024","UNK_TYPE1","",0x1),
- 0x8082B028:("D_8082B028","UNK_TYPE2","",0x2),
- 0x8082B02C:("D_8082B02C","s16","[98]",0xC4),
+ 0x8082AED0:("sQuestRemainsColorTimerInit","UNK_TYPE1","",0x1),
+ 0x8082AED8:("sQuestHpColorTimerInit","UNK_TYPE1","",0x1),
+ 0x8082AEE0:("sQuestSongPlayedOcarinaButtonsNum","UNK_TYPE2","",0x2),
+ 0x8082AEE4:("sQuestSongPlayedOcarinaButtons","UNK_TYPE1","",0x1),
+ 0x8082AEF0:("sQuestSongPlayedOcarinaButtonsAlpha","UNK_TYPE2","",0x2),
+ 0x8082AF04:("sQuestHpPrimColorTargets","UNK_TYPE2","",0x2),
+ 0x8082AF24:("sQuestRemainsEnvTargets","UNK_TYPE1","",0x1),
+ 0x8082AF6C:("sQuestRemainsEnvRed","UNK_TYPE2","",0x2),
+ 0x8082AF78:("sQuestRemainsEnvGreen","UNK_TYPE2","",0x2),
+ 0x8082AF84:("sQuestRemainsEnvBlue","UNK_TYPE2","",0x2),
+ 0x8082AF90:("sQuestRemainsColorTimer","UNK_TYPE2","",0x2),
+ 0x8082AF94:("sQuestRemainsColorTimerIndex","UNK_TYPE2","",0x2),
+ 0x8082AF98:("sQuestHpPrimRed","UNK_TYPE2","",0x2),
+ 0x8082AF9C:("sQuestHpPrimGreen","UNK_TYPE2","",0x2),
+ 0x8082AFA0:("sQuestHpPrimBlue","UNK_TYPE2","",0x2),
+ 0x8082AFA4:("sQuestHpPrimAlpha","UNK_TYPE2","",0x2),
+ 0x8082AFA8:("sQuestHpColorTimer","UNK_TYPE2","",0x2),
+ 0x8082AFAC:("sQuestHpPrimColorTargetIndex","UNK_TYPE2","",0x2),
+ 0x8082AFB0:("sOcarinaButtonTextures","UNK_TYPE1","",0x1),
+ 0x8082AFC4:("sQuestSongsPrimRed","UNK_TYPE2","",0x2),
+ 0x8082AFDC:("sQuestSongsPrimGreen","UNK_TYPE2","",0x2),
+ 0x8082AFF4:("sQuestSongsPrimBlue","s16","[12]",0x18),
+ 0x8082B00C:("sQuestUpgradeTextures","void*","[6]",0x18),
+ 0x8082B024:("sQuestUpgrades","UNK_TYPE1","",0x1),
+ 0x8082B028:("sQuestSongPlaybackDelayTimer","UNK_TYPE2","",0x2),
+ 0x8082B02C:("sCursorPointLinks","s16","[98]",0xC4),
0x8082B0F0:("sCurSection","UNK_TYPE2","",0x2),
0x8082B0F4:("sCurRow","UNK_TYPE2","",0x2),
0x8082B0F8:("sSectionPositions","s16","[280]",0x230),
@@ -4808,10 +4808,10 @@
0x8082BB38:("D_8082BB38","UNK_PTR","",0x4),
0x8082BB50:("D_8082BB50","UNK_PTR","",0x4),
0x8082BB68:("D_8082BB68","UNK_TYPE2","",0x2),
- 0x8082BB74:("D_8082BB74","UNK_TYPE2","",0x2),
- 0x8082BBC4:("D_8082BBC4","UNK_TYPE2","",0x2),
- 0x8082BC14:("D_8082BC14","UNK_TYPE2","",0x2),
- 0x8082BC64:("D_8082BC64","UNK_TYPE2","",0x2),
+ 0x8082BB74:("sQuestVtxRectLeft","UNK_TYPE2","",0x2),
+ 0x8082BBC4:("sQuestVtxRectTop","UNK_TYPE2","",0x2),
+ 0x8082BC14:("sQuestVtxWidths","UNK_TYPE2","",0x2),
+ 0x8082BC64:("sQuestVtxHeights","UNK_TYPE2","",0x2),
0x8082BCB4:("D_8082BCB4","UNK_TYPE1","",0x1),
0x8082BCCC:("D_8082BCCC","UNK_TYPE1","",0x1),
0x8082BCDC:("D_8082BCDC","UNK_TYPE1","",0x1),
@@ -15311,11 +15311,7 @@
0x80B9A920:("Obj_Y2lift_InitVars","UNK_TYPE1","",0x1),
0x80B9A940:("D_80B9A940","UNK_TYPE1","",0x1),
0x80B9AE50:("Obj_Y2shutter_InitVars","UNK_TYPE1","",0x1),
- 0x80B9AE70:("D_80B9AE70","UNK_TYPE1","",0x1),
- 0x80B9AE8C:("D_80B9AE8C","UNK_TYPE1","",0x1),
- 0x80B9AE8D:("D_80B9AE8D","UNK_TYPE1","",0x1),
- 0x80B9AE8E:("D_80B9AE8E","UNK_TYPE1","",0x1),
- 0x80B9AEAE:("D_80B9AEAE","UNK_TYPE1","",0x1),
+ 0x80B9AE70:("D_80B9AE70","UNK_TYPE1","",0x40),
0x80B9AEB0:("D_80B9AEB0","UNK_TYPE1","",0x1),
0x80B9B660:("Obj_Boat_InitVars","UNK_TYPE1","",0x1),
0x80B9B680:("D_80B9B680","UNK_TYPE1","",0x1),
diff --git a/tools/namefixer.py b/tools/namefixer.py
index 4f596ecef..1aed5ead3 100755
--- a/tools/namefixer.py
+++ b/tools/namefixer.py
@@ -748,6 +748,7 @@ wordReplace = {
"play->actorCtx.unk4": "play->actorCtx.lensMaskSize",
"play->nextEntranceIndex": "play->nextEntrance",
"play->sceneNum": "play->sceneId",
+ "play->pauseCtx.unk_1F0": "play->pauseCtx.bombersNotebookOpen",
"gSaveContext.unk_3DC8": "gSaveContext.timerOsTime",
"gSaveContext.unk_3DD0": "gSaveContext.timerStates",
diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv
index d18b02616..f1d994d11 100644
--- a/tools/sizes/code_functions.csv
+++ b/tools/sizes/code_functions.csv
@@ -696,77 +696,77 @@ asm/non_matchings/code/z_camera/func_800CE930.s,func_800CE930,0x800CE930,0x6A
asm/non_matchings/code/z_camera/func_800CEAD8.s,func_800CEAD8,0x800CEAD8,0x58
asm/non_matchings/code/z_camera/func_800CEC38.s,func_800CEC38,0x800CEC38,0x56
asm/non_matchings/code/z_camera/func_800CED90.s,func_800CED90,0x800CED90,0x185
-asm/non_matchings/code/z_camera/Camera_ModeNop.s,Camera_ModeNop,0x800CF3A4,0x4
-asm/non_matchings/code/z_camera/Camera_ModeNORM1.s,Camera_ModeNORM1,0x800CF3B4,0x530
-asm/non_matchings/code/z_camera/Camera_ModeNORM2.s,Camera_ModeNORM2,0x800D0874,0x8
-asm/non_matchings/code/z_camera/Camera_ModeNORM3.s,Camera_ModeNORM3,0x800D0894,0x265
-asm/non_matchings/code/z_camera/Camera_ModeNORM4.s,Camera_ModeNORM4,0x800D1228,0x24
-asm/non_matchings/code/z_camera/Camera_ModeNORM0.s,Camera_ModeNORM0,0x800D12B8,0x1F0
-asm/non_matchings/code/z_camera/Camera_ModePARA1.s,Camera_ModePARA1,0x800D1A78,0x40C
-asm/non_matchings/code/z_camera/Camera_ModePARA2.s,Camera_ModePARA2,0x800D2AA8,0x8
-asm/non_matchings/code/z_camera/Camera_ModePARA3.s,Camera_ModePARA3,0x800D2AC8,0x8
-asm/non_matchings/code/z_camera/Camera_ModePARA4.s,Camera_ModePARA4,0x800D2AE8,0x8
-asm/non_matchings/code/z_camera/Camera_ModePARA0.s,Camera_ModePARA0,0x800D2B08,0x8
-asm/non_matchings/code/z_camera/Camera_ModeJUMP1.s,Camera_ModeJUMP1,0x800D2B28,0x8
-asm/non_matchings/code/z_camera/Camera_ModeJUMP2.s,Camera_ModeJUMP2,0x800D2B48,0x276
-asm/non_matchings/code/z_camera/Camera_ModeJUMP3.s,Camera_ModeJUMP3,0x800D3520,0x330
-asm/non_matchings/code/z_camera/Camera_ModeJUMP4.s,Camera_ModeJUMP4,0x800D41E0,0x8
-asm/non_matchings/code/z_camera/Camera_ModeJUMP0.s,Camera_ModeJUMP0,0x800D4200,0x8
-asm/non_matchings/code/z_camera/Camera_ModeBATT1.s,Camera_ModeBATT1,0x800D4220,0x4E2
-asm/non_matchings/code/z_camera/Camera_ModeBATT2.s,Camera_ModeBATT2,0x800D55A8,0x8
-asm/non_matchings/code/z_camera/Camera_ModeBATT3.s,Camera_ModeBATT3,0x800D55C8,0x8
-asm/non_matchings/code/z_camera/Camera_ModeBATT4.s,Camera_ModeBATT4,0x800D55E8,0x8
-asm/non_matchings/code/z_camera/Camera_ModeBATT0.s,Camera_ModeBATT0,0x800D5608,0x8
-asm/non_matchings/code/z_camera/Camera_ModeKEEP1.s,Camera_ModeKEEP1,0x800D5628,0x46D
-asm/non_matchings/code/z_camera/Camera_ModeKEEP2.s,Camera_ModeKEEP2,0x800D67DC,0x8
-asm/non_matchings/code/z_camera/Camera_ModeKEEP3.s,Camera_ModeKEEP3,0x800D67FC,0x2F3
-asm/non_matchings/code/z_camera/Camera_ModeKEEP4.s,Camera_ModeKEEP4,0x800D73C8,0x2F7
-asm/non_matchings/code/z_camera/Camera_ModeKEEP0.s,Camera_ModeKEEP0,0x800D7FA4,0x8
-asm/non_matchings/code/z_camera/Camera_ModeFIXD1.s,Camera_ModeFIXD1,0x800D7FC4,0x101
-asm/non_matchings/code/z_camera/Camera_ModeFIXD2.s,Camera_ModeFIXD2,0x800D83C8,0x290
-asm/non_matchings/code/z_camera/Camera_ModeFIXD3.s,Camera_ModeFIXD3,0x800D8E08,0x8
-asm/non_matchings/code/z_camera/Camera_ModeFIXD4.s,Camera_ModeFIXD4,0x800D8E28,0x8
-asm/non_matchings/code/z_camera/Camera_ModeFIXD0.s,Camera_ModeFIXD0,0x800D8E48,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSUBJ1.s,Camera_ModeSUBJ1,0x800D8E68,0x185
-asm/non_matchings/code/z_camera/Camera_ModeSUBJ2.s,Camera_ModeSUBJ2,0x800D947C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSUBJ3.s,Camera_ModeSUBJ3,0x800D949C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSUBJ4.s,Camera_ModeSUBJ4,0x800D94BC,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSUBJ0.s,Camera_ModeSUBJ0,0x800D94DC,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDATA0.s,Camera_ModeDATA0,0x800D94FC,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDATA1.s,Camera_ModeDATA1,0x800D951C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDATA2.s,Camera_ModeDATA2,0x800D953C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDATA3.s,Camera_ModeDATA3,0x800D955C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDATA4.s,Camera_ModeDATA4,0x800D957C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ1.s,Camera_ModeUNIQ1,0x800D959C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ2.s,Camera_ModeUNIQ2,0x800D95BC,0x105
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ3.s,Camera_ModeUNIQ3,0x800D99D0,0x17
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ4.s,Camera_ModeUNIQ4,0x800D9A2C,0x17
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ5.s,Camera_ModeUNIQ5,0x800D9A88,0x17
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ0.s,Camera_ModeUNIQ0,0x800D9AE4,0x235
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ6.s,Camera_ModeUNIQ6,0x800DA3B8,0x4D
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ7.s,Camera_ModeUNIQ7,0x800DA4EC,0x8
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ8.s,Camera_ModeUNIQ8,0x800DA50C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ9.s,Camera_ModeUNIQ9,0x800DA52C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDEMO1.s,Camera_ModeDEMO1,0x800DA54C,0x1F1
-asm/non_matchings/code/z_camera/Camera_ModeDEMO2.s,Camera_ModeDEMO2,0x800DAD10,0x2BD
-asm/non_matchings/code/z_camera/Camera_ModeDEMO3.s,Camera_ModeDEMO3,0x800DB804,0xC4
-asm/non_matchings/code/z_camera/Camera_ModeDEMO4.s,Camera_ModeDEMO4,0x800DBB14,0x1D7
-asm/non_matchings/code/z_camera/Camera_ModeDEMO5.s,Camera_ModeDEMO5,0x800DC270,0x12A
-asm/non_matchings/code/z_camera/Camera_ModeDEMO6.s,Camera_ModeDEMO6,0x800DC718,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDEMO7.s,Camera_ModeDEMO7,0x800DC738,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDEMO8.s,Camera_ModeDEMO8,0x800DC758,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDEMO9.s,Camera_ModeDEMO9,0x800DC778,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDEMO0.s,Camera_ModeDEMO0,0x800DC798,0x13E
-asm/non_matchings/code/z_camera/Camera_ModeSPEC0.s,Camera_ModeSPEC0,0x800DCC90,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC1.s,Camera_ModeSPEC1,0x800DCCB0,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC2.s,Camera_ModeSPEC2,0x800DCCD0,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC3.s,Camera_ModeSPEC3,0x800DCCF0,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC4.s,Camera_ModeSPEC4,0x800DCD10,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC5.s,Camera_ModeSPEC5,0x800DCD30,0xF3
-asm/non_matchings/code/z_camera/Camera_ModeSPEC6.s,Camera_ModeSPEC6,0x800DD0FC,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC7.s,Camera_ModeSPEC7,0x800DD11C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC8.s,Camera_ModeSPEC8,0x800DD13C,0x11F
-asm/non_matchings/code/z_camera/Camera_ModeSPEC9.s,Camera_ModeSPEC9,0x800DD5B8,0x1E8
+asm/non_matchings/code/z_camera/Camera_Noop.s,Camera_Noop,0x800CF3A4,0x4
+asm/non_matchings/code/z_camera/Camera_Normal1.s,Camera_Normal1,0x800CF3B4,0x530
+asm/non_matchings/code/z_camera/Camera_Normal2.s,Camera_Normal2,0x800D0874,0x8
+asm/non_matchings/code/z_camera/Camera_Normal3.s,Camera_Normal3,0x800D0894,0x265
+asm/non_matchings/code/z_camera/Camera_Normal4.s,Camera_Normal4,0x800D1228,0x24
+asm/non_matchings/code/z_camera/Camera_Normal0.s,Camera_Normal0,0x800D12B8,0x1F0
+asm/non_matchings/code/z_camera/Camera_Parallel1.s,Camera_Parallel1,0x800D1A78,0x40C
+asm/non_matchings/code/z_camera/Camera_Parallel2.s,Camera_Parallel2,0x800D2AA8,0x8
+asm/non_matchings/code/z_camera/Camera_Parallel3.s,Camera_Parallel3,0x800D2AC8,0x8
+asm/non_matchings/code/z_camera/Camera_Parallel4.s,Camera_Parallel4,0x800D2AE8,0x8
+asm/non_matchings/code/z_camera/Camera_Parallel0.s,Camera_Parallel0,0x800D2B08,0x8
+asm/non_matchings/code/z_camera/Camera_Jump1.s,Camera_Jump1,0x800D2B28,0x8
+asm/non_matchings/code/z_camera/Camera_Jump2.s,Camera_Jump2,0x800D2B48,0x276
+asm/non_matchings/code/z_camera/Camera_Jump3.s,Camera_Jump3,0x800D3520,0x330
+asm/non_matchings/code/z_camera/Camera_Jump4.s,Camera_Jump4,0x800D41E0,0x8
+asm/non_matchings/code/z_camera/Camera_Jump0.s,Camera_Jump0,0x800D4200,0x8
+asm/non_matchings/code/z_camera/Camera_Battle1.s,Camera_Battle1,0x800D4220,0x4E2
+asm/non_matchings/code/z_camera/Camera_Battle2.s,Camera_Battle2,0x800D55A8,0x8
+asm/non_matchings/code/z_camera/Camera_Battle3.s,Camera_Battle3,0x800D55C8,0x8
+asm/non_matchings/code/z_camera/Camera_Battle4.s,Camera_Battle4,0x800D55E8,0x8
+asm/non_matchings/code/z_camera/Camera_Battle0.s,Camera_Battle0,0x800D5608,0x8
+asm/non_matchings/code/z_camera/Camera_KeepOn1.s,Camera_KeepOn1,0x800D5628,0x46D
+asm/non_matchings/code/z_camera/Camera_KeepOn2.s,Camera_KeepOn2,0x800D67DC,0x8
+asm/non_matchings/code/z_camera/Camera_KeepOn3.s,Camera_KeepOn3,0x800D67FC,0x2F3
+asm/non_matchings/code/z_camera/Camera_KeepOn4.s,Camera_KeepOn4,0x800D73C8,0x2F7
+asm/non_matchings/code/z_camera/Camera_KeepOn0.s,Camera_KeepOn0,0x800D7FA4,0x8
+asm/non_matchings/code/z_camera/Camera_Fixed1.s,Camera_Fixed1,0x800D7FC4,0x101
+asm/non_matchings/code/z_camera/Camera_Fixed2.s,Camera_Fixed2,0x800D83C8,0x290
+asm/non_matchings/code/z_camera/Camera_Fixed3.s,Camera_Fixed3,0x800D8E08,0x8
+asm/non_matchings/code/z_camera/Camera_Fixed4.s,Camera_Fixed4,0x800D8E28,0x8
+asm/non_matchings/code/z_camera/Camera_Fixed0.s,Camera_Fixed0,0x800D8E48,0x8
+asm/non_matchings/code/z_camera/Camera_Subject1.s,Camera_Subject1,0x800D8E68,0x185
+asm/non_matchings/code/z_camera/Camera_Subject2.s,Camera_Subject2,0x800D947C,0x8
+asm/non_matchings/code/z_camera/Camera_Subject3.s,Camera_Subject3,0x800D949C,0x8
+asm/non_matchings/code/z_camera/Camera_Subject4.s,Camera_Subject4,0x800D94BC,0x8
+asm/non_matchings/code/z_camera/Camera_Subject0.s,Camera_Subject0,0x800D94DC,0x8
+asm/non_matchings/code/z_camera/Camera_Data0.s,Camera_Data0,0x800D94FC,0x8
+asm/non_matchings/code/z_camera/Camera_Data1.s,Camera_Data1,0x800D951C,0x8
+asm/non_matchings/code/z_camera/Camera_Data2.s,Camera_Data2,0x800D953C,0x8
+asm/non_matchings/code/z_camera/Camera_Data3.s,Camera_Data3,0x800D955C,0x8
+asm/non_matchings/code/z_camera/Camera_Data4.s,Camera_Data4,0x800D957C,0x8
+asm/non_matchings/code/z_camera/Camera_Unique1.s,Camera_Unique1,0x800D959C,0x8
+asm/non_matchings/code/z_camera/Camera_Unique2.s,Camera_Unique2,0x800D95BC,0x105
+asm/non_matchings/code/z_camera/Camera_Unique3.s,Camera_Unique3,0x800D99D0,0x17
+asm/non_matchings/code/z_camera/Camera_Unique4.s,Camera_Unique4,0x800D9A2C,0x17
+asm/non_matchings/code/z_camera/Camera_Unique5.s,Camera_Unique5,0x800D9A88,0x17
+asm/non_matchings/code/z_camera/Camera_Unique0.s,Camera_Unique0,0x800D9AE4,0x235
+asm/non_matchings/code/z_camera/Camera_Unique6.s,Camera_Unique6,0x800DA3B8,0x4D
+asm/non_matchings/code/z_camera/Camera_Unique7.s,Camera_Unique7,0x800DA4EC,0x8
+asm/non_matchings/code/z_camera/Camera_Unique8.s,Camera_Unique8,0x800DA50C,0x8
+asm/non_matchings/code/z_camera/Camera_Unique9.s,Camera_Unique9,0x800DA52C,0x8
+asm/non_matchings/code/z_camera/Camera_Demo1.s,Camera_Demo1,0x800DA54C,0x1F1
+asm/non_matchings/code/z_camera/Camera_Demo2.s,Camera_Demo2,0x800DAD10,0x2BD
+asm/non_matchings/code/z_camera/Camera_Demo3.s,Camera_Demo3,0x800DB804,0xC4
+asm/non_matchings/code/z_camera/Camera_Demo4.s,Camera_Demo4,0x800DBB14,0x1D7
+asm/non_matchings/code/z_camera/Camera_Demo5.s,Camera_Demo5,0x800DC270,0x12A
+asm/non_matchings/code/z_camera/Camera_Demo6.s,Camera_Demo6,0x800DC718,0x8
+asm/non_matchings/code/z_camera/Camera_Demo7.s,Camera_Demo7,0x800DC738,0x8
+asm/non_matchings/code/z_camera/Camera_Demo8.s,Camera_Demo8,0x800DC758,0x8
+asm/non_matchings/code/z_camera/Camera_Demo9.s,Camera_Demo9,0x800DC778,0x8
+asm/non_matchings/code/z_camera/Camera_Demo0.s,Camera_Demo0,0x800DC798,0x13E
+asm/non_matchings/code/z_camera/Camera_Special0.s,Camera_Special0,0x800DCC90,0x8
+asm/non_matchings/code/z_camera/Camera_Special1.s,Camera_Special1,0x800DCCB0,0x8
+asm/non_matchings/code/z_camera/Camera_Special2.s,Camera_Special2,0x800DCCD0,0x8
+asm/non_matchings/code/z_camera/Camera_Special3.s,Camera_Special3,0x800DCCF0,0x8
+asm/non_matchings/code/z_camera/Camera_Special4.s,Camera_Special4,0x800DCD10,0x8
+asm/non_matchings/code/z_camera/Camera_Special5.s,Camera_Special5,0x800DCD30,0xF3
+asm/non_matchings/code/z_camera/Camera_Special6.s,Camera_Special6,0x800DD0FC,0x8
+asm/non_matchings/code/z_camera/Camera_Special7.s,Camera_Special7,0x800DD11C,0x8
+asm/non_matchings/code/z_camera/Camera_Special8.s,Camera_Special8,0x800DD13C,0x11F
+asm/non_matchings/code/z_camera/Camera_Special9.s,Camera_Special9,0x800DD5B8,0x1E8
asm/non_matchings/code/z_camera/Camera_Alloc.s,Camera_Alloc,0x800DDD58,0x14
asm/non_matchings/code/z_camera/Camera_Free.s,Camera_Free,0x800DDDA8,0xA
asm/non_matchings/code/z_camera/Camera_Init.s,Camera_Init,0x800DDDD0,0x84