summaryrefslogtreecommitdiff
path: root/src/d/d_camera.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/d/d_camera.cpp')
-rw-r--r--src/d/d_camera.cpp4538
1 files changed, 2338 insertions, 2200 deletions
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, &center, 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;
- }
- 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);
+ if (chkFlag(0x200) && mRecovery.field_0x8.field_0x1e <= 0) {
+ mViewCache.mCenter = mCenter;
+ mViewCache.mEye = mEye;
+ mViewCache.mDirection = mDirection;
+ mViewCache.mFovy = mFovy;
+ }
+ 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;
- }
- 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_0x20 = 1.0f;
+ }
+ 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;
- }
-
- 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;
+ if (mRecovery.field_0x8.field_0x1e <= 0) {
+ mViewCache.mDirection = mDirection;
+ mViewCache.mCenter = mCenter;
+ mViewCache.mEye = mEye;
+ }
+
+ 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));
- }
- 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_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));
+ }
+ 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);
+ bool sp0F = false;
+ bool sp0E = false;
+ bool sp0D = false;
+ if (check_owner_action(mPadID, 0x100)) {
+ sp0F = true;
+ }
if (check_owner_action(mPadID, 0x2000008)) {
- bVar2 = true;
+ sp0E = true;
}
- if (player->checkMagneBootsOn() && cBgW_CheckBWall(player->getMagneBootsTopVec()->y)) {
- bVar2 = 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;
-
- 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;
+ tower->field_0x1c += (val8 - tower->field_0x1c) * val11;
+ tower->field_0x20 += (val7 - tower->field_0x20) * val11;
+
+ 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];
+bool dCamera_c::railCamera(s32 param_0) {
+ 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;
-/* 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];
+ 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;
+ }
-/* 80179590-8017A2A0 173ED0 0D10+00 1/0 0/0 0/0 .text railCamera__9dCamera_cFl */
-bool dCamera_c::railCamera(s32 param_0) {
- // NONMATCHING
+ 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;