summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorkrimtonz <33664508+krimtonz@users.noreply.github.com>2020-06-01 16:54:47 -0500
committerGitHub <noreply@github.com>2020-06-01 17:54:47 -0400
commit77137f5a04c2514738bdaeff12dcf507a0b0e8e2 (patch)
tree58f95fd43af1af5282995551ecb413380817f868 /src/code
parent08aaba0d2cbee0f26aa88a1be42f485bf5210564 (diff)
Decompile z_camera data, and some camera WIP (#173)
* cleanup * name camera action functions * decompile a few small functions, name a few Camera struct members * decompile camera data, decompile a few camera functions * Split ASM for code_800BB0A0 * removing code_800BB0A0.s * PR Requests, Camera WIP * remove #define NON_MATCHING from db_camera
Diffstat (limited to 'src/code')
-rw-r--r--src/code/code_800BB0A0.c5
-rw-r--r--src/code/z_camera.c3515
-rw-r--r--src/code/z_demo.c2
-rw-r--r--src/code/z_play.c20
-rw-r--r--src/code/z_player_lib.c2
-rw-r--r--src/code/z_room.c11
6 files changed, 2852 insertions, 703 deletions
diff --git a/src/code/code_800BB0A0.c b/src/code/code_800BB0A0.c
new file mode 100644
index 000000000..f5e8a2170
--- /dev/null
+++ b/src/code/code_800BB0A0.c
@@ -0,0 +1,5 @@
+#include <global.h>
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/code_800BB0A0/func_800BB0A0.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/code_800BB0A0/func_800BB2B4.s")
diff --git a/src/code/z_camera.c b/src/code/z_camera.c
index fb5a9bd19..dbcb35a05 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -2,13 +2,1734 @@
#include <global.h>
#include <vt.h>
-/*
-DATA
-*/
+typedef struct {
+ s16 val;
+ s16 param;
+} CameraModeValue;
+
+typedef struct {
+ s16 funcIdx;
+ s16 valueCnt;
+ CameraModeValue* values;
+} CameraMode;
+
+typedef struct {
+ union {
+ u32 unk_00;
+ struct {
+ u32 unk_bit0 : 1;
+ u32 unk_bit1 : 1;
+ u32 validModes : 30;
+ };
+ };
+ CameraMode* cameraModes;
+} CameraSetting;
+
+typedef union {
+ s16 sh[2];
+ s32 w;
+} u_D_8011D3A0;
+
+typedef enum {
+ CAM_SET_NONE,
+ CAM_SET_NORMAL0,
+ CAM_SET_NORMAL1,
+ CAM_SET_DUNGEON0,
+ CAM_SET_DUNGEON1,
+ CAM_SET_NORMAL3,
+ CAM_SET_HORSE0,
+ CAM_SET_BOSS_GOMA,
+ CAM_SET_BOSS_DODO,
+ CAM_SET_BOSS_BARI,
+ CAM_SET_BOSS_FGANON,
+ CAM_SET_BOSS_BAL,
+ CAM_SET_BOSS_SHADES,
+ CAM_SET_BOSS_MOFA,
+ CAM_SET_TWIN0,
+ CAM_SET_TWIN1,
+ CAM_SET_BOSS_GANON1,
+ CAM_SET_BOSS_GANON2,
+ CAM_SET_TOWER0,
+ CAM_SET_TOWER1,
+ CAM_SET_FIXED0,
+ CAM_SET_FIXED1,
+ CAM_SET_CIRCLE0,
+ CAM_SET_CIRCLE2,
+ CAM_SET_CIRCLE3,
+ CAM_SET_PREREND0,
+ CAM_SET_PREREND1,
+ CAM_SET_PREREND3,
+ CAM_SET_DOOR0,
+ CAM_SET_DOORC,
+ CAM_SET_RAIL3,
+ CAM_SET_START0,
+ CAM_SET_START1,
+ CAM_SET_FREE0,
+ CAM_SET_FREE2,
+ CAM_SET_CIRCLE4,
+ CAM_SET_CIRCLE5,
+ CAM_SET_DEMO0,
+ CAM_SET_DEMO1,
+ CAM_SET_MORI1,
+ CAM_SET_ITEM0,
+ CAM_SET_ITEM1,
+ CAM_SET_DEMO3,
+ CAM_SET_DEMO4,
+ CAM_SET_UFOBEAN,
+ CAM_SET_LIFTBEAN,
+ CAM_SET_SCENE0,
+ CAM_SET_SCENE1,
+ CAM_SET_HIDAN1,
+ CAM_SET_HIDAN2,
+ CAM_SET_MORI2,
+ CAM_SET_MORI3,
+ CAM_SET_TAKO,
+ CAM_SET_SPOT05A,
+ CAM_SET_SPOT05B,
+ CAM_SET_HIDAN3,
+ CAM_SET_ITEM2,
+ CAM_SET_CIRCLE6,
+ CAM_SET_NORMAL2,
+ CAM_SET_FISHING,
+ CAM_SET_DEMOC,
+ CAM_SET_UO_FIBER,
+ CAM_SET_DUNGEON2,
+ CAM_SET_TEPPEN,
+ CAM_SET_CIRCLE7,
+ CAM_SET_NORMAL4,
+ CAM_SET_MAX
+} CameraSettingType;
+
+typedef enum {
+ CAM_MODE_NORMAL,
+ CAM_MODE_PARALLEL,
+ CAM_MODE_KEEPON,
+ CAM_MODE_TALK,
+ CAM_MODE_BATTLE,
+ CAM_MODE_CLIMB,
+ CAM_MODE_SUBJECT,
+ CAM_MODE_BOWARROW,
+ CAM_MODE_BOWARROWZ,
+ CAM_MODE_FOOKSHOT,
+ CAM_MODE_BOOMERANG,
+ CAM_MODE_PACHINCO,
+ CAM_MODE_CLIMBZ,
+ CAM_MODE_JUMP,
+ CAM_MODE_HANG,
+ CAM_MODE_HANGZ,
+ CAM_MODE_FREEFALL,
+ CAM_MODE_CHARGE,
+ CAM_MODE_STILL,
+ CAM_MODE_PUSHPULL,
+ CAM_MODE_BOOKEEPON
+} CameraModeType;
+
+/*==================================================================*/
+// Data
+s16 sOREGInit[] = {
+ 0, 1, 5, 5, 5, 14500, 20, 16, 150, 25, 150, 6, 10, 10, 0, 0, 1, 100,
+ 250, 120, 80, 30, 120, 4, 1, 50, 20, 1800, 50, 50, 50, 20, 20, -10, -5460, -9100,
+ -6, 8, 15, 75, 60, 12, 110, 40, 50, 250, -10, 30, 30, 70, 20, 20, 20,
+};
+
+s16 sOREGInitCnt = 53;
+
+s16 sPREGInit[] = {
+ -20, 200, 300, 10, 12, 10, 35, 60, 60, 3, 0, -40, 20, 25, 45, -5, 15, 15, 20, 0, 0, 0, 6, 60, 30, 0, 5,
+};
+
+s16 sPREGInitCnt = 27;
+
+char sCameraSettingNames[][12] = {
+ "NONE ", "NORMAL0 ", "NORMAL1 ", "DUNGEON0 ", "DUNGEON1 ", "NORMAL3 ", "HORSE0 ",
+ "BOSS_GOMA ", "BOSS_DODO ", "BOSS_BARI ", "BOSS_FGANON", "BOSS_BAL ", "BOSS_SHADES", "BOSS_MOFA ",
+ "BOSS_TWIN0 ", "BOSS_TWIN1 ", "BOSS_GANON1", "BOSS_GANON2", "TOWER0 ", "TOWER1 ", "FIXED0 ",
+ "FIXED1 ", "CIRCLE0 ", "CIRCLE2 ", "CIRCLE3 ", "PREREND0 ", "PREREND1 ", "PREREND3 ",
+ "DOOR0 ", "DOORC ", "RAIL3 ", "START0 ", "START1 ", "FREE0 ", "FREE2 ",
+ "CIRCLE4 ", "CIRCLE5 ", "DEMO0 ", "DEMO1 ", "MORI1 ", "ITEM0 ", "ITEM1 ",
+ "DEMO3 ", "DEMO4 ", "UFOBEAN ", "LIFTBEAN ", "SCENE0 ", "SCENE1 ", "HIDAN1 ",
+ "HIDAN2 ", "MORI2 ", "MORI3 ", "TAKO ", "SPOT05A ", "SPOT05B ", "HIDAN3 ",
+ "ITEM2 ", "CIRCLE6 ", "NORMAL2 ", "FISHING ", "DEMOC ", "UO_FIBER ", "DUNGEON2 ",
+ "TEPPEN ", "CIRCLE7 ", "NORMAL4 ",
+};
+
+char sCameraModeNames[][12] = {
+ "NORMAL ", "PARALLEL ", "KEEPON ", "TALK ", "BATTLE ", "CLIMB ", "SUBJECT ",
+ "BOWARROW ", "BOWARROWZ ", "FOOKSHOT ", "BOOMERANG ", "PACHINCO ", "CLIMBZ ", "JUMP ",
+ "HANG ", "HANGZ ", "FREEFALL ", "CHARGE ", "STILL ", "PUSHPULL ", "BOOKEEPON ",
+};
+
+CameraModeValue D_8011A3A0[] = {
+ { -20, 0 }, { 200, 1 }, { 300, 2 }, { 10, 3 }, { 12, 4 }, { 10, 5 }, { 35, 6 }, { 60, 7 }, { 60, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011A3C8[] = {
+ { -20, 0 }, { 250, 1 }, { 0, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 45, 7 }, { 50, 8 }, { 8202, 9 }, { -40, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011A3F4[] = {
+ { -20, 0 }, { 120, 1 }, { 140, 2 }, { 25, 13 }, { 45, 14 }, { -5, 15 }, { 15, 16 },
+ { 15, 17 }, { 45, 7 }, { 50, 8 }, { 8193, 9 }, { -50, 11 }, { 30, 12 },
+};
+
+CameraModeValue D_8011A428[] = {
+ { -30, 0 }, { 70, 1 }, { 200, 2 }, { 40, 13 }, { 10, 14 }, { 0, 15 },
+ { 5, 16 }, { 70, 17 }, { 45, 7 }, { 50, 8 }, { 10, 4 }, { 13568, 9 },
+};
+
+CameraModeValue D_8011A458[] = {
+ { -20, 0 }, { 180, 1 }, { 10, 13 }, { 80, 14 }, { 0, 15 }, { 10, 16 },
+ { 25, 17 }, { 50, 7 }, { 80, 8 }, { 8194, 9 }, { -40, 11 }, { 25, 12 },
+};
+
+CameraModeValue D_8011A488[] = {
+ { -20, 0 }, { 200, 1 }, { 300, 2 }, { 20, 18 }, { 5, 4 }, { 5, 5 }, { 60, 7 }, { 40, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011A4AC[] = {
+ { 0, 0 }, { 5, 1 }, { 50, 2 }, { 10, 4 }, { 0, 19 }, { 0, 20 }, { 0, 21 }, { 45, 7 }, { 0, 9 },
+};
+
+CameraModeValue D_8011A4D0[] = {
+ { -7, 0 }, { 14, 1 }, { 50, 2 }, { 10, 4 }, { 0, 19 }, { -30, 20 }, { -5, 21 }, { 45, 7 }, { 8192, 9 },
+};
+
+CameraModeValue D_8011A4F4[] = {
+ { 20, 0 }, { 70, 1 }, { 70, 2 }, { 10, 4 }, { -120, 19 }, { 20, 20 }, { 0, 21 }, { 45, 7 }, { 8192, 9 },
+};
+
+CameraModeValue D_8011A518[] = {
+ { -20, 0 }, { 80, 1 }, { 250, 2 }, { 45, 3 }, { 60, 7 }, { 40, 8 }, { 6, 22 }, { 8192, 9 },
+};
+
+CameraModeValue D_8011A538[] = {
+ { 5, 0 }, { 50, 1 }, { 50, 2 }, { 10, 4 }, { 0, 19 }, { 0, 20 }, { 0, 21 }, { 45, 7 }, { 8192, 9 },
+};
+
+CameraModeValue D_8011A55C[] = {
+ { -7, 0 }, { 14, 1 }, { 50, 2 }, { 10, 4 }, { -9, 19 }, { -63, 20 }, { -30, 21 }, { 45, 7 }, { 8192, 9 },
+};
+
+CameraModeValue D_8011A580[] = {
+ { -20, 0 }, { 200, 1 }, { 300, 2 }, { 20, 18 }, { 999, 4 }, { 5, 5 }, { 60, 7 }, { 40, 8 }, { 8198, 9 },
+};
+
+CameraModeValue D_8011A5A4[] = {
+ { -20, 0 }, { 200, 1 }, { 300, 2 }, { 12, 4 }, { 35, 6 }, { 60, 7 }, { 40, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011A5C4[] = {
+ { -80, 0 }, { 200, 1 }, { 300, 2 }, { 40, 3 }, { 60, 7 }, { 10, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011A5E0[] = {
+ { -120, 0 }, { 300, 1 }, { 300, 2 }, { 70, 3 }, { 45, 7 }, { 10, 8 }, { 8192, 9 },
+};
+
+CameraModeValue D_8011A5FC[] = {
+ { -20, 0 }, { 200, 1 }, { 300, 2 }, { 15, 4 }, { 80, 6 }, { 60, 7 }, { 20, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011A61C[] = {
+ { -20, 0 }, { 300, 1 }, { 50, 3 }, { 2, 4 }, { 80, 7 }, { 20, 8 }, { -4096, 9 },
+};
+
+CameraModeValue D_8011A638[] = {
+ { -20, 0 }, { 200, 1 }, { 300, 2 }, { 10, 3 }, { 100, 4 }, { 10, 5 }, { 100, 6 }, { 60, 7 }, { 5, 8 }, { -4093, 9 },
+};
+
+CameraModeValue D_8011A660[] = {
+ { 0, 0 }, { 250, 1 }, { 25, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 70, 7 }, { 30, 8 }, { 8298, 9 }, { -20, 11 }, { 30, 12 },
+};
+
+CameraModeValue D_8011A68C[] = {
+ { -5, 0 }, { 120, 1 }, { 140, 2 }, { 5, 13 }, { 85, 14 }, { 10, 15 }, { 5, 16 },
+ { 25, 17 }, { 45, 7 }, { 50, 8 }, { 8193, 9 }, { -15, 11 }, { 30, 12 },
+};
+
+CameraModeValue D_8011A6C0[] = {
+ { 0, 0 }, { 200, 1 }, { 400, 2 }, { 10, 3 }, { 12, 4 }, { 20, 5 }, { 40, 6 }, { 60, 7 }, { 60, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011A6E8[] = {
+ { 0, 0 }, { 250, 1 }, { 0, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 45, 7 }, { 50, 8 }, { 8194, 9 }, { -40, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011A714[] = {
+ { -20, 0 }, { 120, 1 }, { 140, 2 }, { 25, 13 }, { 45, 14 }, { -5, 15 }, { 15, 16 },
+ { 15, 17 }, { 45, 7 }, { 50, 8 }, { 8193, 9 }, { -50, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011A748[] = {
+ { -20, 0 }, { 250, 1 }, { 10, 13 }, { 80, 14 }, { 0, 15 }, { 10, 16 },
+ { 25, 17 }, { 50, 7 }, { 65, 8 }, { 8194, 9 }, { -40, 11 }, { 25, 12 },
+};
+
+CameraModeValue D_8011A778[] = {
+ { -20, 0 }, { 80, 1 }, { 250, 2 }, { 6, 22 }, { 45, 3 }, { 60, 7 }, { 40, 8 }, { 8192, 9 },
+};
+
+CameraModeValue D_8011A798[] = {
+ { 0, 0 }, { 250, 1 }, { 400, 2 }, { 15, 4 }, { 50, 6 }, { 60, 7 }, { 30, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011A7B8[] = {
+ { 0, 0 }, { 200, 1 }, { 400, 2 }, { 30, 4 }, { 80, 6 }, { 60, 7 }, { 20, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011A7D8[] = {
+ { -20, 0 }, { 200, 1 }, { 400, 2 }, { 20, 18 }, { 5, 4 }, { 5, 5 }, { 60, 7 }, { 40, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011A7FC[] = {
+ { -20, 0 }, { 250, 1 }, { 400, 2 }, { 20, 18 }, { 999, 4 }, { 5, 5 }, { 60, 7 }, { 40, 8 }, { 8198, 9 },
+};
+
+CameraModeValue D_8011A820[] = {
+ { 0, 0 }, { 300, 1 }, { 50, 3 }, { 2, 4 }, { 80, 7 }, { 20, 8 }, { -4096, 9 },
+};
+
+CameraModeValue D_8011A83C[] = {
+ { -80, 0 }, { 200, 1 }, { 400, 2 }, { 40, 3 }, { 60, 7 }, { 10, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011A858[] = {
+ { -120, 0 }, { 400, 1 }, { 400, 2 }, { 70, 3 }, { 45, 7 }, { 10, 8 }, { 8192, 9 },
+};
+
+CameraModeValue D_8011A874[] = {
+ { 0, 0 }, { 200, 1 }, { 400, 2 }, { 10, 3 }, { 100, 4 }, { 20, 5 }, { 100, 6 }, { 60, 7 }, { 5, 8 }, { -4093, 9 },
+};
+
+CameraModeValue D_8011A89C[] = {
+ { -10, 0 }, { 150, 1 }, { 250, 2 }, { 5, 3 }, { 10, 4 }, { 5, 5 }, { 30, 6 }, { 60, 7 }, { 60, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011A8C4[] = {
+ { -20, 0 }, { 150, 1 }, { 0, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 45, 7 }, { 50, 8 }, { 8202, 9 }, { -40, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011A8F0[] = {
+ { -20, 0 }, { 120, 1 }, { 140, 2 }, { 25, 13 }, { 45, 14 }, { -5, 15 }, { 15, 16 },
+ { 15, 17 }, { 45, 7 }, { 50, 8 }, { 8193, 9 }, { -40, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011A924[] = {
+ { -20, 0 }, { 180, 1 }, { 10, 13 }, { 80, 14 }, { 0, 15 }, { 10, 16 },
+ { 25, 17 }, { 45, 7 }, { 80, 8 }, { 8194, 9 }, { -40, 11 }, { 25, 12 },
+};
+
+CameraModeValue D_8011A954[] = {
+ { -10, 0 }, { 150, 1 }, { 250, 2 }, { 10, 4 }, { 50, 6 }, { 60, 7 }, { 40, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011A974[] = {
+ { -10, 0 }, { 150, 1 }, { 250, 2 }, { 10, 4 }, { 80, 6 }, { 60, 7 }, { 20, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011A994[] = {
+ { -40, 0 }, { 150, 1 }, { 250, 2 }, { 20, 18 }, { 5, 4 }, { 5, 5 }, { 60, 7 }, { 40, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011A9B8[] = {
+ { -40, 0 }, { 250, 1 }, { 250, 2 }, { 20, 18 }, { 999, 4 }, { 5, 5 }, { 60, 7 }, { 40, 8 }, { 8198, 9 },
+};
+
+CameraModeValue D_8011A9DC[] = {
+ { -10, 0 }, { 300, 1 }, { 50, 3 }, { 2, 4 }, { 80, 7 }, { 20, 8 }, { -4096, 9 },
+};
+
+CameraModeValue D_8011A9F8[] = {
+ { -80, 0 }, { 150, 1 }, { 250, 2 }, { 40, 3 }, { 60, 7 }, { 10, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011AA14[] = {
+ { -120, 0 }, { 250, 1 }, { 250, 2 }, { 70, 3 }, { 45, 7 }, { 10, 8 }, { 8192, 9 },
+};
+
+CameraModeValue D_8011AA30[] = {
+ { -10, 0 }, { 150, 1 }, { 250, 2 }, { 5, 3 }, { 100, 4 }, { 5, 5 }, { 100, 6 }, { 60, 7 }, { 5, 8 }, { -4093, 9 },
+};
+
+CameraModeValue D_8011AA58[] = {
+ { -40, 0 }, { 150, 1 }, { 150, 2 }, { 0, 3 }, { 10, 4 }, { 5, 5 }, { 30, 6 }, { 60, 7 }, { 60, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011AA80[] = {
+ { -20, 0 }, { 70, 1 }, { 200, 2 }, { 40, 13 }, { 10, 14 }, { 0, 15 },
+ { 5, 16 }, { 70, 17 }, { 45, 7 }, { 50, 8 }, { 10, 4 }, { 13568, 9 },
+};
+
+CameraModeValue D_8011AAB0[] = {
+ { -40, 0 }, { 150, 1 }, { 150, 2 }, { 10, 4 }, { 50, 6 }, { 60, 7 }, { 40, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011AAD0[] = {
+ { -40, 0 }, { 150, 1 }, { 180, 2 }, { 12, 4 }, { 80, 6 }, { 60, 7 }, { 20, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011AAF0[] = {
+ { -40, 0 }, { 150, 1 }, { 150, 2 }, { 20, 18 }, { 5, 4 }, { 5, 5 }, { 60, 7 }, { 40, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011AB14[] = {
+ { -40, 0 }, { 150, 1 }, { 150, 2 }, { 20, 18 }, { 999, 4 }, { 5, 5 }, { 60, 7 }, { 40, 8 }, { 8198, 9 },
+};
+
+CameraModeValue D_8011AB38[] = {
+ { -40, 0 }, { 200, 1 }, { 50, 3 }, { 2, 4 }, { 80, 7 }, { 20, 8 }, { -4096, 9 },
+};
+
+CameraModeValue D_8011AB54[] = {
+ { -80, 0 }, { 150, 1 }, { 150, 2 }, { 40, 3 }, { 60, 7 }, { 10, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011AB70[] = {
+ { -120, 0 }, { 150, 1 }, { 150, 2 }, { 70, 3 }, { 45, 7 }, { 10, 8 }, { 8192, 9 },
+};
+
+CameraModeValue D_8011AB8C[] = {
+ { -40, 0 }, { 150, 1 }, { 150, 2 }, { 0, 3 }, { 100, 4 }, { 5, 5 }, { 100, 6 }, { 60, 7 }, { 5, 8 }, { -4093, 9 },
+};
+
+CameraModeValue D_8011ABB4[] = {
+ { -40, 0 }, { 180, 1 }, { 25, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 60, 7 }, { 50, 8 }, { 8298, 9 }, { -20, 11 }, { 30, 12 },
+};
+
+CameraModeValue D_8011ABE0[] = {
+ { -20, 0 }, { 280, 1 }, { 300, 2 }, { 20, 3 }, { 15, 4 }, { 5, 5 }, { 40, 6 }, { 60, 7 }, { 100, 8 }, { 4, 9 },
+};
+
+CameraModeValue D_8011AC08[] = {
+ { -50, 0 }, { 250, 1 }, { 70, 3 }, { 0, 10 }, { 15, 4 }, { 5, 5 },
+ { 60, 7 }, { 100, 8 }, { 8202, 9 }, { -50, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011AC34[] = {
+ { -30, 0 }, { 70, 1 }, { 200, 2 }, { 40, 13 }, { 10, 14 }, { 10, 15 },
+ { 20, 16 }, { 70, 17 }, { 45, 7 }, { 10, 8 }, { 10, 4 }, { 13568, 9 },
+};
+
+CameraModeValue D_8011AC64[] = {
+ { -40, 0 }, { 150, 1 }, { 250, 2 }, { -5, 3 }, { 18, 4 }, { 5, 5 }, { 60, 6 }, { 60, 7 }, { 40, 8 }, { 5, 9 },
+};
+
+CameraModeValue D_8011AC8C[] = {
+ { -50, 0 }, { 220, 1 }, { 250, 2 }, { 10, 3 }, { 16, 4 }, { 20, 5 }, { 60, 7 }, { 100, 8 }, { 1536, 9 },
+};
+
+CameraModeValue D_8011ACB0[] = {
+ { -40, 0 }, { 180, 1 }, { 220, 2 }, { -2, 3 }, { 12, 4 }, { 100, 5 }, { 45, 7 }, { 100, 8 }, { 9728, 9 },
+};
+
+CameraModeValue D_8011ACD4[] = {
+ { -7, 0 }, { 14, 1 }, { 100, 2 }, { 10, 4 }, { 0, 19 }, { -30, 20 }, { -5, 21 }, { 40, 7 }, { 9728, 9 },
+};
+
+CameraModeValue D_8011ACF8[] = {
+ { -60, 0 }, { 180, 1 }, { 220, 2 }, { 25, 13 }, { 45, 14 }, { -5, 15 }, { 15, 16 },
+ { 15, 17 }, { 45, 7 }, { 50, 8 }, { 9729, 9 }, { -60, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011AD2C[] = {
+ { -60, 0 }, { 140, 1 }, { 200, 2 }, { 40, 13 }, { 10, 14 }, { 0, 15 },
+ { 5, 16 }, { 70, 17 }, { 45, 7 }, { 50, 8 }, { 10, 4 }, { 13568, 9 },
+};
+
+CameraModeValue D_8011AD5C[] = {
+ { -20, 0 }, { 150, 1 }, { 250, 2 }, { 0, 3 }, { 15, 4 }, { 5, 5 }, { 40, 6 }, { 60, 7 }, { 60, 8 }, { 1, 9 },
+};
+
+CameraModeValue D_8011AD84[] = {
+ { -30, 0 }, { 150, 1 }, { 10, 13 }, { 40, 14 }, { -10, 15 }, { 0, 16 },
+ { 25, 17 }, { 60, 7 }, { 40, 8 }, { 8194, 9 }, { -50, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011ADB4[] = {
+ { 0, 0 }, { 150, 1 }, { 300, 2 }, { 0, 3 }, { 12, 4 }, { 5, 5 }, { 70, 6 }, { 70, 7 }, { 40, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011ADDC[] = {
+ { -20, 0 }, { 160, 1 }, { 10, 13 }, { 60, 14 }, { -5, 15 }, { 0, 16 },
+ { 25, 17 }, { 70, 7 }, { 50, 8 }, { 8194, 9 }, { -40, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011AE0C[] = {
+ { -20, 0 }, { 150, 1 }, { 300, 2 }, { -5, 3 }, { 15, 4 }, { 5, 5 }, { 40, 6 }, { 70, 7 }, { 70, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011AE34[] = {
+ { -30, 0 }, { 125, 1 }, { 10, 13 }, { 10, 14 }, { 0, 15 }, { 0, 16 },
+ { 50, 17 }, { 60, 7 }, { 50, 8 }, { 8194, 9 }, { -50, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011AE64[] = {
+ { 10, 0 }, { 150, 1 }, { 250, 2 }, { 0, 3 }, { 15, 4 }, { 15, 5 }, { 40, 6 }, { 60, 7 }, { 100, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011AE8C[] = {
+ { -20, 0 }, { 200, 1 }, { 45, 13 }, { 40, 14 }, { 5, 15 }, { -5, 16 },
+ { 35, 17 }, { 60, 7 }, { 100, 8 }, { 8194, 9 }, { -40, 11 }, { 60, 12 },
+};
+
+CameraModeValue D_8011AEBC[] = {
+ { -20, 0 }, { 500, 1 }, { 500, 2 }, { 10, 3 }, { 16, 4 }, { 10, 5 }, { 40, 6 }, { 60, 7 }, { 80, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011AEE4[] = {
+ { -20, 0 }, { 200, 1 }, { 20, 13 }, { 60, 14 }, { 0, 15 }, { 10, 16 },
+ { 15, 17 }, { 45, 7 }, { 50, 8 }, { 8194, 9 }, { -40, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011AF14[] = {
+ { -20, 0 }, { 500, 1 }, { 500, 2 }, { 10, 3 }, { 20, 4 }, { 10, 5 }, { 40, 6 }, { 60, 7 }, { 80, 8 }, { 131, 9 },
+};
+
+CameraModeValue D_8011AF3C[] = {
+ { -20, 0 }, { 200, 1 }, { 20, 13 }, { 60, 14 }, { 0, 15 }, { 10, 16 },
+ { 15, 17 }, { 45, 7 }, { 50, 8 }, { 8322, 9 }, { -40, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011AF6C[] = {
+ { -20, 0 }, { 500, 1 }, { 500, 2 }, { 10, 3 }, { 20, 4 }, { 10, 5 }, { 80, 6 }, { 60, 7 }, { 80, 8 }, { 131, 9 },
+};
+
+CameraModeValue D_8011AF94[] = {
+ { -20, 0 }, { 100, 1 }, { 150, 2 }, { -10, 3 }, { 15, 4 }, { 10, 5 }, { 40, 6 }, { 80, 7 }, { 60, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011AFBC[] = {
+ { -20, 0 }, { 200, 1 }, { 10, 13 }, { 80, 14 }, { -10, 15 }, { 10, 16 },
+ { 25, 17 }, { 70, 7 }, { 40, 8 }, { 8194, 9 }, { -40, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011AFEC[] = {
+ { -20, 0 }, { 150, 1 }, { 300, 2 }, { 0, 3 }, { 20, 4 }, { 10, 5 }, { 40, 6 }, { 60, 7 }, { 80, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011B014[] = {
+ { 0, 0 }, { 400, 1 }, { 0, 13 }, { 60, 14 }, { -10, 15 }, { 5, 16 },
+ { 25, 17 }, { 45, 7 }, { 40, 8 }, { 8194, 9 }, { -20, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011B044[] = {
+ { -10, 0 }, { 150, 1 }, { 200, 2 }, { -10, 3 }, { 12, 4 }, { 10, 5 }, { 40, 6 }, { 60, 7 }, { 50, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011B06C[] = {
+ { 40, 0 }, { 330, 1 }, { 330, 2 }, { -5, 3 }, { 15, 4 }, { 15, 5 }, { 40, 6 }, { 60, 7 }, { 100, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011B094[] = {
+ { -40, 0 }, { 250, 1 }, { 0, 3 }, { 2, 4 }, { 80, 7 }, { 20, 8 }, { -4096, 9 },
+};
+
+CameraModeValue D_8011B0B0[] = {
+ { -20, 0 }, { 500, 1 }, { 500, 2 }, { 10, 3 }, { 20, 4 }, { 10, 5 }, { 40, 6 }, { 60, 7 }, { 80, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011B0D8[] = {
+ { -20, 0 }, { 180, 1 }, { 20, 13 }, { 60, 14 }, { 0, 15 }, { 10, 16 },
+ { 25, 17 }, { 45, 7 }, { 50, 8 }, { 8194, 9 }, { -40, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011B108[] = {
+ { 0, 0 }, { 120, 1 }, { 280, 2 }, { 60, 23 }, { 8, 4 }, { 40, 6 }, { 60, 7 }, { 50, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011B12C[] = {
+ { 0, 0 }, { 120, 1 }, { 280, 2 }, { 60, 23 }, { 8, 4 }, { 40, 6 }, { 60, 7 }, { 50, 8 }, { 128, 9 },
+};
+
+CameraModeValue D_8011B150[] = {
+ { 0, 0 }, { 270, 1 }, { 300, 2 }, { 120, 23 }, { 8, 4 }, { 60, 6 }, { 60, 7 }, { 100, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011B174[] = {
+ { 0, 0 }, { 270, 1 }, { 300, 2 }, { 120, 23 }, { 6, 4 }, { 60, 6 }, { 60, 7 }, { 100, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011B198[] = {
+ { -40, 0 },
+ { 100, 4 },
+ { 60, 7 },
+ { 0, 9 },
+};
+
+CameraModeValue D_8011B1A8[] = {
+ { -40, 0 },
+ { 100, 4 },
+ { 60, 7 },
+ { 8192, 9 },
+};
+
+CameraModeValue D_8011B1B8[] = {
+ { -40, 0 },
+ { 100, 4 },
+ { 60, 7 },
+ { 13568, 9 },
+};
+
+CameraModeValue D_8011B1C8[] = {
+ { -40, 0 },
+ { 25, 4 },
+ { 60, 7 },
+ { 0, 9 },
+};
+
+CameraModeValue D_8011B1D8[] = {
+ { -40, 0 }, { 50, 4 }, { 80, 5 }, { 60, 7 }, { 1, 9 },
+};
+
+CameraModeValue D_8011B1EC[] = {
+ { -40, 0 },
+ { 60, 7 },
+ { 16128, 9 },
+};
+
+CameraModeValue D_8011B1F8[] = {
+ { -40, 0 }, { 50, 4 }, { 80, 5 }, { 60, 7 }, { 4, 9 },
+};
+
+CameraModeValue D_8011B20C[] = {
+ { 0, 9 },
+};
+
+CameraModeValue D_8011B210[] = {
+ { 8192, 9 },
+};
+
+CameraModeValue D_8011B214[] = {
+ { 60, 7 },
+ { 0, 9 },
+};
+
+CameraModeValue D_8011B21C[] = {
+ { 60, 7 },
+ { 8192, 9 },
+};
+
+CameraModeValue D_8011B224[] = {
+ { 30, 24 },
+ { 0, 25 },
+ { 4, 4 },
+ { 13568, 9 },
+};
+
+CameraModeValue D_8011B234[] = {
+ { -40, 0 },
+ { 60, 7 },
+ { 12800, 9 },
+};
+
+CameraModeValue D_8011B240[] = {
+ { -5, 0 },
+ { 60, 7 },
+ { 12802, 9 },
+};
+
+CameraModeValue D_8011B24C[] = {
+ { -5, 0 },
+ { 60, 7 },
+ { 12810, 9 },
+};
+
+CameraModeValue D_8011B258[] = {
+ { 0, 0 }, { 2, 1 }, { 30, 2 }, { 10, 4 }, { 45, 7 }, { 12800, 9 },
+};
+
+CameraModeValue D_8011B270[] = {
+ { 1, 9 },
+};
+
+CameraModeValue D_8011B274[] = {
+ { -256, 9 },
+};
+
+CameraModeValue D_8011B278[] = {
+ { -255, 9 },
+};
+
+CameraModeValue D_8011B27C[] = {
+ { -40, 0 }, { 100, 4 }, { 80, 5 }, { 60, 7 }, { 0, 9 },
+};
+
+CameraModeValue D_8011B290[] = {
+ { -40, 0 },
+ { 60, 1 },
+ { 60, 7 },
+ { 2, 9 },
+};
+
+CameraModeValue D_8011B2A0[] = {
+ { -30, 0 },
+ { 45, 1 },
+ { 100, 7 },
+ { 8193, 9 },
+};
+
+CameraModeValue D_8011B2B0[] = {
+ { 12800, 9 },
+};
+
+CameraModeValue D_8011B2B4[] = {
+ { -50, 0 }, { 450, 1 }, { 40, 3 }, { 180, 10 }, { 5, 4 }, { 5, 5 },
+ { 70, 7 }, { 30, 8 }, { 12, 9 }, { -50, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011B2E0[] = {
+ { 13569, 9 },
+};
+
+CameraModeValue D_8011B2E4[] = {
+ { 60, 7 },
+ { 30, 8 },
+ { 12800, 9 },
+};
+
+CameraModeValue D_8011B2F0[] = {
+ { 12818, 9 },
+};
+
+CameraModeValue D_8011B2F4[] = {
+ { -50, 0 }, { 300, 1 }, { 300, 2 }, { 50, 3 }, { 20, 4 }, { 10, 5 }, { 50, 6 }, { 70, 7 }, { 40, 8 }, { 2, 9 },
+};
+
+CameraModeValue D_8011B31C[] = {
+ { -50, 0 }, { 300, 1 }, { 10, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 45, 7 }, { 50, 8 }, { 8202, 9 }, { -40, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011B348[] = {
+ { -50, 0 }, { 300, 1 }, { 300, 2 }, { 12, 4 }, { 35, 6 }, { 60, 7 }, { 40, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011B368[] = {
+ { -80, 0 }, { 300, 1 }, { 300, 2 }, { 60, 3 }, { 70, 7 }, { 30, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011B384[] = {
+ { -120, 0 }, { 300, 1 }, { 300, 2 }, { 70, 3 }, { 50, 7 }, { 30, 8 }, { 8192, 9 },
+};
+
+CameraModeValue D_8011B3A0[] = {
+ { -20, 0 }, { 300, 1 }, { 350, 2 }, { 50, 3 }, { 100, 4 },
+ { 10, 5 }, { 100, 6 }, { 70, 7 }, { 30, 8 }, { -4094, 9 },
+};
+
+CameraModeValue D_8011B3C8[] = {
+ { -50, 0 }, { 200, 1 }, { 200, 2 }, { 20, 3 }, { 16, 4 }, { 10, 5 }, { 50, 6 }, { 60, 7 }, { 50, 8 }, { 2, 9 },
+};
+
+CameraModeValue D_8011B3F0[] = {
+ { -50, 0 }, { 200, 1 }, { 40, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 45, 7 }, { 50, 8 }, { 8202, 9 }, { -40, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011B41C[] = {
+ { -50, 0 }, { 150, 1 }, { 250, 2 }, { 12, 4 }, { 35, 6 }, { 60, 7 }, { 40, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011B43C[] = {
+ { -80, 0 }, { 200, 1 }, { 200, 2 }, { 40, 3 }, { 60, 7 }, { 30, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011B458[] = {
+ { -120, 0 }, { 200, 1 }, { 200, 2 }, { 60, 3 }, { 50, 7 }, { 30, 8 }, { 8192, 9 },
+};
+
+CameraModeValue D_8011B474[] = {
+ { -20, 0 }, { 200, 1 }, { 250, 2 }, { 20, 3 }, { 100, 4 },
+ { 10, 5 }, { 100, 6 }, { 60, 7 }, { 30, 8 }, { -4094, 9 },
+};
+
+CameraModeValue D_8011B49C[] = {
+ { -30, 0 },
+ { 60, 7 },
+ { 266, 9 },
+};
+
+CameraModeValue D_8011B4A8[] = {
+ { -20, 0 },
+ { 150, 1 },
+ { 60, 7 },
+ { 528, 9 },
+};
+
+CameraModeValue D_8011B4B8[] = {
+ { 0, 0 }, { 400, 1 }, { 500, 2 }, { 35, 3 }, { 14, 4 }, { 5, 5 }, { 20, 6 }, { 60, 7 }, { 40, 8 }, { 18, 9 },
+};
+
+CameraModeValue D_8011B4E0[] = {
+ { -20, 0 }, { 250, 1 }, { 5, 13 }, { 10, 14 }, { 30, 15 }, { 20, 16 },
+ { 25, 17 }, { 45, 7 }, { 60, 8 }, { 8194, 9 }, { -40, 11 }, { 25, 12 },
+};
+
+CameraModeValue D_8011B510[] = {
+ { 0, 0 }, { 300, 1 }, { 500, 2 }, { 60, 3 }, { 8, 4 }, { 5, 5 }, { 60, 6 }, { 60, 7 }, { 30, 8 }, { 18, 9 },
+};
+
+CameraModeValue D_8011B538[] = {
+ { -20, 0 }, { 500, 1 }, { 500, 2 }, { 80, 3 }, { 20, 4 }, { 10, 5 }, { 70, 6 }, { 70, 7 }, { 80, 8 }, { 18, 9 },
+};
+
+CameraModeValue D_8011B560[] = {
+ { -20, 0 }, { 500, 1 }, { 80, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 70, 7 }, { 80, 8 }, { 8218, 9 }, { -40, 11 }, { 40, 12 },
+};
+
+CameraModeValue D_8011B58C[] = {
+ { -20, 0 }, { 500, 1 }, { 80, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 60, 7 }, { 80, 8 }, { 8218, 9 }, { -40, 11 }, { 40, 12 },
+};
+
+CameraModeValue D_8011B5B8[] = {
+ { -20, 0 }, { 500, 1 }, { 500, 2 }, { 80, 3 }, { 20, 4 }, { 10, 5 }, { 80, 6 }, { 60, 7 }, { 20, 8 }, { 18, 9 },
+};
+
+CameraModeValue D_8011B5E0[] = {
+ { -20, 0 }, { 750, 1 }, { 750, 2 }, { 80, 3 }, { 20, 4 }, { 10, 5 }, { 70, 6 }, { 70, 7 }, { 80, 8 }, { 18, 9 },
+};
+
+CameraModeValue D_8011B608[] = {
+ { -20, 0 }, { 750, 1 }, { 80, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 70, 7 }, { 80, 8 }, { 8218, 9 }, { -40, 11 }, { 40, 12 },
+};
+
+CameraModeValue D_8011B634[] = {
+ { -20, 0 }, { 750, 1 }, { 80, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 70, 7 }, { 80, 8 }, { 8202, 9 }, { -40, 11 }, { 40, 12 },
+};
+
+CameraModeValue D_8011B660[] = {
+ { -20, 0 }, { 750, 1 }, { 750, 2 }, { 80, 3 }, { 20, 4 }, { 10, 5 }, { 80, 6 }, { 70, 7 }, { 20, 8 }, { 18, 9 },
+};
+
+CameraModeValue D_8011B688[] = {
+ { -20, 0 }, { 500, 1 }, { 500, 2 }, { 80, 3 }, { 20, 4 }, { 10, 5 }, { 70, 6 }, { 70, 7 }, { 80, 8 }, { 2, 9 },
+};
+
+CameraModeValue D_8011B6B0[] = {
+ { -20, 0 }, { 500, 1 }, { 80, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 70, 7 }, { 80, 8 }, { 8202, 9 }, { -40, 11 }, { 40, 12 },
+};
+
+CameraModeValue D_8011B6DC[] = {
+ { -20, 0 }, { 500, 1 }, { 80, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 60, 7 }, { 80, 8 }, { 8202, 9 }, { -40, 11 }, { 40, 12 },
+};
+
+CameraModeValue D_8011B708[] = {
+ { -20, 0 }, { 500, 1 }, { 500, 2 }, { 80, 3 }, { 20, 4 }, { 10, 5 }, { 80, 6 }, { 60, 7 }, { 20, 8 }, { 2, 9 },
+};
+
+CameraModeValue D_8011B730[] = {
+ { -30, 0 }, { 120, 1 }, { -10, 3 }, { 170, 10 }, { 0, 21 }, { 60, 7 }, { 9474, 9 }, { 25, 4 }, { 6, 22 },
+};
+
+CameraModeValue D_8011B754[] = {
+ { 20, 4 },
+ { 12800, 9 },
+};
+
+CameraModeValue D_8011B75C[] = {
+ { -20, 0 }, { 200, 1 }, { 300, 2 }, { 10, 3 }, { 12, 4 }, { 10, 5 }, { 35, 6 }, { 60, 7 }, { 60, 8 }, { 2, 9 },
+};
+
+CameraModeValue D_8011B784[] = {
+ { 0, 0 }, { 200, 1 }, { 300, 2 }, { 20, 3 }, { 12, 4 }, { 10, 5 }, { 35, 6 }, { 55, 7 }, { 60, 8 }, { 3842, 9 },
+};
+
+CameraModeValue D_8011B7AC[] = {
+ { -20, 0 }, { 250, 1 }, { 0, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 45, 7 }, { 50, 8 }, { 12042, 9 }, { -40, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011B7D8[] = {
+ { -20, 0 }, { 250, 1 }, { 0, 13 }, { 80, 14 }, { 0, 15 }, { 0, 16 },
+ { 25, 17 }, { 55, 7 }, { 80, 8 }, { 12034, 9 }, { -40, 11 }, { 25, 12 },
+};
+
+CameraModeValue D_8011B808[] = {
+ { -30, 0 }, { 70, 1 }, { 200, 2 }, { 40, 13 }, { 10, 14 }, { 0, 15 },
+ { 5, 16 }, { 70, 17 }, { 45, 7 }, { 50, 8 }, { 10, 4 }, { 16160, 9 },
+};
+
+CameraModeValue D_8011B838[] = {
+ { 0, 0 }, { 5, 1 }, { 50, 2 }, { 10, 4 }, { 0, 19 }, { 0, 20 }, { 0, 21 }, { 45, 7 }, { 3840, 9 },
+};
+
+CameraModeValue D_8011B85C[] = {
+ { -20, 0 }, { 200, 1 }, { 300, 2 }, { 12, 4 }, { 35, 6 }, { 60, 7 }, { 40, 8 }, { 3840, 9 },
+};
+
+CameraModeValue D_8011B87C[] = {
+ { -20, 0 }, { 200, 1 }, { 300, 2 }, { 15, 4 }, { 80, 6 }, { 60, 7 }, { 20, 8 }, { 3840, 9 },
+};
+
+CameraModeValue D_8011B89C[] = {
+ { -80, 0 }, { 200, 1 }, { 300, 2 }, { 40, 3 }, { 60, 7 }, { 10, 8 }, { 3840, 9 },
+};
+
+CameraModeValue D_8011B8B8[] = {
+ { -120, 0 }, { 300, 1 }, { 300, 2 }, { 70, 3 }, { 45, 7 }, { 10, 8 }, { 12032, 9 },
+};
+
+CameraModeValue D_8011B8D4[] = {
+ { 16128, 9 },
+};
+
+CameraModeValue D_8011B8D8[] = {
+ { 30, 0 }, { 200, 1 }, { 300, 2 }, { -20, 3 }, { 15, 4 }, { 5, 26 }, { 50, 6 }, { 70, 7 }, { 70, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011B900[] = {
+ { -30, 0 }, { 160, 1 }, { 10, 13 }, { 10, 14 }, { 0, 15 }, { 0, 16 },
+ { 70, 17 }, { 60, 7 }, { 40, 8 }, { 8194, 9 }, { -50, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011B930[] = {
+ { -20, 0 }, { 350, 1 }, { 350, 2 }, { 20, 3 }, { 15, 4 }, { 5, 5 }, { 30, 6 }, { 60, 7 }, { 60, 8 }, { 3, 9 },
+};
+
+CameraModeValue D_8011B958[] = {
+ { -20, 0 }, { 200, 1 }, { 0, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 45, 7 }, { 50, 8 }, { 8202, 9 }, { -40, 11 }, { 20, 12 },
+};
+
+CameraModeValue D_8011B984[] = {
+ { -20, 0 }, { 180, 1 }, { 10, 13 }, { 80, 14 }, { -10, 15 }, { 10, 16 },
+ { 25, 17 }, { 45, 7 }, { 80, 8 }, { 8194, 9 }, { -40, 11 }, { 25, 12 },
+};
+
+CameraModeValue D_8011B9B4[] = {
+ { -20, 0 }, { 350, 1 }, { 350, 2 }, { 10, 4 }, { 50, 6 }, { 60, 7 }, { 40, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011B9D4[] = {
+ { -20, 0 }, { 350, 1 }, { 350, 2 }, { 15, 4 }, { 80, 6 }, { 60, 7 }, { 20, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011B9F4[] = {
+ { -40, 0 }, { 350, 1 }, { 350, 2 }, { 20, 18 }, { 5, 4 }, { 5, 5 }, { 60, 7 }, { 40, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011BA18[] = {
+ { -40, 0 }, { 350, 1 }, { 350, 2 }, { 20, 18 }, { 999, 4 }, { 5, 5 }, { 60, 7 }, { 40, 8 }, { 8198, 9 },
+};
+
+CameraModeValue D_8011BA3C[] = {
+ { -50, 0 }, { 350, 1 }, { 350, 2 }, { 40, 3 }, { 60, 7 }, { 10, 8 }, { 0, 9 },
+};
+
+CameraModeValue D_8011BA58[] = {
+ { -100, 0 }, { 350, 1 }, { 350, 2 }, { 70, 3 }, { 45, 7 }, { 10, 8 }, { 8192, 9 },
+};
+
+CameraModeValue D_8011BA74[] = {
+ { -10, 0 }, { 350, 1 }, { 350, 2 }, { 20, 3 }, { 100, 4 }, { 5, 5 }, { 100, 6 }, { 60, 7 }, { 5, 8 }, { -4093, 9 },
+};
+
+CameraModeValue D_8011BA9C[] = {
+ { 0, 0 }, { 280, 1 }, { 25, 3 }, { 0, 10 }, { 5, 4 }, { 5, 5 },
+ { 70, 7 }, { 30, 8 }, { 8298, 9 }, { -20, 11 }, { 30, 12 },
+};
+
+CameraModeValue D_8011BAC8[] = {
+ { -10, 0 }, { 280, 1 }, { 320, 2 }, { -8, 3 }, { 20, 4 }, { 10, 5 }, { 80, 6 }, { 60, 7 }, { 80, 8 }, { 2, 9 },
+};
+
+CameraModeValue D_8011BAF0[] = {
+ { -20, 0 }, { 180, 1 }, { 200, 2 }, { 35, 13 }, { 45, 14 }, { 0, 15 }, { -5, 16 },
+ { 20, 17 }, { 50, 7 }, { 50, 8 }, { 8193, 9 }, { -50, 11 }, { 30, 12 },
+};
+
+CameraModeValue D_8011BB24[] = {
+ { -80, 0 }, { 200, 1 }, { 250, 2 }, { 30, 13 }, { 10, 14 }, { -8, 15 },
+ { -8, 16 }, { 30, 17 }, { 50, 7 }, { 50, 8 }, { 10, 4 }, { 13600, 9 },
+};
+
+CameraModeValue D_8011BB54[] = {
+ { -30, 0 }, { 70, 1 }, { 200, 2 }, { 40, 13 }, { 10, 14 }, { 0, 15 },
+ { 5, 16 }, { 70, 17 }, { 45, 7 }, { 50, 8 }, { 10, 4 }, { 13728, 9 },
+};
+
+CameraMode D_8011BB84[] = {
+ { 2, 10, D_8011A3A0 }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011A458 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5FC }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011BC2C[] = {
+ { 2, 10, D_8011A6C0 }, { 7, 11, D_8011A6E8 }, { 12, 13, D_8011A714 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011A748 }, { 23, 9, D_8011A7D8 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A778 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A7FC }, { 22, 8, D_8011A798 }, { 42, 7, D_8011A83C }, { 42, 7, D_8011A858 },
+ { 22, 8, D_8011A7B8 }, { 30, 7, D_8011A820 }, { 2, 10, D_8011A874 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011BCD4[] = {
+ { 2, 10, D_8011A89C }, { 7, 11, D_8011A8C4 }, { 12, 13, D_8011A8F0 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011A924 }, { 23, 9, D_8011A994 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A778 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A9B8 }, { 22, 8, D_8011A954 }, { 42, 7, D_8011A9F8 }, { 42, 7, D_8011AA14 },
+ { 22, 8, D_8011A974 }, { 30, 7, D_8011A9DC }, { 2, 10, D_8011AA30 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011BD7C[] = {
+ { 2, 10, D_8011AA58 }, { 7, 11, D_8011A8C4 }, { 12, 13, D_8011A714 }, { 14, 12, D_8011AA80 },
+ { 27, 12, D_8011A924 }, { 23, 9, D_8011AAF0 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A778 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011AB14 }, { 22, 8, D_8011AAB0 }, { 42, 7, D_8011AB54 }, { 42, 7, D_8011AB70 },
+ { 22, 8, D_8011AAD0 }, { 30, 7, D_8011AB38 }, { 2, 10, D_8011AB8C }, { 7, 11, D_8011ABB4 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011BE24[] = {
+ { 24, 10, D_8011ABE0 }, { 7, 11, D_8011AC08 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011AC34 },
+ { 27, 12, D_8011A458 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 24, 10, D_8011AC64 }, { 0, 0, NULL },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+};
+
+// HORSE0 0x8500018F (10000101000000000000000110001111)
+CameraMode D_8011BEC4[] = {
+ { 4, 9, D_8011AC8C }, { 4, 9, D_8011ACB0 }, { 12, 13, D_8011ACF8 }, { 14, 12, D_8011AD2C }, { 0, 0, NULL },
+ { 0, 0, NULL }, { 0, 0, NULL }, { 19, 9, D_8011ACD4 }, { 19, 9, D_8011A4F4 },
+};
+
+CameraMode D_8011BF0C[] = {
+ { 2, 10, D_8011AD5C }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011AD84 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A9DC }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011BFB4[] = {
+ { 2, 10, D_8011ADB4 }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011ADDC }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011C05C[] = {
+ { 2, 10, D_8011AE0C }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011AE34 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011C104[] = {
+ { 2, 10, D_8011AE64 }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011AE8C }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011C1AC[] = {
+ { 2, 10, D_8011AEBC }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011AEE4 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011C254[] = {
+ { 2, 10, D_8011AF14 }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011AF3C }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 2, 10, D_8011AF6C }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 2, 10, D_8011AF6C }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011C2FC[] = {
+ { 2, 10, D_8011AF94 }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011AFBC }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011C3A4[] = {
+ { 2, 10, D_8011AFEC }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011B014 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011C44C[] = {
+ { 2, 10, D_8011B044 }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011B014 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011C4F4[] = {
+ { 2, 10, D_8011B06C }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011AE8C }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011B094 }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011C59C[] = {
+ { 2, 10, D_8011B0B0 }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011B0D8 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011C644[] = {
+ { 3, 9, D_8011B108 }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011A458 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 3, 9, D_8011B12C }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011C6EC[] = {
+ { 3, 9, D_8011B150 }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011A458 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 3, 9, D_8011B174 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011C794[] = {
+ { 32, 4, D_8011B198 },
+ { 0, 0, NULL },
+ { 32, 4, D_8011B1A8 },
+ { 32, 4, D_8011B1B8 },
+};
+
+CameraMode D_8011C7B4[] = {
+ { 32, 4, D_8011B1C8 },
+};
+
+CameraMode D_8011C7BC[] = {
+ { 33, 5, D_8011B1D8 },
+};
+
+CameraMode D_8011C7C4[] = {
+ { 40, 3, D_8011B1EC },
+};
+
+CameraMode D_8011C7CC[] = {
+ { 35, 5, D_8011B1F8 }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011A748 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 0, 0, NULL }, { 0, 0, NULL }, { 0, 0, NULL },
+ { 0, 0, NULL }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011C874[] = {
+ { 34, 1, D_8011B20C },
+ { 0, 0, NULL },
+ { 34, 1, D_8011B210 },
+ { 34, 1, D_8011B210 },
+};
+
+CameraMode D_8011C894[] = {
+ { 48, 2, D_8011B214 },
+ { 0, 0, NULL },
+ { 48, 2, D_8011B21C },
+ { 11, 4, D_8011B224 },
+};
+
+CameraMode D_8011C8B4[] = {
+ { 67, 1, D_8011B20C },
+};
+
+CameraMode D_8011C8BC[] = {
+ { 44, 3, D_8011B234 },
+};
+
+CameraMode D_8011C8C4[] = {
+ { 70, 3, D_8011B240 },
+ { 70, 3, D_8011B24C },
+};
+
+CameraMode D_8011C8D4[] = {
+ { 20, 6, D_8011B258 },
+};
+
+CameraMode D_8011C8DC[] = {
+ { 41, 1, D_8011B20C },
+};
+
+CameraMode D_8011C8E4[] = {
+ { 41, 1, D_8011B270 },
+};
+
+CameraMode D_8011C8EC[] = {
+ { 47, 1, D_8011B274 },
+};
+
+CameraMode D_8011C8F4[] = {
+ { 47, 1, D_8011B278 },
+};
+
+CameraMode D_8011C8FC[] = {
+ { 33, 5, D_8011B27C },
+};
+
+CameraMode D_8011C904[] = {
+ { 43, 4, D_8011B290 },
+ { 43, 4, D_8011B2A0 },
+};
+
+CameraMode D_8011C914[] = {
+ { 52, 1, D_8011B2B0 },
+};
+
+CameraMode D_8011C91C[] = {
+ { 53, 1, D_8011B2B0 },
+};
+
+CameraMode D_8011C924[] = {
+ { 7, 11, D_8011B2B4 },
+ { 0, 0, NULL },
+ { 0, 0, NULL },
+ { 9, 1, D_8011B2E0 },
+};
+
+CameraMode D_8011C944[] = {
+ { 54, 3, D_8011B2E4 },
+};
+
+CameraMode D_8011C94C[] = {
+ { 55, 3, D_8011B2E4 },
+};
+
+CameraMode D_8011C954[] = {
+ { 60, 1, D_8011B2F0 },
+};
+
+CameraMode D_8011C95C[] = {
+ { 56, 1, D_8011B2B0 },
+};
+
+CameraMode D_8011C964[] = {
+ { 2, 10, D_8011B2F4 }, { 7, 11, D_8011B31C }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011A748 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011B348 }, { 42, 7, D_8011B368 }, { 42, 7, D_8011B384 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011B3A0 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011CA0C[] = {
+ { 2, 10, D_8011B3C8 }, { 7, 11, D_8011B3F0 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011A748 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011B41C }, { 42, 7, D_8011B43C }, { 42, 7, D_8011B458 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011B474 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011CAB4[] = {
+ { 70, 3, D_8011B49C },
+};
+
+CameraMode D_8011CABC[] = {
+ { 43, 4, D_8011B4A8 },
+};
+
+CameraMode D_8011CAC4[] = {
+ { 68, 1, D_8011B20C },
+};
+
+CameraMode D_8011CACC[] = {
+ { 65, 1, D_8011B2B0 },
+};
+
+CameraMode D_8011CAD4[] = {
+ { 46, 1, D_8011B2B0 },
+};
+
+CameraMode D_8011CADC[] = {
+ { 57, 1, D_8011B2B0 },
+};
+
+CameraMode D_8011CAE4[] = {
+ { 2, 10, D_8011B4B8 }, { 7, 11, D_8011A8C4 }, { 12, 13, D_8011A8F0 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011B4E0 }, { 23, 9, D_8011A994 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A778 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A9B8 }, { 22, 8, D_8011A954 }, { 42, 7, D_8011A9F8 }, { 42, 7, D_8011AA14 },
+ { 22, 8, D_8011A974 }, { 30, 7, D_8011A9DC }, { 2, 10, D_8011B510 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011CB8C[] = {
+ { 2, 10, D_8011B538 }, { 7, 11, D_8011B560 }, { 0, 0, NULL },
+ { 0, 0, NULL }, { 7, 11, D_8011B58C }, { 2, 10, D_8011B5B8 },
+};
+
+CameraMode D_8011CBBC[] = {
+ { 2, 10, D_8011B5E0 }, { 7, 11, D_8011B608 }, { 0, 0, NULL },
+ { 0, 0, NULL }, { 7, 11, D_8011B634 }, { 2, 10, D_8011B660 },
+};
+
+CameraMode D_8011CBEC[] = {
+ { 2, 10, D_8011B688 }, { 7, 11, D_8011B6B0 }, { 0, 0, NULL },
+ { 0, 0, NULL }, { 7, 11, D_8011B6DC }, { 2, 10, D_8011B708 },
+};
+
+CameraMode D_8011CC1C[] = {
+ { 15, 9, D_8011B730 },
+};
+
+CameraMode D_8011CC24[] = {
+ { 61, 2, D_8011B754 },
+};
+
+CameraMode D_8011CC2C[] = {
+ { 2, 10, D_8011B75C }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011A748 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011CCD4[] = {
+ { 2, 10, D_8011B784 }, { 7, 11, D_8011B7AC }, { 27, 12, D_8011B7D8 }, { 14, 12, D_8011B808 },
+ { 27, 12, D_8011B7D8 }, { 0, 0, NULL }, { 19, 9, D_8011B838 }, { 0, 0, NULL },
+ { 0, 0, NULL }, { 0, 0, NULL }, { 0, 0, NULL }, { 0, 0, NULL },
+ { 0, 0, NULL }, { 22, 8, D_8011B85C }, { 42, 7, D_8011B89C }, { 42, 7, D_8011B8B8 },
+ { 22, 8, D_8011B87C },
+};
+
+CameraMode D_8011CD5C[] = {
+ { 50, 1, D_8011B8D4 },
+};
+
+CameraMode D_8011CD64[] = {
+ { 2, 10, D_8011B8D8 }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011B900 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011CE0C[] = {
+ { 2, 10, D_8011B930 }, { 7, 11, D_8011B958 }, { 12, 13, D_8011A8F0 }, { 14, 12, D_8011A428 },
+ { 27, 12, D_8011B984 }, { 23, 9, D_8011B9F4 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A778 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011BA18 }, { 22, 8, D_8011B9B4 }, { 42, 7, D_8011BA3C }, { 42, 7, D_8011BA58 },
+ { 22, 8, D_8011B9D4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011BA74 }, { 7, 11, D_8011BA9C },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011CEB4[] = {
+ { 2, 10, D_8011BAC8 }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011BAF0 }, { 14, 12, D_8011BB24 },
+ { 27, 12, D_8011A458 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraMode D_8011CF5C[] = {
+ { 35, 5, D_8011B1F8 }, { 0, 0, NULL }, { 35, 5, D_8011B1F8 }, { 14, 12, D_8011A428 },
+ { 0, 0, NULL }, { 0, 0, NULL }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 0, 0, NULL }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+};
+
+CameraMode D_8011CFBC[] = {
+ { 2, 10, D_8011B75C }, { 7, 11, D_8011A3C8 }, { 12, 13, D_8011A3F4 }, { 14, 12, D_8011BB54 },
+ { 27, 12, D_8011A748 }, { 23, 9, D_8011A488 }, { 19, 9, D_8011A4AC }, { 19, 9, D_8011A4D0 },
+ { 19, 9, D_8011A4F4 }, { 66, 8, D_8011A518 }, { 19, 9, D_8011A538 }, { 19, 9, D_8011A55C },
+ { 23, 9, D_8011A580 }, { 22, 8, D_8011A5A4 }, { 42, 7, D_8011A5C4 }, { 42, 7, D_8011A5E0 },
+ { 22, 8, D_8011A5A4 }, { 30, 7, D_8011A61C }, { 2, 10, D_8011A638 }, { 7, 11, D_8011A660 },
+ { 12, 13, D_8011A68C },
+};
+
+CameraSetting sCameraSettings[] = {
+ { { 0x00000000 }, NULL }, { { 0x051FFFFF }, D_8011BB84 }, { { 0x051FFFFF }, D_8011BC2C },
+ { { 0x051FFFFF }, D_8011BCD4 }, { { 0x051FFFFF }, D_8011BD7C }, { { 0x050FF7FF }, D_8011BE24 },
+ { { 0x8500018F }, D_8011BEC4 }, { { 0x051FFFFF }, D_8011BF0C }, { { 0x051FFFFF }, D_8011BFB4 },
+ { { 0x051FFFFF }, D_8011C05C }, { { 0x051FFFFF }, D_8011C104 }, { { 0x051FFFFF }, D_8011C1AC },
+ { { 0x051FFFFF }, D_8011C254 }, { { 0x051FFFFF }, D_8011C2FC }, { { 0x051FFFFF }, D_8011C3A4 },
+ { { 0x051FFFFF }, D_8011C44C }, { { 0x051FFFFF }, D_8011C4F4 }, { { 0x051FFFFF }, D_8011C59C },
+ { { 0x851FFFFF }, D_8011C644 }, { { 0x851FFFFF }, D_8011C6EC }, { { 0x8500000D }, D_8011C794 },
+ { { 0x85000001 }, D_8011C7B4 }, { { 0x85000001 }, D_8011C7BC }, { { 0x85000001 }, D_8011C7C4 },
+ { { 0x851E1FFF }, D_8011C7CC }, { { 0x8C00000D }, D_8011C874 }, { { 0x8C00000D }, D_8011C894 },
+ { { 0x8C000001 }, D_8011C8B4 }, { { 0xC5000001 }, D_8011C8BC }, { { 0xC5000003 }, D_8011C8C4 },
+ { { 0xC5000001 }, D_8011C8D4 }, { { 0xC5000001 }, D_8011C8DC }, { { 0xC5000001 }, D_8011C8E4 },
+ { { 0x05000001 }, D_8011C8EC }, { { 0x05000001 }, D_8011C8F4 }, { { 0x85000001 }, D_8011C8FC },
+ { { 0x05000003 }, D_8011C904 }, { { 0xCE000001 }, D_8011C914 }, { { 0x4E000001 }, D_8011C91C },
+ { { 0x05000009 }, D_8011C924 }, { { 0x45000001 }, D_8011C944 }, { { 0x45000001 }, D_8011C94C },
+ { { 0x45000001 }, D_8011C954 }, { { 0x45000001 }, D_8011C95C }, { { 0x451FFFFF }, D_8011C964 },
+ { { 0x451FFFFF }, D_8011CA0C }, { { 0xC5000001 }, D_8011CAB4 }, { { 0x45000001 }, D_8011CABC },
+ { { 0x05000001 }, D_8011CAC4 }, { { 0x45000001 }, D_8011CACC }, { { 0x45000001 }, D_8011CAD4 },
+ { { 0x45000001 }, D_8011CADC }, { { 0x451FFFFF }, D_8011CAE4 }, { { 0x05000033 }, D_8011CB8C },
+ { { 0x05000033 }, D_8011CBBC }, { { 0x05000033 }, D_8011CBEC }, { { 0x4A000001 }, D_8011CC1C },
+ { { 0x05000001 }, D_8011CC24 }, { { 0x051FFFFF }, D_8011CC2C }, { { 0x0501E05F }, D_8011CCD4 },
+ { { 0x45000001 }, D_8011CD5C }, { { 0x051FFFFF }, D_8011CD64 }, { { 0x051FFFFF }, D_8011CE0C },
+ { { 0x051FFFFF }, D_8011CEB4 }, { { 0xC5000ECD }, D_8011CF5C }, { { 0x051FFFFF }, D_8011CFBC },
+};
+
+s32 Camera_Normal0(Camera* camera);
+s32 Camera_Normal1(Camera* camera);
+s32 Camera_Normal2(Camera* camera);
+s32 Camera_Normal3(Camera* camera);
+s32 Camera_Normal4(Camera* camera);
+s32 Camera_Parallel0(Camera* camera);
+s32 Camera_Parallel1(Camera* camera);
+s32 Camera_Parallel2(Camera* camera);
+void Camera_Parallel3(Camera* camera);
+s32 Camera_Parallel4(Camera* camera);
+s32 Camera_KeepOn0(Camera* camera);
+s32 Camera_KeepOn1(Camera* camera);
+s32 Camera_KeepOn2(Camera* camera);
+s32 Camera_KeepOn3(Camera* camera);
+s32 Camera_KeepOn4(Camera* camera);
+s32 Camera_Subj0(Camera* camera);
+s32 Camera_Subj1(Camera* camera);
+s32 Camera_Subj2(Camera* camera);
+s32 Camera_Subj3(Camera* camera);
+s32 Camera_Subj4(Camera* camera);
+s32 Camera_Jump0(Camera* camera);
+s32 Camera_Jump1(Camera* camera);
+s32 Camera_Jump2(Camera* camera);
+s32 Camera_Jump3(Camera* camera);
+s32 Camera_Jump4(Camera* camera);
+s32 Camera_Battle0(Camera* camera);
+s32 Camera_Battle1(Camera* camera);
+s32 Camera_Battle2(Camera* camera);
+s32 Camera_Battle3(Camera* camera);
+s32 Camera_Battle4(Camera* camera);
+s32 Camera_Fixed0(Camera* camera);
+s32 Camera_Fixed1(Camera* camera);
+s32 Camera_Fixed2(Camera* camera);
+s32 Camera_Fixed3(Camera* camera);
+s32 Camera_Fixed4(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_Unique0(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_Unique6(Camera* camera);
+s32 Camera_Unique7(Camera* camera);
+s32 Camera_Unique8(Camera* camera);
+s32 Camera_Unique9(Camera* camera);
+s32 Camera_Demo0(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);
+void Camera_Demo7(Camera* camera);
+s32 Camera_Demo8(Camera* camera);
+s32 Camera_Demo9(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);
+
+void* sCameraFunctions[] = {
+ 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_Subj0,
+ Camera_Subj1,
+ Camera_Subj2,
+ Camera_Subj3,
+ Camera_Subj4,
+ 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,
+};
+
+s32 sInitRegs = 1; // 8011D390
+
+UNK_TYPE D_8011D394 = 0;
+s32 D_8011D398 = -1;
+s16 D_8011D39C = 0; // size = 4 ?
+u_D_8011D3A0 D_8011D3A0 = { {
+ 0x0000,
+ 0x0001,
+} };
+
+s32 D_8011D3A4 = 0x02;
+s32 D_8011D3A8 = 0x20;
+s32 D_8011D3AC = -1;
+
+s16 D_8011D3B0[] = {
+ 0x0AAA, 0xF556, 0x1555, 0xEAAB, 0x2AAA, 0xD556, 0x3FFF, 0xC001, 0x5555, 0xAAAB, 0x6AAA, 0x9556, 0x7FFF, 0x0000,
+};
+
+s16 D_8011D3CC[] = {
+ 0x0000, 0x02C6, 0x058C, 0x0000, 0x0000, 0xFD3A, 0x0000, 0x0852, 0x0000, 0x0000, 0x0B18, 0x02C6, 0xFA74, 0x0000,
+};
+
+s32 D_8011D3E8 = 0; // size = 8?
+s32 D_8011D3EC = 0;
+s32 D_8011D3F0 = 0;
+
+s32 D_8011D3F4 = -16;
+
+char sCameraFunctionNames[][8] = {
+ "NONE ", "NORM0()", "NORM1()", "NORM2()", "NORM3()", "NORM4()", "PARA0()", "PARA1()", "PARA2()", "PARA3()",
+ "PARA4()", "KEEP0()", "KEEP1()", "KEEP2()", "KEEP3()", "KEEP4()", "SUBJ0()", "SUBJ1()", "SUBJ2()", "SUBJ3()",
+ "SUBJ4()", "JUMP0()", "JUMP1()", "JUMP2()", "JUMP3()", "JUMP4()", "BATT0()", "BATT1()", "BATT2()", "BATT3()",
+ "BATT4()", "FIXD0()", "FIXD1()", "FIXD2()", "FIXD3()", "FIXD4()", "DATA0()", "DATA1()", "DATA2()", "DATA3()",
+ "DATA4()", "UNIQ0()", "UNIQ1()", "UNIQ2()", "UNIQ3()", "UNIQ4()", "UNIQ5()", "UNIQ6()", "UNIQ7()", "UNIQ8()",
+ "UNIQ9()", "DEMO0()", "DEMO1()", "DEMO2()", "DEMO3()", "DEMO4()", "DEMO5()", "DEMO6()", "DEMO7()", "DEMO8()",
+ "DEMO9()", "SPEC0()", "SPEC1()", "SPEC2()", "SPEC3()", "SPEC4()", "SPEC5()", "SPEC6()", "SPEC7()", "SPEC8()",
+ "SPEC9()", "", "", "", "", "",
+};
+
+u8 D_8011D658[] = {
+ 0x42, 0x48, 0x00, 0x00, 0xEE, 0x3A, 0xD5, 0x58, 0x42, 0x96, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08,
+ 0x42, 0xA0, 0x00, 0x00, 0xEE, 0x3A, 0x80, 0x08, 0x41, 0x70, 0x00, 0x00, 0xEE, 0x3A, 0x80, 0x08,
+};
+
+u8 D_8011D678[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00,
+ 0xC0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0xC0, 0x40, 0x00, 0x00,
+};
+
+s32 D_8011D6A8 = -200;
+
+u8 D_8011D6AC[] = {
+ 0x8F, 0xFF, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x3F, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xFF, 0x03, 0x03,
+};
+
+u8 D_8011D6D8[] = {
+ 0x00, 0x13, 0x00, 0x00, 0x42, 0x34, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xA0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xFF,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF,
+ 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+};
+
+u8 D_8011D724[] = {
+ 0x8F, 0xFF, 0x24, 0x24, 0x00, 0x01, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00,
+ 0xC1, 0xA0, 0x00, 0x00, 0x81, 0xFF, 0x21, 0x21, 0x00, 0x13, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x3F, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x12, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x42, 0x70,
+ 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+ 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+};
+
+u8 D_8011D79C[] = {
+ 0xCF, 0xFF, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0x03, 0x03, 0x00, 0x13, 0x00, 0x00, 0x42, 0x34, 0x00, 0x00, 0x3F, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xC1, 0x20, 0x00, 0x00, 0x40, 0xA0, 0x00, 0x00, 0xC1, 0xFF, 0x03, 0x03, 0x00, 0x09, 0x00, 0x00, 0x42, 0x70,
+ 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xFF, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+ 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+};
-// Non-matchings functions marked with CLOSE are either a matter of regalloc or stack size and can possibly be fixed
-// with the permutator.
+u8 D_8011D83C[] = {
+ 0x83, 0xFF, 0x21, 0x41, 0x00, 0x14, 0x00, 0x00, 0x42, 0x34, 0x00, 0x00, 0x3E, 0x4C, 0xCC, 0xCD,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, 0x12, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x42, 0x70, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+ 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+};
+
+u8 D_8011D88C[] = {
+ 0x81, 0xFF, 0x03, 0x03, 0x00, 0x14, 0x00, 0x00, 0x42, 0x34, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x42, 0x70, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+ 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+};
+
+u8 D_8011D8DC[] = {
+ 0x8F, 0xFF, 0x04, 0x04, 0x00, 0x14, 0x00, 0x01, 0x42, 0x48, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0xA0, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00,
+ 0xC2, 0xA0, 0x00, 0x00, 0x82, 0xFF, 0x21, 0x21, 0x00, 0x05, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x3F, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xA0, 0x00, 0x00,
+ 0x40, 0xA0, 0x00, 0x00, 0xC3, 0x48, 0x00, 0x00, 0x12, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x42, 0x70,
+ 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+ 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+};
+
+u8 D_8011D954[] = {
+ 0x0F, 0xFF, 0xC1, 0xC1, 0x00, 0x14, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x7A, 0x00, 0x00, 0x83, 0xFF, 0x05, 0xB1, 0x00, 0x05, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x3D, 0xCC,
+ 0xCC, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x41, 0x20, 0x00, 0x00, 0x42, 0xC8, 0x00, 0x00, 0x82, 0xFF, 0x21, 0x21, 0x00, 0x05, 0x00, 0x02, 0x42, 0x70,
+ 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, 0xC3, 0x16, 0x00, 0x00, 0x12, 0xFF, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+ 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+};
+u8 D_8011D9F4[] = {
+ 0x8F, 0xFF, 0x05, 0x04, 0x00, 0x14, 0x00, 0x02, 0x42, 0x70, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0xA0, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00,
+ 0x43, 0x96, 0x00, 0x00, 0x82, 0xFF, 0x21, 0x21, 0x00, 0x05, 0x00, 0x02, 0x42, 0x70, 0x00, 0x00, 0x3F, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x41, 0xA0, 0x00, 0x00, 0xC3, 0x16, 0x00, 0x00, 0x12, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x42, 0x70,
+ 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+ 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00,
+};
+
+u8 D_8011DA6C[] = {
+ 0x45, 0x3E, 0xA0, 0x00, 0x44, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xDB, 0x60, 0x00,
+ 0x45, 0x55, 0x70, 0x00, 0xC3, 0xBE, 0x00, 0x00, 0xC5, 0x43, 0x00, 0x00, 0x45, 0x45, 0x80, 0x00,
+ 0x43, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x20, 0x00, 0x00, 0x43, 0x70, 0x00, 0x00,
+};
+
+u8 D_8011DA9C[] = {
+ 0x45, 0x45, 0x80, 0x00, 0x45, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xBD, 0x60, 0x00,
+ 0x45, 0x81, 0x10, 0x00, 0xC4, 0x50, 0xC0, 0x00, 0xC5, 0x3E, 0x00, 0x00, 0x45, 0x81, 0x38, 0x00,
+ 0x43, 0x66, 0x00, 0x00, 0xC2, 0x48, 0x00, 0x00, 0x44, 0x16, 0x00, 0x00, 0xC2, 0x96, 0x00, 0x00,
+};
+
+u8 D_8011DACC[] = {
+ 0x44, 0xC4, 0x40, 0x00, 0x45, 0x66, 0x00, 0x00, 0x45, 0x67, 0x40, 0x00, 0x43, 0xC5, 0x80, 0x00,
+};
+
+u8 D_8011DADC[] = {
+ 0x43, 0xA0, 0x00, 0x00, 0x43, 0xA0, 0x00, 0x00, 0x43, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+u8 D_8011DAEC[] = {
+ 0xF8, 0x30, 0xFC, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+s16 D_8011DAFC[] = {
+ 1, 2, 58, 3, 4, 62,
+};
+
+s16 D_8011DB08 = 1008;
+
+s16 D_8011DB0C = 342;
+
+s32 D_8011DB10 = 0;
+
+s32 D_8011DB14 = 0;
+
+// BSS
+extern GlobalContext* D_8015BD7C;
+extern DbgCamera D_8015BD80;
+extern Vec3f D_8015BD84;
+extern Vec3f D_8015BD90;
+extern Vec3f D_8015BD9C;
+extern f32 D_8015BDC8;
+extern Vec3s D_8015CE46;
+extern CollisionPoly* D_8015CE4C;
+
+/*===============================================================*/
typedef struct {
Vec3f unk_00;
Vec3f unk_0C;
@@ -17,15 +1738,6 @@ typedef struct {
s32 unk_24;
} struct_80043D18;
-// names for this struct's values come from a debug function, may want to rename
-typedef struct {
- s8 code;
- s8 z;
- u16 T;
- f32 zoom;
- Vec3s pos;
-} SplineData; // originally called SplinedatZ
-
f32 func_800437F0(f32 arg0, f32 arg1) {
f32 percent = 0.4f;
f32 ret = fabsf(arg1);
@@ -41,70 +1753,70 @@ f32 func_800437F0(f32 arg0, f32 arg1) {
return ret;
}
-f32 func_8004389C(f32 a, f32 b, f32 c, f32 d) {
- f32 temp1 = a - b;
+f32 func_8004389C(f32 arg0, f32 arg1, f32 arg2, f32 arg3) {
+ f32 temp1 = arg0 - arg1;
f32 temp2;
f32 ret;
- if (fabsf(temp1) >= d) {
- temp2 = temp1 * c;
- ret = b + temp2;
+ if (fabsf(temp1) >= arg3) {
+ temp2 = temp1 * arg2;
+ ret = arg1 + temp2;
} else {
- ret = a;
+ ret = arg0;
}
return ret;
}
-f32 func_800438DC(f32 a, f32 b, f32 c, f32 d) {
- f32 temp1 = a - b;
+f32 func_800438DC(f32 arg0, f32 arg1, f32 arg2, f32 arg3) {
+ f32 temp1 = arg0 - arg1;
f32 temp2;
f32 ret;
- if (fabsf(temp1) >= d) {
- temp2 = temp1 * c;
- ret = b + temp2;
+ if (fabsf(temp1) >= arg3) {
+ temp2 = temp1 * arg2;
+ ret = arg1 + temp2;
} else {
- ret = b;
+ ret = arg1;
}
return ret;
}
-s16 func_8004391C(s16 a, s16 b, f32 c, s16 d) {
- s16 temp1 = a - b;
+s16 func_8004391C(s16 arg0, s16 arg1, f32 arg2, s16 arg3) {
+ s16 temp1 = arg0 - arg1;
s16 temp2;
s32 ret;
- if (ABS(temp1) >= d) {
- temp2 = temp1 * c + 0.5f;
- ret = b + temp2;
+ if (ABS(temp1) >= arg3) {
+ temp2 = temp1 * arg2 + 0.5f;
+ ret = arg1 + temp2;
} else {
- ret = a;
+ ret = arg0;
}
return ret;
}
-
-s16 func_800439AC(s16 a, s16 b, f32 c, s16 d) {
- s16 temp1 = a - b;
+//*t = func_800439AC(sp4C.theta, *t, 0.4f, 0x7D0);
+s16 func_800439AC(s16 arg0, s16 arg1, f32 arg2, s16 arg3) {
+ s16 temp1 = arg0 - arg1;
s16 temp2;
s32 ret;
- if (ABS(temp1) >= d) {
- temp2 = temp1 * c + 0.5f;
- ret = b + temp2;
+ if (ABS(temp1) >= arg3) {
+ temp2 = temp1 * arg2 + 0.5f;
+ ret = arg1 + temp2;
} else {
- ret = b;
+ ret = arg1;
}
return ret;
}
-void func_80043A3C(Vec3f* a, Vec3f* b, f32 c, f32 d, f32 e) {
- b->x = func_8004389C(a->x, b->x, d, e);
- b->y = func_8004389C(a->y, b->y, c, e);
- b->z = func_8004389C(a->z, b->z, d, e);
+void func_80043A3C(Vec3f* arg0, Vec3f* arg1, f32 arg2, f32 arg3, f32 arg4) {
+ arg1->x = func_8004389C(arg0->x, arg1->x, arg3, arg4);
+ arg1->y = func_8004389C(arg0->y, arg1->y, arg2, arg4);
+ arg1->z = func_8004389C(arg0->z, arg1->z, arg3, arg4);
}
void func_80043ABC(Camera* camera) {
@@ -125,41 +1837,41 @@ void func_80043B60(Camera* camera) {
camera->unk_CC.z = 0.001f;
}
-Vec3f* func_80043BC4(Vec3f* a, Vec3s* b) {
+Vec3f* func_80043BC4(Vec3f* arg0, Vec3s* arg1) {
Vec3f sp4;
- sp4.x = b->x;
- sp4.y = b->y;
- sp4.z = b->z;
+ sp4.x = arg1->x;
+ sp4.y = arg1->y;
+ sp4.z = arg1->z;
- *a = sp4;
- return a;
+ *arg0 = sp4;
+ return arg0;
}
-Vec3f* func_80043C28(Vec3f* a, Vec3f* b, VecSph* c) {
+Vec3f* func_80043C28(Vec3f* arg0, Vec3f* arg1, VecSph* arg2) {
Vec3f sp24, sp18;
- func_8007C25C(&sp18, c);
+ func_8007C25C(&sp18, arg2);
- sp24.x = b->x + sp18.x;
- sp24.y = b->y + sp18.y;
- sp24.z = b->z + sp18.z;
+ sp24.x = arg1->x + sp18.x;
+ sp24.y = arg1->y + sp18.y;
+ sp24.z = arg1->z + sp18.z;
- *a = sp24;
- return a;
+ *arg0 = sp24;
+ return arg0;
}
-Vec3f* func_80043CAC(Vec3f* a, Vec3f* b, Vec3f* c, f32 d) {
+Vec3f* func_80043CAC(Vec3f* arg0, Vec3f* arg1, Vec3f* arg2, f32 arg3) {
Vec3f sp4;
- sp4.x = b->x + (c->x * d);
- sp4.y = b->y + (c->y * d);
- sp4.z = b->z + (c->z * d);
+ sp4.x = arg1->x + (arg2->x * arg3);
+ sp4.y = arg1->y + (arg2->y * arg3);
+ sp4.z = arg1->z + (arg2->z * arg3);
- *a = sp4;
- return a;
+ *arg0 = sp4;
+ return arg0;
}
-s32 func_80043D18(Camera* camera, Vec3f* b, struct_80043D18* c) {
+s32 func_80043D18(Camera* camera, Vec3f* arg1, struct_80043D18* arg2) {
CollisionContext* colCtx;
Vec3f sp68, sp5C, sp50;
f32 temp_ret;
@@ -168,135 +1880,129 @@ s32 func_80043D18(Camera* camera, Vec3f* b, struct_80043D18* c) {
VecSph sp3C;
colCtx = &camera->globalCtx->colCtx;
- func_8007C490(&sp3C, b, &c->unk_00);
+ func_8007C490(&sp3C, arg1, &arg2->unk_00);
sp3C.r += 8.0f;
- func_80043C28(&sp5C, b, &sp3C);
+ func_80043C28(&sp5C, arg1, &sp3C);
- if (func_8003DD6C(colCtx, b, &sp5C, &sp68, &c->unk_18, 1, 1, 1, -1, &c->unk_24) == 0) {
- func_8007C0F8(&sp50, b, &c->unk_00);
+ if (func_8003DD6C(colCtx, arg1, &sp5C, &sp68, &arg2->unk_18, 1, 1, 1, -1, &arg2->unk_24) == 0) {
+ func_8007C0F8(&sp50, arg1, &arg2->unk_00);
- c->unk_0C.x = -sp50.x;
- c->unk_0C.y = -sp50.y;
- c->unk_0C.z = -sp50.z;
+ arg2->unk_0C.x = -sp50.x;
+ arg2->unk_0C.y = -sp50.y;
+ arg2->unk_0C.z = -sp50.z;
- sp68 = c->unk_00;
+ sp68 = arg2->unk_00;
sp68.y += 5.0f;
temp_ret = func_8003CCA4(colCtx, &sp48, &sp44, &sp68);
- if ((c->unk_00.y - temp_ret) > 5.0f) {
- c->unk_00.x += c->unk_0C.x;
- c->unk_00.y += c->unk_0C.y;
- c->unk_00.z += c->unk_0C.z;
+ if ((arg2->unk_00.y - temp_ret) > 5.0f) {
+ arg2->unk_00.x += arg2->unk_0C.x;
+ arg2->unk_00.y += arg2->unk_0C.y;
+ arg2->unk_00.z += arg2->unk_0C.z;
return 0;
}
- c->unk_18 = sp48;
+ arg2->unk_18 = sp48;
sp68.y = temp_ret + 1.0f;
- c->unk_24 = sp44;
+ arg2->unk_24 = sp44;
}
- c->unk_0C.x = c->unk_18->norm.x * (1.f / 32767);
- c->unk_0C.y = c->unk_18->norm.y * (1.f / 32767);
- c->unk_0C.z = c->unk_18->norm.z * (1.f / 32767);
- c->unk_00.x = c->unk_0C.x + sp68.x;
- c->unk_00.y = c->unk_0C.y + sp68.y;
- c->unk_00.z = c->unk_0C.z + sp68.z;
+ arg2->unk_0C.x = arg2->unk_18->norm.x * (1.f / 32767);
+ arg2->unk_0C.y = arg2->unk_18->norm.y * (1.f / 32767);
+ arg2->unk_0C.z = arg2->unk_18->norm.z * (1.f / 32767);
+ arg2->unk_00.x = arg2->unk_0C.x + sp68.x;
+ arg2->unk_00.y = arg2->unk_0C.y + sp68.y;
+ arg2->unk_00.z = arg2->unk_0C.z + sp68.z;
return sp44 + 1;
}
-void func_80043F34(Camera* camera, Vec3f* b, Vec3f* c) {
+void func_80043F34(Camera* camera, Vec3f* arg1, Vec3f* arg2) {
struct_80043D18 sp20;
Vec3s unused;
- sp20.unk_00 = *c;
- func_80043D18(camera, b, &sp20);
- *c = sp20.unk_00;
+ sp20.unk_00 = *arg2;
+ func_80043D18(camera, arg1, &sp20);
+ *arg2 = sp20.unk_00;
}
// 242 lines
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80043F94.s")
-void func_80044340(Camera* camera, Vec3f* b, Vec3f* c) {
+void func_80044340(Camera* camera, Vec3f* arg1, Vec3f* arg2) {
struct_80043D18 sp20;
Vec3s unused;
- sp20.unk_00 = *c;
- func_80043F94(camera, b, &sp20);
- *c = sp20.unk_00;
+ sp20.unk_00 = *arg2;
+ func_80043F94(camera, arg1, &sp20);
+ *arg2 = sp20.unk_00;
}
-f32 func_80038B7C();
-
-#ifdef NON_MATCHING
-// ordering
-s32 func_800443A0(Camera* camera, Vec3f* b, Vec3f* c) {
- s32 sp4C;
+s32 func_800443A0(Camera* camera, Vec3f* arg1, Vec3f* arg2) {
+ s32 pad;
Vec3f sp40;
- s32 sp3C;
+ s32 pad2;
s32 sp38;
CollisionPoly* sp34;
+ CollisionContext* colCtx;
+ colCtx = &camera->globalCtx->colCtx;
- sp34 = NULL; // this is moved to the top when it should be done in the middle of the function args being loaded
- if (func_8003DD6C(&camera->globalCtx->colCtx, b, c, &sp40, &sp34, 1, 1, 1, 0, &sp38) != 0) {
- if (func_80038B7C(sp34, b) < 0.0f) {
- return 1;
- }
+ sp34 = NULL;
+ if (func_8003DD6C(colCtx, arg1, arg2, &sp40, &sp34, 1, 1, 1, 0, &sp38) && (func_80038B7C(sp34, arg1) < 0.0f)) {
+ return true;
}
- return 0;
+
+ return false;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800443A0.s")
-#endif
-f32 func_80044434(Camera* camera, Vec3f* b, Vec3f* c, s32* d) {
+f32 func_80044434(Camera* camera, Vec3f* arg1, Vec3f* arg2, s32* arg3) {
s32 sp2C; // unused
CollisionPoly* sp28;
- f32 temp_ret = func_8003C940(&camera->globalCtx->colCtx, &sp28, d, c);
+ f32 temp_ret = func_8003C940(&camera->globalCtx->colCtx, &sp28, arg3, arg2);
if (temp_ret == -32000.0f) {
- b->x = 0.0f;
- b->z = 0.0f;
- b->y = 1.0f;
+ arg1->x = 0.0f;
+ arg1->z = 0.0f;
+ arg1->y = 1.0f;
} else {
- b->x = sp28->norm.x * (1.f / 32767);
- b->y = sp28->norm.y * (1.f / 32767);
- b->z = sp28->norm.z * (1.f / 32767);
+ arg1->x = sp28->norm.x * (1.f / 32767);
+ arg1->y = sp28->norm.y * (1.f / 32767);
+ arg1->z = sp28->norm.z * (1.f / 32767);
}
return temp_ret;
}
-void func_80044510(Camera* camera, Vec3f* b) {
+f32 func_80044510(Camera* camera, Vec3f* arg1) {
Vec3f sp2C, sp20;
s32 sp1C;
- sp2C = *b;
+ sp2C = *arg1;
sp2C.y += 80.0f;
- func_80044434(camera, &sp20, &sp2C, &sp1C);
+ return func_80044434(camera, &sp20, &sp2C, &sp1C);
}
// 125 lines (loop)
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80044568.s")
-s16 func_80044740(Camera* camera, s32 b) {
- return func_80041A4C(&camera->globalCtx->colCtx, b, 50);
+s16 func_80044740(Camera* camera, s32 arg1) {
+ return func_80041A4C(&camera->globalCtx->colCtx, arg1, 50);
}
-s32 func_8004476C(Camera* camera) {
+struct_80041C10_ret* func_8004476C(Camera* camera) {
return func_80041C10(&camera->globalCtx->colCtx, camera->unk_148, 50);
}
-s32 func_8004479C(Camera* camera, s32* b, Vec3f* c) {
+s32 func_8004479C(Camera* camera, s32* arg1, Vec3f* arg2) {
s32 temp_ret;
PosRot sp20;
s32 ret;
func_8002EF44(&sp20, &camera->player->actor);
- temp_ret = func_80041A28(&camera->globalCtx->colCtx, c, *b);
+ temp_ret = func_80041A28(&camera->globalCtx->colCtx, arg2, *arg1);
- if (func_80041A4C(&camera->globalCtx->colCtx, temp_ret, *b) == 0) {
+ if (func_80041A4C(&camera->globalCtx->colCtx, temp_ret, *arg1) == 0) {
ret = -1;
} else {
ret = temp_ret;
@@ -319,20 +2025,20 @@ s32 func_8004481C(Camera* camera, s16* arg1) {
return func_80041C98(&camera->globalCtx->colCtx, sp44, sp3C);
}
-s32 func_800448CC(Camera* camera, f32* b) {
+s32 func_800448CC(Camera* camera, f32* arg1) {
PosRot sp34;
s32 sp30;
s32 temp_ret;
func_8002EF44(&sp34, &camera->player->actor);
- *b = sp34.pos.y;
+ *arg1 = sp34.pos.y;
- if (func_8004213C(camera->globalCtx, &camera->globalCtx->colCtx, sp34.pos.x, sp34.pos.z, b, &sp30) == 0) {
- *b = -32000.0f;
+ if (func_8004213C(camera->globalCtx, &camera->globalCtx->colCtx, sp34.pos.x, sp34.pos.z, arg1, &sp30) == 0) {
+ *arg1 = -32000.0f;
return -1;
}
if (!(camera->player->stateFlags1 & 0x8000000)) {
- *b = -32000.0f;
+ *arg1 = -32000.0f;
return -1;
}
@@ -344,7 +2050,7 @@ s32 func_800448CC(Camera* camera, f32* b) {
return temp_ret;
}
-f32 func_800449AC(Camera* camera, Vec3f* b, s32* arg2) {
+f32 func_800449AC(Camera* camera, Vec3f* arg1, s32* arg2) {
PosRot sp2C;
f32 sp28;
s32 sp24;
@@ -352,10 +2058,10 @@ f32 func_800449AC(Camera* camera, Vec3f* b, s32* arg2) {
func_8002EF44(&sp2C, &camera->player->actor);
sp28 = sp2C.pos.y;
- if (func_8004213C(camera->globalCtx, &camera->globalCtx->colCtx, b->x, b->z, &sp28, &sp24) == 0) {
+ if (func_8004213C(camera->globalCtx, &camera->globalCtx->colCtx, arg1->x, arg1->z, &sp28, &sp24) == 0) {
return -32000.f;
}
- if (sp28 < b->y) {
+ if (sp28 < arg1->y) {
return -32000.f;
}
@@ -363,23 +2069,21 @@ f32 func_800449AC(Camera* camera, Vec3f* b, s32* arg2) {
return sp28;
}
-s16 func_80044A74(Vec3f* a, Vec3f* b) {
- return Math_atan2f(b->x - a->x, b->z - a->z) * (180 / M_PI) * (32767.5f / 180) + 0.5f;
+s16 func_80044A74(Vec3f* arg0, Vec3f* arg1) {
+ return Math_atan2f(arg1->x - arg0->x, arg1->z - arg0->z) * (180.0f / M_PI) * (32767.5f / 180.0f) + 0.5f;
}
-// 234 lines
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80044ADC.s")
-// 143 lines (extremely confusing)
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80044E68.s")
-f32 func_800450A4(Camera* camera, f32 b) {
+f32 func_800450A4(Camera* camera, f32 arg1) {
f32 ret;
if (camera->unk_100 < (OREG(41) * 0.01f)) {
ret = OREG(41) * 0.01f;
- } else if (b <= camera->unk_100) {
- ret = b;
+ } else if (arg1 <= camera->unk_100) {
+ ret = arg1;
} else {
ret = OREG(42) * 0.01f * camera->unk_100;
}
@@ -387,41 +2091,71 @@ f32 func_800450A4(Camera* camera, f32 b) {
return ret;
}
-// 79 lines (unknown arrays)
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80045128.s")
+#ifdef NON_MATCHING
+void Camera_CopyModeValuesToPREG(Camera* camera, s16 mode) {
+ s32 i;
-// 66 lines (unknown arrays)
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80045254.s")
+ if (PREG(82)) {
+ osSyncPrintf("camera: res: stat (%d/%d/%d)\n", camera->unk_164, camera->setting, mode);
+ }
+ for (i = 0; i < sCameraSettings[camera->setting].cameraModes[mode].valueCnt; i++) {
+ CameraModeValue* phi_s0 = &sCameraSettings[camera->setting].cameraModes[mode].values[i];
+ PREG(phi_s0->param) = phi_s0->val;
+ if (PREG(82)) {
+ osSyncPrintf("camera: res: PREG(%02d) = %d\n", phi_s0->param, phi_s0->val);
+ }
+ }
+ camera->unk_15E = 0;
+}
+#else
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_CopyModeValuesToPREG.s")
+#endif
+
+#ifdef NON_MATCHING
+s32 Camera_CopyPREGToModeValues(Camera* camera) {
+ CameraModeValue* phi_s0;
+ s32 i;
+
+ for (i = 0; i < sCameraSettings[camera->setting].cameraModes[camera->mode].valueCnt; i++) {
+ phi_s0 = &sCameraSettings[camera->setting].cameraModes[camera->mode].values[i];
+ phi_s0->val = PREG(phi_s0->param);
+ if (PREG(82)) {
+ osSyncPrintf("camera: res: %d = PREG(%02d)\n", phi_s0->val, phi_s0->param);
+ }
+ }
+ return true;
+}
+#else
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_CopyPREGToModeValues.s")
+#endif
-// 76 lines (unknown types)
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80045350.s")
-void* func_8004545C(Vec3f* a, s32 b, s32 c, struct_80043D18* d, struct_80043D18* e) {
+void* func_8004545C(Vec3f* arg0, s32 arg1, s32 arg2, struct_80043D18* arg3, struct_80043D18* arg4) {
Vec3f sp24;
- if (func_800427B4(d->unk_18, e->unk_18, b, c, &sp24) == 0) {
- osSyncPrintf(VT_COL(YELLOW, BLACK) "camera: corner check no cross point %x %x\n" VT_RST, d, e);
- *a = d->unk_00;
- return a;
+ if (func_800427B4(arg3->unk_18, arg4->unk_18, arg1, arg2, &sp24) == 0) {
+ osSyncPrintf(VT_COL(YELLOW, BLACK) "camera: corner check no cross point %x %x\n" VT_RST, arg3, arg4);
+ *arg0 = arg3->unk_00;
+ return arg0;
}
- *a = sp24;
- return a;
+ *arg0 = sp24;
+ return arg0;
}
-// 141 lines
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80045508.s")
#ifdef NON_MATCHING
// CLOSE: stack is 4 bytes too big
-f32 func_80045714(Vec3f* a, s16 b, s16 c, f32 arg3) {
+f32 func_80045714(Vec3f* arg0, s16 arg1, s16 arg2, f32 arg3) {
VecSph sp1C;
f32 sp18;
- func_8007C3F4(&sp1C, a);
+ func_8007C3F4(&sp1C, arg0);
sp18 = Math_Coss(sp1C.phi);
- sp18 = fabsf(Math_Coss(b - sp1C.theta) * sp18);
- return Math_Coss(b - c) * (sp18 * arg3);
+ sp18 = fabsf(Math_Coss(arg1 - sp1C.theta) * sp18);
+ return Math_Coss(arg1 - arg2) * (sp18 * arg3);
}
#else
f32 func_80045714(Vec3f* a, s16 b, s16 c, f32 arg3);
@@ -430,7 +2164,7 @@ f32 func_80045714(Vec3f* a, s16 b, s16 c, f32 arg3);
f32 func_8007C0A8(f32, f32);
-s32 func_800457A8(Camera* camera, VecSph* b, f32 c, s16 d) {
+s32 func_800457A8(Camera* camera, VecSph* arg1, f32 arg2, s16 arg3) {
f32 unused;
Vec3f sp50;
Vec3f sp44;
@@ -442,11 +2176,11 @@ s32 func_800457A8(Camera* camera, VecSph* b, f32 c, s16 d) {
sp50.x = 0.f;
sp50.z = 0.f;
- sp50.y = temp_ret + c;
+ sp50.y = temp_ret + arg2;
- sp2C = &camera->unk_94;
- if (d != 0) {
- sp50.y -= func_8007C0A8(func_80045714(&camera->unk_108, sp2C->rot.y, b->theta, OREG(9)), temp_ret);
+ sp2C = &camera->playerPosRot;
+ if (arg3 != 0) {
+ sp50.y -= func_8007C0A8(func_80045714(&camera->unk_108, sp2C->rot.y, arg1->theta, OREG(9)), temp_ret);
}
func_80043A3C(&sp50, &camera->unk_E4, camera->unk_CC.y, camera->unk_CC.x, 0.1f);
@@ -458,11 +2192,9 @@ s32 func_800457A8(Camera* camera, VecSph* b, f32 c, s16 d) {
return 1;
}
-f32 func_8007C028(Vec3f*, Vec3f*);
-
#ifdef NON_MATCHING
// CLOSE: regalloc
-s32 func_800458D4(Camera* camera, VecSph* b, f32 c, f32* d, s16 e) {
+s32 func_800458D4(Camera* camera, VecSph* arg1, f32 arg2, f32* arg3, s16 arg4) {
f32 phi_f2;
Vec3f sp60;
Vec3f sp54;
@@ -471,16 +2203,16 @@ s32 func_800458D4(Camera* camera, VecSph* b, f32 c, f32* d, s16 e) {
f32 sp48;
s32 pad[2];
- sp60.y = Player_GetCameraYOffset(camera->player) + c;
+ sp60.y = Player_GetCameraYOffset(camera->player) + arg2;
sp60.x = 0.0f;
sp60.z = 0.0f;
- temp_s1 = &camera->unk_94;
- if (e != 0) {
- sp60.y -= func_80045714(&camera->unk_108, temp_s1->rot.y, b->theta, OREG(9));
+ temp_s1 = &camera->playerPosRot;
+ if (arg4 != 0) {
+ sp60.y -= func_80045714(&camera->unk_108, temp_s1->rot.y, arg1->theta, OREG(9));
}
- sp48 = temp_s1->pos.y - *d;
+ sp48 = temp_s1->pos.y - *arg3;
temp_ret = Math_atan2f(sp48, func_8007C028(&camera->at, &camera->eye)); // f2 and f14 are swapped
if (OREG(32) * (M_PI / 180) < temp_ret) {
@@ -505,7 +2237,7 @@ s32 func_800458D4(Camera* camera, VecSph* b, f32 c, f32* d, s16 e) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800458D4.s")
#endif
-s32 func_80045B08(Camera* camera, VecSph* b, f32 c, s16 d) {
+s32 func_80045B08(Camera* camera, VecSph* arg1, f32 arg2, s16 arg3) {
f32 phi_f2;
Vec3f sp48;
Vec3f sp3C;
@@ -513,17 +2245,17 @@ s32 func_80045B08(Camera* camera, VecSph* b, f32 c, s16 d) {
f32 temp_ret;
PosRot* temp_s1;
- sp48.y = Player_GetCameraYOffset(camera->player) + c;
+ sp48.y = Player_GetCameraYOffset(camera->player) + arg2;
sp48.x = 0.0f;
sp48.z = 0.0f;
- temp_ret = Math_Sins((s32)d);
- temp_s1 = &camera->unk_94;
+ temp_ret = Math_Sins(arg3);
+ temp_s1 = &camera->playerPosRot;
if (temp_ret < 0.0f) {
- phi_f2 = Math_Coss(temp_s1->rot.y - b->theta);
+ phi_f2 = Math_Coss(temp_s1->rot.y - arg1->theta);
} else {
- phi_f2 = -Math_Coss(temp_s1->rot.y - b->theta);
+ phi_f2 = -Math_Coss(temp_s1->rot.y - arg1->theta);
}
sp48.y -= temp_ret * phi_f2 * OREG(9);
@@ -537,86 +2269,11 @@ s32 func_80045B08(Camera* camera, VecSph* b, f32 c, s16 d) {
return 1;
}
-/*
-// someone who's not me can have fun with this function
-s32 func_80045C74(Camera* camera, VecSph* b, f32 c, f32* d, s16 arg4) {
- Vec3f sp70;
- Vec3f sp64;
- f32 sp54;
- PosRot* sp3C;
- f32 temp;
- f32 temp_f2;
- f32 temp_ret_3;
- f32 phi_f16;
- f32 phi_f20;
-
- sp70.y = Player_GetCameraYOffset(camera->player) + c;
- sp70.x = 0.0f;
- sp70.z = 0.0f;
-
- if (PREG(76) != 0) {
- if (arg4 != 0) {
- sp70.y -= func_80045714(&camera->unk_108, sp3C->rot.y, b->unk_06, OREG(9));
- }
- }
-
- sp3C = &camera->unk_94;
-
- if ((sp3C->pos.y == camera->unk_104) || (camera->player->actor.gravity > -0.1f) ||
- (camera->player->stateFlags1 & 0x200000)) {
- *d = func_8004389C(sp3C->pos.y, *d, OREG(43) * 0.01f, 0.1f);
- sp70.y -= sp3C->pos.y - *d;
- func_80043A3C(&sp70, &camera->unk_E4, camera->unk_CC.y, camera->unk_CC.x, 0.1f);
- } else {
- temp = sp3C->pos.y - *d;
- if (PREG(75) == 0) {
- sp54 = func_8007C028(&camera->at, &camera->eye);
- Math_atan2f(temp, sp54);
- temp_f2 = Math_tanf(camera->unk_FC * 0.4f * (M_PI / 180)) * sp54;
-
- if (temp > temp_f2) {
- *d += temp - temp_f2;
- phi_f20 = temp_f2;
- } else {
- phi_f20 = temp;
- if (temp < -temp_f2) {
- *d += temp + temp_f2;
- phi_f20 = -temp_f2;
- }
- }
- sp70.y -= phi_f20;
- } else {
- temp_ret_3 = Math_atan2f(temp, func_8007C028(&camera->at, &camera->eye));
-
- if (OREG(32) * (M_PI / 180) < temp_ret_3)
- phi_f16 = 1.0f - sinf(temp_ret_3 - OREG(32) * (M_PI / 180));
- else if (temp_ret_3 < OREG(33) * (M_PI / 180))
- phi_f16 = 1.0f - sinf(OREG(33) * (M_PI / 180) - temp_ret_3);
- else
- phi_f16 = 1.0f;
-
- sp70.y -= temp * phi_f16;
- }
-
- func_80043A3C(&sp70, &camera->unk_E4, OREG(29) * 0.01f, OREG(30) * 0.01f, 0.1f);
- camera->unk_CC.y = OREG(29) * 0.01f;
- camera->unk_CC.x = OREG(30) * 0.01f;
- }
-
- sp64.x = sp3C->pos.x + camera->unk_E4.x;
- sp64.y = sp3C->pos.y + camera->unk_E4.y;
- sp64.z = sp3C->pos.z + camera->unk_E4.z;
- func_80043A3C(&sp64, &camera->at, camera->unk_100, camera->unk_100, 0.2f);
-
- return 1;
-}
-*/
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80045C74.s")
-// 421 lines
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800460A8.s")
-s32 func_800466F8(Camera* camera, VecSph* b, f32 c, f32* d, s16 e) {
+s32 func_800466F8(Camera* camera, VecSph* arg1, f32 arg2, f32* arg3, s16 arg4) {
s32 phi_v0;
Vec3f sp60;
Vec3f sp54;
@@ -638,18 +2295,18 @@ s32 func_800466F8(Camera* camera, VecSph* b, f32 c, f32* d, s16 e) {
if (phi_v0 != 0) {
sp30.pos.y -= 49.f;
- *d = func_8004389C(sp30.pos.y, *d, 0.1f, 0.2f);
+ *arg3 = func_8004389C(sp30.pos.y, *arg3, 0.1f, 0.2f);
camera->unk_100 = func_8004389C(0.4f, camera->unk_100, 0.2f, 0.02f);
} else {
- *d = func_8004389C(sp30.pos.y, *d, 0.5f, 0.2f);
+ *arg3 = func_8004389C(sp30.pos.y, *arg3, 0.5f, 0.2f);
}
sp60.x = 0.0f;
sp60.z = 0.0f;
- sp60.y = sp48 + c;
+ sp60.y = sp48 + arg2;
- if (e != 0) {
- sp60.y -= func_80045714(&camera->unk_108, camera->unk_94.rot.y, b->theta, OREG(9));
+ if (arg4 != 0) {
+ sp60.y -= func_80045714(&camera->unk_108, camera->playerPosRot.rot.y, arg1->theta, OREG(9));
}
func_80043A3C(&sp60, &camera->unk_E4, camera->unk_CC.y, camera->unk_CC.x, 0.1f);
@@ -662,49 +2319,49 @@ s32 func_800466F8(Camera* camera, VecSph* b, f32 c, f32* d, s16 e) {
return 1;
}
-void func_800468CC(Camera* camera, f32 b, f32 c, f32 d) {
+void func_800468CC(Camera* camera, f32 arg1, f32 arg2, f32 arg3) {
f32 sp1C;
f32 phi_f12;
- if (b < c) {
- sp1C = c;
+ if (arg1 < arg2) {
+ sp1C = arg2;
phi_f12 = OREG(6);
- } else if (d < b) {
- sp1C = d;
+ } else if (arg3 < arg1) {
+ sp1C = arg3;
phi_f12 = OREG(6);
} else {
- sp1C = b;
+ sp1C = arg1;
phi_f12 = 1.0f;
}
camera->unk_C0.x = func_8004389C(phi_f12, camera->unk_C0.x, OREG(25) * 0.01f, 0.1f);
- func_8004389C(sp1C, camera->unk_DC, 1.f / camera->unk_C0.x, 0.2f);
+ func_8004389C(sp1C, camera->dist, 1.f / camera->unk_C0.x, 0.2f);
}
-void func_800469C0(Camera* camera, f32 b, f32 c, f32 d, s16 e) {
+f32 func_800469C0(Camera* camera, f32 arg1, f32 arg2, f32 arg3, s16 arg4) {
f32 sp1C;
f32 phi_f12;
- if (b < c) {
- sp1C = c;
+ if (arg1 < arg2) {
+ sp1C = arg2;
- if (e != 0) {
+ if (arg4 != 0) {
phi_f12 = OREG(6) * 0.5f;
} else {
phi_f12 = OREG(6);
}
- } else if (d < b) {
- sp1C = d;
+ } else if (arg3 < arg1) {
+ sp1C = arg3;
- if (e != 0) {
+ if (arg4 != 0) {
phi_f12 = OREG(6) * 0.5f;
} else {
phi_f12 = OREG(6);
}
} else {
- sp1C = b;
+ sp1C = arg1;
- if (e != 0) {
+ if (arg4 != 0) {
phi_f12 = OREG(6);
} else {
phi_f12 = 1.0f;
@@ -712,30 +2369,27 @@ void func_800469C0(Camera* camera, f32 b, f32 c, f32 d, s16 e) {
}
camera->unk_C0.x = func_8004389C(phi_f12, camera->unk_C0.x, OREG(25) * 0.01f, 0.1f);
- func_8004389C(sp1C, camera->unk_DC, 1.f / camera->unk_C0.x, 0.2f);
+ return func_8004389C(sp1C, camera->dist, 1.f / camera->unk_C0.x, 0.2f);
}
#ifdef NON_MATCHING
// lots of regalloc and stack issues, but that's it
-void func_80046B44(Camera* camera, s16 b, s16 c, s16 d) {
+void func_80046B44(Camera* camera, s16 arg1, s16 arg2, s16 arg3) {
+ s32 pad[2];
s16 sp1C;
s16 phi_v1;
s16 phi_v0;
f32 phi_a2;
- phi_v1 = ABS(b);
- if (d > 0) {
- phi_v0 = Math_Coss(d) * d;
- } else {
- phi_v0 = d;
- }
- sp1C = c - phi_v0;
+ phi_v1 = ABS(arg1);
+ phi_v0 = arg3 > 0 ? (s16)(Math_Coss(arg3) * arg3) : arg3;
+ sp1C = arg2 - phi_v0;
if (ABS(sp1C) < phi_v1) {
phi_a2 = (1.0f / camera->unk_C0.y) * 3.0f;
} else {
phi_a2 = (1.0f / camera->unk_C0.y) * func_800437F0(0.8f, 1.0f - phi_v0 * (1.0f / OREG(5)));
}
- func_8004391C(sp1C, b, phi_a2, 0xa);
+ func_8004391C(sp1C, arg1, phi_a2, 0xa);
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80046B44.s")
@@ -743,7 +2397,7 @@ void func_80046B44(Camera* camera, s16 b, s16 c, s16 d) {
#ifdef NON_MATCHING
// stack, regalloc, tiny bit of ordering
-s16 func_80046CB4(Camera* camera, s16 b, s16 c, f32 d, f32 e) {
+s16 func_80046CB4(Camera* camera, s16 arg1, s16 arg2, f32 arg3, f32 arg4) {
f32 sp34;
s16 sp1C;
f32 temp_ret;
@@ -751,190 +2405,422 @@ s16 func_80046CB4(Camera* camera, s16 b, s16 c, f32 d, f32 e) {
s16 temp;
if (camera->unk_D8 > 0.001f) {
- temp = b - 0x7fff; // this is probably some kind of cast that I'm too stupid to know
- sp1C = c - temp;
- phi_f14 = (s16)(sp1C - 0x7fff) * (1.0f / 32767.0f);
+ temp = arg1 - 0x7FFF;
+ sp1C = arg2 - temp;
+ phi_f14 = (s16)(sp1C - 0x7FFF) * (1.0f / 32767.0f);
} else {
- temp = b - 0x7fff;
- sp1C = c - temp;
+ temp = arg1 - 0x7FFF;
+ sp1C = arg2 - temp;
phi_f14 = OREG(48) * 0.01f;
}
- temp_ret = func_800437F0(d, phi_f14);
- sp34 = ((1.0f - temp_ret) * e) + temp_ret;
+ temp_ret = func_800437F0(arg3, phi_f14);
+ sp34 = ((1.0f - temp_ret) * arg4) + temp_ret;
if (sp34 < 0.0f) {
sp34 = 0.0f;
}
// ordering stuff here
- return (s16)((sp1C * sp34) * (1.0f / camera->unk_C0.z) * func_800437F0(0.5f, camera->unk_E0)) + b;
+ return arg1 + (s16)(sp1C * sp34 * (1.0f / camera->unk_C0.z) * func_800437F0(0.5f, camera->unk_E0)) + arg1;
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80046CB4.s")
#endif
-// 364 lines
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80046E20.s")
s32 func_80047394(Camera* camera) {
return 1;
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800473A0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal1.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal2.s")
+#define NEXTSETTING ((values++)->val)
+#ifdef NON_MATCHING
+s32 Camera_Normal3(Camera* camera) {
+ f32 sp98;
+ f32 sp94;
+ f32 sp90;
+ f32 sp8C;
+ VecSph sp84;
+ VecSph sp7C;
+ VecSph sp74;
+ Vec3f* sp48;
+ Vec3f* sp44;
+ Vec3f* sp40;
+ f32 temp_f0;
+ f32 temp_f0_3;
+ f32 temp_f16;
+ f32 temp_f16_2;
+ f32 temp_f2;
+ f32 temp_f6;
+ s16 temp_t3;
+ s16 temp_v0_2;
+ s16 temp_v0_3;
+ s16 temp_v0_4;
+ s32 temp_a0;
+ s16 phi_v1;
+ s32 phi_v1_2;
+ s32 phi_a0;
+ CameraModeValue* values;
+ Normal3* normal3 = &camera->unk_00.normal3;
+ Normal3_Unk20* unk20;
+ PosRot* playerPostRot;
+
+ temp_f2 = Player_GetCameraYOffset(camera->player);
+ if ((((camera->unk_15E == 0) || (camera->unk_15E == 0xA)) || (camera->unk_15E == 0x14)) || QREG(0)) {
+ temp_f2 *= 0.01f;
+ values = sCameraSettings[camera->setting].cameraModes[camera->mode].values;
+ // temp_t2 = sCameraSettings[camera->setting].unk_00 + (camera->mode * 8);
+ // temp_t3 = *temp_t2->unk4;
+ // temp_v0 = temp_t2->unk4 + 0x20;
+ normal3->unk_00 = temp_f2 * NEXTSETTING;
+ // normal3->unk_00 = (f32) ((f32) temp_t3 * temp_f2);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80047F64.s")
+ normal3->unk_04 = temp_f2 * NEXTSETTING;
+ // normal3->unk_04 = (f32) ((f32) temp_v0->unk-1C * temp_f2);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80048804.s")
+ normal3->unk_08 = temp_f2 * NEXTSETTING;
+ // normal3->unk_08 = (f32) ((f32) temp_v0->unk-18 * temp_f2);
-s32 func_80048FCC(Camera* camera) {
+ normal3->unk_1C = (65535.0f / 360.0f) * NEXTSETTING + 0.5f;
+ // normal3->unk_1C = (s16) (s32) (((f32) temp_v0->unk-14 * 182.0416717529297f) + 0.5f);
+
+ normal3->unk_0C = NEXTSETTING;
+ // normal3->unk_0C = (f32) temp_v0->unk-10;
+
+ normal3->unk_10 = NEXTSETTING;
+ // normal3->unk_10 = (f32) temp_v0->unk-C;
+
+ normal3->unk_14 = NEXTSETTING;
+ // normal3->unk_14 = (f32) temp_v0->unk-8;
+
+ normal3->unk_18 = NEXTSETTING * 0.01f;
+ // normal3->unk_18 = (f32) ((f32) temp_v0->unk-4 * 0.009999999776482582f);
+
+ normal3->unk_1E = NEXTSETTING;
+ // normal3->unk_1E = (s16) temp_v0->unk0;
+ }
+
+ if (QREG(0)) {
+ Camera_CopyPREGToModeValues(camera);
+ }
+
+ sp48 = &camera->eye;
+ sp44 = &camera->at;
+ sp40 = &camera->eyeNext;
+ playerPostRot = &camera->playerPosRot;
+ func_8007C490(&sp7C, sp44, sp48);
+ func_8007C490(&sp74, sp44, sp40);
+ D_8011D3E8 = 1;
+ D_8011D3A0.w = normal3->unk_1E;
+ unk20 = &normal3->unk_20;
+
+ // ordering here.
+ switch (camera->unk_15E) {
+ case 0:
+ case 0xA:
+ case 0x14:
+ case 0x19:
+ unk20->unk_0C = 0;
+ unk20->unk_24 = 0;
+ unk20->unk_1C = 0;
+ unk20->unk_14 = unk20->unk_16 = unk20->unk_18 = 0;
+ // unk20->unk_14 = (s16) unk20->unk_18;
+ // unk20->unk_16 = (s16) unk20->unk_18;
+
+ unk20->unk_20 = camera->unk_104;
+ unk20->unk_10 = normal3->unk_0C;
+ unk20->unk_2A = 0xA;
+ unk20->unk_26 = (1.0f / OREG(23)) * (s16)(playerPostRot->rot.y - 0x7FFF - sp7C.theta);
+ unk20->unk_28 = OREG(23);
+ camera->unk_15E = 1;
+ unk20->unk_1A = 0;
+ break;
+ default:
+ break;
+ }
+ DECR(unk20->unk_2A);
+ /*temp_v0_2 = unk20->unk_2A;
+ if (temp_v0_2 != 0) {
+ unk20->unk_2A = (s16) (temp_v0_2 - 1);
+ }
+ */
+ temp_f6 = OREG(25) * 0.01f;
+ temp_f16 = temp_f6 * camera->unk_E0;
+ sp94 = (OREG(26) * 0.01f) * camera->unk_E0;
+ temp_v0_3 = unk20->unk_1A;
+ if (temp_v0_3 != 0) {
+ camera->unk_C0.z = func_8004389C(normal3->unk_0C + (temp_v0_3 * 2), camera->unk_C0.z, temp_f16, 0.1f);
+ camera->unk_C0.y = func_8004389C((f32)OREG(7) + (unk20->unk_1A * 2), camera->unk_C0.y, sp94, 0.1f);
+ unk20->unk_1A--;
+ } else {
+ camera->unk_C0.z = func_8004389C(normal3->unk_0C, camera->unk_C0.z, temp_f16, 0.1f);
+ camera->unk_C0.y = func_8004389C(OREG(7), camera->unk_C0.y, sp94, 0.1f);
+ }
+ camera->unk_CC.x = func_8004389C(OREG(2) * 0.01f, camera->unk_CC.x, temp_f16, 0.1f);
+ camera->unk_CC.y = func_8004389C(OREG(3) * 0.01f, camera->unk_CC.y, sp94, 0.1f);
+ camera->unk_CC.z = func_8004389C(OREG(4) * 0.01f, camera->unk_CC.z, sp94, 0.1f);
+ temp_f0 = (1.0f / normal3->unk_10) * 0.5f;
+ unk20->unk_24 = func_8004391C(func_80044ADC(camera, sp7C.theta - 0x7FFF, 1), unk20->unk_24,
+ temp_f0 + (temp_f0 * (1.0f - camera->unk_E0)), 0xF);
+ func_800466F8(camera, &sp74, normal3->unk_00, &unk20->unk_20, 1);
+ sp90 = (normal3->unk_08 + normal3->unk_04) * 0.5f;
+ func_8007C490(&sp84, sp44, sp40);
+ sp84.r = func_800469C0(camera, sp84.r, normal3->unk_04, normal3->unk_08, unk20->unk_2A);
+ camera->dist = sp84.r;
+ if (0.001f < camera->unk_D8) {
+ sp84.r += (sp90 - sp84.r) * 0.002f;
+ }
+ sp84.phi = func_8004391C(normal3->unk_1C - unk20->unk_24, sp74.phi, 1.0f / camera->unk_C0.y, 0xA);
+ if (OREG(5) < sp84.phi) {
+ sp84.phi = OREG(5);
+ }
+ if (sp84.phi < OREG(34)) {
+ sp84.phi = OREG(34);
+ }
+
+ // Probably some type of abs/clamp.
+ temp_a0 = playerPostRot->rot.y - (sp74.theta - 0x7FFF);
+ phi_v1_2 = -temp_a0;
+ if (temp_a0 >= 0) {
+ phi_v1_2 = temp_a0;
+ }
+ phi_a0 = temp_a0;
+ if (phi_v1_2 >= 0x2AF9) {
+ if (temp_a0 > 0) {
+ phi_a0 = 0x2AF8;
+ } else {
+ phi_a0 = -0x2AF8;
+ }
+ }
+ temp_f16_2 = (phi_a0 * ((camera->unk_E0 * (1.0f - 0.5f)) + 0.5f)) / camera->unk_C0.z;
+ if ((150.0f * (1.0f - camera->unk_E0)) < fabsf(temp_f16_2)) {
+ sp84.theta = sp74.theta + temp_f16_2;
+ // sp8A = sp74.theta + temp_f16_2;
+ } else {
+ sp84.theta = sp74.theta;
+ // sp8A = sp7A;
+ }
+ if (unk20->unk_28 > 0) {
+ sp84.theta += unk20->unk_26;
+ // sp8A = sp8A + unk20->unk_26;
+
+ unk20->unk_28--;
+ }
+ func_80043C28(sp40, sp44, &sp84);
+ if (camera->status == 7) {
+ func_80046E20(camera, &sp84, normal3->unk_04, normal3->unk_0C, &sp8C, &normal3->unk_20);
+ } else {
+ *sp48 = *sp40;
+ }
+ camera->fov = func_8004389C(normal3->unk_14, camera->fov, camera->unk_CC.z, 1.0f);
+ camera->roll = func_8004391C(0, camera->roll, 0.5f, 0xA);
+ camera->unk_100 = func_800450A4(camera, normal3->unk_18);
+ return 1;
+}
+#else
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal3.s")
+#endif
+
+s32 Camera_Normal4(Camera* camera) {
return func_80047394(camera);
}
-s32 func_80048FEC(Camera* camera) {
+s32 Camera_Normal0(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8004900C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel1.s")
-s32 func_80049984(Camera* camera) {
+s32 Camera_Parallel2(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800499A4.s")
+void Camera_Parallel3(Camera* camera) {
+ CameraModeValue* reg = &sCameraSettings[camera->setting].cameraModes[camera->mode].values[0];
+ s16 val = reg->val;
-s32 func_80049A08(Camera* camera) {
+ D_8011D3A0.w = val;
+ if (val & 1) {
+ camera->unk_14C |= 0x400;
+ }
+ if (val & 2) {
+ camera->unk_14C |= 0x10;
+ }
+}
+
+s32 Camera_Parallel4(Camera* camera) {
return func_80047394(camera);
}
-s32 func_80049A28(Camera* camera) {
+s32 Camera_Parallel0(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80049A48.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8004A250.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8004ACE0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump3.s")
-s32 func_8004B560(Camera* camera) {
+s32 Camera_Jump4(Camera* camera) {
return func_80047394(camera);
}
-s32 func_8004B580(Camera* camera) {
+s32 Camera_Jump0(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8004B5A0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle1.s")
-s32 func_8004C5F4(Camera* camera) {
+s32 Camera_Battle2(Camera* camera) {
return func_80047394(camera);
}
-s32 func_8004C614(Camera* camera) {
+s32 Camera_Battle3(Camera* camera) {
func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8004C634.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle4.s")
-s32 func_8004CA4C(Camera* camera) {
+s32 Camera_Battle0(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8004CA6C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn1.s")
-s32 func_8004D9C4(Camera* camera) {
+s32 Camera_KeepOn2(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8004D9E4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8004E460.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8004F3A4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8004F6A4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8004F9D8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8004FDE4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80050068.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed4.s")
-s32 func_8005043C(Camera* camera) {
+s32 Camera_Fixed0(Camera* camera) {
return func_80047394(camera);
}
-s32 func_8005045C(Camera* camera) {
+s32 Camera_Subj1(Camera* camera) {
return func_80047394(camera);
}
-s32 func_8005047C(Camera* camera) {
+s32 Camera_Subj2(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8005049C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subj3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80050B24.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subj4.s")
-s32 func_800511A0(Camera* camera) {
+s32 Camera_Subj0(Camera* camera) {
return func_80047394(camera);
}
-s32 func_800511C0(Camera* camera) {
+s32 Camera_Data0(Camera* camera) {
return func_80047394(camera);
}
-s32 func_800511E0(Camera* camera) {
+s32 Camera_Data1(Camera* camera) {
osSyncPrintf("chau!chau!\n");
- return func_800473A0(camera);
+ return Camera_Normal1(camera);
}
-s32 func_80051210(Camera* camera) {
+s32 Camera_Data2(Camera* camera) {
return func_80047394(camera);
}
-s32 func_80051230(Camera* camera) {
+s32 Camera_Data3(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80051250.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800515A4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80051B3C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80051F58.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80052460.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique0.s")
-s32 func_800529D8(Camera* camera) {
+s32 Camera_Unique4(Camera* camera) {
return func_80047394(camera);
}
-s32 func_800529F8(Camera* camera) {
+s32 Camera_Unique5(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80052A18.s")
+s32 Camera_Unique6(Camera* camera) {
+ CameraModeValue* val;
+ s32 pad;
+ Vec3f sp2C;
+ Vec3f* playerPosRot;
+ f32 offset;
+
+ if (camera->unk_15E == 0 || camera->unk_15E == 0xA || camera->unk_15E == 0x14 || QREG(0)) {
+ val = sCameraSettings[camera->setting].cameraModes[camera->mode].values;
+ camera->unk_00.sh[0] = val[0].val;
+ }
+ if (QREG(0)) {
+ Camera_CopyPREGToModeValues(camera);
+ }
+ D_8011D3A0.w = camera->unk_00.sh[0];
+ if (camera->unk_15E == 0) {
+ camera->unk_15E++;
+ func_80043ABC(camera);
+ }
+ if (camera->player != NULL) {
+ offset = Player_GetCameraYOffset(camera->player);
+ playerPosRot = &camera->playerPosRot.pos;
+ sp2C = *playerPosRot;
+ sp2C.y += offset;
+ camera->dist = func_8007BF90(&sp2C, &camera->eye);
+ camera->unk_E4.x = camera->at.x - playerPosRot->x;
+ camera->unk_E4.y = camera->at.y - playerPosRot->y;
+ camera->unk_E4.z = camera->at.z - playerPosRot->z;
+ } else {
+ camera->dist = func_8007BF90(&camera->at, &camera->eye);
+ }
+ if (camera->unk_00.sh[0] & 1) {
+ if (camera->unk_160 > 0) {
+ camera->unk_160--;
+ }
+ }
+ return 1;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80052B90.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique7.s")
-s32 func_80052DEC(Camera* camera) {
+s32 Camera_Unique8(Camera* camera) {
return func_80047394(camera);
}
-// Very long function (1,444 lines), 1 jtbl
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80052E0C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique9.s")
-void Camera_DebugPrintSplineArray(char* name, s16 length, SplineData splines[]) {
+void Camera_DebugPrintSplineArray(char* name, s16 length, CutsceneCameraPoint cameraPoints[]) {
s32 i;
osSyncPrintf("static SplinedatZ %s[] = {\n", name);
for (i = 0; i < length; i++) {
osSyncPrintf(" /* key frame %2d */ {\n", i);
- osSyncPrintf(" /* code */ %d,\n", splines[i].code);
- osSyncPrintf(" /* z */ %d,\n", splines[i].z);
- osSyncPrintf(" /* T */ %d,\n", splines[i].T);
- osSyncPrintf(" /* zoom */ %f,\n", splines[i].zoom);
- osSyncPrintf(" /* pos */ { %d, %d, %d }\n", splines[i].pos.x, splines[i].pos.y, splines[i].pos.z);
+ osSyncPrintf(" /* code */ %d,\n", cameraPoints[i].continueFlag);
+ osSyncPrintf(" /* z */ %d,\n", cameraPoints[i].cameraRoll);
+ osSyncPrintf(" /* T */ %d,\n", cameraPoints[i].nextPointFrame);
+ osSyncPrintf(" /* zoom */ %f,\n", cameraPoints[i].viewAngle);
+ osSyncPrintf(" /* pos */ { %d, %d, %d }\n", cameraPoints[i].pos.x, cameraPoints[i].pos.y,
+ cameraPoints[i].pos.z);
osSyncPrintf(" },\n");
}
osSyncPrintf("};\n\n");
@@ -946,63 +2832,226 @@ void Camera_Vec3fCopy(Vec3f* src, Vec3f* dst) {
dst->z = src->z;
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80054478.s")
+void func_80054478(PosRot* arg0, Vec3f* arg1, Vec3f* arg2) {
+ VecSph sp28;
+ Vec3f sp1C;
+
+ Camera_Vec3fCopy(arg1, &sp1C);
+ func_8007C3F4(&sp28, &sp1C);
+ sp28.theta += arg0->rot.y;
+ func_80043C28(arg2, &arg0->pos, &sp28);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800544D0.s")
+s32 func_800BB2B4(Vec3f*, f32*, f32*, CutsceneCameraPoint*, s16*, Demo1_unk_04*);
-s32 func_80054774(Camera* camera) {
+#ifdef NON_MATCHING
+s32 Camera_Demo1(Camera* camera) {
+ Vec3f* at;
+ Vec3f* eyeNext;
+ Vec3f* eye;
+ char* t;
+ CutsceneCameraPoint* sp84;
+ CutsceneCameraPoint* sp80;
+ PosRot sp68;
+ Vec3f sp5C;
+ Vec3f sp50;
+ f32 sp4C;
+ s16* relativeToPlayer;
+ CameraModeValue* values;
+ Demo1_unk_04* unk_04;
+ s32 pad;
+
+ sp84 = camera->atPoints;
+ sp80 = camera->eyePoints;
+ if (camera->unk_15E == 0 || camera->unk_15E == 0xA || camera->unk_15E == 0x14 || QREG(0)) {
+ values = sCameraSettings[camera->setting].cameraModes[camera->mode].values;
+ camera->unk_00.demo1.unk_00 = values->val;
+ }
+ D_8011D3A0.w = camera->unk_00.demo1.unk_00;
+ unk_04 = &camera->unk_00.demo1.unk_04;
+
+ relativeToPlayer = &camera->relativeToPlayer;
+ eyeNext = &camera->eyeNext;
+ at = &camera->at;
+ eye = &camera->eye;
+ switch (camera->unk_15E) {
+ case 0:
+ unk_04->unk_04 = 0;
+ unk_04->unk_00 = 0.0f;
+ camera->unk_15E++;
+ // absolute / relative
+ t = *relativeToPlayer == 0 ? "絶対" : "相対";
+ osSyncPrintf("\x1b[1m%06u:\x1b[m camera: spline demo: start %s \n", camera->globalCtx->state.frames, t);
+ if (PREG(93)) {
+ Camera_DebugPrintSplineArray("CENTER", 5, sp84);
+ Camera_DebugPrintSplineArray(" EYE", 5, sp80);
+ }
+ case 1:
+ // follow CutsceneCameraPoints. function returns 1 if at the end.
+ // unk_15E appears to be some kind of state of the cutscene? 0 is init, 1 is update, anything else is stop.
+ if (func_800BB2B4(&sp5C, &sp4C, &camera->fov, sp80, &unk_04->unk_04, unk_04) ||
+ func_800BB2B4(&sp50, &sp4C, &camera->fov, sp84, &unk_04->unk_04, unk_04)) {
+ camera->unk_15E++;
+ }
+ if (*relativeToPlayer) {
+ if (camera->player != NULL && camera->player->actor.update != NULL) {
+ func_8002EF14(&sp68, &camera->player->actor);
+ func_80054478(&sp68, &sp5C, eyeNext);
+ func_80054478(&sp68, &sp50, at);
+ } else {
+ osSyncPrintf("\x1b[41;37mcamera: spline demo: owner dead\n\x1b[m");
+ }
+ } else {
+ Camera_Vec3fCopy(&sp5C, eyeNext);
+ Camera_Vec3fCopy(&sp50, at);
+ }
+ *eye = *eyeNext;
+ camera->roll = sp4C * 256.0f;
+ camera->dist = func_8007BF90(at, eye);
+ break;
+ }
+ return 1;
+}
+#else
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo1.s")
+#endif
+
+s32 Camera_Demo2(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80054794.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo3.s")
-s32 func_8005527C(Camera* camera) {
+s32 Camera_Demo4(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8005529C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo5.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80055C78.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo6.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80055F64.s")
+void Camera_Demo7(Camera* camera) {
+ if (camera->unk_15E == 0) {
+ camera->unk_14C &= ~4;
+ camera->unk_14C |= 0x1000;
+ camera->unk_15E++;
+ }
+}
-s32 func_80055F98(Camera* camera) {
+s32 Camera_Demo8(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80055FB8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo9.s")
-s32 func_80056430(Camera* camera) {
+s32 Camera_Demo0(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80056450.s")
+s32 Camera_Special0(Camera* camera) {
+ s32 pad;
+ CameraModeValue* val;
+ Vec3f* playerPosRot;
+
+ if (camera->unk_15E == 0 || camera->unk_15E == 0xA || camera->unk_15E == 0x14 || QREG(0)) {
+ val = sCameraSettings[camera->setting].cameraModes[camera->mode].values;
+ camera->unk_00.spec0.unk_00 = val->val * 0.01f;
+ val++;
+ camera->unk_00.spec0.unk_04 = val->val;
+ }
+
+ if (QREG(0)) {
+ Camera_CopyPREGToModeValues(camera);
+ }
+
+ D_8011D3A0.w = camera->unk_00.spec0.unk_04;
+
+ if (camera->unk_15E == 0) {
+ camera->unk_15E++;
+ }
+ if ((camera->target == NULL) || (camera->target->update == NULL)) {
+ if (camera->target == NULL) {
+ osSyncPrintf(VT_COL(YELLOW, BLACK) "camera: warning: circle: target is not valid, stop!\n" VT_RST);
+ }
+ camera->target = NULL;
+ return true;
+ }
+
+ func_8002EEE4(&camera->targetPosRot, camera->target);
+ func_80043A3C(&camera->targetPosRot, &camera->at, camera->unk_00.f, camera->unk_00.f, 0.1f);
+ if (1) {
+ playerPosRot = &camera->playerPosRot.pos;
+ }
+ camera->unk_E4.x = camera->at.x - playerPosRot->x;
+ camera->unk_E4.y = camera->at.y - playerPosRot->y;
+ camera->unk_E4.z = camera->at.z - playerPosRot->z;
+ camera->dist = func_8007BF90(&camera->at, &camera->eye);
+ camera->unk_D8 = 0.0f;
+ if (camera->unk_160 > 0) {
+ camera->unk_160--;
+ }
+ return true;
+}
-s32 func_800565F4(Camera* camera) {
+s32 Camera_Special1(Camera* camera) {
return func_80047394(camera);
}
-s32 func_80056614(Camera* camera) {
- return func_80051B3C(camera);
+s32 Camera_Special2(Camera* camera) {
+ return Camera_Unique2(camera);
}
-s32 func_80056634(Camera* camera) {
+s32 Camera_Special3(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80056654.s")
+#ifdef NON_MATCHING
+s32 Camera_Special4(Camera* camera) {
+ PosRot sp3C;
+ s32 temp_v0;
+ s16 sp3A;
+ s16* unk_160 = &camera->unk_160;
+
+ if (camera->unk_15E == 0) {
+ D_8011D3A0.w = 0x3200;
+ camera->unk_15E++;
+ camera->fov = 40.0f;
+ camera->unk_00.sh[0] = *unk_160;
+ }
+ camera->fov = func_8004389C(80.0f, camera->fov, 1.0f / *unk_160, 0.1f);
+ if ((camera->unk_00.sh[0] - *unk_160) < 0xF) {
+ *unk_160 = *unk_160 - 1;
+ return 0;
+ }
+ camera->roll = -0x1F4;
+ func_8002EF14(&sp3C, camera->target);
+ camera->at = sp3C.pos;
+ camera->at.y -= 150.0f;
+ temp_v0 = (s16)(sp3C.rot.y - 0x7FFF) + 0x3E8;
+ sp3A = temp_v0;
+ camera->eyeNext.y = (f32)camera->at.y;
+ camera->eye.x = camera->eyeNext.x = (Math_Sins(temp_v0) * 780.0f) + camera->at.x;
+ camera->eye.z = camera->eyeNext.z = (Math_Coss(sp3A) * 780.0f) + camera->at.z;
+ camera->eye.y = sp3C.pos.y;
+ camera->eye.y = func_80044510(camera, &camera->eye) + 20.0f;
+ camera->unk_160--;
+ return 1;
+}
+#else
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special4.s")
+#endif
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800567F8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special5.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80056C20.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special7.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80056F6C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special6.s")
-s32 func_80057428(Camera* camera) {
+s32 Camera_Special8(Camera* camera) {
return func_80047394(camera);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80057448.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special9.s")
Camera* func_80057B98(View* view, CollisionContext* colCtx, GlobalContext* globalCtx) {
Camera* newCamera = ZeldaArena_MallocDebug(sizeof(*newCamera), "../z_camera.c", 9370);
@@ -1024,129 +3073,83 @@ void func_80057C14(Camera* camera) {
}
}
-// 225 lines
#ifdef NON_MATCHING
-
-s16 D_80119EE0[] = {
- 0xC471, 0xC000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0005, 0x0005, 0x0005, 0x38A4,
- 0x0014, 0x0010, 0x0096, 0x0019, 0x0096, 0x0006, 0x000A, 0x000A, 0x0000, 0x0000, 0x0001, 0x0064, 0x00FA, 0x0078,
- 0x0050, 0x001E, 0x0078, 0x0004, 0x0001, 0x0032, 0x0014, 0x0708, 0x0032, 0x0032, 0x0032, 0x0014, 0x0014, 0xFFF6,
- 0xEAAC, 0xDC74, 0xFFFA, 0x0008, 0x000F, 0x004B, 0x003C, 0x000C, 0x006E, 0x0028, 0x0032, 0x00FA,
-};
-
-s16 D_80119F4C = 53;
-
-s16 D_80119F50[] = {
- 0xFFEC, 0x00C8, 0x012C, 0x000A, 0x000C, 0x000A, 0x0023, 0x003C, 0x003C, 0x0003, 0x0000, 0xFFD8, 0x0014, 0x0019,
- 0x002D, 0xFFFB, 0x000F, 0x000F, 0x0014, 0x0000, 0x0000, 0x0000, 0x0006, 0x003C, 0x001E, 0x0000, 0x0005,
-};
-
-s16 D_80119F88 = 27;
-
-// gameInfoRegs init'd?
-s32 D_8011D390 = 0;
-
-// Number of times func_80057C6C has been called? used for the camera ID
-s16 D_8011D39C = 0;
-
-s32 D_8011D3A4 = 0x02;
-s32 D_8011D3A8 = 0x20;
-
-s16 D_8011D3A0 = 0;
-s32 D_8011D398 = -1;
-s32 D_8011D3F0 = 0;
-
-GlobalContext* D_8015BD7C;
-void* D_8015BD80;
-
-void func_800B958C(Camera* camera, void*);
-
void func_80057C6C(Camera* camera, View* view, CollisionContext* colCtx, GlobalContext* globalCtx) {
- s32 temp_a1;
+ Camera* temp_v0;
+ s16 temp_a1;
s32 temp_a1_2;
s32 temp_v1;
s32 temp_v1_2;
- s16 temp_v1_3;
- Camera* temp_t8;
- void* phi_a0;
+ s32 temp_v1_3;
+ s16* phi_a0;
s32 phi_v0;
s32 phi_v1;
- void* phi_a0_2;
+ s16* phi_a0_2;
s32 phi_v0_2;
s32 phi_v1_2;
s32 phi_a1;
s16 phi_v1_3;
s32 phi_v1_4;
s16 phi_a1_2;
-
- func_80106860(camera, 0, sizeof(*camera));
- if (D_8011D390 != 0) {
- for (phi_v1 = 0; phi_v1 < D_80119F4C; phi_v1++) {
- QREG(phi_v1) = D_80119EE0[phi_v1];
+ s32 i;
+ s32 j;
+ Camera* cam;
+ s16 t;
+
+ func_80106860((void*)camera, 0, 0x16CU);
+ if (sInitRegs) {
+ for (i = 0; i < sOREGInitCnt; i++) {
+ OREG(i) = sOREGInit[i];
}
- for (phi_v1 = 0; phi_v1 < D_80119F88; phi_v1++) {
- YREG(phi_v1) = D_80119F50[phi_v1];
+ for (i = 0; i < sPREGInitCnt; i++) {
+ PREG(i) = sPREGInit[i];
}
- func_800B958C(camera, &D_8015BD80);
- D_8011D390 = 0;
+ func_800B958C(camera, &D_8015BD80, &gGameInfo);
+ sInitRegs = false;
PREG(88) = -1;
}
camera->globalCtx = D_8015BD7C = globalCtx;
func_800B4D58(&D_8015BD80, camera);
- temp_a1 = (s32)(D_8011D39C << 0x10) >> 0x10;
+ temp_a1 = D_8011D39C;
D_8011D39C++;
- phi_a1_2 = temp_a1;
- if (temp_a1 != 0) {
-
- phi_a1 = temp_a1;
- loop_11:
- if (phi_a1 == 0) {
- D_8011D39C = (s16)(D_8011D39C + 1);
+ for (temp_a1 = D_8011D39C, D_8011D39C++; temp_a1 != 0; temp_a1 = D_8011D39C, D_8011D39C++) {
+ if (temp_a1 == 0) {
+ D_8011D39C++;
}
- phi_v1_3 = 0;
- loop_14:
- temp_t8 = camera->globalCtx->cameraPtrs[phi_v1_3];
- if ((temp_t8 == 0) || (phi_v1_4 = phi_v1_3, (phi_a1 != temp_t8->uid))) {
- temp_v1_3 = phi_v1_3 + 1;
- phi_v1_3 = temp_v1_3;
- phi_v1_4 = temp_v1_3;
- if (temp_v1_3 < 4) {
- goto loop_14;
+ for (phi_v1_3 = 0; phi_v1_3 < 4; phi_v1_3++) {
+ temp_v0 = camera->globalCtx->cameraPtrs[phi_v1_3];
+ if (temp_v0 != NULL && temp_a1 == temp_v0->uid) {
+ break;
}
}
- phi_a1_2 = (s16)phi_a1;
- if (phi_v1_4 != 4) {
- temp_a1_2 = D_8011D39C;
- D_8011D39C++;
- phi_a1 = temp_a1_2;
- phi_a1_2 = temp_a1_2;
- if (temp_a1_2 != 0) {
- goto loop_11;
- }
+ if (phi_v1_3 == 4) {
+ break;
}
}
+
camera->unk_134.y = 0x3FFF;
camera->unk_13A = camera->unk_134;
- camera->uid = phi_a1_2;
+ camera->uid = temp_a1;
camera->unk_C0.x = 10.0f;
camera->unk_C0.z = 10.0f;
camera->unk_68.y = 1.0f;
camera->unk_68.x = 0.0f;
camera->unk_68.z = 0.0f;
- camera->unk_FC = 60.0f;
+ camera->fov = 60.0f;
+ D_8011D3A8 = 0x20;
+ D_8011D3A4 = 0;
camera->unk_C0.y = OREG(7);
camera->unk_CC.x = OREG(2) * 0.01f;
camera->unk_CC.y = OREG(3) * 0.01f;
camera->unk_CC.z = OREG(4) * 0.01f;
- D_8011D3A8 = 0x20;
- D_8011D3A4 = 0;
+
camera->unk_14C = 0;
- camera->unk_154 = 0x21;
+ camera->unk_154 = 0x21U;
camera->unk_166 = -1;
- camera->unk_144 = 0;
+ camera->mode = 0;
camera->unk_146 = 0x32;
camera->unk_168 = 0x7FFF;
camera->unk_160 = -1;
@@ -1157,45 +3160,45 @@ void func_80057C6C(Camera* camera, View* view, CollisionContext* colCtx, GlobalC
camera->unk_80.x = 0.0f;
camera->unk_80.y = 0.0f;
camera->unk_80.z = 0.0f;
- camera->unk_142 = camera->unk_154;
+ camera->setting = camera->unk_154;
camera->unk_148 = camera->unk_166;
camera->unk_100 = 1.0f;
- D_8011D3A0 = 0xFF00;
+ D_8011D3A0.w = 0xFF00;
D_8011D398 = -1;
D_8011D3F0 = 3;
- osSyncPrintf("\x1b[34mcamera: initialize --- \x1b[m UID %d\n", camera->uid);
+ osSyncPrintf(VT_FGCOL(BLUE) "camera: initialize --- " VT_RST " UID %d\n", camera->uid);
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80057C6C.s")
#endif
-s32 func_8005AD40(Camera* camera, s32 a, s16 b, f32 c, s16 d, s16 e, s16 f);
+s32 func_8005AD40(Camera* camera, Actor* doorActor, s16 arg2, f32 arg3, s16 arg4, s16 arg5, s16 arg6);
void func_80057FC4(Camera* camera) {
if (camera != &camera->globalCtx->cameras[0]) {
- camera->unk_154 = camera->unk_142 = 33;
+ camera->unk_154 = camera->setting = CAM_SET_FREE0;
camera->unk_14C &= ~0x4;
} else if (camera->globalCtx->roomCtx.curRoom.mesh->polygon.type != 1) {
switch (camera->globalCtx->roomCtx.curRoom.unk_03) {
case 1:
func_8005AD40(camera, 0, -99, 0, 0, 18, 10);
- camera->unk_154 = camera->unk_142 = 3;
+ camera->unk_154 = camera->setting = CAM_SET_DUNGEON0;
break;
case 0:
osSyncPrintf("camera: room type: default set field\n");
func_8005AD40(camera, 0, -99, 0, 0, 18, 10);
- camera->unk_154 = camera->unk_142 = 1;
+ camera->unk_154 = camera->setting = CAM_SET_NORMAL0;
break;
default:
osSyncPrintf("camera: room type: default set etc (%d)\n", camera->globalCtx->roomCtx.curRoom.unk_03);
func_8005AD40(camera, 0, -99, 0, 0, 18, 10);
- camera->unk_154 = camera->unk_142 = 1;
+ camera->unk_154 = camera->setting = CAM_SET_NORMAL0;
camera->unk_14C |= 4;
break;
}
} else {
osSyncPrintf("camera: room type: prerender\n");
- camera->unk_154 = camera->unk_142 = 33;
+ camera->unk_154 = camera->setting = CAM_SET_FREE0;
camera->unk_14C &= ~0x4;
}
}
@@ -1203,33 +3206,75 @@ void func_80057FC4(Camera* camera) {
void Camera_Stub80058140(Camera* camera) {
}
-// 135 lines (has lwl/lwr)
+#ifdef NON_MATCHING
+void func_80058148(Camera* camera, Player* player) {
+ s32 pad;
+ PosRot sp54;
+ VecSph sp4C;
+ s32 sp48;
+ Vec3f sp3C;
+ f32 temp_f0;
+
+ func_8002EF44(&sp54, &player->actor);
+ temp_f0 = Player_GetCameraYOffset(player);
+ camera->player = player;
+ camera->playerPosRot = sp54;
+ sp4C.r = 180.0f;
+ camera->dist = 180.0f;
+ camera->unk_134.y = sp54.rot.y;
+ sp4C.phi = 0x71C;
+ sp4C.theta = camera->unk_134.y - 0x7FFF;
+ camera->unk_134.x = 0x71C;
+ camera->unk_134.z = 0;
+ camera->unk_13A = camera->unk_134;
+ camera->unk_D8 = 0.0f;
+ camera->unk_F0.y = 0.0f;
+ camera->at = sp54.pos;
+ camera->unk_E4.y = temp_f0;
+ camera->unk_E4.x = 0.0f;
+ camera->unk_E4.z = 0.0f;
+ camera->at.y += temp_f0;
+ func_80043C28(&camera->eyeNext, &camera->at, &sp4C);
+ camera->eye = camera->eyeNext;
+ camera->roll = 0;
+ camera->unk_68.z = 0.0f;
+ camera->unk_68.x = 0.0f;
+ camera->unk_68.y = 1.0f;
+ if (func_80044434(camera, &sp3C, &camera->at, &sp48) != -32000.0f) {
+ camera->unk_146 = sp48;
+ }
+ camera->unk_118 = -1;
+ camera->unk_11C = -1;
+ camera->unk_14C |= 4;
+ if (camera == &camera->globalCtx->cameras[0]) {
+ D_8011D3A0.w = 0xB200;
+ } else {
+ D_8011D3A0.w = 0;
+ }
+ func_80057FC4(camera);
+ camera->unk_14A = 0;
+ camera->unk_15C = 0;
+ camera->unk_156 = -1;
+ camera->unk_100 = 1.0f;
+ Camera_CopyModeValuesToPREG(camera, camera->mode);
+ func_8005B044();
+ osSyncPrintf(VT_FGCOL(BLUE) "camera: personalize ---" VT_RST "\n");
+ if (camera->unk_164 == 0) {
+ func_800588B4(camera);
+ }
+}
+#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80058148.s")
+#endif
-typedef struct {
- s16 val;
- s16 preg;
-} PRegSet;
-typedef struct {
- s16 unk_00;
- s16 unk_02;
- PRegSet* unk_04;
-} unk_D_8011D064_unk4;
-typedef struct {
- s32 unk_00;
- unk_D_8011D064_unk4* unk_04;
-} unk_D_8011D064;
-extern unk_D_8011D064 D_8011D064[];
-
-// 109 lines (unknown arrays)
#ifdef NON_MATCHING
void Camera_ChangeStatus(Camera* camera, s16 status) {
s32 temp_s1;
- unk_D_8011D064_unk4* temp_v0;
+ CameraMode* temp_v0;
s32 phi_a1;
s32 phi_a2;
s16 phi_v0;
- PRegSet* phi_s0;
+ CameraModeValue* phi_s0;
s32 phi_s1;
if (PREG(82)) {
@@ -1238,22 +3283,22 @@ void Camera_ChangeStatus(Camera* camera, s16 status) {
osSyncPrintf("camera: change camera status: cond %c%c\n", phi_a1, phi_a2);
}
if (PREG(82)) {
- osSyncPrintf("camera: res: stat (%d/%d/%d)\n", camera->unk_164, camera->unk_142, camera->unk_144);
+ osSyncPrintf("camera: res: stat (%d/%d/%d)\n", camera->unk_164, camera->setting, camera->mode);
}
if (status == 7 && camera->status != 7) {
- temp_v0 = &D_8011D064[camera->unk_142].unk_04[camera->unk_144];
- if (temp_v0->unk_02 > 0) {
- phi_s0 = temp_v0->unk_04;
+ temp_v0 = &sCameraSettings[camera->setting].cameraModes[camera->mode];
+ if (temp_v0->valueCnt > 0) {
+ phi_s0 = temp_v0->values;
phi_s1 = 0;
loop_12:
- PREG(phi_s0->preg) = phi_s0->val;
+ PREG(phi_s0->param) = phi_s0->val;
if (PREG(82) != 0) {
- osSyncPrintf("camera: change camera status: PREG(%02d) = %d\n", phi_s0->preg, phi_s0->val);
+ osSyncPrintf("camera: change camera status: PREG(%02d) = %d\n", phi_s0->param, phi_s0->val);
}
temp_s1 = phi_s1 + 1;
phi_s0 = phi_s0 + 4;
phi_s1 = temp_s1;
- if (temp_s1 < D_8011D064[camera->unk_142].unk_04[camera->unk_144].unk_02) {
+ if (temp_s1 < sCameraSettings[camera->setting].cameraModes[camera->mode].valueCnt) {
goto loop_12;
}
}
@@ -1264,10 +3309,8 @@ void Camera_ChangeStatus(Camera* camera, s16 status) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ChangeStatus.s")
#endif
-// 261 lines
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800584E8.s")
-// 296 lines
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800588B4.s")
s32 func_80058CF8(Camera* camera) {
@@ -1280,81 +3323,6 @@ s32 func_80058CF8(Camera* camera) {
return 1;
}
-// 92 lines (unknown arrays)
-extern s16 D_8011DAFC[];
-extern char D_80119F8C[][12];
-#if 0
-char D_80119F8C[][12] = {
- "NONE ",
- "NORMAL0 ",
- "NORMAL1 ",
- "DUNGEON0 ",
- "DUNGEON1 ",
- "NORMAL3 ",
- "HORSE0 ",
- "BOSS_GOMA ",
- "BOSS_DODO ",
- "BOSS_BARI ",
- "BOSS_FGANON",
- "BOSS_BAL ",
- "BOSS_SHADES",
- "BOSS_MOFA ",
- "BOSS_TWIN0 ",
- "BOSS_TWIN1 ",
- "BOSS_GANON1",
- "BOSS_GANON2",
- "TOWER0 ",
- "TOWER1 ",
- "FIXED0 ",
- "FIXED1 ",
- "CIRCLE0 ",
- "CIRCLE2 ",
- "CIRCLE3 ",
- "PREREND0 ",
- "PREREND1 ",
- "PREREND3 ",
- "DOOR0 ",
- "DOORC ",
- "RAIL3 ",
- "START0 ",
- "START1 ",
- "FREE0 ",
- "FREE2 ",
- "CIRCLE4 ",
- "CIRCLE5 ",
- "DEMO0 ",
- "DEMO1 ",
- "MORI1 ",
- "ITEM0 ",
- "ITEM1 ",
- "DEMO3 ",
- "DEMO4 ",
- "UFOBEAN ",
- "LIFTBEAN ",
- "SCENE0 ",
- "SCENE1 ",
- "HIDAN1 ",
- "HIDAN2 ",
- "MORI2 ",
- "MORI3 ",
- "TAKO ",
- "SPOT05A ",
- "SPOT05B ",
- "HIDAN3 ",
- "ITEM2 ",
- "CIRCLE6 ",
- "NORMAL2 ",
- "FISHING ",
- "DEMOC ",
- "UO_FIBER ",
- "DUNGEON2 ",
- "TEPPEN ",
- "CIRCLE7 ",
- "NORMAL4 ",
-};
-#endif
-extern GlobalContext* D_8015BD7C;
-extern s32 D_8011D398;
s32 func_80058D34(Camera* camera) {
s32 phi_a2 = 0;
@@ -1378,7 +3346,7 @@ s32 func_80058D34(Camera* camera) {
if (phi_a2 != 0) {
D_8011D398 = (D_8011D398 + phi_a2) % 6;
if (func_8005A77C(camera, D_8011DAFC[D_8011D398]) > 0) {
- osSyncPrintf("camera: force change SET to %s!\n", D_80119F8C[D_8011DAFC[D_8011D398]]);
+ osSyncPrintf("camera: force change SET to %s!\n", sCameraSettingNames[D_8011DAFC[D_8011D398]]);
}
}
}
@@ -1386,10 +3354,8 @@ s32 func_80058D34(Camera* camera) {
return 1;
}
-// 224 lines
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80058E8C.s")
-// Long function, 866 lines (lots of debug symbols)
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800591EC.s")
void func_80059EC8(Camera* camera) {
@@ -1438,34 +3404,30 @@ s32 func_8005A02C(Camera* camera) {
return 1;
}
-// 275 lines (has 2 jtbls)
#ifdef NON_MATCHING
-extern char D_8011A2A4[21][12];
-extern char D_80119F8C[66][12];
extern s32 D_8011DB14;
-s32 func_8005A04C(Camera* camera, s16 type, u8 arg2) {
+s32 Camera_ChangeMode(Camera* camera, s16 mode, u8 arg2) {
s32 phi_v0;
u32 temp_t8;
s32 phi_at;
if (QREG(89)) {
- osSyncPrintf("+=+(%d)+=+ recive request -> %s\n", camera->globalCtx->state.frames, D_8011A2A4[type]);
+ osSyncPrintf("+=+(%d)+=+ recive request -> %s\n", camera->globalCtx->state.frames, sCameraModeNames[mode]);
}
if ((camera->unk_14C & 0x20) && (arg2 == 0)) {
camera->unk_14A |= 0x20;
return -1;
- } else if (!((D_8011D064[camera->unk_142].unk_00 & 0x3FFFFFFF) & (1 << type))) {
- if (type == 6) {
- camera = camera;
- osSyncPrintf("camera: error sound\n", camera);
+ } else if (!(sCameraSettings[camera->setting].validModes & (1 << mode))) {
+ if (mode == CAM_MODE_SUBJECT) {
+ osSyncPrintf("camera: error sound\n");
func_80078884(NA_SE_SY_ERROR);
}
- if (camera->unk_144 != 0) {
- osSyncPrintf("\x1b[43;30mcamera: change camera mode: force NORMAL: %s %s refused\n\x1b[m",
- D_80119F8C[camera->unk_142], D_8011A2A4[type]);
- camera->unk_144 = 0;
- func_80045128(camera, camera->unk_144);
+ if (camera->mode != CAM_MODE_NORMAL) {
+ osSyncPrintf(VT_COL(YELLOW, BLACK) "camera: change camera mode: force NORMAL: %s %s refused\n" VT_RST,
+ sCameraSettingNames[camera->setting], sCameraModeNames[mode]);
+ camera->mode = CAM_MODE_NORMAL;
+ Camera_CopyModeValuesToPREG(camera, camera->mode);
func_8005A02C(camera);
phi_at = 0xC0000000;
} else {
@@ -1473,7 +3435,7 @@ s32 func_8005A04C(Camera* camera, s16 type, u8 arg2) {
camera->unk_14A = (s16)(camera->unk_14A | 2);
return 0;
}
- } else if ((type == camera->unk_144) && (arg2 == 0)) {
+ } else if ((mode == camera->mode) && (arg2 == 0)) {
camera->unk_14A |= 0x20;
camera->unk_14A |= 2;
return -1;
@@ -1481,10 +3443,10 @@ s32 func_8005A04C(Camera* camera, s16 type, u8 arg2) {
camera->unk_14A |= 0x20;
camera->unk_14A |= 2;
camera = camera;
- func_80045128(camera, type);
- temp_t8 = type - 1;
+ Camera_CopyModeValuesToPREG(camera, mode);
+ temp_t8 = mode - 1;
phi_v0 = 0;
- switch (type) {
+ switch (mode) {
default:
break;
case 5: // switch 1
@@ -1495,9 +3457,9 @@ s32 func_8005A04C(Camera* camera, s16 type, u8 arg2) {
break;
case 1: // switch 1
phi_v0 = 0;
- if (camera->unk_A8 != NULL) {
+ if (camera->target != NULL) {
phi_v0 = 0;
- if (camera->unk_A8->x != 0x32) {
+ if (camera->target->id != ACTOR_EN_BOOM) {
phi_v0 = 8;
}
}
@@ -1511,7 +3473,7 @@ s32 func_8005A04C(Camera* camera, s16 type, u8 arg2) {
break;
}
- switch (camera->unk_144) {
+ switch (camera->mode) {
default:
break;
case 6: // switch 2
@@ -1574,93 +3536,282 @@ s32 func_8005A04C(Camera* camera, s16 type, u8 arg2) {
}
}
func_8005A02C(camera);
- camera->unk_144 = type;
+ camera->mode = mode;
phi_at = 0x80000000;
}
- return type | phi_at;
+ return mode | phi_at;
}
#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8005A04C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ChangeMode.s")
#endif
-void func_8005A444(Camera* camera, s16 b) {
- func_8005A04C(camera, b, 0);
+void func_8005A444(Camera* camera, s16 arg1) {
+ Camera_ChangeMode(camera, arg1, 0);
}
-// 57 lines (unknown arrays)
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8005A470.s")
+s32 func_8005A470(Camera* camera, s16 arg1) {
+ s32 phi_return;
+
+ if (QREG(89) != 0) {
+ osSyncPrintf("+=+=+=+ recive asking -> %s (%s)\n", sCameraModeNames[arg1],
+ sCameraSettingNames[camera->setting]);
+ }
+ if (!(sCameraSettings[camera->setting].validModes & (1 << arg1))) {
+ return 0;
+ } else if (arg1 == camera->mode) {
+ return -1;
+ } else {
+ return arg1 | 0x80000000;
+ }
+}
+
+#ifdef NON_MATCHING
+s16 Camera_ChangeSetting(Camera* camera, s16 setting, s16 arg2) {
+ s16 temp_t1;
+ s32 t;
+
+ if ((camera->unk_14A & 1) && (((sCameraSettings[camera->setting].unk_00 & 0xF000000) >> 0x18) >=
+ (sCameraSettings[setting].unk_00 & 0xF000000) >> 0x18)) {
+ camera->unk_14A |= 0x10;
+ return -2;
+ }
+
+ if ((setting == CAM_SET_SPOT05A || setting == CAM_SET_SPOT05B) && LINK_IS_ADULT &&
+ (camera->globalCtx->sceneNum == 0x56)) {
+ camera->unk_14A |= 0x10;
+ return -5;
+ }
+
+ if (setting == CAM_SET_NONE || setting >= CAM_SET_MAX) {
+ osSyncPrintf(VT_COL(RED, WHITE) "camera: error: illegal camera set (%d) !!!!\n" VT_RST, setting);
+ return -0x63;
+ }
+
+ if (setting == camera->setting && !(arg2 & 1)) {
+ camera->unk_14A |= 0x10;
+ if (!(arg2 & 2)) {
+ camera->unk_14A |= 1;
+ }
+ return -1;
+ }
+
+ camera->unk_14A |= 0x10;
+
+ if (1 && !(arg2 & 2)) {
+ camera->unk_14A |= 1;
+ }
+
+ camera->unk_14C |= (0x8 | 0x4);
+ camera->unk_14C &= ~(0x1000 | 0x8);
+ if (!(sCameraSettings[camera->setting].unk_bit1)) {
+ camera->unk_154 = camera->setting;
+ }
+
+ t = sCameraSettings[camera->setting].unk_00 & 0x40000000;
+ if (arg2 & 8) {
+ camera->unk_148 = camera->unk_166;
+ camera->unk_166 = -1;
+ } else if (!(arg2 & 4)) {
+ if (!t) {
+ camera->unk_166 = camera->unk_148;
+ }
+ camera->unk_148 = -1;
+ }
+
+ camera->setting = setting;
-// 154 lines (unknown arrays)
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8005A548.s")
+ if (Camera_ChangeMode(camera, camera->mode, 1) >= 0) {
+ Camera_CopyModeValuesToPREG(camera, camera->mode);
+ }
+
+ osSyncPrintf(VT_SGR("1") "%06u:" VT_RST " camera: change camera[%d] set %s\n", camera->globalCtx->state.frames,
+ camera->unk_164, sCameraSettingNames[camera->setting]);
+
+ return setting;
+}
+#else
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ChangeSetting.s")
+#endif
-s32 func_8005A77C(Camera* camera, s16 b) {
- return func_8005A548(camera, b, 0);
+s32 func_8005A77C(Camera* camera, s16 setting) {
+ return Camera_ChangeSetting(camera, setting, 0);
}
-// 79 lines (unknown arrays)
+#ifdef NON_MATCHING
+s16 func_8005A7A8(Camera* arg0, s32 arg1) {
+ s16 temp_v0;
+ s16 temp_v1;
+
+ if (arg1 == -1 || arg1 == arg0->unk_148) {
+ arg0->unk_14A |= 0x40;
+ return -1;
+ } else if (!(arg0->unk_14A & 0x40)) {
+ temp_v0 = func_80044740(arg0, arg1);
+ arg0->unk_14A |= 0x40;
+ temp_v1 = (Camera_ChangeSetting(arg0, temp_v0, 5) < 0) ^ 1;
+ if ((temp_v1 != 0) || sCameraSettings[arg0->setting].unk_00 & 0x80000000) {
+ arg0->unk_148 = arg1;
+ arg0->unk_14A |= 4;
+ Camera_CopyModeValuesToPREG(arg0, arg0->mode);
+ } else if (temp_v1 < -1) {
+ osSyncPrintf(VT_COL(RED, WHITE) "camera: error: illegal camera ID (%d) !! (%d|%d|%d)\n" VT_RST, arg1,
+ arg0->unk_164, 0x32, temp_v0);
+ }
+ return temp_v1;
+ }
+}
+#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8005A7A8.s")
+#endif
-// 47 lines (has lwl/lwr)
+#ifdef NON_MATCHING
+// this code uses lw, then lhu. D_8015CD46 is probably part of a struct.
+Vec3s* func_8005A8C4(Vec3s* arg0, Camera* camera) {
+ if (D_8011D394 != 0) {
+ *arg0 = D_8015CE46;
+ return arg0;
+ } else {
+ *arg0 = camera->unk_134;
+ return arg0;
+ }
+}
+#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8005A8C4.s")
+#endif
+
+s16 func_8005A948(Camera* camera) {
+ Vec3s sp18;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8005A948.s")
+ func_8005A8C4(&sp18, camera);
+ return sp18.y;
+}
-// 80 lines (has lwl/lwr)
+#ifdef NON_MATCHING
+// Same issue as func_8005A8C4
+Vec3s* func_8005A970(Vec3s* arg0, Camera* arg1) {
+ if (D_8011D394 != 0) {
+ *arg0 = D_8015CE46;
+ return arg0;
+ } else {
+ *arg0 = arg1->unk_13A;
+ return arg0;
+ }
+}
+#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8005A970.s")
+#endif
+
+s16 func_8005A9CC(s32 arg0) {
+ Vec3s sp18;
+
+ func_8005A970(&sp18, arg0);
+ return sp18.x;
+}
+
+s16 func_8005A9F4(Camera* camera) {
+ Vec3s sp18;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8005A9CC.s")
+ func_8005A970(&sp18, camera);
+ return sp18.y;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8005AA1C.s")
+s32 func_8005AA1C(Camera* camera, s32 arg1, s16 y, s32 countdown) {
+ s16 quakeIdx;
+
+ quakeIdx = Quake_Add(camera, 3);
+ if (quakeIdx == 0) {
+ return 0;
+ }
+ Quake_SetSpeed(quakeIdx, 0x61A8);
+ Quake_SetQuakeValues(quakeIdx, y, 0, 0, 0);
+ Quake_SetCountdown(quakeIdx, countdown);
+ return 1;
+}
#ifdef NON_MATCHING
-// Ordering
-s32 func_8005AA90(Camera* arg0, s32 arg1, Vec3f* arg2) {
+// additional move v0, zero added.
+s32 Camera_SetParam(Camera* camera, s32 param, void* value) {
+ s32 pad;
Vec3f sp4;
- if (arg2 != NULL) {
- switch (arg1) {
+ if (value != NULL) {
+ switch (param) {
case 1:
- arg0->unk_15C &= ~0x19;
- arg0->at = *arg2;
+ camera->unk_15C &= ~(0x10 | 0x8 | 0x1);
+ camera->at = *(Vec3f*)value;
break;
case 16:
- arg0->unk_15C &= ~0x19;
- arg0->unk_AC = *arg2;
+ camera->unk_15C &= ~(0x10 | 0x8 | 0x1);
+ camera->targetPosRot.pos = *(Vec3f*)value;
break;
case 8:
- if (arg0->unk_142 == 0x3C || arg0->unk_142 == 0x2B) {
+ if (camera->setting == CAM_SET_DEMOC || camera->setting == CAM_SET_DEMO4) {
break;
}
- arg0->unk_A8 = arg2;
- arg0->unk_15C &= ~0x19;
+ camera->target = (Actor*)value;
+ camera->unk_15C &= ~(0x10 | 0x8 | 0x1);
break;
case 2:
- sp4 = *arg2;
- arg0->eye = arg0->unk_74 = sp4;
+ sp4 = *(Vec3f*)value;
+ camera->eyeNext = sp4;
+ camera->eye = sp4;
break;
case 4:
- arg0->unk_68 = *arg2;
- break;
- case 32:
- arg0->unk_FC = arg2->x;
+ camera->unk_68 = *(Vec3f*)value;
break;
case 0x40:
- arg0->unk_15A = arg2->x * (M_PI / 180.0f) + 0.5f;
+ camera->roll = *(f32*)value * (M_PI / 180.0f) + 0.5f;
+ break;
+ case 32:
+ camera->fov = *(f32*)value;
break;
+ case 3:
+ case 5:
+ case 6:
+ case 7:
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 17:
+ case 18:
+ case 19:
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ case 28:
+ case 29:
+ case 30:
+ case 31:
+ return false;
default:
- return 0;
+ return false;
}
- arg0->unk_15C |= arg1;
- return 1;
+ camera->unk_15C |= param;
+ return true;
+ } else {
+ return false;
}
- return 0;
}
#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_8005AA90.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_SetParam.s")
#endif
-s32 func_8005AC48(Camera* camera, s16 b) {
- camera->unk_14C = b;
+s32 func_8005AC24(Camera* camera, s16 arg1) {
+ camera->unk_15C &= ~arg1;
+ return true;
+}
+
+s32 func_8005AC48(Camera* camera, s16 arg1) {
+ camera->unk_14C = arg1;
return 1;
}
@@ -1669,17 +3820,18 @@ s32 func_8005AC60(Camera* camera) {
return 1;
}
-s32 func_8005AC6C(Camera* camera, s32 b, s32 c, Player* d, s16 e) {
+s32 func_8005AC6C(Camera* camera, CutsceneCameraPoint* atPoints, CutsceneCameraPoint* eyePoints, Player* player,
+ s16 relativeToPlayer) {
PosRot sp24;
- camera->unk_124 = b;
- camera->unk_128 = c;
- camera->unk_12C = e;
+ camera->atPoints = atPoints;
+ camera->eyePoints = eyePoints;
+ camera->relativeToPlayer = relativeToPlayer;
- if (camera->unk_12C != 0) {
- camera->player = d;
- func_8002EF44(&sp24, &d->actor);
- camera->unk_94 = sp24;
+ if (camera->relativeToPlayer != 0) {
+ camera->player = player;
+ func_8002EF44(&sp24, &player->actor);
+ camera->playerPosRot = sp24;
camera->unk_156 = -1;
camera->unk_D8 = 0.0f;
@@ -1689,49 +3841,48 @@ s32 func_8005AC6C(Camera* camera, s32 b, s32 c, Player* d, s16 e) {
return 1;
}
-s16 func_8005ACFC(Camera* camera, s16 b) {
- camera->unk_14C |= b;
+s16 func_8005ACFC(Camera* camera, s16 arg1) {
+ camera->unk_14C |= arg1;
return camera->unk_14C;
}
-s16 func_8005AD1C(Camera* camera, s16 b) {
- camera->unk_14C &= ~b;
+s16 func_8005AD1C(Camera* camera, s16 arg1) {
+ camera->unk_14C &= ~arg1;
return camera->unk_14C;
}
-s32 func_8005AD40(Camera* camera, s32 a, s16 b, f32 c, s16 d, s16 e, s16 f) {
- if ((camera->unk_142 == 43) || (camera->unk_142 == 29)) {
+s32 func_8005AD40(Camera* camera, Actor* doorActor, s16 arg2, f32 arg3, s16 arg4, s16 arg5, s16 arg6) {
+ if ((camera->setting == CAM_SET_DEMO4) || (camera->setting == CAM_SET_DOORC)) {
return 0;
}
- camera->unk_00 = a;
- camera->unk_06 = d;
- camera->unk_08 = e;
- camera->unk_0A = f;
- camera->unk_04 = b;
+ camera->unk_00.doorCam.door = doorActor;
+ camera->unk_00.doorCam.unk_06 = arg4;
+ camera->unk_00.doorCam.unk_08 = arg5;
+ camera->unk_00.doorCam.unk_0A = arg6;
+ camera->unk_00.doorCam.unk_04 = arg2;
- if (b == -99) {
- func_80045128(camera, camera->unk_144);
+ if (arg2 == -99) {
+ Camera_CopyModeValuesToPREG(camera, camera->mode);
return -99;
}
- if (b == -1) {
- func_8005A77C(camera, 29);
- osSyncPrintf(".... change default door camera (set %d)\n", 29);
+ if (arg2 == -1) {
+ func_8005A77C(camera, CAM_SET_DOORC);
+ osSyncPrintf(".... change default door camera (set %d)\n", CAM_SET_DOORC);
} else {
- s32 ret = func_80044740(camera, b);
+ s32 ret = func_80044740(camera, arg2);
camera->unk_14A |= 0x40;
if (func_8005A77C(camera, ret) >= 0) {
- camera->unk_148 = b;
+ camera->unk_148 = arg2;
camera->unk_14A |= 4;
}
- // this is likely important for labelling unk_148 and unk_142
- osSyncPrintf("....change door camera ID %d (set %d)\n", camera->unk_148, camera->unk_142);
+ osSyncPrintf("....change door camera ID %d (set %d)\n", camera->unk_148, camera->setting);
}
- func_80045128(camera, camera->unk_144);
+ Camera_CopyModeValuesToPREG(camera, camera->mode);
return -1;
}
@@ -1746,20 +3897,20 @@ s32 func_8005AE64(Camera* camera, Camera* otherCamera) {
camera->at = otherCamera->at;
sp30 = otherCamera->eye;
- camera->unk_74 = sp30;
+ camera->eyeNext = sp30;
camera->eye = sp30;
- camera->unk_DC = func_8007BF90(&camera->at, &camera->eye);
- camera->unk_FC = otherCamera->unk_FC;
- camera->unk_15A = otherCamera->unk_15A;
+ camera->dist = func_8007BF90(&camera->at, &camera->eye);
+ camera->fov = otherCamera->fov;
+ camera->roll = otherCamera->roll;
func_80043B60(camera);
if (camera->player != NULL) {
- func_8002EF14(&camera->unk_94, &camera->player->actor);
- camera->unk_E4.x = camera->at.x - camera->unk_94.pos.x;
- camera->unk_E4.y = camera->at.y - camera->unk_94.pos.y;
- camera->unk_E4.z = camera->at.z - camera->unk_94.pos.z;
- camera->unk_DC = func_8007BF90(&camera->unk_94.pos, &camera->eye);
+ func_8002EF14(&camera->playerPosRot, &camera->player->actor);
+ camera->unk_E4.x = camera->at.x - camera->playerPosRot.pos.x;
+ camera->unk_E4.y = camera->at.y - camera->playerPosRot.pos.y;
+ camera->unk_E4.z = camera->at.z - camera->playerPosRot.pos.z;
+ camera->dist = func_8007BF90(&camera->playerPosRot.pos, &camera->eye);
camera->unk_CC.x = 1.0f;
camera->unk_CC.y = 1.0f;
}
@@ -1775,26 +3926,26 @@ Vec3f* func_8005AFB4(Vec3f* dst, Camera* camera) {
return dst;
}
-// Unused
-void Camera_SetCameraData(Camera* camera, s16 b, s32 c, s32 d, s16 e, s16 f) {
- if (b & 0x1) {
- camera->unk_124 = c;
+void Camera_SetCameraData(Camera* camera, s16 arg1, CutsceneCameraPoint* atPoints, CutsceneCameraPoint* eyePoints,
+ s16 relativeToPlayer, s16 arg5) {
+ if (arg1 & 0x1) {
+ camera->atPoints = atPoints;
}
- if (b & 0x2) {
- camera->unk_128 = d;
+ if (arg1 & 0x2) {
+ camera->eyePoints = eyePoints;
}
- if (b & 0x4) {
- camera->unk_12C = e;
+ if (arg1 & 0x4) {
+ camera->relativeToPlayer = relativeToPlayer;
}
- if (b & 0x8) {
- camera->unk_12E = f;
+ if (arg1 & 0x8) {
+ camera->unk_12E = arg5;
}
- if (b & 0x10) {
- osSyncPrintf(VT_COL(RED, WHITE) "camera: setCameraData: last argument not alive!\n" VT_RST, b);
+ if (arg1 & 0x10) {
+ osSyncPrintf(VT_COL(RED, WHITE) "camera: setCameraData: last argument not alive!\n" VT_RST);
}
}
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index 36b47ee59..f30789f69 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -1372,7 +1372,7 @@ s32 Cutscene_Command_07(GlobalContext* globalCtx, CutsceneContext* csCtx, u8* cm
Gameplay_ChangeCameraStatus(globalCtx, csCtx->unk_14, 7);
func_800C0874(globalCtx, csCtx->unk_14, 0x21);
sp28 = csCtx->cameraFocus->cameraRoll * 1.40625f;
- func_8005AA90(sp2C, 64, &sp28);
+ Camera_SetParam(sp2C, 64, &sp28);
sp3C.x = csCtx->cameraFocus->pos.x;
sp3C.y = csCtx->cameraFocus->pos.y;
sp3C.z = csCtx->cameraFocus->pos.z;
diff --git a/src/code/z_play.c b/src/code/z_play.c
index 41726cb11..7e47deb9c 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -1235,7 +1235,7 @@ void Gameplay_Draw(GlobalContext* globalCtx) {
if ((HREG(80) != 10) || (HREG(83) != 0)) {
if (globalCtx->skyboxCtx.unk_140 != 0) {
- if (ACTIVE_CAM->unk_142 != 0x19) {
+ if (ACTIVE_CAM->setting != 0x19) {
Vec3f sp74;
func_8005AFB4(&sp74, ACTIVE_CAM);
SkyboxDraw_Draw(&globalCtx->skyboxCtx, gfxCtx, globalCtx->skyboxId, 0,
@@ -1605,13 +1605,13 @@ s32 func_800C04D8(GlobalContext* globalCtx, s16 camId, Vec3f* arg2, Vec3f* arg3)
camera = globalCtx->cameraPtrs[camIdx];
- ret = func_8005AA90(camera, 1, arg2);
+ ret = Camera_SetParam(camera, 1, arg2);
ret *= 2;
- ret |= func_8005AA90(camera, 2, arg3);
+ ret |= Camera_SetParam(camera, 2, arg3);
if (1) {} // Necessary to match
- camera->unk_DC = Math3D_Vec3f_DistXYZ(arg2, arg3);
+ camera->dist = Math3D_Vec3f_DistXYZ(arg2, arg3);
player = camera->player;
if (player != NULL) {
@@ -1639,13 +1639,13 @@ s32 func_800C05E4(GlobalContext* globalCtx, s16 camId, Vec3f* arg2, Vec3f* arg3,
if (1) {} // Probably necessary to match
- ret = func_8005AA90(camera, 1, arg2);
+ ret = Camera_SetParam(camera, 1, arg2);
ret *= 2;
- ret |= func_8005AA90(camera, 2, arg3);
+ ret |= Camera_SetParam(camera, 2, arg3);
ret *= 2;
- ret |= func_8005AA90(camera, 4, arg4);
+ ret |= Camera_SetParam(camera, 4, arg4);
- camera->unk_DC = func_800CB678(arg2, arg3);
+ camera->dist = func_800CB678(arg2, arg3);
player = camera->player;
if (player != NULL) {
@@ -1667,7 +1667,7 @@ s32 func_800C05E4(GlobalContext* globalCtx, s16 camId, Vec3f* arg2, Vec3f* arg3,
#ifdef NON_MATCHING
// missing an extra move instruction
s32 func_800C0704(GlobalContext* globalCtx, s16 camId, f32 arg2) {
- return (func_8005AA90(globalCtx->cameraPtrs[camId], 32, &arg2) & 1);
+ return (Camera_SetParam(globalCtx->cameraPtrs[camId], 32, &arg2) & 1);
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_800C0704.s")
@@ -1678,7 +1678,7 @@ s32 func_800C0744(GlobalContext* globalCtx, s16 camId, s16 arg2) {
Camera* camera;
camera = globalCtx->cameraPtrs[camIdx];
- camera->unk_15A = arg2;
+ camera->roll = arg2;
return 1;
}
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c
index 677ae8a68..c1630564d 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -248,7 +248,7 @@ void func_8008EEAC(GlobalContext* globalCtx, UNK_PTR arg1) {
player->unk_664 = arg1;
player->unk_684 = arg1;
player->stateFlags1 |= 0x10000;
- func_8005AA90(Gameplay_GetCamera(globalCtx, 0), 8, arg1);
+ Camera_SetParam(Gameplay_GetCamera(globalCtx, 0), 8, arg1);
func_8005A444(Gameplay_GetCamera(globalCtx, 0), 2);
}
#else
diff --git a/src/code/z_room.c b/src/code/z_room.c
index bf3ab98e3..dbde895fb 100644
--- a/src/code/z_room.c
+++ b/src/code/z_room.c
@@ -345,7 +345,7 @@ void func_80096680(GlobalContext* globalCtx, Room* room, u32 flags) {
camera = ACTIVE_CAM;
polygon1 = &room->mesh->polygon1;
- sp9C = (camera->unk_142 ^ 25) == 0;
+ sp9C = (camera->setting ^ 25) == 0;
polygonDlist = SEGMENTED_TO_VIRTUAL(polygon1->dlist);
sp98 = (flags & 1) && sp9C && polygon1->single.source && !(SREG(25) & 1);
sp94 = (flags & 1) && polygonDlist->opa && !(SREG(25) & 2);
@@ -390,13 +390,6 @@ void func_80096680(GlobalContext* globalCtx, Room* room, u32 flags) {
Graph_CloseDisps(dispRefs, globalCtx->state.gfxCtx, "../z_room.c", 691);
}
-typedef struct {
- char unk_00[0x0E];
- s16 unk_0E;
-} struct_80041C10_ret;
-
-extern struct_80041C10_ret* func_80041C10(CollisionContext*, s32, s32);
-
BgImage* func_80096A74(PolygonType1* polygon1, GlobalContext* globalCtx) {
Camera* camera;
s32 camId;
@@ -450,7 +443,7 @@ void func_80096B6C(GlobalContext* globalCtx, Room* room, u32 flags) {
Graph_OpenDisps(dispRefs, globalCtx->state.gfxCtx, "../z_room.c", 752);
camera = ACTIVE_CAM;
- sp98 = (camera->unk_142 ^ 25) == 0;
+ sp98 = (camera->setting ^ 25) == 0;
polygon1 = &room->mesh->polygon1;
polygonDlist = SEGMENTED_TO_VIRTUAL(polygon1->dlist);
bgImage = func_80096A74(polygon1, globalCtx);