#include #include #include 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, }; 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; CollisionPoly* unk_18; char unk_1C[0x8]; s32 unk_24; } struct_80043D18; f32 func_800437F0(f32 arg0, f32 arg1) { f32 percent = 0.4f; f32 ret = fabsf(arg1); if (arg0 < ret) { ret = 1; } else if (ret < (f32)arg0 * (1 - percent)) { //! float cast needed to match ret = (SQ(arg1) * (1 - percent)) / SQ((1 - percent) * arg0); } else { ret = 1 - (0.4f * SQ(arg0 - ret)) / SQ(0.4f * arg0); } return ret; } f32 func_8004389C(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { f32 temp1 = arg0 - arg1; f32 temp2; f32 ret; if (fabsf(temp1) >= arg3) { temp2 = temp1 * arg2; ret = arg1 + temp2; } else { ret = arg0; } return ret; } f32 func_800438DC(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { f32 temp1 = arg0 - arg1; f32 temp2; f32 ret; if (fabsf(temp1) >= arg3) { temp2 = temp1 * arg2; ret = arg1 + temp2; } else { ret = arg1; } return ret; } s16 func_8004391C(s16 arg0, s16 arg1, f32 arg2, s16 arg3) { s16 temp1 = arg0 - arg1; s16 temp2; s32 ret; if (ABS(temp1) >= arg3) { temp2 = temp1 * arg2 + 0.5f; ret = arg1 + temp2; } else { ret = arg0; } return ret; } //*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) >= arg3) { temp2 = temp1 * arg2 + 0.5f; ret = arg1 + temp2; } else { ret = arg1; } return ret; } 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) { camera->unk_C0.z = 100.0f; camera->unk_C0.y = OREG(7); camera->unk_C0.x = OREG(6); camera->unk_CC.x = OREG(2) * 0.01f; camera->unk_CC.y = OREG(3) * 0.01f; camera->unk_CC.z = OREG(4) * 0.01f; } void func_80043B60(Camera* camera) { camera->unk_C0.x = OREG(27); camera->unk_C0.z = OREG(27); camera->unk_C0.y = OREG(27); camera->unk_CC.x = 0.001f; camera->unk_CC.y = 0.001f; camera->unk_CC.z = 0.001f; } Vec3f* func_80043BC4(Vec3f* arg0, Vec3s* arg1) { Vec3f sp4; sp4.x = arg1->x; sp4.y = arg1->y; sp4.z = arg1->z; *arg0 = sp4; return arg0; } Vec3f* func_80043C28(Vec3f* arg0, Vec3f* arg1, VecSph* arg2) { Vec3f sp24, sp18; func_8007C25C(&sp18, arg2); sp24.x = arg1->x + sp18.x; sp24.y = arg1->y + sp18.y; sp24.z = arg1->z + sp18.z; *arg0 = sp24; return arg0; } Vec3f* func_80043CAC(Vec3f* arg0, Vec3f* arg1, Vec3f* arg2, f32 arg3) { Vec3f sp4; sp4.x = arg1->x + (arg2->x * arg3); sp4.y = arg1->y + (arg2->y * arg3); sp4.z = arg1->z + (arg2->z * arg3); *arg0 = sp4; return arg0; } s32 func_80043D18(Camera* camera, Vec3f* arg1, struct_80043D18* arg2) { CollisionContext* colCtx; Vec3f sp68, sp5C, sp50; f32 temp_ret; CollisionPoly* sp48; s32 sp44; VecSph sp3C; colCtx = &camera->globalCtx->colCtx; func_8007C490(&sp3C, arg1, &arg2->unk_00); sp3C.r += 8.0f; func_80043C28(&sp5C, arg1, &sp3C); 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); arg2->unk_0C.x = -sp50.x; arg2->unk_0C.y = -sp50.y; arg2->unk_0C.z = -sp50.z; sp68 = arg2->unk_00; sp68.y += 5.0f; temp_ret = func_8003CCA4(colCtx, &sp48, &sp44, &sp68); 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; } arg2->unk_18 = sp48; sp68.y = temp_ret + 1.0f; arg2->unk_24 = sp44; } 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* arg1, Vec3f* arg2) { struct_80043D18 sp20; Vec3s unused; 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* arg1, Vec3f* arg2) { struct_80043D18 sp20; Vec3s unused; sp20.unk_00 = *arg2; func_80043F94(camera, arg1, &sp20); *arg2 = sp20.unk_00; } s32 func_800443A0(Camera* camera, Vec3f* arg1, Vec3f* arg2) { s32 pad; Vec3f sp40; s32 pad2; s32 sp38; CollisionPoly* sp34; CollisionContext* colCtx; colCtx = &camera->globalCtx->colCtx; sp34 = NULL; if (func_8003DD6C(colCtx, arg1, arg2, &sp40, &sp34, 1, 1, 1, 0, &sp38) && (func_80038B7C(sp34, arg1) < 0.0f)) { return true; } return false; } 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, arg3, arg2); if (temp_ret == -32000.0f) { arg1->x = 0.0f; arg1->z = 0.0f; arg1->y = 1.0f; } else { 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; } f32 func_80044510(Camera* camera, Vec3f* arg1) { Vec3f sp2C, sp20; s32 sp1C; sp2C = *arg1; sp2C.y += 80.0f; 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 arg1) { return func_80041A4C(&camera->globalCtx->colCtx, arg1, 50); } struct_80041C10_ret* func_8004476C(Camera* camera) { return func_80041C10(&camera->globalCtx->colCtx, camera->unk_148, 50); } 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, arg2, *arg1); if (func_80041A4C(&camera->globalCtx->colCtx, temp_ret, *arg1) == 0) { ret = -1; } else { ret = temp_ret; } return ret; } s32 func_8004481C(Camera* camera, s16* arg1) { CollisionPoly* sp44; s32 sp40; // unused s32 sp3C; PosRot sp28; func_8002EF44(&sp28, &camera->player->actor); sp28.pos.y += Player_GetCameraYOffset(camera->player); if (func_8003C940(&camera->globalCtx->colCtx, &sp44, &sp3C, &sp28.pos) == -32000.0f) { return 0; } *arg1 = func_80041B80(&camera->globalCtx->colCtx, sp44, sp3C); return func_80041C98(&camera->globalCtx->colCtx, sp44, sp3C); } s32 func_800448CC(Camera* camera, f32* arg1) { PosRot sp34; s32 sp30; s32 temp_ret; func_8002EF44(&sp34, &camera->player->actor); *arg1 = sp34.pos.y; 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)) { *arg1 = -32000.0f; return -1; } temp_ret = func_80042538(&camera->globalCtx->colCtx, sp30); if ((temp_ret <= 0) || (func_80042548(&camera->globalCtx->colCtx, sp30) <= 0)) { return -2; } return temp_ret; } f32 func_800449AC(Camera* camera, Vec3f* arg1, s32* arg2) { PosRot sp2C; f32 sp28; s32 sp24; func_8002EF44(&sp2C, &camera->player->actor); sp28 = sp2C.pos.y; if (func_8004213C(camera->globalCtx, &camera->globalCtx->colCtx, arg1->x, arg1->z, &sp28, &sp24) == 0) { return -32000.f; } if (sp28 < arg1->y) { return -32000.f; } *arg2 = func_8004259C(&camera->globalCtx->colCtx, sp24); return sp28; } 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; } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80044ADC.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80044E68.s") f32 func_800450A4(Camera* camera, f32 arg1) { f32 ret; if (camera->unk_100 < (OREG(41) * 0.01f)) { ret = OREG(41) * 0.01f; } else if (arg1 <= camera->unk_100) { ret = arg1; } else { ret = OREG(42) * 0.01f * camera->unk_100; } return ret; } #ifdef NON_MATCHING void Camera_CopyModeValuesToPREG(Camera* camera, s16 mode) { s32 i; 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 #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80045350.s") void* func_8004545C(Vec3f* arg0, s32 arg1, s32 arg2, struct_80043D18* arg3, struct_80043D18* arg4) { Vec3f sp24; 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; } *arg0 = sp24; return arg0; } #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* arg0, s16 arg1, s16 arg2, f32 arg3) { VecSph sp1C; f32 sp18; func_8007C3F4(&sp1C, arg0); sp18 = Math_Coss(sp1C.phi); 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); #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80045714.s") #endif f32 func_8007C0A8(f32, f32); s32 func_800457A8(Camera* camera, VecSph* arg1, f32 arg2, s16 arg3) { f32 unused; Vec3f sp50; Vec3f sp44; s32 unused2; PosRot* sp2C; f32 temp_ret; temp_ret = Player_GetCameraYOffset(camera->player); sp50.x = 0.f; sp50.z = 0.f; sp50.y = temp_ret + arg2; 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); sp44.x = sp2C->pos.x + camera->unk_E4.x; sp44.y = sp2C->pos.y + camera->unk_E4.y; sp44.z = sp2C->pos.z + camera->unk_E4.z; func_80043A3C(&sp44, &camera->at, camera->unk_100, camera->unk_100, 0.2f); return 1; } #ifdef NON_MATCHING // CLOSE: regalloc s32 func_800458D4(Camera* camera, VecSph* arg1, f32 arg2, f32* arg3, s16 arg4) { f32 phi_f2; Vec3f sp60; Vec3f sp54; f32 temp_ret; PosRot* temp_s1; f32 sp48; s32 pad[2]; sp60.y = Player_GetCameraYOffset(camera->player) + arg2; sp60.x = 0.0f; sp60.z = 0.0f; 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 - *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) { phi_f2 = 1.0f - sinf(temp_ret - OREG(32) * (M_PI / 180)); } else if (OREG(33) * (M_PI / 180) > temp_ret) { phi_f2 = 1.0f - sinf(OREG(33) * (M_PI / 180) - temp_ret); } else { phi_f2 = 1.0f; } sp60.y -= sp48 * phi_f2; func_80043A3C(&sp60, &camera->unk_E4, OREG(29) * 0.01f, OREG(30) * 0.01f, 0.1f); sp54.x = temp_s1->pos.x + camera->unk_E4.x; sp54.y = temp_s1->pos.y + camera->unk_E4.y; sp54.z = temp_s1->pos.z + camera->unk_E4.z; func_80043A3C(&sp54, &camera->at, camera->unk_100, camera->unk_100, 0.2f); return 1; } #else #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800458D4.s") #endif s32 func_80045B08(Camera* camera, VecSph* arg1, f32 arg2, s16 arg3) { f32 phi_f2; Vec3f sp48; Vec3f sp3C; f32 sp38; // unused f32 temp_ret; PosRot* temp_s1; sp48.y = Player_GetCameraYOffset(camera->player) + arg2; sp48.x = 0.0f; sp48.z = 0.0f; temp_ret = Math_Sins(arg3); temp_s1 = &camera->playerPosRot; if (temp_ret < 0.0f) { phi_f2 = Math_Coss(temp_s1->rot.y - arg1->theta); } else { phi_f2 = -Math_Coss(temp_s1->rot.y - arg1->theta); } sp48.y -= temp_ret * phi_f2 * OREG(9); func_80043A3C(&sp48, &camera->unk_E4, camera->unk_CC.y, camera->unk_CC.x, 0.1f); sp3C.x = temp_s1->pos.x + camera->unk_E4.x; sp3C.y = temp_s1->pos.y + camera->unk_E4.y; sp3C.z = temp_s1->pos.z + camera->unk_E4.z; func_80043A3C(&sp3C, &camera->at, camera->unk_100, camera->unk_100, 0.2f); return 1; } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80045C74.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800460A8.s") s32 func_800466F8(Camera* camera, VecSph* arg1, f32 arg2, f32* arg3, s16 arg4) { s32 phi_v0; Vec3f sp60; Vec3f sp54; f32 sp50; // unused f32 sp4C; // unused f32 sp48; // I doubt this is a Vec3f Player* sp44; PosRot sp30; sp48 = Player_GetCameraYOffset(camera->player); sp44 = camera->player; func_8002EF44(&sp30, sp44->rideActor); if ((*(s32*)((s32)(sp44->rideActor) + 0x1F0) & 4) != 0) { // actors aren't this big, is rideActor a different type? phi_v0 = 1; } else { phi_v0 = 0; } if (phi_v0 != 0) { sp30.pos.y -= 49.f; *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 { *arg3 = func_8004389C(sp30.pos.y, *arg3, 0.5f, 0.2f); } sp60.x = 0.0f; sp60.z = 0.0f; sp60.y = sp48 + arg2; 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); sp54.x = camera->unk_E4.x + sp30.pos.x; sp54.y = camera->unk_E4.y + sp30.pos.y; sp54.z = camera->unk_E4.z + sp30.pos.z; func_80043A3C(&sp54, &camera->at, camera->unk_100, camera->unk_100, 0.2f); return 1; } void func_800468CC(Camera* camera, f32 arg1, f32 arg2, f32 arg3) { f32 sp1C; f32 phi_f12; if (arg1 < arg2) { sp1C = arg2; phi_f12 = OREG(6); } else if (arg3 < arg1) { sp1C = arg3; phi_f12 = OREG(6); } else { 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->dist, 1.f / camera->unk_C0.x, 0.2f); } f32 func_800469C0(Camera* camera, f32 arg1, f32 arg2, f32 arg3, s16 arg4) { f32 sp1C; f32 phi_f12; if (arg1 < arg2) { sp1C = arg2; if (arg4 != 0) { phi_f12 = OREG(6) * 0.5f; } else { phi_f12 = OREG(6); } } else if (arg3 < arg1) { sp1C = arg3; if (arg4 != 0) { phi_f12 = OREG(6) * 0.5f; } else { phi_f12 = OREG(6); } } else { sp1C = arg1; if (arg4 != 0) { phi_f12 = OREG(6); } else { phi_f12 = 1.0f; } } camera->unk_C0.x = func_8004389C(phi_f12, camera->unk_C0.x, OREG(25) * 0.01f, 0.1f); 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 arg1, s16 arg2, s16 arg3) { s32 pad[2]; s16 sp1C; s16 phi_v1; s16 phi_v0; f32 phi_a2; 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, arg1, phi_a2, 0xa); } #else #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80046B44.s") #endif #ifdef NON_MATCHING // stack, regalloc, tiny bit of ordering s16 func_80046CB4(Camera* camera, s16 arg1, s16 arg2, f32 arg3, f32 arg4) { f32 sp34; s16 sp1C; f32 temp_ret; f32 phi_f14; s16 temp; if (camera->unk_D8 > 0.001f) { temp = arg1 - 0x7FFF; sp1C = arg2 - temp; phi_f14 = (s16)(sp1C - 0x7FFF) * (1.0f / 32767.0f); } else { temp = arg1 - 0x7FFF; sp1C = arg2 - temp; phi_f14 = OREG(48) * 0.01f; } 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 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 #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/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); normal3->unk_04 = temp_f2 * NEXTSETTING; // normal3->unk_04 = (f32) ((f32) temp_v0->unk-1C * temp_f2); normal3->unk_08 = temp_f2 * NEXTSETTING; // normal3->unk_08 = (f32) ((f32) temp_v0->unk-18 * temp_f2); 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 Camera_Normal0(Camera* camera) { return func_80047394(camera); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel1.s") s32 Camera_Parallel2(Camera* camera) { return func_80047394(camera); } void Camera_Parallel3(Camera* camera) { CameraModeValue* reg = &sCameraSettings[camera->setting].cameraModes[camera->mode].values[0]; s16 val = reg->val; 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 Camera_Parallel0(Camera* camera) { return func_80047394(camera); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump1.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump2.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump3.s") s32 Camera_Jump4(Camera* camera) { return func_80047394(camera); } s32 Camera_Jump0(Camera* camera) { return func_80047394(camera); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle1.s") s32 Camera_Battle2(Camera* camera) { return func_80047394(camera); } s32 Camera_Battle3(Camera* camera) { func_80047394(camera); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle4.s") s32 Camera_Battle0(Camera* camera) { return func_80047394(camera); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn1.s") s32 Camera_KeepOn2(Camera* camera) { return func_80047394(camera); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn3.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn4.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn0.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed1.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed2.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed3.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed4.s") s32 Camera_Fixed0(Camera* camera) { return func_80047394(camera); } s32 Camera_Subj1(Camera* camera) { return func_80047394(camera); } s32 Camera_Subj2(Camera* camera) { return func_80047394(camera); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subj3.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subj4.s") s32 Camera_Subj0(Camera* camera) { return func_80047394(camera); } s32 Camera_Data0(Camera* camera) { return func_80047394(camera); } s32 Camera_Data1(Camera* camera) { osSyncPrintf("chau!chau!\n"); return Camera_Normal1(camera); } s32 Camera_Data2(Camera* camera) { return func_80047394(camera); } s32 Camera_Data3(Camera* camera) { return func_80047394(camera); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data4.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique1.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique2.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique3.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique0.s") s32 Camera_Unique4(Camera* camera) { return func_80047394(camera); } s32 Camera_Unique5(Camera* camera) { return func_80047394(camera); } 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/Camera_Unique7.s") s32 Camera_Unique8(Camera* camera) { return func_80047394(camera); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique9.s") 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", 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"); } void Camera_Vec3fCopy(Vec3f* src, Vec3f* dst) { dst->x = src->x; dst->y = src->y; dst->z = src->z; } 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); } s32 func_800BB2B4(Vec3f*, f32*, f32*, CutsceneCameraPoint*, s16*, Demo1_unk_04*); #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/Camera_Demo3.s") s32 Camera_Demo4(Camera* camera) { return func_80047394(camera); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo5.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo6.s") void Camera_Demo7(Camera* camera) { if (camera->unk_15E == 0) { camera->unk_14C &= ~4; camera->unk_14C |= 0x1000; camera->unk_15E++; } } s32 Camera_Demo8(Camera* camera) { return func_80047394(camera); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo9.s") s32 Camera_Demo0(Camera* camera) { return func_80047394(camera); } 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 Camera_Special1(Camera* camera) { return func_80047394(camera); } s32 Camera_Special2(Camera* camera) { return Camera_Unique2(camera); } s32 Camera_Special3(Camera* camera) { return func_80047394(camera); } #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/Camera_Special5.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special7.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special6.s") s32 Camera_Special8(Camera* camera) { return func_80047394(camera); } #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); if (newCamera != NULL) { osSyncPrintf(VT_FGCOL(BLUE) "camera: create --- allocate %d byte" VT_RST "\n", sizeof(*newCamera) * 4); func_80057C6C(newCamera, view, colCtx, globalCtx); } else { osSyncPrintf(VT_COL(RED, WHITE) "camera: create: not enough memory\n" VT_RST); } return newCamera; } void func_80057C14(Camera* camera) { if (camera != NULL) { osSyncPrintf(VT_FGCOL(BLUE) "camera: destroy ---" VT_RST "\n"); ZeldaArena_FreeDebug(camera, "../z_camera.c", 9391); } else { osSyncPrintf(VT_COL(YELLOW, BLACK) "camera: destroy: already cleared\n" VT_RST); } } #ifdef NON_MATCHING void func_80057C6C(Camera* camera, View* view, CollisionContext* colCtx, GlobalContext* globalCtx) { Camera* temp_v0; s16 temp_a1; s32 temp_a1_2; s32 temp_v1; s32 temp_v1_2; s32 temp_v1_3; s16* phi_a0; s32 phi_v0; s32 phi_v1; 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; 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 (i = 0; i < sPREGInitCnt; i++) { PREG(i) = sPREGInit[i]; } func_800B958C(camera, &D_8015BD80, &gGameInfo); sInitRegs = false; PREG(88) = -1; } camera->globalCtx = D_8015BD7C = globalCtx; func_800B4D58(&D_8015BD80, camera); temp_a1 = D_8011D39C; D_8011D39C++; for (temp_a1 = D_8011D39C, D_8011D39C++; temp_a1 != 0; temp_a1 = D_8011D39C, D_8011D39C++) { if (temp_a1 == 0) { D_8011D39C++; } 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; } } if (phi_v1_3 == 4) { break; } } camera->unk_134.y = 0x3FFF; camera->unk_13A = camera->unk_134; 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->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; camera->unk_14C = 0; camera->unk_154 = 0x21U; camera->unk_166 = -1; camera->mode = 0; camera->unk_146 = 0x32; camera->unk_168 = 0x7FFF; camera->unk_160 = -1; camera->unk_14C |= 0x4000; camera->unk_68.y = 1.0f; camera->unk_68.z = 0.0f; camera->unk_68.x = 0.0f; camera->unk_80.x = 0.0f; camera->unk_80.y = 0.0f; camera->unk_80.z = 0.0f; camera->setting = camera->unk_154; camera->unk_148 = camera->unk_166; camera->unk_100 = 1.0f; D_8011D3A0.w = 0xFF00; D_8011D398 = -1; D_8011D3F0 = 3; 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, 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->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->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->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->setting = CAM_SET_NORMAL0; camera->unk_14C |= 4; break; } } else { osSyncPrintf("camera: room type: prerender\n"); camera->unk_154 = camera->setting = CAM_SET_FREE0; camera->unk_14C &= ~0x4; } } void Camera_Stub80058140(Camera* camera) { } #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 #ifdef NON_MATCHING void Camera_ChangeStatus(Camera* camera, s16 status) { s32 temp_s1; CameraMode* temp_v0; s32 phi_a1; s32 phi_a2; s16 phi_v0; CameraModeValue* phi_s0; s32 phi_s1; if (PREG(82)) { phi_a1 = status == 7 ? 0x6F : 0x78; phi_a2 = camera->status != 7 ? 0x6F : 0x78; 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->setting, camera->mode); } if (status == 7 && camera->status != 7) { 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->param) = phi_s0->val; if (PREG(82) != 0) { 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 < sCameraSettings[camera->setting].cameraModes[camera->mode].valueCnt) { goto loop_12; } } } camera->status = status; } #else #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ChangeStatus.s") #endif #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800584E8.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800588B4.s") s32 func_80058CF8(Camera* camera) { camera->unk_152 &= ~1; if (camera->globalCtx->roomCtx.curRoom.unk_02 == 3) { camera->unk_152 |= 1; } return 1; } s32 func_80058D34(Camera* camera) { s32 phi_a2 = 0; if (D_8011D394 == 0) { if (camera->globalCtx->activeCamera == 0) { if (CHECK_PAD(D_8015BD7C->state.input[2].press, U_CBUTTONS)) { osSyncPrintf("attention sound URGENCY\n"); func_80078884(NA_SE_SY_ATTENTION_URGENCY); } if (CHECK_PAD(D_8015BD7C->state.input[2].press, D_CBUTTONS)) { osSyncPrintf("attention sound NORMAL\n"); func_80078884(NA_SE_SY_ATTENTION_ON); } if (CHECK_PAD(D_8015BD7C->state.input[2].press, R_CBUTTONS)) { phi_a2 = 1; } if (CHECK_PAD(D_8015BD7C->state.input[2].press, L_CBUTTONS)) { phi_a2 = -1; } 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", sCameraSettingNames[D_8011DAFC[D_8011D398]]); } } } } return 1; } #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_80058E8C.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800591EC.s") void func_80059EC8(Camera* camera) { Camera* sp24 = camera->globalCtx->cameraPtrs[0]; Player* player = (Player*)camera->globalCtx->actorCtx.actorList[2].first; if (camera->unk_160 == 0) { Gameplay_ChangeCameraStatus(camera->globalCtx, camera->unk_162, 7); if ((camera->unk_162 == 0) && (camera->unk_168 != 0)) { player->actor.freeze = 0; player->stateFlags1 &= ~0x20000000; if (player->action != 0) { func_8002DF54(camera->globalCtx, &player->actor, 7); osSyncPrintf("camera: player demo end!!\n"); } sp24->unk_14C |= 8; } if (camera->globalCtx->cameraPtrs[camera->unk_14E]->unk_162 == camera->unk_164) { camera->globalCtx->cameraPtrs[camera->unk_14E]->unk_162 = camera->unk_162; } if (camera->globalCtx->cameraPtrs[camera->unk_162]->unk_14E == camera->unk_164) { camera->globalCtx->cameraPtrs[camera->unk_162]->unk_14E = camera->unk_14E; } if (camera->globalCtx->cameraPtrs[camera->unk_162]->unk_164 == 0) { camera->globalCtx->cameraPtrs[camera->unk_162]->unk_15E = 0; } camera->unk_162 = 0; camera->unk_14E = camera->unk_162; camera->unk_160 = -1; camera->globalCtx->envCtx.unk_E1 = 0; Gameplay_ClearCamera(camera->globalCtx, camera->unk_164); } } s32 func_8005A02C(Camera* camera) { camera->unk_14C |= 0xC; camera->unk_14C &= ~(0x1000 | 0x8); return 1; } #ifdef NON_MATCHING extern s32 D_8011DB14; 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, sCameraModeNames[mode]); } if ((camera->unk_14C & 0x20) && (arg2 == 0)) { camera->unk_14A |= 0x20; return -1; } 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->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 { camera->unk_14A = (s16)(camera->unk_14A | 0x20); camera->unk_14A = (s16)(camera->unk_14A | 2); return 0; } } else if ((mode == camera->mode) && (arg2 == 0)) { camera->unk_14A |= 0x20; camera->unk_14A |= 2; return -1; } else { camera->unk_14A |= 0x20; camera->unk_14A |= 2; camera = camera; Camera_CopyModeValuesToPREG(camera, mode); temp_t8 = mode - 1; phi_v0 = 0; switch (mode) { default: break; case 5: // switch 1 phi_v0 = 0x20; break; case 3: // switch 1 phi_v0 = 4; break; case 1: // switch 1 phi_v0 = 0; if (camera->target != NULL) { phi_v0 = 0; if (camera->target->id != ACTOR_EN_BOOM) { phi_v0 = 8; } } break; case 0: // switch 1 case 2: // switch 1 case 7: // switch 1 case 14: // switch 1 case 18: // switch 1 phi_v0 = 2; break; } switch (camera->mode) { default: break; case 6: // switch 2 if ((phi_v0 & 0x20) != 0) { camera->unk_15E = (u16)0xAU; } break; case 1: // switch 2 if ((phi_v0 & 0x10) != 0) { camera->unk_15E = (u16)0xAU; } phi_v0 |= 1; break; case 17: // switch 2 phi_v0 |= 1; break; case 2: // switch 2 if ((phi_v0 & 8) != 0) { camera->unk_15E = (u16)0xAU; } phi_v0 |= 1; break; case 4: // switch 2 if ((phi_v0 & 4) != 0) { camera->unk_15E = (u16)0xAU; } phi_v0 |= 1; break; case 8: // switch 2 case 15: // switch 2 case 19: // switch 2 phi_v0 |= 1; break; case 0: // switch 2 if ((phi_v0 & 0x10) != 0) { camera->unk_15E = (u16)0xAU; } break; } phi_v0 &= ~0x10; D_8011DB14 = phi_v0; if (camera->status == 7) { switch (phi_v0) { case 1: func_80078884(NA_SE_PL_WALK_GROUND); break; case 2: if (1 == camera->globalCtx->roomCtx.curRoom.unk_03) { func_80078884(NA_SE_SY_ATTENTION_URGENCY); } else { func_80078884(NA_SE_SY_ATTENTION_ON); } break; case 4: func_80078884(NA_SE_SY_ATTENTION_URGENCY); break; case 8: func_80078884(NA_SE_SY_ATTENTION_ON); break; } } func_8005A02C(camera); camera->mode = mode; phi_at = 0x80000000; } return mode | phi_at; } #else #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ChangeMode.s") #endif void func_8005A444(Camera* camera, s16 arg1) { Camera_ChangeMode(camera, arg1, 0); } 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; 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 setting) { return Camera_ChangeSetting(camera, setting, 0); } #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 #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; func_8005A8C4(&sp18, camera); return sp18.y; } #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; func_8005A970(&sp18, camera); return sp18.y; } 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 // additional move v0, zero added. s32 Camera_SetParam(Camera* camera, s32 param, void* value) { s32 pad; Vec3f sp4; if (value != NULL) { switch (param) { case 1: camera->unk_15C &= ~(0x10 | 0x8 | 0x1); camera->at = *(Vec3f*)value; break; case 16: camera->unk_15C &= ~(0x10 | 0x8 | 0x1); camera->targetPosRot.pos = *(Vec3f*)value; break; case 8: if (camera->setting == CAM_SET_DEMOC || camera->setting == CAM_SET_DEMO4) { break; } camera->target = (Actor*)value; camera->unk_15C &= ~(0x10 | 0x8 | 0x1); break; case 2: sp4 = *(Vec3f*)value; camera->eyeNext = sp4; camera->eye = sp4; break; case 4: camera->unk_68 = *(Vec3f*)value; break; case 0x40: 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 false; } camera->unk_15C |= param; return true; } else { return false; } } #else #pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_SetParam.s") #endif 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; } s32 func_8005AC60(Camera* camera) { camera->unk_15E = 0; return 1; } s32 func_8005AC6C(Camera* camera, CutsceneCameraPoint* atPoints, CutsceneCameraPoint* eyePoints, Player* player, s16 relativeToPlayer) { PosRot sp24; camera->atPoints = atPoints; camera->eyePoints = eyePoints; camera->relativeToPlayer = relativeToPlayer; if (camera->relativeToPlayer != 0) { camera->player = player; func_8002EF44(&sp24, &player->actor); camera->playerPosRot = sp24; camera->unk_156 = -1; camera->unk_D8 = 0.0f; camera->unk_E0 = 0.0f; } return 1; } s16 func_8005ACFC(Camera* camera, s16 arg1) { camera->unk_14C |= arg1; return camera->unk_14C; } s16 func_8005AD1C(Camera* camera, s16 arg1) { camera->unk_14C &= ~arg1; return camera->unk_14C; } 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.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 (arg2 == -99) { Camera_CopyModeValuesToPREG(camera, camera->mode); return -99; } 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, arg2); camera->unk_14A |= 0x40; if (func_8005A77C(camera, ret) >= 0) { camera->unk_148 = arg2; camera->unk_14A |= 4; } osSyncPrintf("....change door camera ID %d (set %d)\n", camera->unk_148, camera->setting); } Camera_CopyModeValuesToPREG(camera, camera->mode); return -1; } s32 func_8005AE64(Camera* camera, Camera* otherCamera) { s32 unused; Vec3f sp30; camera->unk_E4.x = 0.0f; camera->unk_E4.y = 0.0f; camera->unk_E4.z = 0.0f; camera->unk_100 = 0.1f; camera->at = otherCamera->at; sp30 = otherCamera->eye; camera->eyeNext = sp30; camera->eye = sp30; 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->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; } return 1; } s32 func_8005AFA8() { return D_8011D394; } Vec3f* func_8005AFB4(Vec3f* dst, Camera* camera) { *dst = camera->unk_80; return dst; } void Camera_SetCameraData(Camera* camera, s16 arg1, CutsceneCameraPoint* atPoints, CutsceneCameraPoint* eyePoints, s16 relativeToPlayer, s16 arg5) { if (arg1 & 0x1) { camera->atPoints = atPoints; } if (arg1 & 0x2) { camera->eyePoints = eyePoints; } if (arg1 & 0x4) { camera->relativeToPlayer = relativeToPlayer; } if (arg1 & 0x8) { camera->unk_12E = arg5; } if (arg1 & 0x10) { osSyncPrintf(VT_COL(RED, WHITE) "camera: setCameraData: last argument not alive!\n" VT_RST); } } s32 func_8005B044() { if (QREG(0) == 0) { QREG(2) = 1; QREG(10) = -1; QREG(11) = 100; QREG(12) = 80; QREG(20) = 90; QREG(21) = 10; QREG(22) = 10; QREG(23) = 50; QREG(24) = 6000; QREG(25) = 240; QREG(26) = 40; QREG(27) = 85; QREG(28) = 55; QREG(29) = 87; QREG(30) = 23; QREG(31) = 20; QREG(32) = 4; QREG(33) = 5; QREG(50) = 1; QREG(51) = 20; QREG(52) = 200; QREG(53) = 1; QREG(54) = 15; QREG(55) = 60; QREG(56) = 15; QREG(57) = 30; QREG(58) = 0; } QREG(65) = 50; return 1; } s32 func_8005B198() { return D_8011D3AC; } s16 func_8005B1A4(Camera* camera) { camera->unk_14C |= 0x8; if ((camera->unk_164 == 0) && (camera->globalCtx->activeCamera != 0)) { camera->globalCtx->cameraPtrs[camera->globalCtx->activeCamera]->unk_14C |= 0x8; return camera->globalCtx->activeCamera; } return camera->unk_164; }