From 09cf394d988e80a75ca24a23103c8f976a9dc396 Mon Sep 17 00:00:00 2001 From: TrulyNaN <52424023+TrulyNaN@users.noreply.github.com> Date: Sun, 9 Oct 2022 21:34:17 -0400 Subject: [PATCH 1/6] ovl_Bg_Kin2_Picture OK and documented, object_kin2_obj documented (#1070) * test commit * undoing test commit * making sure this is the right repo * removing test file * init for OSH bombable wall started. put back Actor* in function declarations. * BgKin2Bombwall_Init is matching. * started z_bg_kin2_bombwall destroy function. One mismatch right now. * BgKin2Bombwall_Destroy matches. * BgKin2Bombwall_Draw matches. * Fixed BgKin2Bombwall_Init * BgKin2Bombwall_Init and BgKin2Bombwall_Destroy both match. Fixed s32 array in struct. * BgKin2Bombwall_Draw and BgKin2Bombwall_Update match. * Only func_80B6E020 and func_80B6E090 left to match in ovl_Bg_Kin2_Bombwall. * func_80B6E020 from ovl_Bg_Kin2_Bombwall matches. * Went from 8925 to about 5-6k diff score for func_80B6E090 in ovl_Bg_Kin2_Bombwall * Took func_80B6E090 from about 5300 diff score to about 4300 diff score in ovl_Bg_Kin2_Bombwall. * Diff score for ovl_Bg_Kin2_Bombwall func_80B6E090 went from 4k ish to 3277 * Diff score for ovl_Bg_Kin2_Bombwall func_80B6E090 went from 3277 to 2262. * Diff score for ovl_Bg_Kin2_Bombwall func_80B6E090 went from 2262 to 1589. * only slight progress on ovl_Bg_Kinw_Bombwall's func_80B6E090 * Got to 1473 diff score on ovl_Bg_Kinw_Bombwall's func_80B6E090 * Put in the changes made by EllipticEllipsis and hensldm for ovl_Bg_Kin2_Bombwall's func_8066E090. * renamed some symbols. Fake symbol removal makes nonzero diff, but rom OK's after make. * moving declarations around, ordering. * One.word.away. from importing data in ovl_Bg_Kin2_Bombwall. * ovl_Bg_Kin2_Bombwall data imported. Matching. * Edited spec for reloc of ovl_Bg_Kin2_Bombwall. * Removed extra comments for ovl_Bg_Kin2_Bombwall. * unpushed stuff. dunno. * forgot to save z_bg_kin2_bombwall.c * need to commit before make-ing in master. * Ported z_bg_kin2_bombwall's code. Data next. * Imported data for merging z_bg_kin2_bombwall. Yes, I yelled when it OK'd. * Added comments to remember what does what in z_bg_kin2_bombwall. * Some comments in z_bg_kin2_bombwall.c and function names ideas. * Added comments for function name ideas. Cleaned up temps in z_bg_kin2_bombwall except in func_80B6E090. * Renamed most functions and some variables in z_bg_kin2_bombwall. * Made a name suggestion for func_80B6E020 after testing in game. * Ran format.sh. * Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c 1 and 0 replaced by true and false in func_80B6E020. Co-authored-by: Isghj <42048411+isghj5@users.noreply.github.com> * Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c Bending to the x-- supremacy. Co-authored-by: Isghj <42048411+isghj5@users.noreply.github.com> * PR fixes (not done yet) including more consistent use of THIS, removing arg0 and arg1 variable names, standardizing params for z_bg_kin2_bombwall, turning some if-return to if-else, removing unnecessary casts. * Applied isghj5's and EllipticEllipsis' suggestions except for the object file in z_bg_kin2_bombwall. Object file next. * Screwd up formatting. * Thinking of playing with object_kin2_obj. * Documented most of object_kin2_obj based on bombwall, fence and shelf actors. * Had forgotten an arg1 in z_bg_kin2_bombwall.c * First commit for ovl_Bg_Ikana_Mirror branch. * Started decompiling ovl_Bg_Ikana_Mirror. Setup functions and _Update done matching. * Replaced a float by its fractional representation. I need to learn float magic. * Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c Co-authored-by: EllipticEllipsis * Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h Co-authored-by: EllipticEllipsis * Applied more formatting and naming remarks from PR about the C file. Assets and object stuff next. * Display lists and collision header in z_bg_kin2_bombwall.c renamed after their descriptive names in the object's XML file. Name for Ocean Spider House drawers chests left to change. * Working on BgIkanaMirror_Destroy. Stack and registers left essentially. * Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c Co-authored-by: Derek Hensley * One extra line in an if, collision naming convention applied and renamed Ocean Spider House nightstands to drawers chests. * Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c Co-authored-by: Derek Hensley * Changed drawers chest to chest of drawers in object_kin2_obj and z_bg_kin2_shelf. * Removed some unnecessary comment. * almost done with BgIkanaMirror_Destroy function. * Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c Co-authored-by: EllipticEllipsis * BgIkanaMirror_Destroy OK. * Almost done with BgIkanaMirror_Init. Mostly stack stuff left. * Registers and stack left to fix for BgIkanaMirror_Init. * BgIkanaMirror_Init matching. * Ran permuter to improve BgIkanaMirror_Draw's score. * Actually not mad at permuter for BgIkanaMirror_Draw headstart. * Matched func_80B7F730 in ovl_Bg_Ikana_Mirror. Progress on its _Init done too. * func_80B7FA9C in ovl_Bg_Ikana_Mirror is matching. _Init left then documentation. * Mistake in last commit message: actually, _Draw is left for ovl_Bg_Ikana_Mirror. * Going to do some groceries, so pushing. About 2/3 across func_80B7FBA4 in ovl_Bg_Ikana_Mirror. * func_80B7FBA4 in ovl_Bg_Ikana_Mirror is matching. _Draw then data left. * Need to switch branch. * Fixed BgKin2Bombwall_SpawnEffects after the Rand_Next() type update. * Switching branch. * Learning to decomp draw functions with BgIkanaMirror_Draw. YEP * Switching branch. * Went through the first wave of graphics macros attempts for BgIkanaMirror_Draw. * Removed some temps in BgIkanaMirror_Draw. * Second pass of macro attempts for BgIkanaMirror_Draw. * Diff score for BgIkanaMirror_Draw at 1873. Getting there. * BgIkanaMirror_Draw diff score down to 854. 4 instructions off and registers to fix. * Instructions are matching for BgIkanaMirror_Draw. Registers left. * BgIkanaMirror_Draw matches. Data next. Adding some co-authors * BgIkanaMirror_Draw matches. Data next. Adding some co-authors Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> Co-authored-by: Tom-Overton Co-authored-by: Isghj5 Co-authored-by: mzxrules Co-authored-by: Derek-Hensley * Data imported and OK. Co-authored-by: Maide Co-authored-by: mzxrules Co-authored-by: Derek-Hensley * Removed commented lines of unused code and useless externs. Documenting C file and object next. * Renamed fields in actor and variables in 3 functions for ovl_bg_ikana_mirror. Some conventions applied. * Renamed more variables in the struct and C file for ovl_bg_ikana_mirror. * More cleanups and naming in ovl_Bg_Ikana_Mirror. * Renamed some functions in ovl_Bg_Ikana_Mirror. More cleanups. Object documentation next once function names confirmed. * Renamed collision header, animated textures and display lists for ovl_Bg_Ikana_Mirror in ovl_Bg_Ikana_Mirror and object_ikana_obj. Some textures left to rename. * Renamed textures only used by ovl_Bg_Ikana_Mirror. Must go back through docs for conventions and styles plus an extra cleanup before PR. * Went through merging and review docs for extra cleanups. Adding co-authors for documentation. Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> Co-authored-by: Derek-Hensley * Creating branch to merge ovl_Bg_Ikana_Mirror. * Fixed the merge from zeldaret/mm. ovl_Bg_Ikana_Mirror OK and documented. PR-ready. * Started ovl_Bg_Kin2_Picture. _Draw, _Destroy and _Update matching. Started _Init. * Switching branch. * Applied first batch of fixes from PR comments. Adding co-authors for documentation and a function rewrite. Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> Co-authored-by: Derek-Hensley Co-authored-by: Kelebek1 * Renamed the colliders in ovl_Bg_Ikana_Mirror's struct and fixed naming in object file plus spacing cleanups. * About 8 extra functions matching for ovl_Bg_Kin2_Picture. _Init and 3 other functions to match. * Only two functions left to match in ovl_Bg_Kin2_Picture. * func_80B6F098 in ovl_Bg_Kin2_Picture is matching. Adding co-authors. Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> Co-authored-by: Derek-Hensley * ovl_Bg_Kin2_Picture OK. Documentation for the overlay and the associated object next. * Fixed reloc file in spec for ovl_Bg_Kin2_Picture. * Fixed reloc file in spec for ovl_Bg_Kin2_Picture. * Started ovl_Bg_Kin2_Picture clean up. Named extra assets in object_kin2_obj. Rewrote func_80B6EFEC. Adding documentation co-authors. Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> Co-authored-by: Isghj5 * Removed some temps from functions, renamed some functions and some variables in ovl_Bg_Kin2_Picture. * More cleanups. Starting to make sense of what is happening in ovl_Bg_Kin2_Picture. * Renamed the spawn function for Gold Skulltulas and a timer variable in ovl_Bg_Kin2_Picture. * Renamed fall and shiver functions plus their respective setup functions for ovl_Bg_Kin2_Picture. Renamed some variables in the same actor. * Renamed all functions in ovl_Bg_Kin2_Picture. Need to confirm name for painting timer used for two distinct reasons. * Renamed a struct variable and rewrote some comments for ovl_Bg_Kin2_Picture. * Renamed all struct variables in ovl_Bg_Kin2_Picture except padding. * Renamed static variable, dust spawn function and a variable in the dust spawn function for ovl_Bg_Kin2_Picture. * Finished decompiling object_kin2_obj. Adding extra co-authors. Co-authored-by: Derek-Hensley Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> * Ready to make PR branch. * Fixed merge conflicts. OK. * Fixed object_kin2_obj.xml error. * Applied first batch of fixes from PR review to z_bg_kin2_picture.c and its corresponding header. * Fixed unused TLUT naming in object_kin2_obj.xml and added a description to the object. * Removed extra parentheses in z_bg_kin2_picture.c and renamed a macro. * First batch of fixes suggested by EllipticEllipsis for ovl_Bg_Kin2_Picture. Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> * Second batch of fixes suggested by EllipticEllipsis for ovl_Bg_Kin2_Picture. Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> * Update src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c Co-authored-by: EllipticEllipsis * Rewrote 0xCCC as 0x10000/20. * Renamed angle and offset variables in BgKin2Picture_SpawnDust. Co-authored-by: Isghj <42048411+isghj5@users.noreply.github.com> Co-authored-by: EllipticEllipsis Co-authored-by: Derek Hensley Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> Co-authored-by: Isghj5 Co-authored-by: mzxrules Co-authored-by: Maide --- assets/xml/objects/object_kin2_obj.xml | 38 +- spec | 3 +- .../ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c | 2 +- .../ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c | 333 +++++++++++++++--- .../ovl_Bg_Kin2_Picture/z_bg_kin2_picture.h | 20 +- tools/disasm/functions.txt | 26 +- 6 files changed, 344 insertions(+), 78 deletions(-) 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/spec b/spec index a59e3f0f4..428de2321 100644 --- a/spec +++ b/spec @@ -3945,8 +3945,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 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/tools/disasm/functions.txt b/tools/disasm/functions.txt index 5746355b3..4165363f8 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -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",), From 868029b213128eaa24d0b80f854f71704cfafe8c Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Wed, 12 Oct 2022 23:26:35 -0400 Subject: [PATCH 2/6] Import Camera Data (#1097) * import camera data * cleanup * easier-to-read cam-hud-visibility * PR Suggestions * fix camflag macros * fix bss * camera data summary * small cleanup * cleanup camera data * cam data mode enums --- include/functions.h | 112 +- include/variables.h | 391 +--- include/z64.h | 11 - include/z64bgcheck.h | 4 +- include/z64camera.h | 1270 ++++++++++- include/z64scene.h | 2 +- spec | 2 - src/boot_O2_g3/idle.c | 1 + src/code/z_camera.c | 198 +- src/code/z_camera_data.inc.c | 3810 ++++++++++++++++++++++++++++++++ tools/disasm/functions.txt | 142 +- tools/disasm/variables.txt | 592 ++--- tools/sizes/code_functions.csv | 142 +- 13 files changed, 5631 insertions(+), 1046 deletions(-) create mode 100644 src/code/z_camera_data.inc.c diff --git a/include/functions.h b/include/functions.h index f238824d5..0c5948ed8 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); diff --git a/include/variables.h b/include/variables.h index e865f890e..e223fe65e 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]; diff --git a/include/z64.h b/include/z64.h index b18ab8d86..dc01a5dc7 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; 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/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 428de2321..52dfd5ba8 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" 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/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/tools/disasm/functions.txt b/tools/disasm/functions.txt index 4165363f8..e6ace2b97 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",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f8023eb2c..ae80ee368 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), @@ -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), 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 From f3db0299367c4dd7cf44ab9e12cf6c8b56d598ab Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Wed, 12 Oct 2022 23:39:39 -0400 Subject: [PATCH 3/6] z_kaleido_collect.c (1 non-matching) and Mostly Documented (Pause Menu Quest Page) (#1108) * import quest docs * cleanup * eol * temp change to non-eq * more missed stuff * fix questVtx * PR suggestions * adjust comment * missed two * PR Suggestions --- include/functions.h | 2 +- include/regs.h | 3 + include/variables.h | 4 +- include/z64.h | 8 +- include/z64item.h | 10 +- src/code/audio/code_8019AF00.c | 2 +- src/code/code_8012EC80.c | 12 +- src/code/z_demo.c | 2 +- src/code/z_kaleido_setup.c | 4 +- src/code/z_message.c | 2 +- src/code/z_parameter.c | 6 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 4 +- src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c | 6 +- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 2 +- .../actors/ovl_En_Gakufu/z_en_gakufu.c | 5 +- src/overlays/actors/ovl_En_Giant/z_en_giant.c | 2 +- .../actors/ovl_En_Time_Tag/z_en_time_tag.c | 2 +- .../ovl_kaleido_scope/z_kaleido_collect.c | 1064 +++++++++++++++-- .../ovl_kaleido_scope/z_kaleido_debug.c | 2 +- .../ovl_kaleido_scope/z_kaleido_item.c | 16 +- .../ovl_kaleido_scope/z_kaleido_map.c | 6 +- .../ovl_kaleido_scope/z_kaleido_mask.c | 14 +- .../ovl_kaleido_scope/z_kaleido_scope.h | 26 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 179 ++- tools/disasm/functions.txt | 8 +- tools/disasm/variables.txt | 62 +- tools/namefixer.py | 1 + 27 files changed, 1262 insertions(+), 192 deletions(-) diff --git a/include/functions.h b/include/functions.h index 0c5948ed8..1439401fc 100644 --- a/include/functions.h +++ b/include/functions.h @@ -2929,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 e223fe65e..1719d4c6f 100644 --- a/include/variables.h +++ b/include/variables.h @@ -924,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]; @@ -973,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; diff --git a/include/z64.h b/include/z64.h index dc01a5dc7..da1f88323 100644 --- a/include/z64.h +++ b/include/z64.h @@ -407,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; @@ -452,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; @@ -460,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/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/src/code/audio/code_8019AF00.c b/src/code/audio/code_8019AF00.c index 6d1468d82..9df12e7fe 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)); 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_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_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/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 e6ace2b97..77810cc22 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -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",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index ae80ee368..4a5017ad5 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -2003,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), @@ -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), 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", From 7204b0849838c0fa63b30591f9063a76c54307a7 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Thu, 13 Oct 2022 16:17:27 -0400 Subject: [PATCH 4/6] Rename audio context (#1114) --- include/variables.h | 4 +- include/z64audio.h | 2 +- src/code/audio/audio_effects.c | 2 +- src/code/audio/audio_heap.c | 564 ++++++++++++++--------------- src/code/audio/audio_init_params.c | 2 +- src/code/audio/audio_load.c | 558 ++++++++++++++-------------- src/code/audio/audio_playback.c | 118 +++--- src/code/audio/audio_seqplayer.c | 117 +++--- src/code/audio/audio_synthesis.c | 115 +++--- src/code/audio/code_8019AF00.c | 42 +-- src/code/audio/code_801A5BD0.c | 6 +- tools/disasm/variables.txt | 4 +- 12 files changed, 756 insertions(+), 778 deletions(-) diff --git a/include/variables.h b/include/variables.h index 1719d4c6f..5b40e1161 100644 --- a/include/variables.h +++ b/include/variables.h @@ -1186,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; @@ -3081,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/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/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 9df12e7fe..5fd58a487 100644 --- a/src/code/audio/code_8019AF00.c +++ b/src/code/audio/code_8019AF00.c @@ -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/tools/disasm/variables.txt b/tools/disasm/variables.txt index 4a5017ad5..0fbd78e38 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -2249,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), @@ -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), From 7dfbca5ace6459b7d8fd1cbe8ac011c8b257580b Mon Sep 17 00:00:00 2001 From: Parker Burnett Date: Thu, 13 Oct 2022 14:29:19 -0700 Subject: [PATCH 5/6] Update README.md (#1116) Fixing game link to redirect to the correct place --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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). From b35accc95592479499cd3536988d3b7a632c351f Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Fri, 14 Oct 2022 04:59:13 -0700 Subject: [PATCH 6/6] ObjY2Shutter OK and documented (#1119) * ovl_Obj_Y2shutter decompiled * cleanups * more review fixes * format * document shutter assets and add ShutterType enum * rename xml assets, remove unnecessary parenthesis * move ShutterType enum to header file * forgot enum in comparison * Respond to review * Finish docs * Raise/Lower -> Open/Close Co-authored-by: Chloe Co-authored-by: Chloe <> --- assets/xml/objects/object_kaizoku_obj.xml | 8 +- spec | 3 +- .../ovl_Obj_Y2shutter/z_obj_y2shutter.c | 147 ++++++++++++++++-- .../ovl_Obj_Y2shutter/z_obj_y2shutter.h | 14 +- tools/disasm/functions.txt | 2 +- tools/disasm/variables.txt | 6 +- 6 files changed, 155 insertions(+), 25 deletions(-) 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/spec b/spec index 52dfd5ba8..a960b8f6d 100644 --- a/spec +++ b/spec @@ -4135,8 +4135,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/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/tools/disasm/functions.txt b/tools/disasm/functions.txt index 77810cc22..b77506370 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -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 0fbd78e38..3ac247a29 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -15316,11 +15316,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),