diff options
| author | krimtonz <33664508+krimtonz@users.noreply.github.com> | 2020-06-01 16:54:47 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-01 17:54:47 -0400 |
| commit | 77137f5a04c2514738bdaeff12dcf507a0b0e8e2 (patch) | |
| tree | 58f95fd43af1af5282995551ecb413380817f868 /src/code | |
| parent | 08aaba0d2cbee0f26aa88a1be42f485bf5210564 (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.c | 5 | ||||
| -rw-r--r-- | src/code/z_camera.c | 3515 | ||||
| -rw-r--r-- | src/code/z_demo.c | 2 | ||||
| -rw-r--r-- | src/code/z_play.c | 20 | ||||
| -rw-r--r-- | src/code/z_player_lib.c | 2 | ||||
| -rw-r--r-- | src/code/z_room.c | 11 |
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); |
