// // Generated By: dol2asm // Translation Unit: d/d_camera // #include "d/d_camera.h" #include "SSystem/SComponent/c_math.h" #include "math.h" #include "cmath.h" #include "d/actor/d_a_alink.h" #include "d/d_bg_s_sph_chk.h" #include "d/d_com_inf_actor.h" #include "d/d_com_inf_game.h" #include "d/d_demo.h" #include "dol2asm.h" #include "f_op/f_op_camera.h" #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_lib.h" #include "d/actor/d_a_boomerang.h" #include "d/actor/d_a_horse.h" #include "d/actor/d_a_midna.h" #include "d/actor/d_a_tag_mhint.h" #include "d/actor/d_a_tag_mstop.h" #include "d/actor/d_a_tag_mwait.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 blureCamera__9dCamera_cFv(); 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(); u32 daPy_py_c::getLastSceneMode() { return dComIfGs_getLastSceneMode() & 0xF; } // // Declarations: // namespace { /* 8015FA2C-8015FA4C 15A36C 0020+00 2/2 0/0 0/0 .text limitf__22@unnamed@d_camera_cpp@Ffff */ static f32 limitf(f32 value, f32 min, f32 max) { if (value > max) { return max; } else if (value < min) { return min; } return value; } inline static bool is_player(fopAc_ac_c* actor) { return fopAcM_GetName(actor) == PROC_ALINK || fopAcM_GetName(actor) == PROC_ALINK; } /* 8015FA4C-8015FADC 15A38C 0090+00 1/1 0/0 0/0 .text * hideActor__22@unnamed@d_camera_cpp@FP10fopAc_ac_c */ static void hideActor(fopAc_ac_c* actor) { if (is_player(actor)) { dComIfGp_onCameraAttentionStatus(0, 2); if (((daPy_py_c*)actor)->checkHorseRide()) { fopAcM_OnStatus(dComIfGp_getHorseActor(), 0x1000000); } } else { fopAcM_OnStatus(actor, 0x1000000); } } /* 8015FADC-8015FB28 15A41C 004C+00 1/1 0/0 0/0 .text defaultRadius__22@unnamed@d_camera_cpp@FffPf */ static bool defaultRadius(f32 param_0, f32 param_1, f32* param_2) { f32 var_f30; f32 var_f31; if (param_0 < param_1) { var_f31 = param_0; var_f30 = param_1; } else { var_f30 = param_0; var_f31 = param_1; } if (*param_2 > var_f30) { *param_2 = var_f30; return false; } if (*param_2 < var_f31) { *param_2 = var_f31; return false; } return true; } /* 8015FB28-8015FBF8 15A468 00D0+00 1/1 0/0 0/0 .text * posInLine2D__22@unnamed@d_camera_cpp@FP4cXyzP4cXyzP4cXyz */ static bool posInLine2D(cXyz* param_0, cXyz* param_1, cXyz* param_2) { if (param_0->x <= param_1->x) { if (param_2->x < param_0->x) return false; if (param_2->x > param_1->x) return false; } else { if (param_2->x <= param_1->x) return false; if (param_2->x >= param_0->x) return false; } if (param_0->z <= param_1->z) { if (param_2->z < param_0->z) return false; if (param_2->z > param_1->z) return false; } else { if (param_2->z <= param_1->z) return false; if (param_2->z >= param_0->z) return false; } return true; } /* 8015FBF8-8015FEB8 15A538 02C0+00 1/1 0/0 0/0 .text * relationalPos2__22@unnamed@d_camera_cpp@FP10fopAc_ac_cP10fopAc_ac_cP4cXyzf7cSAngle */ static cXyz relationalPos2(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, cXyz* param_2, f32 param_3, cSAngle param_4) { if (i_actor1 == NULL || i_actor2 == NULL) { return cXyz::Zero; } cXyz pos1 = i_actor1->attention_info.position; cXyz pos2 = i_actor2->attention_info.position; cXyz pos_diff = pos2 - pos1; cSGlobe diff_globe(pos_diff); pos_diff.normalize(); pos1 -= pos_diff * i_actor1->attention_info.field_0xa; pos2 += pos_diff * i_actor2->attention_info.field_0xa; cXyz mid = pos1 + (pos2 - pos1) * 0.5f; cXyz vec = *param_2; cSAngle angle = param_4 - diff_globe.U(); if (angle < cSAngle::_0) { vec.x = -vec.x; } cSGlobe globe2(vec); globe2.U(diff_globe.U() + globe2.U()); diff_globe.R(0.5f * diff_globe.R() * angle.Cos() * param_3); cXyz ret = mid + diff_globe.Xyz() + globe2.Xyz(); return ret; } } // namespace /* 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) { return 0; } stage_camera_class* room_cam = dComIfGp_getRoomCamera(roomNo); stage_arrow_class* room_arrow = dComIfGp_getRoomArrow(roomNo); if (room_cam != NULL && param_0 >= 0 && param_0 < room_cam->field_0x0) { Clr(); field_0x30 = param_0; field_0x0 = room_cam->mEntries[field_0x30]; field_0x3a = (field_0x0.field_0x14 >> 0xE) & 3; if (param_3 & 0x8000) { field_0x3a |= 0x10; } if (field_0x0.field_0x14 & 0x2000) { field_0x0.field_0x14 |= 0xC000; } else { field_0x0.field_0x14 &= ~0xC000; } field_0x2c = field_0x0.field_0x10; if (room_arrow != NULL && field_0x2c >= 0 && field_0x2c < room_arrow->mNum) { field_0x18 = room_arrow->mEntries[field_0x2c]; } field_0x34 = param_2; field_0x3b = param_4; field_0x38 = 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 /* 803BA160-803BA16C 017280 000C+00 2/2 0/0 0/0 .data cNullVec__6Z2Calc */ SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; /* 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, &dCamera_c::talktoCamera, &dCamera_c::subjectCamera, &dCamera_c::fixedPositionCamera, &dCamera_c::fixedFrameCamera, &dCamera_c::towerCamera, &dCamera_c::rideCamera, &dCamera_c::manualCamera, &dCamera_c::eventCamera, &dCamera_c::hookshotCamera, &dCamera_c::colosseumCamera, &dCamera_c::observeCamera, &dCamera_c::magneCamera, &dCamera_c::railCamera, &dCamera_c::paraRailCamera, &dCamera_c::oneSideCamera, &dCamera_c::test1Camera, &dCamera_c::test2Camera, }; /* 803BA4A4-803BA4B8 0175C4 0014+00 1/1 0/0 0/0 .data Dsp$13137 */ SECTION_DATA static u8 Dsp[20] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, }; /* 803BA650-803BA6D8 -00001 0088+00 0/1 0/0 0/0 .data ActionNames$16655 */ namespace { inline static int get_camera_id(camera_class* i_camera) { return fopCamM_GetParam(i_camera); } inline static int get_controller_id(camera_class* i_camera) { return dComIfGp_getCameraPlayer1ID(get_camera_id(i_camera)); } inline static fopAc_ac_c* get_player_actor(camera_class* i_camera) { return dComIfGp_getPlayer(dComIfGp_getCameraPlayer1ID(get_camera_id(i_camera))); } inline static dDlst_window_c* get_window(int param_0) { return dComIfGp_getWindow(dComIfGp_getCameraWinID(param_0)); } inline static dDlst_window_c* get_window(camera_class* i_camera) { return dComIfGp_getWindow(dComIfGp_getCameraWinID(get_camera_id(i_camera))); } inline static fopAc_ac_c* get_boomerang_actor(fopAc_ac_c* i_actor) { if (is_player(i_actor)) { return static_cast(i_actor)->getThrowBoomerangActor(); } else { return NULL; } } } // namespace /* 8016008C-801602C4 15A9CC 0238+00 1/1 0/0 0/0 .text __ct__9dCamera_cFP12camera_class */ dCamera_c::dCamera_c(camera_class* i_camera) : mCamParam(0) { initialize(i_camera, get_player_actor(i_camera), get_camera_id(i_camera), get_controller_id(i_camera)); } /* 80160304-80160470 15AC44 016C+00 1/1 0/0 0/0 .text __dt__9dCamera_cFv */ dCamera_c::~dCamera_c() { if (!daPy_py_c::checkPeepEndSceneChange()) { dComIfGs_getTurnRestart().setCameraCtr(mCenter); dComIfGs_getTurnRestart().setCameraEye(mEye); dComIfGs_getTurnRestart().setCameraUp(mUp); dComIfGs_getTurnRestart().setCameraFvy(mFovY); fopAc_ac_c::setStopStatus(0); } } namespace { /* 8042C8F8-8042C9A0 059618 00A8+00 12/12 0/0 0/0 .bss specialType__22@unnamed@d_camera_cpp@ */ static int specialType[42]; /* 80451020-80451024 000520 0004+00 4/4 0/0 0/0 .sbss Stage__22@unnamed@d_camera_cpp@ */ static int Stage; inline static bool check_owner_action(u32 param_0, u32 param_1) { return dComIfGp_checkPlayerStatus0(param_0, param_1); } inline static bool check_owner_action1(u32 param_0, u32 param_1) { return dComIfGp_checkPlayerStatus1(param_0, param_1); } inline static void setComStat(u32 param_0) { dComIfGp_onCameraAttentionStatus(0, param_0); } inline static bool getComStat(u32 param_0) { return dComIfGp_getCameraAttentionStatus(0) & param_0; } inline static void clrComStat(u32 param_0) { dComIfGp_offCameraAttentionStatus(0, param_0); } inline static void setComZoomScale(f32 param_0) { dComIfGp_setCameraZoomScale(0, param_0); } } // namespace /* 80160470-801614AC 15ADB0 103C+00 1/1 0/0 0/0 .text * initialize__9dCamera_cFP12camera_classP10fopAc_ac_cUlUl */ void dCamera_c::initialize(camera_class* i_camera, fopAc_ac_c* i_player, u32 i_cameraID, u32 i_padID) { char* type_data = (char*)dComIfG_getObjectRes(dComIfGp_getCameraParamFileName(0), "camtype.dat"); mCamTypeData = (dCamera_type_data*)(type_data + 8); mCamTypeNum = *(int*)(type_data + 4); field_0x0 = i_camera; field_0x20 = 1; field_0x21 = 0; field_0x24 = 0; mpPlayerActor = i_player; mCameraID = i_cameraID; mPadID = i_padID; initMonitor(); initPad(); mFocusLine.Init(); mRoomNo = dComIfGp_roomControl_getStayNo(); const char* stage_name = dComIfGp_getStartStageName(); if (strcmp(stage_name, "D_MN01A") == 0) { Stage = 0x68; } else if (strcmp(stage_name, "D_MN10A") == 0) { Stage = 0x69; } else if (strcmp(stage_name, "D_MN11A") == 0) { Stage = 0x6A; } else if (strcmp(stage_name, "D_MN04A") == 0) { Stage = 0x66; } else if (strcmp(stage_name, "D_MN05A") == 0) { Stage = 0x65; } else if (strcmp(stage_name, "D_MN07A") == 0) { Stage = 0x6B; } specialType[0] = GetCameraTypeFromCameraName("FieldS"); specialType[1] = GetCameraTypeFromCameraName("Event"); specialType[2] = GetCameraTypeFromCameraName("Water"); specialType[3] = GetCameraTypeFromCameraName("Scope"); specialType[13] = GetCameraTypeFromCameraName("WaterSurf"); specialType[5] = GetCameraTypeFromCameraName("HorseT"); specialType[6] = GetCameraTypeFromCameraName("Board"); specialType[4] = GetCameraTypeFromCameraName("Canoe"); specialType[8] = GetCameraTypeFromCameraName("Keep"); specialType[9] = GetCameraTypeFromCameraName("Rodeo"); specialType[10] = GetCameraTypeFromCameraName("MagneBoots"); specialType[12] = GetCameraTypeFromCameraName("MagneRoof"); specialType[11] = GetCameraTypeFromCameraName("MagneWall"); specialType[32] = GetCameraTypeFromCameraName("CoccoJump"); specialType[31] = GetCameraTypeFromCameraName("Boar"); specialType[30] = GetCameraTypeFromCameraName("GoatBattle"); specialType[29] = GetCameraTypeFromCameraName("GoronJump"); specialType[28] = GetCameraTypeFromCameraName("Spinner"); specialType[25] = GetCameraTypeFromCameraName("HookWall"); specialType[26] = GetCameraTypeFromCameraName("HookRoof"); specialType[27] = GetCameraTypeFromCameraName("HookActor"); specialType[33] = GetCameraTypeFromCameraName("RoofHung"); specialType[14] = GetCameraTypeFromCameraName("Rotary"); specialType[15] = GetCameraTypeFromCameraName("Street"); specialType[16] = GetCameraTypeFromCameraName("StreetN"); specialType[17] = GetCameraTypeFromCameraName("StreetP"); specialType[18] = GetCameraTypeFromCameraName("Rampart2"); specialType[19] = GetCameraTypeFromCameraName("Allay"); specialType[20] = GetCameraTypeFromCameraName("AllayR"); specialType[21] = GetCameraTypeFromCameraName("AllayR2"); specialType[22] = GetCameraTypeFromCameraName("AllayS"); specialType[23] = GetCameraTypeFromCameraName("AllayN"); specialType[24] = GetCameraTypeFromCameraName("AllayR3"); specialType[34] = GetCameraTypeFromCameraName("CopyRodHall"); specialType[35] = GetCameraTypeFromCameraName("MidnaTag"); specialType[36] = GetCameraTypeFromCameraName("WarpObj"); specialType[37] = GetCameraTypeFromCameraName("LV9GZeldaTri"); specialType[39] = GetCameraTypeFromCameraName("LV4BOSSSPJP"); specialType[40] = GetCameraTypeFromCameraName("LV7BOSS"); specialType[38] = GetCameraTypeFromCameraName("TeppeiHook"); mCurType = mMapToolType = specialType[0]; specialType[41] = GetCameraTypeFromCameraName("Peep"); field_0x698 = 0xFF; field_0x69c = 0; field_0x190 = daPy_py_c::i_checkNowWolf() != 0; mCurMode = 0; field_0x680 = 0; field_0x1ac = 11; field_0x1b4 = 0.0f; mEventFlags = 0; field_0x1b0 = cSAngle::_0; field_0xa8 = 0; field_0xac = cM_rndFX(0x7FFF); field_0x84 = 1.0f; field_0x91c = 0.0f; mTrimHeight = 0.0f; mTrimSize = 0; mTrimTypeForce = -1; field_0x940 = 0; field_0x944 = 0; field_0x950 = field_0x940; mBG.field_0x5c.field_0x0 = 0; mBG.field_0x0.field_0x0 = 0; mBG.field_0xc0.field_0x3c = 0xFF; mBG.field_0x5c.field_0x58 = -1000000000.0f; mBG.field_0x0.field_0x58 = -1000000000.0f; mBG.field_0x0.field_0x4.OffNormalGrp(); mBG.field_0x0.field_0x4.OnWaterGrp(); mBG.field_0xc0.field_0x1 = 0; mBG.field_0xc0.field_0x0 = 0; mBG.field_0xc0.field_0x10 = cXyz::Zero; mBG.field_0xc0.field_0x4 = mBG.field_0xc0.field_0x10; mBG.field_0xc0.field_0x20 = 0; mBG.field_0xc0.field_0x1e = cSAngle::_0; mBG.field_0xc0.field_0x1c = mBG.field_0xc0.field_0x1e; mBG.field_0xc0.field_0x34 = 0; mBG.field_0x108.field_0x0 = 0; mBG.field_0x108.field_0x4 = 0.0f; mBG.field_0xc0.field_0x38 = -1000000000.0f; mBG.field_0xc0.field_0x40 = 0xFF; field_0x934 = mCamSetup.mBGChk.WallUpDistance(); mMapToolType = 0xFF; field_0x7ac.Clr(); field_0x7e8.Clr(); field_0x824.Clr(); field_0x860.Clr(); field_0x89c.Clr(); field_0x8d8.Clr(); setStageMapToolData(); if (field_0x7e8.field_0x30 != 0xFF) { mMapToolType = GetCameraTypeFromToolData(&field_0x7e8.field_0x0); } dStage_stageDt_c* stage_dt = dComIfGp_getStage(); stage_stag_info_class* stag_info; if (stage_dt != NULL) { stag_info = stage_dt->getStagInfo(); } else { stag_info = NULL; } if (stag_info != NULL && mMapToolType == 0xFF) { switch (dStage_stagInfo_GetSTType(stag_info)) { case ST_DUNGEON: mMapToolType = GetCameraTypeFromCameraName("DungeonS"); break; case ST_ROOM: mMapToolType = GetCameraTypeFromCameraName("Room"); break; default: mMapToolType = GetCameraTypeFromCameraName("FieldS"); break; } } int sp108 = 0xFF; int sp10C = dComIfGp_roomControl_getStayNo(); dStage_roomDt_c* room_dt = dComIfGp_roomControl_getStatusRoomDt(sp10C); if (room_dt != NULL) { dStage_FileList_dt_c* filelist = room_dt->getFileListInfo(); if (filelist != NULL) { sp108 = dStage_FileList_dt_GetDefaultCamera(filelist); } } setRoomMapToolData(&field_0x824, sp108, sp10C); checkGroundInfo(); setMapToolData(); if (field_0x7ac.field_0x30 != 0xFF) { mCurType = GetCameraTypeFromToolData(&field_0x7ac.field_0x0); } else { if (check_owner_action(mPadID, 0x8000000)) { mCurType = GetCameraTypeFromCameraName("Cave"); } else { mCurType = mMapToolType; } } mCamStyle = mCamTypeData[mCurType].field_0x18[field_0x190][mCurMode]; mLockOnActorID = 0xFFFFFFFF; mEventData.field_0x14 = -1; mEventData.field_0x18 = -1; mEventData.field_0x4 = -1; mEventData.field_0xc = -1; mEventData.field_0x0 = 1; OS_REPORT("camera: init: type %d mode %d style %d\n", mCurType, mCurMode, mCamStyle); mCamParam.Change(mCamStyle); if (daPy_py_c::checkPeepEndSceneChange() || dComIfGp_getStartStagePoint() == -2 || dComIfGp_getStartStagePoint() == -3) { mCenter = field_0x5c.field_0x8 = dComIfGs_getTurnRestart().getCameraCtr(); mEye = field_0x5c.field_0x14 = dComIfGs_getTurnRestart().getCameraEye(); field_0x5c.field_0x0.Val(mEye - mCenter); field_0x28 = field_0x5c.field_0x0; field_0x8c = field_0x5c.field_0x0.U().Inv(); mUp = dComIfGs_getTurnRestart().getCameraUp(); mBank = cSAngle::_0; field_0x5c.field_0x20 = mBank; field_0x80 = mFovY = dComIfGs_getTurnRestart().getCameraFvy(); } else if (daAlink_getAlinkActorClass()->checkStartFall()) { cXyz attn_pos = attentionPos(mpPlayerActor); if (mCamParam.Algorythmn() == 1) { attn_pos.y += -20.0f; } cSGlobe spE8(0.0f, cSAngle((s16)0), directionOf(mpPlayerActor)); mCenter = field_0x5c.field_0x8 = attn_pos + spE8.Xyz(); cXyz center = dComIfGs_getTurnRestart().getCameraCtr(); cXyz eye = dComIfGs_getTurnRestart().getCameraEye(); field_0x5c.field_0x0.Val(eye - center); field_0x8c = field_0x5c.field_0x0.U().Inv(); mEye = field_0x5c.field_0x14 = field_0x5c.field_0x8 + field_0x5c.field_0x0.Xyz(); mUp = dComIfGs_getTurnRestart().getCameraUp(); mBank = cSAngle::_0; field_0x5c.field_0x20 = mBank; field_0x80 = mFovY = dComIfGs_getTurnRestart().getCameraFvy(); } else { cXyz attn_pos = attentionPos(mpPlayerActor); if (mCamParam.Algorythmn() == 1) { attn_pos.y += -20.0f; } cSGlobe spE8(0.0f, cSAngle((s16)0), directionOf(mpPlayerActor)); mCenter = field_0x5c.field_0x8 = attn_pos + spE8.Xyz(); field_0x5c.field_0x0.Val(300.0f, 0, directionOf(mpPlayerActor).Inv()); mEye = field_0x5c.field_0x14 = field_0x5c.field_0x8 + field_0x5c.field_0x0.Xyz(); field_0x28 = field_0x5c.field_0x0; field_0x8c = field_0x5c.field_0x0.U().Inv(); mFovY = 60.0f; field_0x80 = 60.0f; mUp.set(0.0f, 1.0f, 0.0f); mBank = cSAngle::_0; field_0x5c.field_0x20 = mBank; } mFakeAngleSys.field_0x0 = 0; field_0x674 = 0xFF; field_0x670 = 0xFF; field_0x668 = 0; field_0x66c = 0; field_0x678 = 1; field_0x73c = 0.0f; field_0x738 = 85.0f; field_0x610 = 0; field_0x611 = 0; clearInfo(&field_0xb0, 0); clearInfo(&field_0xd0[0], 0); clearInfo(&field_0xd0[1], 0); clearInfo(&field_0x110.field_0x8, 0); field_0x110.field_0x4 = 0; field_0x110.field_0x28 = cXyz::Zero; field_0x110.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; setFlag(0x1000); daAlink_c* player = daAlink_getAlinkActorClass(); daMidna_c* midna = daPy_py_c::getMidnaActor(); field_0x194 = player->checkMidnaRide() && !midna->checkNoDraw(); field_0x958 = 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) { OS_REPORT("camera: start\n"); } if (field_0x24 != 0) { field_0x24 = 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) { OS_REPORT("camera: quick start\n"); } field_0x24 = 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); } field_0x24 = 3; } /* 801614E8-801614F4 15BE28 000C+00 0/0 2/2 0/0 .text Stay__9dCamera_cFv */ void dCamera_c::Stay() { field_0x24 = 1; } /* 801614F4-80161550 15BE34 005C+00 2/2 4/4 0/0 .text ChangeModeOK__9dCamera_cFl */ bool dCamera_c::ChangeModeOK(s32 param_0) { if (dComIfGp_evmng_cameraPlay() || chkFlag(0x20000000)) { return 0; } return !(mCamTypeData[mCurType].field_0x18[field_0x190][param_0] < 0); } /* 80161550-801617B0 15BE90 0260+00 1/1 0/0 0/0 .text initPad__9dCamera_cFv */ // NONMATCHING weird stuff with getTrig/Hold. wrong types??? void dCamera_c::initPad() { if (chkFlag(0x1000000)) { mPadInfo.mMainStick.mLastPosX = 0.0f; mPadInfo.mMainStick.mLastPosY = 0.0f; mPadInfo.mMainStick.mLastValue = 0.0f; } else { mPadInfo.mMainStick.mLastPosX = mDoCPd_c::getStickX3D(mPadID); mPadInfo.mMainStick.mLastPosY = mDoCPd_c::getStickY(mPadID); mPadInfo.mMainStick.mLastValue = mDoCPd_c::getStickValue(mPadID); } mPadInfo.mMainStick.mPosXDelta = 0.0f; mPadInfo.mMainStick.mPosYDelta = 0.0f; mPadInfo.mMainStick.mValueDelta = 0.0f; mPadInfo.mMainStick.mAngle = cSAngle::_0; if (chkFlag(0x800000)) { mPadInfo.mMainStick.mLastPosX = 0.0f; mPadInfo.mMainStick.mLastPosY = 0.0f; mPadInfo.mMainStick.mLastValue = 0.0f; } else { mPadInfo.mCStick.mLastPosX = mDoCPd_c::getSubStickX(mPadID); mPadInfo.mCStick.mLastPosY = mDoCPd_c::getSubStickY(mPadID); mPadInfo.mCStick.mLastValue = mDoCPd_c::getSubStickValue(mPadID); } mPadInfo.mCStick.mPosXDelta = 0.0f; mPadInfo.mCStick.mPosYDelta = 0.0f; mPadInfo.mCStick.mValueDelta = 0.0f; mPadInfo.mCStick.mAngle = cSAngle::_0; field_0x1fc = 0; field_0x1f8 = 0; field_0x1f4 = 0; mTriggerLeftLast = mDoCPd_c::getAnalogL(mPadID); mTriggerLeftDelta = 0.0f; field_0x208 = 0; field_0x209 = 0; field_0x20a = 0; field_0x20b = 0; mTriggerRightLast = mDoCPd_c::getAnalogR(mPadID); mTriggerRightDelta = 0.0f; field_0x214 = 0; field_0x215 = 0; field_0x216 = 0; field_0x217 = 0; mHoldX = mDoCPd_c::getHoldX(mPadID); mTrigX = mDoCPd_c::getTrigX(mPadID); mHoldY = mDoCPd_c::getHoldY(mPadID); mTrigY = mDoCPd_c::getTrigY(mPadID); mHoldY = mDoCPd_c::getHoldY(mPadID); mTrigY = mDoCPd_c::getTrigY(mPadID); mHoldZ = mDoCPd_c::getHoldZ(mPadID); mTrigZ = mDoCPd_c::getTrigZ(mPadID); field_0x21f = 0; mHoldB = mDoCPd_c::getHoldB(mPadID); mTrigB = mDoCPd_c::getTrigB(mPadID); field_0x223 = 0; field_0x224 = 0; } /* 801617B0-80161D84 15C0F0 05D4+00 1/1 0/0 0/0 .text updatePad__9dCamera_cFv */ void dCamera_c::updatePad() { dComIfGp_getAttention(); int var_r30 = mCamParam.Algorythmn(mCamStyle); f32 var_f31; f32 var_f30; f32 var_f29; if (chkFlag(0x1000000)) { var_f31 = 0.0f; var_f30 = 0.0f; var_f29 = 0.0f; } else { var_f31 = mDoCPd_c::getStickX3D(mPadID); var_f30 = mDoCPd_c::getStickY(mPadID); var_f29 = mDoCPd_c::getStickValue(mPadID); } mPadInfo.mMainStick.mPosXDelta = var_f31 - mPadInfo.mMainStick.mLastPosX; mPadInfo.mMainStick.mPosYDelta = var_f30 - mPadInfo.mMainStick.mLastPosY; mPadInfo.mMainStick.mValueDelta = var_f29 - mPadInfo.mMainStick.mLastValue; mPadInfo.mMainStick.mLastPosX = var_f31; mPadInfo.mMainStick.mLastPosY = var_f30; mPadInfo.mMainStick.mLastValue = var_f29; mPadInfo.mMainStick.mAngle.Val(mDoCPd_c::getStickAngle3D(mPadID)); if (chkFlag(0x800000)) { var_f31 = 0.0f; var_f30 = 0.0f; var_f29 = 0.0f; } else { var_f31 = mDoCPd_c::getSubStickX3D(mPadID); var_f30 = mDoCPd_c::getSubStickY(mPadID); var_f29 = mDoCPd_c::getSubStickValue(mPadID); } mPadInfo.mCStick.mPosXDelta = var_f31 - mPadInfo.mCStick.mLastPosX; mPadInfo.mCStick.mPosYDelta = var_f30 - mPadInfo.mCStick.mLastPosY; mPadInfo.mCStick.mValueDelta = var_f29 - mPadInfo.mCStick.mLastValue; mPadInfo.mCStick.mLastPosX = var_f31; mPadInfo.mCStick.mLastPosY = var_f30; mPadInfo.mCStick.mLastValue = var_f29; mPadInfo.mCStick.mAngle.Val(mDoCPd_c::getSubStickAngle(mPadID)); 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; if (mTriggerLeftLast > mCamSetup.ManualEndVal()) { if (field_0x20a == 0) { field_0x20b = 1; } else { field_0x20b = 0; } field_0x20a = 1; } else { field_0x20b = 0; field_0x20a = 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; if (mTriggerRightLast > mCamSetup.ManualEndVal()) { if (field_0x216 == 0) { field_0x217 = 1; } else { field_0x217 = 0; } field_0x216 = 1; } else { field_0x217 = 0; field_0x216 = 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); bool sp6B = true; bool sp6C = true; int sp68; if (mCamTypeData[mCurType].field_0x18[field_0x190][0] > 0) { sp68 = field_0x190; } else { sp68 = 0; } if (mCamTypeData[mCurType].field_0x18[sp68][4] < 0) { sp6B = false; if (field_0x940 == -1) { field_0x940 = 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 (mCurMode == 0 || mCurMode == 4) { if (check_owner_action(mPadID, 0x12000)) { field_0x940 = -1; } else if (field_0x940 == -1) { field_0x940 = 0; } if (mPadInfo.mCStick.mLastPosY < -mCamSetup.mCStick.SwTHH()) { if (field_0x1f4 != -1) { if (field_0x940 == -1 && mCurMode == 4) { field_0x940 = 0; setComStat(0x2000); } else if (field_0x940 == 0 && sp6C) { field_0x940 = 1; } } field_0x1f4 = -1; } else if (mPadInfo.mCStick.mLastPosY > mCamSetup.mCStick.SwTHH()) { if (field_0x1f4 != 1) { if (field_0x940 == 0 && sp6B) { setComStat(0x1000); } else if (field_0x940 == 1) { field_0x940 = 0; } } field_0x1f4 = 1; } else { field_0x1f4 = 0; } if (field_0x1f4 != 0) { field_0x1f8++; } else { field_0x1f8 = 0; } } field_0x223 = 0; field_0x224 = 0; if (mDoCPd_c::getStickValue(mPadID) > 0.001f || mDoCPd_c::getSubStickValue(mPadID) > 0.001f || mDoCPd_c::getHold(mPadID) != 0) { field_0x224 = 1; } } /* 80161D84-80161E34 15C6C4 00B0+00 1/1 0/0 0/0 .text initMonitor__9dCamera_cFv */ void dCamera_c::initMonitor() { if (mpPlayerActor != NULL) { mMonitor.field_0x0 = positionOf(mpPlayerActor); } else { mMonitor.field_0x0 = cXyz::Zero; } field_0x2c0 = 0.0f; mMonitor.field_0x10 = 0.0f; mMonitor.field_0xc = 0.0f; field_0x2c4 = 0; field_0x2c8 = 0.0f; mMonitor.field_0x14 = cXyz::Zero; } /* 80161E34-80162088 15C774 0254+00 1/1 0/0 0/0 .text updateMonitor__9dCamera_cFv */ void dCamera_c::updateMonitor() { if (mpPlayerActor != NULL) { cXyz sp24 = positionOf(mpPlayerActor); mMonitor.field_0x14 = sp24 - mMonitor.field_0x0; if (mBG.field_0xc0.field_0x1) { dComIfG_Bgsp().MoveBgMatrixCrrPos(mBG.field_0x5c.field_0x4, true, &mMonitor.field_0x0, NULL, NULL); } f32 var_f31; if (chkFlag(0x10000)) { var_f31 = cXyz(sp24 - mMonitor.field_0x0).abs(); } else { var_f31 = dCamMath::xyzHorizontalDistance(sp24, mMonitor.field_0x0); } field_0x2c0 = var_f31 - mMonitor.field_0xc; mMonitor.field_0x10 += (var_f31 - mMonitor.field_0x10) * 0.01f; mMonitor.field_0xc = var_f31; mMonitor.field_0x0 = sp24; if (!push_any_key()) { field_0x2c4++; } else { field_0x2c4 = 0; } field_0x2c8 = field_0x28.R() - field_0x2c8; } } /* 80162088-801622B0 15C9C8 0228+00 1/1 0/0 0/0 .text checkForceLockTarget__9dCamera_cFv */ bool dCamera_c::checkForceLockTarget() { bool ret = true; if (mLockOnActorID != -1) { mpLockOnActor = GetForceLockOnActor(); if (mpLockOnActor != NULL) { if (dComIfGp_getAttention().Lockon() || mForceLockTimer > mCamSetup.ForceLockOffTimer() || cXyz(positionOf(mpLockOnActor) - positionOf(mpPlayerActor)).abs() > mCamSetup.ForceLockOffDist()) { ret = false; } } else { ret = false; } } else { ret = false; } return ret; } /* 801622B0-801622B4 15CBF0 0004+00 1/1 0/0 0/0 .text infoReport__9dCamera_cFv */ void dCamera_c::infoReport() { #if DEBUG #endif } namespace { inline bool isPlayerFlying(daAlink_c* link) { bool ret = false; if (link->checkPlayerFly() && !link->checkBootsOrArmorHeavy()) { ret = true; } return ret; } } // namespace /* 801622B4-80162D38 15CBF4 0A84+00 1/1 0/0 0/0 .text Run__9dCamera_cFv */ // NONMATCHING one comparison in wrong order, small regalloc, and a bit of flag check weirdness bool dCamera_c::Run() { daAlink_c* link = daAlink_getAlinkActorClass(); daMidna_c* midna = daPy_py_c::getMidnaActor(); field_0x194 = link->checkMidnaRide() && !midna->checkNoDraw(); bool bVar9 = false; clrComStat(0x804); int iVar8 = field_0x190; field_0x190 = daPy_py_c::i_checkNowWolf() ? 1 : 0; mFocusLine.Off(); clrFlag(0x10168C21); clrFlag(0x10); field_0x18c = 0; field_0x188 = 0; if (dComIfGp_roomControl_getStayNo() != mRoomNo) { onRoomChange(dComIfGp_roomControl_getStayNo()); } checkGroundInfo(); setMapToolData(); if (link->checkRollJump() || link->checkGoronRideWait()) { setFlag(0x10000); setFlag(0x100000); } else { if (mBG.field_0xc0.field_0x44 != 0) { clrFlag(0x10000); } } if (link->checkGrabThrow() || link->checkIronBallThrowMode()) { mThrowTimer = mCamSetup.ThrowTimer(); } else { if (mThrowTimer != 0) { mThrowTimer--; } } updateMonitor(); Att(); clrComStat(0xf400); if (!dComIfGp_evmng_cameraPlay() && !chkFlag(0x20000000)) { updatePad(); mCamSetup.mCStick.Shift(mPadID); } if (dComIfGp_getEvent().runCheck()) { mPadInfo.mMainStick.mLastValue = 0.0f; mPadInfo.mMainStick.mLastPosY = 0.0f; mPadInfo.mMainStick.mLastPosX = 0.0f; mPadInfo.mCStick.mLastValue = 0.0f; mPadInfo.mCStick.mLastPosY = 0.0f; mPadInfo.mCStick.mLastPosX = 0.0f; } if (!checkForceLockTarget()) { mLockOnActorID = -1; } else { mForceLockTimer++; } mNextType = nextType(mCurType); if (mNextType != mCurType && onTypeChange(mCurType, mNextType)) { mCurType = mNextType; } clrComStat(0x40000); if (mCurType == specialType[41]) { setComStat(0x40000); } mNextMode = nextMode(mCurMode); if ((iVar8 != field_0x190 || mNextMode != mCurMode) && mCamTypeData[mCurType].field_0x18[field_0x190][mNextMode] >= 0 && onModeChange(mCurMode, mNextMode)) { mCurMode = mNextMode; mCurCamTypeTimer = 0; } if (!ChangeModeOK(mCurMode)) { mCurMode = 0; } int style = mCamTypeData[mCurType].field_0x18[field_0x190][mCurMode]; if (style >= 0 && mCamStyle != style && onStyleChange(mCamStyle, style)) { mCamStyle = style; mCamParam.Change(mCamStyle); setFlag(0x200); } clrFlag(0); clrComStat(0x80); if (field_0x940 == -1) { setComStat(0x80); } if (getComStat(0x2000)) { setComStat(0x80); } if (mCamParam.CheckFlag(0x4000) && !check_owner_action(mPadID, 0x4000000) && !link->checkMagneBootsOn() && !isPlayerFlying(link)) { field_0x1b0 += (forwardCheckAngle() - field_0x1b0) * mCamSetup.mBGChk.FwdCushion(); } else { field_0x1b0 = cSAngle::_0; } field_0x88 = 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) { clrFlag(0x200000); } } else { bVar9 = (this->*engine_tbl[mCamParam.Algorythmn(mCamStyle)])(mCamStyle); field_0x170++; field_0x160++; mCurCamTypeTimer++; } field_0xa8++; field_0xac++; if (!bVar9) { field_0x680 = 0; } defaultTriming(); if (!chkFlag(0x400)) { field_0x5c.field_0x20 -= field_0x5c.field_0x20 * 0.05f; } shakeCamera(); blureCamera(); if (mCamParam.Algorythmn() != 10) { clrFlag(0x80080); if (mCamParam.CheckFlag(1)) { if (mCurMode == 1 && mCamParam.CheckFlag(2)) { field_0x88 = 0x4007; } else if (chkFlag(0x20000)) { field_0x88 = 0x4037; } else { field_0x88 = 0x4017; } } else if (mCamParam.CheckFlag(2)) { field_0x88 = 0x4007; } if (mCamParam.CheckFlag(8)) { field_0x88 |= 0x80; } if (mCamParam.CheckFlag(0x10)) { field_0x88 &= ~0x4000; } field_0x88 &= ~8; if (mCamParam.CheckFlag(4)) { field_0x88 = 0; } } mFovY = field_0x80; mBank = field_0x5c.field_0x20; bumpCheck(field_0x88); cSAngle angle = mPadInfo.mMainStick.mAngle - mFakeAngleSys.field_0x4; if (mPadInfo.mMainStick.mLastValue < mCamSetup.USOValue() || angle > cSAngle(mCamSetup.USOAngle()) || angle < cSAngle(-mCamSetup.USOAngle())) { mFakeAngleSys.field_0x0 = 0; } if (mFakeAngleSys.field_0x0 != 0) { field_0x8c = getUSOAngle(mPadInfo.mMainStick.mAngle); } else { field_0x8c = field_0x28.U().Inv(); } if (mCamSetup.CheckFlag(0x8000)) { infoReport(); } if (chkFlag(0x10)) { mUp = field_0x740.field_0x18.norm(); } else if (dComIfGp_getStageWorldRollAngleX() != 0) { cSPolar polar; polar.R(1.0f); polar.V((s16)-dComIfGp_getStageWorldRollAngleX()); polar.U(dComIfGp_getStageWorldRollDirAngleY()); mUp = polar.Xyz(); } else if (mCenter.x == mEye.x && mCenter.z == mEye.z) { mUp.set(0.01f, 1.0f, 0.0f); } else { mUp.set(0.0f, 1.0f, 0.0f); } if (!chkFlag(0x10)) { field_0x740.field_0x18.set(0.0f, 1.0f, 0.0f); } if (field_0x94c != cSAngle::_0) { mBank = field_0x94c; } field_0x94c = cSAngle::_0; f32 water_height = getWaterSurfaceHeight(&mEye); if (water_height > mEye.y) { dKy_camera_water_in_status_set(1); Z2GetAudioMgr()->setCameraInWaterDepth(water_height - mEye.y); } else { dKy_camera_water_in_status_set(0); Z2GetAudioMgr()->setCameraInWaterDepth(0.0f); } if (field_0x158.field_0x0) { setComStat(0x10); } else { clrComStat(0x10); } // fakematch: field_0x28.mRadius should be field_0x28.R() if (field_0x28.mRadius < mCamSetup.PlayerHideDist()) { if (chkFlag(0x800) & 1) { setComStat(2); } else if (chkFlag(0x10000000)) { setComStat(0x20); } } runEventRecoveryTrans(); clrFlag(0x1000); field_0x860.Clr(); field_0x89c.Clr(); return bVar9; } /* 80162D38-80162FB8 15D678 0280+00 1/1 0/0 0/0 .text NotRun__9dCamera_cFv */ bool dCamera_c::NotRun() { daAlink_c* link = daAlink_getAlinkActorClass(); daMidna_c* midna = daPy_py_c::getMidnaActor(); field_0x194 = link->checkMidnaRide() && !midna->checkNoDraw(); clrComStat(0x804); clrFlag(0x10168C21); checkGroundInfo(); clrComStat(0x80); if (dComIfGp_evmng_cameraPlay() || chkFlag(0x20000000)) { if (mCurType != specialType[1]) { pushInfo(&field_0xb0, 1); mEventData.field_0xc = mCurType; mCurType = specialType[1]; mCamStyle = mCamParam.SearchStyle('EN01'); field_0x170 = 0; field_0x160 = 0; mCurCamTypeTimer = 0; } eventCamera(mCamTypeData[mCurType].field_0x18[field_0x190][3]); field_0x170++; field_0x160++; mCurCamTypeTimer++; } setComStat(0x14); clrFlag(0x80080); mFocusLine.Off(); shakeCamera(); blureCamera(); field_0x21 = 0; if (field_0x94c != cSAngle::_0) { mBank = field_0x94c; } field_0x94c = cSAngle::_0; f32 water_height = getWaterSurfaceHeight(&mEye); if (water_height > mEye.y) { dKy_camera_water_in_status_set(1); Z2GetAudioMgr()->setCameraInWaterDepth(water_height - mEye.y); } else { dKy_camera_water_in_status_set(0); Z2GetAudioMgr()->setCameraInWaterDepth(0.0f); } field_0xa8++; field_0xac++; field_0x860.Clr(); field_0x89c.Clr(); return true; } /* 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(); } else { return field_0x28.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(); } else { return field_0x28.U().Inv(); } } /* 8016300C-80163028 15D94C 001C+00 1/1 1/1 135/135 .text SetTrimSize__9dCamera_cFl */ bool dCamera_c::SetTrimSize(s32 size) { bool rt = mTrimSize != size; mTrimSize = size; return rt; } /* 80163028-80163034 15D968 000C+00 1/1 2/2 4/4 .text SetTrimTypeForce__9dCamera_cFl */ bool dCamera_c::SetTrimTypeForce(s32 param_0) { mTrimTypeForce = param_0; return 1; } /* 80163034-80163154 15D974 0120+00 1/1 0/0 0/0 .text CalcTrimSize__9dCamera_cFv */ void dCamera_c::CalcTrimSize() { if (field_0x24 != 2) { switch (mTrimSize) { case 0: mTrimHeight += -mTrimHeight * 0.25f; break; case 2: mTrimHeight += (mCamSetup.CinemaScopeTrimHeight() - mTrimHeight) * 0.25f; break; case 1: mTrimHeight += (mCamSetup.VistaTrimHeight() - mTrimHeight) * 0.25f; break; case 3: mTrimHeight += (mCamSetup.CinemaScopeTrimHeight() - mTrimHeight) * 0.25f; break; case 4: mTrimHeight = 0.0f; break; } } else { OS_REPORT("%06d: camera: trim: keep\n", field_0xa8); } if (field_0x24 == 1) { field_0x24 = 0; } else if (field_0x24 == 2) { if (dComIfGp_getEvent().isOrderOK()) { field_0x24 = 0; } } field_0x1ac = 11; } /* 80163154-8016317C 15DA94 0028+00 1/1 0/0 0/0 .text Draw__9dCamera_cFv */ int dCamera_c::Draw() { #if DEBUG debugDraw(); #endif mFocusLine.Draw(); return 1; } /* 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; stage_camera_class* camera; stage_arrow_class* arrow; field_0x7e8.Clr(); dStage_stageDt_c* stage_dt = dComIfGp_getStage(); if (stage_dt != NULL) { camera = stage_dt->getCamera(); arrow = stage_dt->getArrow(); stage_stag_info_class* staginfo = stage_dt->getStagInfo(); if (staginfo != NULL) { var_r28 = dStage_stagInfo_DefaultCameraType(staginfo); } if (camera != NULL && var_r28 >= 0 && var_r28 < camera->field_0x0) { field_0x7e8.field_0x30 = var_r28; field_0x7e8.field_0x0 = camera->mEntries[var_r28]; field_0x7e8.field_0x3a = (field_0x7e8.field_0x0.field_0x14 >> 0xE) & 3; if (field_0x7e8.field_0x0.field_0x14 & 0x2000) { field_0x7e8.field_0x0.field_0x14 |= 0xC000; } else { field_0x7e8.field_0x0.field_0x14 &= ~0xC000; } int var_r27 = field_0x7e8.field_0x0.field_0x10; if (arrow != NULL && var_r27 >= 0 && var_r27 < arrow->mNum) { field_0x7e8.field_0x2c = var_r27; field_0x7e8.field_0x18 = arrow->mEntries[var_r27]; } } } } /* 80163340-80163558 15DC80 0218+00 2/2 0/0 0/0 .text setMapToolData__9dCamera_cFv */ void dCamera_c::setMapToolData() { int room_no = dComIfGp_roomControl_getStayNo(); stage_camera_class* camera = dComIfGp_getRoomCamera(room_no); stage_arrow_class* arrow = dComIfGp_getRoomArrow(room_no); int var_r29 = 0xFF; int var_r26 = 0xFF; if (mBG.field_0xc0.field_0x40 == 0x1FF && field_0x7ac.field_0x34 == NULL) { return; } if (mBG.field_0xc0.field_0x40 != 0xFF) { field_0x7ac.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; return; } else if (field_0x7e8.field_0x30 != 0xFF) { field_0x7ac = field_0x7e8; return; } else { field_0x7ac.Clr(); } setRoomMapToolData(&field_0x7ac, var_r29, room_no); } /* 80163558-801635AC 15DE98 0054+00 0/0 0/0 1/1 .text SetTagData__9dCamera_cFP10fopAc_ac_clUsUc */ void dCamera_c::SetTagData(fopAc_ac_c* param_0, s32 param_1, u16 param_2, u8 param_3) { s32 room_no; if (param_0 != NULL) { room_no = fopAcM_GetRoomNo(param_0); } else { room_no = dComIfGp_roomControl_getStayNo(); } field_0x860.Set(param_1, room_no, param_0, param_2, param_3); } /* 801635AC-801635E4 15DEEC 0038+00 2/2 0/0 0/0 .text * setRoomMapToolData__9dCamera_cFP15dCamMapToolDatall */ void dCamera_c::setRoomMapToolData(dCamMapToolData* i_toolData, s32 param_1, s32 i_roomNo) { i_toolData->Set(param_1, i_roomNo, NULL, 0xFF, 0xFF); } /* 801635E4-80163C38 15DF24 0654+00 1/1 0/0 0/0 .text nextMode__9dCamera_cFl */ s32 dCamera_c::nextMode(s32 i_curMode) { dAttention_c& attn = dComIfGp_getAttention(); s32 next_mode = i_curMode; cXyz player_pos = positionOf(mpPlayerActor); daAlink_c* link = daAlink_getAlinkActorClass(); if (!dComIfGp_evmng_cameraPlay()) { if (mBG.field_0x0.field_0x58 > player_pos.y) { field_0x223 = 0; } if (!link->checkFastShotTime()) { field_0x610 = 0; } if (field_0x1ac != 11 && mCamTypeData[mCurType].field_0x18[field_0x190][field_0x1ac] >= 0) { next_mode = field_0x1ac; } else if (check_owner_action(mPadID, 0x200000) && !attn.Lockon()) { if (check_owner_action(mPadID, 0x25040)) { next_mode = 7; } else { next_mode = 0; } } else if (link->checkGoatThrow() && dComIfGoat_GetThrow() != NULL) { dComIfGp_getAttention().LockSoundOff(); mpLockonTarget = dComIfGoat_GetThrow(); if (fopAcM_GetName(mpLockonTarget) == PROC_E_GOB) { if (link->checkGoatThrowAfter()) { next_mode = 2; } else { next_mode = 1; } } else if (fopAcM_GetName(mpLockonTarget) == PROC_OBJ_GRA) { next_mode = 1; } else { next_mode = 2; } } else if (link->checkGoronSideMove() || link->getSumouCameraMode()) { dComIfGp_getAttention().LockSoundOff(); next_mode = 1; } else if (link->checkFastShotTime()) { field_0x610 = 1; } else if (check_owner_action1(mPadID, 0x10)) { next_mode = 9; } else if ((check_owner_action1(mPadID, 0x400000) || check_owner_action1(mPadID, 0x200000)) && mpLockonTarget != NULL) { next_mode = 6; } else if (link->checkCutHeadProc()) { next_mode = 6; } else if (check_owner_action(mPadID, 6) && mpLockonTarget != NULL) { next_mode = 5; } else if (attn.LockonTruth() && mpLockonTarget != NULL && !check_owner_action(mPadID, 0xC000000)) { next_mode = 2; } else if (check_owner_action(mPadID, 0x12000)) { next_mode = 4; } else if (check_owner_action(mPadID, 0x25040) && !attn.Lockon()) { next_mode = 7; } else if ((check_owner_action(mPadID, 0x80480) && !attn.Lockon()) || link->checkHawkWait()) { next_mode = 8; } else if (check_owner_action(mPadID, 0x4000000) || link->checkChainBlockPushPull()) { next_mode = 10; } else if (attn.Lockon()) { next_mode = 1; } else if ((check_owner_action(mPadID, 0x400000) || link->checkIronBallThrowMode() || link->checkBoomerangAtnKeep()) && !check_owner_action(mPadID, 0x36A02311) && field_0x610 == 0 && !check_owner_action1(mPadID, 0x11)) { mpLockonTarget = get_boomerang_actor(mpPlayerActor); next_mode = 2; mLockOnActorID = -1; field_0x610 = 1; } else if ((link->checkCopyRodThrowAfter() || link->checkCopyRodAtnKeep()) && link->getCopyRodCameraActor() == NULL) { mpLockonTarget = link->getCopyRodActor(); next_mode = 2; mLockOnActorID = -1; field_0x610 = 1; } else if (link->checkSpinnerRideWait()) { next_mode = 1; } else if (mLockOnActorID != -1) { if (mpLockOnActor != NULL) { next_mode = 2; mpLockonTarget = mpLockOnActor; } else { next_mode = 0; mLockOnActorID = -1; } } else { next_mode = 0; } } if (mCamTypeData[mCurType].field_0x18[field_0x190][next_mode] >= 0) { if (next_mode != 2) { mLockOnActorID = -1; } if (next_mode == 1) { setFlag(0x100000); } else if (next_mode == 10) { setFlag(0x100000); } } else { next_mode = i_curMode; } switch (next_mode) { case 4: dComIfGp_getAttention().LockSoundOff(); break; } return next_mode; } /* 80163C38-80163D50 15E578 0118+00 2/1 0/0 0/0 .text onModeChange__9dCamera_cFll */ bool dCamera_c::onModeChange(s32 i_curMode, s32 i_nextMode) { field_0x160 = 0; field_0x164 = 0; field_0x168 = 1; field_0x1b4 = 0.0f; clrFlag(0x2306); switch (i_curMode) { case 3: clrComStat(4); break; case 4: case 7: case 8: if (i_nextMode == 0) { setFlag(0x40000); } break; } switch (i_nextMode) { case 7: field_0x940 = 0; break; case 1: setFlag(0x100000); // fallthrough case 0: if (mCamTypeData[mCurType].field_0x18[field_0x190][i_curMode] == mCamTypeData[mCurType].field_0x18[field_0x190][i_nextMode]) { field_0x168 = 0; } // fallthrough case 2: if (mCamSetup.CheckFlag(0x4000)) { field_0x940 = 0; } break; case 10: break; } return true; } /* 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; 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) { s32 iVar14 = 0xff; if (field_0x860.field_0x30 != 0xff) { s32 type = GetCameraTypeFromToolData(&field_0x860.field_0x0); if (type != 0xff) { iVar14 = type; } } daAlink_c* link = daAlink_getAlinkActorClass(); bool bVar2 = false; bool bVar1 = false; if (link->checkMagneBootsOn()) { cXyz* top_vec = link->getMagneBootsTopVec(); if (cBgW_CheckBRoof(top_vec->y)) { bVar2 = true; } else if (cBgW_CheckBWall(top_vec->y)) { bVar1 = true; } } bool copy_rod = false; if (link->getCopyRodCameraActor() != NULL) { copy_rod = true; } if (check_owner_action(mPadID, 0x200000) && ChangeModeOK(4) && !dComIfGp_getAttention().Lockon()) { next_type = specialType[3]; } else if (iVar14 != 0xff && !(field_0x860.field_0x3a & 0x10)) { next_type = iVar14; field_0x7ac = field_0x860; } else if (link->checkMidnaLockJumpPoint() && (daPy_py_c::getMidnaActor()->checkFlyWaitAnime() || daPy_py_c::getMidnaActor()->checkNoInput())) { next_type = specialType[35]; } else if (daPy_py_c::getMidnaActor()->checkPortalObjCall()) { next_type = specialType[36]; } else if (link->checkGoatStopGame()) { next_type = specialType[30]; } else if (chkFlag(0x10000)) { next_type = specialType[29]; } else if (link->checkHorseRide()) { next_type = specialType[5]; } else if (bVar1) { next_type = specialType[11]; } else if (bVar2) { next_type = specialType[12]; } else if (copy_rod) { next_type = specialType[34]; } else if (link->checkBoarRide()) { next_type = specialType[31]; } else if (link->checkCanoeRide()) { next_type = specialType[4]; } else if (link->checkBoardRide()) { next_type = specialType[6]; } else if (link->checkSpinnerRide()) { next_type = specialType[28]; } else if (check_owner_action1(mPadID, 0x2000000)) { next_type = specialType[25]; } else if (check_owner_action1(mPadID, 0x10000)) { if (link->getHookshotRoofWaitActor() != NULL) { next_type = specialType[27]; } else { next_type = specialType[26]; } } else if (check_owner_action1(mPadID, 0x100000)) { next_type = specialType[33]; } else if (link->checkCokkoGlide()) { next_type = specialType[32]; } else if (check_owner_action(mPadID, 0x100000)) { if (getComStat(0x800)) { next_type = specialType[13]; } else if (mBG.field_0xc0.field_0x3c != 0xff) { // fakematch: should be dComIfGp_roomControl_getStayNo() setRoomMapToolData(&field_0x7ac, mBG.field_0xc0.field_0x3c, dStage_roomControl_c::mStayNo); s32 type = GetCameraTypeFromToolData(&field_0x7ac.field_0x0); if (type != 0xff) { next_type = type; } else { next_type = specialType[2]; } } else { next_type = specialType[2]; } } 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); if (type != 0xff) { next_type = type; } } else if (field_0x7ac.field_0x30 != 0x1ff) { next_type = mMapToolType; } } field_0x698 = 0xff; field_0x69c = 0; if (mCamTypeData[mCurType].field_0x18[field_0x190][0] < 0) { next_type = mMapToolType; if (field_0x7ac.field_0x30 != 0xff) { s32 type = GetCameraTypeFromToolData(&field_0x7ac.field_0x0); if (type != 0xff) { next_type = type; } } } if (!ChangeModeOK(2)) { dComIfGp_getAttention().LockSoundOff(); } if (dComIfGp_evmng_cameraPlay() || chkFlag(0x20000000)) { if (i_curType != specialType[1]) { mEventData.field_0xc = next_type; } next_type = specialType[1]; dComIfGp_getAttention().LockSoundOff(); } else { clrFlag(0x40000000); if (dComIfGp_getEvent().runCheck()) { setComStat(4); dComIfGp_getAttention().LockSoundOff(); } } return next_type; } /* 8016444C-8016469C 15ED8C 0250+00 1/1 0/0 0/0 .text onTypeChange__9dCamera_cFll */ bool dCamera_c::onTypeChange(s32 i_curType, s32 i_nextType) { if (i_curType == specialType[1]) { if (mCamSetup.CheckFlag(0x4000)) { field_0x940 = 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.field_0x8 -= vec; field_0x5c.field_0x14 -= vec; } field_0x110.field_0x4 = 0; field_0x668 = 0; clearInfo(&field_0xb0, 0); clearInfo(&field_0xd0[0], 0); clearInfo(&field_0xd0[1], 0); if (chkFlag(0x400000)) { mCamStyle = mCamTypeData[mEventData.field_0xc].field_0x18[field_0x190][0]; mCamParam.Change(mCamStyle); setFlag(0x200); clrFlag(0x400000); } mEventData.field_0x14 = -1; mEventData.field_0x18 = -1; mEventData.field_0x4 = -1; mEventData.field_0xc = -1; mEventData.field_0x0 = 1; setFlag(0x20); if (chkFlag(0x40000000)) { cM3dGLin line(field_0x5c.field_0x8, field_0x5c.field_0x14); cXyz attn_pos = attentionPos(mpPlayerActor); cXyz proj; f32 dist; if (cM3d_Len3dSqPntAndSegLine(&line, &attn_pos, &proj, &dist)) { field_0x5c.field_0x8 = proj; field_0x5c.field_0x0.Val(field_0x5c.field_0x14 - field_0x5c.field_0x8); } clrFlag(0x40000000); } } else if (i_nextType == specialType[1]) { clrFlag(0x200000); pushInfo(&field_0xb0, 1); field_0x1b4 = 0.0f; field_0x668 = 0; } field_0x170 = 0; field_0x16c = 0; return true; } /* 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) { mCurCamTypeTimer = 0; field_0x158.field_0x0 = 0; bool var_r30 = false; switch (mCamParam.Algorythmn(param_0)) { case 5: case 6: if (mFakeAngleSys.field_0x0 == 0) { setUSOAngle(); } var_r30 = true; break; case 4: clrComStat(8); setComZoomScale(1.0f); break; } switch (mCamParam.Algorythmn(param_1)) { case 0: case 3: default: break; case 8: if (mCamParam.Algorythmn(param_0) == mCamParam.Algorythmn(param_1) && mCurMode == 0) { setFlag(0x8000); } break; case 1: mCamParam.Algorythmn(param_1); mCamParam.Algorythmn(param_0); break; case 5: case 6: if (mFakeAngleSys.field_0x0 == 0 || var_r30) { setUSOAngle(); } break; } return true; } /* 801647B0-80164878 15F0F0 00C8+00 1/1 0/0 0/0 .text onRoomChange__9dCamera_cFl */ int dCamera_c::onRoomChange(s32 i_roomNo) { mRoomNo = i_roomNo; setFlag(0x1000); int var_r29 = 0xFF; dStage_roomDt_c* room_dt = dComIfGp_roomControl_getStatusRoomDt(i_roomNo); if (room_dt != NULL) { dStage_FileList_dt_c* filelist = room_dt->getFileListInfo(); if (filelist != NULL) { var_r29 = dStage_FileList_dt_GetDefaultCamera(filelist); } } if (var_r29 != 0xFF) { setRoomMapToolData(&field_0x824, var_r29, i_roomNo); } else { field_0x824.Clr(); } return 1; } /* 80164878-80164944 15F1B8 00CC+00 4/4 0/0 0/0 .text getParamTargetActor__9dCamera_cFl */ fopAc_ac_c* dCamera_c::getParamTargetActor(s32 param_0) { daAlink_c* player = daAlink_getAlinkActorClass(); switch (*(u32*)&mCamTypeData[param_0].name[16]) { case '@LOC': return dComIfGp_getAttention().LockonTarget(0); case '@ACT': return dComIfGp_getAttention().ActionTarget(0); case '@CHK': return dComIfGp_getAttention().CheckObjectTarget(0); case '@CPY': return player->getCopyRodCameraActor(); } return fopAcM_searchFromName4Event(&mCamTypeData[param_0].name[16], -1); } /* 80164944-80164B64 15F284 0220+00 0/0 1/1 0/0 .text GetCameraTypeFromMapToolID__9dCamera_cFll */ int dCamera_c::GetCameraTypeFromMapToolID(s32 param_0, s32 i_roomNo) { dStage_stageDt_c& stage_dt = g_dComIfG_gameInfo.play.getStage(); int i; stage_camera_class* camera; stage_arrow_class* arrow; if (i_roomNo == -1) { camera = stage_dt.getCamera(); arrow = stage_dt.getArrow(); } else { camera = dComIfGp_getRoomCamera(i_roomNo); arrow = dComIfGp_getRoomArrow(i_roomNo); if (camera == NULL) { if (!(field_0xa8 & 0xFFF)) { OS_REPORT("camera: no room camera list. camera ID ignored\n"); } return 0xFF; } } if (param_0 < 0 || camera == NULL || (camera != NULL && param_0 >= camera->field_0x0)) { int sp28; if (camera != NULL) { sp28 = camera->field_0x0; } else { sp28 = -99; } OS_REPORT("camera: bad number %d for map data ID [%x:%d] room %d\n", param_0, camera, sp28, i_roomNo); return 0xFF; } i = 0; while (i < mCamTypeNum) { if (strcmp((char*)&camera->mEntries[param_0].field_0x0.field_0x0, mCamTypeData[i].name) == 0) { break; } i++; } if (i == mCamTypeNum) { OS_REPORT("camera: type \'%s\' not found\n", camera->mEntries[param_0].field_0x0.field_0x0); return 0xFF; } field_0x7ac.field_0x0 = camera->mEntries[param_0]; field_0x7ac.field_0x30 = param_0; field_0x7ac.field_0x3a = (field_0x7ac.field_0x0.field_0x14 >> 0xE) & 3; if (field_0x7ac.field_0x0.field_0x14 & 0x2000) { field_0x7ac.field_0x0.field_0x14 |= 0xC000; } else { field_0x7ac.field_0x0.field_0x14 &= ~0xC000; } field_0x7ac.field_0x2c = field_0x7ac.field_0x0.field_0x10; if (field_0x7ac.field_0x2c != -1 && field_0x7ac.field_0x2c < arrow->mNum) { field_0x7ac.field_0x18 = arrow->mEntries[field_0x7ac.field_0x2c]; } else { field_0x7ac.field_0x2c = 0xFF; } return i; } /* 80164B64-80164C10 15F4A4 00AC+00 2/2 1/1 0/0 .text GetCameraTypeFromCameraName__9dCamera_cFPCc */ int dCamera_c::GetCameraTypeFromCameraName(char const* i_name) { if (strcmp(i_name, mCamTypeData[mCurType].name) == 0) { return mCurType; } int i = 0; while (i < mCamTypeNum) { if (strcmp(i_name, mCamTypeData[i].name) == 0) { break; } i++; } if (i == mCamTypeNum) { OS_REPORT("camera: type \'%s\' not found\n", i_name); return 0xFF; } return i; } /* 80164C10-80164C64 15F550 0054+00 2/2 0/0 0/0 .text * GetCameraTypeFromToolData__9dCamera_cFP24stage_camera2_data_class */ int dCamera_c::GetCameraTypeFromToolData(stage_camera2_data_class* i_data) { if (i_data->field_0x16 != 0xFFFF) { return i_data->field_0x16; } int type = GetCameraTypeFromCameraName((char*)&i_data->field_0x0.field_0x0); if (type < 0xFFFF) { i_data->field_0x16 = type; } return type; } /* 80164C64-80164CAC 15F5A4 0048+00 4/4 2/2 0/0 .text * pushInfo__9dCamera_cFPQ29dCamera_c10dCamInfo_cs */ void dCamera_c::pushInfo(dCamera_c::dCamInfo_c* i_info, s16 param_1) { i_info->mCenter = mCenter; i_info->mEye = mEye; i_info->mFovy = mFovY; i_info->mBank = mBank; i_info->field_0x1e = 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.field_0x8 = i_info->mCenter; mEye = field_0x5c.field_0x14 = i_info->mEye; mFovY = field_0x80 = i_info->mFovy; field_0x5c.field_0x20 = i_info->mBank; mBank = field_0x5c.field_0x20; } /* 80164D2C-80164D6C 15F66C 0040+00 4/4 0/0 0/0 .text heightOf__9dCamera_cFP10fopAc_ac_c */ f32 dCamera_c::heightOf(fopAc_ac_c* i_actor) { if (is_player(i_actor)) { return ((daPy_py_c*)i_actor)->getHeight(); } else { return (i_actor->eyePos.y - i_actor->current.pos.y) * 1.1f; } } /* 80164D6C-80164E20 15F6AC 00B4+00 9/9 15/15 0/0 .text * relationalPos__9dCamera_cFP10fopAc_ac_cP4cXyz */ cXyz dCamera_c::relationalPos(fopAc_ac_c* i_actor, cXyz* i_offset) { if (i_actor == NULL) { return cXyz::Zero; } cXyz offset = dCamMath::xyzRotateY(*i_offset, cSAngle(i_actor->shape_angle.y)); return attentionPos(i_actor) + offset; } /* 80164E20-80165104 15F760 02E4+00 0/0 1/1 0/0 .text * relationalPos__9dCamera_cFP10fopAc_ac_cP10fopAc_ac_cP4cXyzf */ cXyz dCamera_c::relationalPos(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, cXyz* i_offset, f32 param_3) { if (i_actor1 == NULL) { return cXyz::Zero; } if (i_actor2 == NULL) { return relationalPos(i_actor1, i_offset); } cXyz pos1 = attentionPos(i_actor1); cXyz pos2 = attentionPos(i_actor2); cXyz delta = pos2 - pos1; cSGlobe delta_globe(delta); delta.normalize(); pos1 -= delta * i_actor1->attention_info.field_0xa; pos2 += delta * i_actor2->attention_info.field_0xa; cXyz mid = pos1 + (pos2 - pos1) * 0.5f; cXyz offset = *i_offset; cSAngle angle = field_0x5c.field_0x0.U() - delta_globe.U(); if (angle < cSAngle::_0) { offset.x = -offset.x; } cSGlobe offset_globe(offset); offset_globe.U(delta_globe.U() + offset_globe.U()); delta_globe.R(0.5f * delta_globe.R() * angle.Cos() * param_3); cXyz ret = mid + delta_globe.Xyz() + offset_globe.Xyz(); return ret; } /* 80165104-80165158 15FA44 0054+00 7/7 0/0 0/0 .text setUSOAngle__9dCamera_cFv */ void dCamera_c::setUSOAngle() { mFakeAngleSys.field_0x0 = 1; mFakeAngleSys.field_0x2 = field_0x28.U().Inv(); mFakeAngleSys.field_0x4 = mPadInfo.mMainStick.mAngle; } /* 80165158-8016517C 15FA98 0024+00 1/1 0/0 0/0 .text getUSOAngle__9dCamera_cF7cSAngle */ cSAngle dCamera_c::getUSOAngle(cSAngle param_0) { return mFakeAngleSys.field_0x2; } /* 8016517C-80165238 15FABC 00BC+00 1/1 2/2 0/0 .text pointInSight__9dCamera_cFP4cXyz */ bool dCamera_c::pointInSight(cXyz* i_point) { cXyz proj; dDlst_window_c* window = get_window(field_0x0); scissor_class* scissor = window->getScissor(); f32 scissor_width = scissor->width; f32 scissor_height = scissor->height; mDoLib_project(i_point, &proj); return (proj.x > 0.0f && proj.x < scissor_width) && (proj.y > 0.0f && proj.y < scissor_height); } /* 80165238-801657EC 15FB78 05B4+00 3/3 0/0 0/0 .text * radiusActorInSight__9dCamera_cFP10fopAc_ac_cP10fopAc_ac_cP4cXyzP4cXyzfsf */ f32 dCamera_c::radiusActorInSight(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, cXyz* i_center, cXyz* i_eye, f32 param_4, s16 i_bank, f32 param_6) { dDlst_window_c* window = get_window(field_0x0); scissor_class* scissor = window->getScissor(); f32 dVar3 = cAngle::d2r(param_4) * 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; 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); pos2.y += (positionOf(i_actor2).y - attentionPos(i_actor2).y) * 0.5f; cXyz delta = pos1 - pos2; f32 dist = delta.abs(); f32 local_128 = 1.0f - (dist - 0.1f - 200.0f); if (local_128 < 0.2f) { local_128 = 0.2f; } if (local_128 > 1.0f) { local_128 = 1.0f; } dist *= param_6 * local_128; delta.normalize(); pos1 += delta * (i_actor1->attention_info.field_0xa + dist); pos2 -= delta * (i_actor2->attention_info.field_0xa + dist); Mtx look_mtx; mDoMtx_lookAt(look_mtx, i_eye, i_center, &mUp, i_bank); MTXMultVec(look_mtx, &pos1, &pos1); MTXMultVec(look_mtx, &pos2, &pos2); int bVar2 = 0; f32 fVar5 = fabsf(cM_atan2f(pos1.x, -pos1.z)); f32 fVar6 = fabsf(cM_atan2f(pos1.y, -pos1.z)); if (fVar5 > fVar7) { bVar2 |= 1; } if (fVar6 > fVar8) { bVar2 |= 2; } fVar5 = fabsf(cM_atan2f(pos2.x, -pos2.z)); fVar6 = fabsf(cM_atan2f(pos2.y, -pos2.z)); if (fVar5 > fVar7) { bVar2 |= 4; } if (fVar6 > fVar8) { bVar2 |= 8; } if (bVar2 == 0) { return 0.0f; } f32 ret = 0.0f; f32 local_12c = 1.0f; f32 local_130 = 1.0f; if (bVar2 & 5) { local_12c = i_tanf(fVar7); } if (bVar2 & 0xA) { local_130 = i_tanf(fVar8); } if (bVar2 & 1) { f32 dVar4 = pos1.z + fabsf(pos1.x) / local_12c; if (dVar4 > ret) { ret = dVar4; } } if (bVar2 & 2) { f32 dVar4 = pos1.z + fabsf(pos1.y) / local_130; if (dVar4 > ret) { ret = dVar4; } } if (bVar2 & 4) { f32 dVar4 = pos2.z + fabsf(pos2.x) / local_12c; if (dVar4 > ret) { ret = dVar4; } } if (bVar2 & 8) { f32 dVar4 = pos2.z + fabsf(pos2.y) / local_130; if (dVar4 > ret) { ret = dVar4; } } return ret; } /* 801657EC-801658C0 16012C 00D4+00 3/3 0/0 0/0 .text groundHeight__9dCamera_cFP4cXyz */ f32 dCamera_c::groundHeight(cXyz* param_0) { dBgS_GndChk gndchk; gndchk.SetPos(param_0); f32 gnd_y = dComIfG_Bgsp().GroundCross(&gndchk); dBgS_CamGndChk_Wtr gndchk_wtr; gndchk_wtr.SetPos(param_0); f32 wtr_y = dComIfG_Bgsp().GroundCross(&gndchk_wtr); f32 height; if (gnd_y >= wtr_y) { height = gnd_y; } else { height = wtr_y; } f32 height_correct; if (height == -1000000000.0f) { height_correct = param_0->y; } else { height_correct = height; } return height_correct; } /* 801658C0-801659F4 160200 0134+00 12/12 0/0 0/0 .text * lineBGCheck__9dCamera_cFP4cXyzP4cXyzP11dBgS_LinChkUl */ bool dCamera_c::lineBGCheck(cXyz* i_start, cXyz* i_end, dBgS_LinChk* i_linChk, u32 i_flags) { if (i_flags & 0x8000) { i_linChk->ClrCam(); i_linChk->SetObj(); } else { i_linChk->ClrObj(); i_linChk->SetCam(); } i_linChk->Set(i_start, i_end, NULL); if (i_flags & 4) { i_linChk->ClrSttsRoofOff(); } else { i_linChk->SetSttsRoofOff(); } if (i_flags & 2) { i_linChk->ClrSttsWallOff(); } else { i_linChk->SetSttsWallOff(); } if (i_flags & 1) { i_linChk->ClrSttsGroundOff(); } else { i_linChk->SetSttsGroundOff(); } if (i_flags & 8) { i_linChk->OnWaterGrp(); } else { i_linChk->OffWaterGrp(); } if (dComIfG_Bgsp().LineCross(i_linChk)) { return true; } else { return false; } } /* 801659F4-80165AF0 160334 00FC+00 4/4 4/4 0/0 .text lineBGCheck__9dCamera_cFP4cXyzP4cXyzP4cXyzUl */ bool dCamera_c::lineBGCheck(cXyz* i_start, cXyz* i_end, cXyz* o_cross, u32 i_flags) { dBgS_CamLinChk lin_chk; if (lineBGCheck(i_start, i_end, &lin_chk, i_flags)) { cM3dGPla plane; dComIfG_Bgsp().GetTriPla(lin_chk, &plane); *o_cross = lin_chk.i_GetCross() + *plane.GetNP(); return true; } else { *o_cross = *i_end; return false; } } /* 80165AF0-80165B60 160430 0070+00 3/3 13/13 0/0 .text lineBGCheck__9dCamera_cFP4cXyzP4cXyzUl */ bool dCamera_c::lineBGCheck(cXyz* i_start, cXyz* i_end, u32 i_flags) { dBgS_CamLinChk lin_chk; return lineBGCheck(i_start, i_end, &lin_chk, 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(); if (result & 2) { ret |= 2; } if (result & 4) { ret |= 8; } if (result & 8) { ret |= 4; } cM3dGCps cps; cps.Set(*i_start, *i_end, 30.0f); dComIfG_Ccsp()->SetMassCam(cps); return ret; } /* 80165C08-80165CE0 160548 00D8+00 1/1 0/0 0/0 .text * sph_chk_callback__FP11dBgS_SphChkP10cBgD_Vtx_tiiiP8cM3dGPlaPv */ static void* sph_chk_callback(dBgS_SphChk* i_sphChk, cBgD_Vtx_t* i_vtxTbl, int i_vtxIdx0, int i_vtxIdx1, int i_vtxIdx2, cM3dGPla* i_plane, void* i_data) { camSphChkdata* sph_chk_data = (camSphChkdata*)i_data; if (!sph_chk_data->field_0x1c) { f32 len = cM3d_SignedLenPlaAndPos(i_plane, &sph_chk_data->field_0xc); if (i_plane->getPlaneFunc(sph_chk_data->field_0x8) >= -0.0001f && len < sph_chk_data->field_0x4) { cXyz normal = *i_plane->GetNP(); sph_chk_data->field_0xc += normal * (sph_chk_data->field_0x4 + 0.1f - len); sph_chk_data->field_0x1c = true; } } //! @bug Function does not return a value } /* 80165CE0-80165E74 160620 0194+00 1/1 0/0 0/0 .text compWallMargin__9dCamera_cFP4cXyzP4cXyzf */ cXyz dCamera_c::compWallMargin(cXyz* i_center, cXyz* param_1, f32 i_radius) { dBgS_CamSphChk sph_chk; camSphChkdata sph_chk_data(i_center, param_1, i_radius); sph_chk.SetCallback(&sph_chk_callback); sph_chk.Set(*i_center, i_radius); sph_chk_data.field_0x18 = i_radius; for (int i = 0; i < 5; i++) { cXyz vec = sph_chk_data.field_0xc; sph_chk_data.Base(&vec); sph_chk.Set(vec, i_radius); sph_chk_data.field_0x1c = false; if (!dComIfG_Bgsp().SphChk(&sph_chk, &sph_chk_data)) break; } return sph_chk_data.field_0xc; } /* 80165EF4-80165FB4 160834 00C0+00 1/1 0/0 0/0 .text defaultTriming__9dCamera_cFv */ int dCamera_c::defaultTriming() { if (mTrimTypeForce >= 0) { SetTrimSize(mTrimTypeForce); mTrimTypeForce = -1; } else { switch (mCurMode) { case 3: SetTrimSize(2); break; case 1: case 2: case 5: case 6: SetTrimSize(1); break; case 4: SetTrimSize(0); break; case 7: case 8: SetTrimSize(1); break; default: SetTrimSize(0); break; } } return mTrimSize; } /* 80165FB4-8016608C 1608F4 00D8+00 1/1 0/0 0/0 .text setView__9dCamera_cFffff */ void dCamera_c::setView(f32 i_xOrig, f32 i_yOrig, f32 i_width, f32 i_height) { dDlst_window_c* window = get_window(field_0x0); view_port_class* view_port = window->getViewPort(); window->setViewPort(i_xOrig, i_yOrig, i_width, i_height, view_port->near_z, view_port->far_z); window->setScissor(i_xOrig, i_yOrig, i_width, i_height); } /* 8016608C-80166764 1609CC 06D8+00 1/1 0/0 0/0 .text forwardCheckAngle__9dCamera_cFv */ // NONMATCHING regalloc cSAngle dCamera_c::forwardCheckAngle() { dBgS_CamLinChk lin_chk; cSAngle ret = cSAngle::_0; cSAngle local_1b8; cSAngle local_1bc; cXyz player_pos = positionOf(mpPlayerActor); f32 player_height = heightOf(mpPlayerActor); player_pos.y += player_height; cXyz cross; cSAngle local_1c0(mCamSetup.mBGChk.FwdChkAngle(0)); cSGlobe local_198(player_height * mCamSetup.mBGChk.FwdDistance(0), local_1c0.Val(), field_0x28.U().Inv()); cXyz local_f4 = player_pos + local_198.Xyz(); if (lineBGCheck(&player_pos, &local_f4, &cross, 0x40b7)) { cXyz local_100 = local_f4 - player_pos; if (local_100.abs() < 1.0f) { local_f4 = cross; } else { local_f4 = cross - local_100.norm() * mCamSetup.mBGChk.FwdBackMargin(); } } cross = local_f4; cross.y = player_height + groundHeight(&local_f4); cSGlobe local_1a0(cross - player_pos); if (local_1a0.V() >= cSAngle::_0) { local_1b8 = local_1a0.V() * mCamSetup.mBGChk.FwdWeightH(0); } else { local_1b8 = local_1a0.V() * mCamSetup.mBGChk.FwdWeightL(0); } cSAngle local_1c4(mCamSetup.mBGChk.FwdChkAngle(1)); cSGlobe local_1a8(player_height * mCamSetup.mBGChk.FwdDistance(1), local_1c4.Val(), field_0x28.U().Inv()); cXyz local_10c = player_pos + local_1a8.Xyz(); if (lineBGCheck(&player_pos, &local_10c, &cross, 0x40b7)) { cXyz local_100 = local_10c - player_pos; if (local_100.abs() < 1.0f) { local_10c = cross; } else { local_10c = cross - local_100.norm() * mCamSetup.mBGChk.FwdBackMargin(); } } cross = local_10c; cross.y = player_height + groundHeight(&local_10c); cSGlobe local_1b0(cross - player_pos); if (local_1b0.V() >= cSAngle::_0) { local_1bc = local_1b0.V() * mCamSetup.mBGChk.FwdWeightH(1); } else { local_1bc = local_1b0.V() * mCamSetup.mBGChk.FwdWeightL(1); } if (local_1b8 >= cSAngle::_0 && local_1bc >= cSAngle::_0) { ret = local_1b8 >= local_1bc ? -local_1b8 : -local_1bc; } else if (local_1b8 <= cSAngle::_0 && local_1bc <= cSAngle::_0) { ret = local_1b8 <= local_1bc ? -local_1b8 : -local_1bc; } else { ret = -local_1b8; } if (ret <= cSAngle::_0) { ret *= 0.75f; } return ret; } /* 80451024-80451028 000524 0004+00 1/1 0/0 0/0 .sbss prev_plat1$8536 */ static u8 prev_plat1[4]; /* 80451028-8045102C 000528 0004+00 1/1 0/0 0/0 .sbss None */ static u8 data_80451028[4]; /* 8045102C-80451030 00052C 0004+00 1/1 0/0 0/0 .sbss prev_plat2$8539 */ static u8 prev_plat2[4]; /* 80451030-80451034 000530 0004+00 1/1 0/0 0/0 .sbss None */ static u8 data_80451030[4]; /* 80453728-8045372C 001D28 0004+00 4/4 0/0 0/0 .sdata2 @9395 */ SECTION_SDATA2 static f32 lit_9395 = 3.0f / 10.0f; /* 8045372C-80453730 001D2C 0004+00 2/2 0/0 0/0 .sdata2 @9396 */ SECTION_SDATA2 static f32 lit_9396 = 9.999999747378752e-05f; /* 80453730-80453734 001D30 0004+00 3/3 0/0 0/0 .sdata2 @9397 */ SECTION_SDATA2 static f32 lit_9397 = 7.0f / 10.0f; /* 80453734-80453738 001D34 0004+00 10/10 0/0 0/0 .sdata2 @9398 */ SECTION_SDATA2 static f32 lit_9398 = 40.0f; /* 80453738-8045373C 001D38 0004+00 6/6 0/0 0/0 .sdata2 @9399 */ SECTION_SDATA2 static f32 lit_9399 = 100.0f; /* 8045373C-80453740 001D3C 0004+00 2/2 0/0 0/0 .sdata2 @9400 */ SECTION_SDATA2 static f32 lit_9400 = 33.0f / 100.0f; /* 80453740-80453744 001D40 0004+00 2/2 0/0 0/0 .sdata2 @9401 */ SECTION_SDATA2 static f32 lit_9401 = 2.0f / 25.0f; /* 80453744-80453748 001D44 0004+00 1/1 0/0 0/0 .sdata2 @9402 */ SECTION_SDATA2 static f32 lit_9402 = -0.5f; /* 80453748-8045374C 001D48 0004+00 1/1 0/0 0/0 .sdata2 @9403 */ SECTION_SDATA2 static f32 lit_9403 = 6.0f; /* 8045374C-80453750 001D4C 0004+00 2/2 0/0 0/0 .sdata2 @9404 */ SECTION_SDATA2 static f32 lit_9404 = 1.5f; /* 80453750-80453754 001D50 0004+00 9/9 0/0 0/0 .sdata2 @9405 */ SECTION_SDATA2 static f32 lit_9405 = 5.0f; /* 80453754-80453758 001D54 0004+00 6/6 0/0 0/0 .sdata2 @9406 */ SECTION_SDATA2 static f32 lit_9406 = 80.0f; /* 80453758-8045375C 001D58 0004+00 2/2 0/0 0/0 .sdata2 @9407 */ SECTION_SDATA2 static f32 lit_9407 = 3.0f; /* 8045375C-80453760 001D5C 0004+00 1/1 0/0 0/0 .sdata2 @9408 */ SECTION_SDATA2 static f32 lit_9408 = -3.0f; /* 80453760-80453768 001D60 0008+00 6/6 0/0 0/0 .sdata2 @9410 */ SECTION_SDATA2 static f64 lit_9410 = 4503599627370496.0 /* cast u32 to float */; /* 80166764-80167BBC 1610A4 1458+00 1/1 0/0 0/0 .text bumpCheck__9dCamera_cFUl */ void dCamera_c::bumpCheck(u32 param_0) { // NONMATCHING } /* 80167BBC-80167BF8 1624FC 003C+00 1/1 0/0 0/0 .text __dt__Q214cCcD_ShapeAttr5ShapeFv */ cCcD_ShapeAttr::Shape::~Shape() { // NONMATCHING } /* 80167BF8-80167C24 162538 002C+00 2/2 0/0 0/0 .text * lineBGCheckBoth__9dCamera_cFP4cXyzP4cXyzP11dBgS_LinChkUl */ bool dCamera_c::lineBGCheckBoth(cXyz* i_start, cXyz* i_end, dBgS_LinChk* i_linchk, u32 i_flags) { i_linchk->onBackFlag(); i_linchk->onFrontFlag(); return lineBGCheck(i_start, i_end, i_linchk, i_flags); } /* 80167C24-80167CB8 162564 0094+00 1/1 0/0 0/0 .text * 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.field_0x8, &field_0x5c.field_0x14, mFovY, mBank, 0.05f); f32 var_f30 = radiusActorInSight(param_0, param_2, &field_0x5c.field_0x8, &field_0x5c.field_0x14, mFovY, mBank, 0.05f); f32 var_f29; if (var_f31 > var_f30) { var_f29 = var_f31; } else { var_f29 = var_f30; } return var_f29; } /* 80167CB8-80167CD8 1625F8 0020+00 2/2 0/0 0/0 .text * is_player__22@unnamed@d_camera_cpp@FP10fopAc_ac_c */ static void func_80167CB8(fopAc_ac_c* param_0) { // NONMATCHING } /* 80167CD8-80167E3C 162618 0164+00 2/2 0/0 0/0 .text jutOutCheck__9dCamera_cFP4cXyzf */ 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; dComIfG_Bgsp().GetTriPla(linchk, &plane); *param_0 = linchk.i_GetCross(); *param_0 += *plane.GetNP() * param_1; return TRUE; } return FALSE; } /* 80167E3C-80167EF4 16277C 00B8+00 1/1 0/0 0/0 .text tooNearEscape__9dCamera_cFP4cXyz */ void dCamera_c::tooNearEscape(cXyz* param_0) { cXyz sp2C = attentionPos(mpPlayerActor); cSGlobe sp58(*param_0 - sp2C); if (sp58.R() < 40.0f) { sp58.R(40.0f); *param_0 = sp2C + sp58.Xyz(); } } /* 80167EF4-80167FEC 162834 00F8+00 2/2 0/0 0/0 .text getWaterSurfaceHeight__9dCamera_cFP4cXyz */ f32 dCamera_c::getWaterSurfaceHeight(cXyz* param_0) { f32 var_f31 = -1000000000.0f; cXyz spF8(*param_0); dBgS_RoofChk roofchk; roofchk.SetUnderwaterRoof(); roofchk.SetPos(spF8); f32 roof_y = dComIfG_Bgsp().RoofChk(&roofchk); if (spF8.y < roof_y) { spF8.y = roof_y; } dBgS_CamGndChk_Wtr gndchk; gndchk.SetPos(&spF8); f32 gnd_y = dComIfG_Bgsp().GroundCross(&gndchk); if (gnd_y > param_0->y) { var_f31 = gnd_y; } return var_f31; } /* ############################################################################################## */ /* 80453768-8045376C 001D68 0004+00 8/8 0/0 0/0 .sdata2 @9788 */ SECTION_SDATA2 static f32 lit_9788 = 20.0f; /* 80167FEC-80168744 16292C 0758+00 3/3 0/0 0/0 .text checkGroundInfo__9dCamera_cFv */ void dCamera_c::checkGroundInfo() { // NONMATCHING } /* ############################################################################################## */ /* 8042C9A0-8042C9AC 0596C0 000C+00 1/1 0/0 0/0 .bss @9808 */ static u8 lit_9808[12]; /* 80451034-80451038 000534 0004+00 1/1 0/0 0/0 .sbss JumpCushion$9801 */ static f32 JumpCushion; /* 80451038-8045103C -00001 0004+00 1/1 0/0 0/0 .sbss None */ /* 80451038 0001+00 data_80451038 None */ /* 80451039 0003+00 data_80451039 None */ static u8 struct_80451038[4]; /* 8045103C-80451040 -00001 0004+00 2/2 0/0 0/0 .sbss None */ /* 8045103C 0002+00 data_8045103C LatitudeLimitMax$9807 */ /* 8045103E 0002+00 data_8045103E None */ static u8 struct_8045103C[4]; /* 8045376C-80453770 001D6C 0004+00 3/3 0/0 0/0 .sdata2 @10550 */ SECTION_SDATA2 static f32 lit_10550 = 9.0f / 10.0f; /* 80453770-80453774 001D70 0004+00 2/2 0/0 0/0 .sdata2 @10551 */ SECTION_SDATA2 static f32 lit_10551 = -75.0f; /* 80453774-80453778 001D74 0004+00 2/2 0/0 0/0 .sdata2 @10552 */ SECTION_SDATA2 static f32 lit_10552 = 75.0f; /* 80453778-8045377C 001D78 0004+00 1/1 0/0 0/0 .sdata2 @10553 */ SECTION_SDATA2 static f32 lit_10553 = 22.0f; /* 8045377C-80453780 001D7C 0004+00 2/2 0/0 0/0 .sdata2 @10554 */ SECTION_SDATA2 static f32 lit_10554 = 550.0f; /* 80453780-80453784 001D80 0004+00 2/2 0/0 0/0 .sdata2 @10555 */ SECTION_SDATA2 static f32 lit_10555 = -70.0f; /* 80453784-80453788 001D84 0004+00 3/3 0/0 0/0 .sdata2 @10556 */ SECTION_SDATA2 static f32 lit_10556 = 90.0f; /* 80453788-8045378C 001D88 0004+00 6/6 0/0 0/0 .sdata2 @10557 */ SECTION_SDATA2 static f32 lit_10557 = 50.0f; /* 8045378C-80453790 001D8C 0004+00 3/3 0/0 0/0 .sdata2 @10558 */ SECTION_SDATA2 static f32 lit_10558 = -30.0f; /* 80453790-80453794 001D90 0004+00 4/4 0/0 0/0 .sdata2 @10559 */ SECTION_SDATA2 static f32 lit_10559 = -80.0f; /* 80453794-80453798 001D94 0004+00 3/3 0/0 0/0 .sdata2 @10560 */ SECTION_SDATA2 static f32 lit_10560 = 3.0f / 20.0f; /* 80453798-8045379C 001D98 0004+00 3/3 0/0 0/0 .sdata2 @10561 */ SECTION_SDATA2 static f32 lit_10561 = -60.0f; /* 8045379C-804537A0 001D9C 0004+00 2/2 0/0 0/0 .sdata2 @10562 */ SECTION_SDATA2 static f32 lit_10562 = -1.0f / 5.0f; /* 804537A0-804537A4 001DA0 0004+00 2/2 0/0 0/0 .sdata2 @10563 */ SECTION_SDATA2 static f32 lit_10563 = 1.0f / 25.0f; /* 804537A4-804537A8 001DA4 0004+00 3/3 0/0 0/0 .sdata2 @10564 */ SECTION_SDATA2 static f32 lit_10564 = -45.0f; /* 804537A8-804537AC 001DA8 0004+00 3/3 0/0 0/0 .sdata2 @10565 */ SECTION_SDATA2 static f32 lit_10565 = 45.0f; /* 804537AC-804537B0 001DAC 0004+00 2/2 0/0 0/0 .sdata2 @10566 */ SECTION_SDATA2 static f32 lit_10566 = 3.0f / 50.0f; /* 804537B0-804537B4 001DB0 0004+00 2/2 0/0 0/0 .sdata2 @10567 */ SECTION_SDATA2 static f32 lit_10567 = 100000.0f; /* 804537B4-804537B8 001DB4 0004+00 1/1 0/0 0/0 .sdata2 @10568 */ SECTION_SDATA2 static f32 lit_10568 = 2.5f; /* 804537B8-804537BC 001DB8 0004+00 5/5 0/0 0/0 .sdata2 @10569 */ SECTION_SDATA2 static f32 lit_10569 = 8.0f; /* 804537BC-804537C0 001DBC 0004+00 2/2 0/0 0/0 .sdata2 @10570 */ SECTION_SDATA2 static f32 lit_10570 = 6.0f / 5.0f; /* 804537C0-804537C4 001DC0 0004+00 1/1 0/0 0/0 .sdata2 @10571 */ SECTION_SDATA2 static f32 lit_10571 = 0.0062500000931322575f; /* 804537C4-804537C8 001DC4 0004+00 1/1 0/0 0/0 .sdata2 @10572 */ SECTION_SDATA2 static f32 lit_10572 = 11.0f / 5.0f; /* 804537C8-804537CC 001DC8 0004+00 1/1 0/0 0/0 .sdata2 @10573 */ SECTION_SDATA2 static f32 lit_10573 = -1.0f / 10.0f; /* 804537CC-804537D0 001DCC 0004+00 6/6 0/0 0/0 .sdata2 @10574 */ SECTION_SDATA2 static f32 lit_10574 = 15.0f; /* 804537D0-804537D4 001DD0 0004+00 3/3 0/0 0/0 .sdata2 @10575 */ SECTION_SDATA2 static f32 lit_10575 = 1.25f; /* 804537D4-804537D8 001DD4 0004+00 1/1 0/0 0/0 .sdata2 @10576 */ SECTION_SDATA2 static f32 lit_10576 = 7.0f / 20.0f; /* 804537D8-804537DC 001DD8 0004+00 3/3 0/0 0/0 .sdata2 @10577 */ SECTION_SDATA2 static f32 lit_10577 = 2.0f / 5.0f; /* 804537DC-804537E0 001DDC 0004+00 1/1 0/0 0/0 .sdata2 @10578 */ SECTION_SDATA2 static f32 lit_10578 = 500.0f; /* 804537E0-804537E4 001DE0 0004+00 1/1 0/0 0/0 .sdata2 @10579 */ SECTION_SDATA2 static f32 lit_10579 = 11.0f / 20.0f; /* 804537E4-804537E8 001DE4 0004+00 1/1 0/0 0/0 .sdata2 @10580 */ SECTION_SDATA2 static f32 lit_10580 = 14.0f; /* 804537E8-804537EC 001DE8 0004+00 5/5 0/0 0/0 .sdata2 @10581 */ SECTION_SDATA2 static f32 lit_10581 = 180.0f; /* 804537EC-804537F0 001DEC 0004+00 4/4 0/0 0/0 .sdata2 @10582 */ SECTION_SDATA2 static f32 lit_10582 = -50.0f; /* 80168744-8016C25C 163084 3B18+00 3/2 0/0 0/0 .text chaseCamera__9dCamera_cFl */ bool dCamera_c::chaseCamera(s32 param_0) { // NONMATCHING } /* 8016C25C-8016C2CC 166B9C 0070+00 2/2 0/0 0/0 .text * isPlayerFlying__22@unnamed@d_camera_cpp@FP9daAlink_c */ static void func_8016C25C(daAlink_c* param_0) { // NONMATCHING } /* 8016C2CC-8016C2D4 166C0C 0008+00 1/1 0/0 0/0 .text Val__7cSAngleCFv */ // void cSAngle::Val() const { void Val__7cSAngleCFv() { // NONMATCHING } /* 8016C2D4-8016C314 166C14 0040+00 1/1 0/0 0/0 .text sAngleX__22@unnamed@d_camera_cpp@FR4cXyz */ static void func_8016C2D4(cXyz& param_0) { // NONMATCHING } /* 8016C314-8016C330 166C54 001C+00 1/1 0/0 0/0 .text getHoldA__8mDoCPd_cFUl */ // void mDoCPd_c::getHoldA(u32 param_0) { void getHoldA__8mDoCPd_cFUl() { // NONMATCHING } /* 8016C330-8016C34C 166C70 001C+00 5/5 0/0 0/0 .text * check_owner_action1__22@unnamed@d_camera_cpp@FUlUl */ static void func_8016C330(u32 param_0, u32 param_1) { // NONMATCHING } /* 8016C34C-8016C368 166C8C 001C+00 2/2 0/0 0/0 .text * isPlayerCharging__22@unnamed@d_camera_cpp@FUl */ static void func_8016C34C(u32 param_0) { // NONMATCHING } /* 8016C368-8016C384 166CA8 001C+00 5/5 0/0 0/0 .text * check_owner_action__22@unnamed@d_camera_cpp@FUlUl */ static void func_8016C368(u32 param_0, u32 param_1){// NONMATCHING } /* ############################################################################################## */ /* 804537F0-804537F4 001DF0 0004+00 4/4 0/0 0/0 .sdata2 @11167 */ SECTION_SDATA2 static f32 lit_11167 = -10.0f; /* 804537F4-804537F8 001DF4 0004+00 3/3 0/0 0/0 .sdata2 @11168 */ SECTION_SDATA2 static f32 lit_11168 = 4.0f / 5.0f; /* 804537F8-804537FC 001DF8 0004+00 1/1 0/0 0/0 .sdata2 @11169 */ SECTION_SDATA2 static f32 lit_11169 = 250.0f; /* 804537FC-80453800 001DFC 0004+00 1/1 0/0 0/0 .sdata2 @11170 */ SECTION_SDATA2 static f32 lit_11170 = -90.0f; /* 80453800-80453804 001E00 0004+00 3/3 0/0 0/0 .sdata2 @11171 */ SECTION_SDATA2 static f32 lit_11171 = 25.0f; /* 80453804-80453808 001E04 0004+00 1/1 0/0 0/0 .sdata2 @11172 */ SECTION_SDATA2 static f32 lit_11172 = 7.5f; /* 80453808-8045380C 001E08 0004+00 3/3 0/0 0/0 .sdata2 @11173 */ SECTION_SDATA2 static f32 lit_11173 = -15.0f; /* 8045380C-80453810 001E0C 0004+00 2/2 0/0 0/0 .sdata2 @11174 */ SECTION_SDATA2 static f32 lit_11174 = 280.0f; /* 80453810-80453814 001E10 0004+00 1/1 0/0 0/0 .sdata2 @11175 */ SECTION_SDATA2 static f32 lit_11175 = 1.0f / 50.0f; /* 8016C384-8016E410 166CC4 208C+00 1/0 0/0 0/0 .text lockonCamera__9dCamera_cFl */ bool dCamera_c::lockonCamera(s32 param_0) { // NONMATCHING } /* 8016E410-8016E420 168D50 0010+00 1/1 0/0 0/0 .text rangef__22@unnamed@d_camera_cpp@Ffff */ static void func_8016E410(f32 param_0, f32 param_1, f32 param_2) { // NONMATCHING } /* 8016E420-8016E424 168D60 0004+00 2/2 0/0 0/0 .text __ct__7cSGlobeFv */ // cSGlobe::cSGlobe() { void __ct__7cSGlobeFv() { /* empty function */ } /* 8016E424-8016E448 168D64 0024+00 1/1 0/0 0/0 .text LockEdge__12dAttention_cFv */ void dAttention_c::LockEdge() { // NONMATCHING } /* 8016E448-8016E4A4 168D88 005C+00 1/1 0/0 0/0 .text getMsgCmdSpeaker__9dCamera_cFv */ void dCamera_c::getMsgCmdSpeaker() { // NONMATCHING } /* 8016E4A4-8016E4F4 168DE4 0050+00 1/1 0/0 0/0 .text getMsgCmdCut__9dCamera_cFl */ void dCamera_c::getMsgCmdCut(s32 param_0){// NONMATCHING } /* ############################################################################################## */ /* 80453814-80453818 001E14 0004+00 1/1 0/0 0/0 .sdata2 @12268 */ SECTION_SDATA2 static f32 lit_12268 = 999.9000244140625f; /* 80453818-8045381C 001E18 0004+00 1/1 0/0 0/0 .sdata2 @12269 */ SECTION_SDATA2 static f32 lit_12269 = 260.0f; /* 8045381C-80453820 001E1C 0004+00 1/1 0/0 0/0 .sdata2 @12270 */ SECTION_SDATA2 static f32 lit_12270 = 210.0f; /* 80453820-80453824 001E20 0004+00 1/1 0/0 0/0 .sdata2 @12271 */ SECTION_SDATA2 static f32 lit_12271 = 48.0f; /* 80453824-80453828 001E24 0004+00 1/1 0/0 0/0 .sdata2 @12272 */ SECTION_SDATA2 static f32 lit_12272 = 88.0f; /* 80453828-8045382C 001E28 0004+00 1/1 0/0 0/0 .sdata2 @12273 */ SECTION_SDATA2 static f32 lit_12273 = -180.0f; /* 8045382C-80453830 001E2C 0004+00 1/1 0/0 0/0 .sdata2 @12274 */ SECTION_SDATA2 static f32 lit_12274 = 360.0f; /* 80453830-80453834 001E30 0004+00 1/1 0/0 0/0 .sdata2 @12275 */ SECTION_SDATA2 static f32 lit_12275 = 35.0f; /* 80453834-80453838 001E34 0004+00 1/1 0/0 0/0 .sdata2 @12276 */ SECTION_SDATA2 static f32 lit_12276 = -40.0f; /* 80453838-8045383C 001E38 0004+00 2/2 0/0 0/0 .sdata2 @12277 */ SECTION_SDATA2 static f32 lit_12277 = 55.0f; /* 8045383C-80453840 001E3C 0004+00 2/2 0/0 0/0 .sdata2 @12278 */ SECTION_SDATA2 static f32 lit_12278 = 70.0f; /* 80453840-80453844 001E40 0004+00 3/3 0/0 0/0 .sdata2 @12279 */ SECTION_SDATA2 static f32 lit_12279 = -200.0f; /* 80453844-80453848 001E44 0004+00 1/1 0/0 0/0 .sdata2 @12280 */ SECTION_SDATA2 static f32 lit_12280 = 140.0f; /* 80453848-8045384C 001E48 0004+00 1/1 0/0 0/0 .sdata2 @12281 */ SECTION_SDATA2 static f32 lit_12281 = 110.0f; /* 8045384C-80453850 001E4C 0004+00 1/1 0/0 0/0 .sdata2 @12282 */ SECTION_SDATA2 static f32 lit_12282 = 125.0f; /* 80453850-80453854 001E50 0004+00 1/1 0/0 0/0 .sdata2 @12283 */ SECTION_SDATA2 static f32 lit_12283 = 76.0f; /* 80453854-80453858 001E54 0004+00 1/1 0/0 0/0 .sdata2 @12284 */ SECTION_SDATA2 static f32 lit_12284 = 190.0f; /* 80453858-8045385C 001E58 0004+00 3/3 0/0 0/0 .sdata2 @12285 */ SECTION_SDATA2 static f32 lit_12285 = 120.0f; /* 8045385C-80453860 001E5C 0004+00 2/2 0/0 0/0 .sdata2 @12286 */ SECTION_SDATA2 static f32 lit_12286 = -5.0f; /* 80453860-80453864 001E60 0004+00 1/1 0/0 0/0 .sdata2 @12287 */ SECTION_SDATA2 static f32 lit_12287 = -35.0f; /* 80453864-80453868 001E64 0004+00 1/1 0/0 0/0 .sdata2 @12288 */ SECTION_SDATA2 static f32 lit_12288 = 9.0f / 20.0f; /* 80453868-8045386C 001E68 0004+00 1/1 0/0 0/0 .sdata2 @12289 */ SECTION_SDATA2 static f32 lit_12289 = 65.0f; /* 8045386C-80453870 001E6C 0004+00 2/2 0/0 0/0 .sdata2 @12290 */ SECTION_SDATA2 static f32 lit_12290 = 400.0f; /* 80453870-80453874 001E70 0004+00 1/1 0/0 0/0 .sdata2 @12291 */ SECTION_SDATA2 static f32 lit_12291 = 68.0f; /* 80453874-80453878 001E74 0004+00 1/1 0/0 0/0 .sdata2 @12292 */ SECTION_SDATA2 static f32 lit_12292 = 750.0f; /* 80453878-8045387C 001E78 0004+00 1/1 0/0 0/0 .sdata2 @12293 */ SECTION_SDATA2 static f32 lit_12293 = 58.0f; /* 8045387C-80453880 001E7C 0004+00 2/2 0/0 0/0 .sdata2 @12294 */ SECTION_SDATA2 static f32 lit_12294 = 160.0f; /* 80453880-80453884 001E80 0004+00 1/1 0/0 0/0 .sdata2 @12295 */ SECTION_SDATA2 static f32 lit_12295 = 95.0f; /* 80453884-80453888 001E84 0004+00 3/3 0/0 0/0 .sdata2 @12296 */ SECTION_SDATA2 static f32 lit_12296 = -150.0f; /* 80453888-8045388C 001E88 0004+00 1/1 0/0 0/0 .sdata2 @12297 */ SECTION_SDATA2 static f32 lit_12297 = 7.0f / 25.0f; /* 8016E4F4-80174E18 168E34 6924+00 2/0 0/0 0/0 .text talktoCamera__9dCamera_cFl */ bool dCamera_c::talktoCamera(s32 param_0) { // NONMATCHING } /* 80174E18-80174E34 16F758 001C+00 1/1 0/0 0/0 .text talkBasePos__9dCamera_cFP10fopAc_ac_c */ void dCamera_c::talkBasePos(fopAc_ac_c* param_0) { // NONMATCHING } /* 80174E34-80174E50 16F774 001C+00 1/1 0/0 0/0 .text talkEyePos__9dCamera_cFP10fopAc_ac_c */ void dCamera_c::talkEyePos(fopAc_ac_c* param_0) { // NONMATCHING } /* 80174E50-80174EA4 16F790 0054+00 1/1 0/0 0/0 .text * lineCollisionCheck__22@unnamed@d_camera_cpp@F4cXyz4cXyzP10fopAc_ac_cP10fopAc_ac_cP10fopAc_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) { // NONMATCHING } /* 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) { return false; } /* 80174EAC-80174ED4 16F7EC 0028+00 0/0 0/0 1/1 .text SaveZoomRatio__9dCamera_cFv */ void dCamera_c::SaveZoomRatio(){// NONMATCHING } /* ############################################################################################## */ /* 8045388C-80453890 001E8C 0004+00 1/1 0/0 0/0 .sdata2 @12864 */ SECTION_SDATA2 static f32 lit_12864 = 270.0f; /* 80453890-80453894 001E90 0004+00 1/1 0/0 0/0 .sdata2 @12865 */ SECTION_SDATA2 static f32 lit_12865 = 19.0f; /* 80453894-80453898 001E94 0004+00 1/1 0/0 0/0 .sdata2 @12866 */ SECTION_SDATA2 static f32 lit_12866 = 150.0f; /* 80453898-8045389C 001E98 0004+00 1/1 0/0 0/0 .sdata2 @12867 */ SECTION_SDATA2 static f32 lit_12867 = -1.0f / 100.0f; /* 8045389C-804538A0 001E9C 0004+00 5/5 0/0 0/0 .sdata2 @12868 */ SECTION_SDATA2 static f32 lit_12868 = -1.0f; /* 804538A0-804538A4 001EA0 0004+00 1/1 0/0 0/0 .sdata2 @12869 */ SECTION_SDATA2 static f32 lit_12869 = -511.0f; /* 80174ED4-80176074 16F814 11A0+00 1/0 0/0 0/0 .text subjectCamera__9dCamera_cFl */ bool dCamera_c::subjectCamera(s32 param_0){// NONMATCHING } /* ############################################################################################## */ /* 804538A4-804538A8 001EA4 0004+00 3/3 0/0 0/0 .sdata2 @13132 */ SECTION_SDATA2 static f32 lit_13132 = 4.0f; /* 80176074-801767F8 1709B4 0784+00 1/0 0/0 0/0 .text magneCamera__9dCamera_cFl */ bool dCamera_c::magneCamera(s32 param_0){// NONMATCHING } /* ############################################################################################## */ /* 804538A8-804538AC 001EA8 0004+00 1/1 0/0 0/0 .sdata2 @13314 */ SECTION_SDATA2 static f32 lit_13314 = 0.9990000128746033f; /* 801767F8-80176DF0 171138 05F8+00 1/0 0/0 0/0 .text colosseumCamera__9dCamera_cFl */ bool dCamera_c::colosseumCamera(s32 param_0) { // NONMATCHING } /* 80176DF0-80176DF8 171730 0008+00 1/0 0/0 0/0 .text test1Camera__9dCamera_cFl */ bool dCamera_c::test1Camera(s32 param_0) { return false; } /* 80176DF8-80176E00 171738 0008+00 1/0 0/0 0/0 .text test2Camera__9dCamera_cFl */ bool dCamera_c::test2Camera(s32 param_0) { return false; } /* ############################################################################################## */ /* 804538AC-804538B0 001EAC 0004+00 2/2 0/0 0/0 .sdata2 @13673 */ SECTION_SDATA2 static f32 lit_13673 = 1.0f / 40.0f; /* 80176E00-80178E50 171740 2050+00 1/0 0/0 0/0 .text towerCamera__9dCamera_cFl */ bool dCamera_c::towerCamera(s32 param_0){// NONMATCHING } /* ############################################################################################## */ /* 804538B0-804538B4 001EB0 0004+00 1/1 0/0 0/0 .sdata2 @14059 */ SECTION_SDATA2 static f32 lit_14059 = -160.0f; /* 804538B4-804538B8 001EB4 0004+00 1/1 0/0 0/0 .sdata2 @14060 */ SECTION_SDATA2 static f32 lit_14060 = 170.0f; /* 804538B8-804538BC 001EB8 0004+00 2/2 0/0 0/0 .sdata2 @14061 */ SECTION_SDATA2 static f32 lit_14061 = -120.0f; /* 804538BC-804538C0 001EBC 0004+00 1/1 0/0 0/0 .sdata2 @14062 */ SECTION_SDATA2 static f32 lit_14062 = -240.0f; /* 804538C0-804538C4 001EC0 0004+00 1/1 0/0 0/0 .sdata2 @14063 */ SECTION_SDATA2 static f32 lit_14063 = 340.0f; /* 804538C4-804538C8 001EC4 0004+00 2/2 0/0 0/0 .sdata2 @14064 */ SECTION_SDATA2 static f32 lit_14064 = -100.0f; /* 80178E50-80179590 173790 0740+00 1/0 0/0 0/0 .text hookshotCamera__9dCamera_cFl */ bool dCamera_c::hookshotCamera(s32 param_0) { // NONMATCHING } /* ############################################################################################## */ /* 8042C9AC-8042C9B8 0596CC 000C+00 1/1 0/0 0/0 .bss @14159 */ static u8 lit_14159[12]; /* 80451040-80451044 -00001 0004+00 2/2 0/0 0/0 .sbss None */ /* 80451040 0002+00 data_80451040 _120$14158 */ /* 80451042 0002+00 data_80451042 None */ static u8 struct_80451040[4]; /* 80179590-8017A2A0 173ED0 0D10+00 1/0 0/0 0/0 .text railCamera__9dCamera_cFl */ bool dCamera_c::railCamera(s32 param_0) { // NONMATCHING } /* ############################################################################################## */ /* 8042C9B8-8042C9C4 0596D8 000C+00 1/1 0/0 0/0 .bss @14615 */ static u8 lit_14615[12]; /* 80451044-80451048 -00001 0004+00 2/2 0/0 0/0 .sbss None */ /* 80451044 0002+00 data_80451044 _120$14614 */ /* 80451046 0002+00 data_80451046 None */ static u8 struct_80451044[4]; /* 8017A2A0-8017ADC0 174BE0 0B20+00 1/0 0/0 0/0 .text paraRailCamera__9dCamera_cFl */ bool dCamera_c::paraRailCamera(s32 param_0) { // NONMATCHING } /* ############################################################################################## */ /* 8042C9C4-8042C9D0 0596E4 000C+00 0/1 0/0 0/0 .bss @14964 */ #pragma push #pragma force_active on static u8 lit_14964[12]; #pragma pop /* 8042C9D0-8042C9E0 0596F0 000C+04 0/1 0/0 0/0 .bss @14968 */ #pragma push #pragma force_active on static u8 lit_14968[12 + 4 /* padding */]; #pragma pop /* 80451048-8045104C -00001 0004+00 1/1 0/0 0/0 .sbss None */ /* 80451048 0002+00 data_80451048 LatMin$14963 */ /* 8045104A 0002+00 data_8045104A None */ static u8 struct_80451048[4]; /* 8045104C-80451050 00054C 0002+02 1/1 0/0 0/0 .sbss LatMax$14967 */ static u8 LatMax[2 + 2 /* padding */]; /* 804538C8-804538CC 001EC8 0004+00 1/1 0/0 0/0 .sdata2 @15474 */ SECTION_SDATA2 static f32 lit_15474 = 1200.0f; /* 804538CC-804538D0 001ECC 0004+00 1/1 0/0 0/0 .sdata2 @15475 */ SECTION_SDATA2 static f32 lit_15475 = 3.0f / 5.0f; /* 804538D0-804538D4 001ED0 0004+00 1/1 0/0 0/0 .sdata2 @15476 */ SECTION_SDATA2 static f32 lit_15476 = 800.0f; /* 804538D4-804538D8 001ED4 0004+00 1/1 0/0 0/0 .sdata2 @15477 */ SECTION_SDATA2 static f32 lit_15477 = 28.0f; /* 804538D8-804538DC 001ED8 0004+00 2/2 0/0 0/0 .sdata2 @15478 */ SECTION_SDATA2 static f32 lit_15478 = 320.0f; /* 804538DC-804538E0 001EDC 0004+00 1/1 0/0 0/0 .sdata2 @15479 */ SECTION_SDATA2 static f32 lit_15479 = 6000.0f; /* 804538E0-804538E4 001EE0 0004+00 1/1 0/0 0/0 .sdata2 @15480 */ SECTION_SDATA2 static f32 lit_15480 = 1000.0f; /* 804538E4-804538E8 001EE4 0004+00 1/1 0/0 0/0 .sdata2 @15481 */ SECTION_SDATA2 static f32 lit_15481 = 23.0f; /* 804538E8-804538EC 001EE8 0004+00 1/1 0/0 0/0 .sdata2 @15482 */ SECTION_SDATA2 static f32 lit_15482 = 780.0f; /* 804538EC-804538F0 001EEC 0004+00 1/1 0/0 0/0 .sdata2 @15483 */ SECTION_SDATA2 static f32 lit_15483 = 1250.0f; /* 804538F0-804538F4 001EF0 0004+00 1/1 0/0 0/0 .sdata2 @15484 */ SECTION_SDATA2 static f32 lit_15484 = 34.0f; /* 804538F4-804538F8 001EF4 0004+00 1/1 0/0 0/0 .sdata2 @15485 */ SECTION_SDATA2 static f32 lit_15485 = 900.0f; /* 804538F8-804538FC 001EF8 0004+00 1/1 0/0 0/0 .sdata2 @15486 */ SECTION_SDATA2 static f32 lit_15486 = 1.0500000715255737f; /* 804538FC-80453900 001EFC 0004+00 1/1 0/0 0/0 .sdata2 @15487 */ SECTION_SDATA2 static f32 lit_15487 = 1.1500000953674316f; /* 8017ADC0-8017D934 175700 2B74+00 1/0 0/0 0/0 .text rideCamera__9dCamera_cFl */ bool dCamera_c::rideCamera(s32 param_0) { // NONMATCHING } /* 8017D934-8017D974 178274 0040+00 1/1 0/0 0/0 .text sAngleY__22@unnamed@d_camera_cpp@FR4cXyz */ static void func_8017D934(cXyz& param_0) { // NONMATCHING } /* 8017D974-8017D97C 1782B4 0008+00 1/0 0/0 0/0 .text manualCamera__9dCamera_cFl */ bool dCamera_c::manualCamera(s32 param_0) { return true; } /* ############################################################################################## */ /* 80453900-80453904 001F00 0004+00 1/1 0/0 0/0 .sdata2 @15772 */ SECTION_SDATA2 static f32 lit_15772 = -0.75f; /* 80453904-80453908 001F04 0004+00 1/1 0/0 0/0 .sdata2 @15773 */ 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 } /* 8017DFAC-8017E730 1788EC 0784+00 1/0 0/0 0/0 .text fixedFrameCamera__9dCamera_cFl */ bool dCamera_c::fixedFrameCamera(s32 param_0) { // NONMATCHING } /* 8017E730-8017F25C 179070 0B2C+00 1/0 0/0 0/0 .text fixedPositionCamera__9dCamera_cFl */ bool dCamera_c::fixedPositionCamera(s32 param_0) { // NONMATCHING } /* 8017F25C-8017F828 179B9C 05CC+00 1/0 0/0 0/0 .text oneSideCamera__9dCamera_cFl */ bool dCamera_c::oneSideCamera(s32 param_0){// NONMATCHING } /* 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 /* 8017F828-8018050C 17A168 0CE4+00 2/1 0/0 0/0 .text eventCamera__9dCamera_cFl */ bool dCamera_c::eventCamera(s32 param_0){ // NONMATCHING typedef int (dCamera_c::*func)(); func l_func[] = { &dCamera_c::pauseEvCamera, &dCamera_c::pauseEvCamera, &dCamera_c::talktoEvCamera, &dCamera_c::fixedPositionEvCamera, &dCamera_c::fixedFrameEvCamera, &dCamera_c::uniformTransEvCamera, &dCamera_c::watchActorEvCamera, &dCamera_c::restorePosEvCamera, &dCamera_c::getItemEvCamera, &dCamera_c::gameOverEvCamera, &dCamera_c::turnToActorEvCamera, &dCamera_c::rollingEvCamera, &dCamera_c::tactEvCamera, &dCamera_c::pauseEvCamera, &dCamera_c::portalWarpEvCamera, &dCamera_c::styleEvCamera, &dCamera_c::saveEvCamera, &dCamera_c::loadEvCamera, &dCamera_c::useItem0EvCamera, &dCamera_c::useItem1EvCamera, &dCamera_c::fixedFramesEvCamera, &dCamera_c::bSplineEvCamera, &dCamera_c::possessedEvCamera, &dCamera_c::twoActor0EvCamera, &dCamera_c::stokerEvCamera, &dCamera_c::uniformBrakeEvCamera, &dCamera_c::uniformAcceleEvCamera, &dCamera_c::stbWaitEvCamera, &dCamera_c::currentEvCamera, &dCamera_c::peepHoleEvCamera, &dCamera_c::digHoleEvCamera, &dCamera_c::hintTalkEvCamera, &dCamera_c::bspTransEvCamera, (func)&dCamera_c::maptoolIdEvCamera, }; static char* ActionNames[34] = { "PAUSE", "WAIT", "TALK", "FIXEDPOS", "FIXEDFRM", "UNITRANS", "WATCHACTOR", "RESTOREPOS", "GETITEM", "GAMEOVER", "TURNTOACTOR", "ROLLING", "TACT", "WINDDIR", "PORTALWARP", "STYLE", "SAVE", "LOAD", "USEITEM0", "USEITEM1", "FIXEDFRMS", "BSPLINE", "POSSESSED", "TWOACTOR0", "STOKER", "UNIBRAKE", "UNIACCELE", "STBWAIT", "CURRENT", "PEEPHOLE", "DIGHOLE", "HINTTALK", "BSPTRANS", "MAPTOOL", }; (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"; #pragma pop /* 8018050C-801806D4 17AE4C 01C8+00 1/0 0/0 0/0 .text currentEvCamera__9dCamera_cFv */ int dCamera_c::currentEvCamera() { // NONMATCHING } /* 801806D4-801806DC 17B014 0008+00 1/0 0/0 0/0 .text letCamera__9dCamera_cFl */ bool dCamera_c::letCamera(s32) { return true; } /* 801806DC-80180738 17B01C 005C+00 2/2 0/0 0/0 .text setEventRecoveryTrans__9dCamera_cFs */ void dCamera_c::setEventRecoveryTrans(s16 param_0) { // NONMATCHING } /* 80180738-80180A40 17B078 0308+00 1/1 0/0 0/0 .text runEventRecoveryTrans__9dCamera_cFv */ void dCamera_c::runEventRecoveryTrans() { // NONMATCHING } /* 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); } /* 80180AA8-80180AE0 17B3E8 0038+00 0/0 0/0 24/24 .text Set__9dCamera_cF4cXyz4cXyz */ int dCamera_c::Set(cXyz i_center, cXyz i_eye) { mCenter = i_center; mEye = i_eye; return 1; } /* 80180AE0-80180B40 17B420 0060+00 0/0 2/2 93/93 .text Set__9dCamera_cF4cXyz4cXyzfs */ int dCamera_c::Set(cXyz i_center, cXyz i_eye, f32 i_fovy, s16 i_bank) { mCenter = i_center; mEye = i_eye; mFovY = i_fovy; mBank.Val(i_bank); return 1; } /* 80180B40-80180BA0 17B480 0060+00 0/0 0/0 11/11 .text Set__9dCamera_cF4cXyz4cXyzsf */ int dCamera_c::Set(cXyz i_center, cXyz i_eye, s16 i_bank, f32 i_fovy) { mCenter = i_center; mEye = i_eye; mFovY = i_fovy; mBank.Val(i_bank); return 1; } /* 80180BA0-80180C18 17B4E0 0078+00 1/1 1/1 18/18 .text Reset__9dCamera_cF4cXyz4cXyzfs */ void dCamera_c::Reset(cXyz i_center, cXyz i_eye, f32 i_fovy, s16 i_bank) { mCenter = i_center; mEye = i_eye; mFovY = i_fovy; mBank = cSAngle(i_bank); Reset(); } /* 80180C18-80180C68 17B558 0050+00 0/0 0/0 64/64 .text Reset__9dCamera_cF4cXyz4cXyz */ void dCamera_c::Reset(cXyz i_center, cXyz i_eye) { mCenter = i_center; mEye = i_eye; Reset(); } /* 80180C68-80180D24 17B5A8 00BC+00 2/2 1/1 3/3 .text Reset__9dCamera_cFv */ int dCamera_c::Reset() { field_0x5c.field_0x8 = mCenter; field_0x5c.field_0x14 = mEye; field_0x80 = mFovY; field_0x5c.field_0x20 = mBank; field_0x28.Val(mEye - mCenter); field_0x5c.field_0x0 = field_0x28; field_0x8c = cSAngle(field_0x28.U().Inv()); return 1; } /* 80180D24-80181000 17B664 02DC+00 2/2 0/0 0/0 .text shakeCamera__9dCamera_cFv */ // NONMATCHING - minor regalloc f32 dCamera_c::shakeCamera() { static f32 const wave[] = {0.4f, 0.9f, 2.1f, 3.2f}; f32 var_f31 = 0.0f; if (mShake.field_0x10 < mShake.m_length) { int var_r29 = mShake.field_0x10 >> 3; int var_r27 = mShake.field_0x10 & 7; int var_r26 = (mShake.field_0x4[var_r29] << 8) | mShake.field_0x4[var_r29 + 1]; int var_r28 = 1 << (15 - var_r27); f32 var_f30 = 1.0f; for (int i = 0; i < 4; i++) { if (var_r28 & var_r26) { var_f31 += var_f30 * wave[i]; } else { var_f30 *= 0.43f; } var_r28 >>= 1; } mShake.field_0x10++; var_f31 *= cM_rndFX(0.05f) + 0.95f; f32 var_f29 = var_f31; if (mShake.field_0x10 & 1) { var_f31 = -var_f31; } cXyz sp64(mShake.m_pos); sp64.x += cM_rndFX(0.045f); sp64.z += cM_rndFX(0.045f); sp64 = sp64 * var_f31; if (field_0x6fc & 2) { mShake.mEyeShake = sp64 * 1.0f; mShake.field_0x24 = mShake.mEyeShake; } if (field_0x6fc & 0x40) { mShake.mEyeShake = sp64 * 10.0f; mShake.field_0x24 = mShake.mEyeShake; } if (field_0x6fc & 4) { mShake.field_0x3c = var_f31 * cM_rndFX(0.12f); } if (field_0x6fc & 8) { mShake.field_0x40 = cSAngle(var_f31 * cM_rndFX(0.15f)); } if (field_0x6fc & 0x10) { mDoGph_gInf_c::setBlureRate(var_f29 * 30.0f); mDoGph_gInf_c::onBlure(); } } else { mShake.field_0x24 -= mShake.field_0x24 * 0.1f; mShake.mEyeShake -= mShake.mEyeShake * 0.1f; mShake.field_0x3c -= mShake.field_0x3c * 0.1f; mShake.field_0x40 -= mShake.field_0x40 * 0.1f; } return var_f31; } /* 80453914-80453918 001F14 0004+00 1/1 0/0 0/0 .sdata2 * PatternLengthMax__Q29dCamera_c23@class$3669d_camera_cpp */ // supposed to be some anonymous static class member or something? static const int PatternLengthMax[] = {0x00000004}; // array to make it go in correct section /* 80181000-80181158 17B940 0158+00 0/0 1/1 0/0 .text StartShake__9dCamera_cFlPUcl4cXyz */ int dCamera_c::StartShake(s32 i_length, u8* i_pattern, s32 i_flags, cXyz i_pos) { if (i_length < 0 || i_length > (PatternLengthMax[0] << 3)) { i_length = (PatternLengthMax[0] << 3); } mShake.m_length = i_length; if (i_flags & 0x20) { field_0x6fc &= ~0x20; mBlure.field_0x4 = mBlure.field_0x14; } int var_r31; int var_r28 = i_length >> 3; for (var_r31 = 0; var_r31 < PatternLengthMax[0]; var_r31++) { mShake.field_0x0[var_r31] = mShake.field_0x4[var_r31] = 0; } for (var_r31 = 0; var_r31 < var_r28; var_r31++) { mShake.field_0x0[var_r31] = mShake.field_0x4[var_r31] = i_pattern[var_r31]; } var_r28 = i_length & 7; mShake.field_0x0[var_r31] = (0xFF << (8 - var_r28)) & i_pattern[var_r31]; if (i_length == (PatternLengthMax[0] << 3)) { mShake.field_0x4[var_r31] = mShake.field_0x0[var_r31] | (i_pattern[0] >> var_r28); } else { mShake.field_0x4[var_r31] = mShake.field_0x0[var_r31]; } mShake.m_pos = i_pos.norm(); mShake.field_0x10 = 0; field_0x6fc = i_flags; return 1; } /* 80181158-80181170 17BA98 0018+00 0/0 1/1 0/0 .text StopShake__9dCamera_cFv */ int dCamera_c::StopShake() { mShake.m_length = 0; mShake.field_0x10 = 0; field_0x6fc = 0; return 1; } /* 80181170-801811B8 17BAB0 0048+00 1/1 2/2 10/10 .text StartBlure__9dCamera_cFiP10fopAc_ac_cff */ void dCamera_c::StartBlure(int param_0, fopAc_ac_c* i_actor, f32 i_alpha, f32 i_scale) { mBlure.field_0x14 = param_0; mBlure.mpActor = NULL; mBlure.mAlpha = i_alpha; mBlure.mScale.x = i_scale; mBlure.mScale.y = i_scale; mBlure.mScale.z = 0.0f; mBlure.mpActor = i_actor; mBlure.mPosition.x = 0.5f; mBlure.mPosition.y = 0.5f; mBlure.mPosition.z = 0.0f; mBlure.field_0x8.x = 0; mBlure.field_0x8.y = 0; mBlure.field_0x8.z = 0; mBlure.field_0x4 = param_0; } /* 801811B8-80181208 17BAF8 0050+00 0/0 0/0 1/1 .text ResetBlure__9dCamera_cFv */ void dCamera_c::ResetBlure() { mBlure.mpActor = NULL; mBlure.mAlpha = 0.75f; mBlure.mPosition.x = 0.5f; mBlure.mPosition.y = 0.5f; mBlure.mPosition.z = 0.0f; mBlure.mScale.x = 1.0f; mBlure.mScale.y = 1.0f; mBlure.mScale.z = 0.0f; mBlure.field_0x8.x = 0; mBlure.field_0x8.y = 0; mBlure.field_0x8.z = 0; mBlure.field_0x4 = 0; mBlure.field_0x14 = 1; } /* 80181208-80181210 17BB48 0008+00 0/0 1/1 0/0 .text SetBlureAlpha__9dCamera_cFf */ void dCamera_c::SetBlureAlpha(f32 i_alpha) { mBlure.mAlpha = i_alpha; } /* 80181210-80181220 17BB50 0010+00 0/0 1/1 0/0 .text SetBlureScale__9dCamera_cFfff */ void dCamera_c::SetBlureScale(f32 i_scalex, f32 i_scaley, f32 i_scalez) { mBlure.mScale.x = i_scalex; mBlure.mScale.y = i_scaley; mBlure.mScale.z = i_scalez; } /* 80181220-80181278 17BB60 0058+00 0/0 1/1 0/0 .text SetBlurePosition__9dCamera_cFfff */ void dCamera_c::SetBlurePosition(f32 i_posx, f32 i_posy, f32 i_posz) { SetBlureActor(NULL); mBlure.mPosition.x = i_posx; mBlure.mPosition.y = i_posy; mBlure.mPosition.z = i_posz; } /* 80181278-80181280 -00001 0008+00 0/0 0/0 0/0 .text SetBlureActor__9dCamera_cFP10fopAc_ac_c */ void dCamera_c::SetBlureActor(fopAc_ac_c* i_actor) { mBlure.mpActor = i_actor; } /* ############################################################################################## */ /* 80453918-8045391C 001F18 0004+00 1/1 0/0 0/0 .sdata2 @17392 */ SECTION_SDATA2 static f32 lit_17392 = 230.0f; /* 80181280-80181490 17BBC0 0210+00 2/2 0/0 0/0 .text blureCamera__9dCamera_cFv */ void dCamera_c::blureCamera() { // NONMATCHING } /* 80181490-80181500 17BDD0 0070+00 2/2 0/0 0/0 .text onHorseDush__9dCamera_cFv */ void dCamera_c::onHorseDush() { dComIfGp_getVibration().StartShock(VIBMODE_S_POWER2, 1, cXyz(0.0f, 1.0f, 0.0f)); StartBlure(55, mpPlayerActor, 0.75f, 1.0f); } /* 80181500-80181534 17BE40 0034+00 1/1 1/1 5/5 .text GetForceLockOnActor__9dCamera_cFv */ fopAc_ac_c* dCamera_c::GetForceLockOnActor() { return fopAcM_SearchByID(mLockOnActorID); } /* 80181534-80181560 17BE74 002C+00 0/0 0/0 9/9 .text ForceLockOn__9dCamera_cFP10fopAc_ac_c */ int dCamera_c::ForceLockOn(fopAc_ac_c* i_actor) { mForceLockTimer = 0; mpLockOnActor = i_actor; mLockOnActorID = fopAcM_GetID(i_actor); return 1; } /* 80181560-8018159C 17BEA0 003C+00 1/1 0/0 0/0 .text ForceLockOff__9dCamera_cFUi */ int dCamera_c::ForceLockOff(fpc_ProcID i_id) { if (i_id == mLockOnActorID || i_id == fpcM_ERROR_PROCESS_ID_e) { mLockOnActorID = fpcM_ERROR_PROCESS_ID_e; mpLockOnActor = NULL; mForceLockTimer = 0; return 1; } return 0; } /* 8018159C-801815CC 17BEDC 0030+00 0/0 0/0 7/7 .text ForceLockOff__9dCamera_cFP10fopAc_ac_c */ int dCamera_c::ForceLockOff(fopAc_ac_c* i_actor) { if (i_actor == mpLockOnActor) { mLockOnActorID = fpcM_ERROR_PROCESS_ID_e; mpLockOnActor = NULL; mForceLockTimer = 0; return 1; } return 0; } /* 801815CC-801815F0 17BF0C 0024+00 0/0 0/0 5/5 .text dCam_getAngleY__FP12camera_class */ s16 dCam_getAngleY(camera_class* i_cam) { return i_cam->mCamera.U(); } /* 801815F0-80181614 17BF30 0024+00 0/0 0/0 5/5 .text dCam_getAngleX__FP12camera_class */ s16 dCam_getAngleX(camera_class* i_cam) { return i_cam->mCamera.V(); } /* 80181614-80181630 17BF54 001C+00 0/0 2/2 4/4 .text dCam_getControledAngleY__FP12camera_class */ s16 dCam_getControledAngleY(camera_class* i_cam) { return i_cam->mCamera.U2(); } /* 80181630-80181640 17BF70 0010+00 1/1 1/1 0/0 .text dCam_getCamera__Fv */ camera_class* dCam_getCamera() { return dComIfGp_getCamera(0); } /* 80181640-80181664 17BF80 0024+00 0/0 43/43 91/91 .text dCam_getBody__Fv */ dCamera_c* dCam_getBody() { return &dCam_getCamera()->mCamera; } /* 80181664-80181708 17BFA4 00A4+00 1/1 0/0 0/0 .text preparation__FP20camera_process_class */ static void preparation(camera_process_class* i_this) { camera_class* a_this = (camera_class*)i_this; dCamera_c* camera = &a_this->mCamera; int camera_id = get_camera_id(a_this); dDlst_window_c* window = get_window(camera_id); view_port_class* viewport = window->getViewPort(); f32 aspect = mDoGph_gInf_c::getAspect(); camera->SetWindow(viewport->width, viewport->height); fopCamM_SetAspect(a_this, aspect); if (!daAlink_c::getE3Zhint()) { dComIfGp_offCameraAttentionStatus(camera_id, 0x1002B); } } /* 80181708-80181804 17C048 00FC+00 2/2 0/0 0/0 .text view_setup__FP20camera_process_class */ static void view_setup(camera_process_class* i_this) { camera_class* a_this = (camera_class*)i_this; dDlst_window_c* window = get_window(a_this); view_port_class* viewport = window->getViewPort(); view_class* view = (view_class*)i_this; mDoMtx_lookAt(view->viewMtx, &view->lookat.eye, &view->lookat.center, &view->lookat.up, view->bank); MTXCopy(view->viewMtx, view->viewMtxNoTrans); view->viewMtxNoTrans[0][3] = 0.0f; view->viewMtxNoTrans[1][3] = 0.0f; view->viewMtxNoTrans[2][3] = 0.0f; dComIfGd_setWindow(window); dComIfGd_setViewport(viewport); dComIfGd_setView(view); f32 far; if (getComStat(8)) { far = view->far; } else { far = dStage_stagInfo_GetCullPoint(dComIfGp_getStageStagInfo()); } mDoLib_clipper::setup(view->fovy, view->aspect, view->near, far); } /* 80181804-80181E20 17C144 061C+00 2/2 0/0 0/0 .text store__FP20camera_process_class */ static void store(camera_process_class* param_0) { // NONMATCHING } /* 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; } else { return mUp; } } /* 80181E64-80181E98 17C7A4 0034+00 1/1 1/1 30/30 .text Eye__9dCamera_cFv */ cXyz dCamera_c::Eye() { return mEye + mShake.mEyeShake; } /* 80181E98-80181ECC 17C7D8 0034+00 1/1 1/1 25/25 .text Center__9dCamera_cFv */ cXyz dCamera_c::Center() { return mCenter + mShake.field_0x24; } /* 80181ECC-80181F70 17C80C 00A4+00 1/0 0/0 0/0 .text camera_execute__FP20camera_process_class */ static int camera_execute(camera_process_class* i_this) { camera_class* a_this = (camera_class*)i_this; preparation(i_this); if (dDemo_c::getCamera() != NULL) { a_this->mCamera.ResetView(); } dComIfGp_offCameraAttentionStatus(0, 0x40); if (a_this->mCamera.Active()) { a_this->mCamera.Run(); } else { a_this->mCamera.NotRun(); } a_this->mCamera.CalcTrimSize(); store(i_this); view_setup(i_this); return 1; } /* 80181F70-801821E0 17C8B0 0270+00 1/0 0/0 0/0 .text camera_draw__FP20camera_process_class */ static int camera_draw(camera_process_class* i_this) { camera_class* a_this = (camera_class*)i_this; dCamera_c* body = &((camera_class*)i_this)->mCamera; dDlst_window_c* window = get_window(a_this); view_port_class* viewport = window->getViewPort(); int camera_id = get_camera_id(a_this); int trim_height = body->TrimHeight(); window->setScissor(0.0f, trim_height, 608.0f, 448.0f - trim_height * 2.0f); C_MTXPerspective(i_this->projMtx, i_this->fovy, i_this->aspect, i_this->near, i_this->far); mDoMtx_lookAt(i_this->viewMtx, &i_this->lookat.eye, &i_this->lookat.center, &i_this->lookat.up, i_this->bank); j3dSys.setViewMtx(i_this->viewMtx); cMtx_inverse(i_this->viewMtx, i_this->invViewMtx); Z2GetAudience()->setAudioCamera(i_this->viewMtx, i_this->lookat.eye, i_this->lookat.center, i_this->fovy, i_this->aspect, getComStat(0x80), camera_id, false); dBgS_GndChk gndchk; gndchk.OnWaterGrp(); gndchk.SetPos(&i_this->lookat.eye); f32 cross = dComIfG_Bgsp().GroundCross(&gndchk); if (cross != -1000000000.0f) { if (dComIfG_Bgsp().ChkGrpInf(gndchk, 0x100)) { mDoAud_getCameraMapInfo(6); } else { mDoAud_getCameraMapInfo(dComIfG_Bgsp().GetMtrlSndId(gndchk)); } mDoAud_setCameraGroupInfo(dComIfG_Bgsp().GetGrpSoundId(gndchk)); Vec spDC; spDC.x = i_this->lookat.eye.x; spDC.y = cross; spDC.z = i_this->lookat.eye.z; Z2AudioMgr::getInterface()->setCameraPolygonPos(&spDC); } else { Z2AudioMgr::getInterface()->setCameraPolygonPos(NULL); } MTXCopy(i_this->viewMtx, i_this->viewMtxNoTrans); i_this->viewMtxNoTrans[0][3] = 0.0f; i_this->viewMtxNoTrans[1][3] = 0.0f; i_this->viewMtxNoTrans[2][3] = 0.0f; cMtx_concatProjView(i_this->projMtx, i_this->viewMtx, i_this->projViewMtx); body->Draw(); return 1; } /* 801821E0-80182260 17CB20 0080+00 1/0 0/0 0/0 .text init_phase1__FP12camera_class */ static int init_phase1(camera_class* i_this) { int camera_id = get_camera_id(i_this); dComIfGp_setCamera(camera_id, i_this); fopCamM_SetPrm1(i_this, dComIfGp_getCameraWinID(camera_id)); fopCamM_SetPrm2(i_this, dComIfGp_getCameraPlayer1ID(camera_id)); fopCamM_SetPrm3(i_this, dComIfGp_getCameraPlayer2ID(camera_id)); dComIfGp_setWindowNum(0); i_this->field_0x238 = 0; i_this->field_0x22f = 71; i_this->mCamera.field_0xb0c = 0; return cPhs_NEXT_e; } /* 80182260-80182454 17CBA0 01F4+00 1/0 0/0 0/0 .text init_phase2__FP12camera_class */ static int init_phase2(camera_class* i_this) { camera_process_class* a_this = (camera_process_class*)i_this; dCamera_c* body = &i_this->mCamera; int camera_id = get_camera_id(i_this); i_this->field_0x238++; fopAc_ac_c* player = (fopAc_ac_c*)get_player_actor(i_this); if (player == NULL) { return cPhs_INIT_e; } dBgS_GndChk gndchk; cXyz spA4(player->current.pos); spA4.y += 50.0f; gndchk.SetPos(&spA4); if (dComIfG_Bgsp().GroundCross(&gndchk) == -1000000000.0f) { #if DEBUG if (i_this->field_0x238 < 100) { if (i_this->field_0x238 % 100 == 0 && i_this->field_0x238 != 0) { OS_REPORT("camera: can not found floor... %d\n", i_this->field_0x238); } return cPhs_INIT_e; } OS_REPORT("\ncamera: Warning: give up to get floor info !!\n\n"); #else return cPhs_INIT_e; #endif } fopAcM_setStageLayer(player); dComIfGp_setWindowNum(1); new (body) dCamera_c(i_this); f32 var_f30 = 160000.0f; if (dComIfGp_getStage()->getStagInfo() != NULL) { dStage_stageDt_c* stage_dt = dComIfGp_getStage(); stage_dt->getStagInfo(); var_f30 = stage_dt->getStagInfo()->field_0x4; } get_window(camera_id)->getViewPort(); fopCamM_SetNear(i_this, 1.0f); fopCamM_SetFar(i_this, var_f30); fopCamM_SetFovy(i_this, 30.0f); fopCamM_SetAspect(i_this, mDoGph_gInf_c::getAspect()); fopCamM_SetCenter(i_this, player->current.pos.x, player->current.pos.y, player->current.pos.z); fopCamM_SetBank(i_this, 0); store(a_this); view_setup(a_this); i_this->mCamera.field_0xb0c = 1; i_this->field_0x238 = 0; dComIfGp_getAttention().Init(player, PAD_1); return cPhs_NEXT_e; } /* 80182454-80182484 17CD94 0030+00 1/0 0/0 0/0 .text camera_create__FP12camera_class */ static int camera_create(camera_class* i_this) { static request_of_phase_process_fn l_method[3] = { (request_of_phase_process_fn)init_phase1, (request_of_phase_process_fn)init_phase2, (request_of_phase_process_fn)NULL, }; return dComLbG_PhaseHandler(&i_this->phase_request, l_method, 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; camera->~dCamera_c(); dComIfGp_setCamera(0, NULL); return 1; } /* 801824C0-801824C8 17CE00 0008+00 1/0 0/0 0/0 .text is_camera_delete__FPv */ static int is_camera_delete(void* i_this) { return 1; } /* 801824C8-80182560 17CE08 0098+00 1/1 0/0 0/0 .text Init__14dCamForcusLineFv */ 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; field_0x44.a = 0x60; field_0x4c = 100; field_0x50 = 100; field_0x54 = 100; field_0x58 = 0x50; field_0x5a = 0; field_0x5c = 4; field_0x5e = 4; field_0x68 = 180.0f; field_0x6c = 0.0f; field_0x60 = 180.0f; field_0x64 = 60.0f; } /* 80182560-801825E4 17CEA0 0084+00 1/1 0/0 0/0 .text Draw__14dCamForcusLineFv */ void dCamForcusLine::Draw() { if (field_0x49) { if (field_0x48 == 0) { mEffectLine.initRnd(field_0x4c, field_0x50, field_0x54); } mEffectLine.update(field_0x38, field_0x44, field_0x58, field_0x5a, field_0x5c, field_0x5e, field_0x60, field_0x64, field_0x68, field_0x6c); } } /* 801825E4-801825FC 17CF24 0018+00 2/2 0/0 0/0 .text Off__14dCamForcusLineFv */ bool dCamForcusLine::Off() { field_0x49 = 0; return field_0x49 == 0; } /* 801827EC-801827F4 17D12C 0008+00 1/0 0/0 0/0 .text @20@__dt__14dBgS_CamSphChkFv */ static void func_801827EC() { // NONMATCHING } /* 801827F4-801827FC 17D134 0008+00 1/0 0/0 0/0 .text @36@__dt__14dBgS_CamSphChkFv */ static void func_801827F4() { // NONMATCHING } /* 801827FC-80182804 17D13C 0008+00 1/0 0/0 0/0 .text @72@__dt__14dBgS_CamSphChkFv */ static void func_801827FC() { // NONMATCHING } /* 80182804-8018280C 17D144 0008+00 1/0 0/0 0/0 .text @56@__dt__14dBgS_CamSphChkFv */ static void func_80182804() { // NONMATCHING } /* 8018280C-80182814 17D14C 0008+00 1/1 0/0 0/0 .text getChainGrabActor__9daAlink_cFv */ // void daAlink_c::getChainGrabActor() { void getChainGrabActor__9daAlink_cFv() { // NONMATCHING } /* 80182814-8018283C 17D154 0028+00 1/1 0/0 0/0 .text checkCokkoGlide__9daAlink_cCFv */ // void daAlink_c::checkCokkoGlide() const { void checkCokkoGlide__9daAlink_cCFv() { // NONMATCHING } /* 8018283C-80182870 17D17C 0034+00 1/1 0/0 0/0 .text checkCameraLargeDamage__9daAlink_cCFv */ // void daAlink_c::checkCameraLargeDamage() const { void checkCameraLargeDamage__9daAlink_cCFv() { // NONMATCHING } /* 80182870-80182878 17D1B0 0008+00 1/1 0/0 0/0 .text getHsSubChainTopPos__9daAlink_cCFv */ // void daAlink_c::getHsSubChainTopPos() const { void getHsSubChainTopPos__9daAlink_cCFv() { // NONMATCHING } /* 80182878-80182888 17D1B8 0010+00 2/2 0/0 0/0 .text daAlink_getAlinkActorClass__Fv */ // static void daAlink_getAlinkActorClass() { void daAlink_getAlinkActorClass__Fv() { // NONMATCHING } /* 80182888-8018289C 17D1C8 0014+00 1/1 0/0 0/0 .text checkCutHeadProc__9daAlink_cCFv */ // void daAlink_c::checkCutHeadProc() const { void checkCutHeadProc__9daAlink_cCFv() { // NONMATCHING } /* 8018289C-801828A4 17D1DC 0008+00 1/1 0/0 0/0 .text getRideActor__9daAlink_cFv */ // void daAlink_c::getRideActor() { void getRideActor__9daAlink_cFv() { // NONMATCHING } /* 801828A4-801828D4 17D1E4 0030+00 1/1 0/0 0/0 .text dComIfGs_isTmpBit__FUs */ // static void dComIfGs_isTmpBit(u16 param_0) { void dComIfGs_isTmpBit__FUs() { // NONMATCHING } /* 801828D4-8018291C 17D214 0048+00 1/0 0/0 0/0 .text __dt__14d2DBSplinePathFv */ // d2DBSplinePath::~d2DBSplinePath() { void __dt__14d2DBSplinePathFv() { // NONMATCHING } /* 8018291C-80182920 17D25C 0004+00 1/1 0/0 0/0 .text __ct__Q29dCamera_c10dCamInfo_cFv */ // dCamera_c::dCamInfo_c::dCamInfo_c() { void __ct__Q29dCamera_c10dCamInfo_cFv() { /* empty function */ } /* 80182920-8018295C 17D260 003C+00 2/2 0/0 0/0 .text __dt__Q29dCamera_c10dCamInfo_cFv */ // dCamera_c::dCamInfo_c::~dCamInfo_c() { void __dt__Q29dCamera_c10dCamInfo_cFv() { // NONMATCHING } /* 8018295C-80182964 17D29C 0008+00 1/1 0/0 0/0 .text footHeightOf__9dCamera_cFP10fopAc_ac_c */ void dCamera_c::footHeightOf(fopAc_ac_c* param_0) { // NONMATCHING } /* 80182964-8018296C 17D2A4 0008+00 1/1 0/0 0/0 .text push_any_key__9dCamera_cFv */ // void dCamera_c::push_any_key() { void push_any_key__9dCamera_cFv() { // NONMATCHING } /* 8018296C-80182980 17D2AC 0014+00 1/1 0/0 0/0 .text clrFlag__9dCamera_cFUl */ // void dCamera_c::clrFlag(u32 param_0) { void clrFlag__9dCamera_cFUl() { // NONMATCHING } /* 80182980-80182994 17D2C0 0014+00 4/4 0/0 0/0 .text chkFlag__9dCamera_cFUl */ // void dCamera_c::chkFlag(u32 param_0) { void chkFlag__9dCamera_cFUl() { // NONMATCHING } /* 803BA6E4-803BA6F8 -00001 0014+00 2/0 0/0 0/0 .data method */ SECTION_DATA static void* method[5] = { (void*)camera_create__FP12camera_class, (void*)camera_delete__FP20camera_process_class, (void*)camera_execute__FP20camera_process_class, (void*)is_camera_delete__FPv, (void*)camera_draw__FP20camera_process_class, }; /* 803BA6F8-803BA73C -00001 0044+00 0/0 0/0 1/0 .data g_profile_CAMERA */ SECTION_DATA extern void* g_profile_CAMERA[17] = { (void*)0xFFFFFFFD, (void*)0x000BFFFD, (void*)0x030D0000, (void*)&g_fpcLf_Method, (void*)0x00000D58, (void*)NULL, (void*)NULL, (void*)&g_fopVw_Method, (void*)NULL, (void*)&g_fopCam_Method, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)&method, (void*)NULL, }; /* 803BA73C-803BA798 -00001 0044+18 0/0 0/0 1/0 .data g_profile_CAMERA2 */ SECTION_DATA extern void* g_profile_CAMERA2[17 + 6 /* padding */] = { (void*)0xFFFFFFFD, (void*)0x000BFFFD, (void*)0x030E0000, (void*)&g_fpcLf_Method, (void*)0x00000D58, (void*)NULL, (void*)NULL, (void*)&g_fopVw_Method, (void*)0x00010000, (void*)&g_fopCam_Method, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)&method, (void*)NULL, /* padding */ NULL, NULL, NULL, NULL, NULL, NULL, };