diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h index 4be03ad5ed..b57d959b4c 100644 --- a/include/d/actor/d_a_alink.h +++ b/include/d/actor/d_a_alink.h @@ -12,6 +12,7 @@ #include "d/d_particle_copoly.h" #include "d/d_save.h" #include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_camera_mng.h" class J2DAnmColorKey; class J2DAnmTransformKey; diff --git a/include/d/actor/d_a_horse.h b/include/d/actor/d_a_horse.h index 1224394778..af73f2313f 100644 --- a/include/d/actor/d_a_horse.h +++ b/include/d/actor/d_a_horse.h @@ -221,11 +221,11 @@ public: /* 80844590 */ int draw(); /* 8084478C */ ~daHorse_c(); - /* 80182D04 */ bool getLashDashStart() const { return checkResetStateFlg0(RFLG0_LASH_DASH_START); } + /* 80182D04 */ BOOL getLashDashStart() const { return checkResetStateFlg0(RFLG0_LASH_DASH_START); } bool checkNoBombProc() const { return m_procID == PROC_WAIT_e || m_procID == PROC_MOVE_e; } - bool checkResetStateFlg0(daHorse_RFLG0 flag) const { return m_resetStateFlg0 & flag; } + BOOL checkResetStateFlg0(daHorse_RFLG0 flag) const { return m_resetStateFlg0 & flag; } bool checkEndResetStateFlg0(daHorse_ERFLG0 flag) const { return m_endResetStateFlg0 & flag; } u32 checkStateFlg0(daHorse_FLG0 flag) const { return m_stateFlg0 & flag; } f32 getNormalMaxSpeedF() { return m_normalMaxSpeedF; } @@ -258,7 +258,7 @@ public: void setZeldaActor(fopAc_ac_c* i_actor) { m_zeldaActorKeep.setData(i_actor); } bool checkTurnStandCamera() const { return checkResetStateFlg0(RFLG0_TURN_STAND_CAMERA); } - bool checkTurnStand() const { return checkResetStateFlg0(RFLG0_TURN_STAND); } + BOOL checkTurnStand() const { return checkResetStateFlg0(RFLG0_TURN_STAND); } u32 checkRodeoMode() const { return checkStateFlg0(FLG0_RODEO_MODE); } bool checkCutTurnCancel() const { return checkEndResetStateFlg0(ERFLG0_CUT_TURN_CANCEL); } bool checkTurnCancelKeep() const { return checkStateFlg0(FLG0_TURN_CANCEL_KEEP); } @@ -270,7 +270,7 @@ public: bool checkWait() const { return m_procID == PROC_WAIT_e; } bool checkLand() const { return m_procID == PROC_LAND_e && field_0x171a == 0; } bool checkGetOff() const { return fabsf(speedF) < 3.0f; } - bool checkEnemySearch() { return checkResetStateFlg0(RFLG0_ENEMY_SEARCH); } + BOOL checkEnemySearch() { return checkResetStateFlg0(RFLG0_ENEMY_SEARCH); } bool checkOriginalDemo() const { return field_0x16b8 == 3; } bool checkHorseDemoMode() { return field_0x16b8 != 0; } s16 checkCowHit() const { return m_cowHit; } diff --git a/include/d/actor/d_a_midna.h b/include/d/actor/d_a_midna.h index d71b2ab98e..efadec9dc7 100644 --- a/include/d/actor/d_a_midna.h +++ b/include/d/actor/d_a_midna.h @@ -371,8 +371,9 @@ public: void resetRatBody() {} bool checkFlyWaitAnime() const { - return mBckHeap[0].getIdx() == 0x1CB || mBckHeap[0].getIdx() == 0x1C7 - || mBckHeap[0].getIdx() == 0x1C8 || mBckHeap[0].getIdx() == 0x1C9; + // fakematch (doesn't match in debug) + return (u16)mBckHeap[0].getIdx() == 0x1CB || ((u16)mBckHeap[0].getIdx() == 0x1C7 + || (u16)mBckHeap[0].getIdx() == 0x1C8 || (u16)mBckHeap[0].getIdx() == 0x1C9); } void onForceMorfCancel() { onEndResetStateFlg0(ERFLG0_FORCE_MORF_CANCEL); } diff --git a/include/d/actor/d_a_npc_tk.h b/include/d/actor/d_a_npc_tk.h index 000b1bf1cb..de5a8d3708 100644 --- a/include/d/actor/d_a_npc_tk.h +++ b/include/d/actor/d_a_npc_tk.h @@ -4,6 +4,7 @@ #include "d/actor/d_a_npc.h" #include "d/d_cc_uty.h" #include "d/d_path.h" +#include "d/d_spline_path.h" struct cXyz; class daNpc_Hanjo_c; diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 58c188b697..8067298f0b 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -703,7 +703,7 @@ public: cXyz* getLeftFootPosP() { return &mLeftFootPos; } cXyz getLeftFootPos() const { return mLeftFootPos; } cXyz getRightFootPos() const { return mRightFootPos; } - BOOL checkCopyRodThrowAfter() const { return checkNoResetFlg3(FLG3_COPY_ROD_THROW_AFTER); } + u32 checkCopyRodThrowAfter() const { return checkNoResetFlg3(FLG3_COPY_ROD_THROW_AFTER); } u32 checkRide() const { return checkHorseRide() || checkBoarRide() || checkSpinnerRide() || checkCanoeRide() || checkBoardRide(); } cXyz getRightHandPos() const { return mRightHandPos; } const cXyz getLeftHandPos() const { return mLeftHandPos; } diff --git a/include/d/d_cam_param.h b/include/d/d_cam_param.h index 28d010bb8a..74aed86951 100644 --- a/include/d/d_cam_param.h +++ b/include/d/d_cam_param.h @@ -96,6 +96,9 @@ public: /* 80182CD0 */ f32 Val(s32 param_0, int param_1) { return mCamStyleData[param_0].field_0x8[param_1]; } + void SetVal(s32 param_0, int param_1, f32 i_value) { + mCamStyleData[param_0].field_0x8[param_1] = i_value; + } /* 0x00 */ u8 mMapToolFovy; /* 0x01 */ u8 mMapToolArg0; diff --git a/include/d/d_camera.h b/include/d/d_camera.h index 648cf51e12..3ea2be5353 100644 --- a/include/d/d_camera.h +++ b/include/d/d_camera.h @@ -18,34 +18,34 @@ struct dCamMapToolData { /* 8015FEB8 */ int Set(s32, s32, fopAc_ac_c*, u16, u8); dCamMapToolData& operator=(dCamMapToolData const& other) { - __memcpy(&field_0x0, &other.field_0x0, sizeof(stage_camera2_data_class)); - __memcpy(&field_0x18, &other.field_0x18, sizeof(stage_arrow_data_class)); - field_0x2c = other.field_0x2c; - field_0x30 = other.field_0x30; - field_0x34 = other.field_0x34; - field_0x38 = other.field_0x38; - field_0x3a = other.field_0x3a; - field_0x3b = other.field_0x3b; + __memcpy(&mCamData, &other.mCamData, sizeof(stage_camera2_data_class)); + __memcpy(&mArrowData, &other.mArrowData, sizeof(stage_arrow_data_class)); + mArrowIndex = other.mArrowIndex; + mCameraIndex = other.mCameraIndex; + mpActor = other.mpActor; + mPriority = other.mPriority; + mFlags = other.mFlags; + mPathId = other.mPathId; return *this; } void Clr() { - field_0x2c = 0xFF; - field_0x30 = 0xFF; - field_0x3a = 0; - field_0x34 = NULL; - field_0x3b = 0xFF; - field_0x38 = 0xFF; + mArrowIndex = 0xFF; + mCameraIndex = 0xFF; + mFlags = 0; + mpActor = NULL; + mPathId = 0xFF; + mPriority = 0xFF; } - /* 0x00 */ stage_camera2_data_class field_0x0; - /* 0x18 */ stage_arrow_data_class field_0x18; - /* 0x2C */ int field_0x2c; - /* 0x30 */ s32 field_0x30; - /* 0x34 */ fopAc_ac_c* field_0x34; - /* 0x38 */ u16 field_0x38; - /* 0x3A */ u8 field_0x3a; - /* 0x3B */ u8 field_0x3b; + /* 0x00 */ stage_camera2_data_class mCamData; + /* 0x18 */ stage_arrow_data_class mArrowData; + /* 0x2C */ int mArrowIndex; + /* 0x30 */ s32 mCameraIndex; + /* 0x34 */ fopAc_ac_c* mpActor; + /* 0x38 */ u16 mPriority; + /* 0x3A */ u8 mFlags; + /* 0x3B */ u8 mPathId; }; struct dCamForcusLine { @@ -140,8 +140,6 @@ class camera_class; class dCamera_c; typedef bool (dCamera_c::*engine_fn)(s32); -#pragma warn_illunionmembers off - class dCamera_c { public: class dCamInfo_c { @@ -221,6 +219,600 @@ public: /* 0x40 */ cSAngle field_0x40; }; // Size: 0x44 + struct ChaseData { + /* 0x00 */ int field_0x0; + /* 0x04 */ int field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xc; + /* 0x10 */ int field_0x10; + /* 0x14 */ int field_0x14; + /* 0x18 */ s16 field_0x18; + /* 0x1A */ s16 field_0x1a; + /* 0x1C */ s16 field_0x1c; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2c; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3c; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ int field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4c; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ cXyz field_0x58; + /* 0x64 */ cXyz field_0x64; + /* 0x70 */ bool field_0x70; + /* 0x71 */ bool field_0x71; + /* 0x72 */ bool field_0x72; + /* 0x73 */ bool field_0x73; + /* 0x74 */ f32 field_0x74; + /* 0x78 */ f32 field_0x78; + /* 0x7C */ f32 field_0x7c; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ f32 field_0x84; + /* 0x88 */ f32 field_0x88; + /* 0x8C */ int field_0x8c; + /* 0x90 */ bool field_0x90; + /* 0x91 */ bool field_0x91; + /* 0x92 */ bool field_0x92; + /* 0x93 */ bool field_0x93; + /* 0x94 */ bool field_0x94; + /* 0x95 */ bool field_0x95; + /* 0x96 */ cSAngle field_0x96; + /* 0x98 */ cSAngle field_0x98; + /* 0x9A */ cSAngle field_0x9a; + /* 0x9C */ int field_0x9c; + /* 0xA0 */ int field_0xa0; + /* 0xA4 */ f32 field_0xa4; + /* 0xA8 */ int field_0xa8; + /* 0xAC */ f32 field_0xac; + }; + + struct LockOnData { + /* 0x00 */ int field_0x0; + /* 0x04 */ u8 field_0x4[8]; + /* 0x0C */ int field_0xc; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ int field_0x14; + /* 0x18 */ bool field_0x18; + /* 0x1C */ cXyz field_0x1c; + /* 0x28 */ bool field_0x28; + /* 0x29 */ bool field_0x29; + /* 0x2A */ bool field_0x2a; + /* 0x2C */ int field_0x2c; + /* 0x30 */ int field_0x30; + /* 0x34 */ cSGlobe field_0x34; + /* 0x3C */ fpc_ProcID field_0x3c; + /* 0x40 */ bool field_0x40; + /* 0x42 */ cSAngle field_0x42; + /* 0x44 */ int field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4c; + /* 0x50 */ cSAngle field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5c; + /* 0x60 */ f32 field_0x60; + }; + + struct TalkData { + /* 0x00 */ int field_0x0; + /* 0x04 */ cXyz field_0x4; + /* 0x10 */ cXyz field_0x10; + /* 0x1C */ cXyz field_0x1c; + /* 0x28 */ cSGlobe field_0x28; + /* 0x30 */ cSGlobe field_0x30; + /* 0x38 */ int field_0x38; + /* 0x3C */ int field_0x3c; + /* 0x40 */ int field_0x40; + /* 0x44 */ int field_0x44; + /* 0x48 */ int field_0x48; + /* 0x4C */ f32 field_0x4c; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5c; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ f32 field_0x6c; + /* 0x70 */ fopAc_ac_c* field_0x70; + /* 0x74 */ fopAc_ac_c* field_0x74; + /* 0x78 */ fopAc_ac_c* field_0x78; + /* 0x7C */ f32 field_0x7c; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ s16 field_0x84; + /* 0x86 */ s16 field_0x86; + /* 0x88 */ bool field_0x88; + /* 0x89 */ bool field_0x89; + /* 0x8C */ u32 field_0x8c; + /* 0x90 */ cXyz field_0x90; + /* 0x9C */ cXyz field_0x9c; + /* 0xA8 */ cSGlobe field_0xa8; + /* 0xB0 */ f32 field_0xb0; + /* 0xB4 */ cXyz field_0xb4; + /* 0xC0 */ cXyz field_0xc0; + /* 0xCC */ cXyz field_0xcc; + /* 0xD8 */ cXyz field_0xd8; + }; + + struct SubjectData { + /* 0x00 */ int field_0x0; + /* 0x04 */ cXyz field_0x4; + /* 0x10 */ int field_0x10; + /* 0x14 */ int field_0x14; + /* 0x18 */ int field_0x18; + /* 0x1C */ bool field_0x1c; + /* 0x1D */ bool field_0x1d; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 mZoomRatio; + /* 0x28 */ cSAngle field_0x28; + /* 0x2A */ cSAngle field_0x2a; + /* 0x2C */ cSAngle field_0x2c; + /* 0x2E */ cSAngle field_0x2e; + /* 0x30 */ cXyz field_0x30; + /* 0x3C */ cXyz field_0x3c; + /* 0x48 */ cSGlobe field_0x48; + }; + + struct MagneData { + /* 0x00 */ int field_0x0; + /* 0x04 */ cXyz field_0x4; + /* 0x10 */ cXyz field_0x10; + /* 0x1C */ cSGlobe field_0x1c; + }; + + struct ColosseumData { + /* 0x00 */ u8 field_0x0[8]; + /* 0x08 */ cXyz field_0x8; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ int field_0x18; + }; + + struct TowerData { + /* 0x00 */ int field_0x0; + /* 0x04 */ int field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xc; + /* 0x10 */ int field_0x10; + /* 0x14 */ int field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1c; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ cSAngle field_0x28; + /* 0x2C */ f32 field_0x2c; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ int field_0x38; + /* 0x3C */ f32 field_0x3c; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ cXyz field_0x48; + /* 0x54 */ cXyz field_0x54; + /* 0x60 */ cSAngle field_0x60; + /* 0x64 */ int field_0x64; + /* 0x68 */ bool field_0x68; + /* 0x69 */ bool field_0x69; + /* 0x6A */ bool field_0x6a; + /* 0x6B */ bool field_0x6b; + /* 0x6C */ bool field_0x6c; + /* 0x70 */ f32 field_0x70; + /* 0x74 */ f32 field_0x74; + /* 0x78 */ f32 field_0x78; + /* 0x7C */ f32 field_0x7c; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ f32 field_0x84; + }; + + struct HookshotData { + /* 0x00 */ int field_0x0; + /* 0x04 */ u8 field_0x4[4]; + /* 0x08 */ cXyz field_0x8; + /* 0x14 */ cXyz field_0x14; + /* 0x20 */ bool field_0x20; + }; + + struct EventData { + /* 0x00 */ bool field_0x0; + /* 0x01 */ bool field_0x1; + /* 0x04 */ int field_0x4; + /* 0x08 */ int field_0x8; + /* 0x0C */ u8 field_0xc[0x10 - 0xc]; + /* 0x10 */ cXyz field_0x10; + /* 0x1C */ f32 mFovy; + /* 0x20 */ f32 mBank; + /* 0x24 */ fopAc_ac_c* mRelActor; + /* 0x28 */ char mRelUseMask; + /* 0x29 */ char field_0x29; + /* 0x2C */ int mTimer; + /* 0x30 */ bool field_0x30; + /* 0x34 */ cXyz mBasePos; + /* 0x40 */ char field_0x40; + /* 0x41 */ char field_0x41; + /* 0x42 */ u8 field_0x42[0x48 - 0x42]; + /* 0x48 */ char field_0x48; + /* 0x49 */ u8 field_0x49[0x4c - 0x49]; + /* 0x4C */ int field_0x4c; + /* 0x50 */ int field_0x50; + /* 0x54 */ u8 field_0x54[0x5c - 0x54]; + /* 0x5C */ f32* field_0x5c; + /* 0x60 */ u8 field_0x60[0x6c - 0x60]; + /* 0x6C */ int field_0x6c; + }; + + struct FixedFrameEvData { + /* 0x00 */ bool field_0x0; + /* 0x04 */ cXyz field_0x4; + /* 0x10 */ cXyz field_0x10; + /* 0x1C */ f32 field_0x1c; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ fopAc_ac_c* mpRelActor; + /* 0x28 */ char mRelUseMask[4]; + /* 0x2C */ int mTimer; + /* 0x30 */ bool field_0x30; + /* 0x34 */ cXyz mBasePos; + }; + + struct StokerData { + /* 0x00 */ bool field_0x0; + /* 0x01 */ bool field_0x1; + /* 0x02 */ u8 field_0x2[2]; + /* 0x04 */ cXyz field_0x4; + /* 0x10 */ cXyz field_0x10; + /* 0x1C */ f32 field_0x1c; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ fopAc_ac_c* field_0x2c; + /* 0x30 */ fopAc_ac_c* field_0x30; + /* 0x34 */ fpc_ProcID field_0x34; + /* 0x38 */ fpc_ProcID field_0x38; + /* 0x3C */ u8 field_0x3c[0x40 - 0x3c]; + /* 0x40 */ int field_0x40; + }; + + struct RollingData { + /* 0x00 */ bool field_0x0; + /* 0x00 */ bool field_0x1; + /* 0x04 */ cXyz field_0x4; + /* 0x10 */ cXyz field_0x10; + /* 0x1C */ cXyz mEye; + /* 0x28 */ cXyz mCenter; + /* 0x34 */ f32 mFovy; + /* 0x38 */ f32 mBank; + /* 0x3C */ fopAc_ac_c* mpRelActor; + /* 0x40 */ char mRelActor[4]; + /* 0x44 */ int mTimer; + /* 0x48 */ int mTransType; + /* 0x4C */ f32 mRoll; + /* 0x50 */ f32 mRadiusAdd; + /* 0x54 */ f32 mLatitude; + /* 0x58 */ f32 mCtrCus; + }; + + struct FixedPosData { + /* 0x00 */ bool field_0x0; + /* 0x00 */ bool field_0x1; + /* 0x04 */ cXyz field_0x4; + /* 0x10 */ cXyz field_0x10; + /* 0x1C */ cXyz field_0x1c; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2c; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ fopAc_ac_c* field_0x3c; + /* 0x40 */ fopAc_ac_c* field_0x40; + /* 0x44 */ fpc_ProcID field_0x44; + /* 0x48 */ char field_0x48; + /* 0x4C */ int field_0x4c; + }; + + struct TransData { + /* 0x00 */ cXyz mStartEye; + /* 0x0C */ cXyz mStartCenter; + /* 0x18 */ f32 mStartFovy; + /* 0x1C */ f32 field_0x1c; + /* 0x20 */ cXyz mEye; + /* 0x2C */ cXyz mCenter; + /* 0x38 */ f32 mFovy; + /* 0x3C */ f32 field_0x3c; + /* 0x40 */ fopAc_ac_c* mRelActor; + /* 0x44 */ fpc_ProcID mRelActorID; + /* 0x48 */ char mRelUseMask; + /* 0x49 */ char field_0x49; + /* 0x4A */ char field_0x4a; + /* 0x4B */ char field_0x4b; + /* 0x4C */ u8 field_0x4c[4]; + /* 0x50 */ int mTimer; + /* 0x54 */ int mTransType; + /* 0x58 */ f32 mCushion; + /* 0x5C */ f32* mBSpPoints; + /* 0x60 */ cSGlobe field_0x60; + /* 0x68 */ bool field_0x68; + /* 0x6C */ int mBSpCurve; + }; + + struct ActorData { + /* 0x00 */ cXyz mCtrGap; + /* 0x0C */ cXyz field_0xc; + /* 0x18 */ f32 mCushion; + /* 0x1C */ int mNearTimer; + /* 0x20 */ f32 mNearDist; + /* 0x24 */ int mFarTimer; + /* 0x28 */ f32 mFarDist; + /* 0x2C */ f32 mZoomDist; + /* 0x30 */ f32 mZoomVAngle; + /* 0x34 */ fopAc_ac_c* mTargetActor; + /* 0x38 */ fpc_ProcID mTargetActorID; + /* 0x3C */ cSGlobe field_0x3c; + /* 0x44 */ int field_0x44; + /* 0x48 */ u8 field_0x48[4]; + /* 0x4C */ cSGlobe field_0x4c; + /* 0x54 */ int field_0x54; + /* 0x58 */ int mBlure; + /* 0x5C */ f32 mFrontAngle; + /* 0x60 */ f32 mFovy; + /* 0x64 */ u8 field_0x64[4]; + /* 0x68 */ int field_0x68; + }; + + struct RestorePosData { + /* 0x000 */ cXyz field_0x0; + /* 0x00C */ cXyz field_0xc; + /* 0x018 */ f32 field_0x18; + /* 0x01C */ int field_0x1c; + /* 0x020 */ f32 field_0x20; + /* 0x024 */ int field_0x24; + /* 0x028 */ f32 field_0x28; + /* 0x02C */ u8 field_0x2c[0x034 - 0x02C]; + /* 0x034 */ fopAc_ac_c* field_0x34; + /* 0x038 */ cSGlobe field_0x38; + /* 0x040 */ int field_0x40; + /* 0x044 */ int field_0x44; + /* 0x048 */ dCamInfo_c field_0x48; + /* 0x068 */ int field_0x68; + }; + + struct GameOverData { + /* 0x00 */ int field_0x0; + /* 0x04 */ int field_0x4; + /* 0x08 */ int field_0x8; + /* 0x0C */ int mType; + /* 0x10 */ cXyz field_0x10; + /* 0x1C */ cSGlobe field_0x1c; + /* 0x24 */ u8 field_0x24[0x3c - 0x24]; + /* 0x3C */ bool field_0x3c; + }; + + struct TactData { + /* 0x00 */ int field_0x0; + /* 0x04 */ int field_0x4; + /* 0x08 */ int field_0x8; + /* 0x0C */ int field_0xc; + /* 0x10 */ u8 field_0x10[4]; + /* 0x14 */ int field_0x14; + /* 0x18 */ u8 field_0x18[4]; + /* 0x1C */ cXyz* field_0x1c; + /* 0x20 */ cXyz* field_0x20; + /* 0x24 */ int field_0x24; + /* 0x28 */ u8 field_0x28[4]; + /* 0x2C */ f32 field_0x2c; + /* 0x30 */ cXyz field_0x30; + /* 0x3C */ cXyz field_0x3c; + }; + + struct LoadData { + /* 0x00 */ int mTimer; + /* 0x04 */ int mSlot; + /* 0x08 */ int mType; + /* 0x0C */ cSGlobe field_0xc; + /* 0x14 */ cSGlobe field_0x14; + /* 0x1C */ cXyz field_0x1c; + /* 0x28 */ cXyz field_0x28; + /* 0x34 */ cXyz field_0x34; + /* 0x40 */ cSAngle field_0x40; + /* 0x42 */ cSAngle field_0x42; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + }; + + struct ItemData { + /* 0x00 */ int field_0x0; + /* 0x04 */ int field_0x4; + /* 0x08 */ int mType; + /* 0x0C */ cXyz field_0xc; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ int field_0x1c; + /* 0x20 */ int field_0x20; + /* 0x24 */ cSGlobe field_0x24; + /* 0x2C */ cXyz field_0x2c; + /* 0x38 */ cXyz field_0x38; + /* 0x44 */ cXyz field_0x44; + /* 0x50 */ cXyz field_0x50; + /* 0x5C */ f32 field_0x5c; + }; + + struct GetItemData { + /* 0x000 */ u8 field_0x0[4]; + /* 0x004 */ int mTimer; + /* 0x008 */ int field_0x8; + /* 0x00C */ fopAc_ac_c* mRelActor; + /* 0x010 */ fpc_ProcID mRelActorID; + /* 0x014 */ f32* mCurvePoints; + /* 0x018 */ int field_0x18; + /* 0x01C */ cXyz mStartCenter; + /* 0x028 */ cXyz mStartEye; + /* 0x034 */ u8 field_0x34[8]; + /* 0x03C */ cSGlobe field_0x3c; + /* 0x044 */ cXyz field_0x44; + /* 0x050 */ cXyz field_0x50; + /* 0x05C */ u8 field_0x5C[8]; + /* 0x064 */ cSGlobe field_0x64; + }; + + struct PossessedData { + /* 0x00 */ int field_0x0; + /* 0x04 */ int mType; + /* 0x08 */ int mTimer; + /* 0x0C */ int field_0xc; + /* 0x10 */ f32 mRadius; + /* 0x14 */ cSAngle mLatitude; + /* 0x16 */ cSAngle mLongitude; + /* 0x18 */ f32 mFovy; + /* 0x1C */ f32 mCushion; + /* 0x20 */ int mBlure; + /* 0x24 */ fopAc_ac_c* mTargetActor; + /* 0x28 */ cSGlobe field_0x28; + }; + + struct FixedFramesData { + /* 0x00 */ bool field_0x0; + /* 0x04 */ cXyz field_0x4; + /* 0x10 */ cXyz field_0x10; + /* 0x1C */ cXyz* field_0x1c[2]; + /* 0x24 */ f32* field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ fopAc_ac_c* mRelActor; + /* 0x30 */ char mRelUseMask; + /* 0x31 */ char field_0x31; + /* 0x34 */ int mTimer; + /* 0x38 */ int field_0x38; + /* 0x3C */ int mChoice; + }; + + struct BSplineData { + /* 0x00 */ cXyz* mCenters; + /* 0x04 */ cXyz* mEyes; + /* 0x08 */ f32* mFovys; + /* 0x0C */ int mTimer; + /* 0x10 */ int field_0x10; + /* 0x14 */ fopAc_ac_c* mRelActor; + /* 0x18 */ u8 field_0x18[4]; + /* 0x1c */ bool field_0x1c; + }; + + struct TwoActor0Data { + /* 0x00 */ fopAc_ac_c* mActor1; + /* 0x04 */ fopAc_ac_c* mActor2; + /* 0x08 */ u8 field_0x8[4]; + /* 0x0C */ fpc_ProcID mActor1ID; + /* 0x10 */ fpc_ProcID mActor2ID; + /* 0x14 */ f32 mCtrCus; + /* 0x18 */ f32 mEyeCus; + /* 0x1C */ f32 mRadiusMin; + /* 0x20 */ f32 mRadiusMax; + /* 0x24 */ f32 mLatitudeMin; + /* 0x28 */ f32 mLatitudeMax; + /* 0x2C */ f32 mLongitudeMin; + /* 0x30 */ f32 mLongitudeMax; + /* 0x34 */ int mLongitudeType; + /* 0x38 */ f32 mFovy; + /* 0x3C */ f32 mCtrRatio; + /* 0x40 */ cXyz mCtrGap; + /* 0x4C */ f32 field_0x4c; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ cSAngle field_0x54; + /* 0x56 */ cSAngle field_0x56; + /* 0x58 */ cSAngle field_0x58; + /* 0x5A */ cSAngle field_0x5a; + }; + + struct DigHoleData { + /* 0x00 */ int field_0x0; + /* 0x04 */ int mType; + /* 0x08 */ int field_0x8; + /* 0x0C */ f32 field_0xc; + /* 0x10 */ u8 field_0x10; + /* 0x11 */ u8 field_0x11[3]; + /* 0x14 */ cXyz field_0x14; + /* 0x20 */ cXyz field_0x20; + }; + + struct HintTalkData { + /* 0x00 */ fopAc_ac_c* mTeacher; + /* 0x04 */ fopAc_ac_c* mStudent; + /* 0x08 */ cXyz field_0x8; + /* 0x14 */ cXyz field_0x14; + /* 0x20 */ cSGlobe mDirection; + /* 0x28 */ cSGlobe field_0x28; + /* 0x30 */ f32 mRadius; + /* 0x34 */ f32 mFovy; + /* 0x38 */ f32 mCtrGapY; + /* 0x3C */ int mTimer; + /* 0x40 */ cXyz field_0x40; + }; + + struct BspTransData { + /* 0x00 */ int mTimer; + /* 0x04 */ f32* mBase; + /* 0x08 */ f32* mSet1; + /* 0x0C */ d2DBSplinePath mSplinePath1; + /* 0x40 */ f32* mSet2; + /* 0x44 */ d2DBSplinePath mSplinePath2; + /* 0x78 */ cXyz field_0x78; + /* 0x84 */ cXyz field_0x84; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ cXyz field_0x94; + /* 0xA0 */ cXyz field_0xa0; + /* 0xAC */ f32 field_0xac; + /* 0xB0 */ fopAc_ac_c* mRelActor; + /* 0xB4 */ fpc_ProcID mRelActorID; + /* 0xB8 */ char mRelUseMask; + /* 0xB9 */ char field_0xb9; + /* 0xBC */ f32 mCushion; + /* 0xC0 */ u32 field_0xc0[6]; + }; + + struct RailData { + /* 0x00 */ int field_0x00; + /* 0x04 */ fopAc_ac_c* field_0x04; + /* 0x08 */ fopAc_ac_c* field_0x08; + /* 0x0C */ u8 field_0x0c; + /* 0x0D */ u8 field_0x0d; + /* 0x0E */ u8 field_0xe[0x10 - 0x0e]; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ cXyz field_0x14; + /* 0x20 */ cXyz field_0x20; + }; + + struct OneSideData { + /* 0x00 */ int field_0x00; + /* 0x04 */ u8 field_0x04[0x1c - 0x04]; + /* 0x1C */ cXyz field_0x1c; + /* 0x28 */ u8 field_0x28; + /* 0x2C */ int field_0x2c; + /* 0x30 */ s16 field_0x30; + /* 0x30 */ cSAngle field_0x32; + /* 0x34 */ int field_0x34; + }; + + struct ObserveData { + /* 0x00 */ int field_0x00; + /* 0x04 */ cXyz field_0x04; + /* 0x10 */ cSGlobe field_0x10; + /* 0x18 */ u8 field_0x24[0x28 - 0x18]; + /* 0x28 */ cXyz field_0x28; + }; + + struct FixedFrameData { + /* 0x00 */ int field_0x00; + /* 0x04 */ cXyz field_0x04; + /* 0x10 */ cSGlobe field_0x10; + /* 0x18 */ int field_0x18; + /* 0x1C */ f32 field_0x1c; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ int mArrowIndex; + /* 0x2C */ cXyz field_0x2c; + /* 0x38 */ cXyz field_0x38; + }; + /* 80088A7C */ int StartEventCamera(int, int, ...); /* 80088BBC */ int EndEventCamera(int); /* 80088C24 */ int searchEventArgData(char*); @@ -394,13 +986,15 @@ public: void debugDraw(); - bool Active() { return field_0x24 == 0; } + int CameraID() { return mCameraID; } + + bool Active() { return mCurState == 0; } f32 TrimHeight() { return mTrimHeight; } int Type() { return mCurType; } int Mode() { return mCurMode; } f32 Fovy() { return mFovy + mShake.field_0x3c; } - bool isModeOK() { return field_0x158.field_0x0; } - bool push_any_key() { return field_0x224; } + bool isModeOK() { return mStyleSettle.mFinished; } + bool push_any_key() { return mCameraInputActive; } bool chkFlag(u32 i_flag) { return (mEventFlags & i_flag) != 0; } u32 setFlag(u32 i_flag) { return mEventFlags |= i_flag; } @@ -425,20 +1019,20 @@ public: } void SetWindow(f32 param_0, f32 param_1) { - field_0x914 = param_0; - field_0x918 = param_1; - field_0x92c = param_0 / param_1; + mWindowWidth = param_0; + mWindowHeight = param_1; + mWindowAspect = param_0 / param_1; } s16 U2() { if (chkFlag(0x10)) { - return field_0x5c.mDirection.U(); + return mViewCache.mDirection.U(); } else { - return field_0x8c; + return mControlledYaw; } } - void U2(s16 i_val) { field_0x8c = i_val; } + void U2(s16 i_val) { mControlledYaw = i_val; } void CorrectCenter() { setFlag(0x40000000); } @@ -454,11 +1048,11 @@ public: /* 0x04 */ cXyz field_0x04; /* 0x10 */ cXyz field_0x10; } - /* 0x004 */ field_0x004; + /* 0x004 */ mRoomCtx; /* 0x020 */ u8 field_0x20; /* 0x021 */ u8 field_0x21; /* 0x022 */ u8 field_0x22[2]; - /* 0x024 */ int field_0x24; + /* 0x024 */ int mCurState; /* 0x028 */ cSGlobe mDirection; /* 0x030 */ cXyz mCenter; /* 0x03C */ cXyz mEye; @@ -473,16 +1067,16 @@ public: /* 0x20 */ cSAngle mBank; /* 0x24 */ f32 mFovy; } - /* 0x05C */ field_0x5c; + /* 0x05C */ mViewCache; /* 0x084 */ f32 field_0x84; - /* 0x088 */ u32 field_0x88; - /* 0x08C */ cSAngle field_0x8c; - /* 0x090 */ cXyz field_0x90; - /* 0x09C */ cXyz field_0x9c; - /* 0x0A8 */ u32 field_0xa8; - /* 0x0AC */ u32 field_0xac; - /* 0x0B0 */ dCamInfo_c field_0xb0; - /* 0x0D0 */ dCamInfo_c field_0xd0[2]; + /* 0x088 */ u32 mBumpCheckFlags; + /* 0x08C */ cSAngle mControlledYaw; + /* 0x090 */ cXyz mLastHitPos; + /* 0x09C */ cXyz mCornerNormalSum; + /* 0x0A8 */ u32 mFrameCounter; + /* 0x0AC */ u32 mTicks; + /* 0x0B0 */ dCamInfo_c mSavedView; + /* 0x0D0 */ dCamInfo_c mSavedViewStack[2]; class { public: /* 0x00 */ int field_0x0; @@ -490,7 +1084,7 @@ public: /* 0x08 */ dCamInfo_c field_0x8; /* 0x28 */ cXyz field_0x28; } - /* 0x110 */ field_0x110; + /* 0x110 */ mRecovery; class { public: /* 0x0 */ cXyz field_0x0; @@ -499,50 +1093,50 @@ public: /* 0x144 */ field_0x144; class { public: - /* 0x0 */ bool field_0x0; + /* 0x0 */ bool mFinished; /* 0x2 */ cSAngle field_0x2; /* 0x4 */ cSAngle field_0x4; } - /* 0x158 */ field_0x158; + /* 0x158 */ mStyleSettle; /* 0x160 */ u32 field_0x160; /* 0x164 */ int field_0x164; /* 0x168 */ u8 field_0x168; - /* 0x169 */ int field_0x16c; + /* 0x16C */ int field_0x16c; /* 0x170 */ int field_0x170; - /* 0x174 */ u32 mCurCamStyleTimer; + /* 0x174 */ u32 mCurCamStyleTimer; // this might be a signed int in ShieldD /* 0x178 */ u32 mCameraID; /* 0x17C */ u32 mPadID; /* 0x180 */ fopAc_ac_c* mpPlayerActor; /* 0x184 */ fopAc_ac_c* mpLockonTarget; - /* 0x188 */ fopAc_ac_c* field_0x188; - /* 0x18C */ fopAc_ac_c* field_0x18c; + /* 0x188 */ fopAc_ac_c* mpAuxTargetActor1; + /* 0x18C */ fopAc_ac_c* mpAuxTargetActor2; /* 0x190 */ int mIsWolf; - /* 0x194 */ bool field_0x194; + /* 0x194 */ bool mMidnaRidingAndVisible; /* 0x198 */ fpc_ProcID mLockOnActorID; /* 0x19C */ fopAc_ac_c* mpLockOnActor; /* 0x1A0 */ int mForceLockTimer; /* 0x1A4 */ int mCurMode; /* 0x1A8 */ int mNextMode; - /* 0x1AC */ int field_0x1ac; - /* 0x1B0 */ cSAngle field_0x1b0; - /* 0x1B4 */ f32 field_0x1b4; + /* 0x1AC */ int mForcedMode; + /* 0x1B0 */ cSAngle mForwardTiltOffset; + /* 0x1B4 */ f32 mSightFitRadius; /* 0x1B8 */ u8 field_0x1b8[4]; /* 0x1BC */ dCamera_pad_info mPadInfo; - /* 0x1F4 */ int field_0x1f4; - /* 0x1F8 */ int field_0x1f8; - /* 0x1FC */ int field_0x1fc; + /* 0x1F4 */ int mCStickYState; + /* 0x1F8 */ int mCStickYHoldCount; + /* 0x1FC */ int mCStickUpLatch; /* 0x200 */ f32 mTriggerLeftLast; /* 0x204 */ f32 mTriggerLeftDelta; - /* 0x208 */ u8 field_0x208; - /* 0x209 */ u8 field_0x209; - /* 0x20A */ u8 field_0x20a; - /* 0x20B */ u8 field_0x20b; + /* 0x208 */ u8 mHoldLockL; + /* 0x209 */ u8 mTrigLockL; + /* 0x20A */ u8 mLockLActive; + /* 0x20B */ u8 mLockLJustActivated; /* 0x20C */ f32 mTriggerRightLast; /* 0x210 */ f32 mTriggerRightDelta; - /* 0x214 */ u8 field_0x214; - /* 0x215 */ u8 field_0x215; - /* 0x216 */ u8 field_0x216; - /* 0x217 */ u8 field_0x217; + /* 0x214 */ u8 mHoldLockR; + /* 0x215 */ u8 mTrigLockR; + /* 0x216 */ u8 mLockRActive; + /* 0x217 */ u8 mLockRJustActivated; /* 0x218 */ bool mHoldX; /* 0x219 */ bool mTrigX; /* 0x21A */ bool mHoldY; @@ -555,547 +1149,18 @@ public: /* 0x221 */ bool mTrigB; /* 0x222 */ u8 field_0x222; /* 0x223 */ u8 field_0x223; - /* 0x224 */ bool field_0x224; + /* 0x224 */ bool mCameraInputActive; /* 0x228 */ dCamForcusLine mFocusLine; /* 0x298 */ dCamera_FakeAngle_system mFakeAngleSys; /* 0x2A0 */ dCamera_monitoring_things mMonitor; /* 0x2C0 */ f32 field_0x2c0; - /* 0x2C4 */ int field_0x2c4; + /* 0x2C4 */ int mIdleFrameCount; /* 0x2C8 */ f32 field_0x2c8; /* 0x2CC */ BG mBG; - /* 0x3E8 */ union mWork { - struct { - /* 0x00 */ int field_0x0; - /* 0x04 */ int field_0x4; - /* 0x08 */ f32 field_0x8; - /* 0x0C */ f32 field_0xc; - /* 0x10 */ int field_0x10; - /* 0x14 */ int field_0x14; - /* 0x18 */ s16 field_0x18; - /* 0x1A */ s16 field_0x1a; - /* 0x1C */ s16 field_0x1c; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ f32 field_0x3c; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ int field_0x44; - /* 0x48 */ f32 field_0x48; - /* 0x4C */ f32 field_0x4c; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ cXyz field_0x58; - /* 0x64 */ cXyz field_0x64; - /* 0x70 */ bool field_0x70; - /* 0x71 */ bool field_0x71; - /* 0x72 */ bool field_0x72; - /* 0x73 */ bool field_0x73; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - /* 0x88 */ f32 field_0x88; - /* 0x8C */ int field_0x8c; - /* 0x90 */ bool field_0x90; - /* 0x91 */ bool field_0x91; - /* 0x92 */ bool field_0x92; - /* 0x93 */ bool field_0x93; - /* 0x94 */ bool field_0x94; - /* 0x95 */ bool field_0x95; - /* 0x96 */ cSAngle field_0x96; - /* 0x98 */ cSAngle field_0x98; - /* 0x9A */ cSAngle field_0x9a; - /* 0x9C */ int field_0x9c; - /* 0xA0 */ int field_0xa0; - /* 0xA4 */ f32 field_0xa4; - /* 0xA8 */ int field_0xa8; - /* 0xAC */ f32 field_0xac; - } chase; - struct { - /* 0x00 */ int field_0x0; - /* 0x04 */ u8 field_0x4[8]; - /* 0x0C */ int field_0xc; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ int field_0x14; - /* 0x18 */ bool field_0x18; - /* 0x1C */ cXyz field_0x1c; - /* 0x28 */ bool field_0x28; - /* 0x29 */ bool field_0x29; - /* 0x2A */ bool field_0x2a; - /* 0x2C */ int field_0x2c; - /* 0x30 */ int field_0x30; - /* 0x34 */ cSGlobe field_0x34; - /* 0x3C */ fpc_ProcID field_0x3c; - /* 0x40 */ bool field_0x40; - /* 0x42 */ cSAngle field_0x42; - /* 0x44 */ int field_0x44; - /* 0x48 */ f32 field_0x48; - /* 0x4C */ f32 field_0x4c; - /* 0x50 */ cSAngle field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; - /* 0x5C */ f32 field_0x5c; - /* 0x60 */ f32 field_0x60; - } lockon; - struct { - /* 0x00 */ int field_0x0; - /* 0x04 */ cXyz field_0x4; - /* 0x10 */ cXyz field_0x10; - /* 0x1C */ cXyz field_0x1c; - /* 0x28 */ cSGlobe field_0x28; - /* 0x30 */ cSGlobe field_0x30; - /* 0x38 */ int field_0x38; - /* 0x3C */ int field_0x3c; - /* 0x40 */ int field_0x40; - /* 0x44 */ int field_0x44; - /* 0x48 */ int field_0x48; - /* 0x4C */ f32 field_0x4c; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; - /* 0x5C */ f32 field_0x5c; - /* 0x60 */ f32 field_0x60; - /* 0x64 */ f32 field_0x64; - /* 0x68 */ f32 field_0x68; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ fopAc_ac_c* field_0x70; - /* 0x74 */ fopAc_ac_c* field_0x74; - /* 0x78 */ fopAc_ac_c* field_0x78; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ s16 field_0x84; - /* 0x86 */ s16 field_0x86; - /* 0x88 */ bool field_0x88; - /* 0x89 */ bool field_0x89; - /* 0x8C */ u32 field_0x8c; - /* 0x90 */ cXyz field_0x90; - /* 0x9C */ cXyz field_0x9c; - /* 0xA8 */ cSGlobe field_0xa8; - /* 0xB0 */ f32 field_0xb0; - /* 0xB4 */ cXyz field_0xb4; - /* 0xC0 */ cXyz field_0xc0; - /* 0xCC */ cXyz field_0xcc; - /* 0xD8 */ cXyz field_0xd8; - } talk; - struct { - /* 0x00 */ int field_0x0; - /* 0x04 */ cXyz field_0x4; - /* 0x10 */ int field_0x10; - /* 0x14 */ int field_0x14; - /* 0x18 */ int field_0x18; - /* 0x1C */ bool field_0x1c; - /* 0x1D */ bool field_0x1d; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ cSAngle field_0x28; - /* 0x2A */ cSAngle field_0x2a; - /* 0x2C */ cSAngle field_0x2c; - /* 0x2E */ cSAngle field_0x2e; - /* 0x30 */ cXyz field_0x30; - /* 0x3C */ cXyz field_0x3c; - /* 0x48 */ cSGlobe field_0x48; - } subject; - struct { - /* 0x00 */ int field_0x0; - /* 0x04 */ cXyz field_0x4; - /* 0x10 */ cXyz field_0x10; - /* 0x1C */ cSGlobe field_0x1c; - } magne; - struct { - /* 0x00 */ u8 field_0x0[8]; - /* 0x08 */ cXyz field_0x8; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ int field_0x18; - } colosseum; - struct { - /* 0x00 */ int field_0x0; - /* 0x04 */ int field_0x4; - /* 0x08 */ f32 field_0x8; - /* 0x0C */ f32 field_0xc; - /* 0x10 */ int field_0x10; - /* 0x14 */ int field_0x14; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1c; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ cSAngle field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ int field_0x38; - /* 0x3C */ f32 field_0x3c; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ f32 field_0x44; - /* 0x48 */ cXyz field_0x48; - /* 0x54 */ cXyz field_0x54; - /* 0x60 */ cSAngle field_0x60; - /* 0x64 */ int field_0x64; - /* 0x68 */ bool field_0x68; - /* 0x69 */ bool field_0x69; - /* 0x6A */ bool field_0x6a; - /* 0x6B */ bool field_0x6b; - /* 0x6C */ bool field_0x6c; - /* 0x70 */ f32 field_0x70; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - } tower; - struct { - /* 0x00 */ int field_0x0; - /* 0x04 */ u8 field_0x4[4]; - /* 0x08 */ cXyz field_0x8; - /* 0x14 */ cXyz field_0x14; - /* 0x20 */ bool field_0x20; - } hookshot; - struct event { - /* 0x00 */ bool field_0x0; - /* 0x01 */ bool field_0x1; - /* 0x04 */ int field_0x4; - /* 0x08 */ int field_0x8; - /* 0x0C */ u8 field_0xc[0x10 - 0xc]; - /* 0x10 */ cXyz field_0x10; - /* 0x1C */ f32 mFovy; - /* 0x20 */ f32 mBank; - /* 0x24 */ fopAc_ac_c* mRelActor; - /* 0x28 */ char mRelUseMask; - /* 0x29 */ char field_0x29; - /* 0x2C */ int mTimer; - /* 0x30 */ bool field_0x30; - /* 0x34 */ cXyz mBasePos; - /* 0x40 */ char field_0x40; - /* 0x41 */ char field_0x41; - /* 0x42 */ u8 field_0x42[0x48 - 0x42]; - /* 0x48 */ char field_0x48; - /* 0x49 */ u8 field_0x49[0x4c - 0x49]; - /* 0x4C */ int field_0x4c; - /* 0x50 */ int field_0x50; - /* 0x54 */ u8 field_0x54[0x5c - 0x54]; - /* 0x5C */ f32* field_0x5c; - /* 0x60 */ u8 field_0x60[0x6c - 0x60]; - /* 0x6C */ int field_0x6c; - } event; - struct fixedFrame { - /* 0x00 */ bool field_0x0; - /* 0x04 */ cXyz field_0x4; - /* 0x10 */ cXyz field_0x10; - /* 0x1C */ f32 field_0x1c; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ fopAc_ac_c* mpRelActor; - /* 0x28 */ char mRelUseMask[4]; - /* 0x2C */ int mTimer; - /* 0x30 */ bool field_0x30; - /* 0x34 */ cXyz mBasePos; - } fixedFrame; - struct stoker { - /* 0x00 */ bool field_0x0; - /* 0x01 */ bool field_0x1; - /* 0x02 */ u8 field_0x2[2]; - /* 0x04 */ cXyz field_0x4; - /* 0x10 */ cXyz field_0x10; - /* 0x1C */ f32 field_0x1c; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ fopAc_ac_c* field_0x2c; - /* 0x30 */ fopAc_ac_c* field_0x30; - /* 0x34 */ fpc_ProcID field_0x34; - /* 0x38 */ fpc_ProcID field_0x38; - /* 0x3C */ u8 field_0x3c[0x40 - 0x3c]; - /* 0x40 */ int field_0x40; - } stoker; - struct rolling { - /* 0x00 */ bool field_0x0; - /* 0x00 */ bool field_0x1; - /* 0x04 */ cXyz field_0x4; - /* 0x10 */ cXyz field_0x10; - /* 0x1C */ cXyz mEye; - /* 0x28 */ cXyz mCenter; - /* 0x34 */ f32 mFovy; - /* 0x38 */ f32 mBank; - /* 0x3C */ fopAc_ac_c* mpRelActor; - /* 0x40 */ char mRelActor[4]; - /* 0x44 */ int mTimer; - /* 0x48 */ int mTransType; - /* 0x4C */ f32 mRoll; - /* 0x50 */ f32 mRadiusAdd; - /* 0x54 */ f32 mLatitude; - /* 0x58 */ f32 mCtrCus; - } rolling; - struct fixedPos { - /* 0x00 */ bool field_0x0; - /* 0x00 */ bool field_0x1; - /* 0x04 */ cXyz field_0x4; - /* 0x10 */ cXyz field_0x10; - /* 0x1C */ cXyz field_0x1c; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ fopAc_ac_c* field_0x3c; - /* 0x40 */ fopAc_ac_c* field_0x40; - /* 0x44 */ fpc_ProcID field_0x44; - /* 0x48 */ u8 field_0x48[0x4c - 0x48]; - /* 0x4C */ u32 field_0x4c; - } fixedPos; - struct trans { - /* 0x00 */ cXyz mStartEye; - /* 0x0C */ cXyz mStartCenter; - /* 0x18 */ f32 mStartFovy; - /* 0x1C */ f32 field_0x1c; - /* 0x20 */ cXyz mEye; - /* 0x2C */ cXyz mCenter; - /* 0x38 */ f32 mFovy; - /* 0x3C */ f32 field_0x3c; - /* 0x40 */ fopAc_ac_c* mRelActor; - /* 0x44 */ fpc_ProcID mRelActorID; - /* 0x48 */ char mRelUseMask; - /* 0x49 */ char field_0x49; - /* 0x4A */ char field_0x4a; - /* 0x4B */ char field_0x4b; - /* 0x4C */ u8 field_0x4c[4]; - /* 0x50 */ int mTimer; - /* 0x54 */ int mTransType; - /* 0x58 */ f32 mCushion; - /* 0x5C */ f32* mBSpPoints; - /* 0x60 */ cSGlobe field_0x60; - /* 0x68 */ bool field_0x68; - /* 0x6C */ int mBSpCurve; - } trans; - struct actor { - /* 0x00 */ cXyz mCtrGap; - /* 0x0C */ cXyz field_0xc; - /* 0x18 */ f32 mCushion; - /* 0x1C */ int mNearTimer; - /* 0x20 */ f32 mNearDist; - /* 0x24 */ int mFarTimer; - /* 0x28 */ f32 mFarDist; - /* 0x2C */ f32 mZoomDist; - /* 0x30 */ f32 mZoomVAngle; - /* 0x34 */ fopAc_ac_c* mTargetActor; - /* 0x38 */ fpc_ProcID mTargetActorID; - /* 0x3C */ cSGlobe field_0x3c; - /* 0x44 */ int field_0x44; - /* 0x48 */ u8 field_0x48[4]; - /* 0x4C */ cSGlobe field_0x4c; - /* 0x54 */ int field_0x54; - /* 0x58 */ int mBlure; - /* 0x5C */ f32 mFrontAngle; - /* 0x60 */ f32 mFovy; - /* 0x64 */ u8 field_0x64[4]; - /* 0x68 */ int field_0x68; - } actor; - struct restorePos { - /* 0x000 */ cXyz field_0x0; - /* 0x00C */ cXyz field_0xc; - /* 0x018 */ f32 field_0x18; - /* 0x01C */ int field_0x1c; - /* 0x020 */ f32 field_0x20; - /* 0x024 */ int field_0x24; - /* 0x028 */ f32 field_0x28; - /* 0x02C */ u8 field_0x2c[0x034 - 0x02C]; - /* 0x034 */ fopAc_ac_c* field_0x34; - /* 0x038 */ cSGlobe field_0x38; - /* 0x040 */ int field_0x40; - /* 0x044 */ int field_0x44; - /* 0x048 */ dCamInfo_c field_0x48; - /* 0x068 */ int field_0x68; - /* 0x06C */ u8 field_0x6c[0x100 - 0x6c]; - } restorePos; - struct gameOver { - /* 0x00 */ int field_0x0; - /* 0x04 */ int field_0x4; - /* 0x08 */ int field_0x8; - /* 0x0C */ int mType; - /* 0x10 */ cXyz field_0x10; - /* 0x1C */ cSGlobe field_0x1c; - /* 0x24 */ u8 field_0x24[0x3c - 0x24]; - /* 0x3C */ bool field_0x3c; - } gameOver; - struct tact { - /* 0x00 */ int field_0x0; - /* 0x04 */ int field_0x4; - /* 0x08 */ int field_0x8; - /* 0x0C */ int field_0xc; - /* 0x10 */ u8 field_0x10[4]; - /* 0x14 */ int field_0x14; - /* 0x18 */ u8 field_0x18[4]; - /* 0x1C */ cXyz* field_0x1c; - /* 0x20 */ cXyz* field_0x20; - /* 0x24 */ int field_0x24; - /* 0x28 */ u8 field_0x28[4]; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ cXyz field_0x30; - /* 0x3C */ cXyz field_0x3c; - } tact; - struct load { - /* 0x00 */ int mTimer; - /* 0x04 */ int mSlot; - /* 0x08 */ int mType; - /* 0x0C */ cSGlobe field_0xc; - /* 0x14 */ cSGlobe field_0x14; - /* 0x1C */ cXyz field_0x1c; - /* 0x28 */ cXyz field_0x28; - /* 0x34 */ cXyz field_0x34; - /* 0x40 */ cSAngle field_0x40; - /* 0x42 */ cSAngle field_0x42; - /* 0x44 */ f32 field_0x44; - /* 0x48 */ f32 field_0x48; - } load; - struct item { - /* 0x00 */ int field_0x0; - /* 0x04 */ int field_0x4; - /* 0x08 */ int mType; - /* 0x0C */ cXyz field_0xc; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ int field_0x1c; - /* 0x20 */ int field_0x20; - /* 0x24 */ cSGlobe field_0x24; - /* 0x2C */ cXyz field_0x2c; - /* 0x38 */ cXyz field_0x38; - /* 0x44 */ cXyz field_0x44; - /* 0x50 */ cXyz field_0x50; - /* 0x5C */ f32 field_0x5c; - } item; - struct getItem { - /* 0x000 */ u8 field_0x0[4]; - /* 0x004 */ int mTimer; - /* 0x008 */ int field_0x8; - /* 0x00C */ fopAc_ac_c* mRelActor; - /* 0x010 */ fpc_ProcID mRelActorID; - /* 0x014 */ f32* mCurvePoints; - /* 0x018 */ int field_0x18; - /* 0x01C */ cXyz mStartCenter; - /* 0x028 */ cXyz mStartEye; - /* 0x034 */ u8 field_0x34[8]; - /* 0x03C */ cSGlobe field_0x3c; - /* 0x044 */ cXyz field_0x44; - /* 0x050 */ cXyz field_0x50; - /* 0x05C */ u8 field_0x5C[8]; - /* 0x064 */ cSGlobe field_0x64; - } getItem; - struct possessed { - /* 0x00 */ int field_0x0; - /* 0x04 */ int mType; - /* 0x08 */ int mTimer; - /* 0x0C */ int field_0xc; - /* 0x10 */ f32 mRadius; - /* 0x14 */ cSAngle mLatitude; - /* 0x16 */ cSAngle mLongitude; - /* 0x18 */ f32 mFovy; - /* 0x1C */ f32 mCushion; - /* 0x20 */ int mBlure; - /* 0x24 */ fopAc_ac_c* mTargetActor; - /* 0x28 */ cSGlobe field_0x28; - } possessed; - struct fixedFrames { - /* 0x00 */ bool field_0x0; - /* 0x04 */ cXyz field_0x4; - /* 0x10 */ cXyz field_0x10; - /* 0x1C */ cXyz* field_0x1c[2]; - /* 0x24 */ f32* field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ fopAc_ac_c* mRelActor; - /* 0x30 */ char mRelUseMask; - /* 0x31 */ char field_0x31; - /* 0x34 */ int mTimer; - /* 0x38 */ int field_0x38; - /* 0x3C */ int mChoice; - } fixedFrames; - struct bSpline { - /* 0x00 */ cXyz* mCenters; - /* 0x04 */ cXyz* mEyes; - /* 0x08 */ f32* mFovys; - /* 0x0C */ int mTimer; - /* 0x10 */ int field_0x10; - /* 0x14 */ fopAc_ac_c* mRelActor; - /* 0x18 */ u8 field_0x18[4]; - /* 0x1c */ bool field_0x1c; - } bSpline; - struct twoActor0 { - /* 0x00 */ fopAc_ac_c* mActor1; - /* 0x04 */ fopAc_ac_c* mActor2; - /* 0x08 */ u8 field_0x8[4]; - /* 0x0C */ fpc_ProcID mActor1ID; - /* 0x10 */ fpc_ProcID mActor2ID; - /* 0x14 */ f32 mCtrCus; - /* 0x18 */ f32 mEyeCus; - /* 0x1C */ f32 mRadiusMin; - /* 0x20 */ f32 mRadiusMax; - /* 0x24 */ f32 mLatitudeMin; - /* 0x28 */ f32 mLatitudeMax; - /* 0x2C */ f32 mLongitudeMin; - /* 0x30 */ f32 mLongitudeMax; - /* 0x34 */ int mLongitudeType; - /* 0x38 */ f32 mFovy; - /* 0x3C */ f32 mCtrRatio; - /* 0x40 */ cXyz mCtrGap; - /* 0x4C */ f32 field_0x4c; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ cSAngle field_0x54; - /* 0x56 */ cSAngle field_0x56; - /* 0x58 */ cSAngle field_0x58; - /* 0x5A */ cSAngle field_0x5a; - } twoActor0; - struct digHole { - /* 0x00 */ int field_0x0; - /* 0x04 */ int mType; - /* 0x08 */ int field_0x8; - /* 0x0C */ f32 field_0xc; - /* 0x10 */ u8 field_0x10; - /* 0x11 */ u8 field_0x11[3]; - /* 0x14 */ cXyz field_0x14; - /* 0x20 */ cXyz field_0x20; - } digHole; - struct hintTalk { - /* 0x00 */ fopAc_ac_c* mTeacher; - /* 0x04 */ fopAc_ac_c* mStudent; - /* 0x08 */ cXyz field_0x8; - /* 0x14 */ cXyz field_0x14; - /* 0x20 */ cSGlobe mDirection; - /* 0x28 */ cSGlobe field_0x28; - /* 0x30 */ f32 mRadius; - /* 0x34 */ f32 mFovy; - /* 0x38 */ f32 mCtrGapY; - /* 0x3C */ int mTimer; - /* 0x40 */ cXyz field_0x40; - } hintTalk; - struct bspTrans { - /* 0x00 */ int mTimer; - /* 0x04 */ f32* mBase; - /* 0x08 */ f32* mSet1; - /* 0x0C */ d2DBSplinePath mSplinePath1; - /* 0x40 */ f32* mSet2; - /* 0x44 */ d2DBSplinePath mSplinePath2; - /* 0x78 */ cXyz field_0x78; - /* 0x84 */ cXyz field_0x84; - /* 0x90 */ f32 field_0x90; - /* 0x94 */ cXyz field_0x94; - /* 0xA0 */ cXyz field_0xa0; - /* 0xAC */ f32 field_0xac; - /* 0xB0 */ fopAc_ac_c* mRelActor; - /* 0xB4 */ fpc_ProcID mRelActorID; - /* 0xB8 */ char mRelUseMask; - /* 0xB9 */ char field_0xb9; - /* 0xBC */ f32 mCushion; - /* 0xC0 */ u32 field_0xc0[6]; - - - } bspTrans; - struct { - u8 field_0x0[0x100]; - } bytes; - } mWork; + /* 0x3E8 */ u8 mWork[0x100]; /* 0x4E8 */ dCamera_event_data mEventData; /* 0x60C */ u32 mEventFlags; - /* 0x610 */ u8 field_0x610; + /* 0x610 */ u8 mFastShotState; /* 0x611 */ u8 field_0x611; /* 0x612 */ u8 field_0x612[2]; class { @@ -1112,7 +1177,7 @@ public: /* 0x674 */ int field_0x674; /* 0x678 */ u8 field_0x678; /* 0x67C */ int mCamStyle; - /* 0x680 */ int field_0x680; + /* 0x680 */ int mEngineHoldState; /* 0x684 */ dCamera_type_data* mCamTypeData; /* 0x688 */ int mCamTypeNum; /* 0x68C */ int mCurType; @@ -1137,7 +1202,7 @@ public: /* 0x700 */ mBlure; /* 0x734 */ f32 field_0x734; /* 0x738 */ f32 field_0x738; - /* 0x73C */ f32 field_0x73c; + /* 0x73C */ f32 mZoomRatio; class { public: /* 0x00 */ cXyz field_0x0; @@ -1145,7 +1210,7 @@ public: /* 0x18 */ cXyz field_0x18; /* 0x24 */ cSGlobe field_0x24; } - /* 0x740 */ field_0x740; + /* 0x740 */ mUpOverride; /* 0x76C */ u8 field_0x76c[0x79c - 0x76c]; class { public: @@ -1153,30 +1218,30 @@ public: /* 0x4 */ cXyz field_0x4; } /* 0x79C */ field_0x79c; - /* 0x7AC */ dCamMapToolData field_0x7ac; - /* 0x7E8 */ dCamMapToolData field_0x7e8; - /* 0x824 */ dCamMapToolData field_0x824; - /* 0x860 */ dCamMapToolData field_0x860; + /* 0x7AC */ dCamMapToolData mRoomMapTool; + /* 0x7E8 */ dCamMapToolData mStageCamTool; + /* 0x824 */ dCamMapToolData mDefRoomCamTool; + /* 0x860 */ dCamMapToolData mTagCamTool; /* 0x89C */ dCamMapToolData field_0x89c; /* 0x8D8 */ dCamMapToolData field_0x8d8; - /* 0x914 */ f32 field_0x914; - /* 0x918 */ f32 field_0x918; + /* 0x914 */ f32 mWindowWidth; + /* 0x918 */ f32 mWindowHeight; /* 0x91C */ f32 field_0x91c; /* 0x920 */ f32 mTrimHeight; /* 0x924 */ int mTrimSize; /* 0x928 */ int mTrimTypeForce; - /* 0x92C */ f32 field_0x92c; + /* 0x92C */ f32 mWindowAspect; /* 0x930 */ u8 field_0x930[0x930 - 0x92c]; - /* 0x934 */ f32 field_0x934; - /* 0x938 */ int field_0x938; + /* 0x934 */ f32 mWallUpDist; + /* 0x938 */ int mWallRecoverStepCount; /* 0x93C */ int field_0x93c; - /* 0x940 */ int field_0x940; + /* 0x940 */ int mGear; /* 0x944 */ u8 field_0x944; /* 0x948 */ int mThrowTimer; - /* 0x94C */ cSAngle field_0x94c; + /* 0x94C */ cSAngle mBankOverride; /* 0x950 */ int field_0x950; /* 0x954 */ u8 field_0x954[0x958 - 0x954]; - /* 0x958 */ int field_0x958; + /* 0x958 */ int mLastBumpCase; /* 0x95C */ cXyz field_0x95c; /* 0x968 */ f32 field_0x968; /* 0x96C */ f32 field_0x96c; @@ -1186,8 +1251,6 @@ public: /* 0xB0D */ u8 field_0xb0d[0xd58 - 0xb0d]; }; // Size: 0xD58 -#pragma warn_illunionmembers on - dCamera_c* dCam_getBody(); camera_class* dCam_getCamera(); s16 dCam_getControledAngleY(camera_class* param_0); diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 7b4e0a7d98..4f74241ca1 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -9,7 +9,9 @@ #include "d/d_resorce.h" #include "d/d_save.h" #include "d/d_vibration.h" -#include "f_op/f_op_camera_mng.h" +#include "d/d_drawlist.h" +#include "d/d_stage.h" +#include "f_op/f_op_actor.h" #include "global.h" #include "m_Do/m_Do_controller_pad.h" @@ -45,6 +47,7 @@ public: /* 0x4 */ JKRHeap* mpHeap; }; +class camera_class; class dComIfG_camera_info_class { public: dComIfG_camera_info_class() {} @@ -4106,10 +4109,10 @@ inline view_port_class* dComIfGd_getViewport() { } inline MtxP dComIfGd_getViewRotMtx() { - return ((camera_process_class*)g_dComIfG_gameInfo.drawlist.getView())->viewMtxNoTrans; + return g_dComIfG_gameInfo.drawlist.getView()->viewMtxNoTrans; } inline MtxP dComIfGd_getViewMtx() { - return ((camera_process_class*)g_dComIfG_gameInfo.drawlist.getView())->viewMtx; + return g_dComIfG_gameInfo.drawlist.getView()->viewMtx; } inline J3DDrawBuffer* dComIfGd_getListFilter() { diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 6d7a39be83..b403879d67 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -1362,7 +1362,7 @@ inline u16 dStage_stagInfo_GetStageTitleNo(stage_stag_info_class* pstag) { return pstag->mStageTitleNo; } -inline u8 dStage_stagInfo_DefaultCameraType(stage_stag_info_class* pstag) { +inline int dStage_stagInfo_DefaultCameraType(stage_stag_info_class* pstag) { return pstag->mCameraType; } diff --git a/src/d/actor/d_a_L7demo_dr.cpp b/src/d/actor/d_a_L7demo_dr.cpp index 689c8790e6..9b9bcdc8a3 100644 --- a/src/d/actor/d_a_L7demo_dr.cpp +++ b/src/d/actor/d_a_L7demo_dr.cpp @@ -10,6 +10,7 @@ #include "d/actor/d_a_obj_lv7bridge.h" #include "d/d_com_inf_game.h" #include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_overlap_mng.h" /* 805A9238-805A92DC 000078 00A4+00 5/5 0/0 0/0 .text setAction__6daDr_cFM6daDr_cFPCvPv_v diff --git a/src/d/actor/d_a_L7op_demo_dr.cpp b/src/d/actor/d_a_L7op_demo_dr.cpp index a06a402b8f..07d72662c3 100644 --- a/src/d/actor/d_a_L7op_demo_dr.cpp +++ b/src/d/actor/d_a_L7op_demo_dr.cpp @@ -10,6 +10,7 @@ #include "d/d_com_inf_game.h" #include "d/d_s_play.h" #include "d/actor/d_a_npc.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_msg_mng.h" /* 805AB098-805AB13C 000078 00A4+00 2/2 0/0 0/0 .text setAction__9daL7ODR_cFM9daL7ODR_cFPCvPv_v */ diff --git a/src/d/actor/d_a_b_bq.cpp b/src/d/actor/d_a_b_bq.cpp index 0c8375813e..881ecdb596 100644 --- a/src/d/actor/d_a_b_bq.cpp +++ b/src/d/actor/d_a_b_bq.cpp @@ -9,7 +9,7 @@ #include "d/d_com_inf_game.h" #include "d/actor/d_a_player.h" #include "d/d_s_play.h" -#include "dol2asm.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_msg_mng.h" #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_graphic.h" diff --git a/src/d/actor/d_a_b_dr.cpp b/src/d/actor/d_a_b_dr.cpp index ae73a7467c..7a8d72a2f1 100644 --- a/src/d/actor/d_a_b_dr.cpp +++ b/src/d/actor/d_a_b_dr.cpp @@ -14,6 +14,7 @@ #include "d/actor/d_a_npc.h" #include "d/d_camera.h" #include "c/c_damagereaction.h" +#include "f_op/f_op_camera_mng.h" #include "Z2AudioLib/Z2Instances.h" diff --git a/src/d/actor/d_a_b_dre.cpp b/src/d/actor/d_a_b_dre.cpp index 9a8f380fc4..24583126ac 100644 --- a/src/d/actor/d_a_b_dre.cpp +++ b/src/d/actor/d_a_b_dre.cpp @@ -13,6 +13,7 @@ #include "d/d_camera.h" #include "d/d_com_inf_game.h" #include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_graphic.h" int daB_DRE_c::CreateHeap() { diff --git a/src/d/actor/d_a_b_ds.cpp b/src/d/actor/d_a_b_ds.cpp index 0c2d45d2d4..8f62f8f369 100644 --- a/src/d/actor/d_a_b_ds.cpp +++ b/src/d/actor/d_a_b_ds.cpp @@ -8,8 +8,8 @@ #include "d/actor/d_a_b_ds.h" #include "d/actor/d_a_player.h" #include "d/d_s_play.h" -#include "dol2asm.h" #include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_msg.h" #include "f_op/f_op_msg_mng.h" #include "d/actor/d_a_spinner.h" diff --git a/src/d/actor/d_a_b_gg.cpp b/src/d/actor/d_a_b_gg.cpp index 6ad2044179..d87d533863 100644 --- a/src/d/actor/d_a_b_gg.cpp +++ b/src/d/actor/d_a_b_gg.cpp @@ -11,6 +11,7 @@ #include "m_Do/m_Do_graphic.h" #include "Z2AudioLib/Z2Instances.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" class daB_GG_HIO_c : public JORReflexible { public: diff --git a/src/d/actor/d_a_b_gm.cpp b/src/d/actor/d_a_b_gm.cpp index b84d43c8d8..38bd222955 100644 --- a/src/d/actor/d_a_b_gm.cpp +++ b/src/d/actor/d_a_b_gm.cpp @@ -12,6 +12,7 @@ #include "d/d_com_inf_game.h" #include "c/c_damagereaction.h" #include "SSystem/SComponent/c_math.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_msg_mng.h" #include "Z2AudioLib/Z2Instances.h" diff --git a/src/d/actor/d_a_b_mgn.cpp b/src/d/actor/d_a_b_mgn.cpp index be4cf0ec70..39a1bcb8d9 100644 --- a/src/d/actor/d_a_b_mgn.cpp +++ b/src/d/actor/d_a_b_mgn.cpp @@ -8,6 +8,7 @@ #include "d/actor/d_a_b_mgn.h" #include "d/actor/d_a_obj_bhashi.h" #include "d/d_camera.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_msg_mng.h" #include "m_Do/m_Do_graphic.h" #include "f_op/f_op_actor_enemy.h" diff --git a/src/d/actor/d_a_b_ob.cpp b/src/d/actor/d_a_b_ob.cpp index afec483e90..0f5d04fcd7 100644 --- a/src/d/actor/d_a_b_ob.cpp +++ b/src/d/actor/d_a_b_ob.cpp @@ -13,6 +13,7 @@ #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_msg_mng.h" #include "m_Do/m_Do_graphic.h" #include "d/actor/d_a_b_oh.h" diff --git a/src/d/actor/d_a_b_tn.cpp b/src/d/actor/d_a_b_tn.cpp index 858f646db7..5789d8f78d 100644 --- a/src/d/actor/d_a_b_tn.cpp +++ b/src/d/actor/d_a_b_tn.cpp @@ -12,6 +12,7 @@ #include "d/actor/d_a_nbomb.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" class daB_TN_HIO_c { public: diff --git a/src/d/actor/d_a_b_yo.cpp b/src/d/actor/d_a_b_yo.cpp index 4a7d453e3d..fc4eb109fe 100644 --- a/src/d/actor/d_a_b_yo.cpp +++ b/src/d/actor/d_a_b_yo.cpp @@ -10,6 +10,7 @@ #include "SSystem/SComponent/c_math.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "m_Do/m_Do_graphic.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_msg.h" #include "f_op/f_op_msg_mng.h" #include "c/c_damagereaction.h" diff --git a/src/d/actor/d_a_bd.cpp b/src/d/actor/d_a_bd.cpp index faa7867a81..729bf18cfb 100644 --- a/src/d/actor/d_a_bd.cpp +++ b/src/d/actor/d_a_bd.cpp @@ -11,6 +11,7 @@ #include "d/actor/d_a_npc_kkri.h" #include "d/d_cc_d.h" #include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" #include "Z2AudioLib/Z2Instances.h" /* ############################################################################################## */ diff --git a/src/d/actor/d_a_cow.cpp b/src/d/actor/d_a_cow.cpp index 4e1688fdfe..d6cf731111 100644 --- a/src/d/actor/d_a_cow.cpp +++ b/src/d/actor/d_a_cow.cpp @@ -17,6 +17,7 @@ #include "d/d_timer.h" #include "dolphin/types.h" #include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_ext.h" #include "m_Do/m_Do_lib.h" #include "m_Do/m_Do_mtx.h" diff --git a/src/d/actor/d_a_e_bee.cpp b/src/d/actor/d_a_e_bee.cpp index dbd03d00d7..5befdd0145 100644 --- a/src/d/actor/d_a_e_bee.cpp +++ b/src/d/actor/d_a_e_bee.cpp @@ -11,6 +11,7 @@ #include "d/actor/d_a_player.h" #include "d/d_procname.h" #include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" #include "SSystem/SComponent/c_math.h" /* 80685674-80685678 -00001 0004+00 2/2 0/0 0/0 .bss None */ diff --git a/src/d/actor/d_a_e_bg.cpp b/src/d/actor/d_a_e_bg.cpp index aec8345d8a..da26ad3f8e 100644 --- a/src/d/actor/d_a_e_bg.cpp +++ b/src/d/actor/d_a_e_bg.cpp @@ -14,6 +14,7 @@ #include "d/d_com_inf_game.h" #include "d/d_drawlist.h" #include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" /* 8068580C-8068585C 0000EC 0050+00 1/1 0/0 0/0 .text __ct__12daE_BG_HIO_cFv */ daE_BG_HIO_c::daE_BG_HIO_c() { diff --git a/src/d/actor/d_a_e_df.cpp b/src/d/actor/d_a_e_df.cpp index 982dc68155..c48c03de0c 100644 --- a/src/d/actor/d_a_e_df.cpp +++ b/src/d/actor/d_a_e_df.cpp @@ -8,6 +8,7 @@ #include "d/actor/d_a_e_df.h" #include "d/actor/d_a_obj_carry.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" class daE_DF_HIO_c : public JORReflexible { public: diff --git a/src/d/actor/d_a_e_dt.cpp b/src/d/actor/d_a_e_dt.cpp index 88971ce4cb..e3fb41c5e1 100644 --- a/src/d/actor/d_a_e_dt.cpp +++ b/src/d/actor/d_a_e_dt.cpp @@ -17,6 +17,7 @@ #include "d/d_com_inf_game.h" #include "d/d_bomb.h" #include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_lib.h" diff --git a/src/d/actor/d_a_e_fm.cpp b/src/d/actor/d_a_e_fm.cpp index ed2f036734..2b73057845 100644 --- a/src/d/actor/d_a_e_fm.cpp +++ b/src/d/actor/d_a_e_fm.cpp @@ -12,6 +12,7 @@ #include "d/actor/d_a_obj_hhashi.h" #include "d/actor/d_a_obj_ystone.h" #include "c/c_damagereaction.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_msg_mng.h" #include "Z2AudioLib/Z2Instances.h" diff --git a/src/d/actor/d_a_e_gb.cpp b/src/d/actor/d_a_e_gb.cpp index 348a217d76..3271fb7a92 100644 --- a/src/d/actor/d_a_e_gb.cpp +++ b/src/d/actor/d_a_e_gb.cpp @@ -11,6 +11,7 @@ #include "d/d_bomb.h" #include "d/actor/d_a_obj_smallkey.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" /* 806C1CEC-806C1D3C 0000EC 0050+00 1/1 0/0 0/0 .text __ct__12daE_GB_HIO_cFv */ diff --git a/src/d/actor/d_a_e_gi.cpp b/src/d/actor/d_a_e_gi.cpp index 192a583520..dbb4b5db70 100644 --- a/src/d/actor/d_a_e_gi.cpp +++ b/src/d/actor/d_a_e_gi.cpp @@ -8,6 +8,7 @@ #include "d/actor/d_a_e_gi.h" #include "d/d_com_inf_game.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" class daE_GI_HIO_c : public JORReflexible { public: diff --git a/src/d/actor/d_a_e_gob.cpp b/src/d/actor/d_a_e_gob.cpp index 54b9be12b1..c84425ae74 100644 --- a/src/d/actor/d_a_e_gob.cpp +++ b/src/d/actor/d_a_e_gob.cpp @@ -12,6 +12,7 @@ #include "d/actor/d_a_obj_msima.h" #include "d/actor/d_a_obj_myogan.h" #include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_graphic.h" #include "c/c_damagereaction.h" #include "Z2AudioLib/Z2Instances.h" diff --git a/src/d/actor/d_a_e_hzelda.cpp b/src/d/actor/d_a_e_hzelda.cpp index 6744382a5f..c2e39de5c3 100644 --- a/src/d/actor/d_a_e_hzelda.cpp +++ b/src/d/actor/d_a_e_hzelda.cpp @@ -9,6 +9,7 @@ #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "SSystem/SComponent/c_math.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_msg_mng.h" #include "m_Do/m_Do_graphic.h" #include "d/d_s_play.h" diff --git a/src/d/actor/d_a_e_mk.cpp b/src/d/actor/d_a_e_mk.cpp index c0b664f252..5e015aa31c 100644 --- a/src/d/actor/d_a_e_mk.cpp +++ b/src/d/actor/d_a_e_mk.cpp @@ -17,6 +17,7 @@ #include "d/actor/d_a_obj_brg.h" #include "d/actor/d_a_e_mk_bo.h" #include "d/d_camera.h" +#include "f_op/f_op_camera_mng.h" #include "Z2AudioLib/Z2Instances.h" class daE_MK_HIO_c : public JORReflexible { diff --git a/src/d/actor/d_a_e_nest.cpp b/src/d/actor/d_a_e_nest.cpp index ef5cdda90c..725354da05 100644 --- a/src/d/actor/d_a_e_nest.cpp +++ b/src/d/actor/d_a_e_nest.cpp @@ -12,6 +12,7 @@ #include "d/actor/d_a_player.h" #include "d/d_bomb.h" #include "d/d_procname.h" +#include "f_op/f_op_camera_mng.h" /* 80504950-80504954 000008 0004+00 2/2 0/0 0/0 .bss None */ static bool l_hioInit; diff --git a/src/d/actor/d_a_e_oc.cpp b/src/d/actor/d_a_e_oc.cpp index 6a65e5e198..3c8c274d28 100644 --- a/src/d/actor/d_a_e_oc.cpp +++ b/src/d/actor/d_a_e_oc.cpp @@ -13,6 +13,7 @@ #include "d/actor/d_a_obj_rotBridge.h" #include "d/d_cc_uty.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" class daE_OC_HIO_c { public: diff --git a/src/d/actor/d_a_e_ph.cpp b/src/d/actor/d_a_e_ph.cpp index cc9e703b1a..e9e316783c 100644 --- a/src/d/actor/d_a_e_ph.cpp +++ b/src/d/actor/d_a_e_ph.cpp @@ -10,6 +10,7 @@ #include "d/d_com_inf_game.h" #include "d/actor/d_a_player.h" #include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" #define PH_BMD 20 diff --git a/src/d/actor/d_a_e_pm.cpp b/src/d/actor/d_a_e_pm.cpp index 1efbb487cb..d1f5cca00f 100644 --- a/src/d/actor/d_a_e_pm.cpp +++ b/src/d/actor/d_a_e_pm.cpp @@ -17,6 +17,7 @@ #include "d/actor/d_a_player.h" #include "d/actor/d_a_obj_smw_stone.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" class daE_PM_HIO_c { public: diff --git a/src/d/actor/d_a_e_po.cpp b/src/d/actor/d_a_e_po.cpp index c4e6bbf7e6..b8cbf82a06 100644 --- a/src/d/actor/d_a_e_po.cpp +++ b/src/d/actor/d_a_e_po.cpp @@ -10,6 +10,7 @@ #include "d/d_cc_d.h" #include "d/d_cc_uty.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" /* ############################################################################################## */ diff --git a/src/d/actor/d_a_e_pz.cpp b/src/d/actor/d_a_e_pz.cpp index d990573cc9..a59848d379 100644 --- a/src/d/actor/d_a_e_pz.cpp +++ b/src/d/actor/d_a_e_pz.cpp @@ -13,6 +13,7 @@ #include "c/c_damagereaction.h" #include "Z2AudioLib/Z2Instances.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" class daE_PZ_HIO_c : public JORReflexible { public: diff --git a/src/d/actor/d_a_e_rd.cpp b/src/d/actor/d_a_e_rd.cpp index 4007ac3041..3a63435e8e 100644 --- a/src/d/actor/d_a_e_rd.cpp +++ b/src/d/actor/d_a_e_rd.cpp @@ -16,6 +16,7 @@ #include "c/c_damagereaction.h" #include "d/d_attention.h" #include "d/actor/d_a_obj_h_saku.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_kankyo_mng.h" #include "d/actor/d_a_e_rdb.h" #include "d/actor/d_a_e_dn.h" diff --git a/src/d/actor/d_a_e_rdb.cpp b/src/d/actor/d_a_e_rdb.cpp index b4db48df4d..004f44d438 100644 --- a/src/d/actor/d_a_e_rdb.cpp +++ b/src/d/actor/d_a_e_rdb.cpp @@ -13,6 +13,7 @@ #include "d/d_msg_object.h" #include "m_Do/m_Do_graphic.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" class daE_RDB_HIO_c : public JORReflexible { public: diff --git a/src/d/actor/d_a_e_rdy.cpp b/src/d/actor/d_a_e_rdy.cpp index 2a9fb25a7c..ff252093d5 100644 --- a/src/d/actor/d_a_e_rdy.cpp +++ b/src/d/actor/d_a_e_rdy.cpp @@ -15,6 +15,7 @@ #include "d/d_cc_d.h" #include "d/d_msg_object.h" #include "d/d_camera.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_kankyo_mng.h" #include "f_op/f_op_actor_enemy.h" #include "m_Do/m_Do_graphic.h" diff --git a/src/d/actor/d_a_e_s1.cpp b/src/d/actor/d_a_e_s1.cpp index 88e2dd88a8..0c17d30908 100644 --- a/src/d/actor/d_a_e_s1.cpp +++ b/src/d/actor/d_a_e_s1.cpp @@ -13,6 +13,7 @@ #include "d/d_path.h" #include "d/d_s_play.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" class daE_S1_HIO_c { public: diff --git a/src/d/actor/d_a_e_sm2.cpp b/src/d/actor/d_a_e_sm2.cpp index 4ffa63377b..855ee4603b 100644 --- a/src/d/actor/d_a_e_sm2.cpp +++ b/src/d/actor/d_a_e_sm2.cpp @@ -11,6 +11,7 @@ #include "f_op/f_op_kankyo_mng.h" #include "SSystem/SComponent/c_counter.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" class daE_SM2_HIO_c : public fOpAcm_HIO_entry_c { public: diff --git a/src/d/actor/d_a_e_sw.cpp b/src/d/actor/d_a_e_sw.cpp index 20160cef01..4cb1fcaa31 100644 --- a/src/d/actor/d_a_e_sw.cpp +++ b/src/d/actor/d_a_e_sw.cpp @@ -7,6 +7,7 @@ #include "d/actor/d_a_e_sw.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" #include "d/d_bomb.h" #include #include "Z2AudioLib/Z2Instances.h" diff --git a/src/d/actor/d_a_e_th.cpp b/src/d/actor/d_a_e_th.cpp index 559d31c661..90a1e8ab2a 100644 --- a/src/d/actor/d_a_e_th.cpp +++ b/src/d/actor/d_a_e_th.cpp @@ -11,6 +11,7 @@ #include "d/d_item.h" #include "c/c_damagereaction.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" class daE_TH_HIO_c : public JORReflexible { public: diff --git a/src/d/actor/d_a_e_vt.cpp b/src/d/actor/d_a_e_vt.cpp index 30b8a4351d..9c1559ec07 100644 --- a/src/d/actor/d_a_e_vt.cpp +++ b/src/d/actor/d_a_e_vt.cpp @@ -15,6 +15,7 @@ #include "d/d_s_play.h" #include "d/d_camera.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" #define WL_CUT_TYPE_SMALL 1 #define WL_CUT_TYPE_JUMP 2 diff --git a/src/d/actor/d_a_e_warpappear.cpp b/src/d/actor/d_a_e_warpappear.cpp index 0532316f1f..e60d32393f 100644 --- a/src/d/actor/d_a_e_warpappear.cpp +++ b/src/d/actor/d_a_e_warpappear.cpp @@ -9,6 +9,7 @@ #include "d/actor/d_a_e_s1.h" #include "d/actor/d_a_horse.h" #include "d/actor/d_a_obj_ihasi.h" +#include "f_op/f_op_camera_mng.h" /* 807CF7D8-807CF8BC 000078 00E4+00 1/0 0/0 0/0 .text daE_Warpappear_Draw__FP18e_warpappear_class */ static int daE_Warpappear_Draw(e_warpappear_class* i_this) { diff --git a/src/d/actor/d_a_e_ym.cpp b/src/d/actor/d_a_e_ym.cpp index ce5a5b768a..339806021a 100644 --- a/src/d/actor/d_a_e_ym.cpp +++ b/src/d/actor/d_a_e_ym.cpp @@ -13,6 +13,7 @@ #include "d/actor/d_a_tag_firewall.h" #include "d/d_com_inf_game.h" #include "f_op/f_op_actor_enemy.h" +#include "f_op/f_op_camera_mng.h" class daE_YM_HIO_c { public: diff --git a/src/d/actor/d_a_e_ymb.cpp b/src/d/actor/d_a_e_ymb.cpp index 5e41a03b47..310c451013 100644 --- a/src/d/actor/d_a_e_ymb.cpp +++ b/src/d/actor/d_a_e_ymb.cpp @@ -10,6 +10,7 @@ #include "d/actor/d_a_obj_drop.h" #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" +#include "f_op/f_op_camera_mng.h" #include #include "Z2AudioLib/Z2Instances.h" diff --git a/src/d/actor/d_a_e_zh.cpp b/src/d/actor/d_a_e_zh.cpp index 0e4b764e90..cd0c52476d 100644 --- a/src/d/actor/d_a_e_zh.cpp +++ b/src/d/actor/d_a_e_zh.cpp @@ -12,6 +12,7 @@ #include "d/d_camera.h" #include "Z2AudioLib/Z2Instances.h" #include "d/d_debug_viewer.h" +#include "f_op/f_op_camera_mng.h" enum E_ZH_RES_File_ID { /* BCK */ diff --git a/src/d/actor/d_a_kago.cpp b/src/d/actor/d_a_kago.cpp index 8fa8fbbe53..25d58b2feb 100644 --- a/src/d/actor/d_a_kago.cpp +++ b/src/d/actor/d_a_kago.cpp @@ -19,6 +19,7 @@ #include "d/actor/d_a_obj_riverrock.h" #include "d/actor/d_a_player.h" #include "d/actor/d_a_tag_waterfall.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_overlap_mng.h" /* 80854D4C-80854D8C 000000 0040+00 1/1 0/0 0/0 .data cc_sph_src__22@unnamed@d_a_kago_cpp@ */ diff --git a/src/d/actor/d_a_kytag00.cpp b/src/d/actor/d_a_kytag00.cpp index 9fc10689e2..463947665f 100644 --- a/src/d/actor/d_a_kytag00.cpp +++ b/src/d/actor/d_a_kytag00.cpp @@ -7,6 +7,7 @@ #include "d/actor/d_a_kytag00.h" #include "d/d_com_inf_game.h" +#include "f_op/f_op_camera_mng.h" /* 8046B718-8046B9DC 000078 02C4+00 2/2 0/0 0/0 .text get_check_pos__FP13kytag00_class */ static cXyz get_check_pos(kytag00_class* i_this) { diff --git a/src/d/actor/d_a_kytag01.cpp b/src/d/actor/d_a_kytag01.cpp index d9ff014af8..f31bd4c14f 100644 --- a/src/d/actor/d_a_kytag01.cpp +++ b/src/d/actor/d_a_kytag01.cpp @@ -10,6 +10,7 @@ #include "Z2AudioLib/Z2EnvSeMgr.h" #include "d/d_com_inf_game.h" #include "d/d_kankyo_rain.h" +#include "f_op/f_op_camera_mng.h" /* 80855058-80855320 000078 02C8+00 1/1 0/0 0/0 .text get_check_pos__FP13kytag01_class */ static cXyz get_check_pos(kytag01_class* i_this) { diff --git a/src/d/actor/d_a_kytag03.cpp b/src/d/actor/d_a_kytag03.cpp index d146c540ef..fcc666ae38 100644 --- a/src/d/actor/d_a_kytag03.cpp +++ b/src/d/actor/d_a_kytag03.cpp @@ -12,6 +12,7 @@ #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_kankyo_rain.h" +#include "f_op/f_op_camera_mng.h" /* 80855ED8-808560DC 000078 0204+00 1/1 0/0 0/0 .text dEnvSe_getNearPathPos__FP4cXyzP4cXyzP5dPath */ diff --git a/src/d/actor/d_a_kytag06.cpp b/src/d/actor/d_a_kytag06.cpp index 22ffa6b690..1bb0da9701 100644 --- a/src/d/actor/d_a_kytag06.cpp +++ b/src/d/actor/d_a_kytag06.cpp @@ -10,6 +10,7 @@ #include "SSystem/SComponent/c_math.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" +#include "f_op/f_op_camera_mng.h" /* 8085786C-80857918 0000EC 00AC+00 1/1 0/0 0/0 .text dice_wether_init__FUcff */ static void dice_wether_init(u8 i_weatherMode, f32 i_weatherTime, f32 i_currentTime) { diff --git a/src/d/actor/d_a_kytag10.cpp b/src/d/actor/d_a_kytag10.cpp index f09cab4155..4a4ef30772 100644 --- a/src/d/actor/d_a_kytag10.cpp +++ b/src/d/actor/d_a_kytag10.cpp @@ -10,6 +10,7 @@ #include "d/d_com_inf_game.h" #include "d/d_path.h" #include "d/d_kankyo_rain.h" +#include "f_op/f_op_camera_mng.h" /* 80528BF8-80528D0C 000078 0114+00 1/1 0/0 0/0 .text get_rail_ratio_pos__FP5dPathifPsPs */ diff --git a/src/d/actor/d_a_kytag13.cpp b/src/d/actor/d_a_kytag13.cpp index 73d136075a..08e648eecc 100644 --- a/src/d/actor/d_a_kytag13.cpp +++ b/src/d/actor/d_a_kytag13.cpp @@ -9,6 +9,7 @@ #include "SSystem/SComponent/c_math.h" #include "d/d_com_inf_game.h" #include "d/d_kankyo_rain.h" +#include "f_op/f_op_camera_mng.h" /* 8085F1F8-8085F200 000078 0008+00 1/0 0/0 0/0 .text daKytag13_Draw__FP13kytag13_class */ diff --git a/src/d/actor/d_a_mg_fshop.cpp b/src/d/actor/d_a_mg_fshop.cpp index 2c806195bd..61b02e0dd4 100644 --- a/src/d/actor/d_a_mg_fshop.cpp +++ b/src/d/actor/d_a_mg_fshop.cpp @@ -12,6 +12,7 @@ #include "d/d_bg_w.h" #include "d/d_kankyo.h" #include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_camera_mng.h" #include "d/d_timer.h" #include "dol2asm.h" #include "m_Do/m_Do_controller_pad.h" diff --git a/src/d/actor/d_a_ni.cpp b/src/d/actor/d_a_ni.cpp index 1e9febcfc2..543e65d342 100644 --- a/src/d/actor/d_a_ni.cpp +++ b/src/d/actor/d_a_ni.cpp @@ -3,8 +3,6 @@ // Translation Unit: d_a_ni // -#include "d/dolzel_rel.h" - /** * Basically entirely matching except for ONE float reg alloc in play_camera, * and some extra dtors being emitted that shouldnt be after daNi_Create @@ -24,6 +22,7 @@ #include "SSystem/SComponent/c_math.h" #include "c/c_damagereaction.h" #include "Z2AudioLib/Z2Instances.h" +#include "f_op/f_op_camera_mng.h" enum Joint { /* 0x0 */ JNT_WAIST, diff --git a/src/d/actor/d_a_npc.cpp b/src/d/actor/d_a_npc.cpp index 6e08f600f4..1e245e4714 100644 --- a/src/d/actor/d_a_npc.cpp +++ b/src/d/actor/d_a_npc.cpp @@ -7,6 +7,7 @@ #include "d/d_msg_object.h" #include "SSystem/SComponent/c_math.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_kankyo_mng.h" #include "m_Do/m_Do_lib.h" diff --git a/src/d/actor/d_a_npc_ks.cpp b/src/d/actor/d_a_npc_ks.cpp index 02843ca6ca..b7c9c8a5b8 100644 --- a/src/d/actor/d_a_npc_ks.cpp +++ b/src/d/actor/d_a_npc_ks.cpp @@ -28,6 +28,7 @@ #include "d/d_stage.h" #include "Z2AudioLib/Z2Instances.h" #include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" class daNpc_Ks_HIO_c : public JORReflexible { public: diff --git a/src/d/actor/d_a_npc_lf.cpp b/src/d/actor/d_a_npc_lf.cpp index e63f28e211..34745057ff 100644 --- a/src/d/actor/d_a_npc_lf.cpp +++ b/src/d/actor/d_a_npc_lf.cpp @@ -9,6 +9,7 @@ #include "d/dolzel_rel.h" #include "d/actor/d_a_npc_lf.h" +#include "f_op/f_op_camera_mng.h" /* 80A6AA1C-80A6AA28 000000 000C+00 1/1 0/0 0/0 .data wp$3976 */ static f32 wp[3] = { diff --git a/src/d/actor/d_a_npc_maro.cpp b/src/d/actor/d_a_npc_maro.cpp index b26acafdef..9607744069 100644 --- a/src/d/actor/d_a_npc_maro.cpp +++ b/src/d/actor/d_a_npc_maro.cpp @@ -6,12 +6,14 @@ #include "d/dolzel_rel.h" #include "d/actor/d_a_npc_maro.h" + #include "d/actor/d_a_horse.h" #include "d/actor/d_a_npc_len.h" #include "d/actor/d_a_obj_itamato.h" #include "d/actor/d_a_tag_evtarea.h" #include "d/actor/d_a_tag_push.h" #include "d/actor/d_a_tag_shop_item.h" +#include "d/d_camera.h" #include "d/d_com_static.h" #include "d/d_item.h" #include "d/d_timer.h" diff --git a/src/d/actor/d_a_npc_ne.cpp b/src/d/actor/d_a_npc_ne.cpp index bd4677f3c3..8c73d22ca5 100644 --- a/src/d/actor/d_a_npc_ne.cpp +++ b/src/d/actor/d_a_npc_ne.cpp @@ -14,6 +14,7 @@ #include "d/actor/d_a_mg_fish.h" #include "SSystem/SComponent/c_math.h" #include "JSystem/JUtility/JUTReport.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_kankyo_mng.h" #include "c/c_damagereaction.h" diff --git a/src/d/actor/d_a_npc_sq.cpp b/src/d/actor/d_a_npc_sq.cpp index 5b5cc952c6..4270952d98 100644 --- a/src/d/actor/d_a_npc_sq.cpp +++ b/src/d/actor/d_a_npc_sq.cpp @@ -9,6 +9,7 @@ #include "SSystem/SComponent/c_math.h" #include "JSystem/JKernel/JKRHeap.h" #include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_camera_mng.h" #include "d/d_com_inf_game.h" #include "d/actor/d_a_player.h" #include "d/d_procname.h" diff --git a/src/d/actor/d_a_npc_tk.cpp b/src/d/actor/d_a_npc_tk.cpp index 13b27ffe7d..6c554be936 100644 --- a/src/d/actor/d_a_npc_tk.cpp +++ b/src/d/actor/d_a_npc_tk.cpp @@ -15,6 +15,7 @@ #include "d/d_camera.h" #include "d/d_cc_d.h" #include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" class daNPC_TK_HIO_c : public JORReflexible { public: diff --git a/src/d/actor/d_a_npc_ykw.cpp b/src/d/actor/d_a_npc_ykw.cpp index b14742ef4e..8f176f70e7 100644 --- a/src/d/actor/d_a_npc_ykw.cpp +++ b/src/d/actor/d_a_npc_ykw.cpp @@ -15,6 +15,7 @@ #include "d/d_debug_viewer.h" #include "d/d_meter2_info.h" #include "d/d_timer.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_ext.h" #if DEBUG diff --git a/src/d/actor/d_a_obj_ari.cpp b/src/d/actor/d_a_obj_ari.cpp index 8e678c6d3c..2d37ec71a5 100644 --- a/src/d/actor/d_a_obj_ari.cpp +++ b/src/d/actor/d_a_obj_ari.cpp @@ -11,6 +11,7 @@ #include "d/d_com_inf_game.h" #include "d/d_menu_insect.h" #include "d/d_procname.h" +#include "f_op/f_op_camera_mng.h" /* 80BA55E0-80BA55E4 000008 0004+00 2/2 0/0 0/0 .bss None */ static bool hioInit; diff --git a/src/d/actor/d_a_obj_brg.cpp b/src/d/actor/d_a_obj_brg.cpp index 2e88d92616..7c24a756a9 100644 --- a/src/d/actor/d_a_obj_brg.cpp +++ b/src/d/actor/d_a_obj_brg.cpp @@ -13,6 +13,7 @@ #include "d/actor/d_a_player.h" #include "d/d_path.h" #include "Z2AudioLib/Z2Instances.h" +#include "f_op/f_op_camera_mng.h" /* 80BBC90C-80BBCCFC 0000EC 03F0+00 1/1 0/0 0/0 .text * ride_call_back__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ diff --git a/src/d/actor/d_a_obj_cdoor.cpp b/src/d/actor/d_a_obj_cdoor.cpp index add989a186..cf9b90e9cd 100644 --- a/src/d/actor/d_a_obj_cdoor.cpp +++ b/src/d/actor/d_a_obj_cdoor.cpp @@ -7,6 +7,7 @@ #include "d/actor/d_a_obj_cdoor.h" #include "d/actor/d_a_obj_wchain.h" +#include "d/d_camera.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" diff --git a/src/d/actor/d_a_obj_cho.cpp b/src/d/actor/d_a_obj_cho.cpp index 347442a893..151d472f44 100644 --- a/src/d/actor/d_a_obj_cho.cpp +++ b/src/d/actor/d_a_obj_cho.cpp @@ -11,6 +11,7 @@ #include "d/d_com_inf_game.h" #include "d/d_menu_insect.h" #include "d/d_procname.h" +#include "f_op/f_op_camera_mng.h" /* 80BCC750-80BCC754 000008 0004+00 2/2 0/0 0/0 .bss None */ static bool hioInit; diff --git a/src/d/actor/d_a_obj_crvgate.cpp b/src/d/actor/d_a_obj_crvgate.cpp index eb6a894149..f286fcf363 100644 --- a/src/d/actor/d_a_obj_crvgate.cpp +++ b/src/d/actor/d_a_obj_crvgate.cpp @@ -7,8 +7,10 @@ #include "d/actor/d_a_obj_crvgate.h" +#include "d/d_camera.h" #include "d/actor/d_a_obj_eff.h" #include "d/actor/d_a_player.h" +#include "f_op/f_op_camera_mng.h" /* 80BD30C0-80BD3100 000000 0040+00 12/12 0/0 0/0 .rodata ccCylSrc$3774 */ const static dCcD_SrcSph ccSphSrc = { diff --git a/src/d/actor/d_a_obj_dan.cpp b/src/d/actor/d_a_obj_dan.cpp index 562f9bce7a..0dbf2ef718 100644 --- a/src/d/actor/d_a_obj_dan.cpp +++ b/src/d/actor/d_a_obj_dan.cpp @@ -11,6 +11,7 @@ #include "d/d_com_inf_game.h" #include "d/d_menu_insect.h" #include "d/d_procname.h" +#include "f_op/f_op_camera_mng.h" /* 80BDC568-80BDC56C 000008 0004+00 2/2 0/0 0/0 .bss None */ static bool hioInit; diff --git a/src/d/actor/d_a_obj_drop.cpp b/src/d/actor/d_a_obj_drop.cpp index fa0c8e812d..8da1390dca 100644 --- a/src/d/actor/d_a_obj_drop.cpp +++ b/src/d/actor/d_a_obj_drop.cpp @@ -17,6 +17,7 @@ #include "m_Do/m_Do_graphic.h" #include "d/actor/d_a_e_ym.h" #include "d/actor/d_a_e_ymb.h" +#include "f_op/f_op_camera_mng.h" #ifdef DEBUG daObjDrop_HIO_c l_HIO; diff --git a/src/d/actor/d_a_obj_gra2.cpp b/src/d/actor/d_a_obj_gra2.cpp index 421e20fbb4..d07a3e113f 100644 --- a/src/d/actor/d_a_obj_gra2.cpp +++ b/src/d/actor/d_a_obj_gra2.cpp @@ -18,6 +18,7 @@ #include "dol2asm.h" #include "d/d_msg_object.h" #include "d/d_attention.h" +#include "f_op/f_op_camera_mng.h" #include /* 80BFFF0C-80BFFF58 0000EC 004C+00 2/2 0/0 0/0 .text jointCtrlCallBack__FP8J3DJointi */ diff --git a/src/d/actor/d_a_obj_hhashi.cpp b/src/d/actor/d_a_obj_hhashi.cpp index acd0392c8a..053723dff0 100644 --- a/src/d/actor/d_a_obj_hhashi.cpp +++ b/src/d/actor/d_a_obj_hhashi.cpp @@ -12,6 +12,7 @@ #include "d/d_bg_w.h" #include "d/d_com_inf_game.h" #include "d/actor/d_a_player.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_lib.h" #include "SSystem/SComponent/c_math.h" diff --git a/src/d/actor/d_a_obj_iceblock.cpp b/src/d/actor/d_a_obj_iceblock.cpp index 16f59b04bf..a1006831a2 100644 --- a/src/d/actor/d_a_obj_iceblock.cpp +++ b/src/d/actor/d_a_obj_iceblock.cpp @@ -11,6 +11,7 @@ #include "d/d_com_inf_game.h" #include "d/d_camera.h" #include "d/actor/d_a_mirror.h" +#include "f_op/f_op_camera_mng.h" enum PUSH_DIR { DIR_SOUTH, diff --git a/src/d/actor/d_a_obj_item.cpp b/src/d/actor/d_a_obj_item.cpp index 81f276ae36..ae941d9bcb 100644 --- a/src/d/actor/d_a_obj_item.cpp +++ b/src/d/actor/d_a_obj_item.cpp @@ -13,7 +13,7 @@ #include "d/d_item.h" #include "d/d_item_data.h" #include "d/d_s_play.h" -#include "dol2asm.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_mtx.h" // diff --git a/src/d/actor/d_a_obj_kabuto.cpp b/src/d/actor/d_a_obj_kabuto.cpp index 132c480f06..7a1240fab0 100644 --- a/src/d/actor/d_a_obj_kabuto.cpp +++ b/src/d/actor/d_a_obj_kabuto.cpp @@ -11,6 +11,7 @@ #include "d/d_com_inf_game.h" #include "d/d_menu_insect.h" #include "d/d_procname.h" +#include "f_op/f_op_camera_mng.h" /* 80C2E2F0-80C2E2F4 000008 0004+00 2/2 0/0 0/0 .bss None */ static bool hioInit; diff --git a/src/d/actor/d_a_obj_kamakiri.cpp b/src/d/actor/d_a_obj_kamakiri.cpp index db5df602bf..cfafa0705a 100644 --- a/src/d/actor/d_a_obj_kamakiri.cpp +++ b/src/d/actor/d_a_obj_kamakiri.cpp @@ -11,7 +11,7 @@ #include "d/d_com_inf_game.h" #include "d/d_menu_insect.h" #include "d/d_s_play.h" -#include "dol2asm.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_lib.h" static u8 l_initHIO; diff --git a/src/d/actor/d_a_obj_katatsumuri.cpp b/src/d/actor/d_a_obj_katatsumuri.cpp index d6cd526c2d..a027e224cf 100644 --- a/src/d/actor/d_a_obj_katatsumuri.cpp +++ b/src/d/actor/d_a_obj_katatsumuri.cpp @@ -11,6 +11,7 @@ #include "d/d_com_inf_game.h" #include "d/d_menu_insect.h" #include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_lib.h" static u8 hioInit; diff --git a/src/d/actor/d_a_obj_lp.cpp b/src/d/actor/d_a_obj_lp.cpp index b95268f66e..63398a7923 100644 --- a/src/d/actor/d_a_obj_lp.cpp +++ b/src/d/actor/d_a_obj_lp.cpp @@ -10,6 +10,7 @@ #include "d/actor/d_a_mg_rod.h" #include "d/d_com_inf_game.h" #include "d/actor/d_a_player.h" +#include "f_op/f_op_camera_mng.h" #include "Z2AudioLib/Z2Instances.h" /* 80C54198-80C542FC 000078 0164+00 1/0 0/0 0/0 .text daObj_Lp_Draw__FP12obj_lp_class */ diff --git a/src/d/actor/d_a_obj_smallkey.cpp b/src/d/actor/d_a_obj_smallkey.cpp index a95d20a959..728cbcee5c 100644 --- a/src/d/actor/d_a_obj_smallkey.cpp +++ b/src/d/actor/d_a_obj_smallkey.cpp @@ -10,6 +10,7 @@ #include "d/actor/d_a_player.h" #include "d/d_item_data.h" #include "d/d_tresure.h" +#include "f_op/f_op_camera_mng.h" /* 80CDB7F4-80CDB838 000000 0044+00 6/6 0/0 0/0 .rodata l_cyl_src */ const static dCcD_SrcCyl l_cyl_src = { diff --git a/src/d/actor/d_a_obj_so.cpp b/src/d/actor/d_a_obj_so.cpp index 68d4fd1b9b..72c7ef90b1 100644 --- a/src/d/actor/d_a_obj_so.cpp +++ b/src/d/actor/d_a_obj_so.cpp @@ -14,6 +14,7 @@ #include "d/actor/d_a_player.h" #include "d/d_cc_uty.h" #include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" /* 80CE03CC-80CE03F0 0000EC 0024+00 1/1 0/0 0/0 .text __ct__14daObj_So_HIO_cFv */ daObj_So_HIO_c::daObj_So_HIO_c() { diff --git a/src/d/actor/d_a_obj_sw.cpp b/src/d/actor/d_a_obj_sw.cpp index 87d47d5a13..4f7359549c 100644 --- a/src/d/actor/d_a_obj_sw.cpp +++ b/src/d/actor/d_a_obj_sw.cpp @@ -12,6 +12,7 @@ #include "d/d_com_inf_game.h" #include "d/d_path.h" #include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_ext.h" /* 80CF0638-80CF0774 000078 013C+00 1/0 0/0 0/0 .text daObj_Sw_Draw__FP12obj_sw_class */ diff --git a/src/d/actor/d_a_obj_ten.cpp b/src/d/actor/d_a_obj_ten.cpp index f35b1fc061..287c72a8ef 100644 --- a/src/d/actor/d_a_obj_ten.cpp +++ b/src/d/actor/d_a_obj_ten.cpp @@ -9,7 +9,8 @@ #include "d/actor/d_a_player.h" #include "SSystem/SComponent/c_math.h" #include "d/d_com_inf_game.h" -#include "f_op//f_op_actor_mng.h" +#include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_camera_mng.h" #include "d/d_cc_d.h" #include "SSystem/SComponent/c_lib.h" #include "m_Do/m_Do_lib.h" diff --git a/src/d/actor/d_a_obj_tks.cpp b/src/d/actor/d_a_obj_tks.cpp index 274a4cf619..58a31d65d0 100644 --- a/src/d/actor/d_a_obj_tks.cpp +++ b/src/d/actor/d_a_obj_tks.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" #include "d/actor/d_a_obj_tks.h" +#include "d/d_camera.h" #include "d/d_com_inf_game.h" /* 80D12910-80D12940 000020 0030+00 1/2 0/0 0/0 .data l_bckGetParamList */ diff --git a/src/d/actor/d_a_obj_toby.cpp b/src/d/actor/d_a_obj_toby.cpp index ac5eef23f0..76d7514413 100644 --- a/src/d/actor/d_a_obj_toby.cpp +++ b/src/d/actor/d_a_obj_toby.cpp @@ -11,6 +11,7 @@ #include "d/d_bg_w.h" #include "d/d_bomb.h" #include "d/d_com_inf_game.h" +#include "f_op/f_op_camera_mng.h" #include "Z2AudioLib/Z2Instances.h" #ifdef DEBUG diff --git a/src/d/actor/d_a_obj_tobyhouse.cpp b/src/d/actor/d_a_obj_tobyhouse.cpp index 2cd8e4ae67..625c2cf361 100644 --- a/src/d/actor/d_a_obj_tobyhouse.cpp +++ b/src/d/actor/d_a_obj_tobyhouse.cpp @@ -10,6 +10,7 @@ #include "d/d_bg_w.h" #include "d/d_com_inf_game.h" #include "d/d_bomb.h" +#include "f_op/f_op_camera_mng.h" #include "Z2AudioLib/Z2Instances.h" #ifdef DEBUG diff --git a/src/d/actor/d_a_obj_tombo.cpp b/src/d/actor/d_a_obj_tombo.cpp index 1905d908d2..0d51208c58 100644 --- a/src/d/actor/d_a_obj_tombo.cpp +++ b/src/d/actor/d_a_obj_tombo.cpp @@ -10,6 +10,7 @@ #include "d/d_menu_insect.h" #include "d/d_cc_d.h" #include "d/d_com_inf_game.h" +#include "f_op/f_op_camera_mng.h" #include "f_pc/f_pc_name.h" #include "m_Do/m_Do_lib.h" diff --git a/src/d/actor/d_a_ppolamp.cpp b/src/d/actor/d_a_ppolamp.cpp index 2f21a3f29a..ea14258e8f 100644 --- a/src/d/actor/d_a_ppolamp.cpp +++ b/src/d/actor/d_a_ppolamp.cpp @@ -8,6 +8,7 @@ #include "d/actor/d_a_ppolamp.h" #include "Z2AudioLib/Z2Instances.h" #include "d/d_com_inf_game.h" +#include "f_op/f_op_camera_mng.h" /* 80D4C938-80D4C958 000078 0020+00 1/1 0/0 0/0 .text daPPolamp_c_createHeap__FP10fopAc_ac_c */ static int daPPolamp_c_createHeap(fopAc_ac_c* i_this) { diff --git a/src/d/actor/d_a_tag_allmato.cpp b/src/d/actor/d_a_tag_allmato.cpp index ceca3bbab8..6b418035c7 100644 --- a/src/d/actor/d_a_tag_allmato.cpp +++ b/src/d/actor/d_a_tag_allmato.cpp @@ -4,6 +4,7 @@ #include "d/actor/d_a_obj_itamato.h" #include "d/actor/d_a_obj_boumato.h" #include "d/actor/d_a_arrow.h" +#include "f_op/f_op_camera_mng.h" /* 804897BC-804897FC -00001 0040+00 2/2 0/0 0/0 .data l_evtList */ static daNpcT_evtData_c l_evtList[8] = { diff --git a/src/d/actor/d_a_tag_firewall.cpp b/src/d/actor/d_a_tag_firewall.cpp index 15a2b8573e..f26e5116a0 100644 --- a/src/d/actor/d_a_tag_firewall.cpp +++ b/src/d/actor/d_a_tag_firewall.cpp @@ -10,6 +10,7 @@ #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_bomb.h" +#include "d/d_camera.h" struct Tag_FWall_n { static dCcD_SrcSph cc_sph_src; diff --git a/src/d/actor/d_a_tag_kago_fall.cpp b/src/d/actor/d_a_tag_kago_fall.cpp index 07ad74dd44..6331c14015 100644 --- a/src/d/actor/d_a_tag_kago_fall.cpp +++ b/src/d/actor/d_a_tag_kago_fall.cpp @@ -8,6 +8,7 @@ #include "d/actor/d_a_tag_kago_fall.h" #include "d/actor/d_a_player.h" +#include "d/d_camera.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" #include "d/d_msg_object.h" diff --git a/src/d/actor/d_a_tag_waterfall.cpp b/src/d/actor/d_a_tag_waterfall.cpp index d208d7983c..c3e8121cc0 100644 --- a/src/d/actor/d_a_tag_waterfall.cpp +++ b/src/d/actor/d_a_tag_waterfall.cpp @@ -8,6 +8,7 @@ #include "d/actor/d_a_tag_waterfall.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" +#include "f_op/f_op_camera_mng.h" /* 80D64D94-80D64D98 000000 0004+00 2/2 0/0 0/0 .data m_master_id */ static u32 m_master_id = static_cast(0xFFFFFFFF); diff --git a/src/d/actor/d_a_tbox.cpp b/src/d/actor/d_a_tbox.cpp index 6f74c97da3..dfb26ec1dc 100644 --- a/src/d/actor/d_a_tbox.cpp +++ b/src/d/actor/d_a_tbox.cpp @@ -11,6 +11,7 @@ #include "d/actor/d_a_midna.h" #include "d/d_path.h" #include "d/d_bg_w.h" +#include "f_op/f_op_camera_mng.h" #include "SSystem/SComponent/c_math.h" #include "Z2AudioLib/Z2Instances.h" #include diff --git a/src/d/actor/d_a_vrbox2.cpp b/src/d/actor/d_a_vrbox2.cpp index 6b4d2bb6d5..9e9a079eae 100644 --- a/src/d/actor/d_a_vrbox2.cpp +++ b/src/d/actor/d_a_vrbox2.cpp @@ -9,6 +9,7 @@ #include "d/d_com_inf_game.h" #include "d/d_procname.h" #include "d/d_kankyo_rain.h" +#include "f_op/f_op_camera_mng.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "SSystem/SComponent/c_math.h" #include "dol2asm.h" diff --git a/src/d/actor/d_a_ykgr.cpp b/src/d/actor/d_a_ykgr.cpp index 4a5eb6e095..bdb88264ba 100644 --- a/src/d/actor/d_a_ykgr.cpp +++ b/src/d/actor/d_a_ykgr.cpp @@ -8,6 +8,7 @@ #include "d/actor/d_a_ykgr.h" #include "f_op/f_op_actor.h" #include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_camera_mng.h" #include "JSystem/JKernel/JKRHeap.h" #include "Z2AudioLib/Z2Instances.h" diff --git a/src/d/d_cam_param.cpp b/src/d/d_cam_param.cpp index eab6a5d5f5..5cdd69fa4a 100644 --- a/src/d/d_cam_param.cpp +++ b/src/d/d_cam_param.cpp @@ -6,8 +6,10 @@ #include "d/dolzel.h" #include "d/d_cam_param.h" + #include "SSystem/SComponent/c_math.h" #include "d/actor/d_a_player.h" +#include "d/d_camera.h" #include "d/d_com_inf_game.h" /* 8008813C-80088284 082A7C 0148+00 0/0 12/12 0/0 .text rationalBezierRatio__8dCamMathFff diff --git a/src/d/d_camera.cpp b/src/d/d_camera.cpp index 233c9a6ee7..5095054672 100644 --- a/src/d/d_camera.cpp +++ b/src/d/d_camera.cpp @@ -18,6 +18,7 @@ #include "d/d_camera.h" #include "d/d_com_inf_actor.h" #include "d/d_com_inf_game.h" +#include "d/d_debug_viewer.h" #include "d/d_demo.h" #include "dol2asm.h" #include "f_op/f_op_camera.h" @@ -26,409 +27,6 @@ #include "m_Do/m_Do_lib.h" #include "math.h" -// -// Forward References: -// - -static f32 func_8015FA2C(f32 param_0, f32 param_1, f32 param_2); -static void func_8015FA4C(fopAc_ac_c* param_0); -static bool func_8015FADC(f32 param_0, f32 param_1, f32* param_2); -static bool func_8015FB28(cXyz* param_0, cXyz* param_1, cXyz* param_2); -static void func_8015FBF8(fopAc_ac_c* param_0, fopAc_ac_c* param_1, cXyz* param_2, - f32 param_3, cSAngle param_4); -void Set__15dCamMapToolDataFllP10fopAc_ac_cUsUc(); -void __ct__9dCamera_cFP12camera_class(); -void func_801602C4(); -void func_80160300(); -void __dt__9dCamera_cFv(); -void initialize__9dCamera_cFP12camera_classP10fopAc_ac_cUlUl(); -void Start__9dCamera_cFv(); -void QuickStart__9dCamera_cFv(); -void Stop__9dCamera_cFv(); -void Stay__9dCamera_cFv(); -void ChangeModeOK__9dCamera_cFl(); -void initPad__9dCamera_cFv(); -void updatePad__9dCamera_cFv(); -void initMonitor__9dCamera_cFv(); -void updateMonitor__9dCamera_cFv(); -void checkForceLockTarget__9dCamera_cFv(); -void infoReport__9dCamera_cFv(); -void Run__9dCamera_cFv(); -void NotRun__9dCamera_cFv(); -void V__9dCamera_cFv(); -void U__9dCamera_cFv(); -void SetTrimSize__9dCamera_cFl(); -void SetTrimTypeForce__9dCamera_cFl(); -void CalcTrimSize__9dCamera_cFv(); -void Draw__9dCamera_cFv(); -void setStageMapToolData__9dCamera_cFv(); -void setMapToolData__9dCamera_cFv(); -void SetTagData__9dCamera_cFP10fopAc_ac_clUsUc(); -void setRoomMapToolData__9dCamera_cFP15dCamMapToolDatall(); -void nextMode__9dCamera_cFl(); -void onModeChange__9dCamera_cFll(); -void ModeFix__9dCamera_cFl(); -void nextType__9dCamera_cFl(); -void onTypeChange__9dCamera_cFll(); -void onStyleChange__9dCamera_cFll(); -void onRoomChange__9dCamera_cFl(); -void getParamTargetActor__9dCamera_cFl(); -void GetCameraTypeFromMapToolID__9dCamera_cFll(); -void GetCameraTypeFromCameraName__9dCamera_cFPCc(); -void GetCameraTypeFromToolData__9dCamera_cFP24stage_camera2_data_class(); -void pushInfo__9dCamera_cFPQ29dCamera_c10dCamInfo_cs(); -void popInfo__9dCamera_cFPQ29dCamera_c10dCamInfo_c(); -void heightOf__9dCamera_cFP10fopAc_ac_c(); -void relationalPos__9dCamera_cFP10fopAc_ac_cP4cXyz(); -void relationalPos__9dCamera_cFP10fopAc_ac_cP10fopAc_ac_cP4cXyzf(); -void setUSOAngle__9dCamera_cFv(); -void getUSOAngle__9dCamera_cF7cSAngle(); -void pointInSight__9dCamera_cFP4cXyz(); -void radiusActorInSight__9dCamera_cFP10fopAc_ac_cP10fopAc_ac_cP4cXyzP4cXyzfsf(); -void groundHeight__9dCamera_cFP4cXyz(); -void lineBGCheck__9dCamera_cFP4cXyzP4cXyzP11dBgS_LinChkUl(); -void lineBGCheck__9dCamera_cFP4cXyzP4cXyzP4cXyzUl(); -void lineBGCheck__9dCamera_cFP4cXyzP4cXyzUl(); -void lineCollisionCheckBush__9dCamera_cFP4cXyzP4cXyz(); -static void sph_chk_callback__FP11dBgS_SphChkP10cBgD_Vtx_tiiiP8cM3dGPlaPv(); -void compWallMargin__9dCamera_cFP4cXyzP4cXyzf(); -void __dt__14dBgS_CamSphChkFv(); -void defaultTriming__9dCamera_cFv(); -void setView__9dCamera_cFffff(); -void forwardCheckAngle__9dCamera_cFv(); -void bumpCheck__9dCamera_cFUl(); -void __dt__Q214cCcD_ShapeAttr5ShapeFv(); -void lineBGCheckBoth__9dCamera_cFP4cXyzP4cXyzP11dBgS_LinChkUl(); -void radiusActorInSight__9dCamera_cFP10fopAc_ac_cP10fopAc_ac_cP10fopAc_ac_c(); -static void func_80167CB8(fopAc_ac_c* param_0); -void jutOutCheck__9dCamera_cFP4cXyzf(); -void tooNearEscape__9dCamera_cFP4cXyz(); -void getWaterSurfaceHeight__9dCamera_cFP4cXyz(); -void checkGroundInfo__9dCamera_cFv(); -void chaseCamera__9dCamera_cFl(); -static void func_8016C25C(daAlink_c* param_0); -void Val__7cSAngleCFv(); -static void func_8016C2D4(cXyz& param_0); -void getHoldA__8mDoCPd_cFUl(); -static void func_8016C330(u32 param_0, u32 param_1); -static void func_8016C34C(u32 param_0); -static void func_8016C368(u32 param_0, u32 param_1); -void lockonCamera__9dCamera_cFl(); -static void func_8016E410(f32 param_0, f32 param_1, f32 param_2); -void __ct__7cSGlobeFv(); -void LockEdge__12dAttention_cFv(); -void getMsgCmdSpeaker__9dCamera_cFv(); -void getMsgCmdCut__9dCamera_cFl(); -void talktoCamera__9dCamera_cFl(); -void talkBasePos__9dCamera_cFP10fopAc_ac_c(); -void talkEyePos__9dCamera_cFP10fopAc_ac_c(); -static void func_80174E50(cXyz param_0, cXyz param_1, fopAc_ac_c* param_2, - fopAc_ac_c* param_3, fopAc_ac_c* param_4); -bool CalcSubjectAngle__9dCamera_cFPsPs(); -void SaveZoomRatio__9dCamera_cFv(); -void subjectCamera__9dCamera_cFl(); -void magneCamera__9dCamera_cFl(); -void colosseumCamera__9dCamera_cFl(); -bool test1Camera__9dCamera_cFl(); -bool test2Camera__9dCamera_cFl(); -void towerCamera__9dCamera_cFl(); -void hookshotCamera__9dCamera_cFl(); -void railCamera__9dCamera_cFl(); -void paraRailCamera__9dCamera_cFl(); -void rideCamera__9dCamera_cFl(); -static void func_8017D934(cXyz& param_0); -bool manualCamera__9dCamera_cFl(); -void observeCamera__9dCamera_cFl(); -void fixedFrameCamera__9dCamera_cFl(); -void fixedPositionCamera__9dCamera_cFl(); -void oneSideCamera__9dCamera_cFl(); -void eventCamera__9dCamera_cFl(); -void currentEvCamera__9dCamera_cFv(); -bool letCamera__9dCamera_cFl(); -void setEventRecoveryTrans__9dCamera_cFs(); -void runEventRecoveryTrans__9dCamera_cFv(); -void EventRecoverNotime__9dCamera_cFv(); -void Set__9dCamera_cF4cXyz4cXyz(); -void Set__9dCamera_cF4cXyz4cXyzfs(); -void Set__9dCamera_cF4cXyz4cXyzsf(); -void Reset__9dCamera_cF4cXyz4cXyzfs(); -void Reset__9dCamera_cF4cXyz4cXyz(); -void Reset__9dCamera_cFv(); -void shakeCamera__9dCamera_cFv(); -void StartShake__9dCamera_cFlPUcl4cXyz(); -void StopShake__9dCamera_cFv(); -void StartBlure__9dCamera_cFiP10fopAc_ac_cff(); -void ResetBlure__9dCamera_cFv(); -void SetBlureAlpha__9dCamera_cFf(); -void SetBlureScale__9dCamera_cFfff(); -void SetBlurePosition__9dCamera_cFfff(); -void SetBlureActor__9dCamera_cFP10fopAc_ac_c(); -void onHorseDush__9dCamera_cFv(); -void GetForceLockOnActor__9dCamera_cFv(); -void ForceLockOn__9dCamera_cFP10fopAc_ac_c(); -void ForceLockOff__9dCamera_cFUi(); -void ForceLockOff__9dCamera_cFP10fopAc_ac_c(); -void dCam_getAngleY__FP12camera_class(); -void dCam_getAngleX__FP12camera_class(); -void dCam_getControledAngleY__FP12camera_class(); -void dCam_getCamera__Fv(); -void dCam_getBody__Fv(); -static void preparation__FP20camera_process_class(); -static void view_setup__FP20camera_process_class(); -static void store__FP20camera_process_class(); -void Up__9dCamera_cFv(); -void Eye__9dCamera_cFv(); -void Center__9dCamera_cFv(); -static void camera_execute__FP20camera_process_class(); -static void camera_draw__FP20camera_process_class(); -static void init_phase1__FP12camera_class(); -static void init_phase2__FP12camera_class(); -static void camera_create__FP12camera_class(); -static void camera_delete__FP20camera_process_class(); -static bool is_camera_delete__FPv(); -void Init__14dCamForcusLineFv(); -void Draw__14dCamForcusLineFv(); -void Off__14dCamForcusLineFv(); -void __sinit_d_camera_cpp(); -static void func_801827EC(); -static void func_801827F4(); -static void func_801827FC(); -static void func_80182804(); -void getChainGrabActor__9daAlink_cFv(); -void checkCokkoGlide__9daAlink_cCFv(); -void checkCameraLargeDamage__9daAlink_cCFv(); -void getHsSubChainTopPos__9daAlink_cCFv(); -static void daAlink_getAlinkActorClass__Fv(); -void checkCutHeadProc__9daAlink_cCFv(); -void getRideActor__9daAlink_cFv(); -static void dComIfGs_isTmpBit__FUs(); -void __dt__14d2DBSplinePathFv(); -void __ct__Q29dCamera_c10dCamInfo_cFv(); -void __dt__Q29dCamera_c10dCamInfo_cFv(); -void footHeightOf__9dCamera_cFP10fopAc_ac_c(); -void push_any_key__9dCamera_cFv(); -void clrFlag__9dCamera_cFUl(); -void chkFlag__9dCamera_cFUl(); -void GetCheckObjectCount__12dAttention_cFv(); -static void dComIfGp_getAttention__Fv(); -void Bank__9dCamera_cFv(); -void checkThrowDamage__9daPy_py_cCFv(); -void GetNP__8cM3dGPlaFv(); -void GetCross__11cBgS_LinChkFv(); -static void dComIfG_Bgsp__Fv(); -void V__7cSGlobeCFv(); -void checkGoronSideMove__9daPy_py_cCFv(); -static void JMAFastSqrt__Ff(); -void fabsf__3stdFf(); -void __ct__7cSAngleFv(); -void R__7cSGlobeFf(); -static void dComIfGp_evmng_cameraPlay__Fv(); -void R__7cSGlobeCFv(); -bool __lt__7cSAngleCFRC7cSAngle(); -bool __gt__7cSAngleCFRC7cSAngle(); -void getRightFootPosP__9daPy_py_cFv(); -void getLeftFootPosP__9daPy_py_cFv(); -u32 getMidnaActor__9daPy_py_cFv(); -void checkCopyRodThrowAfter__9daPy_py_cCFv(); -void keepLock__12dAttention_cFi(); -void checkRide__9daPy_py_cCFv(); -void getRightHandPos__9daPy_py_cCFv(); -void CheckFlag2__11dCamSetup_cFUs(); -void CheckFlag__11dCamSetup_cFUs(); -void WaitRollSpeed__11dCamSetup_cFv(); -void WaitRollTimer__11dCamSetup_cFv(); -void getTrigA__8mDoCPd_cFUl(); -void __ops__7cSAngleCFv(); -void ThrowTimer__11dCamSetup_cFv(); -void ThrowCushion__11dCamSetup_cFv(); -void ThrowVAngle__11dCamSetup_cFv(); -void ThrowCtrAdjust__11dCamSetup_cFv(); -void Arg2__11dCamParam_cFv(); -void Arg1__11dCamParam_cFv(); -void Arg0__11dCamParam_cFv(); -void Fovy__11dCamParam_cFv(); -void Arg2__11dCamParam_cFs(); -void Arg1__11dCamParam_cFUc(); -void Arg0__11dCamParam_cFUc(); -void Fovy__11dCamParam_cFUc(); -void U__7cSGlobeCFv(); -void Flag__11dCamParam_cFlUs(); -void __as__7cSAngleFRC7cSAngle(); -void CheckFlag__11dCamParam_cFUs(); -void Val__11dCamParam_cFli(); -void ChargeBRatio__11dCamSetup_cFv(); -void ChargeTimer__11dCamSetup_cFv(); -void ChargeLatitude__11dCamSetup_cFv(); -void getLashDashStart__9daHorse_cCFv(); -void fabs__3stdFf(); -void checkTurnStandCamera__9daHorse_cCFv(); -void d2s__6cAngleFf(); -void checkJump__9daHorse_cCFv(); -static void fopAcM_GetParam__FPCv(); -void checkNoAttention__12daTagMstop_cCFv(); -void checkNoAttention__12daTagMhint_cCFv(); -void set__4cXyzFfff(); -void checkEndMessage__12daTagMwait_cFv(); -extern char const* const d_d_camera__stringBase0; - -// -// External References: -// - -void onBlure__13mDoGph_gInf_cFv(); -void onBlure__13mDoGph_gInf_cFPA4_Cf(); -void __dt__4cXyzFv(); -void mDoMtx_XrotM__FPA4_fs(); -void mDoMtx_YrotM__FPA4_fs(); -void mDoMtx_ZrotM__FPA4_fs(); -void mDoMtx_lookAt__FPA4_fPC3VecPC3VecPC3Vecs(); -void mDoMtx_concatProjView__FPA4_CfPA4_CfPA4_f(); -void transM__14mDoMtx_stack_cFfff(); -void scaleM__14mDoMtx_stack_cFRC4cXyz(); -void __ct__4cXyzFv(); -void setup__14mDoLib_clipperFffff(); -void mDoLib_project__FP3VecP3Vec(); -void fopAcIt_Judge__FPFPvPv_PvPv(); -void fopAcM_setStageLayer__FPv(); -void fopAcM_searchFromName4Event__FPCcs(); -void __dt__8cM3dGPlaFv(); -void fopCamM_GetParam__FP12camera_class(); -void fpcSch_JudgeForPName__FPvPv(); -void fpcSch_JudgeByID__FPvPv(); -void getStatusRoomDt__20dStage_roomControl_cFi(); -void dComIfGp_getRoomCamera__Fi(); -void dComIfGp_getRoomArrow__Fi(); -void dComLbG_PhaseHandler__FP30request_of_phase_process_classPPFPv_iPv(); -void __dt__7cSAngleFv(); -void __dt__8cM3dGCylFv(); -void isEventBit__11dSv_event_cCFUs(); -void isSwitch__10dSv_info_cCFii(); -void __dt__8cM3dGLinFv(); -void getActiveCamera__14dDemo_object_cFv(); -void getRes__14dRes_control_cFPCcPCcP11dRes_info_ci(); -void searchMapEventData__14dEvt_control_cFUc(); -void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci(); -void getIsAddvance__16dEvent_manager_cFi(); -void getMyActIdx__16dEvent_manager_cFiPCPCciii(); -void cutEnd__16dEvent_manager_cFi(); -void dPath_GetRoomPath__Fii(); -void setViewPort__14dDlst_window_cFffffff(); -void setScissor__14dDlst_window_cFffff(); -void init__8cM_rnd_cFiii(); -void update__18dDlst_effectLine_cFR4cXyzR8_GXColorUsUsUsUsffff(); -void dKyw_get_wind_vec__Fv(); -void dKyw_get_wind_pow__Fv(); -void StartShock__12dVibration_cFii4cXyz(); -void __dt__7cSGlobeFv(); -void LockonTarget__12dAttention_cFl(); -void LockonReleaseDistanse__12dAttention_cFv(); -void ActionTarget__12dAttention_cFl(); -void CheckObjectTarget__12dAttention_cFl(); -void LockonTruth__12dAttention_cFv(); -void LineCross__4cBgSFP11cBgS_LinChk(); -void GroundCross__4cBgSFP11cBgS_GndChk(); -void GetActorPointer__4cBgSCFi(); -void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -void ChkMoveBG__4dBgSFRC13cBgS_PolyInfo(); -void GetGroundCode__4dBgSFRC13cBgS_PolyInfo(); -void GetCamMoveBG__4dBgSFRC13cBgS_PolyInfo(); -void GetRoomCamId__4dBgSFRC13cBgS_PolyInfo(); -void GetGrpSoundId__4dBgSFRC13cBgS_PolyInfo(); -void ChkGrpInf__4dBgSFRC13cBgS_PolyInfoUl(); -void RoofChk__4dBgSFP12dBgS_RoofChk(); -void SphChk__4dBgSFP11dBgS_SphChkPv(); -void MoveBgMatrixCrrPos__4dBgSFRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -void __ct__11dBgS_GndChkFv(); -void __dt__11dBgS_GndChkFv(); -void __dt__14dBgS_CamGndChkFv(); -void __ct__18dBgS_CamGndChk_WtrFv(); -void __dt__18dBgS_CamGndChk_WtrFv(); -void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c(); -void __ct__14dBgS_CamLinChkFv(); -void __dt__14dBgS_CamLinChkFv(); -void __ct__11dBgS_SphChkFv(); -void __dt__11dBgS_SphChkFv(); -void SetObj__16dBgS_PolyPassChkFv(); -void ClrObj__16dBgS_PolyPassChkFv(); -void SetCam__16dBgS_PolyPassChkFv(); -void ClrCam__16dBgS_PolyPassChkFv(); -void SetUnderwaterRoof__16dBgS_PolyPassChkFv(); -void __ct__12dBgS_RoofChkFv(); -void __dt__12dBgS_RoofChkFv(); -void SetCam__12dCcMassS_MngFRC8cM3dGCps(); -void GetResultCam__12dCcMassS_MngCFv(); -void GetCamTopPos__12dCcMassS_MngFP3Vec(); -void ChkCamera__4dCcSFR4cXyzR4cXyzfP10fopAc_ac_cP10fopAc_ac_cP10fopAc_ac_c(); -void chkCameraPoint__4dCcSFRC4cXyzPQ214cCcD_ShapeAttr5ShapeP10fopAc_ac_cP10fopAc_ac_c(); -void rationalBezierRatio__8dCamMathFff(); -void zoomFovy__8dCamMathFff(); -void __dt__7cDegreeFv(); -void xyzRotateX__8dCamMathFR4cXyz7cSAngle(); -void xyzRotateY__8dCamMathFR4cXyz7cSAngle(); -void xyzHorizontalDistance__8dCamMathFR4cXyzR4cXyz(); -bool Shift__9dCstick_cFUl(); -void __ct__11dCamParam_cFl(); -void __dt__11dCamParam_cFv(); -void Change__11dCamParam_cFl(); -void SearchStyle__11dCamParam_cFUl(); -void __ct__11dCamSetup_cFv(); -void __dt__11dCamSetup_cFv(); -void CheckLatitudeRange__11dCamSetup_cFPs(); -void PlayerHideDist__11dCamSetup_cFv(); -void getEvIntData__9dCamera_cFPiPc(); -void getEvFloatData__9dCamera_cFPfPc(); -void getEvIntData__9dCamera_cFPiPci(); -void getEvFloatData__9dCamera_cFPfPcf(); -void getEvStringData__9dCamera_cFPcPcPc(); -void getEvActor__9dCamera_cFPc(); -void getEvActor__9dCamera_cFPcPc(); -void pauseEvCamera__9dCamera_cFv(); -void fixedFrameEvCamera__9dCamera_cFv(); -void stokerEvCamera__9dCamera_cFv(); -void rollingEvCamera__9dCamera_cFv(); -void fixedPositionEvCamera__9dCamera_cFv(); -void uniformTransEvCamera__9dCamera_cFv(); -void uniformBrakeEvCamera__9dCamera_cFv(); -void uniformAcceleEvCamera__9dCamera_cFv(); -void __as__7cSGlobeFRC7cSGlobe(); -void abs__4cXyzCFv(); -void U__7cSGlobeFRC7cSAngle(); -void __ami__4cXyzFRC3Vec(); -void __apl__4cXyzFRC3Vec(); -void watchActorEvCamera__9dCamera_cFv(); -void V__7cSGlobeFRC7cSAngle(); -void restorePosEvCamera__9dCamera_cFv(); -void talktoEvCamera__9dCamera_cFv(); -void maptoolIdEvCamera__9dCamera_cFv(); -void styleEvCamera__9dCamera_cFv(); -void gameOverEvCamera__9dCamera_cFv(); -void tactEvCamera__9dCamera_cFv(); -bool turnToActorEvCamera__9dCamera_cFv(); -void stbWaitEvCamera__9dCamera_cFv(); -void saveEvCamera__9dCamera_cFv(); -void loadEvCamera__9dCamera_cFv(); -void useItem0EvCamera__9dCamera_cFv(); -void useItem1EvCamera__9dCamera_cFv(); -void getItemEvCamera__9dCamera_cFv(); -void possessedEvCamera__9dCamera_cFv(); -void fixedFramesEvCamera__9dCamera_cFv(); -void bSplineEvCamera__9dCamera_cFv(); -void twoActor0EvCamera__9dCamera_cFv(); -void peepHoleEvCamera__9dCamera_cFv(); -void digHoleEvCamera__9dCamera_cFv(); -void hintTalkEvCamera__9dCamera_cFv(); -void bspTransEvCamera__9dCamera_cFv(); -bool portalWarpEvCamera__9dCamera_cFv(); -void attentionPos__9dCamera_cFP10fopAc_ac_c(); -void directionOf__9dCamera_cFP10fopAc_ac_c(); -void positionOf__9dCamera_cFP10fopAc_ac_c(); -void setFlag__9dCamera_cFUl(); -void eyePos__9dCamera_cFP10fopAc_ac_c(); - -// -// Declarations: -// - namespace { /* 8015FA2C-8015FA4C 15A36C 0020+00 2/2 0/0 0/0 .text limitf__22@unnamed@d_camera_cpp@Ffff */ @@ -442,7 +40,7 @@ static f32 limitf(f32 value, f32 min, f32 max) { return value; } -inline static f32 rangef(f32 value1, f32 value2, f32 ratio) { +static f32 rangef(f32 value1, f32 value2, f32 ratio) { return value1 + (value2 - value1) * ratio; } @@ -553,7 +151,7 @@ static cXyz relationalPos2(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, cXyz* par /* 8015FEB8-8016008C 15A7F8 01D4+00 4/4 0/0 0/0 .text Set__15dCamMapToolDataFllP10fopAc_ac_cUsUc */ int dCamMapToolData::Set(s32 param_0, s32 roomNo, fopAc_ac_c* param_2, u16 param_3, u8 param_4) { - if ((param_3 & 0xFF) > field_0x38) { + if ((param_3 & 0xFF) > mPriority) { return 0; } @@ -562,141 +160,35 @@ int dCamMapToolData::Set(s32 param_0, s32 roomNo, fopAc_ac_c* param_2, u16 param if (room_cam != NULL && param_0 >= 0 && param_0 < room_cam->num) { Clr(); - field_0x30 = param_0; - field_0x0 = room_cam->m_entries[field_0x30]; - field_0x3a = (field_0x0.field_0x14 >> 0xE) & 3; + mCameraIndex = param_0; + mCamData = room_cam->m_entries[mCameraIndex]; + mFlags = (mCamData.field_0x14 >> 0xE) & 3; if (param_3 & 0x8000) { - field_0x3a |= 0x10; + mFlags |= 0x10; } - if (field_0x0.field_0x14 & 0x2000) { - field_0x0.field_0x14 |= 0xC000; + if (mCamData.field_0x14 & 0x2000) { + mCamData.field_0x14 |= 0xC000; } else { - field_0x0.field_0x14 &= ~0xC000; + mCamData.field_0x14 &= ~0xC000; } - field_0x2c = field_0x0.m_arrow_idx; + mArrowIndex = mCamData.m_arrow_idx; - if (room_arrow != NULL && field_0x2c >= 0 && field_0x2c < room_arrow->num) { - field_0x18 = room_arrow->m_entries[field_0x2c]; + if (room_arrow != NULL && mArrowIndex >= 0 && mArrowIndex < room_arrow->num) { + mArrowData = room_arrow->m_entries[mArrowIndex]; } - field_0x34 = param_2; - field_0x3b = param_4; - field_0x38 = param_3 & 0xFF; + mpActor = param_2; + mPathId = param_4; + mPriority = param_3 & 0xFF; return 1; } return 0; } -/* ############################################################################################## */ -/* 80393F68-80393F68 0205C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80393F68 = "camtype.dat"; -SECTION_DEAD static char const* const stringBase_80393F74 = "D_MN01A"; -SECTION_DEAD static char const* const stringBase_80393F7C = "D_MN10A"; -SECTION_DEAD static char const* const stringBase_80393F84 = "D_MN11A"; -SECTION_DEAD static char const* const stringBase_80393F8C = "D_MN04A"; -SECTION_DEAD static char const* const stringBase_80393F94 = "D_MN05A"; -SECTION_DEAD static char const* const stringBase_80393F9C = "D_MN07A"; -SECTION_DEAD static char const* const stringBase_80393FA4 = "FieldS"; -SECTION_DEAD static char const* const stringBase_80393FAB = "Event"; -SECTION_DEAD static char const* const stringBase_80393FB1 = "Water"; -SECTION_DEAD static char const* const stringBase_80393FB7 = "Scope"; -SECTION_DEAD static char const* const stringBase_80393FBD = "WaterSurf"; -SECTION_DEAD static char const* const stringBase_80393FC7 = "HorseT"; -SECTION_DEAD static char const* const stringBase_80393FCE = "Board"; -SECTION_DEAD static char const* const stringBase_80393FD4 = "Canoe"; -SECTION_DEAD static char const* const stringBase_80393FDA = "Keep"; -SECTION_DEAD static char const* const stringBase_80393FDF = "Rodeo"; -SECTION_DEAD static char const* const stringBase_80393FE5 = "MagneBoots"; -SECTION_DEAD static char const* const stringBase_80393FF0 = "MagneRoof"; -SECTION_DEAD static char const* const stringBase_80393FFA = "MagneWall"; -SECTION_DEAD static char const* const stringBase_80394004 = "CoccoJump"; -SECTION_DEAD static char const* const stringBase_8039400E = "Boar"; -SECTION_DEAD static char const* const stringBase_80394013 = "GoatBattle"; -SECTION_DEAD static char const* const stringBase_8039401E = "GoronJump"; -SECTION_DEAD static char const* const stringBase_80394028 = "Spinner"; -SECTION_DEAD static char const* const stringBase_80394030 = "HookWall"; -SECTION_DEAD static char const* const stringBase_80394039 = "HookRoof"; -SECTION_DEAD static char const* const stringBase_80394042 = "HookActor"; -SECTION_DEAD static char const* const stringBase_8039404C = "RoofHung"; -SECTION_DEAD static char const* const stringBase_80394055 = "Rotary"; -SECTION_DEAD static char const* const stringBase_8039405C = "Street"; -SECTION_DEAD static char const* const stringBase_80394063 = "StreetN"; -SECTION_DEAD static char const* const stringBase_8039406B = "StreetP"; -SECTION_DEAD static char const* const stringBase_80394073 = "Rampart2"; -SECTION_DEAD static char const* const stringBase_8039407C = "Allay"; -SECTION_DEAD static char const* const stringBase_80394082 = "AllayR"; -SECTION_DEAD static char const* const stringBase_80394089 = "AllayR2"; -SECTION_DEAD static char const* const stringBase_80394091 = "AllayS"; -SECTION_DEAD static char const* const stringBase_80394098 = "AllayN"; -SECTION_DEAD static char const* const stringBase_8039409F = "AllayR3"; -SECTION_DEAD static char const* const stringBase_803940A7 = "CopyRodHall"; -SECTION_DEAD static char const* const stringBase_803940B3 = "MidnaTag"; -SECTION_DEAD static char const* const stringBase_803940BC = "WarpObj"; -SECTION_DEAD static char const* const stringBase_803940C4 = "LV9GZeldaTri"; -SECTION_DEAD static char const* const stringBase_803940D1 = "LV4BOSSSPJP"; -SECTION_DEAD static char const* const stringBase_803940DD = "LV7BOSS"; -SECTION_DEAD static char const* const stringBase_803940E5 = "TeppeiHook"; -SECTION_DEAD static char const* const stringBase_803940F0 = "Peep"; -SECTION_DEAD static char const* const stringBase_803940F5 = "DungeonS"; -SECTION_DEAD static char const* const stringBase_803940FE = "Room"; -SECTION_DEAD static char const* const stringBase_80394103 = "Cave"; -SECTION_DEAD static char const* const stringBase_80394108 = "Timer"; -SECTION_DEAD static char const* const stringBase_8039410E = "Target"; -SECTION_DEAD static char const* const stringBase_80394115 = "Smoothless"; -SECTION_DEAD static char const* const stringBase_80394120 = "Mode"; -SECTION_DEAD static char const* const stringBase_80394125 = "Radius"; -SECTION_DEAD static char const* const stringBase_8039412C = "RadiusNear"; -SECTION_DEAD static char const* const stringBase_80394137 = "Longitude"; -SECTION_DEAD static char const* const stringBase_80394141 = "Fovy"; -SECTION_DEAD static char const* const stringBase_80394146 = "FovyNear"; -SECTION_DEAD static char const* const stringBase_8039414F = "Latitude"; -SECTION_DEAD static char const* const stringBase_80394158 = "Listener"; -SECTION_DEAD static char const* const stringBase_80394161 = "@STARTER"; -SECTION_DEAD static char const* const stringBase_8039416A = "Speaker"; -SECTION_DEAD static char const* const stringBase_80394172 = "@TALKPARTNER"; -SECTION_DEAD static char const* const stringBase_8039417F = "E_RD"; -SECTION_DEAD static char const* const stringBase_80394184 = "PAUSE"; -SECTION_DEAD static char const* const stringBase_8039418A = "WAIT"; -SECTION_DEAD static char const* const stringBase_8039418F = "TALK"; -SECTION_DEAD static char const* const stringBase_80394194 = "FIXEDPOS"; -SECTION_DEAD static char const* const stringBase_8039419D = "FIXEDFRM"; -SECTION_DEAD static char const* const stringBase_803941A6 = "UNITRANS"; -SECTION_DEAD static char const* const stringBase_803941AF = "WATCHACTOR"; -SECTION_DEAD static char const* const stringBase_803941BA = "RESTOREPOS"; -SECTION_DEAD static char const* const stringBase_803941C5 = "GETITEM"; -SECTION_DEAD static char const* const stringBase_803941CD = "GAMEOVER"; -SECTION_DEAD static char const* const stringBase_803941D6 = "TURNTOACTOR"; -SECTION_DEAD static char const* const stringBase_803941E2 = "ROLLING"; -SECTION_DEAD static char const* const stringBase_803941EA = "TACT"; -SECTION_DEAD static char const* const stringBase_803941EF = "WINDDIR"; -SECTION_DEAD static char const* const stringBase_803941F7 = "PORTALWARP"; -SECTION_DEAD static char const* const stringBase_80394202 = "STYLE"; -SECTION_DEAD static char const* const stringBase_80394208 = "SAVE"; -SECTION_DEAD static char const* const stringBase_8039420D = "LOAD"; -SECTION_DEAD static char const* const stringBase_80394212 = "USEITEM0"; -SECTION_DEAD static char const* const stringBase_8039421B = "USEITEM1"; -SECTION_DEAD static char const* const stringBase_80394224 = "FIXEDFRMS"; -SECTION_DEAD static char const* const stringBase_8039422E = "BSPLINE"; -SECTION_DEAD static char const* const stringBase_80394236 = "POSSESSED"; -SECTION_DEAD static char const* const stringBase_80394240 = "TWOACTOR0"; -SECTION_DEAD static char const* const stringBase_8039424A = "STOKER"; -SECTION_DEAD static char const* const stringBase_80394251 = "UNIBRAKE"; -SECTION_DEAD static char const* const stringBase_8039425A = "UNIACCELE"; -SECTION_DEAD static char const* const stringBase_80394264 = "STBWAIT"; -SECTION_DEAD static char const* const stringBase_8039426C = "CURRENT"; -SECTION_DEAD static char const* const stringBase_80394274 = "PEEPHOLE"; -SECTION_DEAD static char const* const stringBase_8039427D = "DIGHOLE"; -SECTION_DEAD static char const* const stringBase_80394285 = "HINTTALK"; -SECTION_DEAD static char const* const stringBase_8039428E = "BSPTRANS"; -SECTION_DEAD static char const* const stringBase_80394297 = "MAPTOOL"; -#pragma pop - /* 803BA25C-803BA34C 01737C 00F0+00 2/3 3/3 0/0 .data engine_tbl__9dCamera_c */ engine_fn dCamera_c::engine_tbl[] = { &dCamera_c::letCamera, &dCamera_c::chaseCamera, &dCamera_c::lockonCamera, @@ -759,7 +251,6 @@ dCamera_c::dCamera_c(camera_class* i_camera) : mCamParam(0) { } /* 80160304-80160470 15AC44 016C+00 1/1 0/0 0/0 .text __dt__9dCamera_cFv */ -// NONMATCHING extra mWork destructor dCamera_c::~dCamera_c() { if (!daPy_py_c::checkPeepEndSceneChange()) { dComIfGs_getTurnRestart().setCameraCtr(mCenter); @@ -814,7 +305,7 @@ enum SpecialType { /* 0x28 */ CAM_TYPE_LV7_BOSS, /* 0x29 */ CAM_TYPE_PEEP, }; - + namespace { /* 8042C8F8-8042C9A0 059618 00A8+00 12/12 0/0 0/0 .bss specialType__22@unnamed@d_camera_cpp@ */ @@ -869,7 +360,7 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c field_0x0 = i_camera; field_0x20 = 1; field_0x21 = 0; - field_0x24 = 0; + mCurState = 0; mpPlayerActor = i_player; mCameraID = i_cameraID; mPadID = i_padID; @@ -878,7 +369,7 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c initPad(); mFocusLine.Init(); - field_0x004.mRoomNo = dComIfGp_roomControl_getStayNo(); + mRoomCtx.mRoomNo = dComIfGp_roomControl_getStayNo(); const char* stage_name = dComIfGp_getStartStageName(); if (strcmp(stage_name, "D_MN01A") == 0) { Stage = 0x68; @@ -942,22 +433,22 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c field_0x69c = 0; mIsWolf = daPy_py_c::checkNowWolf() != 0; mCurMode = 0; - field_0x680 = 0; - field_0x1ac = 11; - field_0x1b4 = 0.0f; + mEngineHoldState = 0; + mForcedMode = 11; + mSightFitRadius = 0.0f; mEventFlags = 0; - field_0x1b0 = cSAngle::_0; - field_0xa8 = 0; - field_0xac = cM_rndFX(0x7FFF); + mForwardTiltOffset = cSAngle::_0; + mFrameCounter = 0; + mTicks = cM_rndFX(0x7FFF); field_0x84 = 1.0f; field_0x91c = 0.0f; mTrimHeight = 0.0f; mTrimSize = 0; mTrimTypeForce = -1; - field_0x940 = 0; + mGear = 0; field_0x944 = 0; - field_0x950 = field_0x940; + field_0x950 = mGear; mBG.field_0x5c.field_0x0 = 0; mBG.field_0x0.field_0x0 = 0; @@ -979,19 +470,19 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c mBG.field_0xc0.field_0x38 = -1000000000.0f; mBG.field_0xc0.field_0x40 = 0xFF; - field_0x934 = mCamSetup.mBGChk.WallUpDistance(); + mWallUpDist = mCamSetup.mBGChk.WallUpDistance(); mMapToolType = 0xFF; - field_0x7ac.Clr(); - field_0x7e8.Clr(); - field_0x824.Clr(); - field_0x860.Clr(); + mRoomMapTool.Clr(); + mStageCamTool.Clr(); + mDefRoomCamTool.Clr(); + mTagCamTool.Clr(); field_0x89c.Clr(); field_0x8d8.Clr(); setStageMapToolData(); - if (field_0x7e8.field_0x30 != 0xFF) { - mMapToolType = GetCameraTypeFromToolData(&field_0x7e8.field_0x0); + if (mStageCamTool.mCameraIndex != 0xFF) { + mMapToolType = GetCameraTypeFromToolData(&mStageCamTool.mCamData); } dStage_dt_c* stage_dt = dComIfGp_getStage(); @@ -1027,12 +518,12 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c } } - setRoomMapToolData(&field_0x824, sp108, sp10C); + setRoomMapToolData(&mDefRoomCamTool, sp108, sp10C); checkGroundInfo(); setMapToolData(); - if (field_0x7ac.field_0x30 != 0xFF) { - mCurType = GetCameraTypeFromToolData(&field_0x7ac.field_0x0); + if (mRoomMapTool.mCameraIndex != 0xFF) { + mCurType = GetCameraTypeFromToolData(&mRoomMapTool.mCamData); } else { if (check_owner_action(mPadID, 0x8000000)) { mCurType = GetCameraTypeFromCameraName("Cave"); @@ -1055,18 +546,18 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c if (daPy_py_c::checkPeepEndSceneChange() || dComIfGp_getStartStagePoint() == -2 || dComIfGp_getStartStagePoint() == -3) { - mCenter = field_0x5c.mCenter = dComIfGs_getTurnRestart().getCameraCtr(); - mEye = field_0x5c.mEye = dComIfGs_getTurnRestart().getCameraEye(); + mCenter = mViewCache.mCenter = dComIfGs_getTurnRestart().getCameraCtr(); + mEye = mViewCache.mEye = dComIfGs_getTurnRestart().getCameraEye(); - field_0x5c.mDirection.Val(mEye - mCenter); - mDirection = field_0x5c.mDirection; - field_0x8c = field_0x5c.mDirection.U().Inv(); + mViewCache.mDirection.Val(mEye - mCenter); + mDirection = mViewCache.mDirection; + mControlledYaw = mViewCache.mDirection.U().Inv(); mUp = dComIfGs_getTurnRestart().getCameraUp(); mBank = cSAngle::_0; - field_0x5c.mBank = mBank; + mViewCache.mBank = mBank; - field_0x5c.mFovy = mFovy = dComIfGs_getTurnRestart().getCameraFvy(); + mViewCache.mFovy = mFovy = dComIfGs_getTurnRestart().getCameraFvy(); } else if (daAlink_getAlinkActorClass()->checkStartFall()) { cXyz attn_pos = attentionPos(mpPlayerActor); if (mCamParam.Algorythmn() == 1) { @@ -1074,19 +565,19 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c } cSGlobe spE8(0.0f, cSAngle((s16)0), directionOf(mpPlayerActor)); - mCenter = field_0x5c.mCenter = attn_pos + spE8.Xyz(); + mCenter = mViewCache.mCenter = attn_pos + spE8.Xyz(); cXyz center = dComIfGs_getTurnRestart().getCameraCtr(); cXyz eye = dComIfGs_getTurnRestart().getCameraEye(); - field_0x5c.mDirection.Val(eye - center); - field_0x8c = field_0x5c.mDirection.U().Inv(); + mViewCache.mDirection.Val(eye - center); + mControlledYaw = mViewCache.mDirection.U().Inv(); - mEye = field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + mEye = mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); mUp = dComIfGs_getTurnRestart().getCameraUp(); mBank = cSAngle::_0; - field_0x5c.mBank = mBank; - field_0x5c.mFovy = mFovy = dComIfGs_getTurnRestart().getCameraFvy(); + mViewCache.mBank = mBank; + mViewCache.mFovy = mFovy = dComIfGs_getTurnRestart().getCameraFvy(); } else { cXyz attn_pos = attentionPos(mpPlayerActor); if (mCamParam.Algorythmn() == 1) { @@ -1094,19 +585,19 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c } cSGlobe spE8(0.0f, cSAngle((s16)0), directionOf(mpPlayerActor)); - mCenter = field_0x5c.mCenter = attn_pos + spE8.Xyz(); + mCenter = mViewCache.mCenter = attn_pos + spE8.Xyz(); - field_0x5c.mDirection.Val(300.0f, 0, directionOf(mpPlayerActor).Inv()); + mViewCache.mDirection.Val(300.0f, 0, directionOf(mpPlayerActor).Inv()); - mEye = field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - mDirection = field_0x5c.mDirection; - field_0x8c = field_0x5c.mDirection.U().Inv(); + mEye = mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mDirection = mViewCache.mDirection; + mControlledYaw = mViewCache.mDirection.U().Inv(); mFovy = 60.0f; - field_0x5c.mFovy = 60.0f; + mViewCache.mFovy = 60.0f; mUp.set(0.0f, 1.0f, 0.0f); mBank = cSAngle::_0; - field_0x5c.mBank = mBank; + mViewCache.mBank = mBank; } mFakeAngleSys.field_0x0 = 0; @@ -1115,72 +606,72 @@ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_c field_0x668 = 0; field_0x66c = 0; field_0x678 = 1; - field_0x73c = 0.0f; + mZoomRatio = 0.0f; field_0x738 = 85.0f; - field_0x610 = 0; + mFastShotState = 0; field_0x611 = 0; - clearInfo(&field_0xb0, 0); - clearInfo(&field_0xd0[0], 0); - clearInfo(&field_0xd0[1], 0); + clearInfo(&mSavedView, 0); + clearInfo(&mSavedViewStack[0], 0); + clearInfo(&mSavedViewStack[1], 0); - clearInfo(&field_0x110.field_0x8, 0); - field_0x110.field_0x4 = 0; - field_0x110.field_0x28 = cXyz::Zero; - field_0x110.field_0x0 = -1; + clearInfo(&mRecovery.field_0x8, 0); + mRecovery.field_0x4 = 0; + mRecovery.field_0x28 = cXyz::Zero; + mRecovery.field_0x0 = -1; field_0x93c = 0; mThrowTimer = 0; - field_0x94c = cSAngle::_0; - field_0x740.field_0x18 = mUp; - field_0x740.field_0xc = mEye; - field_0x740.field_0x0 = mCenter; + mBankOverride = cSAngle::_0; + mUpOverride.field_0x18 = mUp; + mUpOverride.field_0xc = mEye; + mUpOverride.field_0x0 = mCenter; setFlag(0x1000); daAlink_c* player = daAlink_getAlinkActorClass(); daMidna_c* midna = daPy_py_c::getMidnaActor(); - field_0x194 = player->checkMidnaRide() && !midna->checkNoDraw(); - field_0x958 = 0; + mMidnaRidingAndVisible = player->checkMidnaRide() && !midna->checkNoDraw(); + mLastBumpCase = 0; field_0x95c = cXyz::Zero; } /* 801614AC-801614C4 15BDEC 0018+00 0/0 1/1 106/106 .text Start__9dCamera_cFv */ void dCamera_c::Start() { - if (mCamSetup.CheckFlag(0x8000) && field_0x24 != 0 && field_0x24 != 2) { + if (mCamSetup.CheckFlag(0x8000) && mCurState != 0 && mCurState != 2) { OS_REPORT("camera: start\n"); } - if (field_0x24 != 0) { - field_0x24 = 2; + if (mCurState != 0) { + mCurState = 2; } } /* 801614C4-801614D0 15BE04 000C+00 0/0 1/1 0/0 .text QuickStart__9dCamera_cFv */ void dCamera_c::QuickStart() { - if (mCamSetup.CheckFlag(0x8000) && field_0x24 != 0) { + if (mCamSetup.CheckFlag(0x8000) && mCurState != 0) { OS_REPORT("camera: quick start\n"); } - field_0x24 = 0; + mCurState = 0; } /* 801614D0-801614E8 15BE10 0018+00 0/0 2/2 98/98 .text Stop__9dCamera_cFv */ void dCamera_c::Stop() { clrFlag(0x200000); - if (mCamSetup.CheckFlag(0x8000) && field_0x24 != 3) { - OS_REPORT("%06d: camera: stop \n", field_0xa8); + if (mCamSetup.CheckFlag(0x8000) && mCurState != 3) { + OS_REPORT("%06d: camera: stop \n", mFrameCounter); } - field_0x24 = 3; + mCurState = 3; } /* 801614E8-801614F4 15BE28 000C+00 0/0 2/2 0/0 .text Stay__9dCamera_cFv */ void dCamera_c::Stay() { - field_0x24 = 1; + mCurState = 1; } /* 801614F4-80161550 15BE34 005C+00 2/2 4/4 0/0 .text ChangeModeOK__9dCamera_cFl */ @@ -1193,7 +684,6 @@ bool dCamera_c::ChangeModeOK(s32 param_0) { } /* 80161550-801617B0 15BE90 0260+00 1/1 0/0 0/0 .text initPad__9dCamera_cFv */ -// NONMATCHING - Why does getHoldZ behave differently in retail? void dCamera_c::initPad() { if (chkFlag(0x1000000)) { mPadInfo.mMainStick.mLastPosX = 0.0f; @@ -1225,21 +715,21 @@ void dCamera_c::initPad() { mPadInfo.mCStick.mValueDelta = 0.0f; mPadInfo.mCStick.mAngle = cSAngle::_0; - field_0x1f4 = field_0x1f8 = field_0x1fc = 0; + mCStickYState = mCStickYHoldCount = mCStickUpLatch = 0; mTriggerLeftLast = mDoCPd_c::getAnalogL(mPadID); mTriggerLeftDelta = 0.0f; - field_0x208 = 0; - field_0x209 = 0; - field_0x20a = 0; - field_0x20b = 0; + mHoldLockL = 0; + mTrigLockL = 0; + mLockLActive = 0; + mLockLJustActivated = 0; mTriggerRightLast = mDoCPd_c::getAnalogR(mPadID); mTriggerRightDelta = 0.0f; - field_0x214 = 0; - field_0x215 = 0; - field_0x216 = 0; - field_0x217 = 0; + mHoldLockR = 0; + mTrigLockR = 0; + mLockRActive = 0; + mLockRJustActivated = 0; mHoldX = mDoCPd_c::getHoldX(mPadID) ? true : false; mTrigX = mDoCPd_c::getTrigX(mPadID) ? true : false; @@ -1250,14 +740,15 @@ void dCamera_c::initPad() { mHoldY = mDoCPd_c::getHoldY(mPadID) ? true : false; mTrigY = mDoCPd_c::getTrigY(mPadID) ? true : false; - mHoldZ = mDoCPd_c::getHoldZ(mPadID) ? true : false; + // fakematch (doesn't match in debug) + mHoldZ = (u8)mDoCPd_c::getHoldZ(mPadID) ? true : false; mTrigZ = mDoCPd_c::getTrigZ(mPadID) ? true : false; field_0x21f = 0; mHoldB = mDoCPd_c::getHoldB(mPadID) ? true : false; mTrigB = mDoCPd_c::getTrigB(mPadID) ? true : false; field_0x223 = 0; - field_0x224 = 0; + mCameraInputActive = 0; } /* 801617B0-80161D84 15C0F0 05D4+00 1/1 0/0 0/0 .text updatePad__9dCamera_cFv */ @@ -1308,119 +799,121 @@ void dCamera_c::updatePad() { f32 analog_l = mDoCPd_c::getAnalogL(mPadID); mTriggerLeftDelta = mTriggerLeftLast - analog_l; mTriggerLeftLast = analog_l; - field_0x208 = mDoCPd_c::getHoldLockL(mPadID) != 0; - field_0x209 = mDoCPd_c::getTrigLockL(mPadID) != 0; + mHoldLockL = mDoCPd_c::getHoldLockL(mPadID) ? true : false; + mTrigLockL = mDoCPd_c::getTrigLockL(mPadID) ? true : false; if (mTriggerLeftLast > mCamSetup.ManualEndVal()) { - if (field_0x20a == 0) { - field_0x20b = 1; + if (mLockLActive == 0) { + mLockLJustActivated = 1; } else { - field_0x20b = 0; + mLockLJustActivated = 0; } - field_0x20a = 1; + mLockLActive = 1; } else { - field_0x20b = 0; - field_0x20a = 0; + mLockLJustActivated = 0; + mLockLActive = 0; } f32 analog_r = mDoCPd_c::getAnalogR(mPadID); mTriggerRightDelta = mTriggerRightLast - analog_r; mTriggerRightLast = analog_r; - field_0x214 = mDoCPd_c::getHoldLockR(mPadID) != 0; - field_0x215 = mDoCPd_c::getTrigLockR(mPadID) != 0; + mHoldLockR = mDoCPd_c::getHoldLockR(mPadID) ? true : false; + mTrigLockR = mDoCPd_c::getTrigLockR(mPadID) ? true : false; if (mTriggerRightLast > mCamSetup.ManualEndVal()) { - if (field_0x216 == 0) { - field_0x217 = 1; + if (mLockRActive == 0) { + mLockRJustActivated = 1; } else { - field_0x217 = 0; + mLockRJustActivated = 0; } - field_0x216 = 1; + mLockRActive = 1; } else { - field_0x217 = 0; - field_0x216 = 0; + mLockRJustActivated = 0; + mLockRActive = 0; } - mHoldX = mDoCPd_c::getHoldX(mPadID); - mTrigX = mDoCPd_c::getTrigX(mPadID); - mHoldY = mDoCPd_c::getHoldY(mPadID); - mTrigY = mDoCPd_c::getTrigY(mPadID); - mHoldZ = mDoCPd_c::getHoldZ(mPadID); - mTrigZ = mDoCPd_c::getTrigZ(mPadID); - mHoldB = mDoCPd_c::getHoldB(mPadID); - mTrigB = mDoCPd_c::getTrigB(mPadID); + mHoldX = mDoCPd_c::getHoldX(mPadID) ? true : false; + mTrigX = mDoCPd_c::getTrigX(mPadID) ? true : false; + mHoldY = mDoCPd_c::getHoldY(mPadID) ? true : false; + mTrigY = mDoCPd_c::getTrigY(mPadID) ? true : false; + mHoldZ = mDoCPd_c::getHoldZ(mPadID) ? true : false; + mTrigZ = mDoCPd_c::getTrigZ(mPadID) ? true : false; + mHoldB = mDoCPd_c::getHoldB(mPadID) ? true : false; + mTrigB = mDoCPd_c::getTrigB(mPadID) ? true : false; bool sp6B = true; bool sp6C = true; + int temp1; int sp68; if (mCamTypeData[mCurType].field_0x18[mIsWolf][0] > 0) { sp68 = mIsWolf; } else { sp68 = 0; } + temp1 = sp68; - if (mCamTypeData[mCurType].field_0x18[sp68][4] < 0) { + if (mCamTypeData[mCurType].field_0x18[temp1][4] < 0) { sp6B = false; - if (field_0x940 == -1) { - field_0x940 = 0; + if (mGear == -1) { + mGear = 0; } } if ((var_r30 != 1 && var_r30 != 8 && var_r30 != 7) || mCamParam.Flag(mCamStyle, 0x80)) { sp6C = false; - if (field_0x940 == 1) { - field_0x940 = 0; + if (mGear == 1) { + mGear = 0; } } if (mCurMode == 0 || mCurMode == 4) { if (check_owner_action(mPadID, 0x12000)) { - field_0x940 = -1; - } else if (field_0x940 == -1) { - field_0x940 = 0; + mGear = -1; + } else if (mGear == -1) { + mGear = 0; } if (mPadInfo.mCStick.mLastPosY < -mCamSetup.mCStick.SwTHH()) { - if (field_0x1f4 != -1) { - if (field_0x940 == -1 && mCurMode == 4) { - field_0x940 = 0; + if (mCStickYState != -1) { + if (mGear == -1 && mCurMode == 4) { + mGear = 0; setComStat(0x2000); - } else if (field_0x940 == 0 && sp6C) { - field_0x940 = 1; + } else if (mGear == 0 && sp6C) { + mGear = 1; } } - field_0x1f4 = -1; + mCStickYState = -1; } else if (mPadInfo.mCStick.mLastPosY > mCamSetup.mCStick.SwTHH()) { - if (field_0x1f4 != 1) { - if (field_0x940 == 0 && sp6B) { + if (mCStickYState != 1) { + if (mGear == 0 && sp6B) { setComStat(0x1000); - } else if (field_0x940 == 1) { - field_0x940 = 0; + } else if (mGear == 1) { + mGear = 0; } } - field_0x1f4 = 1; + mCStickYState = 1; } else { - field_0x1f4 = 0; + mCStickYState = 0; } - if (field_0x1f4 != 0) { - field_0x1f8++; + if (mCStickYState != 0) { + mCStickYHoldCount++; } else { - field_0x1f8 = 0; + mCStickYHoldCount = 0; } } field_0x223 = 0; - field_0x224 = 0; + mCameraInputActive = 0; if (mDoCPd_c::getStickValue(mPadID) > 0.001f || mDoCPd_c::getSubStickValue(mPadID) > 0.001f || mDoCPd_c::getHold(mPadID) != 0) { - field_0x224 = 1; + mCameraInputActive = 1; } } @@ -1436,7 +929,7 @@ void dCamera_c::initMonitor() { field_0x2c0 = 0.0f; mMonitor.field_0x10 = 0.0f; mMonitor.field_0xc = 0.0f; - field_0x2c4 = 0; + mIdleFrameCount = 0; field_0x2c8 = 0.0f; mMonitor.field_0x14 = cXyz::Zero; } @@ -1464,9 +957,9 @@ void dCamera_c::updateMonitor() { mMonitor.field_0x0 = sp24; if (!push_any_key()) { - field_0x2c4++; + mIdleFrameCount++; } else { - field_0x2c4 = 0; + mIdleFrameCount = 0; } field_0x2c8 = mDirection.R() - field_0x2c8; @@ -1520,7 +1013,7 @@ inline bool chkCornerCos(f32 param_0) { bool dCamera_c::Run() { daAlink_c* link = daAlink_getAlinkActorClass(); daMidna_c* midna = daPy_py_c::getMidnaActor(); - field_0x194 = link->checkMidnaRide() && !midna->checkNoDraw(); + mMidnaRidingAndVisible = link->checkMidnaRide() && !midna->checkNoDraw(); bool bVar9 = false; clrComStat(0x804); int iVar8 = mIsWolf; @@ -1528,10 +1021,10 @@ bool dCamera_c::Run() { mFocusLine.Off(); clrFlag(0x10168C21); clrFlag(0x10); - field_0x18c = NULL; - field_0x188 = NULL; + mpAuxTargetActor2 = NULL; + mpAuxTargetActor1 = NULL; s32 stay_no = dComIfGp_roomControl_getStayNo(); - if (stay_no != field_0x004.mRoomNo) { + if (stay_no != mRoomCtx.mRoomNo) { onRoomChange(stay_no); } checkGroundInfo(); @@ -1609,7 +1102,7 @@ bool dCamera_c::Run() { clrFlag(0); clrComStat(0x80); - if (field_0x940 == -1) { + if (mGear == -1) { setComStat(0x80); } if (getComStat(0x2000)) { @@ -1619,12 +1112,12 @@ bool dCamera_c::Run() { if (mCamParam.CheckFlag(0x4000) && !check_owner_action(mPadID, 0x4000000) && !link->checkMagneBootsOn() && !isPlayerFlying(link)) { - field_0x1b0 += (forwardCheckAngle() - field_0x1b0) * mCamSetup.mBGChk.FwdCushion(); + mForwardTiltOffset += (forwardCheckAngle() - mForwardTiltOffset) * mCamSetup.mBGChk.FwdCushion(); } else { - field_0x1b0 = cSAngle::_0; + mForwardTiltOffset = cSAngle::_0; } - field_0x88 = 0x4001; + mBumpCheckFlags = 0x4001; clrFlag(8); if (chkFlag(0x200000) && mCamParam.Algorythmn(mCamStyle) != 10) { if (push_any_key() || mMonitor.field_0xc > 10.0f || mBG.field_0xc0.field_0x44 == 0) { @@ -1637,14 +1130,14 @@ bool dCamera_c::Run() { mCurCamStyleTimer++; } - field_0xa8++; - field_0xac++; + mFrameCounter++; + mTicks++; if (!bVar9) { - field_0x680 = 0; + mEngineHoldState = 0; } defaultTriming(); if (!chkFlag(0x400)) { - field_0x5c.mBank -= field_0x5c.mBank * 0.05f; + mViewCache.mBank -= mViewCache.mBank * 0.05f; } shakeCamera(); blureCamera(); @@ -1653,30 +1146,30 @@ bool dCamera_c::Run() { clrFlag(0x80080); if (mCamParam.CheckFlag(1)) { if (mCurMode == 1 && mCamParam.CheckFlag(2)) { - field_0x88 = 0x4007; + mBumpCheckFlags = 0x4007; } else if (chkFlag(0x20000)) { - field_0x88 = 0x4037; + mBumpCheckFlags = 0x4037; } else { - field_0x88 = 0x4017; + mBumpCheckFlags = 0x4017; } } else if (mCamParam.CheckFlag(2)) { - field_0x88 = 0x4007; + mBumpCheckFlags = 0x4007; } if (mCamParam.CheckFlag(8)) { - field_0x88 |= 0x80; + mBumpCheckFlags |= 0x80; } if (mCamParam.CheckFlag(0x10)) { - field_0x88 &= ~0x4000; + mBumpCheckFlags &= ~0x4000; } - field_0x88 &= ~8; + mBumpCheckFlags &= ~8; if (mCamParam.CheckFlag(4)) { - field_0x88 = 0; + mBumpCheckFlags = 0; } } - mFovy = field_0x5c.mFovy; - mBank = field_0x5c.mBank; - bumpCheck(field_0x88); + mFovy = mViewCache.mFovy; + mBank = mViewCache.mBank; + bumpCheck(mBumpCheckFlags); cSAngle angle = mPadInfo.mMainStick.mAngle - mFakeAngleSys.field_0x4; if (mPadInfo.mMainStick.mLastValue < mCamSetup.USOValue() @@ -1685,9 +1178,9 @@ bool dCamera_c::Run() { mFakeAngleSys.field_0x0 = 0; } if (mFakeAngleSys.field_0x0 != 0) { - field_0x8c = getUSOAngle(mPadInfo.mMainStick.mAngle); + mControlledYaw = getUSOAngle(mPadInfo.mMainStick.mAngle); } else { - field_0x8c = mDirection.U().Inv(); + mControlledYaw = mDirection.U().Inv(); } if (mCamSetup.CheckFlag(0x8000)) { @@ -1695,7 +1188,7 @@ bool dCamera_c::Run() { } if (chkFlag(0x10)) { - mUp = field_0x740.field_0x18.norm(); + mUp = mUpOverride.field_0x18.norm(); } else if (dComIfGp_getStageWorldRollAngleX() != 0) { cSPolar polar; polar.R(1.0f); @@ -1709,13 +1202,13 @@ bool dCamera_c::Run() { } if (!chkFlag(0x10)) { - field_0x740.field_0x18.set(0.0f, 1.0f, 0.0f); + mUpOverride.field_0x18.set(0.0f, 1.0f, 0.0f); } - if (field_0x94c != cSAngle::_0) { - mBank = field_0x94c; + if (mBankOverride != cSAngle::_0) { + mBank = mBankOverride; } - field_0x94c = cSAngle::_0; + mBankOverride = cSAngle::_0; f32 water_height = getWaterSurfaceHeight(&mEye); if (water_height > mEye.y) { @@ -1726,7 +1219,7 @@ bool dCamera_c::Run() { Z2GetAudioMgr()->setCameraInWaterDepth(0.0f); } - if (field_0x158.field_0x0) { + if (mStyleSettle.mFinished) { setComStat(0x10); } else { clrComStat(0x10); @@ -1743,7 +1236,7 @@ bool dCamera_c::Run() { runEventRecoveryTrans(); clrFlag(0x1000); - field_0x860.Clr(); + mTagCamTool.Clr(); field_0x89c.Clr(); return bVar9; } @@ -1752,7 +1245,7 @@ bool dCamera_c::Run() { bool dCamera_c::NotRun() { daAlink_c* link = daAlink_getAlinkActorClass(); daMidna_c* midna = daPy_py_c::getMidnaActor(); - field_0x194 = link->checkMidnaRide() && !midna->checkNoDraw(); + mMidnaRidingAndVisible = link->checkMidnaRide() && !midna->checkNoDraw(); clrComStat(0x804); clrFlag(0x10168C21); checkGroundInfo(); @@ -1760,7 +1253,7 @@ bool dCamera_c::NotRun() { if (dComIfGp_evmng_cameraPlay() || chkFlag(0x20000000)) { if (mCurType != specialType[CAM_TYPE_EVENT]) { - pushInfo(&field_0xb0, 1); + pushInfo(&mSavedView, 1); mEventData.field_0xc = mCurType; mCurType = specialType[CAM_TYPE_EVENT]; mCamStyle = mCamParam.SearchStyle('EN01'); @@ -1780,10 +1273,10 @@ bool dCamera_c::NotRun() { shakeCamera(); blureCamera(); field_0x21 = 0; - if (field_0x94c != cSAngle::_0) { - mBank = field_0x94c; + if (mBankOverride != cSAngle::_0) { + mBank = mBankOverride; } - field_0x94c = cSAngle::_0; + mBankOverride = cSAngle::_0; f32 water_height = getWaterSurfaceHeight(&mEye); if (water_height > mEye.y) { @@ -1794,9 +1287,9 @@ bool dCamera_c::NotRun() { Z2GetAudioMgr()->setCameraInWaterDepth(0.0f); } - field_0xa8++; - field_0xac++; - field_0x860.Clr(); + mFrameCounter++; + mTicks++; + mTagCamTool.Clr(); field_0x89c.Clr(); return true; } @@ -1804,7 +1297,7 @@ bool dCamera_c::NotRun() { /* 80162FB8-80162FD4 15D8F8 001C+00 1/1 0/0 0/0 .text V__9dCamera_cFv */ s16 dCamera_c::V() { if (chkFlag(0x10)) { - return field_0x740.field_0x24.V(); + return mUpOverride.field_0x24.V(); } else { return mDirection.V(); } @@ -1813,7 +1306,7 @@ s16 dCamera_c::V() { /* 80162FD4-8016300C 15D914 0038+00 1/1 0/0 0/0 .text U__9dCamera_cFv */ s16 dCamera_c::U() { if (chkFlag(0x10)) { - return field_0x740.field_0x24.U(); + return mUpOverride.field_0x24.U(); } else { return mDirection.U().Inv(); } @@ -1834,7 +1327,7 @@ bool dCamera_c::SetTrimTypeForce(s32 param_0) { /* 80163034-80163154 15D974 0120+00 1/1 0/0 0/0 .text CalcTrimSize__9dCamera_cFv */ void dCamera_c::CalcTrimSize() { - if (field_0x24 != 2) { + if (mCurState != 2) { switch (mTrimSize) { case 0: mTrimHeight += -mTrimHeight * 0.25f; @@ -1853,18 +1346,18 @@ void dCamera_c::CalcTrimSize() { break; } } else { - OS_REPORT("%06d: camera: trim: keep\n", field_0xa8); + OS_REPORT("%06d: camera: trim: keep\n", mFrameCounter); } - if (field_0x24 == 1) { - field_0x24 = 0; - } else if (field_0x24 == 2) { + if (mCurState == 1) { + mCurState = 0; + } else if (mCurState == 2) { if (dComIfGp_getEvent().isOrderOK()) { - field_0x24 = 0; + mCurState = 0; } } - field_0x1ac = 11; + mForcedMode = 11; } /* 80163154-8016317C 15DA94 0028+00 1/1 0/0 0/0 .text Draw__9dCamera_cFv */ @@ -1878,38 +1371,37 @@ int dCamera_c::Draw() { /* 8016317C-80163340 15DABC 01C4+00 1/1 0/0 0/0 .text setStageMapToolData__9dCamera_cFv */ -// NONMATCHING regswap, equivalent void dCamera_c::setStageMapToolData() { - int var_r28 = 0xFF; + int cameraIndex = 0xFF; int var_r27 = 0xFF; - field_0x7e8.Clr(); + mStageCamTool.Clr(); - dStage_dt_c* stage_dt = dComIfGp_getStage(); + dStage_dt_c* stage_dt = (dStage_dt_c*)dComIfGp_getStage(); if (stage_dt != NULL) { stage_camera_class* camera = stage_dt->getCamera(); stage_arrow_class* arrow = stage_dt->getArrow(); - + stage_stag_info_class* staginfo = stage_dt->getStagInfo(); if (staginfo != NULL) { - var_r28 = dStage_stagInfo_DefaultCameraType(staginfo); + cameraIndex = dStage_stagInfo_DefaultCameraType(staginfo); } - if (camera != NULL && var_r28 >= 0 && var_r28 < camera->num) { - field_0x7e8.field_0x30 = var_r28; - field_0x7e8.field_0x0 = camera->m_entries[var_r28]; - field_0x7e8.field_0x3a = (field_0x7e8.field_0x0.field_0x14 >> 0xE) & 3; + if (camera != NULL && cameraIndex >= 0 && cameraIndex < camera->num) { + mStageCamTool.mCameraIndex = cameraIndex; + mStageCamTool.mCamData = camera->m_entries[cameraIndex]; + mStageCamTool.mFlags = (mStageCamTool.mCamData.field_0x14 >> 0xE) & 3; - if (field_0x7e8.field_0x0.field_0x14 & 0x2000) { - field_0x7e8.field_0x0.field_0x14 |= (u16) 0xC000; + if (mStageCamTool.mCamData.field_0x14 & 0x2000) { + mStageCamTool.mCamData.field_0x14 |= (u16) 0xC000; } else { - field_0x7e8.field_0x0.field_0x14 &= (u16) ~0xC000; + mStageCamTool.mCamData.field_0x14 &= (u16) ~0xC000; } - var_r27 = field_0x7e8.field_0x0.m_arrow_idx; + var_r27 = mStageCamTool.mCamData.m_arrow_idx; if (arrow != NULL && var_r27 >= 0 && var_r27 < arrow->num) { - field_0x7e8.field_0x2c = var_r27; - field_0x7e8.field_0x18 = arrow->m_entries[var_r27]; + mStageCamTool.mArrowIndex = var_r27; + mStageCamTool.mArrowData = arrow->m_entries[var_r27]; } } } @@ -1924,27 +1416,27 @@ void dCamera_c::setMapToolData() { int var_r29 = 0xFF; int var_r26 = 0xFF; - if (mBG.field_0xc0.field_0x40 == 0x1FF && field_0x7ac.field_0x34 == NULL) { + if (mBG.field_0xc0.field_0x40 == 0x1FF && mRoomMapTool.mpActor == NULL) { return; } if (mBG.field_0xc0.field_0x40 != 0xFF) { - field_0x7ac.Clr(); + mRoomMapTool.Clr(); var_r29 = mBG.field_0xc0.field_0x40; - } else if (field_0x8d8.field_0x30 != 0xFF) { - field_0x7ac.Clr(); - var_r29 = field_0x8d8.field_0x30; - } else if (field_0x824.field_0x30 != 0xFF) { - field_0x7ac = field_0x824; + } else if (field_0x8d8.mCameraIndex != 0xFF) { + mRoomMapTool.Clr(); + var_r29 = field_0x8d8.mCameraIndex; + } else if (mDefRoomCamTool.mCameraIndex != 0xFF) { + mRoomMapTool = mDefRoomCamTool; return; - } else if (field_0x7e8.field_0x30 != 0xFF) { - field_0x7ac = field_0x7e8; + } else if (mStageCamTool.mCameraIndex != 0xFF) { + mRoomMapTool = mStageCamTool; return; } else { - field_0x7ac.Clr(); + mRoomMapTool.Clr(); } - setRoomMapToolData(&field_0x7ac, var_r29, room_no); + setRoomMapToolData(&mRoomMapTool, var_r29, room_no); } /* 80163558-801635AC 15DE98 0054+00 0/0 0/0 1/1 .text SetTagData__9dCamera_cFP10fopAc_ac_clUsUc */ @@ -1956,7 +1448,7 @@ void dCamera_c::SetTagData(fopAc_ac_c* param_0, s32 param_1, u16 param_2, u8 par room_no = dComIfGp_roomControl_getStayNo(); } - field_0x860.Set(param_1, room_no, param_0, param_2, param_3); + mTagCamTool.Set(param_1, room_no, param_0, param_2, param_3); } /* 801635AC-801635E4 15DEEC 0038+00 2/2 0/0 0/0 .text @@ -1976,10 +1468,10 @@ s32 dCamera_c::nextMode(s32 i_curMode) { field_0x223 = 0; } if (!link->checkFastShotTime()) { - field_0x610 = 0; + mFastShotState = 0; } - if (field_0x1ac != 11 && mCamTypeData[mCurType].field_0x18[mIsWolf][field_0x1ac] >= 0) { - next_mode = field_0x1ac; + if (mForcedMode != 11 && mCamTypeData[mCurType].field_0x18[mIsWolf][mForcedMode] >= 0) { + next_mode = mForcedMode; } else if (check_owner_action(mPadID, 0x200000) && !attn->Lockon()) { if (check_owner_action(mPadID, 0x25040)) { next_mode = 7; @@ -2004,7 +1496,7 @@ s32 dCamera_c::nextMode(s32 i_curMode) { dComIfGp_getAttention()->LockSoundOff(); next_mode = 1; } else if (link->checkFastShotTime()) { - field_0x610 = 1; + mFastShotState = 1; } else if (check_owner_action1(mPadID, 0x10)) { next_mode = 9; } else if ((check_owner_action1(mPadID, 0x400000) @@ -2030,18 +1522,18 @@ s32 dCamera_c::nextMode(s32 i_curMode) { next_mode = 1; } else if ((check_owner_action(mPadID, 0x400000) || link->checkIronBallThrowMode() || link->checkBoomerangAtnKeep()) - && !check_owner_action(mPadID, 0x36A02311) && field_0x610 == 0 + && !check_owner_action(mPadID, 0x36A02311) && mFastShotState == 0 && !check_owner_action1(mPadID, 0x11)) { mpLockonTarget = get_boomerang_actor(mpPlayerActor); next_mode = 2; mLockOnActorID = -1; - field_0x610 = 1; + mFastShotState = 1; } else if ((link->checkCopyRodThrowAfter() || link->checkCopyRodAtnKeep()) && link->getCopyRodCameraActor() == NULL) { mpLockonTarget = link->getCopyRodActor(); next_mode = 2; mLockOnActorID = -1; - field_0x610 = 1; + mFastShotState = 1; } else if (link->checkSpinnerRideWait()) { next_mode = 1; } else if (mLockOnActorID != -1) { @@ -2084,7 +1576,7 @@ bool dCamera_c::onModeChange(s32 i_curMode, s32 i_nextMode) { field_0x160 = 0; field_0x164 = 0; field_0x168 = 1; - field_0x1b4 = 0.0f; + mSightFitRadius = 0.0f; clrFlag(0x2306); switch (i_curMode) { @@ -2102,7 +1594,7 @@ bool dCamera_c::onModeChange(s32 i_curMode, s32 i_nextMode) { switch (i_nextMode) { case 7: - field_0x940 = 0; + mGear = 0; break; case 1: setFlag(0x100000); @@ -2116,7 +1608,7 @@ bool dCamera_c::onModeChange(s32 i_curMode, s32 i_nextMode) { // fallthrough case 2: if (mCamSetup.CheckFlag(0x4000)) { - field_0x940 = 0; + mGear = 0; } break; case 10: @@ -2128,19 +1620,18 @@ bool dCamera_c::onModeChange(s32 i_curMode, s32 i_nextMode) { /* 80163D50-80163D5C 15E690 000C+00 0/0 0/0 4/4 .text ModeFix__9dCamera_cFl */ int dCamera_c::ModeFix(s32 param_0) { - field_0x1ac = param_0; + mForcedMode = param_0; return 1; } /* 80163D5C-8016444C 15E69C 06F0+00 1/1 0/0 0/0 .text nextType__9dCamera_cFl */ -// NONMATCHING missing clrlwi in daMidna_c::checkFlyWaitAnime s32 dCamera_c::nextType(s32 i_curType) { s32 next_type = i_curType; - if (field_0x680 != 1) { + if (mEngineHoldState != 1) { s32 iVar14 = 0xff; - if (field_0x860.field_0x30 != 0xff) { - s32 type = GetCameraTypeFromToolData(&field_0x860.field_0x0); + if (mTagCamTool.mCameraIndex != 0xff) { + s32 type = GetCameraTypeFromToolData(&mTagCamTool.mCamData); if (type != 0xff) { iVar14 = type; } @@ -2160,16 +1651,17 @@ s32 dCamera_c::nextType(s32 i_curType) { } bool copy_rod = false; - if (link->getCopyRodCameraActor() != NULL) { + fopAc_ac_c* copyRodCameraActor = link->getCopyRodCameraActor(); + if (copyRodCameraActor != NULL) { copy_rod = true; } if (check_owner_action(mPadID, 0x200000) && ChangeModeOK(4) && !dComIfGp_getAttention()->Lockon()) { next_type = specialType[CAM_TYPE_SCOPE]; - } else if (iVar14 != 0xff && !(field_0x860.field_0x3a & 0x10)) { + } else if (iVar14 != 0xff && !(mTagCamTool.mFlags & 0x10)) { next_type = iVar14; - field_0x7ac = field_0x860; + mRoomMapTool = mTagCamTool; } else if (link->checkMidnaLockJumpPoint() && (daPy_py_c::getMidnaActor()->checkFlyWaitAnime() || daPy_py_c::getMidnaActor()->checkNoInput())) { @@ -2212,9 +1704,9 @@ s32 dCamera_c::nextType(s32 i_curType) { if (getComStat(0x800)) { next_type = specialType[CAM_TYPE_WATER_SURF]; } else if (mBG.field_0xc0.field_0x3c != 0xff) { - setRoomMapToolData(&field_0x7ac, mBG.field_0xc0.field_0x3c, + setRoomMapToolData(&mRoomMapTool, mBG.field_0xc0.field_0x3c, dComIfGp_roomControl_getStayNo()); - s32 type = GetCameraTypeFromToolData(&field_0x7ac.field_0x0); + s32 type = GetCameraTypeFromToolData(&mRoomMapTool.mCamData); if (type != 0xff) { next_type = type; } else { @@ -2225,13 +1717,13 @@ s32 dCamera_c::nextType(s32 i_curType) { } } else if (iVar14 != 0xff) { next_type = iVar14; - field_0x7ac = field_0x860; - } else if (field_0x7ac.field_0x30 != 0xff) { - s32 type = GetCameraTypeFromToolData(&field_0x7ac.field_0x0); + mRoomMapTool = mTagCamTool; + } else if (mRoomMapTool.mCameraIndex != 0xff) { + s32 type = GetCameraTypeFromToolData(&mRoomMapTool.mCamData); if (type != 0xff) { next_type = type; } - } else if (field_0x7ac.field_0x30 != 0x1ff) { + } else if (mRoomMapTool.mCameraIndex != 0x1ff) { next_type = mMapToolType; } } @@ -2240,8 +1732,8 @@ s32 dCamera_c::nextType(s32 i_curType) { field_0x69c = 0; if (mCamTypeData[mCurType].field_0x18[mIsWolf][0] < 0) { next_type = mMapToolType; - if (field_0x7ac.field_0x30 != 0xff) { - s32 type = GetCameraTypeFromToolData(&field_0x7ac.field_0x0); + if (mRoomMapTool.mCameraIndex != 0xff) { + s32 type = GetCameraTypeFromToolData(&mRoomMapTool.mCamData); if (type != 0xff) { next_type = type; } @@ -2273,22 +1765,22 @@ s32 dCamera_c::nextType(s32 i_curType) { bool dCamera_c::onTypeChange(s32 i_curType, s32 i_nextType) { if (i_curType == specialType[CAM_TYPE_EVENT]) { if (mCamSetup.CheckFlag(0x4000)) { - field_0x940 = 0; + mGear = 0; } - if (field_0x110.field_0x4 != 0) { - cXyz vec = field_0x110.field_0x28 - positionOf(mpPlayerActor); - setEventRecoveryTrans(field_0x110.field_0x4); - popInfo(&field_0xb0); - field_0x5c.mCenter -= vec; - field_0x5c.mEye -= vec; + if (mRecovery.field_0x4 != 0) { + cXyz vec = mRecovery.field_0x28 - positionOf(mpPlayerActor); + setEventRecoveryTrans(mRecovery.field_0x4); + popInfo(&mSavedView); + mViewCache.mCenter -= vec; + mViewCache.mEye -= vec; } - field_0x110.field_0x4 = 0; + mRecovery.field_0x4 = 0; field_0x668 = 0; - clearInfo(&field_0xb0, 0); - clearInfo(&field_0xd0[0], 0); - clearInfo(&field_0xd0[1], 0); + clearInfo(&mSavedView, 0); + clearInfo(&mSavedViewStack[0], 0); + clearInfo(&mSavedViewStack[1], 0); if (chkFlag(0x400000)) { mCamStyle = mCamTypeData[mEventData.field_0xc].field_0x18[mIsWolf][0]; @@ -2305,20 +1797,20 @@ bool dCamera_c::onTypeChange(s32 i_curType, s32 i_nextType) { setFlag(0x20); if (chkFlag(0x40000000)) { - cM3dGLin line(field_0x5c.mCenter, field_0x5c.mEye); + cM3dGLin line(mViewCache.mCenter, mViewCache.mEye); cXyz attn_pos = attentionPos(mpPlayerActor); cXyz proj; f32 dist; if (cM3d_Len3dSqPntAndSegLine(&line, &attn_pos, &proj, &dist)) { - field_0x5c.mCenter = proj; - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + mViewCache.mCenter = proj; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); } clrFlag(0x40000000); } } else if (i_nextType == specialType[CAM_TYPE_EVENT]) { clrFlag(0x200000); - pushInfo(&field_0xb0, 1); - field_0x1b4 = 0.0f; + pushInfo(&mSavedView, 1); + mSightFitRadius = 0.0f; field_0x668 = 0; } @@ -2330,7 +1822,7 @@ bool dCamera_c::onTypeChange(s32 i_curType, s32 i_nextType) { /* 8016469C-801647B0 15EFDC 0114+00 2/1 0/0 0/0 .text onStyleChange__9dCamera_cFll */ bool dCamera_c::onStyleChange(s32 param_0, s32 param_1) { mCurCamStyleTimer = 0; - field_0x158.field_0x0 = 0; + mStyleSettle.mFinished = false; bool var_r30 = false; switch (mCamParam.Algorythmn(param_0)) { @@ -2375,7 +1867,7 @@ bool dCamera_c::onStyleChange(s32 param_0, s32 param_1) { /* 801647B0-80164878 15F0F0 00C8+00 1/1 0/0 0/0 .text onRoomChange__9dCamera_cFl */ int dCamera_c::onRoomChange(s32 i_roomNo) { - field_0x004.mRoomNo = i_roomNo; + mRoomCtx.mRoomNo = i_roomNo; setFlag(0x1000); int var_r29 = 0xFF; @@ -2388,9 +1880,9 @@ int dCamera_c::onRoomChange(s32 i_roomNo) { } if (var_r29 != 0xFF) { - setRoomMapToolData(&field_0x824, var_r29, i_roomNo); + setRoomMapToolData(&mDefRoomCamTool, var_r29, i_roomNo); } else { - field_0x824.Clr(); + mDefRoomCamTool.Clr(); } return 1; @@ -2430,7 +1922,7 @@ int dCamera_c::GetCameraTypeFromMapToolID(s32 param_0, s32 i_roomNo) { arrow = dComIfGp_getRoomArrow(i_roomNo); if (camera == NULL) { - if (!(field_0xa8 & 0xFFF)) { + if (!(mFrameCounter & 0xFFF)) { OS_REPORT("camera: no room camera list. camera ID ignored\n"); } return 0xFF; @@ -2466,22 +1958,22 @@ int dCamera_c::GetCameraTypeFromMapToolID(s32 param_0, s32 i_roomNo) { return 0xFF; } - field_0x7ac.field_0x0 = camera->m_entries[param_0]; - field_0x7ac.field_0x30 = param_0; - field_0x7ac.field_0x3a = (field_0x7ac.field_0x0.field_0x14 >> 0xE) & 3; + mRoomMapTool.mCamData = camera->m_entries[param_0]; + mRoomMapTool.mCameraIndex = param_0; + mRoomMapTool.mFlags = (mRoomMapTool.mCamData.field_0x14 >> 0xE) & 3; - if (field_0x7ac.field_0x0.field_0x14 & 0x2000) { - field_0x7ac.field_0x0.field_0x14 |= 0xC000; + if (mRoomMapTool.mCamData.field_0x14 & 0x2000) { + mRoomMapTool.mCamData.field_0x14 |= 0xC000; } else { - field_0x7ac.field_0x0.field_0x14 &= ~0xC000; + mRoomMapTool.mCamData.field_0x14 &= ~0xC000; } - field_0x7ac.field_0x2c = field_0x7ac.field_0x0.m_arrow_idx; + mRoomMapTool.mArrowIndex = mRoomMapTool.mCamData.m_arrow_idx; - if (field_0x7ac.field_0x2c != -1 && field_0x7ac.field_0x2c < arrow->num) { - field_0x7ac.field_0x18 = arrow->m_entries[field_0x7ac.field_0x2c]; + if (mRoomMapTool.mArrowIndex != -1 && mRoomMapTool.mArrowIndex < arrow->num) { + mRoomMapTool.mArrowData = arrow->m_entries[mRoomMapTool.mArrowIndex]; } else { - field_0x7ac.field_0x2c = 0xFF; + mRoomMapTool.mArrowIndex = 0xFF; } return i; @@ -2539,11 +2031,11 @@ void dCamera_c::pushInfo(dCamera_c::dCamInfo_c* i_info, s16 param_1) { /* 80164CAC-80164D2C 15F5EC 0080+00 2/2 0/0 0/0 .text * popInfo__9dCamera_cFPQ29dCamera_c10dCamInfo_c */ void dCamera_c::popInfo(dCamera_c::dCamInfo_c* i_info) { - mCenter = field_0x5c.mCenter = i_info->mCenter; - mEye = field_0x5c.mEye = i_info->mEye; - mFovy = field_0x5c.mFovy = i_info->mFovy; - field_0x5c.mBank = i_info->mBank; - mBank = field_0x5c.mBank; + mCenter = mViewCache.mCenter = i_info->mCenter; + mEye = mViewCache.mEye = i_info->mEye; + mFovy = mViewCache.mFovy = i_info->mFovy; + mViewCache.mBank = i_info->mBank; + mBank = mViewCache.mBank; } /* 80164D2C-80164D6C 15F66C 0040+00 4/4 0/0 0/0 .text heightOf__9dCamera_cFP10fopAc_ac_c @@ -2588,7 +2080,7 @@ cXyz dCamera_c::relationalPos(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, cXyz* pos2 += delta * i_actor2->attention_info.field_0xa; cXyz mid = pos1 + (pos2 - pos1) * 0.5f; cXyz offset = *i_offset; - cSAngle angle = field_0x5c.mDirection.U() - delta_globe.U(); + cSAngle angle = mViewCache.mDirection.U() - delta_globe.U(); if (angle < cSAngle::_0) { offset.x = -offset.x; } @@ -2631,9 +2123,9 @@ f32 dCamera_c::radiusActorInSight(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, cX f32 dVar3 = cAngle::d2r(i_fovY) * 0.5f; f32 tmp = (scissor->height - mTrimHeight * 2.0f) / 448.0f * dVar3; f32 fVar8 = tmp * (mTrimHeight < 0.01f ? 0.95f : 1.0f); - dVar3 *= field_0x92c; + dVar3 *= mWindowAspect; f32 fVar7 = dVar3 * (scissor->width / 608.0f) * 0.85f; - + cXyz pos1 = attentionPos(i_actor1); pos1.y += (positionOf(i_actor1).y - attentionPos(i_actor1).y) * 0.5f; cXyz pos2 = attentionPos(i_actor2); @@ -2816,7 +2308,6 @@ bool dCamera_c::lineBGCheck(cXyz* i_start, cXyz* i_end, u32 i_flags) { /* 80165B60-80165C08 1604A0 00A8+00 1/1 0/0 0/0 .text * lineCollisionCheckBush__9dCamera_cFP4cXyzP4cXyz */ -// NONMATCHING loads g_dComIfG_gameInfo.play.mCcS.mMass_Mng twice u32 dCamera_c::lineCollisionCheckBush(cXyz* i_start, cXyz* i_end) { u32 ret = 0; u32 result = dComIfG_Ccsp()->GetMassResultCam(); @@ -2993,21 +2484,21 @@ bool dCamera_c::bumpCheck(u32 i_flags) { f32 corner_angle_max_cos = cDegree(mCamSetup.mBGChk.CornerAngleMax()).Cos(); f32 wall_up_distance = mCamSetup.mBGChk.WallUpDistance(); - cXyz center = field_0x5c.mCenter; - cXyz eye = field_0x5c.mEye; - cSGlobe direction = field_0x5c.mDirection; + cXyz center = mViewCache.mCenter; + cXyz eye = mViewCache.mEye; + cSGlobe direction = mViewCache.mDirection; if (mCamSetup.CheckFlag2(0x100) && dKy_TeachWind_existence_chk()) { f32 wind_pow = dKyw_get_wind_pow(); if (wind_pow > 0.3f) { cSGlobe wind_globe(*dKyw_get_wind_vec()); - wind_globe.R(field_0x5c.mDirection.R() * cM_rndFX(mCamSetup.WindShakeGap4Ctr() * 0.0001f)); + wind_globe.R(mViewCache.mDirection.R() * cM_rndFX(mCamSetup.WindShakeGap4Ctr() * 0.0001f)); center += wind_globe.Xyz(); if (wind_pow > 1.0f) { wind_pow = 1.0f; } wind_pow -= 0.3f; - cSAngle angle = wind_globe.U() - field_0x5c.mDirection.U(); + cSAngle angle = wind_globe.U() - mViewCache.mDirection.U(); mFovy += mCamSetup.WindShakeGap4Fvy() * cM_rndFX(wind_pow / 0.7f) * (1.0f - fabsf(angle.Norm())); } } @@ -3027,7 +2518,7 @@ bool dCamera_c::bumpCheck(u32 i_flags) { } } - f32 fVar1 = field_0x5c.mDirection.R() * field_0x5c.mDirection.V().Sin(); + f32 fVar1 = mViewCache.mDirection.R() * mViewCache.mDirection.V().Sin(); if (i_flags & 0x10) { if (fVar1 > wall_up_distance) { wall_up_distance = fVar1; @@ -3037,8 +2528,8 @@ bool dCamera_c::bumpCheck(u32 i_flags) { } if (chkFlag(0x2002)) { - if (field_0x188 != NULL && field_0x18c != NULL) { - f32 sight_radius = radiusActorInSight(mpPlayerActor, field_0x188, field_0x18c); + if (mpAuxTargetActor1 != NULL && mpAuxTargetActor2 != NULL) { + f32 sight_radius = radiusActorInSight(mpPlayerActor, mpAuxTargetActor1, mpAuxTargetActor2); if (sight_radius > 0.0f) { f32 fVar17, fVar18; if (chkFlag(2)) { @@ -3046,18 +2537,18 @@ bool dCamera_c::bumpCheck(u32 i_flags) { } else { fVar17 = 0.08f; } - field_0x1b4 += fVar17 * (sight_radius - field_0x1b4); + mSightFitRadius += fVar17 * (sight_radius - mSightFitRadius); uVar13 |= 0x40; fVar18 = 1.0f; if (field_0x160 < 10) { fVar18 = (f32)field_0x160 / 10.0f; } - direction.R(field_0x1b4 * fVar18 + direction.R()); + direction.R(mSightFitRadius * fVar18 + direction.R()); eye = center + direction.Xyz(); } - } else if (field_0x188 != NULL) { - f32 sight_radius = radiusActorInSight(mpPlayerActor, field_0x188, &field_0x5c.mCenter, - &field_0x5c.mEye, mFovy, mBank, 0.05f); + } else if (mpAuxTargetActor1 != NULL) { + f32 sight_radius = radiusActorInSight(mpPlayerActor, mpAuxTargetActor1, &mViewCache.mCenter, + &mViewCache.mEye, mFovy, mBank, 0.05f); if (sight_radius > 0.0f) { f32 fVar17, fVar18; if (chkFlag(2)) { @@ -3065,21 +2556,21 @@ bool dCamera_c::bumpCheck(u32 i_flags) { } else { fVar17 = 0.08f; } - field_0x1b4 += fVar17 * (sight_radius - field_0x1b4); + mSightFitRadius += fVar17 * (sight_radius - mSightFitRadius); uVar13 |= 0x40; fVar18 = 1.0f; if (field_0x160 < 10) { fVar18 = (f32)field_0x160 / 10.0f; } - direction.R(field_0x1b4 * fVar18 + direction.R()); + direction.R(mSightFitRadius * fVar18 + direction.R()); eye = center + direction.Xyz(); } } } - if (field_0x1b4 > 0.1f && !(uVar13 & 0x40)) { - field_0x1b4 -= field_0x1b4 * 0.08f; - direction.R(field_0x1b4 + direction.R()); + if (mSightFitRadius > 0.1f && !(uVar13 & 0x40)) { + mSightFitRadius -= mSightFitRadius * 0.08f; + direction.R(mSightFitRadius + direction.R()); eye = center + direction.Xyz(); } @@ -3123,12 +2614,12 @@ bool dCamera_c::bumpCheck(u32 i_flags) { if (chkCornerCos(dot) && fabsf(cross.y) > 0.5f && cBgW_CheckBWall(normal2->y)) { uVar14 = 5; - } else if (field_0x958 != 5 && field_0x958 != 6) { + } else if (mLastBumpCase != 5 && mLastBumpCase != 6) { uVar14 = 7; } else { uVar14 = 8; } - } else if (field_0x958 == 5 || field_0x958 == 8) { + } else if (mLastBumpCase == 5 || mLastBumpCase == 8) { uVar14 = 8; } else { uVar14 = 2; @@ -3144,9 +2635,9 @@ bool dCamera_c::bumpCheck(u32 i_flags) { cXyz cross2 = lin_chk2.GetCross(); mid = (cross1 + cross2) * 0.5f; if (cM3d_2PlaneLinePosNearPos(plane1, plane2, &mid, &pos)) { - field_0x9c = *plane1.GetNP() + *plane2.GetNP(); - field_0x90 = pos; - cXyz vec3 = pos + field_0x9c * 2.0f; + mCornerNormalSum = *plane1.GetNP() + *plane2.GetNP(); + mLastHitPos = pos; + cXyz vec3 = pos + mCornerNormalSum * 2.0f; cross1 += *plane1.GetNP(); cross2 += *plane2.GetNP(); dBgS_CamLinChk lin_chk3; @@ -3155,20 +2646,20 @@ bool dCamera_c::bumpCheck(u32 i_flags) { { vec = eye; if (chkFlag(0x4000)) { - if (field_0x938 == 0) { - f32 dist = cXyz(mEye - field_0x5c.mEye).abs(); + if (mWallRecoverStepCount == 0) { + f32 dist = cXyz(mEye - mViewCache.mEye).abs(); if (dist > 60.0f) { - field_0x938 = 40; + mWallRecoverStepCount = 40; } else if (dist < 6.0f) { - field_0x938 = 4; + mWallRecoverStepCount = 4; } else { - field_0x938 = dist / 1.5f; + mWallRecoverStepCount = dist / 1.5f; } } - f32 tmp = 1.0f / field_0x938; + f32 tmp = 1.0f / mWallRecoverStepCount; direction.V(mDirection.V() + (direction.V() - mDirection.V()) * tmp); vec = center + direction.Xyz(); - if (--field_0x938 == 0) { + if (--mWallRecoverStepCount == 0) { clrFlag(0x4000); } } @@ -3188,9 +2679,9 @@ bool dCamera_c::bumpCheck(u32 i_flags) { case 7: case 8: { uVar13 |= 1; - vec = field_0x90 = lin_chk1.GetCross(); + vec = mLastHitPos = lin_chk1.GetCross(); if (i_flags & 0x10) { - switch (field_0x958) { + switch (mLastBumpCase) { case 2: case 7: case 8: @@ -3252,7 +2743,7 @@ bool dCamera_c::bumpCheck(u32 i_flags) { case 4: { uVar13 |= 4; setFlag(0x80); - vec = field_0x90 = lin_chk1.GetCross(); + vec = mLastHitPos = lin_chk1.GetCross(); eye = compWallMargin(&vec, ¢er, gaze_back_margin); tooNearEscape(&eye); bVar8 = true; @@ -3263,18 +2754,18 @@ bool dCamera_c::bumpCheck(u32 i_flags) { } else { uVar14 = 0; if (chkFlag(0x4000)) { - if (field_0x938 == 0) { - f32 dist = cXyz(mEye - field_0x5c.mEye).abs(); + if (mWallRecoverStepCount == 0) { + f32 dist = cXyz(mEye - mViewCache.mEye).abs(); if (dist > 60.0f) { - field_0x938 = 40; + mWallRecoverStepCount = 40; } else if (dist < 6.0f) { - field_0x938 = 4; + mWallRecoverStepCount = 4; } else { - field_0x938 = (int)(dist / 1.5f); + mWallRecoverStepCount = (int)(dist / 1.5f); } } - f32 rate = 1.0f / (f32)field_0x938; + f32 rate = 1.0f / (f32)mWallRecoverStepCount; direction.R(mDirection.R() + rate * (direction.R() - mDirection.R())); direction.V(mDirection.V() + (direction.V() - mDirection.V()) * rate); vec = center + direction.Xyz(); @@ -3282,7 +2773,7 @@ bool dCamera_c::bumpCheck(u32 i_flags) { vec = lin_chk1.GetCross(); } - if (--field_0x938 == 0) { + if (--mWallRecoverStepCount == 0) { clrFlag(0x4000); } } else { @@ -3294,7 +2785,7 @@ bool dCamera_c::bumpCheck(u32 i_flags) { } } - field_0x958 = uVar14; + mLastBumpCase = uVar14; if ((i_flags & 0x4000) && mCamSetup.CheckFlag2(0x400)) { cCcD_ShapeAttr::Shape shape; for (int i = 0; i < 3; i++) { @@ -3402,8 +2893,8 @@ bool dCamera_c::lineBGCheckBoth(cXyz* i_start, cXyz* i_end, dBgS_LinChk* i_linch * radiusActorInSight__9dCamera_cFP10fopAc_ac_cP10fopAc_ac_cP10fopAc_ac_c */ f32 dCamera_c::radiusActorInSight(fopAc_ac_c* param_0, fopAc_ac_c* param_1, fopAc_ac_c* param_2) { - f32 var_f31 = radiusActorInSight(param_0, param_1, &field_0x5c.mCenter, &field_0x5c.mEye, mFovy, mBank, 0.05f); - f32 var_f30 = radiusActorInSight(param_0, param_2, &field_0x5c.mCenter, &field_0x5c.mEye, mFovy, mBank, 0.05f); + f32 var_f31 = radiusActorInSight(param_0, param_1, &mViewCache.mCenter, &mViewCache.mEye, mFovy, mBank, 0.05f); + f32 var_f30 = radiusActorInSight(param_0, param_2, &mViewCache.mCenter, &mViewCache.mEye, mFovy, mBank, 0.05f); f32 var_f29; if (var_f31 > var_f30) { @@ -3419,7 +2910,7 @@ f32 dCamera_c::radiusActorInSight(fopAc_ac_c* param_0, fopAc_ac_c* param_1, BOOL dCamera_c::jutOutCheck(cXyz* param_0, f32 param_1) { cXyz spB4 = attentionPos(mpPlayerActor); spB4 += (positionOf(mpPlayerActor) - spB4) * 0.5f; - + dBgS_CamLinChk linchk; if (lineBGCheck(&spB4, param_0, &linchk, 0x40B7)) { cM3dGPla plane; @@ -3547,10 +3038,10 @@ void dCamera_c::checkGroundInfo() { } if (mBG.field_0xc0.field_0x1 != 0) { dComIfG_Bgsp().MoveBgMatrixCrrPos(mBG.field_0x5c.field_0x4, true, - &field_0x5c.mCenter, NULL, NULL); + &mViewCache.mCenter, NULL, NULL); dComIfG_Bgsp().MoveBgMatrixCrrPos(mBG.field_0x5c.field_0x4, true, - &field_0x5c.mEye, NULL, NULL); - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + &mViewCache.mEye, NULL, NULL); + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); } mBG.field_0xc0.field_0x10 = pos; mBG.field_0xc0.field_0x1e = angle; @@ -3571,7 +3062,7 @@ void dCamera_c::checkGroundInfo() { mBG.field_0xc0.field_0x3c = 0xff; } - if (mBG.field_0xc0.field_0x44 == 0 && field_0xa8 != 0 && !check_owner_action(mPadID, 0x100000)) { + if (mBG.field_0xc0.field_0x44 == 0 && mFrameCounter != 0 && !check_owner_action(mPadID, 0x100000)) { mBG.field_0xc0.field_0x40 = 0x1ff; } else if (mBG.field_0x5c.field_0x0) { mBG.field_0xc0.field_0x40 = dComIfG_Bgsp().GetRoomCamId(mBG.field_0x5c.field_0x4); @@ -3591,7 +3082,7 @@ bool dCamera_c::chaseCamera(s32 param_0) { daMidna_c* midna = daPy_py_c::getMidnaActor(); if (dComIfGp_getAttention()->GetCheckObjectCount() != 0) { - field_0x188 = dComIfGp_getAttention()->CheckObjectTarget(0); + mpAuxTargetActor1 = dComIfGp_getAttention()->CheckObjectTarget(0); setFlag(2); } @@ -3624,6 +3115,8 @@ bool dCamera_c::chaseCamera(s32 param_0) { cSAngle ang2 = 75.0f; f32 dVar52 = 0.25f; + ChaseData* chase = (ChaseData*)mWork; + if (mCamParam.CheckFlag(1)) { setFlag(0x20000); } @@ -3636,34 +3129,34 @@ bool dCamera_c::chaseCamera(s32 param_0) { if (mCurCamStyleTimer == 0) { cXyz player_attention = attentionPos(mpPlayerActor) - positionOf(mpPlayerActor); - if (chkFlag(0x200) && field_0x110.field_0x8.field_0x1e <= 0) { - field_0x5c.mCenter = mCenter; - field_0x5c.mEye = mEye; - field_0x5c.mDirection = mDirection; - field_0x5c.mFovy = mFovy; + if (chkFlag(0x200) && mRecovery.field_0x8.field_0x1e <= 0) { + mViewCache.mCenter = mCenter; + mViewCache.mEye = mEye; + mViewCache.mDirection = mDirection; + mViewCache.mFovy = mFovy; } - mWork.chase.field_0x40 = 0.0f; - mWork.chase.field_0x71 = false; - mWork.chase.field_0x96 = directionOf(mpPlayerActor).Inv(); - mWork.chase.field_0x93 = false; - mWork.chase.field_0x73 = false; - mWork.chase.field_0x9c = 0xfe; - mWork.chase.field_0x18 = 0; - mWork.chase.field_0xa0 = field_0x940; - mWork.chase.field_0x94 = false; - mWork.chase.field_0xa4 = 0.0f; - mWork.chase.field_0x24 = 0.0f; - mWork.chase.field_0x98 = directionOf(mpPlayerActor); + chase->field_0x40 = 0.0f; + chase->field_0x71 = false; + chase->field_0x96 = directionOf(mpPlayerActor).Inv(); + chase->field_0x93 = false; + chase->field_0x73 = false; + chase->field_0x9c = 0xfe; + chase->field_0x18 = 0; + chase->field_0xa0 = mGear; + chase->field_0x94 = false; + chase->field_0xa4 = 0.0f; + chase->field_0x24 = 0.0f; + chase->field_0x98 = directionOf(mpPlayerActor); if (chkFlag(0x100000)) { setUSOAngle(); } if (mCamParam.Flag(param_0, 0x200)) { - switch (field_0x7ac.field_0x3a & 3) { + switch (mRoomMapTool.mFlags & 3) { case 1: - field_0x940 = 0; + mGear = 0; break; case 2: - field_0x940 = 1; + mGear = 1; break; } } @@ -3689,19 +3182,19 @@ bool dCamera_c::chaseCamera(s32 param_0) { bVar2 = true; } } - cSAngle player_angle_delta = player_direction - field_0x5c.mDirection.U(); + cSAngle player_angle_delta = player_direction - mViewCache.mDirection.U(); field_0x944 = 1; - if (field_0x7ac.field_0x30 != 0xff && mCamParam.Flag(param_0, 0x200)) { - if (field_0x7ac.field_0x30 != mWork.chase.field_0x9c) { - mCamParam.Fovy(field_0x7ac.field_0x0.field_0x11); - mCamParam.Arg0(field_0x7ac.field_0x0.field_0x12); - mCamParam.Arg1(field_0x7ac.field_0x0.field_0x13); - mCamParam.Arg2(field_0x7ac.field_0x0.field_0x14); + if (mRoomMapTool.mCameraIndex != 0xff && mCamParam.Flag(param_0, 0x200)) { + if (mRoomMapTool.mCameraIndex != chase->field_0x9c) { + mCamParam.Fovy(mRoomMapTool.mCamData.field_0x11); + mCamParam.Arg0(mRoomMapTool.mCamData.field_0x12); + mCamParam.Arg1(mRoomMapTool.mCamData.field_0x13); + mCamParam.Arg2(mRoomMapTool.mCamData.field_0x14); if (param_0 == mCamTypeData[mCurType].field_0x18[mIsWolf][mCurMode]) { mCamParam.Change(param_0); } - mWork.chase.field_0x9c = field_0x7ac.field_0x30; + chase->field_0x9c = mRoomMapTool.mCameraIndex; } if (mCamParam.Fovy() != 0xff) { @@ -3717,7 +3210,7 @@ bool dCamera_c::chaseCamera(s32 param_0) { val4 = mCamParam.Arg2(); } - } else if (field_0x7ac.field_0x30 == 0xff && mWork.chase.field_0x9c != 0xff) { + } else if (mRoomMapTool.mCameraIndex == 0xff && chase->field_0x9c != 0xff) { mCamParam.Fovy(0xff); mCamParam.Arg0(0xff); mCamParam.Arg1(0xff); @@ -3725,10 +3218,10 @@ bool dCamera_c::chaseCamera(s32 param_0) { if (param_0 == mCamTypeData[mCurType].field_0x18[mIsWolf][mCurMode]) { mCamParam.Change(param_0); } - mWork.chase.field_0x9c = 0xff; + chase->field_0x9c = 0xff; } - if (field_0x940 == 1) { + if (mGear == 1) { val7 = val9; val8 = val9 - val9 * 0.2f; val2 = val3 = val4; @@ -3770,8 +3263,8 @@ bool dCamera_c::chaseCamera(s32 param_0) { f32 throw_cushion = mCamSetup.ThrowCushion(); val16 = throw_cushion; val5 = throw_cushion; - field_0x1b0 = cSAngle::_0; - mWork.chase.field_0x94 = true; + mForwardTiltOffset = cSAngle::_0; + chase->field_0x94 = true; } else if ((player->getGrabActorID() != fpcM_ERROR_PROCESS_ID_e || mThrowTimer != 0) && chkFlag(0x100000)) { val9 = mCamSetup.ThrowCtrAdjust(); @@ -3790,14 +3283,14 @@ bool dCamera_c::chaseCamera(s32 param_0) { val1 *= val9; } - if (mWork.chase.field_0x94) { + if (chase->field_0x94) { if (push_any_key()) { - mWork.chase.field_0x94 = false; + chase->field_0x94 = false; } if (mThrowTimer == 0) { bVar9 = true; } - } else if (mWork.chase.field_0x92 && mWork.chase.field_0x1a > 14) { + } else if (chase->field_0x92 && chase->field_0x1a > 14) { f32 min = 550.0f; if (val8 < min) { val8 = min; @@ -3813,22 +3306,22 @@ bool dCamera_c::chaseCamera(s32 param_0) { bVar1 = true; } - if (field_0x194 != 0) { + if (mMidnaRidingAndVisible != 0) { val2 += 20.0f; val3 += 20.0f; } if (check_owner_action1(mPadID, 0x1000000)) { - mWork.chase.field_0x73 = true; - mWork.chase.field_0x18 = 20; - } else if (mWork.chase.field_0x18 != 0) { - mWork.chase.field_0x73 = true; - mWork.chase.field_0x18--; + chase->field_0x73 = true; + chase->field_0x18 = 20; + } else if (chase->field_0x18 != 0) { + chase->field_0x73 = true; + chase->field_0x18--; } else { - mWork.chase.field_0x73 = false; + chase->field_0x73 = false; } - if ((check_owner_action1(mPadID, 0x800000) || mWork.chase.field_0x73) && !chkFlag(0x100000)) { + if ((check_owner_action1(mPadID, 0x800000) || chase->field_0x73) && !chkFlag(0x100000)) { val2 = val3 = val1 = -70.0f; bVar1 = true; f32 search_ball_scale = player->getSearchBallScale(); @@ -3840,7 +3333,7 @@ bool dCamera_c::chaseCamera(s32 param_0) { if (val7 < search_ball_scale) { val7 = search_ball_scale; } - if (check_owner_action1(mPadID, 0x800000) && !mWork.chase.field_0x73) { + if (check_owner_action1(mPadID, 0x800000) && !chase->field_0x73) { val10 = 1.0f; val12 = val13 = 40.0f; } else { @@ -3848,10 +3341,10 @@ bool dCamera_c::chaseCamera(s32 param_0) { val12 = 30.0f; val16 = val13 = 1.0f; } - val17 = val18 = 90.0f / field_0x92c; + val17 = val18 = 90.0f / mWindowAspect; } - if (mWork.chase.field_0x73) { + if (chase->field_0x73) { val22 = 0.0001f; val16 = 0.0001f; val10 = 0.0001f; @@ -3865,8 +3358,8 @@ bool dCamera_c::chaseCamera(s32 param_0) { dAttention_c* attention = dComIfGp_getAttention(); - if (field_0x940 == 1 && !mCamParam.Flag(param_0, 0x20)) { - field_0x1b0 = cSAngle::_0; + if (mGear == 1 && !mCamParam.Flag(param_0, 0x20)) { + mForwardTiltOffset = cSAngle::_0; } if (mCurMode == 1) { @@ -3919,10 +3412,10 @@ bool dCamera_c::chaseCamera(s32 param_0) { if (val3 > 30.0f) { val3 = 30.0f; } - field_0x1b0 = cSAngle::_0; + mForwardTiltOffset = cSAngle::_0; val16 = 0.15f; } else if (bVar33) { - field_0x1b0 = cSAngle::_0; + mForwardTiltOffset = cSAngle::_0; mBG.field_0xc0.field_0x44 = 0; } @@ -3936,34 +3429,34 @@ bool dCamera_c::chaseCamera(s32 param_0) { } cXyz player_attention_pos = attentionPos(mpPlayerActor); - lineBGCheck(&player_attention_pos, &field_0x5c.mEye, 0x40b7); + lineBGCheck(&player_attention_pos, &mViewCache.mEye, 0x40b7); if (mCurCamStyleTimer == 0) { - mWork.chase.field_0x38 = val0; + chase->field_0x38 = val0; } else if (chkFlag(0x100000) && !check_owner_action1(mPadID, 0x2000000) && check_owner_action(mPadID, 0xa50c0)) { if (mPadInfo.mMainStick.mLastPosX < -0.2f) { - mWork.chase.field_0x71 = true; + chase->field_0x71 = true; } if (mPadInfo.mMainStick.mLastPosX > 0.2f) { - mWork.chase.field_0x71 = false; + chase->field_0x71 = false; } f32 tmp; - if (mWork.chase.field_0x71) { + if (chase->field_0x71) { tmp = -45.0f; } else { tmp = 45.0f; } - mWork.chase.field_0x38 += (tmp - mWork.chase.field_0x38) * 0.04f; + chase->field_0x38 += (tmp - chase->field_0x38) * 0.04f; } else { - mWork.chase.field_0x38 += (val0 - mWork.chase.field_0x38) * 0.06f; + chase->field_0x38 += (val0 - chase->field_0x38) * 0.06f; } - if (field_0x940 == 1 || val7 <= val8) { - mWork.chase.field_0xa4 = 0.0f; + if (mGear == 1 || val7 <= val8) { + chase->field_0xa4 = 0.0f; } else if (!mCamParam.Flag(param_0, 0x400)) { - val14 = field_0x5c.mDirection.R(); + val14 = mViewCache.mDirection.R(); if (val14 < val8) { val9 = val8; } else if (val14 > val7) { @@ -3974,59 +3467,59 @@ bool dCamera_c::chaseCamera(s32 param_0) { f32 tmp = (val7 - val9) / (val7 - val8); if (mCurCamStyleTimer == 0) { - mWork.chase.field_0xa4 = tmp; + chase->field_0xa4 = tmp; } else { - mWork.chase.field_0xa4 += (tmp - mWork.chase.field_0xa4) * 0.75f; + chase->field_0xa4 += (tmp - chase->field_0xa4) * 0.75f; } } - f32 tmp = val2 + mWork.chase.field_0xa4 * (val3 - val2); + f32 tmp = val2 + chase->field_0xa4 * (val3 - val2); if (mCurCamStyleTimer == 0) { - mWork.chase.field_0x3c = tmp; + chase->field_0x3c = tmp; } else { - mWork.chase.field_0x3c += (tmp - mWork.chase.field_0x3c) * 0.08f; + chase->field_0x3c += (tmp - chase->field_0x3c) * 0.08f; } - cXyz vec(mWork.chase.field_0x38, mWork.chase.field_0x3c, val1); + cXyz vec(chase->field_0x38, chase->field_0x3c, val1); if (mCurCamStyleTimer == 0) { - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); - mWork.chase.field_0x0 = 'CHAS'; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); + chase->field_0x0 = 'CHAS'; if (mBG.field_0xc0.field_0x44 != 0 && !check_owner_action(mPadID, 0x200)) { - mWork.chase.field_0x20 = 0.0f; + chase->field_0x20 = 0.0f; } else { - mWork.chase.field_0x20 = 1.0f; + chase->field_0x20 = 1.0f; } - mWork.chase.field_0x10 = 30; - mWork.chase.field_0x28 = val8; - mWork.chase.field_0x2c = val7; - mWork.chase.field_0x18 = 0; - mWork.chase.field_0x1a = 0; - mWork.chase.field_0x14 = 0; - mWork.chase.field_0x54 = 0.01f; - mWork.chase.field_0x7c = 0.01f; - mWork.chase.field_0x78 = 0.01f; - mWork.chase.field_0x80 = 0.01f; - mWork.chase.field_0x74 = 0.01f; - mWork.chase.field_0x84 = val6; - mWork.chase.field_0x88 = val5; - mWork.chase.field_0x44 = 0; - mWork.chase.field_0x70 = true; - mWork.chase.field_0x34 = field_0x5c.mFovy; - mWork.chase.field_0x48 = 0.0f; - mWork.chase.field_0x72 = false; - mWork.chase.field_0x91 = false; - mWork.chase.field_0x92 = false; - mWork.chase.field_0x30 = positionOf(mpPlayerActor).y; - mWork.chase.field_0x95 = false; - mWork.chase.field_0x4c = 1.0f; - mWork.chase.field_0xa8 = 0; + chase->field_0x10 = 30; + chase->field_0x28 = val8; + chase->field_0x2c = val7; + chase->field_0x18 = 0; + chase->field_0x1a = 0; + chase->field_0x14 = 0; + chase->field_0x54 = 0.01f; + chase->field_0x7c = 0.01f; + chase->field_0x78 = 0.01f; + chase->field_0x80 = 0.01f; + chase->field_0x74 = 0.01f; + chase->field_0x84 = val6; + chase->field_0x88 = val5; + chase->field_0x44 = 0; + chase->field_0x70 = true; + chase->field_0x34 = mViewCache.mFovy; + chase->field_0x48 = 0.0f; + chase->field_0x72 = false; + chase->field_0x91 = false; + chase->field_0x92 = false; + chase->field_0x30 = positionOf(mpPlayerActor).y; + chase->field_0x95 = false; + chase->field_0x4c = 1.0f; + chase->field_0xa8 = 0; if (dComIfGp_evmng_cameraPlay()) { int timer; getEvIntData(&timer, "Timer", 20); - mWork.chase.field_0x4 = timer != 0 ? timer : 1; - mWork.chase.field_0x95 = true; + chase->field_0x4 = timer != 0 ? timer : 1; + chase->field_0x95 = true; } else { cXyz pos = relationalPos(mpPlayerActor, &vec); @@ -4036,31 +3529,31 @@ bool dCamera_c::chaseCamera(s32 param_0) { cM3dGLin lin(pos2, mEye); f32 dist; if (cM3d_Len3dSqPntAndSegLine(&lin, &pos, &pos2, &dist)) { - if (field_0x110.field_0x8.field_0x1e <= 0) { + if (mRecovery.field_0x8.field_0x1e <= 0) { mCenter = pos2; mDirection.Val(mEye - mCenter); } - field_0x5c.mCenter = pos2; - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + mViewCache.mCenter = pos2; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); } cSAngle ang; if ((chkFlag(0x100000) || bVar3 || bVar6) && std::fabsf(mPadInfo.mCStick.mLastPosX) < 0.05f) { ang.Val(directionOf(mpPlayerActor).Inv()); } else { - ang.Val(field_0x5c.mDirection.U()); + ang.Val(mViewCache.mDirection.U()); } cSGlobe globe2((val8 + val7) * 0.5f, cSAngle((val12 + val13) * 0.5f), ang); cXyz pos3 = pos + globe2.Xyz(); f32 dist1 = cXyz(mEye - pos3).abs() * 2.5f; - dist = val3 + (val2 - val3) * mWork.chase.field_0xa4; + dist = val3 + (val2 - val3) * chase->field_0xa4; pos3 = pos; pos.y += dist; f32 dist2 = cXyz(mCenter - pos3).abs() * 8.0f; f32 abs_dist_max = std::fabsf(dist1 > dist2 ? dist1 : dist2); - f32 tmp2 = val18 + (val17 - val18) * mWork.chase.field_0xa4; + f32 tmp2 = val18 + (val17 - val18) * chase->field_0xa4; f32 fovy_diff = std::fabsf(mFovy - tmp2); f32 sin = cSAngle(mFovy > tmp2 ? mFovy : tmp2).Sin(); f32 tmp3 = 100.0f * (sin * sin) * fovy_diff; @@ -4074,58 +3567,58 @@ bool dCamera_c::chaseCamera(s32 param_0) { tmp6 *= 1.2f; tmp6 *= 0.00625f; val3 = JMAFastSqrt(tmp6); - mWork.chase.field_0x4 = (int)(val3 * 2.2f) + 1; - if (mWork.chase.field_0x4 < 5) { - mWork.chase.field_0x4 = 5; + chase->field_0x4 = (int)(val3 * 2.2f) + 1; + if (chase->field_0x4 < 5) { + chase->field_0x4 = 5; } } if (player->checkGoronSideMove()) { - mWork.chase.field_0x4 = 20; + chase->field_0x4 = 20; } else if (mCurType == specialType[CAM_TYPE_LV9_GZELDA_TRI]) { - mWork.chase.field_0x4 = 45; + chase->field_0x4 = 45; } else if (chkFlag(0x20)) { - int tmp2 = mWork.chase.field_0x4; + int tmp2 = chase->field_0x4; int tmp = tmp2 / 6; - mWork.chase.field_0x4 = tmp2 + (tmp > 15 ? 15 : tmp < 5 ? 5 : tmp); + chase->field_0x4 = tmp2 + (tmp > 15 ? 15 : tmp < 5 ? 5 : tmp); } else if (player->checkMagneBootsOn()) { cXyz* magne_boots_top_vec = player->getMagneBootsTopVec(); cXyz vec2 = mDirection.Xyz().norm(); if (VECDotProduct(magne_boots_top_vec, &vec2) < -0.1f) { vec2 = (vec2 + *magne_boots_top_vec) * 0.5f; - field_0x5c.mDirection.Val(vec2); - field_0x5c.mDirection.R(val8); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - mWork.chase.field_0x4 = 1; - field_0x158.field_0x0 = 1; + mViewCache.mDirection.Val(vec2); + mViewCache.mDirection.R(val8); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + chase->field_0x4 = 1; + mStyleSettle.mFinished = true; } } else if (Stage == 0x6a && player->checkCameraLargeDamage()) { - field_0x5c.mCenter = relationalPos(mpPlayerActor, &vec); - field_0x5c.mDirection.Val(val8, cSAngle(val13), mDirection.U()); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = val18; - field_0x158.field_0x0 = 1; - mWork.chase.field_0x4 = 1; - } else if (mCurMode == 0 && !mWork.chase.field_0x95 && mWork.chase.field_0x4 < 10 && !chkFlag(0x50000) + mViewCache.mCenter = relationalPos(mpPlayerActor, &vec); + mViewCache.mDirection.Val(val8, cSAngle(val13), mDirection.U()); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = val18; + mStyleSettle.mFinished = true; + chase->field_0x4 = 1; + } else if (mCurMode == 0 && !chase->field_0x95 && chase->field_0x4 < 10 && !chkFlag(0x50000) && (chkFlag(0x8000) || field_0x168 == 0)) { - field_0x158.field_0x0 = 1; - mWork.chase.field_0x4 = 1; + mStyleSettle.mFinished = true; + chase->field_0x4 = 1; } - mWork.chase.field_0x50 = field_0x5c.mDirection.V().Degree(); - mWork.chase.field_0x58 = field_0x5c.mCenter; - mWork.chase.field_0x64 = field_0x5c.mEye; - mWork.chase.field_0x34 = field_0x5c.mFovy; + chase->field_0x50 = mViewCache.mDirection.V().Degree(); + chase->field_0x58 = mViewCache.mCenter; + chase->field_0x64 = mViewCache.mEye; + chase->field_0x34 = mViewCache.mFovy; if (chkFlag(0x200)) { - f32 dist = field_0x5c.mDirection.R(); - mWork.chase.field_0x2c = dist; - mWork.chase.field_0x28 = dist; + f32 dist = mViewCache.mDirection.R(); + chase->field_0x2c = dist; + chase->field_0x28 = dist; } - mWork.chase.field_0x8 = mWork.chase.field_0x4 * (mWork.chase.field_0x4 + 1) >> 1; - mWork.chase.field_0xc = 0.0f; - mWork.chase.field_0x1c = 0; - mWork.chase.field_0x8c = 0; - mWork.chase.field_0x90 = false; + chase->field_0x8 = chase->field_0x4 * (chase->field_0x4 + 1) >> 1; + chase->field_0xc = 0.0f; + chase->field_0x1c = 0; + chase->field_0x8c = 0; + chase->field_0x90 = false; } cXyz pos = relationalPos(mpPlayerActor, &vec); @@ -4133,8 +3626,8 @@ bool dCamera_c::chaseCamera(s32 param_0) { fopAc_ac_c* copy_rod_camera = player->getCopyRodCameraActor(); if (copy_rod_camera != NULL) { cXyz attention_pos = attentionPos(mpPlayerActor); - if (!lineBGCheck(&attention_pos, &field_0x5c.mEye, 0x40b7)) { - field_0x188 = copy_rod_camera; + if (!lineBGCheck(&attention_pos, &mViewCache.mEye, 0x40b7)) { + mpAuxTargetActor1 = copy_rod_camera; setFlag(0x2000); } } @@ -4147,7 +3640,7 @@ bool dCamera_c::chaseCamera(s32 param_0) { cXyz vec2(0.0f, 0.0f, mMonitor.field_0xc * 10.0f); cXyz vec3 = attentionPos(mpPlayerActor) + dCamMath::xyzRotateY(vec2, player_direction); dBgS_CamLinChk lin_chk; - if (lineBGCheck(&field_0x5c.mEye, &vec3, &lin_chk, 0x40b7)) { + if (lineBGCheck(&mViewCache.mEye, &vec3, &lin_chk, 0x40b7)) { cM3dGPla plane; dComIfG_Bgsp().GetTriPla(lin_chk, &plane); vec3 = lin_chk.GetCross(); @@ -4155,83 +3648,83 @@ bool dCamera_c::chaseCamera(s32 param_0) { val22 *= 3.0f; } - if (field_0x158.field_0x0 == 0) { - mWork.chase.field_0x96 = player_direction.Inv(); + if (mStyleSettle.mFinished == 0) { + chase->field_0x96 = player_direction.Inv(); if (mBG.field_0xc0.field_0x1 != 0) { dComIfG_Bgsp().MoveBgMatrixCrrPos(mBG.field_0x5c.field_0x4, true, - &mWork.chase.field_0x58, NULL, NULL); + &chase->field_0x58, NULL, NULL); } - mWork.chase.field_0xc = mWork.chase.field_0x4 - (int)mCurCamStyleTimer; - f32 rate = mWork.chase.field_0xc / mWork.chase.field_0x8; - mWork.chase.field_0x58 = pos; - if (mWork.chase.field_0x95) { + chase->field_0xc = chase->field_0x4 - (int)mCurCamStyleTimer; + f32 rate = chase->field_0xc / chase->field_0x8; + chase->field_0x58 = pos; + if (chase->field_0x95) { rate = 0.75f; if (push_any_key() && mMonitor.field_0xc < 0.1f && mCurCamStyleTimer > 20) { - field_0x158.field_0x0 = 1; + mStyleSettle.mFinished = true; } } - field_0x5c.mCenter += (pos - field_0x5c.mCenter) * rate; - - f32 dist = dCamMath::xyzHorizontalDistance(pos, mWork.chase.field_0x58); + mViewCache.mCenter += (pos - mViewCache.mCenter) * rate; + + f32 dist = dCamMath::xyzHorizontalDistance(pos, chase->field_0x58); if (dist < std::fabsf(vec.x > vec.z ? vec.x : vec.z) + 20.0f) { cXyz attention_pos = attentionPos(mpPlayerActor); attention_pos.y -= 15.0f; dBgS_CamLinChk lin_chk; - if (lineBGCheck(&attention_pos, &field_0x5c.mCenter, &lin_chk, 0x40b7)) { + if (lineBGCheck(&attention_pos, &mViewCache.mCenter, &lin_chk, 0x40b7)) { cM3dGPla plane; dComIfG_Bgsp().GetTriPla(lin_chk, &plane); - field_0x5c.mCenter = lin_chk.GetCross(); - field_0x5c.mCenter += *plane.GetNP(); + mViewCache.mCenter = lin_chk.GetCross(); + mViewCache.mCenter += *plane.GetNP(); } } - f32 dVar43 = limitf(field_0x5c.mDirection.R(), val8, val7); - cSAngle ang = val12 + mWork.chase.field_0xa4 * (val13 - val12); - if (!mWork.chase.field_0x95) { - ang += field_0x1b0; + f32 dVar43 = limitf(mViewCache.mDirection.R(), val8, val7); + cSAngle ang = val12 + chase->field_0xa4 * (val13 - val12); + if (!chase->field_0x95) { + ang += mForwardTiltOffset; } - mWork.chase.field_0x50 = ang.Degree(); - cSGlobe globe(dVar43, ang, cSAngle(field_0x8c.Inv())); - field_0x5c.mDirection.R(field_0x5c.mDirection.R() + (globe.R() - field_0x5c.mDirection.R()) * rate); - field_0x5c.mDirection.V(field_0x5c.mDirection.V() + (globe.V() - field_0x5c.mDirection.V()) * rate); + chase->field_0x50 = ang.Degree(); + cSGlobe globe(dVar43, ang, cSAngle(mControlledYaw.Inv())); + mViewCache.mDirection.R(mViewCache.mDirection.R() + (globe.R() - mViewCache.mDirection.R()) * rate); + mViewCache.mDirection.V(mViewCache.mDirection.V() + (globe.V() - mViewCache.mDirection.V()) * rate); if (chkFlag(0x100000) || bVar3 || bVar6) { - field_0x5c.mDirection.U(field_0x5c.mDirection.U() + (mWork.chase.field_0x96 - field_0x5c.mDirection.U()) * rate); + mViewCache.mDirection.U(mViewCache.mDirection.U() + (chase->field_0x96 - mViewCache.mDirection.U()) * rate); } - mWork.chase.field_0x64 = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mEye = mWork.chase.field_0x64; + chase->field_0x64 = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mEye = chase->field_0x64; - if (mCurCamStyleTimer >= mWork.chase.field_0x4 - 1) { - field_0x158.field_0x0 = 1; + if (mCurCamStyleTimer >= chase->field_0x4 - 1) { + mStyleSettle.mFinished = true; } - mWork.chase.field_0x28 = mWork.chase.field_0x2c = field_0x5c.mDirection.R(); - field_0x5c.mFovy += (val17 + mWork.chase.field_0xa4 * (val18 - val17) - field_0x5c.mFovy) * rate; - mWork.chase.field_0x8 -= mWork.chase.field_0xc; - mWork.chase.field_0x8c = 0; - mWork.chase.field_0x90 = false; + chase->field_0x28 = chase->field_0x2c = mViewCache.mDirection.R(); + mViewCache.mFovy += (val17 + chase->field_0xa4 * (val18 - val17) - mViewCache.mFovy) * rate; + chase->field_0x8 -= chase->field_0xc; + chase->field_0x8c = 0; + chase->field_0x90 = false; return true; } - mWork.chase.field_0x95 = false; - if (field_0x1f8 == 1 && mWork.chase.field_0xa0 != field_0x940) { - mWork.chase.field_0x1c = 20; - mWork.chase.field_0xa0 = field_0x940; + chase->field_0x95 = false; + if (mCStickYHoldCount == 1 && chase->field_0xa0 != mGear) { + chase->field_0x1c = 20; + chase->field_0xa0 = mGear; } - if (mWork.chase.field_0x1c != 0) { - dVar52 = dCamMath::rationalBezierRatio(1.0f - (mWork.chase.field_0x1c - 1) / 20.0f, 0.5f); + if (chase->field_0x1c != 0) { + dVar52 = dCamMath::rationalBezierRatio(1.0f - (chase->field_0x1c - 1) / 20.0f, 0.5f); } if (player->checkThrowDamage()) { - mWork.chase.field_0x91 = true; + chase->field_0x91 = true; fopAc_ac_c* target = dComIfGp_getAttention()->LockonTarget(0); if (target != NULL && fopAcM_GetName(target) == PROC_E_HZ) { setFlag(0x2000); - field_0x188 = target; + mpAuxTargetActor1 = target; } } else { - mWork.chase.field_0x91 = false; + chase->field_0x91 = false; } - + bVar10 = false; bool bVar11 = false; bool bVar34 = false; @@ -4241,12 +3734,12 @@ bool dCamera_c::chaseCamera(s32 param_0) { footHeightOf(mpPlayerActor); if (mBG.field_0xc0.field_0x44 != 0 && !check_owner_action(mPadID, 0x200)) { - mWork.chase.field_0x20 = 0.0f; - mWork.chase.field_0x10 = 0; - } else if (mWork.chase.field_0x10 < 30) { + chase->field_0x20 = 0.0f; + chase->field_0x10 = 0; + } else if (chase->field_0x10 < 30) { bVar10 = true; - mWork.chase.field_0x10++; - mWork.chase.field_0x20 += (JumpCushion - mWork.chase.field_0x20) * dCamMath::rationalBezierRatio(mWork.chase.field_0x10 / 30.0f, 1.25f); + chase->field_0x10++; + chase->field_0x20 += (JumpCushion - chase->field_0x20) * dCamMath::rationalBezierRatio(chase->field_0x10 / 30.0f, 1.25f); } else if (!bVar2) { bVar11 = true; if (mBG.field_0x5c.field_0x0 && dComIfG_Bgsp().GetGroundCode(mBG.field_0x5c.field_0x4) == 4) { @@ -4256,49 +3749,49 @@ bool dCamera_c::chaseCamera(s32 param_0) { bVar11 = false; } val10 = 0.01f; - mWork.chase.field_0x20 += (1.0f - mWork.chase.field_0x20) * 0.1f; + chase->field_0x20 += (1.0f - chase->field_0x20) * 0.1f; } if (check_owner_action(mPadID, 0x2800008)) { if (mFakeAngleSys.field_0x0 == 0) { setUSOAngle(); - mWork.chase.field_0x98 = directionOf(mpPlayerActor); + chase->field_0x98 = directionOf(mpPlayerActor); } else { - cSAngle ang = mWork.chase.field_0x98 - directionOf(mpPlayerActor); + cSAngle ang = chase->field_0x98 - directionOf(mpPlayerActor); if (ang.Abs() > cSAngle(50.0f)) { mFakeAngleSys.field_0x0 = 0; } } } - if (mWork.chase.field_0x91) { - mWork.chase.field_0x84 = 0.35f; + if (chase->field_0x91) { + chase->field_0x84 = 0.35f; } else if (check_owner_action(mPadID, 0x2000108) && !(player_angle_delta > cSAngle::_270 && player_angle_delta < cSAngle::_90)) { - mWork.chase.field_0x84 = 0.1f; + chase->field_0x84 = 0.1f; } else { - mWork.chase.field_0x84 += (val6 - mWork.chase.field_0x84) * 0.4f; + chase->field_0x84 += (val6 - chase->field_0x84) * 0.4f; } - if (mWork.chase.field_0x91) { - mWork.chase.field_0x88 = 0.25f; + if (chase->field_0x91) { + chase->field_0x88 = 0.25f; } else if (bVar10 || bVar11) { - mWork.chase.field_0x88 = val5 * 0.1f + (0.9f - val5 * 0.1f) * mWork.chase.field_0x20; - if (chkFlag(0x100000) && mWork.chase.field_0x84 > 0.25f) { - mWork.chase.field_0x84 = mWork.chase.field_0x20 * 0.75f + 0.25f; + chase->field_0x88 = val5 * 0.1f + (0.9f - val5 * 0.1f) * chase->field_0x20; + if (chkFlag(0x100000) && chase->field_0x84 > 0.25f) { + chase->field_0x84 = chase->field_0x20 * 0.75f + 0.25f; } - } else if (mWork.chase.field_0x1c != 0) { - mWork.chase.field_0x88 = dVar52; + } else if (chase->field_0x1c != 0) { + chase->field_0x88 = dVar52; } else if (bVar6 && mDoCPd_c::getTrigA(mPadID)) { - mWork.chase.field_0x88 = 0.01f; + chase->field_0x88 = 0.01f; } else if (bVar6) { - mWork.chase.field_0x88 += (val5 - mWork.chase.field_0x88) * 0.1f; + chase->field_0x88 += (val5 - chase->field_0x88) * 0.1f; } else { - mWork.chase.field_0x88 += (val5 - mWork.chase.field_0x88) * 0.4f; + chase->field_0x88 += (val5 - chase->field_0x88) * 0.4f; } - cXyz vec4(mWork.chase.field_0x84, mWork.chase.field_0x88, mWork.chase.field_0x84); + cXyz vec4(chase->field_0x84, chase->field_0x88, chase->field_0x84); bVar8 = false; bool bVar5 = false; @@ -4319,15 +3812,15 @@ bool dCamera_c::chaseCamera(s32 param_0) { if (mCamParam.Flag(param_0, 0x1000)) { f32 fVar55 = 0.0f; if (push_any_key()) { - mWork.chase.field_0x8c = 0; - mWork.chase.field_0x90 = false; - } else if (mWork.chase.field_0x8c < mCamSetup.WaitRollTimer()) { - mWork.chase.field_0x8c++; + chase->field_0x8c = 0; + chase->field_0x90 = false; + } else if (chase->field_0x8c < mCamSetup.WaitRollTimer()) { + chase->field_0x8c++; } else { fopAc_ac_c* target = attention->LockonTarget(0); if (target != NULL) { cXyz delta = positionOf(target) - positionOf(mpPlayerActor); - cSAngle ang = -field_0x5c.mDirection.U(); + cSAngle ang = -mViewCache.mDirection.U(); delta = dCamMath::xyzRotateY(delta, ang); cXyz vec5 = delta; if (std::fabsf(vec5.y) < 200.0f) { @@ -4341,22 +3834,22 @@ bool dCamera_c::chaseCamera(s32 param_0) { } } - mWork.chase.field_0x40 += (fVar55 - mWork.chase.field_0x40) * 0.01f; - cSGlobe globe(mWork.chase.field_0x40, field_0x5c.mDirection.V(), field_0x5c.mDirection.U() + cSAngle::_270); + chase->field_0x40 += (fVar55 - chase->field_0x40) * 0.01f; + cSGlobe globe(chase->field_0x40, mViewCache.mDirection.V(), mViewCache.mDirection.U() + cSAngle::_270); pos += globe.Xyz(); } - field_0x5c.mCenter += (pos - field_0x5c.mCenter) * vec4; - cSGlobe globe = field_0x5c.mEye - field_0x5c.mCenter; + mViewCache.mCenter += (pos - mViewCache.mCenter) * vec4; + cSGlobe globe = mViewCache.mEye - mViewCache.mCenter; - if (mWork.chase.field_0x1a > 0 && mWork.chase.field_0x1a <= 14) { - f32 tmp = mWork.chase.field_0x1a / 14.0f; + if (chase->field_0x1a > 0 && chase->field_0x1a <= 14) { + f32 tmp = chase->field_0x1a / 14.0f; if (tmp > 1.0f) { tmp = 1.0f; } f32 rate = dCamMath::rationalBezierRatio(tmp, charge_b_ratio); - mWork.chase.field_0x70 = true; - mWork.chase.field_0x48 = (1.0f - mWork.chase.field_0x48) * rate; + chase->field_0x70 = true; + chase->field_0x48 = (1.0f - chase->field_0x48) * rate; } else if (bVar6) { f32 target = 1.0f; f32 tmp = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosX, val23); @@ -4364,77 +3857,77 @@ bool dCamera_c::chaseCamera(s32 param_0) { target = 1.0f - ((1.0f - val24) + val24 * cSAngle(tmp * 180.0f).Cos()); target *= mPadInfo.mMainStick.mLastValue; } - mWork.chase.field_0x24 += (target - mWork.chase.field_0x24) * 0.4f; - if (mWork.chase.field_0x70) { - mWork.chase.field_0x48 = 0.05f; + chase->field_0x24 += (target - chase->field_0x24) * 0.4f; + if (chase->field_0x70) { + chase->field_0x48 = 0.05f; } - mWork.chase.field_0x70 = false; - mWork.chase.field_0x48 += (val24 * mWork.chase.field_0x24 - mWork.chase.field_0x48) * 0.2f; + chase->field_0x70 = false; + chase->field_0x48 += (val24 * chase->field_0x24 - chase->field_0x48) * 0.2f; } else if (chkFlag(0x100000) || bVar3) { - if (mWork.chase.field_0x70) { - mWork.chase.field_0x48 = 0.05f; + if (chase->field_0x70) { + chase->field_0x48 = 0.05f; } - mWork.chase.field_0x70 = false; + chase->field_0x70 = false; f32 tmp = 0.2f; - mWork.chase.field_0x48 += (1.0f - mWork.chase.field_0x48) * tmp; + chase->field_0x48 += (1.0f - chase->field_0x48) * tmp; } else { - mWork.chase.field_0x70 = true; + chase->field_0x70 = true; if (mFakeAngleSys.field_0x0 != 0) { - mWork.chase.field_0x48 = 0.0f; + chase->field_0x48 = 0.0f; } else if (mPadInfo.mMainStick.mLastPosY >= 0.0f) { f32 tmp = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosX, val23); - mWork.chase.field_0x48 = 1.0f - (1.0f - val24 + val24 * cSAngle(tmp * 180.0f).Cos()); + chase->field_0x48 = 1.0f - (1.0f - val24 + val24 * cSAngle(tmp * 180.0f).Cos()); } else { f32 tmp = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosX, val23 * 2.0f); - mWork.chase.field_0x48 = 1.0f - (1.0f - val24 + val24 * cSAngle(tmp * 180.0f).Cos()); + chase->field_0x48 = 1.0f - (1.0f - val24 + val24 * cSAngle(tmp * 180.0f).Cos()); } - mWork.chase.field_0x48 *= mPadInfo.mMainStick.mLastValue; - mWork.chase.field_0x48 *= val22; + chase->field_0x48 *= mPadInfo.mMainStick.mLastValue; + chase->field_0x48 *= val22; if (check_owner_action(mPadID, 0x2000008)) { - if (mWork.chase.field_0x14 == 0) { + if (chase->field_0x14 == 0) { if (check_owner_action(mPadID, 8)) { - mWork.chase.field_0x14 = 1; + chase->field_0x14 = 1; } else if (player_angle_delta > cSAngle::_270 && player_angle_delta < cSAngle::_90) { - mWork.chase.field_0x14 = 1; + chase->field_0x14 = 1; } else { - mWork.chase.field_0x14 = -1; + chase->field_0x14 = -1; } - } else if (mWork.chase.field_0x14 < 0) { - mWork.chase.field_0x14--; - } else if (mWork.chase.field_0x14 < 30) { - mWork.chase.field_0x48 = mWork.chase.field_0x14 / 30.0f * 0.5f; - mWork.chase.field_0x14++; + } else if (chase->field_0x14 < 0) { + chase->field_0x14--; + } else if (chase->field_0x14 < 30) { + chase->field_0x48 = chase->field_0x14 / 30.0f * 0.5f; + chase->field_0x14++; } else { - mWork.chase.field_0x48 = 0.5f; + chase->field_0x48 = 0.5f; } } else { - mWork.chase.field_0x14 = 0; + chase->field_0x14 = 0; } } cSAngle ang3; - f32 dVar39 = mWork.chase.field_0x48 * globe.V().Cos(); + f32 dVar39 = chase->field_0x48 * globe.V().Cos(); if (chkFlag(0x80000)) { - cXyz vec5 = field_0x90; - cSGlobe globe = vec5 - field_0x5c.mCenter; + cXyz vec5 = mLastHitPos; + cSGlobe globe = vec5 - mViewCache.mCenter; ang3 = globe.U(); - dVar39 = sAngleX(field_0x9c).Cos() * 0.3f + 0.35f; - } else if (mWork.chase.field_0x90) { + dVar39 = sAngleX(mCornerNormalSum).Cos() * 0.3f + 0.35f; + } else if (chase->field_0x90) { ang3 = player_direction.Inv(); dVar39 = mCamSetup.WaitRollSpeed(); } else if (bVar8) { - ang3 = field_0x5c.mDirection.U(); + ang3 = mViewCache.mDirection.U(); } else if (bVar3) { ang3 = player_direction.Inv(); } else if (chkFlag(0x100000) || bVar6) { if (player->checkChainBlockPushPull()) { - cSGlobe globe = field_0x5c.mCenter - attentionPos(player->getChainGrabActor()); + cSGlobe globe = mViewCache.mCenter - attentionPos(player->getChainGrabActor()); ang3 = globe.U(); } else if ((mIsWolf != 1 || mCurMode != 1) && !mCamParam.Flag(param_0, 0x100)) { ang3 = player_direction.Inv(); } else { - ang3 = mWork.chase.field_0x96; + ang3 = chase->field_0x96; } } else { ang3 = player_direction.Inv(); @@ -4443,187 +3936,187 @@ bool dCamera_c::chaseCamera(s32 param_0) { f32 last_pos_x = mPadInfo.mCStick.mLastPosX; std::fabsf(last_pos_x); std::fabsf(mPadInfo.mCStick.mLastPosY); - mWork.chase.field_0x93 = false; + chase->field_0x93 = false; if (!mCamParam.Flag(param_0, 0x40) && std::fabsf(last_pos_x) > 0.05f) { - mWork.chase.field_0xac += (dCamMath::rationalBezierRatio(last_pos_x, 0.5f) * 8.0f - mWork.chase.field_0xac) * mWork.chase.field_0x4c; - ang3 = globe.U() + cSAngle(mWork.chase.field_0xac); + chase->field_0xac += (dCamMath::rationalBezierRatio(last_pos_x, 0.5f) * 8.0f - chase->field_0xac) * chase->field_0x4c; + ang3 = globe.U() + cSAngle(chase->field_0xac); dVar39 = std::fabsf(last_pos_x) - 0.05f; if (mCamSetup.CheckFlag(0x1000) && mFakeAngleSys.field_0x0 == 0) { setUSOAngle(); } if (mCamSetup.CheckFlag2(0x40)) { - mWork.chase.field_0x93 = true; - mWork.chase.field_0x9a = ang3; + chase->field_0x93 = true; + chase->field_0x9a = ang3; } else if (chkFlag(0x100000)) { - mWork.chase.field_0x93 = true; - mWork.chase.field_0x9a = ang3; + chase->field_0x93 = true; + chase->field_0x9a = ang3; } clrFlag(0x20000); } else if (check_owner_action1(mPadID, 0x2010000) && mCurMode == 0) { - mWork.chase.field_0x9a = mDirection.U().Val(); - mWork.chase.field_0x93 = true; + chase->field_0x9a = mDirection.U().Val(); + chase->field_0x93 = true; } else if (mIsWolf == 1 && isPlayerCharging(mPadID)) { - mWork.chase.field_0x9a = mDirection.U().Val(); - mWork.chase.field_0x93 = true; + chase->field_0x9a = mDirection.U().Val(); + chase->field_0x93 = true; } else { - mWork.chase.field_0xac = 0.0f; + chase->field_0xac = 0.0f; } - if (check_owner_action1(mPadID, 0x1000000) || mWork.chase.field_0x91) { - mWork.chase.field_0x9a = mDirection.U().Val(); - mWork.chase.field_0x93 = true; + if (check_owner_action1(mPadID, 0x1000000) || chase->field_0x91) { + chase->field_0x9a = mDirection.U().Val(); + chase->field_0x93 = true; } - if (mWork.chase.field_0x93) { - field_0x5c.mDirection.U(mWork.chase.field_0x9a); + if (chase->field_0x93) { + mViewCache.mDirection.U(chase->field_0x9a); } else { - field_0x5c.mDirection.U(globe.U() + (ang3 - globe.U()) * dVar39); + mViewCache.mDirection.U(globe.U() + (ang3 - globe.U()) * dVar39); } cSAngle ang4; if (bVar1 && !bVar7) { - mWork.chase.field_0x50 = charge_latitude; - if (mWork.chase.field_0x1a < 14) { - mWork.chase.field_0x78 = dCamMath::rationalBezierRatio(mWork.chase.field_0x1a / 14.0f, charge_b_ratio); + chase->field_0x50 = charge_latitude; + if (chase->field_0x1a < 14) { + chase->field_0x78 = dCamMath::rationalBezierRatio(chase->field_0x1a / 14.0f, charge_b_ratio); setFlag(0x4000000); - mWork.chase.field_0x1a++; + chase->field_0x1a++; } else { if (player->checkCutLargeTurnState()) { - mWork.chase.field_0x92 = true; + chase->field_0x92 = true; } - mWork.chase.field_0x78 = 1.0f; + chase->field_0x78 = 1.0f; } - } else if (mWork.chase.field_0x1a >= 14 && mWork.chase.field_0x1a < 34) { - mWork.chase.field_0x50 = charge_latitude; - mWork.chase.field_0x1a++; - mWork.chase.field_0x78 = 1.0f; + } else if (chase->field_0x1a >= 14 && chase->field_0x1a < 34) { + chase->field_0x50 = charge_latitude; + chase->field_0x1a++; + chase->field_0x78 = 1.0f; } else { - if (mWork.chase.field_0x1a != 0) { - mWork.chase.field_0x78 = 0.0f; + if (chase->field_0x1a != 0) { + chase->field_0x78 = 0.0f; } - mWork.chase.field_0x1a = 0; + chase->field_0x1a = 0; if (mCurMode == 1) { - f32 tmp = val12 + (val13 - val12) * mWork.chase.field_0xa4; - mWork.chase.field_0x78 = 0.5f; - mWork.chase.field_0x50 += (tmp - mWork.chase.field_0x50) * mWork.chase.field_0x48; + f32 tmp = val12 + (val13 - val12) * chase->field_0xa4; + chase->field_0x78 = 0.5f; + chase->field_0x50 += (tmp - chase->field_0x50) * chase->field_0x48; } else { check_owner_action1(mPadID, 0x800000); - if (check_owner_action1(mPadID, 0x1000000) || mWork.chase.field_0x73) { - mWork.chase.field_0x78 = 0.75f; - mWork.chase.field_0x50 = val12; + if (check_owner_action1(mPadID, 0x1000000) || chase->field_0x73) { + chase->field_0x78 = 0.75f; + chase->field_0x50 = val12; } else if (chkFlag(0x10000)) { - mWork.chase.field_0x50 += (val12 - mWork.chase.field_0x50) * mWork.chase.field_0x20; - mWork.chase.field_0x78 = val16; + chase->field_0x50 += (val12 - chase->field_0x50) * chase->field_0x20; + chase->field_0x78 = val16; } else if (chkFlag(0x80000) || bVar8 || bVar9) { - mWork.chase.field_0x78 = 0.0f; - mWork.chase.field_0x50 = field_0x5c.mDirection.V().Degree(); - } else if ((!bVar10 && !bVar11 && (!bVar2 || mCurMode != 0 || field_0x940 != 0)) || bVar12) { - f32 tmp = val12 + (val13 - val12) * mWork.chase.field_0xa4; - tmp += field_0x1b0.Degree(); - mWork.chase.field_0x50 += (tmp - mWork.chase.field_0x50) * val16; - mWork.chase.field_0x78 += (JumpCushion - mWork.chase.field_0x78) * 0.05f; + chase->field_0x78 = 0.0f; + chase->field_0x50 = mViewCache.mDirection.V().Degree(); + } else if ((!bVar10 && !bVar11 && (!bVar2 || mCurMode != 0 || mGear != 0)) || bVar12) { + f32 tmp = val12 + (val13 - val12) * chase->field_0xa4; + tmp += mForwardTiltOffset.Degree(); + chase->field_0x50 += (tmp - chase->field_0x50) * val16; + chase->field_0x78 += (JumpCushion - chase->field_0x78) * 0.05f; } else if (bVar2) { - mWork.chase.field_0x50 = globe.V().Degree(); - mWork.chase.field_0x78 = 0.95f; + chase->field_0x50 = globe.V().Degree(); + chase->field_0x78 = 0.95f; } else if (isPlayerFlying(player)) { - if (mWork.chase.field_0x30 < positionOf(mpPlayerActor).y) { - mWork.chase.field_0x78 = dCamMath::rationalBezierRatio(mWork.chase.field_0x20, val15); + if (chase->field_0x30 < positionOf(mpPlayerActor).y) { + chase->field_0x78 = dCamMath::rationalBezierRatio(chase->field_0x20, val15); } else { - mWork.chase.field_0x78 += (0.75f - mWork.chase.field_0x78) * 0.15f; + chase->field_0x78 += (0.75f - chase->field_0x78) * 0.15f; } - mWork.chase.field_0x50 = globe.V().Degree(); + chase->field_0x50 = globe.V().Degree(); } else { - mWork.chase.field_0x50 = globe.V().Degree(); - mWork.chase.field_0x78 = dCamMath::rationalBezierRatio(mWork.chase.field_0x20, val15); - if (mWork.chase.field_0x91) { + chase->field_0x50 = globe.V().Degree(); + chase->field_0x78 = dCamMath::rationalBezierRatio(chase->field_0x20, val15); + if (chase->field_0x91) { ang1.Val(-50.0f); - mWork.chase.field_0x78 = 0.75f; + chase->field_0x78 = 0.75f; } } } } - if (mWork.chase.field_0x1a == 0) { - mWork.chase.field_0x92 = false; + if (chase->field_0x1a == 0) { + chase->field_0x92 = false; } - mWork.chase.field_0x30 = positionOf(mpPlayerActor).y; + chase->field_0x30 = positionOf(mpPlayerActor).y; - ang4.Val(mWork.chase.field_0x50); + ang4.Val(chase->field_0x50); if (ang4 < ang1) { ang4.Val(ang1); } else if (ang4 > ang2) { ang4.Val(ang2); } - if (mWork.chase.field_0x1c != 0) { - mWork.chase.field_0x78 = dVar52; + if (chase->field_0x1c != 0) { + chase->field_0x78 = dVar52; } - field_0x5c.mDirection.V(field_0x5c.mDirection.V() + (ang4 - field_0x5c.mDirection.V()) * mWork.chase.field_0x78); + mViewCache.mDirection.V(mViewCache.mDirection.V() + (ang4 - mViewCache.mDirection.V()) * chase->field_0x78); f32 fVar55 = globe.R(); - if (mWork.chase.field_0x1c != 0) { + if (chase->field_0x1c != 0) { val11 = 1.0f; } - mWork.chase.field_0x28 += (val8 - mWork.chase.field_0x28) * val11; - mWork.chase.field_0x2c += (val7 - mWork.chase.field_0x2c) * val11; + chase->field_0x28 += (val8 - chase->field_0x28) * val11; + chase->field_0x2c += (val7 - chase->field_0x2c) * val11; bool bVar6a = false; bool bVar2a = false; if (bVar11 && !check_owner_action(mPadID, 0x100000)) { - fVar55 = field_0x5c.mDirection.R() + (fVar55 - field_0x5c.mDirection.R()) * 0.4f; + fVar55 = mViewCache.mDirection.R() + (fVar55 - mViewCache.mDirection.R()) * 0.4f; if (!bVar34 && fVar55 > val7 * 1.5f) { fVar55 = val7 * 1.5f; } - } else if (fVar55 < mWork.chase.field_0x28) { - fVar55 = mWork.chase.field_0x28; + } else if (fVar55 < chase->field_0x28) { + fVar55 = chase->field_0x28; bVar6a = true; - } else if (fVar55 > mWork.chase.field_0x2c) { - fVar55 = mWork.chase.field_0x2c; + } else if (fVar55 > chase->field_0x2c) { + fVar55 = chase->field_0x2c; bVar2a = true; } if (bVar10) { - mWork.chase.field_0x74 += (mWork.chase.field_0x20 - mWork.chase.field_0x74) * 0.01f; + chase->field_0x74 += (chase->field_0x20 - chase->field_0x74) * 0.01f; } else if (bVar11) { - mWork.chase.field_0x74 += (mWork.chase.field_0x20 - mWork.chase.field_0x74) * 0.01f; - } else if (mWork.chase.field_0x1c != 0) { - mWork.chase.field_0x74 = dVar52; + chase->field_0x74 += (chase->field_0x20 - chase->field_0x74) * 0.01f; + } else if (chase->field_0x1c != 0) { + chase->field_0x74 = dVar52; } else if (bVar6a) { - mWork.chase.field_0x74 += (val10 - mWork.chase.field_0x74) * 0.01f; + chase->field_0x74 += (val10 - chase->field_0x74) * 0.01f; } else if (bVar2a) { - mWork.chase.field_0x74 += (val10 - mWork.chase.field_0x74) * 0.01f; + chase->field_0x74 += (val10 - chase->field_0x74) * 0.01f; } else { - mWork.chase.field_0x74 = 1.0f; + chase->field_0x74 = 1.0f; } - field_0x5c.mDirection.R(); - field_0x5c.mDirection.R(field_0x5c.mDirection.R() + (fVar55 - field_0x5c.mDirection.R()) * mWork.chase.field_0x74); - mWork.chase.field_0x64 = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mEye = mWork.chase.field_0x64; + mViewCache.mDirection.R(); + mViewCache.mDirection.R(mViewCache.mDirection.R() + (fVar55 - mViewCache.mDirection.R()) * chase->field_0x74); + chase->field_0x64 = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mEye = chase->field_0x64; - if (mWork.chase.field_0x1c != 0) { - mWork.chase.field_0x80 = dVar52; + if (chase->field_0x1c != 0) { + chase->field_0x80 = dVar52; } else { - mWork.chase.field_0x80 += (val21 - mWork.chase.field_0x80) * 0.01f; + chase->field_0x80 += (val21 - chase->field_0x80) * 0.01f; } - field_0x5c.mFovy += ((val17 + (val18 - val17) * mWork.chase.field_0xa4) - field_0x5c.mFovy) * mWork.chase.field_0x80; + mViewCache.mFovy += ((val17 + (val18 - val17) * chase->field_0xa4) - mViewCache.mFovy) * chase->field_0x80; - if (mWork.chase.field_0x1c != 0) { - mWork.chase.field_0x1c--; + if (chase->field_0x1c != 0) { + chase->field_0x1c--; } return 1; } /* 8016C384-8016E410 166CC4 208C+00 1/0 0/0 0/0 .text lockonCamera__9dCamera_cFl */ -// NONMATCHING this is an absolute mess because too many things are being inlined bool dCamera_c::lockonCamera(s32 param_0) { f32 lockon_change_cushion = mCamSetup.LockonChangeCushion(); cSAngle charge_latitude = cSAngle(mCamSetup.ChargeLatitude()); f32 charge_b_ratio = mCamSetup.ChargeBRatio(); int lockon_change_timer = mCamSetup.LockonChangeTimer(); + f32 unkFloatConst1 = 0.15f; f32 val1 = mCamParam.Val(param_0, 1); f32 val5 = mCamParam.Val(param_0, 5); f32 val6 = mCamParam.Val(param_0, 6); @@ -4641,6 +4134,9 @@ bool dCamera_c::lockonCamera(s32 param_0) { f32 val11 = mCamParam.Val(param_0, 11); f32 val20 = mCamParam.Val(param_0, 20); f32 val21 = mCamParam.Val(param_0, 21); + + LockOnData* lockon = (LockOnData*)mWork; + dAttention_c* attention = dComIfGp_getAttention(); daAlink_c* player = (daAlink_c*)mpPlayerActor; @@ -4652,40 +4148,40 @@ bool dCamera_c::lockonCamera(s32 param_0) { } if (mCurCamStyleTimer == 0) { - if (field_0x110.field_0x8.field_0x1e <= 0) { - field_0x5c.mDirection = mDirection; - field_0x5c.mCenter = mCenter; - field_0x5c.mEye = mEye; + if (mRecovery.field_0x8.field_0x1e <= 0) { + mViewCache.mDirection = mDirection; + mViewCache.mCenter = mCenter; + mViewCache.mEye = mEye; } - mWork.lockon.field_0x0 = 'LOCK'; - mWork.lockon.field_0xc = 0; - mWork.lockon.field_0x10 = 1.0f; - mWork.lockon.field_0x18 = false; - mWork.lockon.field_0x28 = false; - mWork.lockon.field_0x1c = field_0x5c.mCenter; + lockon->field_0x0 = 'LOCK'; + lockon->field_0xc = 0; + lockon->field_0x10 = 1.0f; + lockon->field_0x18 = false; + lockon->field_0x28 = false; + lockon->field_0x1c = mViewCache.mCenter; cXyz attention_pos = attentionPos(mpPlayerActor); - mWork.lockon.field_0x34.Val(field_0x5c.mCenter - attention_pos); - if (field_0x5c.mCenter.x == attention_pos.x && field_0x5c.mCenter.z == attention_pos.z) { - mWork.lockon.field_0x34.U(directionOf(mpPlayerActor)); + lockon->field_0x34.Val(mViewCache.mCenter - attention_pos); + if (mViewCache.mCenter.x == attention_pos.x && mViewCache.mCenter.z == attention_pos.z) { + lockon->field_0x34.U(directionOf(mpPlayerActor)); } - mWork.lockon.field_0x58 = 0.0f; - mWork.lockon.field_0x54 = 0.0f; - mWork.lockon.field_0x5c = mCamSetup.Cushion4Base(); - mWork.lockon.field_0x60 = 1.0f; - mWork.lockon.field_0x14 = 0; - mWork.lockon.field_0x29 = false; - mWork.lockon.field_0x2c = 0; - mWork.lockon.field_0x30 = 0; - mWork.lockon.field_0x40 = false; - mWork.lockon.field_0x44 = 0; - mWork.lockon.field_0x48 = field_0x5c.mDirection.R(); - mWork.lockon.field_0x50 = field_0x5c.mDirection.V(); - mWork.lockon.field_0x4c = 1.0f; - mWork.lockon.field_0x2a = false; - mWork.lockon.field_0x3c = fpcM_ERROR_PROCESS_ID_e; + lockon->field_0x58 = 0.0f; + lockon->field_0x54 = 0.0f; + lockon->field_0x5c = mCamSetup.Cushion4Base(); + lockon->field_0x60 = 1.0f; + lockon->field_0x14 = 0; + lockon->field_0x29 = false; + lockon->field_0x2c = 0; + lockon->field_0x30 = 0; + lockon->field_0x40 = false; + lockon->field_0x44 = 0; + lockon->field_0x48 = mViewCache.mDirection.R(); + lockon->field_0x50 = mViewCache.mDirection.V(); + lockon->field_0x4c = 1.0f; + lockon->field_0x2a = false; + lockon->field_0x3c = fpcM_ERROR_PROCESS_ID_e; if (player->checkCutHeadProc() && mpLockonTarget != NULL) { - mWork.lockon.field_0x3c = fopAcM_GetID(mpLockonTarget); + lockon->field_0x3c = fopAcM_GetID(mpLockonTarget); } if (mpLockonTarget != NULL) { @@ -4697,24 +4193,24 @@ bool dCamera_c::lockonCamera(s32 param_0) { } else if (mCamParam.Flag(param_0, 0x2000)) { fopAc_ac_c* target = getParamTargetActor(mCurType); if (target != NULL) { - mWork.lockon.field_0x3c = fopAcM_GetID(target); + lockon->field_0x3c = fopAcM_GetID(target); } } if (mCurType == specialType[CAM_TYPE_LV7_BOSS]) { cSAngle ang = -10.0f; - if (field_0x5c.mDirection.V() < ang) { - field_0x5c.mDirection.V(cSAngle(-10.0f)); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + if (mViewCache.mDirection.V() < ang) { + mViewCache.mDirection.V(cSAngle(-10.0f)); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); } } } else { - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; } - if (player->checkCutHeadProc() && mWork.lockon.field_0x3c != fpcM_ERROR_PROCESS_ID_e) { - mpLockonTarget = fopAcM_SearchByID(mWork.lockon.field_0x3c); + if (player->checkCutHeadProc() && lockon->field_0x3c != fpcM_ERROR_PROCESS_ID_e) { + mpLockonTarget = fopAcM_SearchByID(lockon->field_0x3c); if (mpLockonTarget != NULL) { dComIfGp_getAttention()->keepLock(30); } else { @@ -4722,8 +4218,8 @@ bool dCamera_c::lockonCamera(s32 param_0) { } } - if (mpLockonTarget == NULL && mWork.lockon.field_0x3c != fpcM_ERROR_PROCESS_ID_e) { - mpLockonTarget = fopAcM_SearchByID(mWork.lockon.field_0x3c); + if (mpLockonTarget == NULL && lockon->field_0x3c != fpcM_ERROR_PROCESS_ID_e) { + mpLockonTarget = fopAcM_SearchByID(lockon->field_0x3c); } bool bVar1 = false; @@ -4738,23 +4234,23 @@ bool dCamera_c::lockonCamera(s32 param_0) { if (mBG.field_0xc0.field_0x1) { dComIfG_Bgsp().MoveBgMatrixCrrPos(mBG.field_0x5c.field_0x4, true, - &mWork.lockon.field_0x1c, NULL, NULL); + &lockon->field_0x1c, NULL, NULL); } if (player->checkCopyRodThrowAfter()) { - mWork.lockon.field_0x28 = true; + lockon->field_0x28 = true; } else if (!attention->LockonTruth() && check_owner_action(mPadID, 0x400000)) { - mWork.lockon.field_0x28 = true; + lockon->field_0x28 = true; } else { - mWork.lockon.field_0x28 = false; + lockon->field_0x28 = false; } - if (mWork.lockon.field_0x28) { + if (lockon->field_0x28) { if (chkFlag(0x80080)) { - mWork.lockon.field_0x48 = cXyz(field_0x90 - field_0x5c.mCenter).abs(); - val11 = mWork.lockon.field_0x48; + lockon->field_0x48 = cXyz(mLastHitPos - mViewCache.mCenter).abs(); + val11 = lockon->field_0x48; } - val10 = mWork.lockon.field_0x48; + val10 = lockon->field_0x48; if (val23 < 40.0f) { val23 = 20.0f; } @@ -4762,10 +4258,10 @@ bool dCamera_c::lockonCamera(s32 param_0) { val24 = 20.0f; } val13 = 0.75f; - val15 = mWork.lockon.field_0x50.Degree(); + val15 = lockon->field_0x50.Degree(); val16 = 20.0f; val27 = 0.1f; - val22 = 0.4f; + val22 = 0.4f; } if (mpLockonTarget != NULL && mLockOnActorID != fpcM_ERROR_PROCESS_ID_e @@ -4778,8 +4274,8 @@ bool dCamera_c::lockonCamera(s32 param_0) { if (mpLockonTarget != NULL) { if (fopAcM_GetName(mpLockonTarget) == PROC_COW) { - val22 = 0.8f; val27 = 0.8f; + val22 = 0.8f; val23 = 5.0f; val24 = 10.0f; } else if (fopAcM_GetName(mpLockonTarget) == PROC_Obj_Cdoor) { @@ -4803,13 +4299,14 @@ bool dCamera_c::lockonCamera(s32 param_0) { } if (dComIfGp_getAttention()->LockEdge()) { - mCurCamStyleTimer = 0; - field_0x160 = 0; - mWork.lockon.field_0x2a = false; + field_0x160 = mCurCamStyleTimer = 0; + lockon->field_0x2a = false; } cSGlobe globe; + f32 curveWeight = mCamSetup.CurveWeight(); f32 lockon_release_distance = attention->LockonReleaseDistanse(); + f32 sp19C = 10000.0f; f32 fVar42; if (mpLockonTarget != NULL) { @@ -4821,6 +4318,16 @@ bool dCamera_c::lockonCamera(s32 param_0) { target_attention_pos.z = positionOf(mpLockonTarget).z; } + // this should probably be an ifdef, but we force it to be compiled + // to make the function large enough to stop doing inlining + if (!NDEBUG) { + if (mCamSetup.CheckFlag(0x8000)) { + //char name[28]; + fopAcM_getNameString(mpPlayerActor, NULL); + dDbVw_Report(0x1e0, 0x109, "%s", NULL); + } + } + if (check_owner_action(mPadID, 0x2000008)) { cXyz vec(0.0f, 0.0f, -90.0f); player_attention_pos += dCamMath::xyzRotateY(vec, directionOf(mpPlayerActor)); @@ -4833,9 +4340,9 @@ bool dCamera_c::lockonCamera(s32 param_0) { fVar42 = 1.0f; } - dCamMath::xyzHorizontalDistance(target_attention_pos, player_attention_pos); - + sp19C = dCamMath::xyzHorizontalDistance(target_attention_pos, player_attention_pos); } else { + OS_REPORT("NULL TARGET&&&&&&&&&&&&& \n"); globe.Val(mCamSetup.ParallelDist(), cSAngle::_0, directionOf(mpPlayerActor)); fVar42 = 1.0f; } @@ -4847,69 +4354,82 @@ bool dCamera_c::lockonCamera(s32 param_0) { ang1.Val(directionOf(mpPlayerActor)); } - bool bVar2 = false; - check_owner_action(mPadID, 0x100); - if (check_owner_action(mPadID, 0x2000008)) { - bVar2 = true; + bool sp0F = false; + bool sp0E = false; + bool sp0D = false; + if (check_owner_action(mPadID, 0x100)) { + sp0F = true; } - if (player->checkMagneBootsOn() && cBgW_CheckBWall(player->getMagneBootsTopVec()->y)) { - bVar2 = true; + if (check_owner_action(mPadID, 0x2000008)) { + sp0E = true; + } + if (player->checkMagneBootsOn()) { + sp0D = true; + Vec* magneBootsTopVec = player->getMagneBootsTopVec(); + if ((u8)cBgW_CheckBWall(magneBootsTopVec->y)) { + sp0E = true; + } } f32 fVar14; - if (mCurCamStyleTimer < lockon_change_timer && !mWork.lockon.field_0x2a) { + if (mCurCamStyleTimer < lockon_change_timer && !lockon->field_0x2a) { fVar14 = dCamMath::rationalBezierRatio((f32)mCurCamStyleTimer / lockon_change_timer, 0.5f); ang2 *= fVar14; } else if (mCurCamStyleTimer >= lockon_change_timer) { - mWork.lockon.field_0x2a = true; + lockon->field_0x2a = true; fVar14 = 1.0f; } - cSAngle ang3(field_0x5c.mDirection.U().Inv() - ang1); + cSAngle ang3(mViewCache.mDirection.U().Inv() - ang1); if (mCurCamStyleTimer != 0 && mCurCamStyleTimer < lockon_change_timer) { - if (mWork.lockon.field_0x2c == 0) { + if (lockon->field_0x2c == 0) { ang1 -= ang2; ang3 = -ang3; } else { ang1 += ang2; } } else if (ang3 < cSAngle::_0) { - mWork.lockon.field_0x2c = 0; + lockon->field_0x2c = 0; ang1 -= ang2; ang3 = -ang3; } else { - mWork.lockon.field_0x2c = 1; + lockon->field_0x2c = 1; ang1 += ang2; } cXyz attention_pos = attentionPos(mpPlayerActor); bool bVar4 = false; + if (bVar4) { + f32 sp31c = positionOf(mpPlayerActor).x; + f32 sp324 = positionOf(mpPlayerActor).x; + } + u8 unusedByte1 = 0; if (chkFlag(0x80080)) { cXyz attention_pos = attentionPos(mpPlayerActor); if (!pointInSight(&attention_pos)) { - if (mWork.lockon.field_0x14 == 0) { - mWork.lockon.field_0x30 = mWork.lockon.field_0x2c == 1 ? 0 : 1; + if (lockon->field_0x14 == 0) { + lockon->field_0x30 = lockon->field_0x2c == 1 ? 0 : 1; } bVar4 = true; - mWork.lockon.field_0x14 = 30; + lockon->field_0x14 = 30; } } - if (mWork.lockon.field_0x14 != 0) { - mWork.lockon.field_0x14--; - if (mWork.lockon.field_0x14 == 0 && mPadInfo.mMainStick.mLastValue <= 0.1f) { - mWork.lockon.field_0x14 = 1; + if (lockon->field_0x14 != 0) { + lockon->field_0x14--; + if (lockon->field_0x14 == 0 && mPadInfo.mMainStick.mLastValue <= 0.1f) { + lockon->field_0x14 = 1; } bVar4 = true; } - f32 fVar43 = 1.0f - std::fabsf(mPadInfo.mCStick.mLastPosY); + f32 fVar43 = 1.0f - fabsf(mPadInfo.mCStick.mLastPosY); f32 fVar44; if (bVar1) { if (mCurCamStyleTimer == 0) { - mWork.lockon.field_0x5c = 0.01f; + lockon->field_0x5c = 0.01f; } fVar44 = 0.25f; } else if (mBG.field_0xc0.field_0x44 == 0) { @@ -4918,9 +4438,9 @@ bool dCamera_c::lockonCamera(s32 param_0) { fVar44 = fVar14 * mCamSetup.Cushion4Base(); } - mWork.lockon.field_0x5c += (fVar44 - mWork.lockon.field_0x5c) * mCamSetup.CusCus(); - mWork.lockon.field_0x1c.x = attention_pos.x; - mWork.lockon.field_0x1c.z = attention_pos.z; + lockon->field_0x5c += (fVar44 - lockon->field_0x5c) * mCamSetup.CusCus(); + lockon->field_0x1c.x = attention_pos.x; + lockon->field_0x1c.z = attention_pos.z; f32 dVar37; if (bVar4) { @@ -4928,14 +4448,15 @@ bool dCamera_c::lockonCamera(s32 param_0) { } else { dVar37 = rangef(val25, val26, fVar42); } - mWork.lockon.field_0x1c.y += - ((attention_pos.y + dVar37) - mWork.lockon.field_0x1c.y) * mWork.lockon.field_0x5c; + lockon->field_0x1c.y += + ((attention_pos.y + dVar37) - lockon->field_0x1c.y) * lockon->field_0x5c; if (mCurCamStyleTimer == 0) { - cXyz vec = mWork.lockon.field_0x1c; - mWork.lockon.field_0x34.Val(field_0x5c.mCenter - vec); - if (field_0x5c.mCenter.x == vec.x && field_0x5c.mCenter.z == vec.z) { - mWork.lockon.field_0x34.U(directionOf(mpPlayerActor)); + cXyz vec = lockon->field_0x1c; + lockon->field_0x34.Val(mViewCache.mCenter - vec); + if (mViewCache.mCenter.x == vec.x && mViewCache.mCenter.z == vec.z) { + lockon->field_0x34.U(directionOf(mpPlayerActor)); + f32 sp180 = globe.R() * 0.05f; } } @@ -4947,60 +4468,60 @@ bool dCamera_c::lockonCamera(s32 param_0) { dVar37 = -dVar37; } f32 tmp = std::fabs(dVar28) < std::fabs(dVar37) ? dVar28 : dVar37; - f32 tmp2 = val4 < 0.5f ? val4 : 1.0f - val4; - fVar44a = val4 * globe.R() - val1 * (tmp * tmp2) * globe.R(); + tmp *= val4 < 0.5f ? val4 : 1.0f - val4; + fVar44a = val4 * globe.R() - tmp * globe.R() * val1; } else { fVar44a = globe.R() * 0.5f; fVar44a += fVar44a * ang3.Cos(); } cSAngle ang4 = globe.U(); - mWork.lockon.field_0x58 += (val6 - mWork.lockon.field_0x58) * mCamSetup.CusCus(); - mWork.lockon.field_0x54 += (val5 - mWork.lockon.field_0x54) * mCamSetup.CusCus(); + lockon->field_0x58 += (val6 - lockon->field_0x58) * mCamSetup.CusCus(); + lockon->field_0x54 += (val5 - lockon->field_0x54) * mCamSetup.CusCus(); cSAngle u, v; - cSAngle ang5 = globe.V() - mWork.lockon.field_0x34.V(); + cSAngle ang5 = globe.V() - lockon->field_0x34.V(); f32 r; if (bVar4) { - r = mWork.lockon.field_0x34.R(); - r *= std::fabsf(ang5.Cos()) * 0.75f; - u.Val(mWork.lockon.field_0x34.U() + (ang4 - mWork.lockon.field_0x34.U()) * mWork.lockon.field_0x58); - v.Val(mWork.lockon.field_0x34.V() + ang5 * 0.05f); + r = lockon->field_0x34.R(); + r = r * 0.75f * fabsf(ang5.Cos()); + u.Val(lockon->field_0x34.U() + (ang4 - lockon->field_0x34.U()) * lockon->field_0x58); + v.Val(lockon->field_0x34.V() + ang5 * 0.05f); } else { - r = mWork.lockon.field_0x34.R(); - r += (fVar44a - r) * mWork.lockon.field_0x54 * std::fabsf(ang5.Cos()); - u.Val(mWork.lockon.field_0x34.U() + (ang4 - mWork.lockon.field_0x34.U()) * mWork.lockon.field_0x58); - v.Val(mWork.lockon.field_0x34.V() + ang5 * mWork.lockon.field_0x58); + r = lockon->field_0x34.R(); + r = r + ((fVar44a - r) * lockon->field_0x54 * fabsf(ang5.Cos())); + u.Val(lockon->field_0x34.U() + (ang4 - lockon->field_0x34.U()) * lockon->field_0x58); + v.Val(lockon->field_0x34.V() + ang5 * lockon->field_0x58); } - mWork.lockon.field_0x34.Val(r, v, u); - field_0x5c.mCenter = mWork.lockon.field_0x1c + mWork.lockon.field_0x34.Xyz(); + lockon->field_0x34.Val(r, v, u); + mViewCache.mCenter = lockon->field_0x1c + lockon->field_0x34.Xyz(); dBgS_CamLinChk lin_chk; - if (mpLockonTarget != NULL && lineBGCheck(&attention_pos, &field_0x5c.mCenter, &lin_chk, 0x40b7)) { + if (mpLockonTarget != NULL && lineBGCheck(&attention_pos, &mViewCache.mCenter, &lin_chk, 0x40b7)) { cXyz target_attention_pos = attentionPos(mpLockonTarget); dBgS_CamLinChk lin_chk2; int iVar5 = 0; - if (lineBGCheckBoth(&attention_pos, &field_0x5c.mEye, &lin_chk2, 0x40b7)) { + if (lineBGCheckBoth(&attention_pos, &mViewCache.mEye, &lin_chk2, 0x40b7)) { iVar5 |= 1; - } else if (lineBGCheckBoth(&target_attention_pos, &field_0x5c.mEye, &lin_chk2, 0x40b7)) { + } else if (lineBGCheckBoth(&target_attention_pos, &mViewCache.mEye, &lin_chk2, 0x40b7)) { iVar5 |= 2; } if (iVar5 != 0) { cM3dGPla plane; dComIfG_Bgsp().GetTriPla(lin_chk, &plane); - field_0x5c.mCenter = lin_chk.GetCross(); - field_0x5c.mCenter += *plane.GetNP() * 5.0f; + mViewCache.mCenter = lin_chk.GetCross(); + mViewCache.mCenter += *plane.GetNP() * 5.0f; if (fopAcM_GetName(mpLockonTarget) != PROC_E_HZ) { ForceLockOff(mLockOnActorID); } } } - cSGlobe globe2 = field_0x5c.mEye - field_0x5c.mCenter; - cSAngle u2 = field_0x5c.mDirection.U(); - cSAngle v2 = field_0x5c.mDirection.V(); - f32 r2 = field_0x5c.mDirection.R(); + cSGlobe globe2 = mViewCache.mEye - mViewCache.mCenter; + cSAngle u2 = mViewCache.mDirection.U(); + cSAngle v2 = mViewCache.mDirection.V(); + f32 r2 = mViewCache.mDirection.R(); cSAngle ang6 = ang3 - ang2; f32 curve_weight = mCamSetup.CurveWeight(); f32 fVar47 = mPadInfo.mCStick.mLastPosX; @@ -5009,13 +4530,13 @@ bool dCamera_c::lockonCamera(s32 param_0) { } if (mPadInfo.mCStick.mLastPosY > mCamSetup.mCStick.SwTHH()) { - if (field_0x1fc != 1) { - mWork.lockon.field_0x40 = false; - mWork.lockon.field_0x4c = 0.0f; + if (mCStickUpLatch != 1) { + lockon->field_0x40 = false; + lockon->field_0x4c = 0.0f; } - field_0x1fc = 1; + mCStickUpLatch = 1; } else { - field_0x1fc = 0; + mCStickUpLatch = 0; } bool bVar3 = false; @@ -5023,32 +4544,32 @@ bool dCamera_c::lockonCamera(s32 param_0) { if (std::fabsf(fVar47) > 0.05f) { cSAngle ang = globe2.U() + cSAngle(dCamMath::rationalBezierRatio(fVar47, 0.5f) * 7.5f); fVar31 = std::fabsf(fVar47) - 0.05f; - mWork.lockon.field_0x42 = ang; - mWork.lockon.field_0x4c = 0.0f; + lockon->field_0x42 = ang; + lockon->field_0x4c = 0.0f; bVar3 = true; } else if (mCamParam.Flag(param_0, 0x100)) { if (mCurMode == 0) { - mWork.lockon.field_0x40 = true; + lockon->field_0x40 = true; cSAngle ang = globe2.U() - directionOf(mpPlayerActor); - mWork.lockon.field_0x42 = field_0x5c.mDirection.U() + - (globe2.U() - field_0x5c.mDirection.U()) * val22 * ang.Sin(); + lockon->field_0x42 = mViewCache.mDirection.U() + + (globe2.U() - mViewCache.mDirection.U()) * val22 * ang.Sin(); } if (mCurMode != 2) { ang1.Val(directionOf(mpPlayerActor)); } - } else if (mWork.lockon.field_0x40) { + } else if (lockon->field_0x40) { fVar31 = 1.0f; - mWork.lockon.field_0x4c = 1.0f; + lockon->field_0x4c = 1.0f; } else { - mWork.lockon.field_0x40 = false; - mWork.lockon.field_0x4c += (1.0f - mWork.lockon.field_0x4c) * 0.01f; + lockon->field_0x40 = false; + lockon->field_0x4c += (1.0f - lockon->field_0x4c) * 0.01f; } - if (mWork.lockon.field_0x40 || bVar3) { - u2 = globe2.U() + (mWork.lockon.field_0x42 - globe2.U()) * fVar31; + if (lockon->field_0x40 || bVar3) { + u2 = globe2.U() + (lockon->field_0x42 - globe2.U()) * fVar31; } else if (bVar4) { cSAngle ang; - if (mWork.lockon.field_0x30 == 1) { + if (lockon->field_0x30 == 1) { ang.Val(15.0f); } else { ang.Val(-15.0f); @@ -5057,39 +4578,40 @@ bool dCamera_c::lockonCamera(s32 param_0) { } else if (check_owner_action1(mPadID, 0x1200000)) { u2 = globe2.U(); } else { - f32 fVar45; - if (mpLockonTarget == NULL) { - fVar45 = fVar14 * 0.15f; + fVar31 = fVar14 * 0.15f; } else if (ang3 < ang2) { f32 ratio = dCamMath::rationalBezierRatio(-((f32)ang6.Val() / ang2.Val()), curve_weight); - fVar45 = val27 * ratio; + fVar31 = val27 * ratio; } else { cSAngle ang = ang2 + (cSAngle::_180 - ang2) * 0.5f; if (ang6 > ang) { ang6 = cSAngle::_180 - ang6; ang = cSAngle::_180 - ang; } - f32 ratio = dCamMath::rationalBezierRatio((f32)ang6.Val() / ang.Val(), curve_weight); - fVar45 = val27 + (val22 - val27) * ratio; + fVar31 = val27 + (val22 - val27) * dCamMath::rationalBezierRatio((f32)ang6.Val() / ang.Val(), curve_weight); } - if (!mWork.lockon.field_0x2a) { + if (!lockon->field_0x2a) { int iVar27 = lockon_change_timer >> 1; if (mCurCamStyleTimer < iVar27) { - fVar45 = lockon_change_cushion * ((f32)mCurCamStyleTimer / iVar27); + fVar31 = lockon_change_cushion * ((f32)mCurCamStyleTimer / iVar27); } else { - fVar45 = fVar45 * ((f32)(mCurCamStyleTimer - iVar27) / iVar27) + fVar31 = fVar31 * ((f32)(mCurCamStyleTimer - iVar27) / iVar27) + lockon_change_cushion * (1.0f - (f32)(mCurCamStyleTimer - iVar27) / iVar27); } } - ang6 = ang1.Inv() - field_0x5c.mDirection.U(); - std::fabsf(ang6.Degree()); - u2 += ang6 * fVar45 * mWork.lockon.field_0x4c; + ang6 = ang1.Inv() - mViewCache.mDirection.U(); + fabsf(ang6.Degree()) < 2.0f; + bool temp2 = false; + if (temp2) { + lockon->field_0x2a = true; + } + u2 += ang6 * fVar31 * lockon->field_0x4c; } - if (bVar2) { + if (sp0E) { cSAngle ang7 = ang1.Inv(); cSAngle ang8 = ang7 - u2; if (ang8 < cSAngle::_270) { @@ -5100,21 +4622,21 @@ bool dCamera_c::lockonCamera(s32 param_0) { } if (isPlayerCharging(mPadID)) { - if (mWork.lockon.field_0xc <= 20) { - f32 tmp = mWork.lockon.field_0xc / 20.0f; + if (lockon->field_0xc <= 20) { + f32 tmp = lockon->field_0xc / 20.0f; v2 += (charge_latitude - v2) * dCamMath::rationalBezierRatio(tmp, charge_b_ratio); setFlag(0x4000000); - mWork.lockon.field_0xc++; + lockon->field_0xc++; } else { v2 = charge_latitude; } } else { - mWork.lockon.field_0xc = 0; + lockon->field_0xc = 0; if (!mBG.field_0xc0.field_0x44 && !bVar1) { - v2 += (globe2.V() - v2) * fVar43 * std::fabsf(field_0x5c.mDirection.V().Cos()); + v2 += (globe2.V() - v2) * fVar43 * fabsf(mViewCache.mDirection.V().Cos()); } else { - cSAngle ang7 = mWork.lockon.field_0x34.V(); - ang7 *= cSAngle(mWork.lockon.field_0x34.U() - field_0x5c.mDirection.U()).Cos(); + cSAngle ang7 = lockon->field_0x34.V(); + ang7 *= cSAngle(lockon->field_0x34.U() - mViewCache.mDirection.U()).Cos(); ang7 *= val13; cSAngle ang8 = rangef(val15, val16, fVar42); ang8 *= 1.0f - val13; @@ -5131,21 +4653,23 @@ bool dCamera_c::lockonCamera(s32 param_0) { } else { f32 radius = globe2.R(); if (defaultRadius(val10, val11, &radius)) { - r2 = radius + (rangef(val10, val11, fVar42) - radius) * 0.02f; + f32 radius2 = radius; + f32 range = rangef(val10, val11, fVar42) - radius2; + r2 = radius2 + (range) * 0.02f; } else { r2 += (radius - r2) * 0.4f * fVar14; } } - field_0x5c.mDirection.Val(r2, v2, u2); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy += (rangef(val20, val21, fVar42) - field_0x5c.mFovy) * 0.15f * fVar14; + mViewCache.mDirection.Val(r2, v2, u2); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy += (rangef(val20, val21, fVar42) - mViewCache.mFovy) * 0.15f * fVar14; if (mpLockonTarget != NULL) { setFlag(0x2000); - field_0x188 = mpLockonTarget; + mpAuxTargetActor1 = mpLockonTarget; if (attention->GetLockonCount() >= 2 && mCamParam.Flag(param_0, 0x1000)) { - field_0x18c = attention->LockonTarget(1); + mpAuxTargetActor2 = attention->LockonTarget(1); } } @@ -5153,9 +4677,9 @@ bool dCamera_c::lockonCamera(s32 param_0) { daHorse_c* horse = dComIfGp_getHorseActor(); if (horse != NULL && horse->getLashDashStart()) { onHorseDush(); - mWork.lockon.field_0x44 = 16; - } else if (mWork.lockon.field_0x44 != 0) { - mWork.lockon.field_0x44--; + lockon->field_0x44 = 16; + } else if (lockon->field_0x44 != 0) { + lockon->field_0x44--; } } @@ -5211,73 +4735,78 @@ bool dCamera_c::talktoCamera(s32 param_0) { f32 val24 = mCamParam.Val(param_0, 24); f32 val17 = mCamParam.Val(param_0, 17); f32 val18 = mCamParam.Val(param_0, 18); + f32 fVar21 = 300.0f; fopAc_ac_c* ride_actor = NULL; + + TalkData* talk = (TalkData*)mWork; + + s32 zero = 0; bool uVar18 = true; daAlink_c* player = (daAlink_c*)mpPlayerActor; if (mCurCamStyleTimer == 0) { - mWork.talk.field_0x0 = 'TALK'; - mWork.talk.field_0x44 = 0; - mWork.talk.field_0x38 = -1; - mWork.talk.field_0x48 = 20; - mWork.talk.field_0x3c = 0; - mWork.talk.field_0x40 = -1; - mWork.talk.field_0x5c = 999.9f; - mWork.talk.field_0x60 = 999.9f; - mWork.talk.field_0x7c = 1.0f; - mWork.talk.field_0xb4 = cXyz::Zero; - mWork.talk.field_0x89 = false; - mWork.talk.field_0x88 = false; - mWork.talk.field_0x8c = field_0x88; - field_0x88 &= ~8; + talk->field_0x0 = 'TALK'; + talk->field_0x44 = 0; + talk->field_0x38 = -1; + talk->field_0x48 = 20; + talk->field_0x3c = zero; + talk->field_0x40 = -1; + talk->field_0x5c = 999.9f; + talk->field_0x60 = 999.9f; + talk->field_0x7c = 1.0f; + talk->field_0xb4 = cXyz::Zero; + talk->field_0x89 = false; + talk->field_0x88 = false; + talk->field_0x8c = mBumpCheckFlags; + mBumpCheckFlags &= ~8; if (!dComIfGp_evmng_cameraPlay()) { - mWork.talk.field_0x84 = 0; - mWork.talk.field_0x86 = 0; - mWork.talk.field_0x54 = val7; - mWork.talk.field_0x64 = val8; - mWork.talk.field_0x68 = val17; - mWork.talk.field_0x58 = val17; - mWork.talk.field_0x6c = val18; - mWork.talk.field_0x70 = mpPlayerActor; - mWork.talk.field_0x74 = mpLockonTarget; + talk->field_0x84 = 0; + talk->field_0x86 = 0; + talk->field_0x54 = val7; + talk->field_0x64 = val8; + talk->field_0x68 = val17; + talk->field_0x58 = val17; + talk->field_0x6c = val18; + talk->field_0x70 = mpPlayerActor; + talk->field_0x74 = mpLockonTarget; } else { int val; getEvIntData(&val, "Smoothless", 0); - mWork.talk.field_0x84 = val; + talk->field_0x84 = val; getEvIntData(&val, "Mode", 0); - mWork.talk.field_0x86 = val; - if (getEvFloatData(&mWork.talk.field_0x54, "Radius", val7)) { - getEvFloatData(&mWork.talk.field_0x64, "RadiusNear", mWork.talk.field_0x54); + talk->field_0x86 = val; + if (getEvFloatData(&talk->field_0x54, "Radius", val7)) { + getEvFloatData(&talk->field_0x64, "RadiusNear", talk->field_0x54); } else { - getEvFloatData(&mWork.talk.field_0x64, "RadiusNear", val8); + getEvFloatData(&talk->field_0x64, "RadiusNear", val8); } - getEvFloatData(&mWork.talk.field_0x5c, "Longitude", 999.9f); - if (getEvFloatData(&mWork.talk.field_0x68, "Fovy", val17)) { - getEvFloatData(&mWork.talk.field_0x6c, "FovyNear", mWork.talk.field_0x68); + getEvFloatData(&talk->field_0x5c, "Longitude", 999.9f); + if (getEvFloatData(&talk->field_0x68, "Fovy", val17)) { + getEvFloatData(&talk->field_0x6c, "FovyNear", talk->field_0x68); } else { - getEvFloatData(&mWork.talk.field_0x6c, "FovyNear", val18); + getEvFloatData(&talk->field_0x6c, "FovyNear", val18); } - mWork.talk.field_0x58 = mWork.talk.field_0x68; - getEvFloatData(&mWork.talk.field_0x60, "Latitude", 999.9f); - mWork.talk.field_0x70 = getEvActor("Listener", "@STARTER"); - mWork.talk.field_0x74 = getEvActor("Speaker", "@TALKPARTNER"); + talk->field_0x58 = talk->field_0x68; + getEvFloatData(&talk->field_0x60, "Latitude", 999.9f); + talk->field_0x70 = getEvActor("Listener", "@STARTER"); + talk->field_0x74 = getEvActor("Speaker", "@TALKPARTNER"); } - mWork.talk.field_0x78 = mWork.talk.field_0x74; - mWork.talk.field_0x80 = val2; + talk->field_0x78 = talk->field_0x74; + talk->field_0x80 = val2; } fopAc_ac_c* speaker; fopAc_ac_c* listener; fopAc_ac_c* msg_speaker = getMsgCmdSpeaker(); if (msg_speaker != NULL) { - listener = mWork.talk.field_0x70; + listener = talk->field_0x70; speaker = msg_speaker; } else if (dComIfGp_evmng_cameraPlay()) { - listener = mWork.talk.field_0x70; - speaker = mWork.talk.field_0x74; + listener = talk->field_0x70; + speaker = talk->field_0x74; } else { listener = mpPlayerActor; speaker = mpLockonTarget; @@ -5288,15 +4817,15 @@ bool dCamera_c::talktoCamera(s32 param_0) { } if (listener == NULL || speaker == NULL) { - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; return false; } - if (mWork.talk.field_0x78 != speaker) { + if (talk->field_0x78 != speaker) { mCurCamStyleTimer = 0; - field_0x158.field_0x0 = false; - mWork.talk.field_0x44 = 0; - mWork.talk.field_0x78 = speaker; + mStyleSettle.mFinished = false; + talk->field_0x44 = 0; + talk->field_0x78 = speaker; } bool bVar3 = false; @@ -5305,27 +4834,27 @@ bool dCamera_c::talktoCamera(s32 param_0) { || fopAcM_GetName(speaker) == PROC_DO || fopAcM_GetName(speaker) == PROC_NPC_NE) { bVar3 = true; - mWork.talk.field_0x54 = 260.0f; - mWork.talk.field_0x64 = 210.0f; - mWork.talk.field_0x68 = 45.0f; - mWork.talk.field_0x58 = 45.0f; - mWork.talk.field_0x6c = 48.0f; + talk->field_0x54 = 260.0f; + talk->field_0x64 = 210.0f; + talk->field_0x68 = 45.0f; + talk->field_0x58 = 45.0f; + talk->field_0x6c = 48.0f; val24 = 80.0f; val23 = 40.0f; } if (fopAcM_GetName(speaker) == PROC_Tag_Mwait && ((daTagMwait_c*)speaker)->checkEndMessage()) { - mWork.talk.field_0x3c = 35; + talk->field_0x3c = 35; speaker = daPy_py_c::getMidnaActor(); } - if (mWork.talk.field_0x86 != 0) { - mWork.talk.field_0x3c = mWork.talk.field_0x86; + if (talk->field_0x86 != 0) { + talk->field_0x3c = talk->field_0x86; } - mWork.talk.field_0x3c = getMsgCmdCut(mWork.talk.field_0x3c); - if (mWork.talk.field_0x3c != mWork.talk.field_0x40) { - mWork.talk.field_0x44 = 0; - mWork.talk.field_0x40 = mWork.talk.field_0x3c; + talk->field_0x3c = getMsgCmdCut(talk->field_0x3c); + if (talk->field_0x3c != talk->field_0x40) { + talk->field_0x44 = 0; + talk->field_0x40 = talk->field_0x3c; } cSAngle stack_134c = val16; @@ -5366,57 +4895,57 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - mWork.talk.field_0x28 = field_0x5c.mDirection; - mWork.talk.field_0xb4 = stack_148 - stack_154; - mWork.talk.field_0x30.Val(mWork.talk.field_0xb4); - mWork.talk.field_0xb4.normalize(); - stack_148 += mWork.talk.field_0xb4 * listener->attention_info.field_0xa; - stack_154 -= mWork.talk.field_0xb4 * speaker->attention_info.field_0xa; - if (mWork.talk.field_0x30.R() < 88.0f) { - mWork.talk.field_0x30.R(88.0f); + talk->field_0x28 = mViewCache.mDirection; + talk->field_0xb4 = stack_148 - stack_154; + talk->field_0x30.Val(talk->field_0xb4); + talk->field_0xb4.normalize(); + stack_148 += talk->field_0xb4 * listener->attention_info.field_0xa; + stack_154 -= talk->field_0xb4 * speaker->attention_info.field_0xa; + if (talk->field_0x30.R() < 88.0f) { + talk->field_0x30.R(88.0f); } f32 dVar25 = dCamMath::xyzHorizontalDistance(stack_148, stack_154); f32 fVar1 = dVar25 - 88.0f; fVar21 -= 88.0f; - mWork.talk.field_0x7c = fVar1 > fVar21 ? 1.0f : fVar1 / fVar21; - mWork.talk.field_0x80 = val3 + (val2 - val3) * mWork.talk.field_0x7c; - cXyz stack_160(val0, mWork.talk.field_0x80, val1); - f32 dVar21 = mWork.talk.field_0x64 + (mWork.talk.field_0x54 - mWork.talk.field_0x64) * mWork.talk.field_0x7c; + talk->field_0x7c = fVar1 > fVar21 ? 1.0f : fVar1 / fVar21; + talk->field_0x80 = val3 + (val2 - val3) * talk->field_0x7c; + cXyz stack_160(val0, talk->field_0x80, val1); + f32 dVar21 = talk->field_0x64 + (talk->field_0x54 - talk->field_0x64) * talk->field_0x7c; if (dVar21 < dVar25) { dVar21 = dVar25; } - mWork.talk.field_0x28.R(dVar21); + talk->field_0x28.R(dVar21); - if (mWork.talk.field_0x84 != 0) { - mWork.talk.field_0x48 = 1; + if (talk->field_0x84 != 0) { + talk->field_0x48 = 1; } else { - mWork.talk.field_0x48 = (int)(JMAFastSqrt(std::fabsf(field_0x5c.mDirection.R() - mWork.talk.field_0x28.R())) / 2.0f); - if (mWork.talk.field_0x48 < 2) { - mWork.talk.field_0x48 = 2; + talk->field_0x48 = (int)(JMAFastSqrt(std::fabsf(mViewCache.mDirection.R() - talk->field_0x28.R())) / 2.0f); + if (talk->field_0x48 < 2) { + talk->field_0x48 = 2; } - if (mWork.talk.field_0x48 > 22) { - mWork.talk.field_0x48 = 22; + if (talk->field_0x48 > 22) { + talk->field_0x48 = 22; } - mWork.talk.field_0x48 += 8; + talk->field_0x48 += 8; } cSAngle stack_1360; cSAngle stack_1364; - if (mWork.talk.field_0x5c >= -180.0f && mWork.talk.field_0x5c <= 360.0f) { - stack_1360.Val(mWork.talk.field_0x5c); - stack_1364 = stack_1360 - mWork.talk.field_0x30.U(); - mWork.talk.field_0x28.U(stack_1360); + if (talk->field_0x5c >= -180.0f && talk->field_0x5c <= 360.0f) { + stack_1360.Val(talk->field_0x5c); + stack_1364 = stack_1360 - talk->field_0x30.U(); + talk->field_0x28.U(stack_1360); } else if (fopAcM_GetName(speaker) == PROC_OBJ_KANBAN2 || fopAcM_GetName(speaker) == PROC_TAG_KMSG || fopAcM_GetName(speaker) == PROC_KNOB20 || fopAcM_GetName(speaker) == PROC_Obj_NamePlate) { stack_1360.Val(directionOf(speaker)); - stack_1364 = stack_1360 - mWork.talk.field_0x30.U(); - mWork.talk.field_0x28.U(stack_1360); + stack_1364 = stack_1360 - talk->field_0x30.U(); + talk->field_0x28.U(stack_1360); } else { - stack_1360.Val(field_0x5c.mDirection.U()); - stack_1364 = stack_1360 - mWork.talk.field_0x30.U(); + stack_1360.Val(mViewCache.mDirection.U()); + stack_1364 = stack_1360 - talk->field_0x30.U(); if (stack_1364 > cSAngle::_90) { stack_1364 = cSAngle::_90 - (stack_1364 - cSAngle::_90); } @@ -5435,11 +4964,11 @@ bool dCamera_c::talktoCamera(s32 param_0) { if (stack_1364 < cSAngle::_0 && stack_1364 > -stack_1358) { stack_1364 = -stack_1358; } - mWork.talk.field_0x28.U(mWork.talk.field_0x30.U() + stack_1364); + talk->field_0x28.U(talk->field_0x30.U() + stack_1364); } { - cSAngle stack_1368 = mWork.talk.field_0x28.U(); + cSAngle stack_1368 = talk->field_0x28.U(); cXyz stack_16c = stack_148; cXyz stack_178 = stack_154; cXyz stack_184 = stack_178 - stack_16c; @@ -5464,15 +4993,15 @@ bool dCamera_c::talktoCamera(s32 param_0) { cSGlobe stack_12d0 = stack_1b4; stack_12d0.U(stack_12c8.U() + stack_12d0.U()); stack_12c8.R(stack_12c8.R() * 0.5f * stack_136c.Cos() * 0.25f); - mWork.talk.field_0x4 = stack_1a8 + stack_12c8.Xyz() + stack_12d0.Xyz(); - mWork.talk.field_0xc0 = stack_178; + talk->field_0x4 = stack_1a8 + stack_12c8.Xyz() + stack_12d0.Xyz(); + talk->field_0xc0 = stack_178; } cSAngle stack_1370; - if (mWork.talk.field_0x60 != 999.9f) { - stack_1370.Val(mWork.talk.field_0x60); + if (talk->field_0x60 != 999.9f) { + stack_1370.Val(talk->field_0x60); } else { - stack_1370 = mWork.talk.field_0x30.V() * (stack_1364.Cos() + 0.1f) * val6 + cSAngle(val12); + stack_1370 = talk->field_0x30.V() * (stack_1364.Cos() + 0.1f) * val6 + cSAngle(val12); if (stack_1370 > stack_134c) { stack_1370 = stack_134c; } @@ -5480,43 +5009,43 @@ bool dCamera_c::talktoCamera(s32 param_0) { stack_1370 = stack_1350; } } - mWork.talk.field_0x28.V(stack_1370); + talk->field_0x28.V(stack_1370); cSAngle stack_1374; if (player->checkRide()) { ride_actor = player->getRideActor(); } - if (mWork.talk.field_0x30.U() - mWork.talk.field_0x28.U() > cSAngle::_0) { + if (talk->field_0x30.U() - talk->field_0x28.U() > cSAngle::_0) { stack_1374 = cSAngle(10.0f); } else { stack_1374 = cSAngle(-10.0f); } - mWork.talk.field_0x10 = mWork.talk.field_0x4 + mWork.talk.field_0x28.Xyz(); - mWork.talk.field_0x58 = mWork.talk.field_0x6c + (mWork.talk.field_0x68 - mWork.talk.field_0x6c) * mWork.talk.field_0x7c; + talk->field_0x10 = talk->field_0x4 + talk->field_0x28.Xyz(); + talk->field_0x58 = talk->field_0x6c + (talk->field_0x68 - talk->field_0x6c) * talk->field_0x7c; bool bVar13 = false; - if (fopAcM_GetName(speaker) == PROC_MIDNA && field_0x194) { - mWork.talk.field_0x4 = attentionPos(speaker); - mWork.talk.field_0x4.y -= 35.0f; - f32 fVar36 = mWork.talk.field_0x30.U() - mWork.talk.field_0x28.U() > cSAngle::_0 ? -40.0f : 40.0f; - mWork.talk.field_0x28.U(cSAngle(fVar36) + directionOf(listener)); - mWork.talk.field_0x28.V(cSAngle(10.0f)); - mWork.talk.field_0x28.R(200.0f); - mWork.talk.field_0x10 = mWork.talk.field_0x4 + mWork.talk.field_0x28.Xyz(); - mWork.talk.field_0x48 = 16; - mWork.talk.field_0x58 = 55.0f; - mWork.talk.field_0x88 = true; + if (fopAcM_GetName(speaker) == PROC_MIDNA && mMidnaRidingAndVisible) { + talk->field_0x4 = attentionPos(speaker); + talk->field_0x4.y -= 35.0f; + f32 fVar36 = talk->field_0x30.U() - talk->field_0x28.U() > cSAngle::_0 ? -40.0f : 40.0f; + talk->field_0x28.U(cSAngle(fVar36) + directionOf(listener)); + talk->field_0x28.V(cSAngle(10.0f)); + talk->field_0x28.R(200.0f); + talk->field_0x10 = talk->field_0x4 + talk->field_0x28.Xyz(); + talk->field_0x48 = 16; + talk->field_0x58 = 55.0f; + talk->field_0x88 = true; bVar13 = true; } if (bVar3) { - mWork.talk.field_0x4.y = attentionPos(speaker).y - 10.0f; + talk->field_0x4.y = attentionPos(speaker).y - 10.0f; } if (mCamParam.Flag(param_0, 0x100)) { - mWork.talk.field_0x28.U(field_0x5c.mDirection.U()); + talk->field_0x28.U(mViewCache.mDirection.U()); } cSAngle stack_1378; @@ -5525,40 +5054,40 @@ bool dCamera_c::talktoCamera(s32 param_0) { cXyz stack_1c0 = cXyz::Zero; for (i = 0; i < 36; i++) { - stack_1378 = mWork.talk.field_0x28.U() - mWork.talk.field_0x30.U(); + stack_1378 = talk->field_0x28.U() - talk->field_0x30.U(); if (std::fabsf(stack_1378.Degree()) < 10.0f) { - mWork.talk.field_0x28.U(mWork.talk.field_0x28.U() + stack_1374); + talk->field_0x28.U(talk->field_0x28.U() + stack_1374); } else { if (!bVar13) { - f32 radius = radiusActorInSight(listener, speaker, &mWork.talk.field_0x4, - &mWork.talk.field_0x10, mWork.talk.field_0x58, + f32 radius = radiusActorInSight(listener, speaker, &talk->field_0x4, + &talk->field_0x10, talk->field_0x58, 0, 0.1f); if (radius > 0.0f) { - mWork.talk.field_0x28.R(mWork.talk.field_0x28.R() + radius); - mWork.talk.field_0x10 = mWork.talk.field_0x4 + mWork.talk.field_0x28.Xyz(); + talk->field_0x28.R(talk->field_0x28.R() + radius); + talk->field_0x10 = talk->field_0x4 + talk->field_0x28.Xyz(); } } - if (!lineBGCheck(&stack_148, &mWork.talk.field_0x10, mWork.talk.field_0x8c) - && !lineBGCheck(&mWork.talk.field_0x4, &mWork.talk.field_0x10, mWork.talk.field_0x8c) - && !lineCollisionCheck(stack_148, mWork.talk.field_0x10, listener, speaker, ride_actor)) + if (!lineBGCheck(&stack_148, &talk->field_0x10, talk->field_0x8c) + && !lineBGCheck(&talk->field_0x4, &talk->field_0x10, talk->field_0x8c) + && !lineCollisionCheck(stack_148, talk->field_0x10, listener, speaker, ride_actor)) { - if (!lineBGCheck(&stack_154, &mWork.talk.field_0x10, mWork.talk.field_0x8c) - && !lineCollisionCheck(stack_154, mWork.talk.field_0x10, listener, speaker, ride_actor)) + if (!lineBGCheck(&stack_154, &talk->field_0x10, talk->field_0x8c) + && !lineCollisionCheck(stack_154, talk->field_0x10, listener, speaker, ride_actor)) { bVar2 = true; break; } - stack_1c0 = mWork.talk.field_0x10; + stack_1c0 = talk->field_0x10; } - mWork.talk.field_0x28.U(mWork.talk.field_0x28.U() + stack_1374); + talk->field_0x28.U(talk->field_0x28.U() + stack_1374); - if (mWork.talk.field_0x60 != 999.9f) { - stack_1370.Val(mWork.talk.field_0x60); + if (talk->field_0x60 != 999.9f) { + stack_1370.Val(talk->field_0x60); } else { - stack_1370 = mWork.talk.field_0x30.V() - * (cSAngle(mWork.talk.field_0x30.U() - mWork.talk.field_0x28.U()).Cos() + 0.1f) + stack_1370 = talk->field_0x30.V() + * (cSAngle(talk->field_0x30.U() - talk->field_0x28.U()).Cos() + 0.1f) * val6 + cSAngle(val12); if (stack_1370 > stack_134c) { stack_1370 = stack_134c; @@ -5568,33 +5097,33 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - mWork.talk.field_0x28.V(stack_1370); + talk->field_0x28.V(stack_1370); - if (!mWork.talk.field_0x88) { - mWork.talk.field_0x4 = relationalPos2(listener, speaker, &stack_160, 0.25f, - mWork.talk.field_0x28.U()); + if (!talk->field_0x88) { + talk->field_0x4 = relationalPos2(listener, speaker, &stack_160, 0.25f, + talk->field_0x28.U()); } - mWork.talk.field_0x10 = mWork.talk.field_0x4 + mWork.talk.field_0x28.Xyz(); + talk->field_0x10 = talk->field_0x4 + talk->field_0x28.Xyz(); } } if (!bVar2) { stack_1c0.set(0.0f, 15.0f, -20.0f); - mWork.talk.field_0x4 = relationalPos(mpPlayerActor, &stack_1c0); + talk->field_0x4 = relationalPos(mpPlayerActor, &stack_1c0); stack_1c0.set(60.0f, 70.0f, -200.0f); - mWork.talk.field_0x10 = relationalPos(mpPlayerActor, &stack_1c0); - mWork.talk.field_0x28.Val(mWork.talk.field_0x10 - mWork.talk.field_0x4); + talk->field_0x10 = relationalPos(mpPlayerActor, &stack_1c0); + talk->field_0x28.Val(talk->field_0x10 - talk->field_0x4); } - mWork.talk.field_0xcc = stack_148; - mWork.talk.field_0xd8 = stack_154; - mWork.talk.field_0x4c = mWork.talk.field_0x48 * (mWork.talk.field_0x48 + 1) >> 1; + talk->field_0xcc = stack_148; + talk->field_0xd8 = stack_154; + talk->field_0x4c = talk->field_0x48 * (talk->field_0x48 + 1) >> 1; - if (mWork.talk.field_0x38 == -1) { - if (mWork.talk.field_0x30.U() - mWork.talk.field_0x28.U() > cSAngle::_0) { - mWork.talk.field_0x38 = 0; + if (talk->field_0x38 == -1) { + if (talk->field_0x30.U() - talk->field_0x28.U() > cSAngle::_0) { + talk->field_0x38 = 0; } else { - mWork.talk.field_0x38 = 1; + talk->field_0x38 = 1; } } } @@ -5609,25 +5138,25 @@ bool dCamera_c::talktoCamera(s32 param_0) { if (mCurCamStyleTimer == 0) { if (!bVar13) { - mWork.talk.field_0x28.U(cSAngle(15.0f) + directionOf(listener)); - mWork.talk.field_0x28.V(cSAngle(5.0f)); - mWork.talk.field_0x28.R(140.0f); + talk->field_0x28.U(cSAngle(15.0f) + directionOf(listener)); + talk->field_0x28.V(cSAngle(5.0f)); + talk->field_0x28.R(140.0f); } else { - mWork.talk.field_0x28.U(cSAngle(30.0f) + directionOf(listener)); - mWork.talk.field_0x28.V(cSAngle(25.0f)); - mWork.talk.field_0x28.R(180.0f); + talk->field_0x28.U(cSAngle(30.0f) + directionOf(listener)); + talk->field_0x28.V(cSAngle(25.0f)); + talk->field_0x28.R(180.0f); } - mWork.talk.field_0x10 = mWork.talk.field_0x4 + mWork.talk.field_0x28.Xyz(); - mWork.talk.field_0x48 = 16; - mWork.talk.field_0x58 = 55.0f; + talk->field_0x10 = talk->field_0x4 + talk->field_0x28.Xyz(); + talk->field_0x48 = 16; + talk->field_0x58 = 55.0f; } - mWork.talk.field_0x4 = positionOf(listener); + talk->field_0x4 = positionOf(listener); if (!bVar13) { - mWork.talk.field_0x4.y += 110.0f; + talk->field_0x4.y += 110.0f; } else { - mWork.talk.field_0x4.y += 10.0f; + talk->field_0x4.y += 10.0f; } } @@ -5645,15 +5174,15 @@ bool dCamera_c::talktoCamera(s32 param_0) { cXyz stack_208; fopAc_ac_c* actor1; fopAc_ac_c* actor2; - int iVar5 = mWork.talk.field_0x3c; + int iVar5 = talk->field_0x3c; switch (iVar5) { case 0: break; case 50: - mWork.talk.field_0x48 = 1; - mWork.talk.field_0x4c = 1.0f; + talk->field_0x48 = 1; + talk->field_0x4c = 1.0f; iVar5 = 0; break; @@ -5689,25 +5218,25 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - field_0x5c.mCenter = stack_208; + mViewCache.mCenter = stack_208; - if (mWork.talk.field_0x44 == 0) { + if (talk->field_0x44 == 0) { cXyz stack_214 = stack_1fc; stack_214.y = stack_1e4.y; cXyz stack_220 = stack_208; stack_220.y = stack_1f0.y; - field_0x5c.mDirection.Val(stack_214 - stack_220); + mViewCache.mDirection.Val(stack_214 - stack_220); if (iVar5 == 62) { - field_0x5c.mDirection.U(directionOf(speaker)); + mViewCache.mDirection.U(directionOf(speaker)); } - field_0x5c.mDirection.R(125.0f); - mWork.talk.field_0x1c.y = stack_1f0.y - 25.0f - stack_208.y; - field_0x158.field_0x0 = true; + mViewCache.mDirection.R(125.0f); + talk->field_0x1c.y = stack_1f0.y - 25.0f - stack_208.y; + mStyleSettle.mFinished = true; } - field_0x5c.mCenter.y = stack_208.y + mWork.talk.field_0x1c.y; - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = 60.0f; + mViewCache.mCenter.y = stack_208.y + talk->field_0x1c.y; + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = 60.0f; hideActor(actor1); break; @@ -5722,7 +5251,7 @@ bool dCamera_c::talktoCamera(s32 param_0) { actor2 = speaker; } - if (mWork.talk.field_0x44 == 0) { + if (talk->field_0x44 == 0) { if (iVar5 != 39) { stack_1e4 = talkEyePos(actor2); stack_1f0 = talkEyePos(actor1); @@ -5747,22 +5276,22 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - field_0x5c.mCenter = stack_208; + mViewCache.mCenter = stack_208; cXyz stack_22c = stack_1fc; stack_22c.y = stack_1e4.y; cXyz stack_238 = stack_208; stack_238.y = stack_1f0.y; - field_0x5c.mDirection.Val(stack_22c - stack_238); + mViewCache.mDirection.Val(stack_22c - stack_238); if (iVar5 == 64) { - field_0x5c.mDirection.U(directionOf(speaker)); + mViewCache.mDirection.U(directionOf(speaker)); } - field_0x5c.mDirection.R(125.0f); - field_0x5c.mDirection.V(cSAngle(35.0f)); - mWork.talk.field_0x1c.y = stack_1f0.y - 25.0f - stack_208.y; - field_0x158.field_0x0 = true; - field_0x5c.mCenter.y = stack_208.y + mWork.talk.field_0x1c.y; - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = 60.0f; + mViewCache.mDirection.R(125.0f); + mViewCache.mDirection.V(cSAngle(35.0f)); + talk->field_0x1c.y = stack_1f0.y - 25.0f - stack_208.y; + mStyleSettle.mFinished = true; + mViewCache.mCenter.y = stack_208.y + talk->field_0x1c.y; + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = 60.0f; } hideActor(actor2); @@ -5797,25 +5326,25 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - field_0x5c.mCenter = stack_208; + mViewCache.mCenter = stack_208; - if (mWork.talk.field_0x44 == 0) { + if (talk->field_0x44 == 0) { cXyz stack_244 = stack_1fc; stack_244.y = stack_1e4.y; cXyz stack_250 = stack_208; stack_250.y = stack_1f0.y; - field_0x5c.mDirection.Val(stack_244 - stack_250); + mViewCache.mDirection.Val(stack_244 - stack_250); if (iVar5 == 61) { - field_0x5c.mDirection.U(directionOf(speaker)); + mViewCache.mDirection.U(directionOf(speaker)); } - field_0x5c.mDirection.R(76.0f); - mWork.talk.field_0x1c.y = stack_1f0.y - 10.0f - stack_208.y; - field_0x158.field_0x0 = true; + mViewCache.mDirection.R(76.0f); + talk->field_0x1c.y = stack_1f0.y - 10.0f - stack_208.y; + mStyleSettle.mFinished = true; } - field_0x5c.mCenter.y = stack_208.y + mWork.talk.field_0x1c.y; - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = 50.0f; + mViewCache.mCenter.y = stack_208.y + talk->field_0x1c.y; + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = 50.0f; hideActor(actor1); break; @@ -5848,25 +5377,25 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - field_0x5c.mCenter = stack_208; + mViewCache.mCenter = stack_208; - if (mWork.talk.field_0x44 == 0) { + if (talk->field_0x44 == 0) { cXyz stack_25c = stack_1fc; stack_25c.y = stack_1e4.y; cXyz stack_268 = stack_1f0; stack_268.y = stack_1f0.y; - field_0x5c.mDirection.Val(stack_25c - stack_268); + mViewCache.mDirection.Val(stack_25c - stack_268); if (iVar5 == 63) { - field_0x5c.mDirection.U(directionOf(speaker)); + mViewCache.mDirection.U(directionOf(speaker)); } - field_0x5c.mDirection.R(125.0f); - mWork.talk.field_0x1c.y = stack_1f0.y - 15.0f - stack_208.y; - field_0x158.field_0x0 = true; + mViewCache.mDirection.R(125.0f); + talk->field_0x1c.y = stack_1f0.y - 15.0f - stack_208.y; + mStyleSettle.mFinished = true; } - field_0x5c.mCenter.y = stack_208.y + mWork.talk.field_0x1c.y; - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = 45.0f; + mViewCache.mCenter.y = stack_208.y + talk->field_0x1c.y; + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = 45.0f; hideActor(actor1); break; @@ -5901,36 +5430,36 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - mWork.talk.field_0x90 = stack_208; + talk->field_0x90 = stack_208; - if (mWork.talk.field_0x44 == 0) { + if (talk->field_0x44 == 0) { cXyz stack_274 = stack_1fc; stack_274.y = stack_1e4.y; cXyz stack_280 = stack_1f0; stack_280.y = stack_1f0.y; - mWork.talk.field_0xa8.Val(stack_274 - stack_280); - mWork.talk.field_0xa8.R(190.0f); + talk->field_0xa8.Val(stack_274 - stack_280); + talk->field_0xa8.R(190.0f); if (iVar5 == 0x41) { - mWork.talk.field_0xa8.U(directionOf(speaker)); + talk->field_0xa8.U(directionOf(speaker)); } - mWork.talk.field_0x1c.y = stack_1f0.y - 40.0f - stack_208.y; - field_0x158.field_0x0 = true; + talk->field_0x1c.y = stack_1f0.y - 40.0f - stack_208.y; + mStyleSettle.mFinished = true; } - mWork.talk.field_0x90.y = stack_208.y + mWork.talk.field_0x1c.y; - mWork.talk.field_0x9c = mWork.talk.field_0x90 + mWork.talk.field_0xa8.Xyz(); - mWork.talk.field_0xb0 = 45.0f; + talk->field_0x90.y = stack_208.y + talk->field_0x1c.y; + talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); + talk->field_0xb0 = 45.0f; cXyz stack_28c = attentionPos(actor1); - if (lineBGCheck(&stack_28c, &mWork.talk.field_0x9c, mWork.talk.field_0x8c) - || lineCollisionCheck(stack_28c, mWork.talk.field_0x9c, listener, speaker, NULL)) + if (lineBGCheck(&stack_28c, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(stack_28c, talk->field_0x9c, listener, speaker, NULL)) { iVar5 = 0; } else { - field_0x5c.mCenter = mWork.talk.field_0x90; - field_0x5c.mEye = mWork.talk.field_0x9c; - field_0x5c.mDirection = mWork.talk.field_0xa8; - field_0x5c.mFovy = mWork.talk.field_0xb0; + mViewCache.mCenter = talk->field_0x90; + mViewCache.mEye = talk->field_0x9c; + mViewCache.mDirection = talk->field_0xa8; + mViewCache.mFovy = talk->field_0xb0; hideActor(actor2); } break; @@ -5943,7 +5472,7 @@ bool dCamera_c::talktoCamera(s32 param_0) { actor2 = listener; stack_1e4 = talkEyePos(listener); stack_1f0 = talkEyePos(speaker); - cSGlobe stack_12d8 = mWork.talk.field_0x30; + cSGlobe stack_12d8 = talk->field_0x30; stack_1fc = talkBasePos(listener); stack_208 = talkBasePos(speaker); if (bVar3) { @@ -5967,19 +5496,19 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - field_0x5c.mCenter = stack_208; - field_0x5c.mCenter.y = stack_1f0.y - 10.0f - mWork.talk.field_0x7c * 10.0f; + mViewCache.mCenter = stack_208; + mViewCache.mCenter.y = stack_1f0.y - 10.0f - talk->field_0x7c * 10.0f; - if (mWork.talk.field_0x44 == 0) { - field_0x5c.mDirection.Val(stack_1e4 - stack_1f0); - field_0x5c.mDirection.R(field_0x5c.mDirection.R() - 5.0f); - field_0x158.field_0x0 = true; + if (talk->field_0x44 == 0) { + mViewCache.mDirection.Val(stack_1e4 - stack_1f0); + mViewCache.mDirection.R(mViewCache.mDirection.R() - 5.0f); + mStyleSettle.mFinished = true; } - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); f32 tmp1 = 35.0f; f32 tmp2 = 85.0f; - field_0x5c.mFovy = tmp2 + (tmp1 - tmp2) * mWork.talk.field_0x7c; + mViewCache.mFovy = tmp2 + (tmp1 - tmp2) * talk->field_0x7c; cXyz stack_298 = attentionPos(actor1); hideActor(actor2); break; @@ -5990,7 +5519,7 @@ bool dCamera_c::talktoCamera(s32 param_0) { int uVar17; if (iVar5 == 18) { actor1 = listener; - uVar17 = mWork.talk.field_0x38; + uVar17 = talk->field_0x38; stack_1e4 = talkEyePos(speaker); stack_1f0 = talkEyePos(listener); stack_1fc = talkBasePos(speaker); @@ -6003,7 +5532,7 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } else { actor1 = speaker; - uVar17 = mWork.talk.field_0x38 ? 0 : 1; + uVar17 = talk->field_0x38 ? 0 : 1; stack_1e4 = talkEyePos(listener); stack_1f0 = talkEyePos(speaker); stack_1fc = talkBasePos(listener); @@ -6016,14 +5545,14 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - if (mWork.talk.field_0x44 == 0) { - field_0x158.field_0x0 = true; + if (talk->field_0x44 == 0) { + mStyleSettle.mFinished = true; cXyz stack_2a4(0.0f, -15.0f, 15.0f); cSGlobe stack_12e0 = stack_1e4 - attentionPos(actor1); cSGlobe stack_12e8 = stack_2a4; stack_12e8.U(stack_12e8.U() + stack_12e0.U()); - mWork.talk.field_0x1c = stack_208 + stack_12e8.Xyz(); - mWork.talk.field_0x1c.y += stack_1f0.y - stack_208.y; + talk->field_0x1c = stack_208 + stack_12e8.Xyz(); + talk->field_0x1c.y += stack_1f0.y - stack_208.y; f32 fVar36; if (uVar17) { fVar36 = -80.0f; @@ -6031,23 +5560,23 @@ bool dCamera_c::talktoCamera(s32 param_0) { fVar36 = 75.0f; } cSAngle stack_137c = fVar36; - mWork.talk.field_0x90 = mWork.talk.field_0x1c; - mWork.talk.field_0xa8.Val(120.0f, cSAngle::_0, stack_137c + directionOf(actor1)); + talk->field_0x90 = talk->field_0x1c; + talk->field_0xa8.Val(120.0f, cSAngle::_0, stack_137c + directionOf(actor1)); } - mWork.talk.field_0x9c = mWork.talk.field_0x90 + mWork.talk.field_0xa8.Xyz(); - mWork.talk.field_0xb0 = 50.0f; + talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); + talk->field_0xb0 = 50.0f; cXyz stack_2b0 = attentionPos(actor1); - if (lineBGCheck(&stack_2b0, &mWork.talk.field_0x9c, mWork.talk.field_0x8c) - || lineCollisionCheck(stack_2b0, mWork.talk.field_0x9c, listener, speaker, NULL)) + if (lineBGCheck(&stack_2b0, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(stack_2b0, talk->field_0x9c, listener, speaker, NULL)) { iVar5 = 0; } else { - field_0x5c.mCenter = mWork.talk.field_0x90; - field_0x5c.mEye = mWork.talk.field_0x9c; - field_0x5c.mDirection = mWork.talk.field_0xa8; - field_0x5c.mFovy = mWork.talk.field_0xb0; + mViewCache.mCenter = talk->field_0x90; + mViewCache.mEye = talk->field_0x9c; + mViewCache.mDirection = talk->field_0xa8; + mViewCache.mFovy = talk->field_0xb0; } break; } @@ -6057,7 +5586,7 @@ bool dCamera_c::talktoCamera(s32 param_0) { int uVar17; if (iVar5 == 24) { actor1 = listener; - uVar17 = mWork.talk.field_0x38; + uVar17 = talk->field_0x38; stack_1e4 = talkEyePos(speaker); stack_1f0 = talkEyePos(listener); stack_1fc = talkBasePos(speaker); @@ -6070,7 +5599,7 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } else { actor1 = speaker; - uVar17 = mWork.talk.field_0x38 ? 0 : 1; + uVar17 = talk->field_0x38 ? 0 : 1; stack_1e4 = talkEyePos(listener); stack_1f0 = talkEyePos(speaker); stack_1fc = talkBasePos(listener); @@ -6083,13 +5612,13 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - if (mWork.talk.field_0x44 == 0) { - field_0x158.field_0x0 = true; + if (talk->field_0x44 == 0) { + mStyleSettle.mFinished = true; cXyz stack_2bc(0.0f, -10.0f, 20.0f); cSGlobe stack_12f0 = stack_1e4 - attentionPos(actor1); cSGlobe stack_12f8 = stack_2bc; stack_12f8.U(stack_12f8.U() + stack_12f0.U()); - mWork.talk.field_0x1c = stack_1f0 + stack_12f8.Xyz(); + talk->field_0x1c = stack_1f0 + stack_12f8.Xyz(); f32 fVar36; if (uVar17) { fVar36 = -45.0f; @@ -6097,23 +5626,23 @@ bool dCamera_c::talktoCamera(s32 param_0) { fVar36 = 45.0f; } cSAngle stack_1380 = fVar36; - mWork.talk.field_0x90 = mWork.talk.field_0x1c; - mWork.talk.field_0xa8.Val(120.0f, cSAngle(25.0f), stack_1380 + directionOf(actor1)); + talk->field_0x90 = talk->field_0x1c; + talk->field_0xa8.Val(120.0f, cSAngle(25.0f), stack_1380 + directionOf(actor1)); } - mWork.talk.field_0x9c = mWork.talk.field_0x90 + mWork.talk.field_0xa8.Xyz(); - mWork.talk.field_0xb0 = 45.0f; + talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); + talk->field_0xb0 = 45.0f; cXyz stack_2c8 = attentionPos(actor1); - if (lineBGCheck(&stack_2c8, &mWork.talk.field_0x9c, mWork.talk.field_0x8c) - || lineCollisionCheck(stack_2c8, mWork.talk.field_0x9c, listener, speaker, NULL)) + if (lineBGCheck(&stack_2c8, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(stack_2c8, talk->field_0x9c, listener, speaker, NULL)) { iVar5 = 0; } else { - field_0x5c.mCenter = mWork.talk.field_0x90; - field_0x5c.mEye = mWork.talk.field_0x9c; - field_0x5c.mDirection = mWork.talk.field_0xa8; - field_0x5c.mFovy = mWork.talk.field_0xb0; + mViewCache.mCenter = talk->field_0x90; + mViewCache.mEye = talk->field_0x9c; + mViewCache.mDirection = talk->field_0xa8; + mViewCache.mFovy = talk->field_0xb0; } break; } @@ -6124,7 +5653,7 @@ bool dCamera_c::talktoCamera(s32 param_0) { if (iVar5 != 26) { actor1 = listener; actor2 = speaker; - uVar17 = mWork.talk.field_0x38; + uVar17 = talk->field_0x38; stack_1e4 = talkEyePos(speaker); stack_1f0 = talkEyePos(listener); stack_1fc = talkBasePos(speaker); @@ -6138,7 +5667,7 @@ bool dCamera_c::talktoCamera(s32 param_0) { } else { actor1 = speaker; actor2 = listener; - uVar17 = mWork.talk.field_0x38 ? 0 : 1; + uVar17 = talk->field_0x38 ? 0 : 1; stack_1e4 = talkEyePos(listener); stack_1f0 = talkEyePos(speaker); stack_1fc = talkBasePos(listener); @@ -6151,8 +5680,8 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - if (mWork.talk.field_0x44 == 0) { - field_0x158.field_0x0 = true; + if (talk->field_0x44 == 0) { + mStyleSettle.mFinished = true; cXyz stack_2d4(0.0f, -30.0f, 20.0f); if (bVar3 && iVar5 == 27) { stack_2d4.y = -5.0f; @@ -6160,7 +5689,7 @@ bool dCamera_c::talktoCamera(s32 param_0) { cSGlobe stack_1300 = attentionPos(actor2) - attentionPos(actor1); cSGlobe stack_1308 = stack_2d4; stack_1308.U(stack_1308.U() + stack_1300.U()); - mWork.talk.field_0x1c = stack_1f0 + stack_1308.Xyz(); + talk->field_0x1c = stack_1f0 + stack_1308.Xyz(); f32 fVar36; if (uVar17) { fVar36 = -30.0f; @@ -6174,23 +5703,23 @@ bool dCamera_c::talktoCamera(s32 param_0) { fVar36 = -35.0f; } cSAngle stack_1388 = fVar36; - mWork.talk.field_0x90 = mWork.talk.field_0x1c; - mWork.talk.field_0xa8.Val(90.0f, cSAngle(-35.0f), stack_1384 + directionOf(actor1)); + talk->field_0x90 = talk->field_0x1c; + talk->field_0xa8.Val(90.0f, cSAngle(-35.0f), stack_1384 + directionOf(actor1)); } - mWork.talk.field_0x9c = mWork.talk.field_0x90 + mWork.talk.field_0xa8.Xyz(); - mWork.talk.field_0xb0 = 55.0f; + talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); + talk->field_0xb0 = 55.0f; cXyz stack_2e0 = attentionPos(actor1); - if (lineBGCheck(&stack_2e0, &mWork.talk.field_0x9c, mWork.talk.field_0x8c) - || lineCollisionCheck(stack_2e0, mWork.talk.field_0x9c, listener, speaker, NULL)) + if (lineBGCheck(&stack_2e0, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(stack_2e0, talk->field_0x9c, listener, speaker, NULL)) { iVar5 = 0; } else { - field_0x5c.mCenter = mWork.talk.field_0x90; - field_0x5c.mEye = mWork.talk.field_0x9c; - field_0x5c.mDirection = mWork.talk.field_0xa8; - field_0x5c.mFovy = mWork.talk.field_0xb0; + mViewCache.mCenter = talk->field_0x90; + mViewCache.mEye = talk->field_0x9c; + mViewCache.mDirection = talk->field_0xa8; + mViewCache.mFovy = talk->field_0xb0; } break; } @@ -6203,7 +5732,7 @@ bool dCamera_c::talktoCamera(s32 param_0) { int uVar17; if (iVar5 != 11 && iVar5 != 30) { actor = speaker; - uVar17 = mWork.talk.field_0x38; + uVar17 = talk->field_0x38; stack_1e4 = talkEyePos(listener); stack_1f0 = talkEyePos(speaker); stack_1fc = talkBasePos(listener); @@ -6216,7 +5745,7 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } else { actor = listener; - uVar17 = mWork.talk.field_0x38 ? 0 : 1; + uVar17 = talk->field_0x38 ? 0 : 1; stack_1e4 = talkEyePos(speaker); stack_1f0 = talkEyePos(listener); stack_1fc = talkBasePos(speaker); @@ -6229,11 +5758,11 @@ bool dCamera_c::talktoCamera(s32 param_0) { } } - if (mWork.talk.field_0x44 == 0) { + if (talk->field_0x44 == 0) { f32 fVar36 = (stack_1f0.y - talkBasePos(actor).y) * 1.2f; f32 fVar37 = (stack_1e4.y - stack_1f0.y) * 0.45f; f32 fVar38 = fVar36 * 0.7f + fVar37; - cXyz stack_2ec(25.0f, 10.0f, mWork.talk.field_0x30.R() * 0.45f); + cXyz stack_2ec(25.0f, 10.0f, talk->field_0x30.R() * 0.45f); cXyz stack_2f8(75.0f, fVar37, -75.0f); if (uVar17) { stack_2ec.x = -stack_2ec.x; @@ -6242,117 +5771,117 @@ bool dCamera_c::talktoCamera(s32 param_0) { cSGlobe stack_1310 = stack_1e4 - stack_1f0; cSGlobe stack_1318 = stack_2ec; stack_1318.U(stack_1318.U() + stack_1310.U()); - mWork.talk.field_0x90 = attentionPos(actor) + stack_1318.Xyz(); - mWork.talk.field_0x90.y = stack_208.y + fVar38; + talk->field_0x90 = attentionPos(actor) + stack_1318.Xyz(); + talk->field_0x90.y = stack_208.y + fVar38; stack_1318.Val(stack_2f8); stack_1318.U(stack_1318.U() + stack_1310.U().Inv()); stack_1318.V(stack_1318.V() * 0.25f + stack_1310.V() * 0.75f); - mWork.talk.field_0x9c = stack_1e4 + stack_1318.Xyz(); - mWork.talk.field_0xa8.Val(mWork.talk.field_0x9c - mWork.talk.field_0x90); - field_0x158.field_0x0 = true; + talk->field_0x9c = stack_1e4 + stack_1318.Xyz(); + talk->field_0xa8.Val(talk->field_0x9c - talk->field_0x90); + mStyleSettle.mFinished = true; if (iVar5 == 11 || iVar5 == 12) { - mWork.talk.field_0xb0 = 55.0f; + talk->field_0xb0 = 55.0f; } else { - mWork.talk.field_0xb0 = 65.0f; + talk->field_0xb0 = 65.0f; } } cXyz stack_304 = attentionPos(actor); - if (lineBGCheck(&stack_304, &mWork.talk.field_0x9c, mWork.talk.field_0x8c) - || lineCollisionCheck(stack_304, mWork.talk.field_0x9c, listener, speaker, NULL)) + if (lineBGCheck(&stack_304, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(stack_304, talk->field_0x9c, listener, speaker, NULL)) { iVar5 = 0; } else { - field_0x5c.mCenter = mWork.talk.field_0x90; - field_0x5c.mEye = mWork.talk.field_0x9c; - field_0x5c.mDirection = mWork.talk.field_0xa8; - field_0x5c.mFovy = mWork.talk.field_0xb0; + mViewCache.mCenter = talk->field_0x90; + mViewCache.mEye = talk->field_0x9c; + mViewCache.mDirection = talk->field_0xa8; + mViewCache.mFovy = talk->field_0xb0; } break; } case 13: { - if (mWork.talk.field_0x44 == 0) { - field_0x158.field_0x0 = true; + if (talk->field_0x44 == 0) { + mStyleSettle.mFinished = true; } - field_0x5c.mCenter = mWork.talk.field_0x4; - field_0x5c.mDirection.Val(400.0f, cSAngle(35.0f), mWork.talk.field_0x28.U()); - if (field_0x5c.mDirection.V() > stack_134c) { - field_0x5c.mDirection.V(stack_134c); + mViewCache.mCenter = talk->field_0x4; + mViewCache.mDirection.Val(400.0f, cSAngle(35.0f), talk->field_0x28.U()); + if (mViewCache.mDirection.V() > stack_134c) { + mViewCache.mDirection.V(stack_134c); } - if (field_0x5c.mDirection.V() < stack_1350) { - field_0x5c.mDirection.V(stack_1350); + if (mViewCache.mDirection.V() < stack_1350) { + mViewCache.mDirection.V(stack_1350); } cXyz stack_310 = attentionPos(listener); cXyz stack_31c = attentionPos(speaker); cSAngle stack_138c; - if (mWork.talk.field_0x38) { + if (talk->field_0x38) { stack_138c = 20.0f; } else { stack_138c = -20.0f; } for (int i = 0; i < 18; i++) { - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - if (!lineBGCheck(&stack_310, &field_0x5c.mEye, mWork.talk.field_0x8c) - && !lineBGCheck(&stack_31c, &field_0x5c.mEye, mWork.talk.field_0x8c) - && !lineCollisionCheck(stack_310, field_0x5c.mEye, listener, speaker, NULL) - && !lineCollisionCheck(stack_31c, field_0x5c.mEye, listener, speaker, NULL)) + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + if (!lineBGCheck(&stack_310, &mViewCache.mEye, talk->field_0x8c) + && !lineBGCheck(&stack_31c, &mViewCache.mEye, talk->field_0x8c) + && !lineCollisionCheck(stack_310, mViewCache.mEye, listener, speaker, NULL) + && !lineCollisionCheck(stack_31c, mViewCache.mEye, listener, speaker, NULL)) { break; } - field_0x5c.mDirection.U(field_0x5c.mDirection.U() + stack_138c); + mViewCache.mDirection.U(mViewCache.mDirection.U() + stack_138c); } - field_0x5c.mFovy = 60.0f; + mViewCache.mFovy = 60.0f; break; } case 32: - if (mWork.talk.field_0x44 == 0) { - field_0x158.field_0x0 = true; - field_0x5c.mCenter = mWork.talk.field_0x4; + if (talk->field_0x44 == 0) { + mStyleSettle.mFinished = true; + mViewCache.mCenter = talk->field_0x4; cSAngle stack_1390; - if (mWork.talk.field_0x38) { - stack_1390 = mWork.talk.field_0x30.U() + cSAngle::_90; + if (talk->field_0x38) { + stack_1390 = talk->field_0x30.U() + cSAngle::_90; } else { - stack_1390 = mWork.talk.field_0x30.U() + cSAngle::_270; + stack_1390 = talk->field_0x30.U() + cSAngle::_270; } - field_0x5c.mDirection.Val(400.0f, cSAngle(15.0f), stack_1390); - if (field_0x5c.mDirection.V() > stack_134c) { - field_0x5c.mDirection.V(stack_134c); + mViewCache.mDirection.Val(400.0f, cSAngle(15.0f), stack_1390); + if (mViewCache.mDirection.V() > stack_134c) { + mViewCache.mDirection.V(stack_134c); } - if (field_0x5c.mDirection.V() < stack_1350) { - field_0x5c.mDirection.V(stack_1350); + if (mViewCache.mDirection.V() < stack_1350) { + mViewCache.mDirection.V(stack_1350); } cXyz stack_328 = attentionPos(listener); cXyz stack_334 = attentionPos(speaker); cSAngle stack_1394 = cSAngle::_0; for (int i = 0; i < 18; i++) { - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - if (!lineBGCheck(&stack_328, &field_0x5c.mEye, mWork.talk.field_0x8c) - && !lineBGCheck(&stack_334, &field_0x5c.mEye, mWork.talk.field_0x8c) - && !lineCollisionCheck(stack_328, field_0x5c.mEye, listener, speaker, NULL) - && !lineCollisionCheck(stack_334, field_0x5c.mEye, listener, speaker, NULL)) + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + if (!lineBGCheck(&stack_328, &mViewCache.mEye, talk->field_0x8c) + && !lineBGCheck(&stack_334, &mViewCache.mEye, talk->field_0x8c) + && !lineCollisionCheck(stack_328, mViewCache.mEye, listener, speaker, NULL) + && !lineCollisionCheck(stack_334, mViewCache.mEye, listener, speaker, NULL)) { break; } if ((i & 1) == 0) { stack_1394 += cSAngle(20.0f); - field_0x5c.mDirection.U(stack_1390 + stack_1394); + mViewCache.mDirection.U(stack_1390 + stack_1394); } else { - field_0x5c.mDirection.U(stack_1390 - stack_1394); + mViewCache.mDirection.U(stack_1390 - stack_1394); } } - field_0x5c.mFovy = 60.0f; + mViewCache.mFovy = 60.0f; } break; case 28: { - if (mWork.talk.field_0x44 == 0) { - field_0x158.field_0x0 = true; + if (talk->field_0x44 == 0) { + mStyleSettle.mFinished = true; } cXyz stack_340 = talkBasePos(speaker); cXyz stack_34c = talkBasePos(listener); @@ -6360,38 +5889,38 @@ bool dCamera_c::talktoCamera(s32 param_0) { cSGlobe stack_1320 = stack_358; cSAngle stack_1398; f32 dVar21 = dCamMath::xyzHorizontalDistance(stack_340, stack_34c) * 2.0f * 0.5f; - cDegree stack_1348 = field_0x92c * 60.0f * 0.5f; + cDegree stack_1348 = mWindowAspect * 60.0f * 0.5f; dVar21 /= stack_1348.Tan(); - if (mWork.talk.field_0x38) { + if (talk->field_0x38) { stack_1398 = cSAngle::_270; } else { stack_1398 = cSAngle::_90; } - mWork.talk.field_0x90 = talkBasePos(listener) + stack_358 * 0.5f; - mWork.talk.field_0x90.y = (talkEyePos(speaker).y + talkEyePos(listener).y) * 0.5f - 30.0f; - mWork.talk.field_0xa8.Val(dVar21, cSAngle::_0, stack_1320.U() + stack_1398); - mWork.talk.field_0x9c = mWork.talk.field_0x90 + mWork.talk.field_0xa8.Xyz(); - mWork.talk.field_0xb0 = 60.0f; + talk->field_0x90 = talkBasePos(listener) + stack_358 * 0.5f; + talk->field_0x90.y = (talkEyePos(speaker).y + talkEyePos(listener).y) * 0.5f - 30.0f; + talk->field_0xa8.Val(dVar21, cSAngle::_0, stack_1320.U() + stack_1398); + talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); + talk->field_0xb0 = 60.0f; - if (lineBGCheck(&stack_340, &mWork.talk.field_0x9c, mWork.talk.field_0x8c) - || lineBGCheck(&stack_34c, &mWork.talk.field_0x9c, mWork.talk.field_0x8c) - || lineCollisionCheck(stack_340, mWork.talk.field_0x9c, listener, speaker, NULL) - || lineCollisionCheck(stack_34c, mWork.talk.field_0x9c, listener, speaker, NULL)) + if (lineBGCheck(&stack_340, &talk->field_0x9c, talk->field_0x8c) + || lineBGCheck(&stack_34c, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(stack_340, talk->field_0x9c, listener, speaker, NULL) + || lineCollisionCheck(stack_34c, talk->field_0x9c, listener, speaker, NULL)) { iVar5 = 0; } else { - field_0x5c.mCenter = mWork.talk.field_0x90; - field_0x5c.mEye = mWork.talk.field_0x9c; - field_0x5c.mDirection = mWork.talk.field_0xa8; - field_0x5c.mFovy = mWork.talk.field_0xb0; + mViewCache.mCenter = talk->field_0x90; + mViewCache.mEye = talk->field_0x9c; + mViewCache.mDirection = talk->field_0xa8; + mViewCache.mFovy = talk->field_0xb0; } break; } case 29: { - mWork.talk.field_0x90 = talkBasePos(speaker); + talk->field_0x90 = talkBasePos(speaker); - if (mWork.talk.field_0x44 == 0) { + if (talk->field_0x44 == 0) { cXyz stack_364 = talkBasePos(listener); stack_364.y = talkEyePos(listener).y; cXyz stack_370 = talkBasePos(speaker); @@ -6399,33 +5928,33 @@ bool dCamera_c::talktoCamera(s32 param_0) { stack_370.y = attentionPos(speaker).y; } stack_370.y = talkEyePos(speaker).y; - mWork.talk.field_0xa8.Val(stack_364 - stack_370); - mWork.talk.field_0xa8.R(200.0f); - mWork.talk.field_0x1c.y = attentionPos(speaker).y - 68.0f - talkBasePos(speaker).y; - field_0x158.field_0x0 = true; + talk->field_0xa8.Val(stack_364 - stack_370); + talk->field_0xa8.R(200.0f); + talk->field_0x1c.y = attentionPos(speaker).y - 68.0f - talkBasePos(speaker).y; + mStyleSettle.mFinished = true; } - mWork.talk.field_0x90.y = mWork.talk.field_0x1c.y + talkBasePos(speaker).y; - mWork.talk.field_0x9c = mWork.talk.field_0x90 + mWork.talk.field_0xa8.Xyz(); - mWork.talk.field_0xb0 = 55.0f; + talk->field_0x90.y = talk->field_0x1c.y + talkBasePos(speaker).y; + talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); + talk->field_0xb0 = 55.0f; cXyz stack_37c = attentionPos(speaker); - if (lineBGCheck(&stack_37c, &mWork.talk.field_0x9c, mWork.talk.field_0x8c) - || lineCollisionCheck(stack_37c, mWork.talk.field_0x9c, listener, speaker, NULL)) + if (lineBGCheck(&stack_37c, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(stack_37c, talk->field_0x9c, listener, speaker, NULL)) { iVar5 = 0; } else { - field_0x5c.mCenter = mWork.talk.field_0x90; - field_0x5c.mEye = mWork.talk.field_0x9c; - field_0x5c.mDirection = mWork.talk.field_0xa8; - field_0x5c.mFovy = mWork.talk.field_0xb0; + mViewCache.mCenter = talk->field_0x90; + mViewCache.mEye = talk->field_0x9c; + mViewCache.mDirection = talk->field_0xa8; + mViewCache.mFovy = talk->field_0xb0; hideActor(listener); } break; } case 37: - if (mWork.talk.field_0x44 == 0) { + if (talk->field_0x44 == 0) { stack_1e4 = talkEyePos(listener); stack_1f0 = talkEyePos(speaker); stack_1fc = talkBasePos(listener); @@ -6436,44 +5965,44 @@ bool dCamera_c::talktoCamera(s32 param_0) { if (bVar13) { stack_1fc += stack_1cc; } - field_0x5c.mCenter = stack_208; + mViewCache.mCenter = stack_208; cXyz stack_388 = stack_1fc; stack_388.y = stack_1e4.y; cXyz stack_394 = stack_208; stack_394.y = stack_1f0.y; - field_0x5c.mDirection.Val(stack_388 - stack_394); - field_0x5c.mDirection.V(field_0x5c.mDirection.V() + cSAngle(5.0f)); - field_0x5c.mDirection.R(750.0f); - mWork.talk.field_0x1c.y = stack_1f0.y - stack_208.y; - field_0x158.field_0x0 = true; - field_0x5c.mCenter.y = stack_208.y + mWork.talk.field_0x1c.y; + mViewCache.mDirection.Val(stack_388 - stack_394); + mViewCache.mDirection.V(mViewCache.mDirection.V() + cSAngle(5.0f)); + mViewCache.mDirection.R(750.0f); + talk->field_0x1c.y = stack_1f0.y - stack_208.y; + mStyleSettle.mFinished = true; + mViewCache.mCenter.y = stack_208.y + talk->field_0x1c.y; cXyz stack_3a0 = attentionPos(listener); cXyz stack_3ac = attentionPos(speaker); cSAngle stack_139c; - if (mWork.talk.field_0x38) { - field_0x5c.mDirection.U(field_0x5c.mDirection.U() + cSAngle(10.0f)); + if (talk->field_0x38) { + mViewCache.mDirection.U(mViewCache.mDirection.U() + cSAngle(10.0f)); stack_139c = 20.0f; } else { - field_0x5c.mDirection.U(field_0x5c.mDirection.U() - cSAngle(10.0f)); + mViewCache.mDirection.U(mViewCache.mDirection.U() - cSAngle(10.0f)); stack_139c = -20.0f; } int i; fopAc_ac_c* midna = daPy_py_c::getMidnaActor(); for (i = 0; i < 18; i++) { - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - if (!lineBGCheck(&stack_3a0, &field_0x5c.mEye, mWork.talk.field_0x8c) - && !lineBGCheck(&stack_3ac, &field_0x5c.mEye, mWork.talk.field_0x8c) - && !lineCollisionCheck(stack_3a0, field_0x5c.mEye, listener, midna, NULL) - && !lineCollisionCheck(stack_3ac, field_0x5c.mEye, listener, midna, NULL)) + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + if (!lineBGCheck(&stack_3a0, &mViewCache.mEye, talk->field_0x8c) + && !lineBGCheck(&stack_3ac, &mViewCache.mEye, talk->field_0x8c) + && !lineCollisionCheck(stack_3a0, mViewCache.mEye, listener, midna, NULL) + && !lineCollisionCheck(stack_3ac, mViewCache.mEye, listener, midna, NULL)) { break; } - field_0x5c.mDirection.U(field_0x5c.mDirection.U() + stack_139c); + mViewCache.mDirection.U(mViewCache.mDirection.U() + stack_139c); } - field_0x5c.mFovy = 60.0f; + mViewCache.mFovy = 60.0f; } break; @@ -6482,24 +6011,24 @@ bool dCamera_c::talktoCamera(s32 param_0) { stack_1f0 = talkEyePos(speaker); cSGlobe stack_1328 = stack_1e4 - stack_1f0; - if (mWork.talk.field_0x44 == 0) { - field_0x158.field_0x0 = true; + if (talk->field_0x44 == 0) { + mStyleSettle.mFinished = true; cSGlobe stack_1330 = stack_1328; stack_1330.R(stack_1328.R() * 0.5f); - field_0x5c.mCenter = stack_1f0 + stack_1330.Xyz(); - field_0x5c.mCenter.y = stack_1f0.y - 20.0f - mWork.talk.field_0x7c * 10.0f; - if (mWork.talk.field_0x38) { - stack_1330.Val(cXyz(-45.0f + mWork.talk.field_0x7c * 20.0f, 5.0f, -80.0f - mWork.talk.field_0x7c * 40.0f)); + mViewCache.mCenter = stack_1f0 + stack_1330.Xyz(); + mViewCache.mCenter.y = stack_1f0.y - 20.0f - talk->field_0x7c * 10.0f; + if (talk->field_0x38) { + stack_1330.Val(cXyz(-45.0f + talk->field_0x7c * 20.0f, 5.0f, -80.0f - talk->field_0x7c * 40.0f)); } else { - stack_1330.Val(cXyz(65.0f - mWork.talk.field_0x7c * 20.0f, 5.0f, -80.0f - mWork.talk.field_0x7c * 40.0f)); + stack_1330.Val(cXyz(65.0f - talk->field_0x7c * 20.0f, 5.0f, -80.0f - talk->field_0x7c * 40.0f)); } stack_1330.U(stack_1330.U() + directionOf(listener)); stack_1330.V(stack_1330.V() + stack_1328.V()); - field_0x5c.mEye = stack_1e4 + stack_1330.Xyz(); - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + mViewCache.mEye = stack_1e4 + stack_1330.Xyz(); + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); f32 tmp1 = 25.0f; f32 tmp2 = 40.0f; - field_0x5c.mFovy = tmp2 + (tmp1 - tmp2) * mWork.talk.field_0x7c; + mViewCache.mFovy = tmp2 + (tmp1 - tmp2) * talk->field_0x7c; } break; } @@ -6508,28 +6037,28 @@ bool dCamera_c::talktoCamera(s32 param_0) { cXyz stack_3b8(0.0f, 25.0f, -70.0f); cSGlobe stack_1338 = stack_3b8; stack_1338.U(stack_1338.U() + directionOf(listener)); - field_0x5c.mCenter = attentionPos(listener) + stack_1338.Xyz(); - field_0x5c.mDirection.Val(140.0f, cSAngle(-20.0f), cSAngle(-40.0f) + directionOf(listener)); - field_0x158.field_0x0 = true; - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = 58.0f; + mViewCache.mCenter = attentionPos(listener) + stack_1338.Xyz(); + mViewCache.mDirection.Val(140.0f, cSAngle(-20.0f), cSAngle(-40.0f) + directionOf(listener)); + mStyleSettle.mFinished = true; + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = 58.0f; break; } case 34: - field_0x5c.mCenter = talkBasePos(listener); + mViewCache.mCenter = talkBasePos(listener); - if (mWork.talk.field_0x44 == 0) { - field_0x5c.mDirection.V(cSAngle(20.0f)); - field_0x5c.mDirection.R(160.0f); - field_0x5c.mDirection.U(directionOf(listener).Inv()); - mWork.talk.field_0x1c.y = 95.0f; - field_0x158.field_0x0 = true; + if (talk->field_0x44 == 0) { + mViewCache.mDirection.V(cSAngle(20.0f)); + mViewCache.mDirection.R(160.0f); + mViewCache.mDirection.U(directionOf(listener).Inv()); + talk->field_0x1c.y = 95.0f; + mStyleSettle.mFinished = true; } - field_0x5c.mCenter.y += mWork.talk.field_0x1c.y; - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = 58.0f; + mViewCache.mCenter.y += talk->field_0x1c.y; + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = 58.0f; break; case 35: @@ -6539,50 +6068,50 @@ bool dCamera_c::talktoCamera(s32 param_0) { stack_1fc = talkBasePos(speaker); stack_208 = talkBasePos(listener); - if (mWork.talk.field_0x44 == 0) { - field_0x158.field_0x0 = true; + if (talk->field_0x44 == 0) { + mStyleSettle.mFinished = true; } - + cXyz stack_3c4(0.0f, 10.0f, -60.0f); cSGlobe stack_1340 = stack_3c4; stack_1340.U(stack_1340.U() + directionOf(listener)); - mWork.talk.field_0x90 = stack_1f0 + stack_1340.Xyz(); + talk->field_0x90 = stack_1f0 + stack_1340.Xyz(); cSAngle stack_13a0; if (iVar5 == 36) { stack_13a0.Val(-150.0f); - mWork.talk.field_0xa8.Val(200.0f, cSAngle::_0, stack_13a0 + directionOf(listener)); + talk->field_0xa8.Val(200.0f, cSAngle::_0, stack_13a0 + directionOf(listener)); } else { stack_13a0.Val(-35.0f); - mWork.talk.field_0xa8.Val(160.0f, cSAngle::_0, stack_13a0 + directionOf(listener)); + talk->field_0xa8.Val(160.0f, cSAngle::_0, stack_13a0 + directionOf(listener)); } - mWork.talk.field_0xb0 = 60.0f; - mWork.talk.field_0x9c = mWork.talk.field_0x90 + mWork.talk.field_0xa8.Xyz(); + talk->field_0xb0 = 60.0f; + talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); cXyz stack_3d0 = attentionPos(listener); - if (lineBGCheck(&stack_3d0, &mWork.talk.field_0x9c, mWork.talk.field_0x8c) - || lineCollisionCheck(stack_3d0, mWork.talk.field_0x9c, listener, speaker, NULL)) + if (lineBGCheck(&stack_3d0, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(stack_3d0, talk->field_0x9c, listener, speaker, NULL)) { - mWork.talk.field_0x90.y -= 20.0f; - mWork.talk.field_0xa8.Val(180.0f, cSAngle(35.0f), stack_13a0 + directionOf(listener)); - mWork.talk.field_0x9c = mWork.talk.field_0x90 + mWork.talk.field_0xa8.Xyz(); + talk->field_0x90.y -= 20.0f; + talk->field_0xa8.Val(180.0f, cSAngle(35.0f), stack_13a0 + directionOf(listener)); + talk->field_0x9c = talk->field_0x90 + talk->field_0xa8.Xyz(); - if (lineBGCheck(&stack_3d0, &mWork.talk.field_0x9c, mWork.talk.field_0x8c) - || lineCollisionCheck(stack_3d0, mWork.talk.field_0x9c, listener, speaker, NULL)) + if (lineBGCheck(&stack_3d0, &talk->field_0x9c, talk->field_0x8c) + || lineCollisionCheck(stack_3d0, talk->field_0x9c, listener, speaker, NULL)) { iVar5 = 0; } else { - field_0x5c.mCenter = mWork.talk.field_0x90; - field_0x5c.mEye = mWork.talk.field_0x9c; - field_0x5c.mDirection = mWork.talk.field_0xa8; - field_0x5c.mFovy = mWork.talk.field_0xb0; + mViewCache.mCenter = talk->field_0x90; + mViewCache.mEye = talk->field_0x9c; + mViewCache.mDirection = talk->field_0xa8; + mViewCache.mFovy = talk->field_0xb0; } } else { - field_0x5c.mCenter = mWork.talk.field_0x90; - field_0x5c.mEye = mWork.talk.field_0x9c; - field_0x5c.mDirection = mWork.talk.field_0xa8; - field_0x5c.mFovy = mWork.talk.field_0xb0; + mViewCache.mCenter = talk->field_0x90; + mViewCache.mEye = talk->field_0x9c; + mViewCache.mDirection = talk->field_0xa8; + mViewCache.mFovy = talk->field_0xb0; } break; } @@ -6592,40 +6121,46 @@ bool dCamera_c::talktoCamera(s32 param_0) { break; } - if (mWork.talk.field_0x84 != 0) { - field_0x158.field_0x0 = true; + if (talk->field_0x84 != 0) { + mStyleSettle.mFinished = true; } if (iVar5 == 0) { - if (field_0x158.field_0x0) { - field_0x5c.mCenter = mWork.talk.field_0x4; - field_0x5c.mDirection = mWork.talk.field_0x28; - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = mWork.talk.field_0x58; + if (mStyleSettle.mFinished) { + mViewCache.mCenter = talk->field_0x4; + mViewCache.mDirection = talk->field_0x28; + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = talk->field_0x58; } else { - mWork.talk.field_0x50 = (f32)(mWork.talk.field_0x44 + 1) / mWork.talk.field_0x48; - f32 dVar21 = dCamMath::rationalBezierRatio(mWork.talk.field_0x50, 0.28f); - field_0x5c.mCenter += (mWork.talk.field_0x4 - field_0x5c.mCenter) * dVar21; - field_0x5c.mDirection.R(field_0x5c.mDirection.R() - + (mWork.talk.field_0x28.R() - field_0x5c.mDirection.R()) * dVar21); - field_0x5c.mDirection.V(field_0x5c.mDirection.V() - + (mWork.talk.field_0x28.V() - field_0x5c.mDirection.V()) * dVar21); - field_0x5c.mDirection.U(field_0x5c.mDirection.U() - + (mWork.talk.field_0x28.U() - field_0x5c.mDirection.U()) * dVar21); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy += (mWork.talk.field_0x58 - field_0x5c.mFovy) * dVar21; - mWork.talk.field_0x4c -= mWork.talk.field_0x50; - if (mWork.talk.field_0x44 >= mWork.talk.field_0x48 - 1) { - field_0x158.field_0x0 = true; + talk->field_0x50 = (f32)(talk->field_0x44 + 1) / talk->field_0x48; + f32 dVar21 = dCamMath::rationalBezierRatio(talk->field_0x50, 0.28f); + mViewCache.mCenter += (talk->field_0x4 - mViewCache.mCenter) * dVar21; + mViewCache.mDirection.R(mViewCache.mDirection.R() + + (talk->field_0x28.R() - mViewCache.mDirection.R()) * dVar21); + mViewCache.mDirection.V(mViewCache.mDirection.V() + + (talk->field_0x28.V() - mViewCache.mDirection.V()) * dVar21); + mViewCache.mDirection.U(mViewCache.mDirection.U() + + (talk->field_0x28.U() - mViewCache.mDirection.U()) * dVar21); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy += (talk->field_0x58 - mViewCache.mFovy) * dVar21; + talk->field_0x4c -= talk->field_0x50; + if (talk->field_0x44 >= talk->field_0x48 - 1) { + mStyleSettle.mFinished = true; } uVar18 = false; } } - mWork.talk.field_0x44++; + talk->field_0x44++; return uVar18; } + +#pragma push +#pragma force_active on +SECTION_DEAD static char const* const stringBase_8039417F = "E_RD"; +#pragma force_active off + /* 80174EA4-80174EAC 16F7E4 0008+00 0/0 1/1 0/0 .text CalcSubjectAngle__9dCamera_cFPsPs */ bool dCamera_c::CalcSubjectAngle(s16* param_0, s16* param_1) { @@ -6638,7 +6173,9 @@ bool dCamera_c::SaveZoomRatio() { return false; } - field_0x73c = mWork.subject.field_0x24; + SubjectData* subject = (SubjectData*)mWork; + + mZoomRatio = subject->mZoomRatio; return true; } @@ -6661,8 +6198,11 @@ bool dCamera_c::subjectCamera(s32 param_0) { f32 val16 = mCamParam.Val(param_0, 16); f32 val24 = mCamParam.Val(param_0, 24); f32 val18 = mCamParam.Val(param_0, 18); + daAlink_c* player = (daAlink_c*)mpPlayerActor; + SubjectData* subject = (SubjectData*)mWork; + bool bVar13 = check_owner_action(mPadID, 0x1040) != 0; bool bVar14 = check_owner_action(mPadID, 0x4000) != 0; bool bVar15 = check_owner_action(mPadID, 0x400) != 0; @@ -6671,29 +6211,29 @@ bool dCamera_c::subjectCamera(s32 param_0) { bool bVar16 = check_owner_action(mPadID, 0x40) != 0; if (mCurCamStyleTimer == 0) { - mWork.subject.field_0x0 = 'SUBN'; - mWork.subject.field_0x2a.Val(field_0x5c.mDirection.U().Inv()); - mWork.subject.field_0x28.Val(field_0x5c.mDirection.V()); - mWork.subject.field_0x14 = 7; + subject->field_0x0 = 'SUBN'; + subject->field_0x2a.Val(mViewCache.mDirection.U().Inv()); + subject->field_0x28.Val(mViewCache.mDirection.V()); + subject->field_0x14 = 7; if (check_owner_action1(mPadID, 0x2000000)) { - mWork.subject.field_0x14 = 2; + subject->field_0x14 = 2; } - mWork.subject.field_0x10 = 0; - mWork.subject.field_0x24 = field_0x73c; - field_0x73c = 0.0f; - mWork.subject.field_0x18 = param_0; - mWork.subject.field_0x1c = false; - mWork.subject.field_0x20 = 0.0f; - mWork.subject.field_0x1d = false; + subject->field_0x10 = 0; + subject->mZoomRatio = mZoomRatio; + mZoomRatio = 0.0f; + subject->field_0x18 = param_0; + subject->field_0x1c = false; + subject->field_0x20 = 0.0f; + subject->field_0x1d = false; if (bVar13 || bVar15) { - mWork.subject.field_0x1d = directionOf(mpPlayerActor) - field_0x5c.mDirection.U() > cSAngle::_0; + subject->field_0x1d = directionOf(mpPlayerActor) - mViewCache.mDirection.U() > cSAngle::_0; } else if (bVar14) { - mWork.subject.field_0x1d = player->getHookshotLeft(); + subject->field_0x1d = player->getHookshotLeft(); } } - if (mWork.subject.field_0x1d) { + if (subject->field_0x1d) { val0 = -val0; } @@ -6737,60 +6277,60 @@ bool dCamera_c::subjectCamera(s32 param_0) { angle_x = globe.V(); angle_y = globe.U().Inv(); } else { - angle_x = mWork.subject.field_0x28; - angle_y = mWork.subject.field_0x2a; + angle_x = subject->field_0x28; + angle_y = subject->field_0x2a; } angle_x += cSAngle(5.0f); } else if (bVar15) { stack_1c8 = attentionPos(mpPlayerActor); - mWork.subject.field_0x28 = angle_x; - mWork.subject.field_0x2a = angle_y; + subject->field_0x28 = angle_x; + subject->field_0x2a = angle_y; angle_x += cSAngle(5.0f); } else { stack_1c8 = *player->getSubjectEyePos(); } - mWork.subject.field_0x2e = angle_x; - mWork.subject.field_0x2c = angle_y; + subject->field_0x2e = angle_x; + subject->field_0x2c = angle_y; if (magne_boots_on) { cXyz player_pos = positionOf(mpPlayerActor); - mWork.subject.field_0x4 = field_0x5c.mCenter - player_pos; - mWork.subject.field_0x30 = field_0x5c.mEye - player_pos; - mDoMtx_multVecSR(inv_mtx, &mWork.subject.field_0x4, &mWork.subject.field_0x4); - mDoMtx_multVecSR(inv_mtx, &mWork.subject.field_0x30, &mWork.subject.field_0x30); - mWork.subject.field_0x4 += player_pos; - mWork.subject.field_0x30 += player_pos; - mWork.subject.field_0x48.Val(mWork.subject.field_0x30 - mWork.subject.field_0x4); + subject->field_0x4 = mViewCache.mCenter - player_pos; + subject->field_0x30 = mViewCache.mEye - player_pos; + mDoMtx_multVecSR(inv_mtx, &subject->field_0x4, &subject->field_0x4); + mDoMtx_multVecSR(inv_mtx, &subject->field_0x30, &subject->field_0x30); + subject->field_0x4 += player_pos; + subject->field_0x30 += player_pos; + subject->field_0x48.Val(subject->field_0x30 - subject->field_0x4); } if (mCurCamStyleTimer == 0) { - mWork.subject.field_0x4 = field_0x5c.mCenter; - mWork.subject.field_0x30 = field_0x5c.mEye; - mWork.subject.field_0x48 = field_0x5c.mDirection; - mWork.subject.field_0x3c = mUp; + subject->field_0x4 = mViewCache.mCenter; + subject->field_0x30 = mViewCache.mEye; + subject->field_0x48 = mViewCache.mDirection; + subject->field_0x3c = mUp; field_0x738 = val16; } bool bVar17 = false; - if (field_0x940 == -1) { + if (mGear == -1) { bVar17 = true; } if (mCurType == specialType[CAM_TYPE_SCOPE]) { - field_0x940 = 0; + mGear = 0; mCamParam.SetFlag(0x10); mCamParam.SetFlag(4); } else if (mCurMode == 4) { - field_0x940 = -1; + mGear = -1; if (mPadInfo.mCStick.mLastPosY < -mCamSetup.mCStick.SwTHH()) { - if (field_0x1f4 != -1 && field_0x940 == -1) { - field_0x940 = 0; + if (mCStickYState != -1 && mGear == -1) { + mGear = 0; setComStat(0x2000); } - field_0x1f4 = -1; + mCStickYState = -1; } else { - field_0x1f4 = 0; + mCStickYState = 0; } } else if (bVar15 || player->checkIronBallThrowReturnMode()) { val0 = 0.0f; @@ -6799,43 +6339,43 @@ bool dCamera_c::subjectCamera(s32 param_0) { val7 = 270.0f; val17 = 70.0f; } else if (bVar14 || bVar13) { - if (field_0x940 == -1) { + if (mGear == -1) { bVar17 = true; } if (bVar17) { - val16 = mWork.subject.field_0x20; - mWork.subject.field_0x20 = val16 + (1.0f - val16) * 0.3f; + val16 = subject->field_0x20; + subject->field_0x20 = val16 + (1.0f - val16) * 0.3f; } else { - val16 = mWork.subject.field_0x20; - mWork.subject.field_0x20 = val16 + (0.0f - val16) * 0.3f; + val16 = subject->field_0x20; + subject->field_0x20 = val16 + (0.0f - val16) * 0.3f; } - mWork.subject.field_0x20 = 1.0f; + subject->field_0x20 = 1.0f; mCamParam.SetFlag(0x10); mCamParam.SetFlag(4); if (bVar14) { val20 = player->getHookshotLeft() ? val20 : -val20; - val0 += (val20 - val0) * mWork.subject.field_0x20; - val2 += (val19 - val2) * mWork.subject.field_0x20; - val1 += (val21 - val1) * mWork.subject.field_0x20; - val7 += (val10 - val7) * mWork.subject.field_0x20; + val0 += (val20 - val0) * subject->field_0x20; + val2 += (val19 - val2) * subject->field_0x20; + val1 += (val21 - val1) * subject->field_0x20; + val7 += (val10 - val7) * subject->field_0x20; } else if (bVar16) { - val0 += (19.0f - val0) * mWork.subject.field_0x20; - val2 += (0.0f - val2) * mWork.subject.field_0x20; - val1 += (val26 - val1) * mWork.subject.field_0x20; - val7 += (val10 - val7) * mWork.subject.field_0x20; + val0 += (19.0f - val0) * subject->field_0x20; + val2 += (0.0f - val2) * subject->field_0x20; + val1 += (val26 - val1) * subject->field_0x20; + val7 += (val10 - val7) * subject->field_0x20; } else if (bVar13) { - val0 += (val25 - val0) * mWork.subject.field_0x20; - val2 += (val4 - val2) * mWork.subject.field_0x20; - val1 += (val26 - val1) * mWork.subject.field_0x20; - val7 += (val10 - val7) * mWork.subject.field_0x20; + val0 += (val25 - val0) * subject->field_0x20; + val2 += (val4 - val2) * subject->field_0x20; + val1 += (val26 - val1) * subject->field_0x20; + val7 += (val10 - val7) * subject->field_0x20; } else { - val0 += (0.0f - val0) * mWork.subject.field_0x20; - val2 += (0.0f - val2) * mWork.subject.field_0x20; - val1 += (0.0f - val1) * mWork.subject.field_0x20; - val7 += (20.0f - val7) * mWork.subject.field_0x20; + val0 += (0.0f - val0) * subject->field_0x20; + val2 += (0.0f - val2) * subject->field_0x20; + val1 += (0.0f - val1) * subject->field_0x20; + val7 += (20.0f - val7) * subject->field_0x20; } } @@ -6886,9 +6426,9 @@ bool dCamera_c::subjectCamera(s32 param_0) { } } - stack_210 = field_0x5c.mCenter + (stack_210 - field_0x5c.mCenter) * fVar1; + stack_210 = mViewCache.mCenter + (stack_210 - mViewCache.mCenter) * fVar1; cXyz stack_228 = stack_210 + stack_204; - stack_228 = field_0x5c.mEye + (stack_228 - field_0x5c.mEye) * fVar1; + stack_228 = mViewCache.mEye + (stack_228 - mViewCache.mEye) * fVar1; if (magne_boots_on) { setFlag(0x10); @@ -6905,41 +6445,41 @@ bool dCamera_c::subjectCamera(s32 param_0) { stack_228 = stack_24c + stack_234 * 10.0f; } - if (field_0x158.field_0x0) { - field_0x5c.mCenter = stack_210; - field_0x5c.mEye = stack_228; + if (mStyleSettle.mFinished) { + mViewCache.mCenter = stack_210; + mViewCache.mEye = stack_228; } else { cSGlobe stack_43c = stack_228 - stack_210; - f32 tmp = 1.0f / (mWork.subject.field_0x14 - mWork.subject.field_0x10); - field_0x5c.mCenter += (stack_210 - field_0x5c.mCenter) * tmp; - field_0x5c.mDirection.R(field_0x5c.mDirection.R() + (stack_43c.R() - field_0x5c.mDirection.R()) * tmp); - field_0x5c.mDirection.V(field_0x5c.mDirection.V() + (stack_43c.V() - field_0x5c.mDirection.V()) * tmp); - field_0x5c.mDirection.U(field_0x5c.mDirection.U() + (stack_43c.U() - field_0x5c.mDirection.U()) * tmp); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy += (val17 - field_0x5c.mFovy) * tmp; - mWork.subject.field_0x3c += (stack_1e0 - mWork.subject.field_0x3c) * tmp; - stack_1e0 = mWork.subject.field_0x3c.norm(); + f32 tmp = 1.0f / (subject->field_0x14 - subject->field_0x10); + mViewCache.mCenter += (stack_210 - mViewCache.mCenter) * tmp; + mViewCache.mDirection.R(mViewCache.mDirection.R() + (stack_43c.R() - mViewCache.mDirection.R()) * tmp); + mViewCache.mDirection.V(mViewCache.mDirection.V() + (stack_43c.V() - mViewCache.mDirection.V()) * tmp); + mViewCache.mDirection.U(mViewCache.mDirection.U() + (stack_43c.U() - mViewCache.mDirection.U()) * tmp); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy += (val17 - mViewCache.mFovy) * tmp; + subject->field_0x3c += (stack_1e0 - subject->field_0x3c) * tmp; + stack_1e0 = subject->field_0x3c.norm(); - if (mWork.subject.field_0x10 == mWork.subject.field_0x14 - 1) { - field_0x158.field_0x0 = true; + if (subject->field_0x10 == subject->field_0x14 - 1) { + mStyleSettle.mFinished = true; } - mWork.subject.field_0x10++; + subject->field_0x10++; if (magne_boots_on) { - field_0x740.field_0x0 = field_0x5c.mCenter; - field_0x740.field_0xc = field_0x5c.mEye; - field_0x740.field_0x24 = field_0x5c.mDirection; - field_0x740.field_0x18 = stack_1e0; + mUpOverride.field_0x0 = mViewCache.mCenter; + mUpOverride.field_0xc = mViewCache.mEye; + mUpOverride.field_0x24 = mViewCache.mDirection; + mUpOverride.field_0x18 = stack_1e0; } return true; } - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); - field_0x740.field_0x0 = field_0x5c.mCenter; - field_0x740.field_0xc = field_0x5c.mEye; - field_0x740.field_0x24 = field_0x5c.mDirection; - field_0x740.field_0x18 = stack_1e0; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); + mUpOverride.field_0x0 = mViewCache.mCenter; + mUpOverride.field_0xc = mViewCache.mEye; + mUpOverride.field_0x24 = mViewCache.mDirection; + mUpOverride.field_0x18 = stack_1e0; if (mCamParam.Flag(param_0, 0x400)) { f32 dVar17 = 0.0f; @@ -6952,14 +6492,14 @@ bool dCamera_c::subjectCamera(s32 param_0) { dVar16 = dCamMath::rationalBezierRatio(-mPadInfo.mCStick.mLastPosY, mCamSetup.CurveWeight()); iVar2 = 1; } - f32 tmp = mWork.subject.field_0x24 + val18 * (dVar17 - dVar16) * 0.1f; + f32 tmp = subject->mZoomRatio + val18 * (dVar17 - dVar16) * 0.1f; if (tmp < 0.0f) { - mWork.subject.field_0x24 = 0.0f; + subject->mZoomRatio = 0.0f; } else if (tmp > 1.0f) { - mWork.subject.field_0x24 = 1.0f; + subject->mZoomRatio = 1.0f; } else { - mWork.subject.field_0x24 = tmp; + subject->mZoomRatio = tmp; if (iVar2 == -1) { mDoAud_seStartLevel(Z2SE_AL_HAWK_EYE_ZOOMIN, NULL, 0, 0); } else if (iVar2 == 1) { @@ -6967,14 +6507,14 @@ bool dCamera_c::subjectCamera(s32 param_0) { } } - if (mWork.subject.field_0x24 == 0.0f || mWork.subject.field_0x24 == 0.5f || mWork.subject.field_0x24 == 1.0f) { + if (subject->mZoomRatio == 0.0f || subject->mZoomRatio == 0.5f || subject->mZoomRatio == 1.0f) { dVar17 = 0.0f; dVar16 = 0.0f; } - f32 tmp2 = mWork.subject.field_0x24 * 8.0f + 1.0f; + f32 tmp2 = subject->mZoomRatio * 8.0f + 1.0f; f32 zoom_fovy = dCamMath::zoomFovy(val17 * 0.5f, tmp2) * 2.0f; - field_0x5c.mFovy += (zoom_fovy - field_0x5c.mFovy) * val22; + mViewCache.mFovy += (zoom_fovy - mViewCache.mFovy) * val22; setComZoomScale(tmp2); setComZoomForcus(1.0f - fabsf(dVar17 - dVar16) * -511.0f); if (check_owner_action(mPadID, 0x200000)) { @@ -6982,7 +6522,7 @@ bool dCamera_c::subjectCamera(s32 param_0) { } } else { - field_0x5c.mFovy = val17; + mViewCache.mFovy = val17; } return true; @@ -7007,7 +6547,9 @@ bool dCamera_c::magneCamera(s32 param_0) { f32 val21 = mCamParam.Val(param_0, 21); daAlink_c* player = (daAlink_c*)mpPlayerActor; - field_0x158.field_0x0 = mCurCamStyleTimer != 0; + MagneData* magne = (MagneData*)mWork; + + mStyleSettle.mFinished = mCurCamStyleTimer != 0; cSAngle stack_234; MtxP mtx, inv_mtx; @@ -7022,19 +6564,19 @@ bool dCamera_c::magneCamera(s32 param_0) { } cXyz player_pos = positionOf(mpPlayerActor); - mWork.magne.field_0x4 = field_0x5c.mCenter - player_pos; - mWork.magne.field_0x10 = field_0x5c.mEye - player_pos; - mDoMtx_multVecSR(inv_mtx, &mWork.magne.field_0x4, &mWork.magne.field_0x4); - mDoMtx_multVecSR(inv_mtx, &mWork.magne.field_0x10, &mWork.magne.field_0x10); - mWork.magne.field_0x4 += player_pos; - mWork.magne.field_0x10 += player_pos; + magne->field_0x4 = mViewCache.mCenter - player_pos; + magne->field_0x10 = mViewCache.mEye - player_pos; + mDoMtx_multVecSR(inv_mtx, &magne->field_0x4, &magne->field_0x4); + mDoMtx_multVecSR(inv_mtx, &magne->field_0x10, &magne->field_0x10); + magne->field_0x4 += player_pos; + magne->field_0x10 += player_pos; if (mCurCamStyleTimer == 0) { - mWork.magne.field_0x0 = 'MAG_'; - mWork.magne.field_0x1c.Val(mWork.magne.field_0x10 - mWork.magne.field_0x4); + magne->field_0x0 = 'MAG_'; + magne->field_0x1c.Val(magne->field_0x10 - magne->field_0x4); } - f32 fVar1 = (mWork.magne.field_0x1c.R() - val8) / (val7 - val8); + f32 fVar1 = (magne->field_0x1c.R() - val8) / (val7 - val8); if (fVar1 > 1.0f) { fVar1 = 1.0f; } else if (fVar1 < 0.0f) { @@ -7046,8 +6588,8 @@ bool dCamera_c::magneCamera(s32 param_0) { cXyz stack_138 = attentionPos(mpPlayerActor) - player_pos; mDoMtx_multVecSR(inv_mtx, &stack_138, &stack_138); stack_138 += player_pos; - mWork.magne.field_0x4 += ((stack_138 + stack_12c) - mWork.magne.field_0x4) * val5; - cSGlobe stack_230 = mWork.magne.field_0x10 - mWork.magne.field_0x4; + magne->field_0x4 += ((stack_138 + stack_12c) - magne->field_0x4) * val5; + cSGlobe stack_230 = magne->field_0x10 - magne->field_0x4; f32 fVar2 = stack_230.R(); if (fVar2 > val7) { @@ -7066,7 +6608,7 @@ bool dCamera_c::magneCamera(s32 param_0) { stack_238 = stack_234.Inv(); } else if (fabsf(cstick_x) > 0.05f) { f32 tmp = dCamMath::rationalBezierRatio(cstick_x, 0.5f) * 10.0f; - stack_238 = mWork.magne.field_0x1c.U() + cSAngle(tmp); + stack_238 = magne->field_0x1c.U() + cSAngle(tmp); } else { cSAngle stack_23c = stack_234.Inv() - stack_230.U(); f32 sin = stack_23c.Sin(); @@ -7076,77 +6618,87 @@ bool dCamera_c::magneCamera(s32 param_0) { } cSAngle stack_240 = val13 + (val12 - val13) * fVar1; - mWork.magne.field_0x1c.Val(fVar2, stack_240, stack_238); - mWork.magne.field_0x10 = mWork.magne.field_0x4 + mWork.magne.field_0x1c.Xyz(); - cXyz stack_144 = mWork.magne.field_0x4 - player_pos; - cXyz stack_150 = mWork.magne.field_0x10 - player_pos; + magne->field_0x1c.Val(fVar2, stack_240, stack_238); + magne->field_0x10 = magne->field_0x4 + magne->field_0x1c.Xyz(); + cXyz stack_144 = magne->field_0x4 - player_pos; + cXyz stack_150 = magne->field_0x10 - player_pos; mDoMtx_multVecSR(mtx, &stack_144, &stack_144); mDoMtx_multVecSR(mtx, &stack_150, &stack_150); stack_144 += player_pos; stack_150 += player_pos; stack_230.Val(stack_150 - stack_144); - field_0x5c.mCenter = stack_144; - field_0x5c.mDirection.R(field_0x5c.mDirection.R() - + (stack_230.R() - field_0x5c.mDirection.R()) * val11); - field_0x5c.mDirection.V(field_0x5c.mDirection.V() - + (stack_230.V() - field_0x5c.mDirection.V()) * val16); - field_0x5c.mDirection.U(field_0x5c.mDirection.U() - + (stack_230.U() - field_0x5c.mDirection.U()) * val24 * stack_230.V().Cos()); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy += ((val18 + (val17 - val18) * fVar1) - field_0x5c.mFovy) * val21; + mViewCache.mCenter = stack_144; + mViewCache.mDirection.R(mViewCache.mDirection.R() + + (stack_230.R() - mViewCache.mDirection.R()) * val11); + mViewCache.mDirection.V(mViewCache.mDirection.V() + + (stack_230.V() - mViewCache.mDirection.V()) * val16); + mViewCache.mDirection.U(mViewCache.mDirection.U() + + (stack_230.U() - mViewCache.mDirection.U()) * val24 * stack_230.V().Cos()); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy += ((val18 + (val17 - val18) * fVar1) - mViewCache.mFovy) * val21; return true; } /* 801767F8-80176DF0 171138 05F8+00 1/0 0/0 0/0 .text colosseumCamera__9dCamera_cFl */ -// NONMATCHING instruction order bool dCamera_c::colosseumCamera(s32 param_0) { f32 val0 = mCamParam.Val(param_0, 0); f32 val2 = mCamParam.Val(param_0, 2); f32 val1 = mCamParam.Val(param_0, 1); f32 val3 = mCamParam.Val(param_0, 3); + f32 unusedFloat1 = 0.0f; + f32 unusedFloat2 = 0.0f; + f32 unusedFloat3 = 0.0f; f32 val7 = mCamParam.Val(param_0, 7); f32 val8 = mCamParam.Val(param_0, 8); + f32 unusedFloat4 = 0.0f; f32 val11 = mCamParam.Val(param_0, 11); f32 val10 = mCamParam.Val(param_0, 10); f32 val12 = mCamParam.Val(param_0, 12); f32 val13 = mCamParam.Val(param_0, 13); + f32 unusedFloat5 = 0.0f; + f32 unusedFloat6 = 0.0f; f32 val17 = mCamParam.Val(param_0, 17); f32 val18 = mCamParam.Val(param_0, 18); + f32 unusedFloat7 = 0.0f; + f32 unusedFloat8 = 0.0f; + + ColosseumData* colosseum = (ColosseumData*)mWork; if (Stage == 0x6b && positionOf(mpPlayerActor).y < -1.0f) { - return chaseCamera(mCamTypeData[specialType[CAM_TYPE_FIELD_S]].field_0x18[mIsWolf][0]); + param_0 = mCamTypeData[specialType[CAM_TYPE_FIELD_S]].field_0x18[mIsWolf][0]; + return chaseCamera(param_0); } if (mCurCamStyleTimer == 0) { - mWork.colosseum.field_0x14 = 0.0f; - mWork.colosseum.field_0x18 = 40; - if (field_0x7ac.field_0x30 != 0xff && mCamParam.Flag(param_0, 0x200)) { - mWork.colosseum.field_0x8.x = field_0x7ac.field_0x18.position.x; - mWork.colosseum.field_0x8.y = field_0x7ac.field_0x18.position.y; - mWork.colosseum.field_0x8.z = field_0x7ac.field_0x18.position.z; + colosseum->field_0x14 = 0.0f; + colosseum->field_0x18 = 40; + if (mRoomMapTool.mCameraIndex != 0xff && mCamParam.Flag(param_0, 0x200)) { + colosseum->field_0x8.x = mRoomMapTool.mArrowData.position.x; + colosseum->field_0x8.y = mRoomMapTool.mArrowData.position.y; + colosseum->field_0x8.z = mRoomMapTool.mArrowData.position.z; } else if (mCamParam.Flag(param_0, 0x2000)) { fopAc_ac_c* target = getParamTargetActor(mCurType); - mWork.colosseum.field_0x8.x = positionOf(target).x; - mWork.colosseum.field_0x8.y = attentionPos(mpPlayerActor).y; - mWork.colosseum.field_0x8.z = positionOf(target).z; + colosseum->field_0x8.x = positionOf(target).x; + colosseum->field_0x8.y = attentionPos(mpPlayerActor).y; + colosseum->field_0x8.z = positionOf(target).z; } mEventData.field_0xf0.Init(5, 100); } - if (mWork.colosseum.field_0x14 < 0.999f) { - mWork.colosseum.field_0x14 += 1.0f / mWork.colosseum.field_0x18; + if (colosseum->field_0x14 < 0.999f) { + colosseum->field_0x14 += 1.0f / colosseum->field_0x18; } else { - field_0x158.field_0x0 = true; - mWork.colosseum.field_0x14 = 1.0f; + mStyleSettle.mFinished = true; + colosseum->field_0x14 = 1.0f; } - cXyz stack_e8 = mWork.colosseum.field_0x8; + cXyz stack_e8 = colosseum->field_0x8; if (!mCamParam.Flag(param_0, 0x1000)) { stack_e8.y = attentionPos(mpPlayerActor).y; } cXyz stack_f4(val0, 0.0f, val1); cXyz stack_100; - stack_100 = dCamMath::xyzRotateY(stack_f4, field_0x5c.mDirection.U().Inv()); + stack_100 = dCamMath::xyzRotateY(stack_f4, mViewCache.mDirection.U().Inv()); stack_100 += attentionPos(mpPlayerActor); cSGlobe stack_1bc = stack_100 - stack_e8; @@ -7178,22 +6730,22 @@ bool dCamera_c::colosseumCamera(s32 param_0) { } cSAngle stack_1c4 = stack_1bc.U(); - if (!field_0x158.field_0x0) { - field_0x5c.mCenter += (stack_10c - field_0x5c.mCenter) * mWork.colosseum.field_0x14; - field_0x5c.mDirection.R(field_0x5c.mDirection.R() - + (fVar8 - field_0x5c.mDirection.R()) * mWork.colosseum.field_0x14); - field_0x5c.mDirection.V(field_0x5c.mDirection.V() - + (stack_1c0 - field_0x5c.mDirection.V()) * mWork.colosseum.field_0x14); - field_0x5c.mDirection.U(field_0x5c.mDirection.U() - + (stack_1c4 - field_0x5c.mDirection.U()) * mWork.colosseum.field_0x14); + if (!mStyleSettle.mFinished) { + mViewCache.mCenter += (stack_10c - mViewCache.mCenter) * colosseum->field_0x14; + mViewCache.mDirection.R(mViewCache.mDirection.R() + + (fVar8 - mViewCache.mDirection.R()) * colosseum->field_0x14); + mViewCache.mDirection.V(mViewCache.mDirection.V() + + (stack_1c0 - mViewCache.mDirection.V()) * colosseum->field_0x14); + mViewCache.mDirection.U(mViewCache.mDirection.U() + + (stack_1c4 - mViewCache.mDirection.U()) * colosseum->field_0x14); } else { - field_0x5c.mCenter = stack_10c; - field_0x5c.mDirection.Val(fVar8, stack_1c0, stack_1c4); + mViewCache.mCenter = stack_10c; + mViewCache.mDirection.Val(fVar8, stack_1c0, stack_1c4); } - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); f32 fVar9 = val18 + (val17 - val18) * dVar7; - field_0x5c.mFovy += (fVar9 - field_0x5c.mFovy) * mWork.colosseum.field_0x14; + mViewCache.mFovy += (fVar9 - mViewCache.mFovy) * colosseum->field_0x14; return true; } @@ -7208,12 +6760,12 @@ bool dCamera_c::test2Camera(s32 param_0) { } /* 80176E00-80178E50 171740 2050+00 1/0 0/0 0/0 .text towerCamera__9dCamera_cFl */ -// NONMATCHING way too much getting inlined bool dCamera_c::towerCamera(s32 param_0) { cSAngle stack_444 = cSAngle(mCamSetup.ChargeLatitude()); cSAngle stack_448 = 80.0f; cSAngle stack_44c = -60.0f; cSAngle stack_450 = 60.0f; + f32 unkFloatConst1 = 0.9f; f32 val0 = mCamParam.Val(param_0, 0); f32 val2 = mCamParam.Val(param_0, 2); f32 val1 = mCamParam.Val(param_0, 1); @@ -7241,7 +6793,9 @@ bool dCamera_c::towerCamera(s32 param_0) { f32 val14 = mCamParam.Val(param_0, 14); f32 val19 = mCamParam.Val(param_0, 19); - if (field_0x940 == 1) { + TowerData* tower = (TowerData*)mWork; + + if (mGear == 1) { val7 = val9; val8 = val9 * 0.9f; val2 = val3 = val4; @@ -7253,15 +6807,20 @@ bool dCamera_c::towerCamera(s32 param_0) { dComIfGp_getAttention(); if (mCurCamStyleTimer == 0) { - mWork.tower.field_0x54.x = field_0x7ac.field_0x18.position.x; - mWork.tower.field_0x54.y = field_0x7ac.field_0x18.position.y; - mWork.tower.field_0x54.z = field_0x7ac.field_0x18.position.z; - mWork.tower.field_0x60 = field_0x7ac.field_0x18.angle.y; - mWork.tower.field_0x64 = stack_454 <= cSAngle::_90 ? 1 : 0; + tower->field_0x54.x = mRoomMapTool.mArrowData.position.x; + tower->field_0x54.y = mRoomMapTool.mArrowData.position.y; + tower->field_0x54.z = mRoomMapTool.mArrowData.position.z; + tower->field_0x60 = mRoomMapTool.mArrowData.angle.y; + tower->field_0x64 = stack_454 <= cSAngle::_90 ? 1 : 0; } - if (field_0x7ac.field_0x2c == 0xff) { - return chaseCamera(mCamTypeData[specialType[CAM_TYPE_FIELD_S]].field_0x18[mIsWolf][mCurMode]); + if (mRoomMapTool.mArrowIndex == 0xff) { + if (mCurCamStyleTimer == 0) { + OS_REPORT("%s: %d: no mapdata use towerCamera() engine !!\n", __FILE__, 0x25ff); + } + + param_0 = mCamTypeData[specialType[CAM_TYPE_FIELD_S]].field_0x18[mIsWolf][mCurMode]; + return chaseCamera(param_0); } if (check_owner_action(mPadID, 0x8100000)) { @@ -7273,70 +6832,71 @@ bool dCamera_c::towerCamera(s32 param_0) { } } - cSGlobe stack_41c = attentionPos(mpPlayerActor) - mWork.tower.field_0x54; + cSGlobe stack_41c = attentionPos(mpPlayerActor) - tower->field_0x54; cSAngle stack_45c = directionOf(mpPlayerActor); - bool uVar2 = stack_41c.U() - field_0x5c.mDirection.U() > cSAngle::_0; + bool uVar2 = stack_41c.U() - mViewCache.mDirection.U() > cSAngle::_0; bool uVar1 = stack_41c.U() - stack_45c > cSAngle::_0; if (mCurCamStyleTimer == 0) { - mWork.tower.field_0x0 = 'TOWR'; - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); - mWork.tower.field_0x18 = 0.0f; - mWork.tower.field_0x1c = mWork.tower.field_0x20 = mDirection.R(); - mWork.tower.field_0x10 = mWork.tower.field_0x14 = 0; - mWork.tower.field_0x24 = mWork.tower.field_0x40 = mDirection.V().Degree(); - mWork.tower.field_0x48 = field_0x5c.mCenter; - mWork.tower.field_0x7c = mWork.tower.field_0x74 = mWork.tower.field_0x78 = 0.01f; - mWork.tower.field_0x70 = 0.75f; - mWork.tower.field_0x80 = val6; - mWork.tower.field_0x84 = val5; - mWork.tower.field_0x38 = 0; - mWork.tower.field_0x6b = true; - mWork.tower.field_0x2c = mFovy; - mWork.tower.field_0x44 = mWork.tower.field_0x3c = 0.0f; - mWork.tower.field_0x6a = false; + tower->field_0x0 = 'TOWR'; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); + tower->field_0x18 = 0.0f; + tower->field_0x1c = tower->field_0x20 = mDirection.R(); + tower->field_0x10 = tower->field_0x14 = 0; + tower->field_0x24 = tower->field_0x40 = mDirection.V().Degree(); + tower->field_0x48 = mViewCache.mCenter; + tower->field_0x74 = tower->field_0x78 = 0.01f; + tower->field_0x7c = 0.01f; + tower->field_0x70 = 0.75f; + tower->field_0x80 = val6; + tower->field_0x84 = val5; + tower->field_0x38 = 0; + tower->field_0x6b = true; + tower->field_0x2c = mFovy; + tower->field_0x3c = 0.0f; + tower->field_0x44 = 0.0f; + tower->field_0x6a = false; cSAngle stack_460; if (mCamParam.Flag(param_0, 0x100)) { - stack_460.Val(stack_41c.U() - field_0x5c.mDirection.U().Inv()); + stack_460.Val(stack_41c.U() - mViewCache.mDirection.U().Inv()); } else { stack_460.Val(stack_41c.U() - directionOf(mpPlayerActor)); } if (stack_460 > cSAngle::_0) { - mWork.tower.field_0x44 = 1.0f; + tower->field_0x44 = 1.0f; } else { - mWork.tower.field_0x44 = -1.0f; + tower->field_0x44 = -1.0f; } - mWork.tower.field_0x68 = false; - mWork.tower.field_0x28 = field_0x5c.mDirection.U(); - mWork.tower.field_0x30 = 0.0f; - mWork.tower.field_0x34 = 0.0f; - mWork.tower.field_0x6c = false; + tower->field_0x68 = false; + tower->field_0x28 = mViewCache.mDirection.U(); + tower->field_0x30 = 0.0f; + tower->field_0x34 = 0.0f; + tower->field_0x6c = false; } - f32 fVar4 = limitf((field_0x5c.mDirection.R() - val8) / (val7 - val8), 0.0f, 1.0f); + f32 fVar4 = limitf((mViewCache.mDirection.R() - val8) / (val7 - val8), 0.0f, 1.0f); cXyz stack_210; if (mCamParam.Flag(param_0, 0x400)) { - cSAngle stack_464 = mWork.tower.field_0x60 - stack_41c.U(); - mWork.tower.field_0x30 = val0 * stack_464.Sin(); + cSAngle stack_464 = tower->field_0x60 - stack_41c.U(); + tower->field_0x30 = val0 * stack_464.Sin(); } else if (chkFlag(0x100000) && check_owner_action(mPadID, 0xa50c0)) { if (mPadInfo.mMainStick.mLastPosX < -0.2f) { - mWork.tower.field_0x6c = true; + tower->field_0x6c = true; } if (mPadInfo.mMainStick.mLastPosX > 0.2f) { - mWork.tower.field_0x6c = false; + tower->field_0x6c = false; } - f32 tmp = mWork.tower.field_0x6c ? -45.0f : 45.0f; - mWork.tower.field_0x30 += (tmp - mWork.tower.field_0x30) * 0.04f; + tower->field_0x30 += ((tower->field_0x6c ? -45.0f : 45.0f) - tower->field_0x30) * 0.04f; } else { - mWork.tower.field_0x30 += (val0 - mWork.tower.field_0x30) * 0.06f; + tower->field_0x30 += (val0 - tower->field_0x30) * 0.06f; } - stack_210.x = mWork.tower.field_0x30; - if (!mWork.tower.field_0x68) { + stack_210.x = tower->field_0x30; + if (!tower->field_0x68) { stack_210.y = val3 + (val2 - val3) * fVar4; stack_210.z = val1 * fVar4; } else { @@ -7350,28 +6910,28 @@ bool dCamera_c::towerCamera(s32 param_0) { if (mCurCamStyleTimer == 0) { if (bVar3) { - mWork.tower.field_0x4 = 25; + tower->field_0x4 = 25; } else if (bVar4) { - mWork.tower.field_0x4 = 5; + tower->field_0x4 = 5; } else if (dComIfGp_evmng_cameraPlay()) { int timer; getEvIntData(&timer, "Timer", 20); - mWork.tower.field_0x4 = timer == 0 ? 1 : timer; - } else if (chkFlag(0x8000) && mCurMode == 1) { - field_0x158.field_0x0 = true; - mWork.tower.field_0x4 = 1; + tower->field_0x4 = timer != 0 ? timer : 1; + } else if (chkFlag(0x8000) || mCurMode == 1) { + mStyleSettle.mFinished = true; + tower->field_0x4 = 1; } else { cXyz stack_21c = relationalPos(mpPlayerActor, &stack_210); f32 fVar19 = cXyz(mEye - stack_21c).abs() - val7; f32 fVar18 = cXyz(mCenter - stack_21c).abs() - val7; f32 fVar17 = fabsf(fVar19 > fVar18 ? fVar19 : fVar18); f32 player_height = heightOf(mpPlayerActor); - f32 tmp = player_height < 10.0f ? 10.0f : player_height; - mWork.tower.field_0x4 = (int)(JMAFastSqrt(fVar17 / tmp) * 8.0f) + 1; + f32 tmp = fVar17 / (player_height < 10.0f ? 10.0f : player_height); + tower->field_0x4 = (int)(JMAFastSqrt(tmp) * 8.0f) + 1; } - mWork.tower.field_0x8 = mWork.tower.field_0x4 * (mWork.tower.field_0x4 + 1) >> 1; - mWork.tower.field_0xc = 0.0f; + tower->field_0x8 = tower->field_0x4 * (tower->field_0x4 + 1) >> 1; + tower->field_0xc = 0.0f; } cXyz stack_228; @@ -7386,7 +6946,7 @@ bool dCamera_c::towerCamera(s32 param_0) { if (mCamParam.Flag(param_0, 0x800) && mpLockonTarget != NULL) { stack_228 = attentionPos(mpPlayerActor) + stack_424.Xyz() + (attentionPos(mpLockonTarget) - attentionPos(mpPlayerActor)) * val26; - field_0x188 = mpLockonTarget; + mpAuxTargetActor1 = mpLockonTarget; setFlag(0x2000); } else { stack_228 = attentionPos(mpPlayerActor) + stack_424.Xyz(); @@ -7394,29 +6954,31 @@ bool dCamera_c::towerCamera(s32 param_0) { cXyz stack_234; - if (!field_0x158.field_0x0) { + if (!mStyleSettle.mFinished) { if (mBG.field_0xc0.field_0x1) { dComIfG_Bgsp().MoveBgMatrixCrrPos(mBG.field_0x5c.field_0x4, true, - &mWork.tower.field_0x48, NULL, NULL); + &tower->field_0x48, NULL, NULL); } - mWork.tower.field_0xc = mWork.tower.field_0x4 - (int)mCurCamStyleTimer; - f32 ratio = mWork.tower.field_0xc / mWork.tower.field_0x8; - mWork.tower.field_0x48 += (stack_228 - mWork.tower.field_0x48) * ratio; - field_0x5c.mCenter += (mWork.tower.field_0x48 - field_0x5c.mCenter) * val6; + tower->field_0xc = tower->field_0x4 - (int)mCurCamStyleTimer; + f32 fVar18; + f32 ratio = tower->field_0xc / tower->field_0x8; + tower->field_0x48 += (stack_228 - tower->field_0x48) * ratio; + mViewCache.mCenter += (tower->field_0x48 - mViewCache.mCenter) * val6; stack_234 = attentionPos(mpPlayerActor); stack_234.y -= 15.0f; dBgS_CamLinChk lin_chk; - if (lineBGCheck(&stack_234, &field_0x5c.mCenter, &lin_chk, 0x40b7)) { + if (lineBGCheck(&stack_234, &mViewCache.mCenter, &lin_chk, 0x40b7)) { cM3dGPla plane; dComIfG_Bgsp().GetTriPla(lin_chk, &plane); - field_0x5c.mCenter = lin_chk.GetCross(); - field_0x5c.mCenter += *plane.GetNP(); + mViewCache.mCenter = lin_chk.GetCross(); + mViewCache.mCenter += *plane.GetNP(); } - f32 fVar18 = limitf(field_0x5c.mDirection.R(), val8, val7); - cSAngle stack_468 = field_0x5c.mDirection.V(); + fVar18 = limitf(mViewCache.mDirection.R(), val8, val7); + cSAngle stack_468; + stack_468 = mViewCache.mDirection.V(); if (bVar5) { stack_468 = cSAngle(val12); } @@ -7427,46 +6989,46 @@ bool dCamera_c::towerCamera(s32 param_0) { stack_468 = stack_450; } - cSGlobe stack_42c(fVar18, stack_468, cSAngle(field_0x8c.Inv())); - field_0x5c.mDirection.R(field_0x5c.mDirection.R() - + (stack_42c.R() - field_0x5c.mDirection.R()) * ratio); - field_0x5c.mDirection.V(field_0x5c.mDirection.V() - + (stack_42c.V() - field_0x5c.mDirection.V()) * ratio); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + cSGlobe stack_42c(fVar18, stack_468, cSAngle(mControlledYaw.Inv())); + mViewCache.mDirection.R(mViewCache.mDirection.R() + + (stack_42c.R() - mViewCache.mDirection.R()) * ratio); + mViewCache.mDirection.V(mViewCache.mDirection.V() + + (stack_42c.V() - mViewCache.mDirection.V()) * ratio); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); - if (mCurCamStyleTimer >= mWork.tower.field_0x4 - 1) { - field_0x158.field_0x0 = true; + if (mCurCamStyleTimer >= tower->field_0x4 - 1) { + mStyleSettle.mFinished = true; } - mWork.tower.field_0x24 = field_0x5c.mDirection.V().Degree(); - mWork.tower.field_0x1c = mWork.tower.field_0x20 = field_0x5c.mDirection.R(); - field_0x5c.mFovy += (val17 - field_0x5c.mFovy) * ratio; - mWork.tower.field_0x8 -= mWork.tower.field_0xc; + tower->field_0x24 = mViewCache.mDirection.V().Degree(); + tower->field_0x1c = tower->field_0x20 = mViewCache.mDirection.R(); + mViewCache.mFovy += (val17 - mViewCache.mFovy) * ratio; + tower->field_0x8 -= tower->field_0xc; return true; } cXyz stack_240 = positionOf(mpPlayerActor); stack_240.y += 10.0f; - groundHeight(&stack_240); + f32 heightOffGround = footHeightOf(mpPlayerActor) - groundHeight(&stack_240); if (mBG.field_0xc0.field_0x44) { - mWork.tower.field_0x18 = 0.0f; - mWork.tower.field_0x10 = 0; - } else if (mWork.tower.field_0x10 < 80) { - mWork.tower.field_0x10++; - mWork.tower.field_0x18 += (0.9f - mWork.tower.field_0x18) - * dCamMath::rationalBezierRatio(mWork.tower.field_0x10 / 80.0f, 1.25f); + tower->field_0x18 = 0.0f; + tower->field_0x10 = 0; + } else if (tower->field_0x10 < 80) { + tower->field_0x10++; + tower->field_0x18 += (unkFloatConst1 - tower->field_0x18) + * dCamMath::rationalBezierRatio(tower->field_0x10 / 80.0f, 1.25f); } - cSAngle stack_46c = stack_45c - field_0x5c.mDirection.U(); - cXyz stack_24c(mWork.tower.field_0x80, mWork.tower.field_0x84, mWork.tower.field_0x80); - field_0x5c.mCenter += (stack_228 - field_0x5c.mCenter) * stack_24c; + cSAngle stack_46c = stack_45c - mViewCache.mDirection.U(); + cXyz stack_24c(tower->field_0x80, tower->field_0x84, tower->field_0x80); + mViewCache.mCenter += (stack_228 - mViewCache.mCenter) * stack_24c; stack_234 = attentionPos(mpPlayerActor); stack_234.y -= 15.0f; - cSGlobe stack_434 = field_0x5c.mEye - field_0x5c.mCenter; + cSGlobe stack_434 = mViewCache.mEye - mViewCache.mCenter; f32 fVar18 = 1.0f; if (val7 > val8) { - fVar18 = (field_0x5c.mDirection.R() - val8) / (val7 - val8); + fVar18 = (mViewCache.mDirection.R() - val8) / (val7 - val8); if (fVar18 < 0.0f) { fVar18 = 0.0f; } @@ -7475,25 +7037,27 @@ bool dCamera_c::towerCamera(s32 param_0) { } } - bool spinner_path_move = player->checkSpinnerPathMove(); - f32 fVar19 = mPadInfo.mCStick.mLastPosX; - f32 fVar20 = spinner_path_move ? 1.0f : mPadInfo.mMainStick.mLastValue; + bool spinner_path_move_temp = player->checkSpinnerPathMove(); + bool spinner_path_move = spinner_path_move_temp; + val6 = mPadInfo.mCStick.mLastPosX; + val3 = spinner_path_move ? 1.0f : mPadInfo.mMainStick.mLastValue; + f32 unkFloatConst2 = 0.05f; + f32 unkFloatConst3 = 8.0f; cSAngle stack_470; - cSAngle stack_474 = stack_454 + (stack_454 - stack_458) * fVar20; + cSAngle stack_474 = stack_454 + (stack_454 - stack_458) * val3; - if (!mCamParam.Flag(param_0, 0x40) && std::fabsf(fVar19) > 0.05f) { - f32 tmp = dCamMath::rationalBezierRatio(fVar19, 0.5f) * 8.0f; - cSAngle stack_478 = field_0x5c.mDirection.U() + cSAngle(tmp); - f32 tmp2 = std::fabsf(fVar19) - 0.05f; - stack_470.Val(field_0x5c.mDirection.U() + (stack_478 - field_0x5c.mDirection.U()) * tmp2); - mWork.tower.field_0x6a = true; - mWork.tower.field_0x78 += (0.8f - mWork.tower.field_0x78) * 0.05f; - mWork.tower.field_0x28 = stack_470; + if (!mCamParam.Flag(param_0, 0x40) && fabsf(val6) > unkFloatConst2) { + cSAngle stack_478 = mViewCache.mDirection.U() + cSAngle(dCamMath::rationalBezierRatio(val6, 0.5f) * unkFloatConst3); + f32 tmp2 = fabsf(val6) - unkFloatConst2; + stack_470.Val(mViewCache.mDirection.U() + (stack_478 - mViewCache.mDirection.U()) * tmp2); + tower->field_0x6a = true; + tower->field_0x78 += (0.8f - tower->field_0x78) * 0.05f; + tower->field_0x28 = stack_470; } else { - if (mWork.tower.field_0x6a) { - mWork.tower.field_0x78 = 0.0f; - mWork.tower.field_0x6a = false; + if (tower->field_0x6a) { + tower->field_0x78 = 0.0f; + tower->field_0x6a = false; } if (mCamParam.Flag(param_0, 0x800)) { @@ -7505,23 +7069,23 @@ bool dCamera_c::towerCamera(s32 param_0) { } if (stack_47c > cSAngle::_0) { - if (mWork.tower.field_0x44 < 1.0f) { - mWork.tower.field_0x44 += fVar19 * 0.025f; + if (tower->field_0x44 < 1.0f) { + tower->field_0x44 += fVar19 * 0.025f; } } else { - if (mWork.tower.field_0x44 > -1.0f) { - mWork.tower.field_0x44 -= fVar19 * 0.025f; + if (tower->field_0x44 > -1.0f) { + tower->field_0x44 -= fVar19 * 0.025f; } } - mWork.tower.field_0x78 += (0.5f - mWork.tower.field_0x78) * 0.05f; + tower->field_0x78 += (0.5f - tower->field_0x78) * 0.05f; - if (mWork.tower.field_0x64 == 0) { + if (tower->field_0x64 == 0) { cSAngle stack_480 = cSAngle::_180 - stack_474; - mWork.tower.field_0x28 = stack_41c.U().Inv() - stack_480 * mWork.tower.field_0x44; + tower->field_0x28 = stack_41c.U().Inv() - stack_480 * tower->field_0x44; } else { cSAngle stack_484 = stack_474; - mWork.tower.field_0x28 = stack_41c.U() - stack_484 * mWork.tower.field_0x44; + tower->field_0x28 = stack_41c.U() - stack_484 * tower->field_0x44; } } else if (mCamParam.Flag(param_0, 0x100)) { @@ -7541,47 +7105,50 @@ bool dCamera_c::towerCamera(s32 param_0) { stack_470.Val(stack_434.U() + ((stack_41c.U() - stack_474) - stack_434.U()) * tmp); } - mWork.tower.field_0x28 += (stack_470 - mWork.tower.field_0x28) * 0.33f; + tower->field_0x28 += (stack_470 - tower->field_0x28) * 0.33f; + f32 var_f15 = val3; if (check_owner_action(mPadID, 0x2000108)) { - val3 = 0.0f; + var_f15 = 0.0f; } - mWork.tower.field_0x78 = val27 + val22 * val3; + tower->field_0x78 = val27 + val22 * var_f15; } else { if (uVar1) { stack_470.Val(stack_434.U() + ((stack_41c.U() + stack_474) - stack_434.U()) * 1.0f); } else { - stack_470.Val(stack_434.U() + ((stack_41c.U() - stack_474) - stack_434.U()) * 1.0f); + f32 oneF = 1.0f; + stack_470.Val(stack_434.U() + ((stack_41c.U() - stack_474) - stack_434.U()) * oneF); } - mWork.tower.field_0x28 += (stack_470 - mWork.tower.field_0x28) * 0.33f; + tower->field_0x28 += (stack_470 - tower->field_0x28) * 0.33f; - if (check_owner_action(mPadID, 0x2000108) || mWork.tower.field_0x69 != uVar1) { - mWork.tower.field_0x78 = 0.0f; + if (check_owner_action(mPadID, 0x2000108) || tower->field_0x69 != uVar1) { + tower->field_0x78 = 0.0f; } else { - mWork.tower.field_0x78 += ((val27 + val22 * val3) - mWork.tower.field_0x78) * 0.05f; + tower->field_0x78 += ((val27 + val22 * val3) - tower->field_0x78) * 0.05f; } } } - mWork.tower.field_0x69 = uVar1; - field_0x5c.mDirection.U(field_0x5c.mDirection.U() - + (mWork.tower.field_0x28 - field_0x5c.mDirection.U()) * mWork.tower.field_0x78); - mWork.tower.field_0x24 += ((val13 + (val12 - val13) * fVar18) - mWork.tower.field_0x24) * val11; + tower->field_0x69 = uVar1; + mViewCache.mDirection.U(mViewCache.mDirection.U() + + (tower->field_0x28 - mViewCache.mDirection.U()) * tower->field_0x78); + f32 temp = (val13 + (val12 - val13) * fVar18); + tower->field_0x24 += (temp - tower->field_0x24) * val11; if (!mCamParam.Flag(param_0, 0x4000)) { - field_0x1b0 = cSAngle::_0; + mForwardTiltOffset = cSAngle::_0; } cSAngle stack_490; - if (mWork.tower.field_0x10 == 0) { - stack_490.Val(mWork.tower.field_0x24 + field_0x1b0.Degree()); - mWork.tower.field_0x74 += (val16 - mWork.tower.field_0x74) * 0.01f; + if (tower->field_0x10 == 0) { + stack_490.Val(tower->field_0x24 + mForwardTiltOffset.Degree()); + tower->field_0x74 += (val16 - tower->field_0x74) * 0.01f; } else { stack_490 = stack_434.V(); - mWork.tower.field_0x24 = stack_490.Degree(); - mWork.tower.field_0x74 = dCamMath::rationalBezierRatio(mWork.tower.field_0x18, 0.7f); + tower->field_0x24 = stack_490.Degree(); + tower->field_0x74 = dCamMath::rationalBezierRatio(tower->field_0x18, 0.7f); } if (stack_490 < stack_44c) { @@ -7590,44 +7157,44 @@ bool dCamera_c::towerCamera(s32 param_0) { stack_490.Val(stack_450); } - field_0x5c.mDirection.V(field_0x5c.mDirection.V() - + (stack_490 - field_0x5c.mDirection.V()) * mWork.tower.field_0x74); + mViewCache.mDirection.V(mViewCache.mDirection.V() + + (stack_490 - mViewCache.mDirection.V()) * tower->field_0x74); f32 dVar20 = stack_434.R(); - mWork.tower.field_0x1c += (val8 - mWork.tower.field_0x1c) * val11; - mWork.tower.field_0x20 += (val7 - mWork.tower.field_0x20) * val11; + tower->field_0x1c += (val8 - tower->field_0x1c) * val11; + tower->field_0x20 += (val7 - tower->field_0x20) * val11; - if (dVar20 < mWork.tower.field_0x1c) { - mWork.tower.field_0x70 += (val10 - mWork.tower.field_0x70) * 0.01f; - dVar20 = mWork.tower.field_0x1c; - } else if (dVar20 > mWork.tower.field_0x20) { - mWork.tower.field_0x70 += (val10 - mWork.tower.field_0x70) * 0.01f; - dVar20 = mWork.tower.field_0x20; + if (dVar20 < tower->field_0x1c) { + tower->field_0x70 += (val10 - tower->field_0x70) * 0.01f; + dVar20 = tower->field_0x1c; + } else if (dVar20 > tower->field_0x20) { + tower->field_0x70 += (val10 - tower->field_0x70) * 0.01f; + dVar20 = tower->field_0x20; } else { - mWork.tower.field_0x70 = 1.0f; + tower->field_0x70 = 1.0f; } if (mCamParam.Flag(param_0, 0x400)) { - cSGlobe stack_43c(dVar20, field_0x5c.mDirection.V(), field_0x5c.mDirection.U()); + cSGlobe stack_43c(dVar20, mViewCache.mDirection.V(), mViewCache.mDirection.U()); cXyz stack_258; - cXyz stack_264 = field_0x5c.mCenter + stack_43c.Xyz(); - mWork.tower.field_0x68 = false; - if (lineBGCheck(&stack_264, &field_0x5c.mCenter, &stack_258, 0x40b7)) { - mWork.tower.field_0x68 = true; + cXyz stack_264 = mViewCache.mCenter + stack_43c.Xyz(); + tower->field_0x68 = false; + if (lineBGCheck(&stack_264, &mViewCache.mCenter, &stack_258, 0x40b7)) { + tower->field_0x68 = true; } } - field_0x5c.mDirection.R(field_0x5c.mDirection.R() - + (dVar20 - field_0x5c.mDirection.R()) * mWork.tower.field_0x70); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + mViewCache.mDirection.R(mViewCache.mDirection.R() + + (dVar20 - mViewCache.mDirection.R()) * tower->field_0x70); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); - if (mBG.field_0x0.field_0x0 && field_0x5c.mEye.y < mBG.field_0x0.field_0x58 + 5.0f) { - field_0x5c.mEye.y = mBG.field_0x0.field_0x58 + 5.0f; - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + if (mBG.field_0x0.field_0x0 && mViewCache.mEye.y < mBG.field_0x0.field_0x58 + 5.0f) { + mViewCache.mEye.y = mBG.field_0x0.field_0x58 + 5.0f; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); } - mWork.tower.field_0x7c += (val21 - mWork.tower.field_0x7c) * 0.01f; + tower->field_0x7c += (val21 - tower->field_0x7c) * 0.01f; f32 tmp = val18 + (val17 - val18) * fVar18; - field_0x5c.mFovy += (tmp - field_0x5c.mFovy) * mWork.tower.field_0x7c; + mViewCache.mFovy += (tmp - mViewCache.mFovy) * tower->field_0x7c; return true; } @@ -7644,6 +7211,8 @@ bool dCamera_c::hookshotCamera(s32 param_0) { f32 val23 = mCamParam.Val(param_0, 23); f32 val17 = mCamParam.Val(param_0, 17); + HookshotData* hookshot = (HookshotData*)mWork; + cXyz stack_9c[4] = { cXyz(180.0f, 20.0f, -160.0f), cXyz(160.0f, 60.0f, -200.0f), @@ -7660,8 +7229,8 @@ bool dCamera_c::hookshotCamera(s32 param_0) { cXyz stack_e4(val0, val2, val1); if (mCurCamStyleTimer == 0) { - mWork.hookshot.field_0x0 = 'HOOK'; - mWork.hookshot.field_0x8 = mCenter; + hookshot->field_0x0 = 'HOOK'; + hookshot->field_0x8 = mCenter; cXyz stack_f0 = positionOf(mpPlayerActor); cXyz stack_fc = daAlink_getAlinkActorClass()->getHsChainTopPos(); csXyz stack_20c = daAlink_getAlinkActorClass()->getHsAngle(); @@ -7682,7 +7251,7 @@ bool dCamera_c::hookshotCamera(s32 param_0) { if (stack_108.abs() > val11 && mCamParam.Flag(param_0, 0x800)) { cXyz stack_114; cSGlobe stack_21c; - bool uVar6 = (field_0xa8 & 0x10) != 0; + bool uVar6 = (mFrameCounter & 0x10) != 0; for (int i = 0; i < 8; i++) { stack_114 = array[i >> 1]; if (uVar6) { @@ -7693,70 +7262,331 @@ bool dCamera_c::hookshotCamera(s32 param_0) { if (!iVar2) { stack_21c.V(stack_21c.V() + stack_20c.x); } - mWork.hookshot.field_0x14 = stack_fc + stack_21c.Xyz(); - if (!lineBGCheck(&stack_f0, &mWork.hookshot.field_0x14, 7)) { - mWork.hookshot.field_0x20 = true; + hookshot->field_0x14 = stack_fc + stack_21c.Xyz(); + if (!lineBGCheck(&stack_f0, &hookshot->field_0x14, 7)) { + hookshot->field_0x20 = true; break; } uVar6 = !uVar6; } } - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; return true; } f32 fovy; - if (mWork.hookshot.field_0x20 && mCurCamStyleTimer > 8 && mCamParam.Flag(param_0, 0x800)) { - stack_d8 = mWork.hookshot.field_0x14; + if (hookshot->field_0x20 && mCurCamStyleTimer > 8 && mCamParam.Flag(param_0, 0x800)) { + stack_d8 = hookshot->field_0x14; fovy = val17; val23 = 1.0f; } else { stack_d8 = mEye; fovy = val17; } - + cXyz stack_120(val6, val5, val6); cXyz stack_12c = relationalPos(mpPlayerActor, &stack_e4); if (mBG.field_0xc0.field_0x1) { dComIfG_Bgsp().MoveBgMatrixCrrPos(mBG.field_0x5c.field_0x4, true, - &mWork.hookshot.field_0x8, NULL, NULL); + &hookshot->field_0x8, NULL, NULL); dComIfG_Bgsp().MoveBgMatrixCrrPos(mBG.field_0x5c.field_0x4, true, - &mWork.hookshot.field_0x14, NULL, NULL); + &hookshot->field_0x14, NULL, NULL); } - field_0x5c.mCenter += (stack_12c - field_0x5c.mCenter) * stack_120; - cSGlobe stack_224 = stack_d8 - field_0x5c.mCenter; + mViewCache.mCenter += (stack_12c - mViewCache.mCenter) * stack_120; + cSGlobe stack_224 = stack_d8 - mViewCache.mCenter; if (stack_224.R() < val8) { stack_224.R(val8); } if (stack_224.R() > val7) { stack_224.R(val7); } - field_0x5c.mDirection.R(field_0x5c.mDirection.R() - + (stack_224.R() - field_0x5c.mDirection.R()) * val23); - field_0x5c.mDirection.V(field_0x5c.mDirection.V() - + (stack_224.V() - field_0x5c.mDirection.V()) * val23); - field_0x5c.mDirection.U(field_0x5c.mDirection.U() - + (stack_224.U() - field_0x5c.mDirection.U()) * val23); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy += (fovy - field_0x5c.mFovy) * val23; + mViewCache.mDirection.R(mViewCache.mDirection.R() + + (stack_224.R() - mViewCache.mDirection.R()) * val23); + mViewCache.mDirection.V(mViewCache.mDirection.V() + + (stack_224.V() - mViewCache.mDirection.V()) * val23); + mViewCache.mDirection.U(mViewCache.mDirection.U() + + (stack_224.U() - mViewCache.mDirection.U()) * val23); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy += (fovy - mViewCache.mFovy) * val23; return true; } -/* ############################################################################################## */ -/* 8042C9AC-8042C9B8 0596CC 000C+00 1/1 0/0 0/0 .bss @14159 */ -static u8 lit_14159[12]; - -/* 80451040-80451044 -00001 0004+00 2/2 0/0 0/0 .sbss None */ -/* 80451040 0002+00 data_80451040 _120$14158 */ -/* 80451042 0002+00 data_80451042 None */ -static u8 struct_80451040[4]; - -/* 80179590-8017A2A0 173ED0 0D10+00 1/0 0/0 0/0 .text railCamera__9dCamera_cFl */ bool dCamera_c::railCamera(s32 param_0) { - // NONMATCHING + f32 proximityEaseBias = mCamParam.Val(param_0, 15); + f32 targetRadiusFar = mCamParam.Val(param_0, 7); + f32 targetRadiusNear = mCamParam.Val(param_0, 10); + f32 searchRadius = mCamParam.Val(param_0, 11); + f32 influenceDistMax = mCamParam.Val(param_0, 9); +#if DEBUG + influenceDistMax = mCamParam.Val(param_0, 12); +#endif + f32 val27 = mCamParam.Val(param_0, 27); + f32 fovFar = mCamParam.Val(param_0, 17); + f32 fovNear = mCamParam.Val(param_0, 20); + f32 responseGain = mCamParam.Val(param_0, 21); + f32 responseLerpRate = mCamParam.Val(param_0, 14); + f32 centerLerpGainY = mCamParam.Val(param_0, 5); + f32 centerLerpGainXZ = mCamParam.Val(param_0, 6); + f32 playerOffsetX = mCamParam.Val(param_0, 0); + f32 playerOffsetY = mCamParam.Val(param_0, 2); + f32 playerOffsetZ = mCamParam.Val(param_0, 1); + + RailData* rail = (RailData*)mWork; + + if (mCurCamStyleTimer == 0) { + if (chkFlag(0x1000)) { + responseGain = 1.0f; + val27 = 1.0f; + rail->field_0x10 = 1.0f; + } else { + rail->field_0x10 = 0.0f; + } + rail->field_0x0d = 0xff; + } + + rail->field_0x10 += responseLerpRate * (responseGain - rail->field_0x10); + if (mRoomMapTool.mCameraIndex == 0xff || mRoomMapTool.mPathId == 0xff) { + OS_REPORT("camera: rail data not found!\n"); + return false; + } + + dPath* roomPath = dPath_GetRoomPath(mRoomMapTool.mPathId, fopAcM_GetRoomNo(this->mpPlayerActor)); + if (roomPath == NULL) { + OS_REPORT("camera: rail data not found!\n"); + return false; + } + + mCamParam.Arg0(mRoomMapTool.mCamData.field_0x12); + if (mCamParam.Arg0() != 0xff) { + searchRadius = (f32)(s8)mCamParam.Arg0() * 100.0f; + } + + s32 roomPathLen = roomPath->m_num; + if (mCurCamStyleTimer == 0) { + rail->field_0x00 = 'RAIL'; + mStyleSettle.mFinished = true; + rail->field_0x0c = 0xff; + rail->field_0x14 = attentionPos(this->mpPlayerActor); + if (mCamParam.Flag(param_0, 0x800)) { + rail->field_0x08 = getParamTargetActor(mCurType); + if (rail->field_0x00 == NULL) { + OS_REPORT("camera: target %s actor not found!\n", &mCamTypeData[mCurType].name[16]); + } + } + rail->field_0x0d = 0xfe; + } + + if (rail->field_0x0d != mRoomMapTool.mPathId) { + rail->field_0x0d = mRoomMapTool.mPathId; + rail->field_0x20.x = mRoomMapTool.mArrowData.position.x; + rail->field_0x20.y = mRoomMapTool.mArrowData.position.y; + rail->field_0x20.z = mRoomMapTool.mArrowData.position.z; + if (mCamParam.Flag(param_0, 0x800)) { + cXyz attnPos = attentionPos(mpPlayerActor); + cXyz curPointPos = roomPath->m_points->m_position; + cXyz prevPointPos = roomPath->m_points[roomPathLen - 1].m_position; + f32 horDist1 = dCamMath::xyzHorizontalDistance(curPointPos, attnPos); + f32 horDist2 = dCamMath::xyzHorizontalDistance(prevPointPos, attnPos); + if (horDist1 < horDist2) { + rail->field_0x14 = prevPointPos; + } else { + rail->field_0x14 = curPointPos; + } + } + } + + cXyz focusPos; + cXyz eyeRefPos; + if (mCamParam.Flag(param_0, 0x800) && rail->field_0x08 != NULL) { + eyeRefPos = positionOf(rail->field_0x08); + eyeRefPos.y += 300.0f; + if (mpLockonTarget != NULL) { + mpAuxTargetActor1 = rail->field_0x04 = mpLockonTarget; + setFlag(0x2000); + focusPos = attentionPos(rail->field_0x04); + } else { + mpAuxTargetActor1 = rail->field_0x04 = rail->field_0x08; + setFlag(0x2000); + focusPos = eyeRefPos; + } + } else if (mCamParam.Flag(param_0, 0x100)) { + rail->field_0x08 = rail->field_0x04 = NULL; + + focusPos = attentionPos(mpPlayerActor); + + eyeRefPos = rail->field_0x20; + } else if (mpLockonTarget != NULL) { + mpAuxTargetActor1 = rail->field_0x08 = rail->field_0x04 = mpLockonTarget; + focusPos = attentionPos(rail->field_0x04); + + setFlag(0x2000); + + eyeRefPos = attentionPos(rail->field_0x08); + } else { + rail->field_0x08 = rail->field_0x04 = NULL; + + focusPos = attentionPos(mpPlayerActor); + + eyeRefPos = mEye; + } + + cSGlobe focusFromPlayer = focusPos - attentionPos(mpPlayerActor); + f32 proximityRatio = 1.0f - focusFromPlayer.R() / influenceDistMax; + if (focusFromPlayer.R() > searchRadius * 2.0f) { + rail->field_0x08 = rail->field_0x04 = 0; + + cSGlobe dirGlobe = mViewCache.mDirection; + dirGlobe.R(-searchRadius); + focusPos = eyeRefPos = attentionPos(mpPlayerActor) + dirGlobe.Xyz(); + + proximityRatio = 0.0f; + } else { + if (proximityRatio < 0.0f) { + proximityRatio = 0.0f; + } else if (proximityRatio > 1.0f) { + proximityRatio = 1.0f; + } + } + + cXyz desiredCenter; + cXyz centerLerpGainVec(centerLerpGainXZ, centerLerpGainY, centerLerpGainXZ); + cXyz playerOffset(playerOffsetX, playerOffsetY, playerOffsetZ); + focusFromPlayer.R(proximityRatio * focusFromPlayer.R() * 0.75f); + + int i; + if (mCamParam.Flag(param_0, 0x400)) { + cXyz unkXyz5; + bool unkFlag1 = false; + cM3dGLin unkLine1; + + for (i = 0; i < roomPathLen - 1; i++) { + unkLine1.set(roomPath->m_points[i].m_position, + roomPath->m_points[i + 1].m_position); + f32 unusedFloat1; + if (cM3d_Len3dSqPntAndSegLine(&unkLine1, &eyeRefPos, &unkXyz5, &unusedFloat1) != 0) { + unkXyz5 += (eyeRefPos - unkXyz5) * 0.1f; + unkFlag1 = true; + break; + } + } + + if (!unkFlag1) { + unkXyz5 = attentionPos(mpPlayerActor) + focusFromPlayer.Xyz(); + } + + desiredCenter = mViewCache.mCenter + (unkXyz5 - mViewCache.mCenter) * 0.1f; + } else { + desiredCenter = relationalPos(mpPlayerActor, &playerOffset) + focusFromPlayer.Xyz(); + } + + mViewCache.mCenter += (desiredCenter - mViewCache.mCenter) * centerLerpGainVec; + + f32 proximityEase = dCamMath::rationalBezierRatio(proximityRatio, proximityEaseBias); + + cM3dGSph searchSphere; + searchSphere.Set(mViewCache.mCenter, searchRadius); + + f32 bestHorDist = 0.0f; + cXyz bestEyePos = mViewCache.mEye; + s32 intersectCount = 0; + if (mCamParam.Flag(param_0, 0x800)) { + eyeRefPos = rail->field_0x14; + } + cXyz segStart; + cXyz segEnd; + cXyz crossPosA; + cXyz crossPosB; + cM3dGLin segLine; + + for (i = 0; i < roomPathLen - 1; i++) { + segStart.set(roomPath->m_points[i].m_position); + segEnd.set(roomPath->m_points[i + 1].m_position); + segLine.set(segStart, segEnd); + + f32 horDist; + switch (cM3d_Cross_LinSph_CrossPos(searchSphere, segLine, &crossPosA, &crossPosB)) { + case 2: + if (posInLine2D(&segStart, &segEnd, &crossPosB) != 0) { + horDist = dCamMath::xyzHorizontalDistance(crossPosB, eyeRefPos); + if (horDist > bestHorDist) { + bestHorDist = horDist; + bestEyePos = crossPosB; + } + intersectCount++; + } + case 1: + if (posInLine2D(&segStart, &segEnd, &crossPosA) != 0) { + horDist = dCamMath::xyzHorizontalDistance(crossPosA, eyeRefPos); + if (horDist > bestHorDist) { + bestHorDist = horDist; + bestEyePos = crossPosA; + } + intersectCount++; + } + break; + } + } + + if (dPath_ChkClose(roomPath)) { + segStart.set(roomPath->m_points[i].m_position); + segEnd.set(roomPath->m_points->m_position); + segLine.set(segStart, segEnd); + + f32 horDist; + switch (cM3d_Cross_LinSph_CrossPos(searchSphere, segLine, &crossPosA, &crossPosB)) { + case 2: + if (posInLine2D(&segStart, &segEnd, &crossPosB) != 0) { + horDist = dCamMath::xyzHorizontalDistance(crossPosB, eyeRefPos); + if (horDist > bestHorDist) { + bestHorDist = horDist; + bestEyePos = crossPosB; + } + intersectCount++; + } + case 1: + if (posInLine2D(&segStart, &segEnd, &crossPosA) != 0) { + horDist = dCamMath::xyzHorizontalDistance(crossPosA, eyeRefPos); + if (horDist > bestHorDist) { + bestHorDist = horDist; + bestEyePos = crossPosA; + } + intersectCount++; + } + break; + } + + roomPathLen++; + } + + cSGlobe eyeFromCenter = bestEyePos - mViewCache.mCenter; + cSAngle unkAngle1 = eyeFromCenter.U() - mViewCache.mDirection.U(); + + static cSAngle yawSnapThreshold = 120.0f; + if (unkAngle1.Abs() > yawSnapThreshold) { + setUSOAngle(); + } + + f32 desiredRadius; + if (mCamParam.Flag(param_0, 0x1000)) { + desiredRadius = eyeFromCenter.R(); + } else { + desiredRadius = targetRadiusFar - proximityEase * (targetRadiusFar - targetRadiusNear); + } + + mViewCache.mDirection.R(mViewCache.mDirection.R() + + rail->field_0x10 * (desiredRadius - mViewCache.mDirection.R())); + mViewCache.mDirection.U(mViewCache.mDirection.U() + + (eyeFromCenter.U() - mViewCache.mDirection.U()) * rail->field_0x10); + mViewCache.mDirection.V(mViewCache.mDirection.V() + + (eyeFromCenter.V() - mViewCache.mDirection.V()) * rail->field_0x10); + + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy += responseGain * (fovFar - proximityEase * (fovFar - fovNear) - mViewCache.mFovy); + + return true; } /* ############################################################################################## */ @@ -7860,12 +7690,204 @@ SECTION_SDATA2 static f32 lit_15773 = 4.0f / 3.0f; /* 8017D97C-8017DFAC 1782BC 0630+00 1/0 0/0 0/0 .text observeCamera__9dCamera_cFl */ bool dCamera_c::observeCamera(s32 param_0) { - // NONMATCHING + + f32 dVar8 = mCamSetup.CurveWeight(); + f32 val0 = mCamParam.Val(param_0, 0); + f32 val17 = mCamParam.Val(param_0, 17); + cSAngle val16 = mCamParam.Val(param_0, 16); + cSAngle val24 = mCamParam.Val(param_0, 24); + + ObserveData* observe = (ObserveData*)mWork; + + if (mCurCamStyleTimer == 0) { + observe->field_0x00 = 'OBSV'; + mStyleSettle.mFinished = true; + if (mRoomMapTool.mCameraIndex != 0xff && mCamParam.Flag(param_0, 0x200) != 0) + { + mCamParam.Fovy((mRoomMapTool).mCamData.field_0x11); + mCamParam.Arg0((mRoomMapTool).mCamData.field_0x12); + mCamParam.Arg1((mRoomMapTool).mCamData.field_0x13); + mCamParam.Arg2((mRoomMapTool).mCamData.field_0x14); + if (param_0 == mCamTypeData[mCurType].field_0x18[mIsWolf][mCurMode]) { + mCamParam.Change(param_0); + } + } else { + mCamParam.Fovy(0xff); + mCamParam.Arg0(0xff); + mCamParam.Arg1(0xff); + mCamParam.Arg2(-1); + if (param_0 == mCamTypeData[mCurType].field_0x18[mIsWolf][mCurMode]) { + mCamParam.Change(param_0); + } + } + if (mRoomMapTool.mArrowIndex != 0xff) { + observe->field_0x04 = cXyz(mRoomMapTool.mArrowData.position.x, mRoomMapTool.mArrowData.position.y, + mRoomMapTool.mArrowData.position.z); + cSGlobe cStack_c0(50.0f, -mRoomMapTool.mArrowData.angle.x, + mRoomMapTool.mArrowData.angle.y); + observe->field_0x28 = observe->field_0x04 + cStack_c0.Xyz(); + } else { + observe->field_0x04 = mViewCache.mEye; + cSGlobe cStack_c8(50.0f, mViewCache.mDirection.V().Inv(), mViewCache.mDirection.U().Inv()); + observe->field_0x28 = observe->field_0x04 + cStack_c8.Xyz(); + } + observe->field_0x10.Val(observe->field_0x04 - observe->field_0x28); + mViewCache.mCenter = observe->field_0x28; + mViewCache.mEye = observe->field_0x04; + mViewCache.mDirection = observe->field_0x10; + } + + if (mCamParam.Flag(param_0, 0x200)) { + if (mCamParam.Fovy() != 0xff) { + val17 = (s32)(s8)mCamParam.Fovy(); + } + if (mCamParam.Arg0() != 0xff) { + val16 = (f32)(s32)(s8)mCamParam.Arg0(); + } + if (mCamParam.Arg1() != 0xff) { + val24 = (f32)(s32)(s8)mCamParam.Arg1(); + } + } + + f32 sp54; + f32 sp50; + int zero = 0; + if (zero == 0) { + if (mPadInfo.mMainStick.mLastPosX >= 0.75f) { + sp50 = 1.0f; + } else if (mPadInfo.mMainStick.mLastPosX <= -0.75f) { + sp50 = -1.0f; + } else { + sp50 = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosX * 1.3333334f, dVar8); + } + + if (mPadInfo.mMainStick.mLastPosY >= 0.75f) { + sp54 = 1.0f; + } else if (mPadInfo.mMainStick.mLastPosY <= -0.75f) { + sp54 = -1.0f; + } else { + sp54 = dCamMath::rationalBezierRatio(mPadInfo.mMainStick.mLastPosY * 1.3333334f, dVar8); + } + + if (dComIfGs_getOptCameraControl() != 0) { + sp54 = -sp54; + } + } + + cSAngle sp40; + cSAngle sp3C = mViewCache.mDirection.V() + (cSAngle)(val0 * sp54); + sp40 = sp3C - observe->field_0x10.V(); + if (sp40 > val16) { + sp3C = observe->field_0x10.V() + val16; + } else if (sp40 < -val16) { + sp3C = observe->field_0x10.V() - val16; + } + + mViewCache.mDirection.V(sp3C); + cSAngle sp38 = mViewCache.mDirection.U() - (cSAngle)(val0 * sp50); + sp40 = sp38 - observe->field_0x10.U(); + if (sp40 > val24) { + sp38 = observe->field_0x10.U() + val24; + } else if (sp40 < -val24) { + sp38 = observe->field_0x10.U() - val24; + } + + mViewCache.mDirection.U(sp38); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = val17; + + return true; } /* 8017DFAC-8017E730 1788EC 0784+00 1/0 0/0 0/0 .text fixedFrameCamera__9dCamera_cFl */ bool dCamera_c::fixedFrameCamera(s32 param_0) { - // NONMATCHING + f32 val24 = mCamParam.Val(param_0, 24); + f32 val17 = mCamParam.Val(param_0, 17); + + FixedFrameData* fixedFrame = (FixedFrameData*)mWork; + + if (mCurCamStyleTimer == 0) { + fixedFrame->mArrowIndex = 0xff; + mStyleSettle.mFinished = false; + } + + if (mRoomMapTool.mArrowIndex == 0xff) { + return false; + } + + if (fixedFrame->mArrowIndex != mRoomMapTool.mArrowIndex) { + mCurCamStyleTimer = 0; + fixedFrame->mArrowIndex = mRoomMapTool.mArrowIndex; + mStyleSettle.mFinished = false; + } + + if (mCurCamStyleTimer == 0) { + fixedFrame->field_0x00 = 'FIXF'; + fixedFrame->field_0x04 = cXyz(mRoomMapTool.mArrowData.position.x, mRoomMapTool.mArrowData.position.y, + mRoomMapTool.mArrowData.position.z); + + cSGlobe spFC(100000.0f, -mRoomMapTool.mArrowData.angle.x, + mRoomMapTool.mArrowData.angle.y); + fixedFrame->field_0x2c = fixedFrame->field_0x38 = fixedFrame->field_0x04 + spFC.Xyz(); + + cM3dGLin sp14C(fixedFrame->field_0x2c, fixedFrame->field_0x04); + cXyz sp12C = attentionPos(this->mpPlayerActor); + cXyz sp120; + f32 sp30; + if (cM3d_Len3dSqPntAndSegLine(&sp14C, &sp12C, &sp120, &sp30) != 0) { + fixedFrame->field_0x2c = sp120; + } else { + f32 temp = cXyz(fixedFrame->field_0x04 - attentionPos(mpPlayerActor)).abs(); + spFC.Val(temp, -mRoomMapTool.mArrowData.angle.x, + mRoomMapTool.mArrowData.angle.y); + fixedFrame->field_0x2c = fixedFrame->field_0x04 + spFC.Xyz(); + } + + dBgS_CamLinChk dStack_108; + if (lineBGCheck(&fixedFrame->field_0x04, &fixedFrame->field_0x2c, &dStack_108, 0x40b7)) { + cM3dGPla sp138; + dComIfG_Bgsp().GetTriPla(dStack_108, &sp138); + cXyz cross = dStack_108.GetCross(); + fixedFrame->field_0x2c = cross - *sp138.GetNP() * 5.0f; + } + fixedFrame->field_0x10.Val(fixedFrame->field_0x04 - fixedFrame->field_0x2c); + + fixedFrame->field_0x24 = mRoomMapTool.mCamData.field_0x11 == 0xff ? val17 : mRoomMapTool.mCamData.field_0x11; + + s32 local_240 = mRoomMapTool.mCamData.field_0x13 == 0xff ? -1 : mRoomMapTool.mCamData.field_0x13; + + if (local_240 == -1) { + f32 temp1 = cXyz(fixedFrame->field_0x04 - mEye).abs(); + temp1 /= heightOf(mpPlayerActor); + fixedFrame->field_0x18 = (s32)(val24 * JMAFastSqrt(temp1)) + 1; + } else { + fixedFrame->field_0x18 = local_240; + } + fixedFrame->field_0x1c = (fixedFrame->field_0x18 * (fixedFrame->field_0x18 + 1)) >> 1; + } + if (!mStyleSettle.mFinished) { + fixedFrame->field_0x20 = (f32)(s32)(fixedFrame->field_0x18 - mCurCamStyleTimer); + f32 fVar11 = fixedFrame->field_0x20 / fixedFrame->field_0x1c; + fixedFrame->field_0x1c -= fixedFrame->field_0x20; + + mViewCache.mCenter += (fixedFrame->field_0x2c - mViewCache.mCenter) * fVar11; + mViewCache.mDirection.R(mViewCache.mDirection.R() + + fVar11 * (fixedFrame->field_0x10.R() - mViewCache.mDirection.R())); + mViewCache.mDirection.V(mViewCache.mDirection.V() + + (fixedFrame->field_0x10.V() - mViewCache.mDirection.V()) * fVar11); + + mViewCache.mDirection.U(mViewCache.mDirection.U() + + (fixedFrame->field_0x10.U() - mViewCache.mDirection.U()) * fVar11); + + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = mViewCache.mFovy + fVar11 * (fixedFrame->field_0x24 - mViewCache.mFovy); + + if (mCurCamStyleTimer >= fixedFrame->field_0x18 - 1) { + mStyleSettle.mFinished = true; + } + } + + return true; } /* 8017E730-8017F25C 179070 0B2C+00 1/0 0/0 0/0 .text fixedPositionCamera__9dCamera_cFl @@ -7875,25 +7897,124 @@ bool dCamera_c::fixedPositionCamera(s32 param_0) { } /* 8017F25C-8017F828 179B9C 05CC+00 1/0 0/0 0/0 .text oneSideCamera__9dCamera_cFl */ -bool dCamera_c::oneSideCamera(s32 param_0) { - // NONMATCHING -} +bool dCamera_c::oneSideCamera(s32 param_1) { + f32 unkRatio; -/* 80393F68-80393F68 0205C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8039429F = "CAMERA"; -SECTION_DEAD static char const* const stringBase_803942A6 = "KeepDist"; -SECTION_DEAD static char const* const stringBase_803942AF = "Trim"; -SECTION_DEAD static char const* const stringBase_803942B4 = "DEFAULT"; -SECTION_DEAD static char const* const stringBase_803942BC = "Recover"; -SECTION_DEAD static char const* const stringBase_803942C4 = "WaitAnyKey"; -SECTION_DEAD static char const* const stringBase_803942CF = "BGCheck"; -SECTION_DEAD static char const* const stringBase_803942D7 = "SavePos"; -SECTION_DEAD static char const* const stringBase_803942DF = "LoadPos"; -SECTION_DEAD static char const* const stringBase_803942E7 = "PlayerHide"; -SECTION_DEAD static char const* const stringBase_803942F2 = "WideMode"; -#pragma pop + f32 focusOffsetX = mCamParam.Val(param_1, 0); + f32 focusOffsetY = mCamParam.Val(param_1, 2); + f32 focusOffsetZ = mCamParam.Val(param_1, 1); + f32 val5 = mCamParam.Val(param_1, 5); + f32 val6 = mCamParam.Val(param_1, 6); + f32 val7 = mCamParam.Val(param_1, 7); + f32 val8 = mCamParam.Val(param_1, 8); + f32 val24 = mCamParam.Val(param_1, 24); + f32 val23 = mCamParam.Val(param_1, 23); + f32 val17 = mCamParam.Val(param_1, 17); + + f32 angle180 = 180.0f; + + OneSideData* oneSide = (OneSideData*)mWork; + + cXyz arrowPos; + if (mCurCamStyleTimer == 0) { + oneSide->field_0x00 = 'ONES'; + oneSide->field_0x1c = cXyz::Zero; + oneSide->field_0x2c = 0xff; + oneSide->field_0x34 = 0xfe; + } + + if (mRoomMapTool.mArrowIndex != oneSide->field_0x2c) { + mCurCamStyleTimer = 0; + mStyleSettle.mFinished = false; + oneSide->field_0x2c = mRoomMapTool.mArrowIndex; + } + + oneSide->field_0x28 = 0; + cSAngle unkAngle1; + if (mCamParam.Flag(param_1, 0x200) && mRoomMapTool.mArrowIndex != 0xff) { + if (mRoomMapTool.mCameraIndex != oneSide->field_0x34) { + mCamParam.Fovy(mRoomMapTool.mCamData.field_0x11); + mCamParam.Arg0(mRoomMapTool.mCamData.field_0x12); + mCamParam.Arg1(mRoomMapTool.mCamData.field_0x13); + mCamParam.Arg2(mRoomMapTool.mCamData.field_0x14); + if (param_1 == mCamTypeData[mCurType].field_0x18[mIsWolf][mCurMode]) { + mCamParam.Change(param_1); + } + oneSide->field_0x34 = mRoomMapTool.mCameraIndex; + } + arrowPos.x = mRoomMapTool.mArrowData.position.x; + arrowPos.y = mRoomMapTool.mArrowData.position.y; + arrowPos.z = mRoomMapTool.mArrowData.position.z; + if (oneSide->field_0x1c != arrowPos) { + setUSOAngle(); + } + oneSide->field_0x1c = arrowPos; + + if (mCamParam.Fovy() != 0xff) { + f32 fovY = mCamParam.Fovy(); + mCamParam.SetVal(param_1, 17, fovY); + } + + if (mCamParam.Arg0() != 0xff) { + unkAngle1.Val((f32)mCamParam.Arg0()); + } else { + unkAngle1.Val(90.0f); + } + + if (mCamParam.Arg1() != 0xff) { + val24 = (f32)mCamParam.Arg1() / 100.0f; + } + } else { + arrowPos = mEye; + unkAngle1.Val(90.0f); + } + + mStyleSettle.mFinished = true; + cXyz focusPosOffset(focusOffsetX, focusOffsetY, focusOffsetZ); + focusPosOffset = dCamMath::xyzRotateY(focusPosOffset, directionOf(mpPlayerActor)); + cXyz focusPosWithOffset = attentionPos(mpPlayerActor) + focusPosOffset; + cSGlobe focusGlobe = focusPosWithOffset - arrowPos; + if (focusGlobe.R() >= angle180) { + unkRatio = 1.0f; + } else { + f32 ratio = focusGlobe.R() / angle180; + unkRatio = ratio; + } + + if (!mCamParam.Flag(param_1, 0x800)) { + focusGlobe.V((s16)-mRoomMapTool.mArrowData.angle.x); + } + + cSAngle arrowAngle = (s16)(s32)mRoomMapTool.mArrowData.angle.y; + cSAngle unkAngle2 = focusGlobe.U() - arrowAngle; + cSAngle unkAngle3; + cSAngle unkAngle4 = unkAngle2 * val24; + if ((unkAngle2 >= unkAngle1 || unkAngle2 <= -unkAngle1) && mCurCamStyleTimer != 0) { + unkAngle3 = oneSide->field_0x32; + } else if (unkAngle4 > unkAngle1) { + unkAngle3 = arrowAngle + unkAngle1; + } else if (unkAngle4 < -unkAngle1) { + unkAngle3 = arrowAngle - unkAngle1; + } else { + unkAngle3 = arrowAngle + unkAngle4; + } + + if (mCurCamStyleTimer == 0) { + oneSide->field_0x32 = unkAngle3; + } else { + oneSide->field_0x32 += (unkAngle3 - oneSide->field_0x32) * val6 * unkRatio; + } + + focusGlobe.U(oneSide->field_0x32); + cXyz center = arrowPos + focusGlobe.Xyz(); + mViewCache.mCenter = center; + mViewCache.mEye = arrowPos; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); + f32 fovY = val17; + mViewCache.mFovy = fovY; + + return true; +} /* 8017F828-8018050C 17A168 0CE4+00 2/1 0/0 0/0 .text eventCamera__9dCamera_cFl */ bool dCamera_c::eventCamera(s32 param_0) { @@ -7976,11 +8097,20 @@ bool dCamera_c::eventCamera(s32 param_0) { (this->*l_func[0])(); } -/* ############################################################################################## */ /* 80393F68-80393F68 0205C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ #pragma push #pragma force_active on -SECTION_DEAD static char const* const stringBase_803942FB = "Continue"; +SECTION_DEAD static char const* const stringBase_8039429F = "CAMERA"; +SECTION_DEAD static char const* const stringBase_803942A6 = "KeepDist"; +SECTION_DEAD static char const* const stringBase_803942AF = "Trim"; +SECTION_DEAD static char const* const stringBase_803942B4 = "DEFAULT"; +SECTION_DEAD static char const* const stringBase_803942BC = "Recover"; +SECTION_DEAD static char const* const stringBase_803942C4 = "WaitAnyKey"; +SECTION_DEAD static char const* const stringBase_803942CF = "BGCheck"; +SECTION_DEAD static char const* const stringBase_803942D7 = "SavePos"; +SECTION_DEAD static char const* const stringBase_803942DF = "LoadPos"; +SECTION_DEAD static char const* const stringBase_803942E7 = "PlayerHide"; +SECTION_DEAD static char const* const stringBase_803942F2 = "WideMode"; #pragma pop /* 8018050C-801806D4 17AE4C 01C8+00 1/0 0/0 0/0 .text currentEvCamera__9dCamera_cFv */ @@ -7995,31 +8125,31 @@ bool dCamera_c::currentEvCamera() { } (this->*engine_tbl[mCamParam.Algorythmn(style)])(style); setFlag(0x8); - field_0x88 = 0x4001; + mBumpCheckFlags = 0x4001; clrFlag(0x80080); if (mCamParam.Flag(style, 0x1)) { if (mCurMode == 1 && mCamParam.Flag(style, 0x2) != 0) { - field_0x88 = 0x4007; + mBumpCheckFlags = 0x4007; } else if (chkFlag(0x20000)) { - field_0x88 = 0x4037; + mBumpCheckFlags = 0x4037; } else { - field_0x88 = 0x4017; + mBumpCheckFlags = 0x4017; } } else if (mCamParam.Flag(style, 0x2)) { - field_0x88 = 0x4007; + mBumpCheckFlags = 0x4007; } if (mCamParam.Flag(style, 0x8)) { - field_0x88 |= 0x80; + mBumpCheckFlags |= 0x80; } if (mCamParam.Flag(style, 0x10)) { - field_0x88 &= ~0x4000; + mBumpCheckFlags &= ~0x4000; } - field_0x88 &= ~0x8; + mBumpCheckFlags &= ~0x8; if (mCamParam.Flag(style, 0x4)) { - field_0x88 = 0; + mBumpCheckFlags = 0; } return true; @@ -8033,48 +8163,48 @@ bool dCamera_c::letCamera(s32) { /* 801806DC-80180738 17B01C 005C+00 2/2 0/0 0/0 .text setEventRecoveryTrans__9dCamera_cFs */ void dCamera_c::setEventRecoveryTrans(s16 param_0) { - pushInfo(&field_0x110.field_0x8, param_0); - field_0x110.field_0x28 = positionOf(mpPlayerActor); + pushInfo(&mRecovery.field_0x8, param_0); + mRecovery.field_0x28 = positionOf(mpPlayerActor); } /* 80180738-80180A40 17B078 0308+00 1/1 0/0 0/0 .text runEventRecoveryTrans__9dCamera_cFv */ s16 dCamera_c::runEventRecoveryTrans() { - if (field_0x110.field_0x8.field_0x1e > 0) { + if (mRecovery.field_0x8.field_0x1e > 0) { field_0x668++; - if (field_0x668 >= field_0x110.field_0x8.field_0x1e) { - field_0x110.field_0x8.field_0x1e = 0; + if (field_0x668 >= mRecovery.field_0x8.field_0x1e) { + mRecovery.field_0x8.field_0x1e = 0; } else { - f32 ratio = dCamMath::rationalBezierRatio(1.0f - (f32)field_0x668 / (f32)field_0x110.field_0x8.field_0x1e, 1.0f); - mCenter = field_0x5c.mCenter + (field_0x110.field_0x8.mCenter - field_0x5c.mCenter) * ratio; + f32 ratio = dCamMath::rationalBezierRatio(1.0f - (f32)field_0x668 / (f32)mRecovery.field_0x8.field_0x1e, 1.0f); + mCenter = mViewCache.mCenter + (mRecovery.field_0x8.mCenter - mViewCache.mCenter) * ratio; cXyz attPos = attentionPos(mpPlayerActor); dBgS_CamLinChk lin_chk; cM3dGPla plane; - if ((field_0x88 & 0xb7) && lineBGCheck(&attPos, &mCenter, &lin_chk, 0x40b7)) { + if ((mBumpCheckFlags & 0xb7) && lineBGCheck(&attPos, &mCenter, &lin_chk, 0x40b7)) { dComIfG_Bgsp().GetTriPla(lin_chk, &plane); mCenter = lin_chk.GetCross(); mCenter += *plane.GetNP() * 5.0f; } - mEye = field_0x5c.mEye + (field_0x110.field_0x8.mEye - field_0x5c.mEye) * ratio; - if ((field_0x88 & 0xb7) && lineBGCheck(&mCenter, &mEye, &lin_chk, 0x40b7)) { + mEye = mViewCache.mEye + (mRecovery.field_0x8.mEye - mViewCache.mEye) * ratio; + if ((mBumpCheckFlags & 0xb7) && lineBGCheck(&mCenter, &mEye, &lin_chk, 0x40b7)) { dComIfG_Bgsp().GetTriPla(lin_chk, &plane); mEye = lin_chk.GetCross(); mEye += *plane.GetNP() * mCamSetup.mBGChk.GazeBackMargin(); } mDirection.Val(mEye - mCenter); - mFovy = field_0x5c.mFovy + ratio * (field_0x110.field_0x8.mFovy - field_0x5c.mFovy); - mBank = field_0x5c.mBank + (field_0x110.field_0x8.mBank - field_0x5c.mBank) * ratio; + mFovy = mViewCache.mFovy + ratio * (mRecovery.field_0x8.mFovy - mViewCache.mFovy); + mBank = mViewCache.mBank + (mRecovery.field_0x8.mBank - mViewCache.mBank) * ratio; } } else { - clearInfo(&field_0x110.field_0x8, 0); + clearInfo(&mRecovery.field_0x8, 0); } - return field_0x110.field_0x8.field_0x1e; + return mRecovery.field_0x8.field_0x1e; } /* 80180A40-80180AA8 17B380 0068+00 0/0 3/3 0/0 .text EventRecoverNotime__9dCamera_cFv */ void dCamera_c::EventRecoverNotime() { - field_0x110.field_0x4 = 1; - Reset(field_0x110.field_0x8.mCenter, field_0x110.field_0x8.mEye, field_0x110.field_0x8.mFovy, field_0x110.field_0x8.mBank); + mRecovery.field_0x4 = 1; + Reset(mRecovery.field_0x8.mCenter, mRecovery.field_0x8.mEye, mRecovery.field_0x8.mFovy, mRecovery.field_0x8.mBank); } /* 80180AA8-80180AE0 17B3E8 0038+00 0/0 0/0 24/24 .text Set__9dCamera_cF4cXyz4cXyz */ @@ -8120,13 +8250,13 @@ void dCamera_c::Reset(cXyz i_center, cXyz i_eye) { /* 80180C68-80180D24 17B5A8 00BC+00 2/2 1/1 3/3 .text Reset__9dCamera_cFv */ int dCamera_c::Reset() { - field_0x5c.mCenter = mCenter; - field_0x5c.mEye = mEye; - field_0x5c.mFovy = mFovy; - field_0x5c.mBank = mBank; + mViewCache.mCenter = mCenter; + mViewCache.mEye = mEye; + mViewCache.mFovy = mFovy; + mViewCache.mBank = mBank; mDirection.Val(mEye - mCenter); - field_0x5c.mDirection = mDirection; - field_0x8c = cSAngle(mDirection.U().Inv()); + mViewCache.mDirection = mDirection; + mControlledYaw = cSAngle(mDirection.U().Inv()); return 1; } @@ -8143,9 +8273,9 @@ f32 dCamera_c::shakeCamera() { int var_r28 = 1 << (15 - var_r27); f32 var_f30 = 1.0f; - for (int i = 0; i < 4; i++) { + for (var_r29 = 0; var_r29 < 4; var_r29++) { if (var_r28 & var_r26) { - var_f31 += var_f30 * wave[i]; + var_f31 += var_f30 * wave[var_r29]; } else { var_f30 *= 0.43f; } @@ -8168,13 +8298,11 @@ f32 dCamera_c::shakeCamera() { sp64 = sp64 * var_f31; if (field_0x6fc & 2) { - mShake.mEyeShake = sp64 * 1.0f; - mShake.field_0x24 = mShake.mEyeShake; + mShake.field_0x24 = mShake.mEyeShake = sp64 * 1.0f; } if (field_0x6fc & 0x40) { - mShake.mEyeShake = sp64 * 10.0f; - mShake.field_0x24 = mShake.mEyeShake; + mShake.field_0x24 = mShake.mEyeShake = sp64 * 10.0f; } if (field_0x6fc & 4) { @@ -8186,7 +8314,7 @@ f32 dCamera_c::shakeCamera() { } if (field_0x6fc & 0x10) { - mDoGph_gInf_c::setBlureRate(var_f29 * 30.0f); + mDoGph_gInf_c::setBlureRate((int)(var_f29 * 30.0f)); mDoGph_gInf_c::onBlure(); } } else { @@ -8333,13 +8461,13 @@ int dCamera_c::blureCamera() { mBlure.mPosition.z = 0.0f; } mBlure.field_0x4--; - + cXyz xyz; f32 mult = (f32)mBlure.field_0x4 / (f32)mBlure.field_0x14; xyz.x = mBlure.mScale.x + (1.0f - mBlure.mScale.x) * mult; xyz.y = mBlure.mScale.y + (1.0f - mBlure.mScale.y) * mult; xyz.z = 0.0f; - + mDoMtx_stack_c::transS(mBlure.mPosition.x, mBlure.mPosition.y, mBlure.mPosition.z); mDoMtx_stack_c::scaleM(xyz); mDoMtx_stack_c::XrotM(mBlure.field_0x8.x); @@ -8479,7 +8607,8 @@ static void store(camera_process_class* i_camera) { camera_class* a_camera = (camera_class*)i_camera; dCamera_c* dCamera = &a_camera->mCamera; int camera_id = get_camera_id(a_camera); - view_port_class* viewport = get_window(camera_id)->getViewPort(); + dDlst_window_c* window = get_window(camera_id); + view_port_class* viewport = window->getViewPort(); bool error = false; cXyz center(*fopCamM_GetCenter_p(a_camera)); cXyz eye(*fopCamM_GetEye_p(a_camera)); @@ -8503,15 +8632,15 @@ static void store(camera_process_class* i_camera) { } if (demoCamera->checkEnable(dDemo_camera_c::ENABLE_PROJ_FOVY_e)) { fovy = demoCamera->getFovy(); - } + } } else if (!dCamera->CheckFlag(1)) { center = dCamera->Center(); eye = dCamera->Eye(); up = dCamera->Up(); angle = dCamera->Bank(); - fovy = dCamera->Fovy(); + fovy = dCamera->Fovy(); } - + if (eye.x == center.x && eye.z == center.z) { error = true; OS_REPORT("camera: ERROR: bad direction !!\n"); @@ -8528,16 +8657,21 @@ static void store(camera_process_class* i_camera) { error = true; OS_REPORT("camera: ERROR: bad eye !!\n"); } - + if (!error) { fopCamM_SetCenter(a_camera, center.x, center.y, center.z); fopCamM_SetEye(a_camera, eye.x, eye.y, eye.z); fopCamM_SetUp(a_camera, up.x, up.y, up.z); - fopCamM_SetBank(a_camera, angle.Val()); + fopCamM_SetBank(a_camera, angle); fopCamM_SetFovy(a_camera, fovy); } - dStage_dt_c* stage = dComIfGp_getStage(); + dStage_dt_c* stage = (dStage_dt_c*)dComIfGp_getStage(); + + if (a_camera->mCamera.mCamSetup.CheckFlag(0x400)) { + //TODO + } + if (dComIfGp_getCameraAttentionStatus(camera_id) & 8) { fopCamM_SetNear(a_camera, 30.0f); } else { @@ -8548,16 +8682,16 @@ static void store(camera_process_class* i_camera) { if (stage != NULL) { fopCamM_SetFar(a_camera, stage->getStagInfo()->mFar); } - + cSGlobe globe(eye - center); fopCamM_SetAngleY(a_camera, globe.U().Inv()); - fopCamM_SetAngleX(a_camera, globe.V().Val()); + fopCamM_SetAngleX(a_camera, globe.V()); } /* 80181E20-80181E64 17C760 0044+00 1/1 0/0 0/0 .text Up__9dCamera_cFv */ cXyz dCamera_c::Up() { if (chkFlag(0x10)) { - return field_0x740.field_0x18; + return mUpOverride.field_0x18; } else { return mUp; } @@ -8745,10 +8879,14 @@ static int camera_create(camera_class* i_this) { } /* 80182484-801824C0 17CDC4 003C+00 1/0 0/0 0/0 .text camera_delete__FP20camera_process_class */ -// NONMATCHING - equivalent, instructions swapped static int camera_delete(camera_process_class* i_this) { dCamera_c* camera = &((camera_class*)i_this)->mCamera; + if (camera->CameraID() == 0) { + // not implemented + //dDbgCamera.Finish(); + } + camera->~dCamera_c(); dComIfGp_setCamera(0, NULL); return 1; @@ -8764,7 +8902,7 @@ void dCamForcusLine::Init() { field_0x49 = 0; field_0x48 = 1; field_0x38 = cXyz(320.0f, 240.0f, 0.0f); - + field_0x44.r = 0xFF; field_0x44.g = 0xFF; field_0x44.b = 0xFF; diff --git a/src/d/d_demo.cpp b/src/d/d_demo.cpp index 503546c2ab..a139556483 100644 --- a/src/d/d_demo.cpp +++ b/src/d/d_demo.cpp @@ -3,6 +3,7 @@ #include "d/d_demo.h" #include "d/d_msg_class.h" #include "d/d_msg_object.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_graphic.h" #include "d/actor/d_a_movie_player.h" #include "JSystem/JGadget/pointer.h" diff --git a/src/d/d_envse.cpp b/src/d/d_envse.cpp index 8b06df7e0f..b4dfd2ff88 100644 --- a/src/d/d_envse.cpp +++ b/src/d/d_envse.cpp @@ -8,6 +8,7 @@ #include "d/d_envse.h" #include "d/d_com_inf_game.h" #include "d/d_path.h" +#include "f_op/f_op_camera_mng.h" #include "string.h" /* 80182DD4-80182DDC 17D714 0008+00 1/0 0/0 0/0 .text dEnvSe_Draw__FP8dEnvSe_c */ diff --git a/src/d/d_ev_camera.cpp b/src/d/d_ev_camera.cpp index ebf66312ad..8237140738 100644 --- a/src/d/d_ev_camera.cpp +++ b/src/d/d_ev_camera.cpp @@ -10,9 +10,9 @@ #include "d/d_demo.h" #include "m_Do/m_Do_controller_pad.h" #include "d/d_camera.h" -#include "d/d_camera.h" #include "d/actor/d_a_midna.h" #include "d/actor/d_a_player.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_lib.h" #include "d/d_drawlist.h" #include "d/actor/d_a_alink.h" @@ -496,10 +496,11 @@ fopAc_ac_c* dCamera_c::getEvActor(char* i_event, char* param_1) { /* 80089730-800897E8 084070 00B8+00 0/0 3/0 0/0 .text pauseEvCamera__9dCamera_cFv */ bool dCamera_c::pauseEvCamera() { - struct mWork::event* event = &mWork.event; + EventData* event = (EventData*)mWork; + if (mCurCamStyleTimer == 0) { Reset(); - field_0x158.field_0x0 = 1; + mStyleSettle.mFinished = 1; event->field_0x0 = getEvIntData(&event->field_0x8, "Timer", -1); getEvIntData(&event->field_0x4, "Stay", 0); } @@ -522,7 +523,7 @@ namespace { /* 800897E8-8008A510 084128 0D28+00 0/0 1/0 0/0 .text fixedFrameEvCamera__9dCamera_cFv */ bool dCamera_c::fixedFrameEvCamera() { - struct mWork::fixedFrame* fframe_p = &mWork.fixedFrame; + FixedFrameEvData* fframe_p = (FixedFrameEvData*)mWork; if (mCurCamStyleTimer == 0) { cXyz sp38, sp44; getEvXyzData(&sp44, "Eye", mEye); @@ -597,7 +598,7 @@ bool dCamera_c::fixedFrameEvCamera() { fframe_p->field_0x4 = relationalPos(fframe_p->mpRelActor, &sp44); } else if (fframe_p->mpRelActor && fframe_p->mRelUseMask[1] == 'r') { - if ((field_0xac & 1) != 0) { + if ((mTicks & 1) != 0) { sp44.x = -sp44.x; } @@ -635,16 +636,16 @@ bool dCamera_c::fixedFrameEvCamera() { fframe_p->field_0x4 = sp44; } - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; } - field_0x5c.mCenter = fframe_p->field_0x10; - field_0x5c.mEye = fframe_p->field_0x4; - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); - field_0x5c.mFovy = fframe_p->field_0x1c; + mViewCache.mCenter = fframe_p->field_0x10; + mViewCache.mEye = fframe_p->field_0x4; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); + mViewCache.mFovy = fframe_p->field_0x1c; if (fframe_p->field_0x30) { - field_0x5c.mBank = cAngle::d2s(fframe_p->field_0x20); + mViewCache.mBank = cAngle::d2s(fframe_p->field_0x20); setFlag(0x400); } @@ -657,7 +658,7 @@ bool dCamera_c::fixedFrameEvCamera() { /* 8008A510-8008A974 084E50 0464+00 0/0 1/0 0/0 .text stokerEvCamera__9dCamera_cFv */ bool dCamera_c::stokerEvCamera() { - struct mWork::stoker* stoker_p = &mWork.stoker; + StokerData* stoker_p = (StokerData*)mWork; if (mCurCamStyleTimer == 0) { cXyz unused_0, unused_1; getEvXyzData(&stoker_p->field_0x4, "EyeGap", cXyz::Zero); @@ -678,7 +679,7 @@ bool dCamera_c::stokerEvCamera() { stoker_p->field_0x34 = fopAcM_GetID(stoker_p->field_0x2c); stoker_p->field_0x38 = fopAcM_GetID(stoker_p->field_0x30); - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; } cSGlobe cStack_d0; @@ -693,7 +694,7 @@ bool dCamera_c::stokerEvCamera() { cStack_d0.U(cStack_d0.U() + stoker_p->field_0x30->shape_angle.y); cXyz cStack_38 = attentionPos(stoker_p->field_0x30) + cStack_d0.Xyz(); - field_0x5c.mCenter += (cStack_38 - field_0x5c.mCenter) * stoker_p->field_0x1c; + mViewCache.mCenter += (cStack_38 - mViewCache.mCenter) * stoker_p->field_0x1c; } if (stoker_p->field_0x2c) { @@ -706,15 +707,15 @@ bool dCamera_c::stokerEvCamera() { cStack_d0.V(cStack_d0.V() + stoker_p->field_0x2c->shape_angle.x); cStack_d0.U(cStack_d0.U() + stoker_p->field_0x2c->shape_angle.y); cXyz tmp_vec = attentionPos(stoker_p->field_0x2c) + cStack_d0.Xyz(); - field_0x5c.mEye += (tmp_vec - field_0x5c.mEye) * stoker_p->field_0x20; + mViewCache.mEye += (tmp_vec - mViewCache.mEye) * stoker_p->field_0x20; } - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); - field_0x5c.mFovy = stoker_p->field_0x24; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); + mViewCache.mFovy = stoker_p->field_0x24; if (stoker_p->field_0x1) { cAngle this_00; - field_0x5c.mBank = this_00.d2s(stoker_p->field_0x28); + mViewCache.mBank = this_00.d2s(stoker_p->field_0x28); setFlag(0x400); } @@ -727,7 +728,7 @@ bool dCamera_c::stokerEvCamera() { /* 8008A974-8008B9B0 0852B4 103C+00 0/0 1/0 0/0 .text rollingEvCamera__9dCamera_cFv */ bool dCamera_c::rollingEvCamera() { - struct mWork::rolling* rolling_p = &mWork.rolling; + struct RollingData* rolling_p = (RollingData*)mWork; if (mCurCamStyleTimer == 0) { getEvXyzData(&rolling_p->mEye, "Eye", mEye); getEvXyzData(&rolling_p->mCenter, "Center", mCenter); @@ -775,7 +776,7 @@ bool dCamera_c::rollingEvCamera() { rolling_p->field_0x4 = relationalPos(rolling_p->mpRelActor, &rolling_p->mEye); } else if (rolling_p->mpRelActor && rolling_p->mRelActor[1] == 'r') { - if ((field_0xac & 1) != 0) { + if ((mTicks & 1) != 0) { rolling_p->mEye.x = -rolling_p->mEye.x; } rolling_p->field_0x4 = relationalPos(rolling_p->mpRelActor, &rolling_p->mEye); @@ -807,7 +808,7 @@ bool dCamera_c::rollingEvCamera() { rolling_p->field_0x4 = rolling_p->mEye; } - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; } if ((rolling_p->mTransType == 1 || rolling_p->mTransType == 2) && rolling_p->mpRelActor) { @@ -836,22 +837,22 @@ bool dCamera_c::rollingEvCamera() { } } - field_0x5c.mCenter += (rolling_p->field_0x10 - field_0x5c.mCenter) * rolling_p->mCtrCus; - field_0x5c.mDirection.Val(rolling_p->field_0x4 - rolling_p->field_0x10); + mViewCache.mCenter += (rolling_p->field_0x10 - mViewCache.mCenter) * rolling_p->mCtrCus; + mViewCache.mDirection.Val(rolling_p->field_0x4 - rolling_p->field_0x10); if (rolling_p->mTransType == 2) { - field_0x5c.mDirection.V(rolling_p->mLatitude); + mViewCache.mDirection.V(rolling_p->mLatitude); } - field_0x5c.mDirection.U(field_0x5c.mDirection.U() + (cSAngle)(mCurCamStyleTimer * rolling_p->mRoll)); - field_0x5c.mDirection.R(mCurCamStyleTimer * rolling_p->mRadiusAdd + field_0x5c.mDirection.R()); + mViewCache.mDirection.U(mViewCache.mDirection.U() + (cSAngle)(mCurCamStyleTimer * rolling_p->mRoll)); + mViewCache.mDirection.R(mCurCamStyleTimer * rolling_p->mRadiusAdd + mViewCache.mDirection.R()); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = rolling_p->mFovy; + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = rolling_p->mFovy; if (rolling_p->field_0x1) { cAngle this_00; - field_0x5c.mBank = this_00.d2s(rolling_p->mBank); + mViewCache.mBank = this_00.d2s(rolling_p->mBank); setFlag(0x400); } @@ -875,7 +876,7 @@ namespace { /* 8008B9B0-8008BE2C 0862F0 047C+00 0/0 1/0 0/0 .text fixedPositionEvCamera__9dCamera_cFv */ bool dCamera_c::fixedPositionEvCamera() { static cXyz DefaultGap(cXyz::Zero); - struct mWork::fixedPos* fpos_p = &mWork.fixedPos; + FixedPosData* fpos_p = (FixedPosData*)mWork; bool rv = true; if (mCurCamStyleTimer == 0) { @@ -887,8 +888,8 @@ bool dCamera_c::fixedPositionEvCamera() { getEvFloatData(&fpos_p->field_0x38, "Radius", 100000.0f); getEvFloatData(&fpos_p->field_0x34, "StartRadius", fpos_p->field_0x38); fpos_p->field_0x1 = getEvFloatData(&fpos_p->field_0x2c, "Bank", 0.0f); - getEvStringData(&mWork.event.field_0x48, "RelUseMask", "o"); - fpos_p->field_0x0 = getEvIntData(&mWork.event.field_0x4c, "Timer", -1); + getEvStringData(&fpos_p->field_0x48, "RelUseMask", "o"); + fpos_p->field_0x0 = getEvIntData(&fpos_p->field_0x4c, "Timer", -1); if ((fpos_p->field_0x40 = getEvActor("Target", "@PLAYER")) == NULL) { OS_REPORT("camera: event: error: target actor missing\n"); @@ -898,14 +899,14 @@ bool dCamera_c::fixedPositionEvCamera() { fpos_p->field_0x44 = fopAcM_GetID(fpos_p->field_0x40); fpos_p->field_0x3c = getEvActor("RelActor"); - if (fpos_p->field_0x3c && isRelChar(mWork.event.field_0x48)) { + if (fpos_p->field_0x3c && isRelChar(fpos_p->field_0x48)) { fpos_p->field_0x4 = relationalPos(fpos_p->field_0x3c, &sp24); } else { fpos_p->field_0x4 = sp24; } fpos_p->field_0x1c = mCenter; - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; } if (fopAcM_SearchByID(fpos_p->field_0x44) == NULL) { @@ -913,32 +914,32 @@ bool dCamera_c::fixedPositionEvCamera() { return 1; } - fpos_p->field_0x1c = relationalPos(fpos_p->field_0x40, &mWork.talk.field_0x10); - field_0x5c.mCenter += (fpos_p->field_0x1c - field_0x5c.mCenter) * mWork.chase.field_0x30; - field_0x5c.mEye = mWork.talk.field_0x4; - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + fpos_p->field_0x1c = relationalPos(fpos_p->field_0x40, &fpos_p->field_0x10); + mViewCache.mCenter += (fpos_p->field_0x1c - mViewCache.mCenter) * fpos_p->field_0x30; + mViewCache.mEye = fpos_p->field_0x4; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); f32 fVar1 = fpos_p->field_0x38; if (fpos_p->field_0x0 && mCurCamStyleTimer < fpos_p->field_0x4c) { fVar1 = fpos_p->field_0x34 + (fpos_p->field_0x38 - fpos_p->field_0x34) - * (mCurCamStyleTimer / f32(mWork.event.field_0x4c)); + * (mCurCamStyleTimer / f32(fpos_p->field_0x4c)); rv = false; } - if (field_0x5c.mDirection.R() > fVar1) { - field_0x5c.mDirection.R(fVar1); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + if (mViewCache.mDirection.R() > fVar1) { + mViewCache.mDirection.R(fVar1); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); } - field_0x5c.mFovy = mWork.chase.field_0x28; + mViewCache.mFovy = fpos_p->field_0x28; if (fpos_p->field_0x1) { cAngle this_00; - field_0x5c.mBank = this_00.d2s(mWork.chase.field_0x2c); + mViewCache.mBank = this_00.d2s(fpos_p->field_0x2c); setFlag(0x400); } if (rv != 0) { - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; } return rv; @@ -973,7 +974,7 @@ f32 dummy_lit_3871(int val) { /* 8008BE98-8008E750 0867D8 28B8+00 3/3 0/0 0/0 .text transEvCamera__9dCamera_cFi */ bool dCamera_c::transEvCamera(int param_1) { - struct mWork::trans* trans = &mWork.trans; + TransData* trans = (TransData*)mWork; f32 mid_val; struct { @@ -1018,7 +1019,7 @@ bool dCamera_c::transEvCamera(int param_1) { getEvFloatData(&trans->mFovy, "Fovy", mFovy); trans->field_0x68 = getEvFloatData(&trans->field_0x3c, "Bank", mBank.Degree()); } else { - dCamInfo_c* ptr1 = &field_0xd0[slot]; + dCamInfo_c* ptr1 = &mSavedViewStack[slot]; trans->mCenter = (*ptr1).mCenter; trans->mEye = (*ptr1).mEye; trans->mFovy = (*ptr1).mFovy; @@ -1034,7 +1035,7 @@ bool dCamera_c::transEvCamera(int param_1) { getEvFloatData(&trans->mStartFovy, "StartFovy", mFovy); trans->field_0x68 |= getEvFloatData(&trans->field_0x1c, "StartBank", mBank.Degree()); } else { - dCamInfo_c* ptr2 = &field_0xd0[slot]; + dCamInfo_c* ptr2 = &mSavedViewStack[slot]; trans->mStartCenter = (*ptr2).mCenter; trans->mStartEye = (*ptr2).mEye; trans->mStartFovy = (*ptr2).mFovy; @@ -1090,7 +1091,7 @@ bool dCamera_c::transEvCamera(int param_1) { if (trans->field_0x49 == 114) { my_vec_0 = relationalPos(trans->mRelActor, &trans->mStartCenter); - if ((field_0xac & 1) != 0) { + if ((mTicks & 1) != 0) { trans->mStartEye.x = -trans->mStartEye.x; } @@ -1222,7 +1223,7 @@ bool dCamera_c::transEvCamera(int param_1) { } } else if (trans->field_0x4b == 114) { my_vec_0 = relationalPos(trans->mRelActor, &trans->mCenter); - if ((field_0xac & 1) != 0) { + if ((mTicks & 1) != 0) { trans->mEye.x = -trans->mEye.x; } @@ -1238,18 +1239,18 @@ bool dCamera_c::transEvCamera(int param_1) { } } else { if (trans->field_0x4a == 97) { - cXyz cStack_320 = dCamMath::xyzRotateY(trans->mCenter, cSAngle(field_0x5c.mDirection.U().Inv())); - trans->mCenter = field_0x5c.mCenter + cStack_320; + cXyz cStack_320 = dCamMath::xyzRotateY(trans->mCenter, cSAngle(mViewCache.mDirection.U().Inv())); + trans->mCenter = mViewCache.mCenter + cStack_320; } if (trans->field_0x4b == 97) { - cXyz cStack_32c = dCamMath::xyzRotateY(trans->mEye, cSAngle(field_0x5c.mDirection.U().Inv())); - trans->mEye = field_0x5c.mEye + cStack_32c; + cXyz cStack_32c = dCamMath::xyzRotateY(trans->mEye, cSAngle(mViewCache.mDirection.U().Inv())); + trans->mEye = mViewCache.mEye + cStack_32c; } } trans->field_0x60 = mDirection.Invert(); - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; } if (trans->mRelActor && fopAcM_SearchByID(trans->mRelActorID) == NULL) { @@ -1347,7 +1348,7 @@ bool dCamera_c::transEvCamera(int param_1) { cXyz sp168; if (trans->mTransType == 1) { sp15c = pos.mXyz_1 + ((pos2.mXyz_1 - pos.mXyz_1) * my_main_f32); - field_0x5c.mCenter += (sp15c - field_0x5c.mCenter) * trans->mCushion; + mViewCache.mCenter += (sp15c - mViewCache.mCenter) * trans->mCushion; cSGlobe cStack_818(pos.mXyz_0 - pos.mXyz_1); cSGlobe cStack_820(pos2.mXyz_0 - pos2.mXyz_1); @@ -1356,13 +1357,13 @@ bool dCamera_c::transEvCamera(int param_1) { cStack_818.V() + ((cStack_820.V() - cStack_818.V()) * my_main_f32), cStack_818.U() + ((cStack_820.U() - cStack_818.U()) * my_main_f32)); - sp168 = field_0x5c.mCenter + cStack_828.Xyz(); + sp168 = mViewCache.mCenter + cStack_828.Xyz(); - field_0x5c.mEye += (sp168 - field_0x5c.mEye) * trans->mCushion; + mViewCache.mEye += (sp168 - mViewCache.mEye) * trans->mCushion; } else if (trans->mTransType == 3) { sp15c = pos.mXyz_1 + ((pos2.mXyz_1 - pos.mXyz_1) * my_main_f32); - field_0x5c.mCenter += (sp15c - field_0x5c.mCenter) * trans->mCushion; + mViewCache.mCenter += (sp15c - mViewCache.mCenter) * trans->mCushion; cSGlobe cStack_830(pos.mXyz_0 - pos.mXyz_1); cSGlobe cStack_838(pos2.mXyz_0 - pos2.mXyz_1); @@ -1382,13 +1383,13 @@ bool dCamera_c::transEvCamera(int param_1) { (cStack_830.V() + (cStack_838.V() - cStack_830.V()) * my_main_f32), (cStack_830.U() + acStack_8a8)); - sp168 = field_0x5c.mCenter + cStack_840.Xyz(); + sp168 = mViewCache.mCenter + cStack_840.Xyz(); - field_0x5c.mEye += (sp168 - field_0x5c.mEye) * trans->mCushion; + mViewCache.mEye += (sp168 - mViewCache.mEye) * trans->mCushion; } else if (trans->mTransType == 4) { sp15c = pos.mXyz_1 + ((pos2.mXyz_1 - pos.mXyz_1) * my_main_f32); - field_0x5c.mCenter += (sp15c - field_0x5c.mCenter) * trans->mCushion; + mViewCache.mCenter += (sp15c - mViewCache.mCenter) * trans->mCushion; cSGlobe cStack_848(pos.mXyz_0 - pos.mXyz_1); cSGlobe cStack_850(pos2.mXyz_0 - pos2.mXyz_1); @@ -1406,33 +1407,33 @@ bool dCamera_c::transEvCamera(int param_1) { cStack_848.V() + (cStack_850.V() - cStack_848.V()) * my_main_f32, cStack_848.U() + acStack_8ac); - sp168 = field_0x5c.mCenter + cStack_858.Xyz(); + sp168 = mViewCache.mCenter + cStack_858.Xyz(); - field_0x5c.mEye += (sp168 - field_0x5c.mEye) * trans->mCushion; + mViewCache.mEye += (sp168 - mViewCache.mEye) * trans->mCushion; } else if (trans->mTransType == 2) { sp15c = pos.mXyz_1 + (pos2.mXyz_1 * my_main_f32); - field_0x5c.mCenter += (sp15c - field_0x5c.mCenter) * trans->mCushion; + mViewCache.mCenter += (sp15c - mViewCache.mCenter) * trans->mCushion; sp168 = pos.mXyz_0 + (pos2.mXyz_0 * my_main_f32); - field_0x5c.mEye += (sp168 - field_0x5c.mEye) * trans->mCushion; + mViewCache.mEye += (sp168 - mViewCache.mEye) * trans->mCushion; } else { sp15c = pos.mXyz_1 + ((pos2.mXyz_1 - pos.mXyz_1) * my_main_f32); - field_0x5c.mCenter += (sp15c - field_0x5c.mCenter) * trans->mCushion; + mViewCache.mCenter += (sp15c - mViewCache.mCenter) * trans->mCushion; sp168 = pos.mXyz_0 + ((pos2.mXyz_0 - pos.mXyz_0) * my_main_f32); - field_0x5c.mEye += (sp168 - field_0x5c.mEye) * trans->mCushion; + mViewCache.mEye += (sp168 - mViewCache.mEye) * trans->mCushion; } f32 o_float = trans->mStartFovy + (my_main_f32 * (trans->mFovy - trans->mStartFovy)); - field_0x5c.mFovy += trans->mCushion * (o_float - field_0x5c.mFovy); + mViewCache.mFovy += trans->mCushion * (o_float - mViewCache.mFovy); if (trans->field_0x68) { mid_val = trans->field_0x1c + my_main_f32 * (trans->field_0x3c - trans->field_0x1c); - field_0x5c.mBank += (cSAngle(mid_val) - field_0x5c.mBank) * trans->mCushion; + mViewCache.mBank += (cSAngle(mid_val) - mViewCache.mBank) * trans->mCushion; setFlag(0x400); } - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); } return rv; @@ -1440,10 +1441,9 @@ bool dCamera_c::transEvCamera(int param_1) { /* 8008E938-8008FA58 089278 1120+00 0/0 1/0 0/0 .text watchActorEvCamera__9dCamera_cFv */ bool dCamera_c::watchActorEvCamera() { - bool bVar15; static cXyz DefaultGap(cXyz::Zero); - struct mWork::actor* actor = &mWork.actor; + ActorData* actor = (ActorData*)mWork; if (mCurCamStyleTimer == 0) { getEvXyzData(&actor->mCtrGap, "CtrGap", DefaultGap); getEvFloatData(&actor->mCushion, "Cushion", 1.0f); @@ -1464,7 +1464,7 @@ bool dCamera_c::watchActorEvCamera() { actor->mTargetActorID = fopAcM_GetID(actor->mTargetActor); actor->field_0xc = relationalPos(actor->mTargetActor, &actor->mCtrGap); - actor->field_0x3c.Val(field_0x5c.mEye - actor->field_0xc); + actor->field_0x3c.Val(mViewCache.mEye - actor->field_0xc); if (actor->field_0x3c.R() < actor->mNearDist) { if (pointInSight(&actor->field_0xc)) { actor->field_0x54 = 0; @@ -1477,7 +1477,7 @@ bool dCamera_c::watchActorEvCamera() { actor->field_0x54 = 3; } - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; } if (fopAcM_SearchByID(actor->mTargetActorID) == NULL) { @@ -1493,8 +1493,8 @@ bool dCamera_c::watchActorEvCamera() { switch (actor->field_0x54) { case 0: - field_0x5c.mEye = mEye; - field_0x5c.mDirection = mDirection; + mViewCache.mEye = mEye; + mViewCache.mDirection = mDirection; break; case 1: @@ -1502,7 +1502,7 @@ bool dCamera_c::watchActorEvCamera() { cXyz cStack_dc = attentionPos(mpPlayerActor); cStack_dc.y += 10.0f; cSGlobe cStack_288(cStack_dc - actor->field_0xc); - cSGlobe cStack_290(field_0x5c.mEye - positionOf(actor->mTargetActor)); + cSGlobe cStack_290(mViewCache.mEye - positionOf(actor->mTargetActor)); cSAngle acStack_2e8 = cStack_290.U() - directionOf(actor->mTargetActor); @@ -1571,14 +1571,14 @@ bool dCamera_c::watchActorEvCamera() { if (mCurCamStyleTimer < actor->mNearTimer) { f32 fVar6 = mCurCamStyleTimer / f32(actor->mNearTimer); - field_0x5c.mCenter += (actor->field_0xc - field_0x5c.mCenter) * fVar6; + mViewCache.mCenter += (actor->field_0xc - mViewCache.mCenter) * fVar6; - cSGlobe* dir_p = &field_0x5c.mDirection; + cSGlobe* dir_p = &mViewCache.mDirection; dir_p->R(dir_p->R() + (actor->field_0x4c.R() - dir_p->R()) * fVar6); dir_p->U(dir_p->U() + (actor->field_0x4c.U() - dir_p->U()) * fVar6); dir_p->V(dir_p->V() + (actor->field_0x4c.V() - dir_p->V()) * fVar6); - field_0x5c.mEye = field_0x5c.mCenter + dir_p->Xyz(); - field_0x5c.mFovy += fVar6 * (actor->mFovy - mFovy); + mViewCache.mEye = mViewCache.mCenter + dir_p->Xyz(); + mViewCache.mFovy += fVar6 * (actor->mFovy - mFovy); return 0; } @@ -1654,14 +1654,14 @@ bool dCamera_c::watchActorEvCamera() { if (mCurCamStyleTimer < actor->mFarTimer) { f32 fVar6 = mCurCamStyleTimer / f32(actor->mFarTimer); - field_0x5c.mCenter += (actor->field_0xc - field_0x5c.mCenter) * fVar6; + mViewCache.mCenter += (actor->field_0xc - mViewCache.mCenter) * fVar6; - cSGlobe* dir_p = &field_0x5c.mDirection; + cSGlobe* dir_p = &mViewCache.mDirection; dir_p->R(dir_p->R() + (actor->field_0x4c.R() - dir_p->R()) * fVar6); dir_p->U(dir_p->U() + (actor->field_0x4c.U() - dir_p->U()) * fVar6); dir_p->V(dir_p->V() + (actor->field_0x4c.V() - dir_p->V()) * fVar6); - field_0x5c.mEye = field_0x5c.mCenter + dir_p->Xyz(); - field_0x5c.mFovy += fVar6 * (actor->mFovy - mFovy); + mViewCache.mEye = mViewCache.mCenter + dir_p->Xyz(); + mViewCache.mFovy += fVar6 * (actor->mFovy - mFovy); return 0; } @@ -1669,7 +1669,7 @@ bool dCamera_c::watchActorEvCamera() { case 3: if (mCurCamStyleTimer == 0) { - field_0x5c.mCenter = actor->field_0xc; + mViewCache.mCenter = actor->field_0xc; cSGlobe cStack_2b0(attentionPos(mpPlayerActor) - actor->field_0xc); cStack_2b0.R(actor->mZoomDist); @@ -1733,12 +1733,12 @@ bool dCamera_c::watchActorEvCamera() { } } - field_0x5c.mDirection = actor->field_0x4c; - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = actor->mFovy; + mViewCache.mDirection = actor->field_0x4c; + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = actor->mFovy; } - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; return 1; } @@ -1746,7 +1746,7 @@ bool dCamera_c::watchActorEvCamera() { /* 8008FAE8-80090174 08A428 068C+00 0/0 1/0 0/0 .text restorePosEvCamera__9dCamera_cFv */ bool dCamera_c::restorePosEvCamera() { static cXyz DefaultGap(cXyz::Zero); - struct mWork::restorePos* restorePos = &mWork.restorePos; + RestorePosData* restorePos = (RestorePosData*)mWork; if (mCurCamStyleTimer == 0) { getEvXyzData(&restorePos->field_0x0, "CtrGap", DefaultGap); @@ -1760,11 +1760,11 @@ bool dCamera_c::restorePosEvCamera() { switch (restorePos->field_0x44) { case 0: - restorePos->field_0x48 = field_0xd0[0]; + restorePos->field_0x48 = mSavedViewStack[0]; break; case 1: - restorePos->field_0x48 = field_0xd0[1]; + restorePos->field_0x48 = mSavedViewStack[1]; break; case 9: { @@ -1775,7 +1775,7 @@ bool dCamera_c::restorePosEvCamera() { } default: { - restorePos->field_0x48 = field_0xb0; + restorePos->field_0x48 = mSavedView; break; } } @@ -1787,7 +1787,7 @@ bool dCamera_c::restorePosEvCamera() { restorePos->field_0xc = relationalPos(restorePos->field_0x34, &restorePos->field_0x0); - cSGlobe cStack_e8(restorePos->field_0x48.mEye - field_0x5c.mCenter); + cSGlobe cStack_e8(restorePos->field_0x48.mEye - mViewCache.mCenter); if (cStack_e8.R() < restorePos->field_0x20) { if (pointInSight(&restorePos->field_0xc)) { restorePos->field_0x40 = 0; @@ -1804,7 +1804,7 @@ bool dCamera_c::restorePosEvCamera() { restorePos->field_0x40 = 3; } - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; } switch (restorePos->field_0x40) { @@ -1821,18 +1821,18 @@ bool dCamera_c::restorePosEvCamera() { if (mCurCamStyleTimer < restorePos->field_0x24) { f32 fVar1 = mCurCamStyleTimer / f32(restorePos->field_0x24); if (restorePos->field_0x68 == 1) { - field_0x5c.mCenter += (restorePos->field_0x48.mCenter - field_0x5c.mCenter) * fVar1; + mViewCache.mCenter += (restorePos->field_0x48.mCenter - mViewCache.mCenter) * fVar1; } else { - field_0x5c.mCenter += (restorePos->field_0xc - field_0x5c.mCenter) * fVar1; + mViewCache.mCenter += (restorePos->field_0xc - mViewCache.mCenter) * fVar1; } - field_0x5c.mDirection.R(field_0x5c.mDirection.R() + (fVar1 * (restorePos->field_0x38.R() - field_0x5c.mDirection.R()))); - field_0x5c.mDirection.U(field_0x5c.mDirection.U() + ((restorePos->field_0x38.U() - field_0x5c.mDirection.U()) * fVar1)); - field_0x5c.mDirection.V((field_0x5c.mDirection.V() + ((restorePos->field_0x38.V() - field_0x5c.mDirection.V()) * fVar1))); + mViewCache.mDirection.R(mViewCache.mDirection.R() + (fVar1 * (restorePos->field_0x38.R() - mViewCache.mDirection.R()))); + mViewCache.mDirection.U(mViewCache.mDirection.U() + ((restorePos->field_0x38.U() - mViewCache.mDirection.U()) * fVar1)); + mViewCache.mDirection.V((mViewCache.mDirection.V() + ((restorePos->field_0x38.V() - mViewCache.mDirection.V()) * fVar1))); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); - field_0x5c.mFovy += fVar1 * (restorePos->field_0x48.mFovy - field_0x5c.mFovy); + mViewCache.mFovy += fVar1 * (restorePos->field_0x48.mFovy - mViewCache.mFovy); return 0; } break; @@ -1840,18 +1840,18 @@ bool dCamera_c::restorePosEvCamera() { case 3: if (mCurCamStyleTimer == 0) { if (restorePos->field_0x68 == 1) { - field_0x5c.mCenter = restorePos->field_0x48.mCenter; + mViewCache.mCenter = restorePos->field_0x48.mCenter; } else { - field_0x5c.mCenter = restorePos->field_0xc; + mViewCache.mCenter = restorePos->field_0xc; } - field_0x5c.mDirection.Val(restorePos->field_0x48.mEye - restorePos->field_0x48.mCenter); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = restorePos->field_0x48.mFovy; + mViewCache.mDirection.Val(restorePos->field_0x48.mEye - restorePos->field_0x48.mCenter); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = restorePos->field_0x48.mFovy; } } - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; return 1; } @@ -1888,7 +1888,7 @@ bool dCamera_c::maptoolIdEvCamera() { field_0x160 = 0; mCurCamStyleTimer = 0; mEventData.field_0xec = dEvt_control_c::searchMapEventData(id); - OS_REPORT("%06d: %s: %d: map data ID %d %x\n", field_0xa8, __FILE__, 2792, id, + OS_REPORT("%06d: %s: %d: map data ID %d %x\n", mFrameCounter, __FILE__, 2792, id, mEventData.field_0xec); int var_r6 = 0xFF; @@ -1901,7 +1901,7 @@ bool dCamera_c::maptoolIdEvCamera() { int temp_r31 = mEventData.field_0x24; if (mEventData.field_0xec == NULL || temp_r31 == 0xFF) { - OS_REPORT("%d: %s: %d: ERROR!! no map data!!!\n", field_0xa8, __FILE__, 2805); + OS_REPORT("%d: %s: %d: ERROR!! no map data!!!\n", mFrameCounter, __FILE__, 2805); return true; } @@ -1916,7 +1916,7 @@ bool dCamera_c::maptoolIdEvCamera() { } if (mEventData.field_0xec->field_0xC & 2) { - field_0x88 = 0; + mBumpCheckFlags = 0; } } @@ -1972,7 +1972,7 @@ bool dCamera_c::styleEvCamera() { bool dCamera_c::gameOverEvCamera() { int i; - struct mWork::gameOver* gover_p = &mWork.gameOver; + GameOverData* gover_p = (GameOverData*)mWork; daPy_py_c* mPlayer = (daPy_py_c*)mpPlayerActor; daMidna_c* mMidna = daPy_py_c::getMidnaActor(); @@ -2072,7 +2072,7 @@ bool dCamera_c::gameOverEvCamera() { if (mCurCamStyleTimer == 0) { gover_p->field_0x0 = 0; gover_p->field_0x4 = 0; - if ((field_0xa8 & 2) != 0) { + if ((mFrameCounter & 2) != 0) { gover_p->field_0x8 = 0; } else { gover_p->field_0x8 = 1; @@ -2082,8 +2082,8 @@ bool dCamera_c::gameOverEvCamera() { gover_p->field_0x0 = 50; } - field_0x158.field_0x0 = true; - cXyz sp284 = field_0x5c.mEye - attentionPos(mpPlayerActor); + mStyleSettle.mFinished = true; + cXyz sp284 = mViewCache.mEye - attentionPos(mpPlayerActor); sp284 = dCamMath::xyzRotateY(sp284, -cSAngle(mpPlayerActor->shape_angle.y)); spa8[w_5c] = pos[w_54] = pos2[w_50] = sp284; } @@ -2142,8 +2142,8 @@ bool dCamera_c::gameOverEvCamera() { gover_p->field_0x8 ^= 1; } - field_0x5c.mCenter = sp224; - field_0x5c.mEye = sp230; + mViewCache.mCenter = sp224; + mViewCache.mEye = sp230; gover_p->field_0x0++; bVar9 = true; } @@ -2159,13 +2159,13 @@ bool dCamera_c::gameOverEvCamera() { gover_p->field_0x0++; gover_p->field_0x4 = 0.0f; - field_0x5c.mFovy = 60.0f; + mViewCache.mFovy = 60.0f; } // fallthrough case 3: { sp224 = relationalPos(mpPlayerActor, &sp218); if (lineBGCheck(&sp291, &sp224, &my_cross, 0x40b7)) { - sp224 = my_cross + field_0x5c.mDirection.Norm(); + sp224 = my_cross + mViewCache.mDirection.Norm(); } for (i = 0; i < w_54; i++) { @@ -2194,10 +2194,10 @@ bool dCamera_c::gameOverEvCamera() { gover_p->field_0x8 ^= 1; } - field_0x5c.mCenter = sp224; - field_0x5c.mEye = sp230; + mViewCache.mCenter = sp224; + mViewCache.mEye = sp230; gover_p->field_0x0++; - field_0x5c.mFovy = 75.0f; + mViewCache.mFovy = 75.0f; bVar9 = 75.0f; } // fallthrough intentional. @@ -2221,7 +2221,7 @@ bool dCamera_c::gameOverEvCamera() { case 51: { sp224 = relationalPos(mpPlayerActor, &sp278); if (lineBGCheck(&sp291, &sp224, &my_cross, 0x40b7)) { - sp224 = my_cross + field_0x5c.mDirection.Norm(); + sp224 = my_cross + mViewCache.mDirection.Norm(); } for (i = 0; i < w_50; i++) { @@ -2245,10 +2245,10 @@ bool dCamera_c::gameOverEvCamera() { gover_p->field_0x8 ^= 1; } - field_0x5c.mCenter = sp224; - field_0x5c.mEye = sp230; + mViewCache.mCenter = sp224; + mViewCache.mEye = sp230; bVar9 = true; - field_0x5c.mFovy = 60.0f; + mViewCache.mFovy = 60.0f; ++gover_p->field_0x0; } // fallthrough @@ -2275,7 +2275,7 @@ bool dCamera_c::gameOverEvCamera() { } gover_p->field_0x10.y += (fVar1 + attentionPos(mpPlayerActor).y - gover_p->field_0x10.y) * 0.005f; - field_0x5c.mCenter = gover_p->field_0x10; + mViewCache.mCenter = gover_p->field_0x10; cSAngle acStack_43c(gover_p->field_0x1c.V()); f32 next_f_var; @@ -2291,27 +2291,27 @@ bool dCamera_c::gameOverEvCamera() { f32 mRad = gover_p->field_0x1c.R(); mRad += (350.0f - mRad) * 0.02f; gover_p->field_0x1c.R(mRad); - field_0x5c.mFovy += (40.0f - field_0x5c.mFovy) * 0.005f; - field_0x5c.mEye = field_0x5c.mCenter + gover_p->field_0x1c.Xyz(); + mViewCache.mFovy += (40.0f - mViewCache.mFovy) * 0.005f; + mViewCache.mEye = mViewCache.mCenter + gover_p->field_0x1c.Xyz(); break; } } if (!bVar9 && bVar3) { - field_0x5c.mCenter += mMonitor.field_0x14; - field_0x5c.mEye += (mMonitor.field_0x14 * 0.98f); + mViewCache.mCenter += mMonitor.field_0x14; + mViewCache.mEye += (mMonitor.field_0x14 * 0.98f); } - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); ++gover_p->field_0x4; - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; return 1; } /* 80091468-8009236C 08BDA8 0F04+00 1/0 1/0 0/0 .text tactEvCamera__9dCamera_cFv */ bool dCamera_c::tactEvCamera() { - struct mWork::tact* tact_p = &mWork.tact; + TactData* tact_p = (TactData*)mWork; cXyz sp58[6] = { cXyz(0.0f, 5.0f, 190.0f), cXyz(0.0f, 0.0f, 215.0f), @@ -2368,14 +2368,14 @@ bool dCamera_c::tactEvCamera() { tact_p->field_0x4 = 0; tact_p->field_0x14 = 0; tact_p->field_0x0 = 0; - tact_p->field_0xc = this->field_0xa8; - if ((this->field_0xa8 & 2) != 0) { + tact_p->field_0xc = this->mFrameCounter; + if ((this->mFrameCounter & 2) != 0) { tact_p->field_0x8 = 0; } else { tact_p->field_0x8 = 1; } - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; mEventData.field_0x20 = 0; mEventData.field_0x24 = 0; tact_p->field_0x1c = sp178; @@ -2383,7 +2383,7 @@ bool dCamera_c::tactEvCamera() { tact_p->field_0x24 = const_4_val; tact_p->field_0x2c = 55.0f; - dComIfGp_saveCameraPosition(0, &field_0x5c.mCenter, &field_0x5c.mEye, field_0x5c.mFovy, field_0x5c.mBank); + dComIfGp_saveCameraPosition(0, &mViewCache.mCenter, &mViewCache.mEye, mViewCache.mFovy, mViewCache.mBank); } cXyz sp1e8; @@ -2469,15 +2469,15 @@ bool dCamera_c::tactEvCamera() { case 20: { if (mHorseActor) { for (i = 0; i < tact_p->field_0x24; i++) { - field_0x5c.mCenter = relationalPos(mHorseActor, &tact_p->field_0x1c[i]); - field_0x5c.mEye = relationalPos(mHorseActor, &tact_p->field_0x20[i]); - if (!lineBGCheck(&field_0x5c.mCenter, &field_0x5c.mEye, 0x4007) - && !lineCollisionCheck(field_0x5c.mCenter, field_0x5c.mEye, mHorseActor, NULL, NULL)) { + mViewCache.mCenter = relationalPos(mHorseActor, &tact_p->field_0x1c[i]); + mViewCache.mEye = relationalPos(mHorseActor, &tact_p->field_0x20[i]); + if (!lineBGCheck(&mViewCache.mCenter, &mViewCache.mEye, 0x4007) + && !lineCollisionCheck(mViewCache.mCenter, mViewCache.mEye, mHorseActor, NULL, NULL)) { break; } } - field_0x5c.mFovy = tact_p->field_0x2c; + mViewCache.mFovy = tact_p->field_0x2c; tact_p->field_0x0 = 21; tact_p->field_0x14 = i; } @@ -2489,8 +2489,8 @@ bool dCamera_c::tactEvCamera() { cXyz sp208 = relationalPos(mHorseActor, &tact_p->field_0x1c[tact_p->field_0x14]); cXyz sp214 = relationalPos(mHorseActor, &tact_p->field_0x20[tact_p->field_0x14]); if (!lineBGCheck(&sp208, &sp214, 0x4007) &&!lineCollisionCheck(sp208, sp214, mHorseActor, NULL, NULL)) { - field_0x5c.mCenter += (sp208 - field_0x5c.mCenter) * local_1d0[tact_p->field_0x14]; - field_0x5c.mEye += (sp214 - field_0x5c.mEye) * local_1d0[tact_p->field_0x14]; + mViewCache.mCenter += (sp208 - mViewCache.mCenter) * local_1d0[tact_p->field_0x14]; + mViewCache.mEye += (sp214 - mViewCache.mEye) * local_1d0[tact_p->field_0x14]; } else { tact_p->field_0x0 = 22; } @@ -2523,11 +2523,11 @@ bool dCamera_c::tactEvCamera() { } if (!lineBGCheck(&cStack_220, &cStack_22c, 0x4007) && !lineBGCheck(&cStack_238, &cStack_22c, 0x4007)) { - field_0x5c.mCenter = cStack_220; - field_0x5c.mEye = cStack_22c; + mViewCache.mCenter = cStack_220; + mViewCache.mEye = cStack_22c; } else { - field_0x5c.mCenter = attentionPos(mpPlayerActor) + tact_p->field_0x30; - field_0x5c.mEye = attentionPos(mpPlayerActor) + tact_p->field_0x3c; + mViewCache.mCenter = attentionPos(mpPlayerActor) + tact_p->field_0x30; + mViewCache.mEye = attentionPos(mpPlayerActor) + tact_p->field_0x3c; } tact_p->field_0x0 = 23; @@ -2540,35 +2540,35 @@ bool dCamera_c::tactEvCamera() { cXyz sp254; cXyz sp260 = attentionPos(mpPlayerActor); for (i = 0; i < tact_p->field_0x24; i++) { - field_0x5c.mCenter = relationalPos(mpPlayerActor, &tact_p->field_0x1c[i]); - sp260.y = field_0x5c.mCenter.y; - if (lineBGCheck(&sp260, &field_0x5c.mCenter, &sp254, 0x4007)) { - field_0x5c.mCenter = sp254 - (cXyz(sp254 - sp260).norm() * 5.0f); + mViewCache.mCenter = relationalPos(mpPlayerActor, &tact_p->field_0x1c[i]); + sp260.y = mViewCache.mCenter.y; + if (lineBGCheck(&sp260, &mViewCache.mCenter, &sp254, 0x4007)) { + mViewCache.mCenter = sp254 - (cXyz(sp254 - sp260).norm() * 5.0f); } - field_0x5c.mEye = relationalPos(mpPlayerActor, &tact_p->field_0x20[i]); - sp254 = field_0x5c.mEye + (cXyz(field_0x5c.mEye - sp260).norm() * 5.0f); + mViewCache.mEye = relationalPos(mpPlayerActor, &tact_p->field_0x20[i]); + sp254 = mViewCache.mEye + (cXyz(mViewCache.mEye - sp260).norm() * 5.0f); if (!lineBGCheck(&sp260, &sp254, 0x4007) - && !lineCollisionCheck(field_0x5c.mCenter, field_0x5c.mEye, mpPlayerActor, NULL, NULL)) { + && !lineCollisionCheck(mViewCache.mCenter, mViewCache.mEye, mpPlayerActor, NULL, NULL)) { break; } } if (tact_p->field_0x0 == 0) { - tact_p->field_0x30 = field_0x5c.mCenter - sp260; - tact_p->field_0x3c = field_0x5c.mEye - sp260; + tact_p->field_0x30 = mViewCache.mCenter - sp260; + tact_p->field_0x3c = mViewCache.mEye - sp260; } tact_p->field_0x0 = 9; - field_0x5c.mFovy = tact_p->field_0x2c; + mViewCache.mFovy = tact_p->field_0x2c; break; } case 9: case 29: { - field_0x5c.mCenter = attentionPos(mpPlayerActor) + tact_p->field_0x30; - field_0x5c.mEye = attentionPos(mpPlayerActor) + tact_p->field_0x3c; + mViewCache.mCenter = attentionPos(mpPlayerActor) + tact_p->field_0x30; + mViewCache.mEye = attentionPos(mpPlayerActor) + tact_p->field_0x3c; break; } @@ -2583,7 +2583,7 @@ bool dCamera_c::tactEvCamera() { } #endif - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); tact_p->field_0x4++; return 1; } @@ -2602,21 +2602,21 @@ bool dCamera_c::stbWaitEvCamera() { if (demo_cam != NULL) { if (demo_cam->checkEnable(0x40)) { - field_0x5c.mCenter = demo_cam->getTarget(); + mViewCache.mCenter = demo_cam->getTarget(); #if DEBUG enabled_report[0] = 'C'; #endif } if (demo_cam->checkEnable(0x10)) { - field_0x5c.mEye = demo_cam->getTrans(); + mViewCache.mEye = demo_cam->getTrans(); #if DEBUG enabled_report[1] = 'E'; #endif } if (demo_cam->checkEnable(0x4)) { - field_0x5c.mFovy = demo_cam->getFovy(); + mViewCache.mFovy = demo_cam->getFovy(); #if DEBUG enabled_report[2] = 'F'; #endif @@ -2630,7 +2630,7 @@ bool dCamera_c::stbWaitEvCamera() { } if (demo_cam->checkEnable(0x80)) { - field_0x5c.mBank = cAngle::d2s(-demo_cam->getRoll()); + mViewCache.mBank = cAngle::d2s(-demo_cam->getRoll()); #if DEBUG enabled_report[4] = 'B'; #endif @@ -2642,7 +2642,7 @@ bool dCamera_c::stbWaitEvCamera() { } #endif - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); } return true; @@ -2654,18 +2654,18 @@ bool dCamera_c::saveEvCamera() { getEvIntData(&slot, "Slot", 0); if (slot == 9) { - dComIfGp_saveCameraPosition(0, &field_0x5c.mCenter, &field_0x5c.mEye, field_0x5c.mFovy, field_0x5c.mBank.Val()); + dComIfGp_saveCameraPosition(0, &mViewCache.mCenter, &mViewCache.mEye, mViewCache.mFovy, mViewCache.mBank.Val()); } else { - pushInfo(&field_0xd0[slot], 1); + pushInfo(&mSavedViewStack[slot], 1); } - field_0x158.field_0x0 = 1; + mStyleSettle.mFinished = 1; return true; } /* 8009258C-800929AC 08CECC 0420+00 0/0 1/0 0/0 .text loadEvCamera__9dCamera_cFv */ bool dCamera_c::loadEvCamera() { - struct mWork::load* load = &mWork.load; + LoadData* load = (LoadData*)mWork; f32 local_58[6] = { 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f }; if (mCurCamStyleTimer == 0) { getEvIntData(&load->mSlot, "Slot", 0); @@ -2688,22 +2688,22 @@ bool dCamera_c::loadEvCamera() { load->field_0x42 = cSAngle(local_b0); } else { #ifdef DEBUG - if (field_0xd0[load->mSlot].field_0x1e == 0 || load->mSlot >= 2) { + if (mSavedViewStack[load->mSlot].field_0x1e == 0 || load->mSlot >= 2) { OS_REPORT("camera: event: LOAD: warning!! slot %d not saved\n", load->mSlot); } #endif - dCamInfo_c* pdVar3 = &field_0xd0[load->mSlot]; + dCamInfo_c* pdVar3 = &mSavedViewStack[load->mSlot]; load->field_0x28 = pdVar3->mCenter; load->field_0x34 = pdVar3->mEye; load->field_0x48 = pdVar3->mFovy; load->field_0x42 = pdVar3->mBank; } - load->field_0x1c = field_0x5c.mCenter; - load->field_0xc = field_0x5c.mDirection; + load->field_0x1c = mViewCache.mCenter; + load->field_0xc = mViewCache.mDirection; load->field_0x14.Val(load->field_0x34 - load->field_0x28); - load->field_0x44 = field_0x5c.mFovy; - load->field_0x40 = field_0x5c.mBank; + load->field_0x44 = mViewCache.mFovy; + load->field_0x40 = mViewCache.mBank; } if (mCurCamStyleTimer < load->mTimer) { @@ -2715,23 +2715,23 @@ bool dCamera_c::loadEvCamera() { fVar5 = (mCurCamStyleTimer + 1) / f32(load->mTimer); } - field_0x5c.mCenter = load->field_0x1c + ((load->field_0x28 - load->field_0x1c) * fVar5); - field_0x5c.mDirection.R(load->field_0xc.R() + (fVar5 * (load->field_0x14.R() - load->field_0xc.R()))); - field_0x5c.mDirection.V(load->field_0xc.V() + ((load->field_0x14.V() - load->field_0xc.V()) * fVar5)); - field_0x5c.mDirection.U(load->field_0xc.U() + ((load->field_0x14.U() - load->field_0xc.U()) * fVar5)); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = load->field_0x44 + (fVar5 * (load->field_0x48 - load->field_0x44)); - field_0x5c.mBank = load->field_0x40 + ((load->field_0x42 - load->field_0x40) * fVar5); + mViewCache.mCenter = load->field_0x1c + ((load->field_0x28 - load->field_0x1c) * fVar5); + mViewCache.mDirection.R(load->field_0xc.R() + (fVar5 * (load->field_0x14.R() - load->field_0xc.R()))); + mViewCache.mDirection.V(load->field_0xc.V() + ((load->field_0x14.V() - load->field_0xc.V()) * fVar5)); + mViewCache.mDirection.U(load->field_0xc.U() + ((load->field_0x14.U() - load->field_0xc.U()) * fVar5)); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = load->field_0x44 + (fVar5 * (load->field_0x48 - load->field_0x44)); + mViewCache.mBank = load->field_0x40 + ((load->field_0x42 - load->field_0x40) * fVar5); return 0; } else { - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; return 1; } } /* 800929AC-800937AC 08D2EC 0E00+00 0/0 1/0 0/0 .text useItem0EvCamera__9dCamera_cFv */ bool dCamera_c::useItem0EvCamera() { - struct mWork::item* item_p = &mWork.item; + ItemData* item_p = (ItemData*)mWork; cXyz vec_1dc(10.0f, -15.0f, 20.0f); cXyz vecs_338[4] = { cXyz(30.0f, 115.0f, 70.0f), @@ -2884,7 +2884,7 @@ bool dCamera_c::useItem0EvCamera() { item_p->field_0x0 = 10; if (++item_p->field_0x20 >= data_list[item_p->mType].field_0x14) { item_p->field_0x20 = 0; - if ((field_0xa8 & data_list[item_p->mType].field_0x18) == 0) { + if ((mFrameCounter & data_list[item_p->mType].field_0x18) == 0) { cXyz temp_vec(data_list[item_p->mType].field_0x04[0]); data_list[item_p->mType].field_0x04[0] = data_list[item_p->mType].field_0x04[1]; data_list[item_p->mType].field_0x04[1] = temp_vec; @@ -2895,7 +2895,7 @@ bool dCamera_c::useItem0EvCamera() { item_p->field_0x4 = data_list[item_p->mType].field_0x10; if (lineBGCheck(&att_pos, &item_p->field_0xc, &sp424, 0x40b7)) { - item_p->field_0xc = sp424 + field_0x5c.mDirection.Norm(); + item_p->field_0xc = sp424 + mViewCache.mDirection.Norm(); } for (idx = 0; idx < data_list[item_p->mType].field_0x08; idx++) { @@ -2936,18 +2936,18 @@ bool dCamera_c::useItem0EvCamera() { case 1: { f32 fVar1 = item_p->field_0x20 / f32(item_p->field_0x4); - field_0x5c.mFovy += fVar1 * (item_p->field_0x18 - field_0x5c.mFovy); - field_0x5c.mCenter += (item_p->field_0xc - field_0x5c.mCenter) * fVar1; + mViewCache.mFovy += fVar1 * (item_p->field_0x18 - mViewCache.mFovy); + mViewCache.mCenter += (item_p->field_0xc - mViewCache.mCenter) * fVar1; - f32 fVar2 = field_0x5c.mDirection.R(); - acStack_540 = field_0x5c.mDirection.V(); - acStack_53c = field_0x5c.mDirection.U(); + f32 fVar2 = mViewCache.mDirection.R(); + acStack_540 = mViewCache.mDirection.V(); + acStack_53c = mViewCache.mDirection.U(); fVar2 = fVar2 + (fVar1 * (item_p->field_0x24.R() - fVar2)); acStack_540 += (item_p->field_0x24.V() - acStack_540) * fVar1; acStack_53c += (item_p->field_0x24.U() - acStack_53c) * fVar1; - field_0x5c.mDirection.Val(fVar2, acStack_540, acStack_53c); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + mViewCache.mDirection.Val(fVar2, acStack_540, acStack_53c); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); if (item_p->field_0x20 < item_p->field_0x4) { break; @@ -2957,8 +2957,8 @@ bool dCamera_c::useItem0EvCamera() { } // fallthrough case 2: { - field_0x5c.mCenter = item_p->field_0xc; - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + mViewCache.mCenter = item_p->field_0xc; + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); item_p->field_0x1c++; if (item_p->field_0x1c == 1) { @@ -2984,9 +2984,9 @@ bool dCamera_c::useItem0EvCamera() { } // fallthrough case 99: { - field_0x158.field_0x0 = true; - field_0x5c.mCenter = item_p->field_0xc; - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + mStyleSettle.mFinished = true; + mViewCache.mCenter = item_p->field_0xc; + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); } case 999: { @@ -3000,12 +3000,12 @@ bool dCamera_c::useItem0EvCamera() { /* 800937AC-80094240 08E0EC 0A94+00 0/0 1/0 0/0 .text useItem1EvCamera__9dCamera_cFv */ bool dCamera_c::useItem1EvCamera() { - struct mWork::item* item_p = &mWork.item; + ItemData* item_p = (ItemData*)mWork; if (mCurCamStyleTimer == 0) { getEvIntData(&item_p->mType, "Type", 0); if (item_p->mType == 0) { - item_p->field_0x2c = field_0x5c.mCenter - attentionPos(mpPlayerActor); - item_p->field_0x38 = field_0x5c.mEye - attentionPos(mpPlayerActor); + item_p->field_0x2c = mViewCache.mCenter - attentionPos(mpPlayerActor); + item_p->field_0x38 = mViewCache.mEye - attentionPos(mpPlayerActor); } } @@ -3015,21 +3015,21 @@ bool dCamera_c::useItem1EvCamera() { item_p->field_0x2c.x += -item_p->field_0x2c.x * mult_val; item_p->field_0x2c.z += -item_p->field_0x2c.z * mult_val; - f32 r_val = field_0x5c.mDirection.R(); - field_0x5c.mCenter = attentionPos(mpPlayerActor) + item_p->field_0x2c; - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); - field_0x5c.mDirection.R(r_val); + f32 r_val = mViewCache.mDirection.R(); + mViewCache.mCenter = attentionPos(mpPlayerActor) + item_p->field_0x2c; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); + mViewCache.mDirection.R(r_val); - if (field_0x5c.mDirection.V() > cSAngle(70.0f)) { - field_0x5c.mDirection.V(cSAngle(70.0f)); + if (mViewCache.mDirection.V() > cSAngle(70.0f)) { + mViewCache.mDirection.V(cSAngle(70.0f)); } - if (field_0x5c.mDirection.V() < cSAngle(0.0f)) { - field_0x5c.mDirection.V(cSAngle(0.0f)); + if (mViewCache.mDirection.V() < cSAngle(0.0f)) { + mViewCache.mDirection.V(cSAngle(0.0f)); } - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy += (20.0f - field_0x5c.mFovy) * mult_val; + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy += (20.0f - mViewCache.mFovy) * mult_val; return 1; } @@ -3099,12 +3099,12 @@ bool dCamera_c::useItem1EvCamera() { // fallthrough case 1: { item_p->field_0x18 = data_list[item_p->mType][item_p->field_0x1c].field_0x0c; - item_p->field_0xc = field_0x5c.mCenter; + item_p->field_0xc = mViewCache.mCenter; if (data_list[item_p->mType][item_p->field_0x1c].field_0x00 != NULL) { vec_1b0 = data_list[item_p->mType][item_p->field_0x1c].field_0x00[0] + *sp264; item_p->field_0xc = relationalPos(mpPlayerActor, &vec_1b0); - if ((field_0xa8 & data_list[item_p->mType][item_p->field_0x1c].field_0x18) == 0) { + if ((mFrameCounter & data_list[item_p->mType][item_p->field_0x1c].field_0x18) == 0) { cXyz cStack_14c = data_list[item_p->mType][item_p->field_0x1c].field_0x04[0]; data_list[item_p->mType][item_p->field_0x1c].field_0x04[0] = data_list[item_p->mType][item_p->field_0x1c].field_0x04[1]; @@ -3112,11 +3112,11 @@ bool dCamera_c::useItem1EvCamera() { } if (lineBGCheck(&sp134, &item_p->field_0xc, &sp140, 0x40b7)) { - item_p->field_0xc = sp140 + field_0x5c.mDirection.Norm(); + item_p->field_0xc = sp140 + mViewCache.mDirection.Norm(); } } - vec_198 = field_0x5c.mEye; + vec_198 = mViewCache.mEye; if (data_list[item_p->mType][item_p->field_0x1c].field_0x04 != NULL) { int i; for (i = 0; i < data_list[item_p->mType][item_p->field_0x1c].field_0x08; i++) { @@ -3129,7 +3129,7 @@ bool dCamera_c::useItem1EvCamera() { } if (i >= data_list[item_p->mType][item_p->field_0x1c].field_0x08) { - vec_198 = field_0x5c.mEye; + vec_198 = mViewCache.mEye; } } @@ -3144,17 +3144,17 @@ bool dCamera_c::useItem1EvCamera() { case 2: { if (item_p->field_0x4 > 1) { f32 fVar1 = item_p->field_0x20 / f32(item_p->field_0x4); - field_0x5c.mFovy += fVar1 * (item_p->field_0x18 - field_0x5c.mFovy); - field_0x5c.mCenter += (item_p->field_0xc - field_0x5c.mCenter) * fVar1; + mViewCache.mFovy += fVar1 * (item_p->field_0x18 - mViewCache.mFovy); + mViewCache.mCenter += (item_p->field_0xc - mViewCache.mCenter) * fVar1; - f32 fVar2 = field_0x5c.mDirection.R(); - acStack_28c = field_0x5c.mDirection.V(); - acStack_288 = field_0x5c.mDirection.U(); + f32 fVar2 = mViewCache.mDirection.R(); + acStack_28c = mViewCache.mDirection.V(); + acStack_288 = mViewCache.mDirection.U(); fVar2 = fVar2 + (fVar1 * (item_p->field_0x24.R() - fVar2)); acStack_28c += (item_p->field_0x24.V() - acStack_28c) * fVar1; acStack_288 += (item_p->field_0x24.U() - acStack_288) * fVar1; - field_0x5c.mDirection.Val(fVar2, acStack_28c, acStack_288); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + mViewCache.mDirection.Val(fVar2, acStack_28c, acStack_288); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); if (item_p->field_0x20 < item_p->field_0x4) break; } @@ -3165,10 +3165,10 @@ bool dCamera_c::useItem1EvCamera() { } // fallthrough case 3: { - field_0x5c.mCenter = item_p->field_0xc; - field_0x5c.mEye = field_0x5c.mCenter + item_p->field_0x24.Xyz(); - field_0x5c.mDirection = item_p->field_0x24; - field_0x5c.mFovy = item_p->field_0x18; + mViewCache.mCenter = item_p->field_0xc; + mViewCache.mEye = mViewCache.mCenter + item_p->field_0x24.Xyz(); + mViewCache.mDirection = item_p->field_0x24; + mViewCache.mFovy = item_p->field_0x18; if (item_p->field_0x20 < item_p->field_0x4) break; @@ -3183,7 +3183,7 @@ bool dCamera_c::useItem1EvCamera() { // fallthrough case 99: default: { - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; rv = true; } } @@ -3194,7 +3194,7 @@ bool dCamera_c::useItem1EvCamera() { /* 80094240-80094A70 08EB80 0830+00 0/0 1/0 0/0 .text getItemEvCamera__9dCamera_cFv */ bool dCamera_c::getItemEvCamera() { - struct mWork::getItem* gitem_p = &mWork.getItem; + GetItemData* gitem_p = (GetItemData*)mWork; cXyz cStack_90[8] = { cXyz(0.0f, -27.0f, 32.0f), cXyz(84.0f, -18.0f, 134.0f), @@ -3295,12 +3295,12 @@ bool dCamera_c::getItemEvCamera() { mEventData.field_0xf0.Step(); f32 fVar1 = mEventData.field_0xf0.Calc(gitem_p->mCurvePoints); - field_0x5c.mCenter = gitem_p->mStartCenter + ((gitem_p->field_0x44 - gitem_p->mStartCenter) * fVar1); - field_0x5c.mDirection.R(gitem_p->field_0x3c.R() + (fVar1 * (gitem_p->field_0x64.R() - gitem_p->field_0x3c.R()))); - field_0x5c.mDirection.V(gitem_p->field_0x3c.V() + ((gitem_p->field_0x64.V() - gitem_p->field_0x3c.V()) * fVar1)); - field_0x5c.mDirection.U(gitem_p->field_0x3c.U() + ((gitem_p->field_0x64.U() - gitem_p->field_0x3c.U()) * fVar1)); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy += fVar1 * (data_list[gitem_p->field_0x8].field_0x08 - field_0x5c.mFovy); + mViewCache.mCenter = gitem_p->mStartCenter + ((gitem_p->field_0x44 - gitem_p->mStartCenter) * fVar1); + mViewCache.mDirection.R(gitem_p->field_0x3c.R() + (fVar1 * (gitem_p->field_0x64.R() - gitem_p->field_0x3c.R()))); + mViewCache.mDirection.V(gitem_p->field_0x3c.V() + ((gitem_p->field_0x64.V() - gitem_p->field_0x3c.V()) * fVar1)); + mViewCache.mDirection.U(gitem_p->field_0x3c.U() + ((gitem_p->field_0x64.U() - gitem_p->field_0x3c.U()) * fVar1)); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy += fVar1 * (data_list[gitem_p->field_0x8].field_0x08 - mViewCache.mFovy); return 0; } @@ -3320,7 +3320,7 @@ namespace { /* 80094A70-80095010 08F3B0 05A0+00 0/0 1/0 0/0 .text possessedEvCamera__9dCamera_cFv */ bool dCamera_c::possessedEvCamera() { - struct mWork::possessed* possessed = &mWork.possessed; + PossessedData* possessed = (PossessedData*)mWork; cXyz vec_d8; bool rv = 0; @@ -3351,14 +3351,14 @@ bool dCamera_c::possessedEvCamera() { if (possessed->mType == 0) { possessed->field_0x28.Val(possessed->mRadius, possessed->mLatitude, possessed->mLongitude + directionOf(possessed->mTargetActor)); - pushInfo(&field_0xd0[1], 2); - field_0xd0[1].field_0x1e = 2; + pushInfo(&mSavedViewStack[1], 2); + mSavedViewStack[1].field_0x1e = 2; } else { - field_0x5c.mCenter = eyePos(possessed->mTargetActor); - possessed->field_0x28.Val(field_0xd0[1].mEye - field_0xd0[1].mCenter); - field_0x5c.mDirection.Val(possessed->mRadius, possessed->mLatitude, possessed->mLongitude + directionOf(possessed->mTargetActor)); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = possessed->mFovy; + mViewCache.mCenter = eyePos(possessed->mTargetActor); + possessed->field_0x28.Val(mSavedViewStack[1].mEye - mSavedViewStack[1].mCenter); + mViewCache.mDirection.Val(possessed->mRadius, possessed->mLatitude, possessed->mLongitude + directionOf(possessed->mTargetActor)); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy = possessed->mFovy; } possessed->field_0x0 = 1; @@ -3377,13 +3377,13 @@ bool dCamera_c::possessedEvCamera() { case 1: { f32 fVar1 = 1.0f / possessed->field_0xc; - field_0x5c.mCenter += ((eyePos(possessed->mTargetActor) - field_0x5c.mCenter) * fVar1); - field_0x5c.mDirection.R(field_0x5c.mDirection.R() + (fVar1 * (possessed->field_0x28.R() - field_0x5c.mDirection.R()))); - field_0x5c.mDirection.V(field_0x5c.mDirection.V() + ((possessed->field_0x28.V() - field_0x5c.mDirection.V()) * fVar1)); - field_0x5c.mDirection.U(field_0x5c.mDirection.U() + ((possessed->field_0x28.U() - field_0x5c.mDirection.U()) * fVar1)); - vec_d8 = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mEye += (vec_d8 - field_0x5c.mEye) * possessed->mCushion; - field_0x5c.mFovy += fVar1 * (possessed->mFovy - field_0x5c.mFovy); + mViewCache.mCenter += ((eyePos(possessed->mTargetActor) - mViewCache.mCenter) * fVar1); + mViewCache.mDirection.R(mViewCache.mDirection.R() + (fVar1 * (possessed->field_0x28.R() - mViewCache.mDirection.R()))); + mViewCache.mDirection.V(mViewCache.mDirection.V() + ((possessed->field_0x28.V() - mViewCache.mDirection.V()) * fVar1)); + mViewCache.mDirection.U(mViewCache.mDirection.U() + ((possessed->field_0x28.U() - mViewCache.mDirection.U()) * fVar1)); + vec_d8 = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mEye += (vec_d8 - mViewCache.mEye) * possessed->mCushion; + mViewCache.mFovy += fVar1 * (possessed->mFovy - mViewCache.mFovy); switch (possessed->mBlure) { default: { @@ -3410,7 +3410,7 @@ bool dCamera_c::possessedEvCamera() { case 99: { rv = 1; - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; } } @@ -3420,7 +3420,7 @@ bool dCamera_c::possessedEvCamera() { /* 80095010-8009544C 08F950 043C+00 0/0 1/0 0/0 .text fixedFramesEvCamera__9dCamera_cFv */ bool dCamera_c::fixedFramesEvCamera() { int const_1_val = 1; - struct mWork::fixedFrames* fframes_p = &mWork.fixedFrames; + FixedFramesData* fframes_p = (FixedFramesData*)mWork; if (mCurCamStyleTimer == 0) { cXyz sp30, sp3c; fframes_p->field_0x38 = 9999; @@ -3510,13 +3510,13 @@ bool dCamera_c::fixedFramesEvCamera() { } } - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; } - field_0x5c.mCenter = fframes_p->field_0x4; - field_0x5c.mEye = fframes_p->field_0x10; - field_0x5c.mFovy = fframes_p->field_0x28; - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + mViewCache.mCenter = fframes_p->field_0x4; + mViewCache.mEye = fframes_p->field_0x10; + mViewCache.mFovy = fframes_p->field_0x28; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); if (fframes_p->field_0x0 && mCurCamStyleTimer < fframes_p->mTimer) { return 0; } @@ -3526,7 +3526,7 @@ bool dCamera_c::fixedFramesEvCamera() { /* 8009544C-800956E4 08FD8C 0298+00 0/0 1/0 0/0 .text bSplineEvCamera__9dCamera_cFv */ bool dCamera_c::bSplineEvCamera() { - struct mWork::bSpline* bSpline = &mWork.bSpline; + BSplineData* bSpline = (BSplineData*)mWork; if (mCurCamStyleTimer == 0) { bSpline->field_0x1c = 0; bSpline->field_0x10 = 9999; @@ -3567,7 +3567,7 @@ bool dCamera_c::bSplineEvCamera() { bSpline->mRelActor = getEvActor("RelActor"); mEventData.field_0xf0.Init(bSpline->field_0x10, bSpline->mTimer); - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; } if (bSpline->field_0x1c == 0 && mEventData.field_0xf0.Step()) { @@ -3575,15 +3575,15 @@ bool dCamera_c::bSplineEvCamera() { cXyz tmpeyes = mEventData.field_0xf0.Calc(bSpline->mEyes); if (bSpline->mRelActor != NULL) { - field_0x5c.mCenter = relationalPos(bSpline->mRelActor, &tmpcenters); - field_0x5c.mEye = relationalPos(bSpline->mRelActor, &tmpeyes); + mViewCache.mCenter = relationalPos(bSpline->mRelActor, &tmpcenters); + mViewCache.mEye = relationalPos(bSpline->mRelActor, &tmpeyes); } else { - field_0x5c.mCenter = tmpcenters; - field_0x5c.mEye = tmpeyes; + mViewCache.mCenter = tmpcenters; + mViewCache.mEye = tmpeyes; } - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); - field_0x5c.mFovy = mEventData.field_0xf0.Calc(bSpline->mFovys); + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); + mViewCache.mFovy = mEventData.field_0xf0.Calc(bSpline->mFovys); if (mEventData.field_0xf0.Last()) { bSpline->field_0x1c = 1; } @@ -3595,7 +3595,7 @@ bool dCamera_c::bSplineEvCamera() { /* 800956E4-80095E7C 090024 0798+00 0/0 1/0 0/0 .text twoActor0EvCamera__9dCamera_cFv */ bool dCamera_c::twoActor0EvCamera() { static cXyz DefaultGap(0.0f, 0.0f, 0.0f); - struct mWork::twoActor0* twoact0_p = &mWork.twoActor0; + TwoActor0Data* twoact0_p = (TwoActor0Data*)mWork; if (mCurCamStyleTimer == 0) { twoact0_p->mActor1 = getEvActor("Actor1", "@PLAYER"); @@ -3622,9 +3622,9 @@ bool dCamera_c::twoActor0EvCamera() { getEvIntData(&twoact0_p->mLongitudeType, "LongitudeType", -1); getEvFloatData(&twoact0_p->mFovy, "Fovy", 60.0f); - twoact0_p->field_0x4c = field_0x5c.mDirection.R(); - twoact0_p->field_0x54 = cSAngle(field_0x5c.mDirection.V().Degree()); - twoact0_p->field_0x56 = cSAngle(field_0x5c.mDirection.U().Degree()); + twoact0_p->field_0x4c = mViewCache.mDirection.R(); + twoact0_p->field_0x54 = cSAngle(mViewCache.mDirection.V().Degree()); + twoact0_p->field_0x56 = cSAngle(mViewCache.mDirection.U().Degree()); } cSGlobe cStack_d8(attentionPos(twoact0_p->mActor1) - attentionPos(twoact0_p->mActor2)); @@ -3646,7 +3646,7 @@ bool dCamera_c::twoActor0EvCamera() { attentionPos(twoact0_p->mActor2)) * twoact0_p->mCtrRatio; } - field_0x5c.mCenter += (cStack_34 - field_0x5c.mCenter) * twoact0_p->mCtrCus; + mViewCache.mCenter += (cStack_34 - mViewCache.mCenter) * twoact0_p->mCtrCus; if (mCurCamStyleTimer == 0) { cSAngle acStack_e0; @@ -3660,7 +3660,7 @@ bool dCamera_c::twoActor0EvCamera() { break; default: - acStack_e0 = field_0x5c.mDirection.U(); + acStack_e0 = mViewCache.mDirection.U(); } cSAngle acStack_e4 = cStack_d8.U() - acStack_e0; @@ -3680,33 +3680,33 @@ bool dCamera_c::twoActor0EvCamera() { twoact0_p->field_0x5a = acStack_e0; } - cSAngle acStack_e8(field_0x5c.mDirection.V()); + cSAngle acStack_e8(mViewCache.mDirection.V()); if (acStack_e8 < cSAngle(twoact0_p->mLatitudeMin)) { twoact0_p->field_0x58 = cSAngle(twoact0_p->mLatitudeMin); } else { if (acStack_e8 > cSAngle(twoact0_p->mLatitudeMax)) { twoact0_p->field_0x58 = cSAngle(twoact0_p->mLatitudeMax); } else { - twoact0_p->field_0x58 = field_0x5c.mDirection.V(); + twoact0_p->field_0x58 = mViewCache.mDirection.V(); } } - f32 fVar1 = field_0x5c.mDirection.R(); + f32 fVar1 = mViewCache.mDirection.R(); if (fVar1 < twoact0_p->mRadiusMin) { twoact0_p->field_0x50 = twoact0_p->mRadiusMin; } else if (fVar1 > twoact0_p->mRadiusMax) { twoact0_p->field_0x50 = twoact0_p->mRadiusMax; } else { - twoact0_p->field_0x50 = field_0x5c.mDirection.R(); + twoact0_p->field_0x50 = mViewCache.mDirection.R(); } } twoact0_p->field_0x56 += (twoact0_p->field_0x5a - twoact0_p->field_0x56) * twoact0_p->mEyeCus; twoact0_p->field_0x54 += (twoact0_p->field_0x58 - twoact0_p->field_0x54) * twoact0_p->mEyeCus; twoact0_p->field_0x4c += twoact0_p->mEyeCus * (twoact0_p->field_0x50 - twoact0_p->field_0x4c); - field_0x5c.mDirection.Val(twoact0_p->field_0x4c, twoact0_p->field_0x54, twoact0_p->field_0x56); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy += twoact0_p->mCtrCus * (twoact0_p->mFovy - field_0x5c.mFovy); + mViewCache.mDirection.Val(twoact0_p->field_0x4c, twoact0_p->field_0x54, twoact0_p->field_0x56); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy += twoact0_p->mCtrCus * (twoact0_p->mFovy - mViewCache.mFovy); return 1; } @@ -3738,7 +3738,7 @@ bool dCamera_c::peepHoleEvCamera() { /* 80095FD0-800965AC 090910 05DC+00 0/0 1/0 0/0 .text digHoleEvCamera__9dCamera_cFv */ bool dCamera_c::digHoleEvCamera() { - struct mWork::digHole* digHole = &mWork.digHole; + DigHoleData* digHole = (DigHoleData*)mWork; if (mCurCamStyleTimer == 0) { digHole->field_0x0 = 0; getEvIntData(&digHole->mType, "Type", 3); @@ -3750,7 +3750,7 @@ bool dCamera_c::digHoleEvCamera() { digHole->field_0xc = 0.05f; digHole->field_0x10 = 1; if ((digHole->mType & 1) != 0) { - cSAngle acStack_158(field_0x5c.mDirection.U() - directionOf(mpPlayerActor)); + cSAngle acStack_158(mViewCache.mDirection.U() - directionOf(mpPlayerActor)); if (acStack_158.Abs() < s16(cSAngle::_90)) { cXyz sp70, sp7c; cSGlobe cStack_138; @@ -3765,10 +3765,10 @@ bool dCamera_c::digHoleEvCamera() { sp7c = sp70 + cStack_138.Xyz(); if (!lineBGCheck(&sp70, &sp7c, 0x4007)) { - field_0x5c.mFovy = 60.0f; - field_0x5c.mCenter = sp70; - field_0x5c.mDirection = cStack_138; - field_0x5c.mEye = sp7c; + mViewCache.mFovy = 60.0f; + mViewCache.mCenter = sp70; + mViewCache.mDirection = cStack_138; + mViewCache.mEye = sp7c; } else { digHole->field_0x10 = 0; } @@ -3799,7 +3799,7 @@ bool dCamera_c::digHoleEvCamera() { } cXyz spac = attentionPos(mpPlayerActor); - if (dCamMath::xyzHorizontalDistance(field_0x5c.mCenter, spac) > 120.0f) { + if (dCamMath::xyzHorizontalDistance(mViewCache.mCenter, spac) > 120.0f) { digHole->field_0x10 = 0; } } @@ -3810,14 +3810,14 @@ bool dCamera_c::digHoleEvCamera() { default: case 1: { if (digHole->field_0x10) { - f32 fVar2 = field_0x5c.mDirection.R(); - f32 fVar3 = field_0x5c.mDirection.V().Degree(); - field_0x5c.mDirection.R(fVar2 + (350.0f - fVar2) * digHole->field_0xc); - field_0x5c.mDirection.V(fVar3 + (40.0f - fVar3) * digHole->field_0xc); - field_0x5c.mFovy += (60.0f - field_0x5c.mFovy) * digHole->field_0xc; - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + f32 fVar2 = mViewCache.mDirection.R(); + f32 fVar3 = mViewCache.mDirection.V().Degree(); + mViewCache.mDirection.R(fVar2 + (350.0f - fVar2) * digHole->field_0xc); + mViewCache.mDirection.V(fVar3 + (40.0f - fVar3) * digHole->field_0xc); + mViewCache.mFovy += (60.0f - mViewCache.mFovy) * digHole->field_0xc; + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); } else if (!strcmp(dComIfGp_getStartStageName(), "R_SP01")) { - field_0x88 = 0; + mBumpCheckFlags = 0; } if (digHole->field_0x0 >= digHole->field_0x8 && digHole->mType != 1) { @@ -3830,10 +3830,10 @@ bool dCamera_c::digHoleEvCamera() { case 2: { if (digHole->field_0x0 == 1) { - field_0x5c.mCenter = digHole->field_0x14; - field_0x5c.mEye = digHole->field_0x20; - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); - field_0x5c.mFovy = 60.0f; + mViewCache.mCenter = digHole->field_0x14; + mViewCache.mEye = digHole->field_0x20; + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); + mViewCache.mFovy = 60.0f; } } } @@ -3843,7 +3843,7 @@ bool dCamera_c::digHoleEvCamera() { /* 800965AC-80096EDC 090EEC 0930+00 0/0 1/0 0/0 .text hintTalkEvCamera__9dCamera_cFv */ bool dCamera_c::hintTalkEvCamera() { - struct mWork::hintTalk* hintTalk = &mWork.hintTalk; + HintTalkData* hintTalk = (HintTalkData*)mWork; daAlink_c* link_p = (daAlink_c*)mpPlayerActor; fopAc_ac_c* ride_actor_p; int i, j; @@ -3879,7 +3879,7 @@ bool dCamera_c::hintTalkEvCamera() { cXyz spe4; hintTalk->field_0x40 = vec_190; - hintTalk->mDirection = field_0x5c.mDirection; + hintTalk->mDirection = mViewCache.mDirection; cXyz spf0 = vec_184 - vec_190; hintTalk->field_0x28.Val(spf0); @@ -3893,17 +3893,17 @@ bool dCamera_c::hintTalkEvCamera() { f32 local_b0[10] = { 40.0f, 60.0f, 25.0f, 50.0f, 75.0f, 35.0f, 15.0f, 90.0f, 110.0f, 140.0f }; f32 fVar1; - if ((field_0xa8 & 16) != 0) { + if ((mFrameCounter & 16) != 0) { fVar1 = local_b0[0]; local_b0[0] = local_b0[3]; local_b0[3] = fVar1; } - if ((field_0xa8 & 4) != 0) { + if ((mFrameCounter & 4) != 0) { fVar1 = local_b0[2]; local_b0[2] = local_b0[1]; local_b0[1] = fVar1; } - if ((field_0xa8 & 2) != 0) { + if ((mFrameCounter & 2) != 0) { fVar1 = local_b0[0]; local_b0[0] = local_b0[1]; local_b0[1] = fVar1; @@ -3958,18 +3958,18 @@ bool dCamera_c::hintTalkEvCamera() { } } - if (!field_0x158.field_0x0) { + if (!mStyleSettle.mFinished) { f32 div_val = f32(mCurCamStyleTimer + 1) / hintTalk->mTimer; f32 fVar22 = dCamMath::rationalBezierRatio(div_val, 0.4f); - field_0x5c.mCenter += (hintTalk->field_0x8 - field_0x5c.mCenter) * fVar22; - field_0x5c.mDirection.R(field_0x5c.mDirection.R() + ((hintTalk->mDirection.R() - field_0x5c.mDirection.R()) * fVar22)); - field_0x5c.mDirection.V(field_0x5c.mDirection.V() + ((hintTalk->mDirection.V() - field_0x5c.mDirection.V()) * fVar22)); - field_0x5c.mDirection.U(field_0x5c.mDirection.U() + ((hintTalk->mDirection.U() - field_0x5c.mDirection.U()) * fVar22)); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy += fVar22 * (hintTalk->mFovy - field_0x5c.mFovy); + mViewCache.mCenter += (hintTalk->field_0x8 - mViewCache.mCenter) * fVar22; + mViewCache.mDirection.R(mViewCache.mDirection.R() + ((hintTalk->mDirection.R() - mViewCache.mDirection.R()) * fVar22)); + mViewCache.mDirection.V(mViewCache.mDirection.V() + ((hintTalk->mDirection.V() - mViewCache.mDirection.V()) * fVar22)); + mViewCache.mDirection.U(mViewCache.mDirection.U() + ((hintTalk->mDirection.U() - mViewCache.mDirection.U()) * fVar22)); + mViewCache.mEye = mViewCache.mCenter + mViewCache.mDirection.Xyz(); + mViewCache.mFovy += fVar22 * (hintTalk->mFovy - mViewCache.mFovy); if (mCurCamStyleTimer == (hintTalk->mTimer - 1)) { - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; } return 0; @@ -3980,11 +3980,11 @@ bool dCamera_c::hintTalkEvCamera() { /* 80096EDC-80097694 09181C 07B8+00 0/0 1/0 0/0 .text bspTransEvCamera__9dCamera_cFv */ bool dCamera_c::bspTransEvCamera() { - struct mWork::bspTrans* bspTrans = &mWork.bspTrans; + BspTransData* bspTrans = (BspTransData*)mWork; f32 local_7c[4] = { 0.0f, 0.0f, 1.0f, 1.0f }; if (mCurCamStyleTimer == 0) { - field_0x158.field_0x0 = true; + mStyleSettle.mFinished = true; if (!getEvIntData(&bspTrans->mTimer, "Timer")) { OS_REPORT("camera: event: error: BSPTRANS no Timer\n"); return 1; @@ -4117,7 +4117,7 @@ bool dCamera_c::bspTransEvCamera() { sp60.y = bspTrans->field_0x78.y + (pos.sp48.y - bspTrans->field_0x78.y) * vals_f4[bspTrans->field_0xc0[0]]; sp60.z = bspTrans->field_0x78.z + (pos.sp48.z - bspTrans->field_0x78.z) * vals_f4[bspTrans->field_0xc0[1]]; - field_0x5c.mCenter += (sp60 - field_0x5c.mCenter) * bspTrans->mCushion; + mViewCache.mCenter += (sp60 - mViewCache.mCenter) * bspTrans->mCushion; cSGlobe cStack_130(bspTrans->field_0x84 - bspTrans->field_0x78); cSGlobe cStack_138(pos.sp3c - pos.sp48); @@ -4127,11 +4127,11 @@ bool dCamera_c::bspTransEvCamera() { cStack_140.V(cStack_130.V() + ((cStack_138.V() - cStack_130.V()) * vals_f4[bspTrans->field_0xc0[3]])); cStack_140.U(cStack_130.U() + ((cStack_138.U() - cStack_130.U()) * vals_f4[bspTrans->field_0xc0[4]])); - sp70 = field_0x5c.mCenter + cStack_140.Xyz(); - field_0x5c.mEye += (sp70 - field_0x5c.mEye) * bspTrans->mCushion; + sp70 = mViewCache.mCenter + cStack_140.Xyz(); + mViewCache.mEye += (sp70 - mViewCache.mEye) * bspTrans->mCushion; f32 add_val = (bspTrans->field_0x90 + (bspTrans->field_0xac - bspTrans->field_0x90) * vals_f4[bspTrans->field_0xc0[5]]); - field_0x5c.mFovy += bspTrans->mCushion * (add_val - field_0x5c.mFovy); - field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + mViewCache.mFovy += bspTrans->mCushion * (add_val - mViewCache.mFovy); + mViewCache.mDirection.Val(mViewCache.mEye - mViewCache.mCenter); return 0; } diff --git a/src/d/d_event_data.cpp b/src/d/d_event_data.cpp index 0f30f5eab2..87909bb337 100644 --- a/src/d/d_event_data.cpp +++ b/src/d/d_event_data.cpp @@ -7,6 +7,7 @@ #include "d/d_event_data.h" #include "d/actor/d_a_player.h" +#include "d/d_camera.h" #include "d/d_demo.h" #include "d/d_gameover.h" #include "d/d_msg_object.h" diff --git a/src/d/d_event_manager.cpp b/src/d/d_event_manager.cpp index 6a7cb794c3..eb7ff40782 100644 --- a/src/d/d_event_manager.cpp +++ b/src/d/d_event_manager.cpp @@ -8,6 +8,7 @@ #include "d/d_event_manager.h" #include "SSystem/SComponent/c_math.h" #include "d/actor/d_a_player.h" +#include "d/d_camera.h" #include "d/d_com_inf_game.h" #include "stdio.h" diff --git a/src/d/d_insect.cpp b/src/d/d_insect.cpp index f2e6bfc8f7..fc1765f2c1 100644 --- a/src/d/d_insect.cpp +++ b/src/d/d_insect.cpp @@ -8,6 +8,7 @@ #include "d/d_insect.h" #include "d/d_com_inf_game.h" #include "d/d_menu_insect.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_lib.h" #include "dol2asm.h" diff --git a/src/d/d_kankyo.cpp b/src/d/d_kankyo.cpp index bca8a408df..fd52937efe 100644 --- a/src/d/d_kankyo.cpp +++ b/src/d/d_kankyo.cpp @@ -11,6 +11,7 @@ #include "d/d_kankyo_static.h" #include "d/d_meter2_info.h" #include "d/d_msg_object.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_kankyo.h" #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_lib.h" diff --git a/src/d/d_kankyo_rain.cpp b/src/d/d_kankyo_rain.cpp index a49485533b..d674040c30 100644 --- a/src/d/d_kankyo_rain.cpp +++ b/src/d/d_kankyo_rain.cpp @@ -7,6 +7,7 @@ #include "d/d_com_inf_game.h" #include "d/d_demo.h" #include "d/d_kankyo_rain.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_kankyo_mng.h" #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_lib.h" diff --git a/src/d/d_kankyo_wether.cpp b/src/d/d_kankyo_wether.cpp index 1bc4f40a0f..838f7dd25e 100644 --- a/src/d/d_kankyo_wether.cpp +++ b/src/d/d_kankyo_wether.cpp @@ -11,6 +11,7 @@ #include "d/d_com_inf_game.h" #include "d/d_kankyo.h" #include "d/d_kankyo_rain.h" +#include "f_op/f_op_camera_mng.h" #include "string.h" #include "m_Do/m_Do_audio.h" diff --git a/src/d/d_ky_thunder.cpp b/src/d/d_ky_thunder.cpp index b099bc569b..ee6142f8e2 100644 --- a/src/d/d_ky_thunder.cpp +++ b/src/d/d_ky_thunder.cpp @@ -11,6 +11,7 @@ #include "SSystem/SComponent/c_math.h" #include "d/d_com_inf_game.h" #include "d/d_kankyo_rain.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_kankyo_mng.h" #define EF_THUNDER01_BMD 0x1E diff --git a/src/d/d_menu_window.cpp b/src/d/d_menu_window.cpp index 83637a079c..b014686247 100644 --- a/src/d/d_menu_window.cpp +++ b/src/d/d_menu_window.cpp @@ -14,6 +14,8 @@ #include "d/d_menu_save.h" #include "d/d_menu_skill.h" #include "d/d_menu_window.h" + +#include "d/d_camera.h" #include "d/d_menu_window_HIO.h" #include "d/d_meter2.h" #include "d/d_meter2_info.h" diff --git a/src/d/d_meter2.cpp b/src/d/d_meter2.cpp index a80a43ac3c..4da393758c 100644 --- a/src/d/d_meter2.cpp +++ b/src/d/d_meter2.cpp @@ -7,6 +7,7 @@ #include "d/d_meter2.h" #include "JSystem/JKernel/JKRExpHeap.h" +#include "d/d_camera.h" #include "d/d_demo.h" #include "d/d_scope.h" #include "d/d_timer.h" diff --git a/src/d/d_msg_scrn_place.cpp b/src/d/d_msg_scrn_place.cpp index 5ef624cb19..b42b24f09f 100644 --- a/src/d/d_msg_scrn_place.cpp +++ b/src/d/d_msg_scrn_place.cpp @@ -8,6 +8,7 @@ #include "d/d_msg_scrn_place.h" #include "JSystem/J2DGraph/J2DGrafContext.h" #include "JSystem/J2DGraph/J2DScreen.h" +#include "d/d_camera.h" #include "d/d_msg_object.h" #include "d/d_pane_class.h" diff --git a/src/d/d_ovlp_fade3.cpp b/src/d/d_ovlp_fade3.cpp index e9d5f5bf24..05e1e0a612 100644 --- a/src/d/d_ovlp_fade3.cpp +++ b/src/d/d_ovlp_fade3.cpp @@ -7,6 +7,7 @@ #include "JSystem/J2DGraph/J2DOrthoGraph.h" #include "d/d_ovlp_fade3.h" +#include "d/d_camera.h" #include "d/d_s_play.h" #include "m_Do/m_Do_audio.h" #include "m_Do/m_Do_graphic.h" diff --git a/src/d/d_resorce.cpp b/src/d/d_resorce.cpp index 004ce3858d..67ecefda29 100644 --- a/src/d/d_resorce.cpp +++ b/src/d/d_resorce.cpp @@ -12,6 +12,7 @@ #include "JSystem/JUtility/JUTAssert.h" #include "d/d_bg_w_kcol.h" #include "d/d_com_inf_game.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_graphic.h" #include diff --git a/src/d/d_shop_camera.cpp b/src/d/d_shop_camera.cpp index 57f54e974c..44853d976a 100644 --- a/src/d/d_shop_camera.cpp +++ b/src/d/d_shop_camera.cpp @@ -9,6 +9,7 @@ #include "SSystem/SComponent/c_math.h" #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" +#include "f_op/f_op_camera_mng.h" struct SeiraCam { /* 0x00 */ Vec field_0x0; diff --git a/src/d/d_vibration.cpp b/src/d/d_vibration.cpp index 43a78272aa..855e0c2eb0 100644 --- a/src/d/d_vibration.cpp +++ b/src/d/d_vibration.cpp @@ -2,6 +2,7 @@ #include "d/d_vibration.h" #include "d/d_com_inf_game.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_controller_pad.h" #include "SSystem/SComponent/c_math.h" #include diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index 8180fcb1b6..bac05b025a 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -16,6 +16,7 @@ #include "d/d_item.h" #include "d/d_path.h" #include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_camera_mng.h" #include "f_op/f_op_scene_mng.h" #include "m_Do/m_Do_lib.h" diff --git a/src/f_op/f_op_camera.cpp b/src/f_op/f_op_camera.cpp index 549d95f2b1..3558dc673b 100644 --- a/src/f_op/f_op_camera.cpp +++ b/src/f_op/f_op_camera.cpp @@ -4,6 +4,7 @@ */ #include "f_op/f_op_camera.h" +#include "f_op/f_op_camera_mng.h" #include "d/d_com_inf_game.h" #include "d/d_s_play.h" #include "f_op/f_op_draw_tag.h" diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index 2c079ee1f6..e100b72622 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -19,6 +19,7 @@ #include "d/d_menu_collect.h" #include "dolphin/base/PPCArch.h" #include "f_ap/f_ap_game.h" +#include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_machine.h"