diff --git a/configure.py b/configure.py index 5555c913c8..b0589ccd48 100755 --- a/configure.py +++ b/configure.py @@ -1526,12 +1526,12 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_andsw2"), ActorRel(NonMatching, "d_a_bd"), ActorRel(MatchingFor("GZ2E01"), "d_a_canoe"), - ActorRel(NonMatching, "d_a_cstaF"), + ActorRel(MatchingFor("GZ2E01"), "d_a_cstaF"), ActorRel(NonMatching, "d_a_demo_item"), ActorRel(MatchingFor("GZ2E01"), "d_a_door_bossL1"), ActorRel(Equivalent, "d_a_e_dn"), # weak func order ActorRel(Equivalent, "d_a_e_fm"), - ActorRel(NonMatching, "d_a_e_ga"), + ActorRel(MatchingFor("GZ2E01"), "d_a_e_ga"), ActorRel(NonMatching, "d_a_e_hb"), ActorRel(MatchingFor("GZ2E01"), "d_a_e_nest"), ActorRel(NonMatching, "d_a_e_rd"), @@ -1574,7 +1574,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_obj_mgate"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_nameplate"), ActorRel(NonMatching, "d_a_obj_ornament_cloth"), - ActorRel(NonMatching, "d_a_obj_rope_bridge"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_rope_bridge"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_sWallShutter"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_stick"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_stoneMark"), diff --git a/include/d/actor/d_a_cstaF.h b/include/d/actor/d_a_cstaF.h index d0a1605d5d..ed174bcce7 100644 --- a/include/d/actor/d_a_cstaF.h +++ b/include/d/actor/d_a_cstaF.h @@ -15,15 +15,15 @@ */ class daCstaF_c : public dBgS_MoveBgActor { public: - /* 804DDB48 */ void checkCoverModel(); - /* 804DDBB4 */ void create(); + /* 804DDB48 */ BOOL checkCoverModel(); + /* 804DDBB4 */ int create(); /* 804DE2F8 */ ~daCstaF_c(); /* 804DE558 */ void setRoomInfo(); /* 804DE5F0 */ void setMatrix(); /* 804DE698 */ void posMove(); /* 804DEB60 */ void setCollision(); /* 804DEC14 */ void setAnime(); - /* 804DF0D8 */ void initBrk(u16); + /* 804DF0D8 */ BOOL initBrk(u16); /* 804DF150 */ void initStopBrkBtk(); /* 804DF1A4 */ void initStartBrkBtk(); @@ -31,41 +31,45 @@ public: /* 804DF37C */ virtual int Execute(f32 (**)[3][4]); /* 804DF6E4 */ virtual int Draw(); - cXyz& getBallPos() { return mBallPos; } + cXyz& getBallPos() { return m_ballPos; } + void onPlayerRide() { m_isPlayerRide = true; } - static u8 const m_bckIdxTable[16]; + struct BckTbl { + u16 idx[4]; + }; + static const BckTbl m_bckIdxTable[]; private: - /* 0x5A0 */ const char* mResName; - /* 0x5A4 */ request_of_phase_process_class mPhase; - /* 0x5AC */ J3DModel* field_0x5ac; - /* 0x5B0 */ mDoExt_McaMorfSO* field_0x5b0; - /* 0x5B4 */ J3DModel* field_0x5b4; + /* 0x5A0 */ const char* m_arcName; + /* 0x5A4 */ request_of_phase_process_class m_phase; + /* 0x5AC */ J3DModel* mp_model; + /* 0x5B0 */ mDoExt_McaMorfSO* mp_modelMorf; + /* 0x5B4 */ J3DModel* mp_coverModel; /* 0x5B8 */ J3DAnmTextureSRTKey* m_coverBtk; /* 0x5BC */ J3DAnmTevRegKey* m_coverBrk; - /* 0x5C0 */ mDoExt_btkAnm field_0x5c0; - /* 0x5D8 */ mDoExt_brkAnm field_0x5d8; - /* 0x5F0 */ dBgS_AcchCir mAcchCir[4]; - /* 0x6F0 */ dBgS_StatueAcch mAcch; - /* 0x8C8 */ dCcD_Stts mCcStts; - /* 0x904 */ dCcD_Cyl mCylCc; - /* 0xA40 */ Z2Creature mSound; - /* 0xAD0 */ dPaPo_c field_0xad0; - /* 0xB08 */ s8 mReverb; - /* 0xB09 */ u8 field_0xb09; - /* 0xB0A */ u8 field_0xb0a; - /* 0xB0B */ u8 field_0xb0b; - /* 0xB0C */ u8 field_0xb0c; - /* 0xB0D */ u8 mIsPlayerRide; - /* 0xB0E */ u8 field_0xb0e; - /* 0xB0F */ u8 field_0xb0f; - /* 0xB10 */ u8 mCoverVanishFlg; - /* 0xB12 */ s16 field_0xb12; - /* 0xB14 */ u8 field_0xb14[4]; - /* 0xB18 */ u32 mShadowKey; - /* 0xB1C */ f32 field_0xb1c; - /* 0xB20 */ cXyz field_0xb20; - /* 0xB2C */ cXyz mBallPos; + /* 0x5C0 */ mDoExt_btkAnm m_btk; + /* 0x5D8 */ mDoExt_brkAnm m_brk; + /* 0x5F0 */ dBgS_AcchCir m_acchCir[4]; + /* 0x6F0 */ dBgS_StatueAcch m_acch; + /* 0x8C8 */ dCcD_Stts m_cc_stts; + /* 0x904 */ dCcD_Cyl m_cc_cyl; + /* 0xA40 */ Z2Creature m_sound; + /* 0xAD0 */ dPaPo_c m_poly_eff; + /* 0xB08 */ s8 m_reverb; + /* 0xB09 */ u8 m_type; + /* 0xB0A */ u8 m_action; + /* 0xB0B */ u8 m_swbit; + /* 0xB0C */ u8 m_isStartBrkBtkInit; + /* 0xB0D */ u8 m_isPlayerRide; + /* 0xB0E */ u8 m_mapToolID; + /* 0xB0F */ u8 m_isStop; + /* 0xB10 */ u8 m_coverVanishFlg; + /* 0xB12 */ s16 m_eventId; + /* 0xB14 */ u8 unk_0xb14[4]; + /* 0xB18 */ u32 m_shadowKey; + /* 0xB1C */ f32 m_lastGroundH; + /* 0xB20 */ cXyz m_playerPos; + /* 0xB2C */ cXyz m_ballPos; }; #endif /* D_A_CSTAF_H */ diff --git a/include/d/actor/d_a_e_ga.h b/include/d/actor/d_a_e_ga.h index 0988002005..aaf31d62b6 100644 --- a/include/d/actor/d_a_e_ga.h +++ b/include/d/actor/d_a_e_ga.h @@ -4,8 +4,19 @@ #include "f_op/f_op_actor_mng.h" struct ga_s { - /* 804FBAB8 */ ~ga_s(); - /* 804FBAF4 */ ga_s(); + /* 0x00 */ J3DModel* model; + /* 0x04 */ cXyz position; + /* 0x10 */ cXyz pos_target; + /* 0x1C */ cXyz field_0x1c; + /* 0x28 */ csXyz rotation; + /* 0x2E */ csXyz rot_target; + /* 0x34 */ u8 field_0x34[0x38 - 0x34]; + /* 0x38 */ f32 size; + /* 0x3C */ f32 field_0x3c; + /* 0x40 */ s8 initialized; + /* 0x41 */ u8 field_0x41[0x44 - 0x41]; + /* 0x44 */ s16 field_0x44; + /* 0x46 */ u8 move_timer; }; /** @@ -16,16 +27,28 @@ struct ga_s { * @details * */ -class e_ga_class : public fopEn_enemy_c { -private: - /* 0x5ac */ u8 field_0x5ac[0x4d7c - 0x5ac]; +class e_ga_class { +public: + /* 0x0000 */ fopAc_ac_c actor; + /* 0x0568 */ request_of_phase_process_class phase; + /* 0x0570 */ u8 prm0; + /* 0x0571 */ u8 prm1; + /* 0x0572 */ u8 prm2; + /* 0x0574 */ ga_s ga_s[256]; + /* 0x4D74 */ int ga_num; + /* 0x4D78 */ u8 HIOInit; + /* 0x4D79 */ u8 initialized; }; STATIC_ASSERT(sizeof(e_ga_class) == 0x4d7c); class daE_Ga_HIO_c { +public: /* 804FB0EC */ daE_Ga_HIO_c(); - /* 804FBAF8 */ ~daE_Ga_HIO_c(); + /* 804FBAF8 */ virtual ~daE_Ga_HIO_c() {} + + /* 0x4 */ s8 id; + /* 0x8 */ f32 base_size; }; diff --git a/include/d/actor/d_a_obj_dust.h b/include/d/actor/d_a_obj_dust.h index 9dd15153f4..5ff4ea8be3 100644 --- a/include/d/actor/d_a_obj_dust.h +++ b/include/d/actor/d_a_obj_dust.h @@ -28,31 +28,32 @@ public: /* 80BE24F8 */ int Check_RideOn(); /* 80BE2708 */ void initBaseMtx(); /* 80BE2734 */ void setBaseMtx(); - /* 80BE2A70 */ int CreateHeap(); + + inline int create(); + /* 80BE2A70 */ inline int CreateHeap(); + /* 80BE2AE8 */ int Create(); /* 80BE2B30 */ int Execute(Mtx**); /* 80BE2E9C */ int Draw(); /* 80BE2F40 */ int Delete(); - inline int create(); - - /* 0x5a0 */ f32 field_0x5a0; - /* 0x5a4 */ f32 field_0x5a4; - /* 0x5a8 */ f32 field_0x5a8; - /* 0x5ac */ s16 field_0x5ac; - /* 0x5ae */ u8 field_0x5ae[0x5c4 - 0x5ae]; - /* 0x5c4 */ s16 field_0x5c4; - /* 0x5c6 */ s16 field_0x5c6; - /* 0x5c8 */ s16 field_0x5c8; - /* 0x5ca */ u8 field_0x5ca[0x5cc - 0x5ca]; - /* 0x5cc */ s16 field_0x5cc; - /* 0x5ce */ u8 field_0x5ce[0x5d0 - 0x5ce]; - /* 0x5d0 */ f32 field_0x5d0; - /* 0x5d4 */ u8 field_0x5d4[0x5e1 - 0x5d4]; - /* 0x5e1 */ bool mYmbFlag; - /* 0x5e4 */ dCcD_Stts mStts; + /* 0x5A0 */ f32 mRideOscillationSpeed; + /* 0x5A4 */ f32 mRideIntensity; + /* 0x5A8 */ f32 mRideBounce; + /* 0x5AC */ s16 mRideAngleAmplitude; + /* 0x5AE */ u8 field_0x5ae[0x5BC - 0x5AE]; + /* 0x5BC */ csXyz field_0x5bc; + /* 0x5C2 */ u8 field_0x5c2[0x5C4 - 0x5C2]; + /* 0x5C4 */ s16 mRideOscillationPhaseX; + /* 0x5C6 */ s16 mRideOscillationPhaseZ; + /* 0x5C8 */ csXyz mRideAngle; + /* 0x5D0 */ f32 mOffsetY; + /* 0x5D4 */ cXyz field_0x5d4; + /* 0x5E0 */ u8 field_0x5e0; + /* 0x5E1 */ bool mYmbFlag; + /* 0x5E4 */ dCcD_Stts mStts; /* 0x620 */ J3DModel* mpModel; - /* 0x624 */ u8 field_0x624[4]; + /* 0x624 */ u8 field_0x624[0x628 - 0x624]; /* 0x628 */ request_of_phase_process_class mPhaseReq; /* 0x630 */ bool mRideOnFlag; /* 0x634 */ dBgS_AcchCir mAcchCir; diff --git a/include/d/actor/d_a_obj_rope_bridge.h b/include/d/actor/d_a_obj_rope_bridge.h index 2dc7b154da..6b57a3a811 100644 --- a/include/d/actor/d_a_obj_rope_bridge.h +++ b/include/d/actor/d_a_obj_rope_bridge.h @@ -2,6 +2,8 @@ #define D_A_OBJ_ROPE_BRIDGE_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_cc_d.h" /** * @ingroup actors-objects @@ -11,21 +13,18 @@ * @details * */ -class daObjRBridge_c : public fopAc_ac_c { +class daObjRBridge_c : public dBgS_MoveBgActor { public: /* 80595E38 */ void initBaseMtx(); /* 80595ED8 */ void setBaseMtx(); - /* 80595F84 */ void checkE3Special(); + /* 80595F84 */ BOOL checkE3Special(); /* 80595FE0 */ void setStPos(); /* 8059616C */ void initLinePos(); /* 805963C4 */ void setLinePos(); /* 80596768 */ void getLinePosSt(cXyz*); /* 805967E4 */ void getLinePosBrg(int, cXyz*); - /* 8059689C */ void checkTight(); - /* 805969FC */ void Create(); - /* 80596B88 */ void CreateHeap(); - /* 80596DEC */ void create1st(); - /* 80596EBC */ void Execute(f32 (**)[3][4]); + /* 8059689C */ BOOL checkTight(); + /* 80596DEC */ int create1st(); /* 80596FA8 */ void action(); /* 8059715C */ void init_wait(); /* 80597170 */ void mode_wait(); @@ -33,12 +32,43 @@ public: /* 805973E4 */ void mode_cut(); /* 805975E8 */ void init_end(); /* 805975F4 */ void mode_end(); - /* 805975F8 */ void Draw(); - /* 805977D0 */ void checkHimoCulling(); - /* 805978BC */ void Delete(); + /* 805977D0 */ BOOL checkHimoCulling(); + + /* 80596B88 */ virtual int CreateHeap(); + /* 805969FC */ virtual int Create(); + /* 80596EBC */ virtual int Execute(Mtx**); + /* 805975F8 */ virtual int Draw(); + /* 805978BC */ virtual int Delete(); + + u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); } + u8 getSwbit2() { return fopAcM_GetParamBit(this, 24, 8); } + u8 getType() { return fopAcM_GetParamBit(this, 16, 2); } private: - /* 0x568 */ u8 field_0x568[0xb6c - 0x568]; + /* 0x5A0 */ request_of_phase_process_class mPhase; + /* 0x5A8 */ request_of_phase_process_class mRopePhase; + /* 0x5B0 */ J3DModel* mpBrgModel; + /* 0x5B4 */ J3DModel* mpStopModel; + /* 0x5B8 */ dCcD_Stts mCcStts; + /* 0x5F4 */ dCcD_Cps mCcCps[2]; + /* 0x87C */ dCcD_Sph mCcSph; + /* 0x9B4 */ dCcD_Sph mCcSph2; + /* 0xAEC */ u8 field_0xAEC[0xAF0 - 0xAEC]; + /* 0xAF0 */ u8 mType; + /* 0xAF1 */ u8 mRopeSegmentNum; + /* 0xAF2 */ u8 mMode; + /* 0xAF3 */ s8 mFallTimer; + /* 0xAF4 */ u8 field_0xaf4; + /* 0xAF5 */ u8 mHideRope; + /* 0xAF8 */ f32 field_0xaf8; + /* 0xAFC */ mDoExt_3DlineMat1_c* mpLineMat[2]; + /* 0xB04 */ cXyz* field_0xb04; + /* 0xB08 */ u8 field_0xb08[2]; + /* 0xB0C */ cXyz mStopPos; + /* 0xB18 */ s16 field_0xb18; + /* 0xB1A */ s16 field_0xb1a; + /* 0xB1C */ Mtx mMtx; + /* 0xB4C */ Z2SoundObjSimple mSound; }; STATIC_ASSERT(sizeof(daObjRBridge_c) == 0xb6c); diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index d3ea759835..6d4a22ec7c 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -580,7 +580,7 @@ f32 fopAcM_searchActorDistanceXZ2(const fopAc_ac_c* i_actorA, const fopAc_ac_c* BOOL fopAcM_rollPlayerCrash(fopAc_ac_c const* i_crashActor, f32 i_range, u32 i_flag, f32 i_max_y, f32 i_min_y, BOOL param_5, f32 param_6); -s32 fopAcM_checkCullingBox(f32[3][4], f32, f32, f32, f32, f32, f32); +bool fopAcM_checkCullingBox(f32[3][4], f32, f32, f32, f32, f32, f32); s32 fopAcM_cullingCheck(const fopAc_ac_c* i_actor); s32 fopAcM_orderTalkEvent(fopAc_ac_c* i_actorA, fopAc_ac_c* i_actorB, u16 i_priority, u16 i_flag); s32 fopAcM_orderTalkItemBtnEvent(u16 i_eventType, fopAc_ac_c* i_actorA, fopAc_ac_c* i_actorB, @@ -829,6 +829,7 @@ public: static dBgS_ObjLinChk* getLineCheck() { return &mLineCheck; } static bool checkMoveBG() { return dComIfG_Bgsp().ChkMoveBG(mLineCheck); } static cXyz* getCrossP() { return mLineCheck.GetCrossP(); } + static cXyz& getCross() { return mLineCheck.GetCross(); } static bool lineCheck(const cXyz*, const cXyz*, const fopAc_ac_c*); static bool getTriPla(cM3dGPla* o_tri) { return dComIfG_Bgsp().GetTriPla(mLineCheck, o_tri); } static s32 getWallCode() { return dComIfG_Bgsp().GetWallCode(mLineCheck); } diff --git a/src/d/actor/d_a_cstaF.cpp b/src/d/actor/d_a_cstaF.cpp index acea4fcff2..9520e9fffb 100644 --- a/src/d/actor/d_a_cstaF.cpp +++ b/src/d/actor/d_a_cstaF.cpp @@ -4,350 +4,91 @@ */ #include "d/actor/d_a_cstaF.h" -#include "dol2asm.h" +#include "d/actor/d_a_alink.h" +#include "d/actor/d_a_crod.h" +#include "d/d_bg_w.h" -// -// Forward References: -// - -extern "C" static void daCstaF_rideCB__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c(); -extern "C" void CreateHeap__9daCstaF_cFv(); -extern "C" void checkCoverModel__9daCstaF_cFv(); -extern "C" void create__9daCstaF_cFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__15dBgS_StatueAcchFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" static void daCstaF_Create__FP10fopAc_ac_c(); -extern "C" void __dt__9daCstaF_cFv(); -extern "C" static void daCstaF_Delete__FP9daCstaF_c(); -extern "C" void setRoomInfo__9daCstaF_cFv(); -extern "C" void setMatrix__9daCstaF_cFv(); -extern "C" void posMove__9daCstaF_cFv(); -extern "C" void __dt__8cM3dGPlaFv(); -extern "C" void setCollision__9daCstaF_cFv(); -extern "C" void setAnime__9daCstaF_cFv(); -extern "C" void initBrk__9daCstaF_cFUs(); -extern "C" void initStopBrkBtk__9daCstaF_cFv(); -extern "C" void initStartBrkBtk__9daCstaF_cFv(); -extern "C" void Execute__9daCstaF_cFPPA3_A4_f(); -extern "C" static void daCstaF_Execute__FP9daCstaF_c(); -extern "C" void Draw__9daCstaF_cFv(); -extern "C" static void daCstaF_Draw__FP9daCstaF_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __sinit_d_a_cstaF_cpp(); -extern "C" static void func_804DF89C(); -extern "C" static void func_804DF8A4(); -extern "C" u8 const m_bckIdxTable__9daCstaF_c[16]; - -// -// External References: -// - -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void play__14mDoExt_baseAnmFv(); -extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss(); -extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef(); -extern "C" void init__13mDoExt_brkAnmFP16J3DMaterialTableP15J3DAnmTevRegKeyiifss(); -extern "C" void entry__13mDoExt_brkAnmFP16J3DMaterialTablef(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_modelEntryDL__FP8J3DModel(); -extern "C" void setMorf__13mDoExt_morf_cFf(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff(); -extern "C" void play__16mDoExt_McaMorfSOFUlSc(); -extern "C" void modelCalc__16mDoExt_McaMorfSOFv(); -extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_orderOtherEventId__FP10fopAc_ac_csUcUsUsUs(); -extern "C" void fopAcM_getPolygonAngle__FPC8cM3dGPlas(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void -dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj(); -extern "C" void isEventBit__11dSv_event_cCFUs(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cUc(); -extern "C" void endCheck__16dEvent_manager_cFs(); -extern "C" void -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void init__7dPaPo_cFP9dBgS_Acchff(); -extern "C" void setEffectCenter__7dPaPo_cFPC12dKy_tevstr_cPC4cXyzUlUlPC4cXyzPC5csXyzPC4cXyzScff(); -extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -extern "C" void GetPolyColor__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void GetRoomId__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP10fopAc_ac_ciP12dBgS_AcchCir(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool Create__16dBgS_MoveBgActorFv(); -extern "C" bool Delete__16dBgS_MoveBgActorFv(); -extern "C" bool IsDelete__16dBgS_MoveBgActorFv(); -extern "C" bool ToFore__16dBgS_MoveBgActorFv(); -extern "C" bool ToBack__16dBgS_MoveBgActorFv(); -extern "C" void -MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f(); -extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv(); -extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv(); -extern "C" void SetStatue__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Move__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitGObj__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObjSe__12dCcD_GObjInfFv(); -extern "C" void getHitSeID__12dCcD_GObjInfFUci(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void StartCAt__8dCcD_CylFR4cXyz(); -extern "C" void MoveCAt__8dCcD_CylFR4cXyz(); -extern "C" void simpleAnmPlay__9daAlink_cFP10J3DAnmBase(); -extern "C" void getCopyRodBallDisMax__9daAlink_cCFv(); -extern "C" void getCopyRodControllActor__9daAlink_cFv(); -extern "C" void clearData__16daPy_actorKeep_cFv(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void dKy_pol_sound_get__FPC13cBgS_PolyInfo(); -extern "C" void ClrCcMove__9cCcD_SttsFv(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void atan2sX_Z__4cXyzCFv(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __ct__10Z2CreatureFv(); -extern "C" void __dt__10Z2CreatureFv(); -extern "C" void init__10Z2CreatureFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void checkPass__12J3DFrameCtrlFf(); -extern "C" void searchUpdateMaterialID__19J3DAnmTextureSRTKeyFP12J3DModelData(); -extern "C" void searchUpdateMaterialID__15J3DAnmTevRegKeyFP12J3DModelData(); -extern "C" void entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey(); -extern "C" void entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey(); -extern "C" void __destroy_arr(); -extern "C" void __construct_array(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__16dBgS_MoveBgActor[10]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; - -// -// Declarations: -// +enum daCstaF_Action { + ACTION_WAIT, + ACTION_WALK, + ACTION_SWING, + ACTION_FALL, +}; /* 804DD958-804DD978 000078 0020+00 1/1 0/0 0/0 .text * daCstaF_rideCB__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ -static void daCstaF_rideCB(dBgW* param_0, fopAc_ac_c* param_1, fopAc_ac_c* param_2) { - // NONMATCHING +static void daCstaF_rideCB(dBgW* i_bgw, fopAc_ac_c* i_this, fopAc_ac_c* i_rideActor) { + if (i_rideActor == (fopAc_ac_c*)daPy_getLinkPlayerActorClass()) { + ((daCstaF_c*)i_this)->onPlayerRide(); + } } -/* ############################################################################################## */ /* 804DF8B8-804DF8C4 000000 000C+00 7/7 0/0 0/0 .rodata @3765 */ -SECTION_RODATA static u8 const lit_3765[12] = { +static u8 const lit_3765[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -COMPILER_STRIP_GATE(0x804DF8B8, &lit_3765); /* 804DF8C4-804DF8CC 00000C 0006+02 0/1 0/0 0/0 .rodata l_arcNameF */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_arcNameF[6 + 2 /* padding */] = { - 0x43, - 0x73, - 0x74, - 0x61, - 0x46, - 0x00, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x804DF8C4, &l_arcNameF); -#pragma pop +static const char l_arcNameF[] = "CstaF"; /* 804DF8CC-804DF8D4 000014 0007+01 0/2 0/0 0/0 .rodata l_arcNameFB */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_arcNameFB[7 + 1 /* padding */] = { - 0x43, - 0x73, - 0x74, - 0x61, - 0x46, - 0x42, - 0x00, - /* padding */ - 0x00, -}; -COMPILER_STRIP_GATE(0x804DF8CC, &l_arcNameFB); -#pragma pop +static const char l_arcNameFB[] = "CstaFB"; /* 804DF8D4-804DF8DC 00001C 0008+00 1/1 0/0 0/0 .rodata l_spStageName */ -SECTION_RODATA static u8 const l_spStageName[8] = { - 0x52, 0x5F, 0x53, 0x50, 0x32, 0x30, 0x39, 0x00, -}; -COMPILER_STRIP_GATE(0x804DF8D4, &l_spStageName); +static const char l_spStageName[8] = "R_SP209"; /* 804DF8DC-804DF8EC 000024 0010+00 0/2 0/0 0/0 .rodata m_bckIdxTable__9daCstaF_c */ -#pragma push -#pragma force_active on -SECTION_RODATA u8 const daCstaF_c::m_bckIdxTable[16] = { - 0x00, 0x09, 0x00, 0x09, 0x00, 0x08, 0x00, 0x07, 0x00, 0x09, 0x00, 0x09, 0x00, 0x08, 0x00, 0x07, +const daCstaF_c::BckTbl daCstaF_c::m_bckIdxTable[] = { + {9, 9, 8, 7}, + {9, 9, 8, 7} }; -COMPILER_STRIP_GATE(0x804DF8DC, &daCstaF_c::m_bckIdxTable); -#pragma pop - -/* 804DF8EC-804DF8FC 000034 0010+00 0/1 0/0 0/0 .rodata dataTbl$4160 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const dataTbl[16] = { - 0x00, 0x0C, 0x00, 0x09, 0x00, 0x10, 0x00, 0x13, 0x00, 0x0C, 0x00, 0x09, 0x00, 0x11, 0x00, 0x15, -}; -COMPILER_STRIP_GATE(0x804DF8EC, &dataTbl); -#pragma pop - -/* 804DF8FC-804DF900 000044 0004+00 1/7 0/0 0/0 .rodata @4205 */ -SECTION_RODATA static u8 const lit_4205[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x804DF8FC, &lit_4205); - -/* 804DF900-804DF904 000048 0004+00 1/8 0/0 0/0 .rodata @4206 */ -SECTION_RODATA static f32 const lit_4206 = 1.0f; -COMPILER_STRIP_GATE(0x804DF900, &lit_4206); /* 804DD978-804DDB48 000098 01D0+00 1/0 0/0 0/0 .text CreateHeap__9daCstaF_cFv */ int daCstaF_c::CreateHeap() { - // NONMATCHING + struct data { + u16 bmd_idx; + u16 bck_idx; + u16 brk_idx; + u16 btk_idx; + }; + static const data dataTbl[] = { + {12, 9, 16, 19}, + {12, 9, 17, 21}, + }; + + const data* data_p = &dataTbl[m_type]; + + void* pbck = dComIfG_getObjectRes(m_arcName, data_p->bck_idx); + mp_modelMorf = new mDoExt_McaMorfSO((J3DModelData*)dComIfG_getObjectRes(m_arcName, data_p->bmd_idx), NULL, NULL, (J3DAnmTransform*)pbck, 0, 0.0f, 0, -1, &m_sound, 0x80000, 0x11000284); + if (mp_modelMorf == NULL || mp_modelMorf->getModel() == NULL) { + return 0; + } + + mp_model = mp_modelMorf->getModel(); + if (!initBrk(data_p->brk_idx)) { + return 0; + } + + void* pbtk = dComIfG_getObjectRes(m_arcName, data_p->btk_idx); + if (!m_btk.init(mp_model->getModelData(), (J3DAnmTextureSRTKey*)pbtk, 1, 0, 1.0f, 0, -1)) { + return 0; + } + + if (m_arcName == l_arcNameFB && checkCoverModel()) { + mp_coverModel = mDoExt_J3DModel__create((J3DModelData*)dComIfG_getObjectRes(m_arcName, 0xD), 0x80000, 0x11000284); + if (mp_coverModel == NULL) { + return 0; + } + } + + return 1; } /* 804DDB48-804DDBB4 000268 006C+00 2/2 0/0 0/0 .text checkCoverModel__9daCstaF_cFv */ -void daCstaF_c::checkCoverModel() { - // NONMATCHING +BOOL daCstaF_c::checkCoverModel() { + return !dComIfGs_isEventBit(0x2540) && strcmp(dComIfGp_getStartStageName(), l_spStageName) == 0; } -/* ############################################################################################## */ -/* 804DF904-804DF908 00004C 0004+00 0/1 0/0 0/0 .rodata @4359 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4359 = 0x41F0147B; -COMPILER_STRIP_GATE(0x804DF904, &lit_4359); -#pragma pop - -/* 804DF908-804DF90C 000050 0004+00 0/1 0/0 0/0 .rodata @4360 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4360 = 80.0f; -COMPILER_STRIP_GATE(0x804DF908, &lit_4360); -#pragma pop - -/* 804DF90C-804DF910 000054 0004+00 0/1 0/0 0/0 .rodata @4361 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4361 = 160.0f; -COMPILER_STRIP_GATE(0x804DF90C, &lit_4361); -#pragma pop - -/* 804DF910-804DF914 000058 0004+00 0/1 0/0 0/0 .rodata @4362 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4362 = 280.0f; -COMPILER_STRIP_GATE(0x804DF910, &lit_4362); -#pragma pop - -/* 804DF914-804DF918 00005C 0004+00 0/1 0/0 0/0 .rodata @4363 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4363 = 400.0f; -COMPILER_STRIP_GATE(0x804DF914, &lit_4363); -#pragma pop - -/* 804DF918-804DF91C 000060 0004+00 0/1 0/0 0/0 .rodata @4364 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4364 = 475.0f; -COMPILER_STRIP_GATE(0x804DF918, &lit_4364); -#pragma pop - -/* 804DF91C-804DF920 000064 0004+00 0/1 0/0 0/0 .rodata @4365 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4365 = 450.0f; -COMPILER_STRIP_GATE(0x804DF91C, &lit_4365); -#pragma pop - -/* 804DF920-804DF924 000068 0004+00 0/1 0/0 0/0 .rodata @4366 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4366 = -475.0f; -COMPILER_STRIP_GATE(0x804DF920, &lit_4366); -#pragma pop - -/* 804DF924-804DF928 00006C 0004+00 0/1 0/0 0/0 .rodata @4367 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4367 = -8.0f; -COMPILER_STRIP_GATE(0x804DF924, &lit_4367); -#pragma pop - -/* 804DF928-804DF92C 000070 0004+00 0/1 0/0 0/0 .rodata @4368 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4368 = -100.0f; -COMPILER_STRIP_GATE(0x804DF928, &lit_4368); -#pragma pop - -/* 804DF92C-804DF930 000074 0004+00 0/2 0/0 0/0 .rodata @4369 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4369 = 30.0f; -COMPILER_STRIP_GATE(0x804DF92C, &lit_4369); -#pragma pop - -/* 804DF930-804DF938 000078 0008+00 0/3 0/0 0/0 .rodata @4371 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4371[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804DF930, &lit_4371); -#pragma pop - /* 804DF9A0-804DF9E4 000000 0044+00 1/1 0/0 0/0 .data l_cylSrc */ static dCcD_SrcCyl l_cylSrc = { { @@ -363,410 +104,514 @@ static dCcD_SrcCyl l_cylSrc = { } // mCyl }; -/* 804DF9E4-804DFA04 -00001 0020+00 1/0 0/0 0/0 .data l_daCstaF_Method */ -static actor_method_class l_daCstaF_Method = { - (process_method_func)daCstaF_Create__FP10fopAc_ac_c, - (process_method_func)daCstaF_Delete__FP9daCstaF_c, - (process_method_func)daCstaF_Execute__FP9daCstaF_c, - 0, - (process_method_func)daCstaF_Draw__FP9daCstaF_c, -}; - -/* 804DFA04-804DFA34 -00001 0030+00 0/0 0/0 1/0 .data g_profile_CSTAF */ -extern actor_process_profile_definition g_profile_CSTAF = { - fpcLy_CURRENT_e, // mLayerID - 3, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_CSTAF, // mProcName - &g_fpcLf_Method.base, // sub_method - 0x00000B38, // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 272, // mPriority - &l_daCstaF_Method, // sub_method - 0x00040520, // mStatus - fopAc_ENV_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 804DFA34-804DFA40 000094 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGPla */ -SECTION_DATA extern void* __vt__8cM3dGPla[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGPlaFv, -}; - -/* 804DFA40-804DFA4C 0000A0 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; - -/* 804DFA4C-804DFA58 0000AC 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 804DFA58-804DFA64 0000B8 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 804DFA64-804DFA70 0000C4 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 804DFA70-804DFA7C 0000D0 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 804DFA7C-804DFAA0 0000DC 0024+00 3/3 0/0 0/0 .data __vt__15dBgS_StatueAcch */ -SECTION_DATA extern void* __vt__15dBgS_StatueAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__15dBgS_StatueAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_804DF8A4, - (void*)NULL, - (void*)NULL, - (void*)func_804DF89C, -}; - -/* 804DFAA0-804DFAAC 000100 000C+00 3/3 0/0 0/0 .data __vt__12J3DFrameCtrl */ -SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12J3DFrameCtrlFv, -}; - -/* 804DFAAC-804DFAD4 00010C 0028+00 2/2 0/0 0/0 .data __vt__9daCstaF_c */ -SECTION_DATA extern void* __vt__9daCstaF_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__9daCstaF_cFv, - (void*)Create__16dBgS_MoveBgActorFv, - (void*)Execute__9daCstaF_cFPPA3_A4_f, - (void*)Draw__9daCstaF_cFv, - (void*)Delete__16dBgS_MoveBgActorFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - /* 804DDBB4-804DE0C4 0002D4 0510+00 1/1 0/0 0/0 .text create__9daCstaF_cFv */ -void daCstaF_c::create() { - // NONMATCHING -} +int daCstaF_c::create() { + fopAcM_SetupActor(this, daCstaF_c); -/* 804DE0C4-804DE10C 0007E4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} + m_type = fopAcM_GetParam(this) & 0xF; + if (m_type >= 2) { + m_type = 0; + } -/* 804DE10C-804DE154 00082C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} + m_swbit = (fopAcM_GetParam(this) >> 4); + m_mapToolID = (fopAcM_GetParam(this) >> 12); + m_eventId = dComIfGp_getEventManager().getEventIdx(this, m_mapToolID); -/* 804DE154-804DE1B0 000874 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} + u16 dzb_id; + u32 heap_size = 0xD40; + if (m_type == 0) { + m_arcName = l_arcNameF; + dzb_id = 22; + } else { + m_arcName = l_arcNameFB; + dzb_id = 25; + if (checkCoverModel()) { + heap_size = 0x1700; + } + } -/* 804DE1B0-804DE220 0008D0 0070+00 3/2 0/0 0/0 .text __dt__15dBgS_StatueAcchFv */ -// dBgS_StatueAcch::~dBgS_StatueAcch() { -extern "C" void __dt__15dBgS_StatueAcchFv() { - // NONMATCHING -} + int phase_state = dComIfG_resLoad(&m_phase, m_arcName); + if (phase_state == cPhs_COMPLEATE_e) { + phase_state = MoveBGCreate(m_arcName, dzb_id, dBgS_MoveBGProc_TypicalRotY, heap_size, NULL); + if (phase_state != cPhs_COMPLEATE_e) { + return phase_state; + } -/* 804DE220-804DE290 000940 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -// dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" void __dt__12dBgS_AcchCirFv() { - // NONMATCHING -} + mp_modelMorf->setMorf(1.0f); + m_action = ACTION_WAIT; + mp_model->setBaseScale(scale); + mp_modelMorf->play(0, 0); + + m_cc_cyl.Set(l_cylSrc); + m_cc_cyl.SetStts(&m_cc_stts); + m_cc_cyl.StartCAt(current.pos); -/* 804DE290-804DE2D8 0009B0 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -// J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" void __dt__12J3DFrameCtrlFv() { - // NONMATCHING + fopAcM_SetMtx(this, mp_model->getBaseTRMtx()); + m_lastGroundH = current.pos.y; + + m_acchCir[0].SetWall(30.01f, 80.0f); + m_acchCir[1].SetWall(160.0f, 80.0f); + m_acchCir[2].SetWall(280.0f, 80.0f); + m_acchCir[3].SetWall(400.0f, 80.0f); + + m_cc_stts.Init(255, 0, this); + + fopAcM_SetMax(this, 475.0f, 450.0f, 475.0f); + fopAcM_SetMin(this, -475.0f, 0.0f, -475.0f); + + gravity = -8.0f; + maxFallSpeed = -100.0f; + mpBgW->SetRideCallback(daCstaF_rideCB); + m_acch.Set(this, 4, m_acchCir); + model = mp_model; + + initStopBrkBtk(); + m_brk.setFrame(m_brk.getEndFrame()); + + m_acch.CrrPos(dComIfG_Bgsp()); + setMatrix(); + setRoomInfo(); + + if (mp_coverModel != NULL) { + J3DModelData* coverModelData = mp_coverModel->getModelData(); + mp_coverModel->setBaseScale(scale); + mp_coverModel->setBaseTRMtx(mp_model->getBaseTRMtx()); + + m_coverBtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(m_arcName, 0x16); + JUT_ASSERT(367, m_coverBtk); + m_coverBtk->searchUpdateMaterialID(coverModelData); + m_coverBtk->setFrame(0.0f); + coverModelData->entryTexMtxAnimator(m_coverBtk); + + m_coverBrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(m_arcName, 0x12); + JUT_ASSERT(376, m_coverBrk); + m_coverBrk->searchUpdateMaterialID(coverModelData); + m_coverBrk->setFrame(0.0f); + coverModelData->entryTevRegAnimator(m_coverBrk); + + m_cc_cyl.SetTgType(0xD87AFDDF); + } + + m_playerPos = daPy_getLinkPlayerActorClass()->current.pos; + m_poly_eff.init(&m_acch, 30.0f, m_cc_cyl.GetH()); + m_sound.init(¤t.pos, &eyePos, 4, 1); + } + + return phase_state; } /* 804DE2D8-804DE2F8 0009F8 0020+00 1/0 0/0 0/0 .text daCstaF_Create__FP10fopAc_ac_c */ -static void daCstaF_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daCstaF_Create(fopAc_ac_c* i_this) { + return ((daCstaF_c*)i_this)->create(); } /* 804DE2F8-804DE51C 000A18 0224+00 1/1 0/0 0/0 .text __dt__9daCstaF_cFv */ daCstaF_c::~daCstaF_c() { - // NONMATCHING + m_sound.deleteObject(); + + if (mp_modelMorf != NULL) { + mp_modelMorf->stopZelAnime(); + } + + dComIfG_resDelete(&m_phase, m_arcName); } /* 804DE51C-804DE558 000C3C 003C+00 1/0 0/0 0/0 .text daCstaF_Delete__FP9daCstaF_c */ -static void daCstaF_Delete(daCstaF_c* param_0) { - // NONMATCHING +static int daCstaF_Delete(daCstaF_c* a_this) { + a_this->MoveBGDelete(); + a_this->~daCstaF_c(); + return 1; } -/* ############################################################################################## */ -/* 804DF938-804DF93C 000080 0004+00 1/3 0/0 0/0 .rodata @4543 */ -SECTION_RODATA static f32 const lit_4543 = -1000000000.0f; -COMPILER_STRIP_GATE(0x804DF938, &lit_4543); - /* 804DE558-804DE5F0 000C78 0098+00 2/2 0/0 0/0 .text setRoomInfo__9daCstaF_cFv */ void daCstaF_c::setRoomInfo() { - // NONMATCHING -} + int room_no; + if (m_acch.GetGroundH() != -1000000000.0f) { + room_no = dComIfG_Bgsp().GetRoomId(m_acch.m_gnd); + tevStr.YukaCol = dComIfG_Bgsp().GetPolyColor(m_acch.m_gnd); + } else { + room_no = dComIfGp_roomControl_getStayNo(); + } -/* ############################################################################################## */ -/* 804DF93C-804DF948 000084 000C+00 1/1 0/0 0/0 .rodata fieldLocalBallPos$4547 */ -SECTION_RODATA static u8 const fieldLocalBallPos[12] = { - 0x00, 0x00, 0x00, 0x00, 0x43, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804DF93C, &fieldLocalBallPos); + tevStr.room_no = room_no; + m_reverb = dComIfGp_getReverb(room_no); + m_cc_stts.SetRoomId(room_no); + fopAcM_SetRoomNo(this, room_no); +} /* 804DE5F0-804DE698 000D10 00A8+00 2/2 0/0 0/0 .text setMatrix__9daCstaF_cFv */ void daCstaF_c::setMatrix() { - // NONMATCHING + static const Vec fieldLocalBallPos = {0.0f, 200.0f, 0.0f}; + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mp_model->setBaseTRMtx(mDoMtx_stack_c::get()); + mp_modelMorf->modelCalc(); + + attention_info.position.set(current.pos.x, current.pos.y + fieldLocalBallPos.y, current.pos.z); + mDoMtx_multVec(mp_model->getAnmMtx(0), &fieldLocalBallPos, &m_ballPos); + eyePos = attention_info.position; } -/* ############################################################################################## */ -/* 804DF948-804DF94C 000090 0004+00 0/1 0/0 0/0 .rodata @4720 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4720 = 18.0f; -COMPILER_STRIP_GATE(0x804DF948, &lit_4720); -#pragma pop - -/* 804DF94C-804DF950 000094 0004+00 0/1 0/0 0/0 .rodata @4721 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4721 = 0.5f; -COMPILER_STRIP_GATE(0x804DF94C, &lit_4721); -#pragma pop - -/* 804DF950-804DF958 000098 0004+04 0/1 0/0 0/0 .rodata @4722 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4722[1 + 1 /* padding */] = { - 1.0f / 5.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x804DF950, &lit_4722); -#pragma pop - -/* 804DF958-804DF960 0000A0 0008+00 0/1 0/0 0/0 .rodata @4723 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4723[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804DF958, &lit_4723); -#pragma pop - -/* 804DF960-804DF968 0000A8 0008+00 0/1 0/0 0/0 .rodata @4724 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4724[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804DF960, &lit_4724); -#pragma pop - -/* 804DF968-804DF970 0000B0 0008+00 0/1 0/0 0/0 .rodata @4725 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4725[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804DF968, &lit_4725); -#pragma pop - -/* 804DF970-804DF974 0000B8 0004+00 0/1 0/0 0/0 .rodata @4726 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4726 = -30.0f; -COMPILER_STRIP_GATE(0x804DF970, &lit_4726); -#pragma pop - -/* 804DF974-804DF978 0000BC 0004+00 1/2 0/0 0/0 .rodata @4727 */ -SECTION_RODATA static f32 const lit_4727 = 100.0f; -COMPILER_STRIP_GATE(0x804DF974, &lit_4727); - -/* 804DF978-804DF97C 0000C0 0004+00 0/3 0/0 0/0 .rodata @4728 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4728 = -1.0f; -COMPILER_STRIP_GATE(0x804DF978, &lit_4728); -#pragma pop - /* 804DE698-804DEB18 000DB8 0480+00 1/1 0/0 0/0 .text posMove__9daCstaF_cFv */ void daCstaF_c::posMove() { - // NONMATCHING -} + BOOL pre_gnd_hit = m_acch.ChkGroundHit(); + m_acch.OffLineCheck(); -/* 804DEB18-804DEB60 001238 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -// cM3dGPla::~cM3dGPla() { -extern "C" void __dt__8cM3dGPlaFv() { - // NONMATCHING + speed.y += gravity; + if (speed.y < maxFallSpeed) { + speed.y = maxFallSpeed; + } + current.pos.y += speed.y; + + daAlink_c* player = daAlink_getAlinkActorClass(); + if (player->getCopyRodControllActor() == this) { + if (!m_isStop) { + shape_angle.y = player->shape_angle.y; + } + + if (m_acch.ChkGroundHit() && m_action != ACTION_FALL) { + current.pos.x += speed.x; + current.pos.z += speed.z; + speedF = JMAFastSqrt((speed.x * speed.x) + (speed.z * speed.z)); + + if (m_action == ACTION_WALK) { + f32 play_speed = mp_modelMorf->getPlaySpeed(); + f32 speed_target; + if (speedF >= 1.0f) { + current.angle.y = speed.atan2sX_Z(); + speed_target = speedF / 18.0f; + if (speed_target > 1.0f) { + speed_target = 1.0f; + } + speed_target = 0.5f + speed_target; + } else { + current.angle.y = shape_angle.y; + speed_target = 0.0f; + } + + cLib_chaseF(&play_speed, speed_target, 0.2f); + mp_modelMorf->setPlaySpeed(play_speed); + } + } + } else if (m_action == ACTION_WAIT) { + mp_modelMorf->setPlaySpeed(0.0f); + speedF = 0.0f; + } + + m_playerPos = player->current.pos; + current.pos += *m_cc_stts.GetCCMoveP(); + m_cc_stts.ClrCcMove(); + m_acch.CrrPos(dComIfG_Bgsp()); + + if (pre_gnd_hit && !m_acch.ChkGroundHit() && -1000000000.0f != m_acch.GetGroundH()) { + f32 ground_dist = m_acch.GetGroundH() - current.pos.y; + cM3dGPla tri; + dComIfG_Bgsp().GetTriPla(m_acch.m_gnd, &tri); + + s16 poly_angle = fopAcM_getPolygonAngle(&tri, current.angle.y); + f32 var_f30 = current.pos.absXZ(old.pos) * cM_ssin(poly_angle); + if (var_f30 < 0.0f) { + var_f30 = 0.0f; + } + + if (ground_dist < 0.0f && ground_dist >= -30.0f - var_f30) { + current.pos.y = m_acch.GetGroundH(); + m_acch.SetGroundHit(); + speed.y = 0.0f; + } else { + m_lastGroundH = old.pos.y; + } + } + + if (!pre_gnd_hit && m_acch.ChkGroundHit()) { + if (m_lastGroundH - current.pos.y >= 100.0f) { + mp_modelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(m_arcName, m_bckIdxTable[m_type].idx[ACTION_FALL]), -1, 0.0f, 1.0f, 0.0f, -1.0f); + m_action = ACTION_FALL; + } + } } /* 804DEB60-804DEC14 001280 00B4+00 1/1 0/0 0/0 .text setCollision__9daCstaF_cFv */ void daCstaF_c::setCollision() { - // NONMATCHING + m_cc_stts.Move(); + + if (m_isPlayerRide || mp_coverModel != NULL) { + m_cc_cyl.SetTgType(0xD87AFDDF); + + daAlink_c* player = daAlink_getAlinkActorClass(); + if (player->getCopyRodControllActor() == this) { + ((daCrod_c*)player->getCopyRodActor())->offControll(); + } + } else { + m_cc_cyl.SetTgType(0xD97AFDDF); + } + + m_cc_cyl.MoveCAt(current.pos); + dComIfG_Ccsp()->Set(&m_cc_cyl); } -/* ############################################################################################## */ -/* 804DF97C-804DF980 0000C4 0004+00 0/1 0/0 0/0 .rodata @4884 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4884 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x804DF97C, &lit_4884); -#pragma pop - -/* 804DF980-804DF984 0000C8 0004+00 0/1 0/0 0/0 .rodata @4885 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4885 = 3.0f; -COMPILER_STRIP_GATE(0x804DF980, &lit_4885); -#pragma pop - -/* 804DF984-804DF988 0000CC 0004+00 0/1 0/0 0/0 .rodata @4886 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4886 = 15.0f; -COMPILER_STRIP_GATE(0x804DF984, &lit_4886); -#pragma pop - /* 804DFAD8-804DFADC 000000 0004+00 2/2 0/0 0/0 .bss l_cancelOffset */ -static u8 l_cancelOffset[4]; +static f32 l_cancelOffset = JMAFastSqrt(73225.008f) + 100.0f; /* 804DEC14-804DF0D8 001334 04C4+00 1/1 0/0 0/0 .text setAnime__9daCstaF_cFv */ void daCstaF_c::setAnime() { - // NONMATCHING + daAlink_c* player = daAlink_getAlinkActorClass(); + + fopAc_ac_c* crod_control_actor = player->getCopyRodControllActor(); + if (crod_control_actor == this) { + f32 max_control_dist = l_cancelOffset + player->getCopyRodBallDisMax(); + if (player->getCopyRodActor()->current.pos.abs2(player->current.pos) > SQUARE(max_control_dist)) { + ((daCrod_c*)player->getCopyRodActor())->offControll(); + crod_control_actor = NULL; + } + } + + int next_action; + if (crod_control_actor == this) { + if (dComIfGp_event_runCheck()) { + speed.x = 0.0f; + speed.z = 0.0f; + } else { + speed.x = player->speed.x + player->transAnimeMoveX(); + speed.z = player->speed.z + player->transAnimeMoveZ(); + } + + if (player->checkCopyRodSwingMode()) { + next_action = ACTION_SWING; + m_isStop = FALSE; + } else if (m_action == ACTION_FALL && !mp_modelMorf->isStop()) { + next_action = ACTION_FALL; + m_isStop = FALSE; + } else { + if ((fabsf(speed.x) + fabsf(speed.z)) > 0.1f && m_acch.ChkGroundHit()) { + next_action = ACTION_WALK; + m_isStop = FALSE; + } else { + next_action = ACTION_WAIT; + } + } + } else if (m_action == ACTION_FALL && !mp_modelMorf->isStop()) { + next_action = ACTION_FALL; + } else { + next_action = ACTION_WAIT; + } + + if (next_action != m_action) { + void* pbck = dComIfG_getObjectRes(m_arcName, m_bckIdxTable[m_type].idx[next_action]); + + f32 anm_speed; + if (next_action == ACTION_WAIT) { + anm_speed = 0.0f; + } else { + anm_speed = 1.0f; + } + + mp_modelMorf->setAnm((J3DAnmTransform*)pbck, -1, 3.0f, anm_speed, 0.0f, -1.0f); + m_action = next_action; + } + + if (eventInfo.checkCommandDemoAccrpt()) { + if (!m_isStartBrkBtkInit) { + initStartBrkBtk(); + } else if (m_brk.checkFrame(15.0f)) { + m_sound.startCreatureSound(Z2SE_CSTATUE_L_START, 0, m_reverb); + } else if (m_brk.getFrame() >= 15.0f) { + m_sound.startCreatureVoiceLevel(Z2SE_CSTATUE_ACTIVE_LOOP, m_reverb); + } + + if (dComIfGp_evmng_endCheck(m_eventId)) { + fopAcM_onSwitch(this, m_swbit); + dComIfGp_event_reset(); + } + } else if (crod_control_actor == this) { + if (m_isStartBrkBtkInit) { + m_btk.play(); + + if (m_brk.checkFrame(15.0f)) { + m_sound.startCreatureSound(Z2SE_CSTATUE_L_START, 0, m_reverb); + } else if (m_brk.getFrame() >= 15.0f) { + m_sound.startCreatureVoiceLevel(Z2SE_CSTATUE_ACTIVE_LOOP, m_reverb); + } + } else { + m_sound.startCreatureSound(Z2SE_CSTATUE_HIT_BALL, 0, m_reverb); + if (m_swbit != 0xFF && !fopAcM_isSwitch(this, m_swbit) && m_mapToolID != 0xFF) { + fopAcM_orderOtherEventId(this, m_eventId, m_mapToolID, 0xFFFF, 0, 1); + } else { + initStartBrkBtk(); + } + } + } else if (m_isStartBrkBtkInit) { + m_isStartBrkBtkInit = FALSE; + initStopBrkBtk(); + m_sound.startCreatureSound(Z2SE_CSTATUE_L_STOP, 0, m_reverb); + } + + m_brk.play(); } /* 804DF0D8-804DF150 0017F8 0078+00 3/3 0/0 0/0 .text initBrk__9daCstaF_cFUs */ -void daCstaF_c::initBrk(u16 param_0) { - // NONMATCHING +BOOL daCstaF_c::initBrk(u16 i_brkIdx) { + void* pbrk = dComIfG_getObjectRes(m_arcName, i_brkIdx); + m_brk.init(mp_model->getModelData(), (J3DAnmTevRegKey*)pbrk, 1, -1, 1.0f, 0, -1); } -/* ############################################################################################## */ -/* 804DF988-804DF98C 0000D0 0004+00 1/1 0/0 0/0 .rodata brkIdx$4903 */ -SECTION_RODATA static u8 const brkIdx[4] = { - 0x00, - 0x10, - 0x00, - 0x11, -}; -COMPILER_STRIP_GATE(0x804DF988, &brkIdx); - /* 804DF150-804DF1A4 001870 0054+00 2/2 0/0 0/0 .text initStopBrkBtk__9daCstaF_cFv */ void daCstaF_c::initStopBrkBtk() { - // NONMATCHING + static const u16 brkIdx[] = {16, 17}; + + m_btk.setFrame(0.0f); + initBrk(brkIdx[m_type]); + m_isStop = TRUE; } -/* ############################################################################################## */ -/* 804DF98C-804DF990 0000D4 0004+00 0/1 0/0 0/0 .rodata brIdx$4910 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const brIdx[4] = { - 0x00, - 0x0F, - 0x00, - 0x10, -}; -COMPILER_STRIP_GATE(0x804DF98C, &brIdx); -#pragma pop - -/* 804DF990-804DF994 0000D8 0004+00 0/1 0/0 0/0 .rodata @4956 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4956 = 40.0f; -COMPILER_STRIP_GATE(0x804DF990, &lit_4956); -#pragma pop - -/* 804DF994-804DF998 0000DC 0004+00 0/1 0/0 0/0 .rodata @4957 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4957 = 2.0f; -COMPILER_STRIP_GATE(0x804DF994, &lit_4957); -#pragma pop - /* 804DF1A4-804DF37C 0018C4 01D8+00 1/1 0/0 0/0 .text initStartBrkBtk__9daCstaF_cFv */ void daCstaF_c::initStartBrkBtk() { - // NONMATCHING + m_isStartBrkBtkInit = TRUE; + m_btk.setFrame(0.0f); + m_btk.reset(); + + static const u16 brIdx[] = {15, 16}; + initBrk(brIdx[m_type]); + + cXyz effpos(m_ballPos.x + (40.0f * cM_ssin(shape_angle.y)), m_ballPos.y, m_ballPos.z + (40.0f * cM_scos(shape_angle.y))); + csXyz effrot(shape_angle); + + for (int i = 0; i < 2; i++) { + dComIfGp_particle_set(0x88BB, &effpos, &effrot, NULL); + dComIfGp_particle_set(0x88BC, &effpos, &effrot, NULL); + effpos.x = (2.0f * m_ballPos.x) - effpos.x; + effpos.z = (2.0f * m_ballPos.z) - effpos.z; + effrot.y += 0x8000; + } } /* 804DF37C-804DF6C4 001A9C 0348+00 1/0 0/0 0/0 .text Execute__9daCstaF_cFPPA3_A4_f */ int daCstaF_c::Execute(f32 (**param_0)[3][4]) { - // NONMATCHING + daAlink_c* player = daAlink_getAlinkActorClass(); + + setAnime(); + posMove(); + + int poly_sound; + if (m_acch.GetGroundH() != -1000000000.0f) { + poly_sound = dKy_pol_sound_get(&m_acch.m_gnd); + } else { + poly_sound = 0; + } + + if (mp_coverModel != NULL) { + BOOL hide_cover = FALSE; + if (m_coverVanishFlg) { + hide_cover = player->simpleAnmPlay(m_coverBtk); + hide_cover &= player->simpleAnmPlay(m_coverBrk); + fopAcM_seStartCurrentLevel(this, Z2SE_CSTATUE_SEAL_VANISH, 0); + } + + if (hide_cover || dComIfGs_isEventBit(0x2540)) { + mp_coverModel = NULL; + m_coverVanishFlg = FALSE; + } + } + + mp_modelMorf->play(poly_sound, m_reverb); + + if (m_action == ACTION_SWING && player->checkCopyRodSwingMode()) { + if (mp_modelMorf->getEndFrame() > player->getBaseAnimeFrame()) { + mp_modelMorf->setFrame(player->getBaseAnimeFrame()); + } else { + mp_modelMorf->setFrame(mp_modelMorf->getEndFrame()); + } + } + + setRoomInfo(); + setMatrix(); + + if (m_cc_cyl.ChkTgHit()) { + dCcD_GObjInf* hit_gobj = m_cc_cyl.GetTgHitGObj(); + if (hit_gobj != NULL && hit_gobj->GetAtType() != AT_TYPE_1000000) { + m_sound.startCollisionSE(m_cc_cyl.GetTgHitObjHitSeID(1), 0x2A); + } + } + + setCollision(); + + u32 var_r27 = 0; + if (m_acch.ChkGroundLanding()) { + var_r27 = 7; + } + + cXyz* effpos_p; + if (var_r27 != 0) { + effpos_p = ¤t.pos; + } else { + effpos_p = NULL; + } + + m_poly_eff.setEffectCenter(&tevStr, ¤t.pos, var_r27, 0, effpos_p, ¤t.angle, &scale, fopAcM_GetRoomNo(this), 1.0f, speedF); + *param_0 = (Mtx*)mp_model->getAnmMtx(0); + m_isPlayerRide = FALSE; + + if (player->getCopyRodControllActor() == this) { + m_cc_stts.SetWeight(200); + } else { + m_cc_stts.SetWeight(255); + } + + return 1; } /* 804DF6C4-804DF6E4 001DE4 0020+00 1/0 0/0 0/0 .text daCstaF_Execute__FP9daCstaF_c */ -static void daCstaF_Execute(daCstaF_c* param_0) { - // NONMATCHING +static int daCstaF_Execute(daCstaF_c* a_this) { + return a_this->MoveBGExecute(); } -/* ############################################################################################## */ -/* 804DF998-804DF99C 0000E0 0004+00 0/1 0/0 0/0 .rodata @5082 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5082 = 1000.0f; -COMPILER_STRIP_GATE(0x804DF998, &lit_5082); -#pragma pop - /* 804DF6E4-804DF800 001E04 011C+00 1/0 0/0 0/0 .text Draw__9daCstaF_cFv */ int daCstaF_c::Draw() { - // NONMATCHING + g_env_light.settingTevStruct(8, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mp_model, &tevStr); + + m_brk.entry(mp_model->getModelData()); + m_btk.entry(mp_model->getModelData()); + mDoExt_modelEntryDL(mp_model); + + if (mp_coverModel != NULL) { + mDoExt_modelUpdateDL(mp_coverModel); + } + + cXyz sp8(current.pos.x, 30.0f + mp_model->getAnmMtx(0)[1][3], current.pos.z); + m_shadowKey = dComIfGd_setShadow(m_shadowKey, 1, mp_model, &sp8, 1000.0f, 0.0f, current.pos.y, m_acch.GetGroundH(), m_acch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + return 1; } /* 804DF800-804DF82C 001F20 002C+00 1/0 0/0 0/0 .text daCstaF_Draw__FP9daCstaF_c */ -static void daCstaF_Draw(daCstaF_c* param_0) { - // NONMATCHING +static int daCstaF_Draw(daCstaF_c* a_this) { + return a_this->MoveBGDraw(); } -/* 804DF82C-804DF874 001F4C 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} +/* 804DF9E4-804DFA04 -00001 0020+00 1/0 0/0 0/0 .data l_daCstaF_Method */ +static actor_method_class l_daCstaF_Method = { + (process_method_func)daCstaF_Create, + (process_method_func)daCstaF_Delete, + (process_method_func)daCstaF_Execute, + (process_method_func)NULL, + (process_method_func)daCstaF_Draw, +}; -/* ############################################################################################## */ -/* 804DF99C-804DF9A0 0000E4 0004+00 1/1 0/0 0/0 .rodata @5096 */ -SECTION_RODATA static u32 const lit_5096 = 0x478F0481; -COMPILER_STRIP_GATE(0x804DF99C, &lit_5096); - -/* 804DF874-804DF89C 001F94 0028+00 0/0 1/0 0/0 .text __sinit_d_a_cstaF_cpp */ -void __sinit_d_a_cstaF_cpp(){// NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x804DF874, __sinit_d_a_cstaF_cpp); -#pragma pop - -/* 804DF89C-804DF8A4 001FBC 0008+00 1/0 0/0 0/0 .text @36@__dt__15dBgS_StatueAcchFv */ -static void func_804DF89C() { - // NONMATCHING -} - -/* 804DF8A4-804DF8AC 001FC4 0008+00 1/0 0/0 0/0 .text @20@__dt__15dBgS_StatueAcchFv */ -static void func_804DF8A4() { - // NONMATCHING -} +/* 804DFA04-804DFA34 -00001 0030+00 0/0 0/0 1/0 .data g_profile_CSTAF */ +extern actor_process_profile_definition g_profile_CSTAF = { + fpcLy_CURRENT_e, // mLayerID + 3, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_CSTAF, // mProcName + &g_fpcLf_Method.base, // sub_method + 0x00000B38, // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 272, // mPriority + &l_daCstaF_Method, // sub_method + 0x00040520, // mStatus + fopAc_ENV_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; diff --git a/src/d/actor/d_a_e_ga.cpp b/src/d/actor/d_a_e_ga.cpp index f53858b6f6..f32af65aea 100644 --- a/src/d/actor/d_a_e_ga.cpp +++ b/src/d/actor/d_a_e_ga.cpp @@ -4,88 +4,275 @@ */ #include "d/actor/d_a_e_ga.h" -#include "dol2asm.h" +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" +/* 804FB0EC-804FB110 0000EC 0024+00 1/1 0/0 0/0 .text __ct__12daE_Ga_HIO_cFv */ +daE_Ga_HIO_c::daE_Ga_HIO_c() { + id = -1; + base_size = 1.0f; +} +/* 804FB110-804FB1B0 000110 00A0+00 1/0 0/0 0/0 .text daE_Ga_Draw__FP10e_ga_class */ +static int daE_Ga_Draw(e_ga_class* a_this) { + fopAc_ac_c* actor = &a_this->actor; + g_env_light.settingTevStruct(0, &actor->current.pos, &actor->tevStr); + + ga_s* ga_s = a_this->ga_s; + int room_no = fopAcM_GetRoomNo(actor); -// -// Forward References: -// + for (int i = 0; i < a_this->ga_num; i++, ga_s++) { + if (ga_s->initialized) { + dComIfGp_entrySimpleModel(ga_s->model, room_no); + } + } -extern "C" void __ct__12daE_Ga_HIO_cFv(); -extern "C" static void daE_Ga_Draw__FP10e_ga_class(); -extern "C" static void ga_fly__FP10e_ga_classP4ga_s(); -extern "C" static void bt_fly__FP10e_ga_classP4ga_s(); -extern "C" static void ga_control__FP10e_ga_class(); -extern "C" static void daE_Ga_Execute__FP10e_ga_class(); -extern "C" static bool daE_Ga_IsDelete__FP10e_ga_class(); -extern "C" static void daE_Ga_Delete__FP10e_ga_class(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" static void daE_Ga_Create__FP10fopAc_ac_c(); -extern "C" void __dt__4ga_sFv(); -extern "C" void __ct__4ga_sFv(); -extern "C" void __dt__12daE_Ga_HIO_cFv(); -extern "C" void __sinit_d_a_e_ga_cpp(); -extern "C" extern char const* const d_a_e_ga__stringBase0; + return 1; +} -// -// External References: -// +/* 804FB1B0-804FB3A8 0001B0 01F8+00 1/1 0/0 0/0 .text ga_fly__FP10e_ga_classP4ga_s */ +static void ga_fly(e_ga_class* a_this, ga_s* ga_s) { + fopAc_ac_c* actor = &a_this->actor; -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void scaleM__14mDoMtx_stack_cFfff(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void addSimpleModel__14dComIfG_play_cFP12J3DModelDataiUc(); -extern "C" void removeSimpleModel__14dComIfG_play_cFP12J3DModelDatai(); -extern "C" void entrySimpleModel__14dComIfG_play_cFP8J3DModeli(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rndF__Ff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void MtxPosition__FP4cXyzP4cXyz(); -extern "C" void __dl__FPv(); -extern "C" void __construct_array(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" extern void* calc_mtx[1 + 1 /* padding */]; -extern "C" void __register_global_object(); + cXyz sp20; + cXyz sp14; + f32 move_range = 100.0f * a_this->prm2; -// -// Declarations: -// + if (ga_s->move_timer == 0) { + ga_s->move_timer = cM_rndF(10.0f); + ga_s->pos_target.x = actor->home.pos.x + cM_rndFX(move_range); + ga_s->pos_target.y = actor->home.pos.y + cM_rndF(200.0f); + ga_s->pos_target.z = actor->home.pos.z + cM_rndFX(move_range); -/* ############################################################################################## */ -/* 804FBB90-804FBB94 000000 0004+00 5/5 0/0 0/0 .rodata @3646 */ -SECTION_RODATA static f32 const lit_3646 = 1.0f; -COMPILER_STRIP_GATE(0x804FBB90, &lit_3646); + sp20 = ga_s->pos_target - ga_s->position; + ga_s->rot_target.y = cM_atan2s(sp20.x, sp20.z); + ga_s->rot_target.x = -cM_atan2s(sp20.y, JMAFastSqrt((sp20.x * sp20.x) + (sp20.z * sp20.z))); + } + + cLib_addCalcAngleS2(&ga_s->rotation.y, ga_s->rot_target.y, 2, 0x1000); + cLib_addCalcAngleS2(&ga_s->rotation.x, ga_s->rot_target.x, 2, 0x1000); + + sp20.x = 0.0f; + sp20.y = 0.0f; + sp20.z = 10.0f; + cMtx_YrotS(*calc_mtx, ga_s->rotation.y); + cMtx_XrotM(*calc_mtx, ga_s->rotation.x); + MtxPosition(&sp20, &sp14); + ga_s->position += sp14; + + if (ga_s->position.y < actor->home.pos.y) { + ga_s->position.y = actor->home.pos.y; + ga_s->move_timer = 0; + } + + ga_s->field_0x3c = cM_ssin(ga_s->field_0x44); + ga_s->field_0x44 += 0x3E00; +} + +/* 804FB3A8-804FB5C0 0003A8 0218+00 1/1 0/0 0/0 .text bt_fly__FP10e_ga_classP4ga_s */ +static void bt_fly(e_ga_class* a_this, ga_s* ga_s) { + fopAc_ac_c* actor = &a_this->actor; + + cXyz sp20; + cXyz sp14; + f32 move_range = 100.0f * a_this->prm2; + + if (ga_s->move_timer == 0) { + ga_s->move_timer = cM_rndF(12.0f); + ga_s->pos_target.x = actor->home.pos.x + cM_rndFX(move_range); + ga_s->pos_target.y = actor->home.pos.y + cM_rndF(200.0f); + ga_s->pos_target.z = actor->home.pos.z + cM_rndFX(move_range); + + sp20 = ga_s->pos_target - ga_s->position; + ga_s->rot_target.y = cM_atan2s(sp20.x, sp20.z); + ga_s->rot_target.x = -cM_atan2s(sp20.y, JMAFastSqrt((sp20.x * sp20.x) + (sp20.z * sp20.z))); + } + + cLib_addCalcAngleS2(&ga_s->rotation.y, ga_s->rot_target.y, 2, 0x800); + cLib_addCalcAngleS2(&ga_s->rotation.x, ga_s->rot_target.x, 2, 0x800); + + sp20.x = 0.0f; + sp20.y = 0.0f; + sp20.z = 7.0f; + cMtx_YrotS(*calc_mtx, ga_s->rotation.y); + cMtx_XrotM(*calc_mtx, ga_s->rotation.x); + MtxPosition(&sp20, &sp14); + ga_s->position.x += sp14.x; + ga_s->position.y += sp14.y; + ga_s->position.z += sp14.z; + + if (ga_s->position.y < actor->home.pos.y) { + ga_s->position.y = actor->home.pos.y; + ga_s->move_timer = 0; + } + + ga_s->field_0x44 += 0x2E00; + ga_s->field_0x3c = cM_ssin(ga_s->field_0x44); +} + +/* 804FB5C0-804FB6F8 0005C0 0138+00 1/1 0/0 0/0 .text ga_control__FP10e_ga_class */ +static void ga_control(e_ga_class* a_this) { + cXyz sp10; + ga_s* ga_s = a_this->ga_s; + + f32 offset_y; + if (a_this->prm1 == 0) { + offset_y = -15.0f + TREG_F(10); + } else { + offset_y = -5.0f + TREG_F(9); + } + + for (int i = 0; i < a_this->ga_num; i++, ga_s++) { + if (ga_s->initialized) { + if (ga_s->move_timer != 0) { + ga_s->move_timer--; + } + + if (a_this->prm1 == 0) { + ga_fly(a_this, ga_s); + } else { + bt_fly(a_this, ga_s); + } + + mDoMtx_stack_c::transS(ga_s->position.x, ga_s->position.y, ga_s->position.z); + mDoMtx_stack_c::YrotM(ga_s->rotation.y); + mDoMtx_stack_c::XrotM(ga_s->rotation.x); + mDoMtx_stack_c::scaleM(ga_s->size, ga_s->size * ga_s->field_0x3c, ga_s->size); + mDoMtx_stack_c::transM(0.0f, offset_y, 0.0f); + ga_s->model->setBaseTRMtx(mDoMtx_stack_c::get()); + } + } +} + +/* 804FB6F8-804FB71C 0006F8 0024+00 2/1 0/0 0/0 .text daE_Ga_Execute__FP10e_ga_class */ +static int daE_Ga_Execute(e_ga_class* a_this) { + ga_control(a_this); + return 1; +} + +/* 804FB71C-804FB724 00071C 0008+00 1/0 0/0 0/0 .text daE_Ga_IsDelete__FP10e_ga_class */ +static int daE_Ga_IsDelete(e_ga_class* a_this) { + return 1; +} + +/* 804FBC48-804FBC4C 000008 0004+00 2/2 0/0 0/0 .bss None */ +static u8 l_HIOInit; + +/* 804FB724-804FB7C4 000724 00A0+00 1/0 0/0 0/0 .text daE_Ga_Delete__FP10e_ga_class */ +static int daE_Ga_Delete(e_ga_class* a_this) { + fopAc_ac_c* actor = &a_this->actor; + fpc_ProcID id = fopAcM_GetID(actor); + + if (a_this->initialized) { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("E_ga", 3); + dComIfGp_removeSimpleModel(modelData, fopAcM_GetRoomNo(actor)); + } + + dComIfG_resDelete(&a_this->phase, "E_ga"); + + if (a_this->HIOInit) { + l_HIOInit = FALSE; + } + + return 1; +} + +/* 804FB7C4-804FB874 0007C4 00B0+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ +static int useHeapInit(fopAc_ac_c* i_this) { + e_ga_class* a_this = (e_ga_class*)i_this; + + void* modelData = dComIfG_getObjectRes("E_Ga", 3); + JUT_ASSERT(450, modelData != 0); + + for (int i = 0; i < a_this->ga_num; i++) { + a_this->ga_s[i].model = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x20000, 0x11000084); + if (a_this->ga_s[i].model == NULL) { + return 0; + } + } + + return 1; +} + +/* 804FBC58-804FBC64 000018 000C+00 2/2 0/0 0/0 .bss l_HIO */ +static daE_Ga_HIO_c l_HIO; + +/* 804FB874-804FBAB8 000874 0244+00 1/0 0/0 0/0 .text daE_Ga_Create__FP10fopAc_ac_c */ +static int daE_Ga_Create(fopAc_ac_c* i_this) { + static const int l_bmdidx[] = {3}; + + e_ga_class* a_this = (e_ga_class*)i_this; + fopAcM_SetupActor(i_this, e_ga_class); + + int phase_state = dComIfG_resLoad(&a_this->phase, "E_Ga"); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("E_GA PARAM %x\n", fopAcM_GetParam(i_this)); + a_this->prm0 = fopAcM_GetParam(i_this); + a_this->prm1 = (fopAcM_GetParam(i_this) & 0xFF00) >> 8; + a_this->prm2 = (fopAcM_GetParam(i_this) & 0xFF0000) >> 0x10; + + if (a_this->prm1 == 0xFF) { + a_this->prm1 = 0; + } + + if (a_this->prm2 == 0xFF) { + a_this->prm1 = 2; + } + + a_this->ga_num = a_this->prm0 + 1; + if (a_this->ga_num > 0x100) { + a_this->ga_num = 0x100; + } + + OS_REPORT("E_GA//////////////E_GA SET 1 !!\n"); + if (!fopAcM_entrySolidHeap(i_this, useHeapInit, 0x1000)) { + OS_REPORT("//////////////E_GA SET NON !!\n"); + return cPhs_ERROR_e; + } + + OS_REPORT("//////////////E_GA SET 2 !!\n"); + if (!l_HIOInit) { + a_this->HIOInit = TRUE; + l_HIOInit = TRUE; + l_HIO.id = -1; + } + + for (int i = 0; i < a_this->ga_num; i++) { + a_this->ga_s[i].initialized = TRUE; + a_this->ga_s[i].position = i_this->home.pos; + a_this->ga_s[i].field_0x44 = cM_rndF(0x10000); + + if (a_this->prm1 == 0) { + a_this->ga_s[i].size = 0.3f + cM_rndF(0.3f); + } else { + a_this->ga_s[i].size = 0.8f + cM_rndF(0.2f); + } + } + + daE_Ga_Execute(a_this); + + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("E_ga", 3); + JUT_ASSERT(536, modelData != 0); + + if (dComIfGp_addSimpleModel(modelData, fopAcM_GetRoomNo(i_this), FALSE) == -1) { + // "Moth: Simple Model addition failed.\n" + OS_REPORT("\x1B[43;30m蛾:シンプルモデル登録失敗しました。\n\x1B[m"); + } + + a_this->initialized = TRUE; + } + + return phase_state; +} /* 804FBBE0-804FBC00 -00001 0020+00 1/0 0/0 0/0 .data l_daE_Ga_Method */ static actor_method_class l_daE_Ga_Method = { - (process_method_func)daE_Ga_Create__FP10fopAc_ac_c, - (process_method_func)daE_Ga_Delete__FP10e_ga_class, - (process_method_func)daE_Ga_Execute__FP10e_ga_class, - (process_method_func)daE_Ga_IsDelete__FP10e_ga_class, - (process_method_func)daE_Ga_Draw__FP10e_ga_class, + (process_method_func)daE_Ga_Create, + (process_method_func)daE_Ga_Delete, + (process_method_func)daE_Ga_Execute, + (process_method_func)daE_Ga_IsDelete, + (process_method_func)daE_Ga_Draw, }; /* 804FBC00-804FBC30 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_GA */ @@ -105,229 +292,3 @@ extern actor_process_profile_definition g_profile_E_GA = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 804FBC30-804FBC3C 000050 000C+00 2/2 0/0 0/0 .data __vt__12daE_Ga_HIO_c */ -SECTION_DATA extern void* __vt__12daE_Ga_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12daE_Ga_HIO_cFv, -}; - -/* 804FB0EC-804FB110 0000EC 0024+00 1/1 0/0 0/0 .text __ct__12daE_Ga_HIO_cFv */ -daE_Ga_HIO_c::daE_Ga_HIO_c() { - // NONMATCHING -} - -/* 804FB110-804FB1B0 000110 00A0+00 1/0 0/0 0/0 .text daE_Ga_Draw__FP10e_ga_class */ -static void daE_Ga_Draw(e_ga_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804FBB94-804FBB98 000004 0004+00 0/2 0/0 0/0 .rodata @3713 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3713 = 100.0f; -COMPILER_STRIP_GATE(0x804FBB94, &lit_3713); -#pragma pop - -/* 804FBB98-804FBB9C 000008 0004+00 0/1 0/0 0/0 .rodata @3714 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3714 = 10.0f; -COMPILER_STRIP_GATE(0x804FBB98, &lit_3714); -#pragma pop - -/* 804FBB9C-804FBBA0 00000C 0004+00 0/2 0/0 0/0 .rodata @3715 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3715 = 200.0f; -COMPILER_STRIP_GATE(0x804FBB9C, &lit_3715); -#pragma pop - -/* 804FBBA0-804FBBA8 000010 0004+04 0/3 0/0 0/0 .rodata @3716 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3716[4 + 4 /* padding */] = { - 0x00, - 0x00, - 0x00, - 0x00, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x804FBBA0, &lit_3716); -#pragma pop - -/* 804FBBA8-804FBBB0 000018 0008+00 0/2 0/0 0/0 .rodata @3718 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3718[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804FBBA8, &lit_3718); -#pragma pop - -/* 804FB1B0-804FB3A8 0001B0 01F8+00 1/1 0/0 0/0 .text ga_fly__FP10e_ga_classP4ga_s */ -static void ga_fly(e_ga_class* param_0, ga_s* param_1) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804FBBB0-804FBBB4 000020 0004+00 0/1 0/0 0/0 .rodata @3759 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3759 = 12.0f; -COMPILER_STRIP_GATE(0x804FBBB0, &lit_3759); -#pragma pop - -/* 804FBBB4-804FBBB8 000024 0004+00 0/1 0/0 0/0 .rodata @3760 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3760 = 7.0f; -COMPILER_STRIP_GATE(0x804FBBB4, &lit_3760); -#pragma pop - -/* 804FB3A8-804FB5C0 0003A8 0218+00 1/1 0/0 0/0 .text bt_fly__FP10e_ga_classP4ga_s */ -static void bt_fly(e_ga_class* param_0, ga_s* param_1) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804FBBB8-804FBBBC 000028 0004+00 0/1 0/0 0/0 .rodata @3796 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3796 = -15.0f; -COMPILER_STRIP_GATE(0x804FBBB8, &lit_3796); -#pragma pop - -/* 804FBBBC-804FBBC0 00002C 0004+00 0/1 0/0 0/0 .rodata @3797 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3797 = -5.0f; -COMPILER_STRIP_GATE(0x804FBBBC, &lit_3797); -#pragma pop - -/* 804FB5C0-804FB6F8 0005C0 0138+00 1/1 0/0 0/0 .text ga_control__FP10e_ga_class */ -static void ga_control(e_ga_class* param_0) { - // NONMATCHING -} - -/* 804FB6F8-804FB71C 0006F8 0024+00 2/1 0/0 0/0 .text daE_Ga_Execute__FP10e_ga_class */ -static void daE_Ga_Execute(e_ga_class* param_0) { - // NONMATCHING -} - -/* 804FB71C-804FB724 00071C 0008+00 1/0 0/0 0/0 .text daE_Ga_IsDelete__FP10e_ga_class */ -static bool daE_Ga_IsDelete(e_ga_class* param_0) { - return true; -} - -/* ############################################################################################## */ -/* 804FBBD4-804FBBD4 000044 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_804FBBD4 = "E_ga"; -#pragma pop - -/* 804FBC48-804FBC4C 000008 0004+00 2/2 0/0 0/0 .bss None */ -static u8 data_804FBC48[4]; - -/* 804FB724-804FB7C4 000724 00A0+00 1/0 0/0 0/0 .text daE_Ga_Delete__FP10e_ga_class */ -static void daE_Ga_Delete(e_ga_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804FBBD4-804FBBD4 000044 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_804FBBD9 = "E_Ga"; -#pragma pop - -/* 804FB7C4-804FB874 0007C4 00B0+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804FBBC0-804FBBC4 000030 0004+00 0/0 0/0 0/0 .rodata l_bmdidx$3809 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_bmdidx[4] = { - 0x00, - 0x00, - 0x00, - 0x03, -}; -COMPILER_STRIP_GATE(0x804FBBC0, &l_bmdidx); -#pragma pop - -/* 804FBBC4-804FBBC8 000034 0004+00 0/1 0/0 0/0 .rodata @3912 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3912 = 65536.0f; -COMPILER_STRIP_GATE(0x804FBBC4, &lit_3912); -#pragma pop - -/* 804FBBC8-804FBBCC 000038 0004+00 0/1 0/0 0/0 .rodata @3913 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3913 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x804FBBC8, &lit_3913); -#pragma pop - -/* 804FBBCC-804FBBD0 00003C 0004+00 0/1 0/0 0/0 .rodata @3914 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3914 = 4.0f / 5.0f; -COMPILER_STRIP_GATE(0x804FBBCC, &lit_3914); -#pragma pop - -/* 804FBBD0-804FBBD4 000040 0004+00 0/1 0/0 0/0 .rodata @3915 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3915 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x804FBBD0, &lit_3915); -#pragma pop - -/* 804FBC4C-804FBC58 00000C 000C+00 1/1 0/0 0/0 .bss @3641 */ -static u8 lit_3641[12]; - -/* 804FBC58-804FBC64 000018 000C+00 2/2 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[12]; - -/* 804FB874-804FBAB8 000874 0244+00 1/0 0/0 0/0 .text daE_Ga_Create__FP10fopAc_ac_c */ -static void daE_Ga_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 804FBAB8-804FBAF4 000AB8 003C+00 1/1 0/0 0/0 .text __dt__4ga_sFv */ -ga_s::~ga_s() { - // NONMATCHING -} - -/* 804FBAF4-804FBAF8 000AF4 0004+00 1/1 0/0 0/0 .text __ct__4ga_sFv */ -ga_s::ga_s() { - /* empty function */ -} - -/* 804FBAF8-804FBB40 000AF8 0048+00 2/1 0/0 0/0 .text __dt__12daE_Ga_HIO_cFv */ -daE_Ga_HIO_c::~daE_Ga_HIO_c() { - // NONMATCHING -} - -/* 804FBB40-804FBB7C 000B40 003C+00 0/0 1/0 0/0 .text __sinit_d_a_e_ga_cpp */ -void __sinit_d_a_e_ga_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x804FBB40, __sinit_d_a_e_ga_cpp); -#pragma pop - -/* 804FBBD4-804FBBD4 000044 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_obj_dust.cpp b/src/d/actor/d_a_obj_dust.cpp index 235a933247..50f84b1b2e 100644 --- a/src/d/actor/d_a_obj_dust.cpp +++ b/src/d/actor/d_a_obj_dust.cpp @@ -5,50 +5,45 @@ #include "d/actor/d_a_obj_dust.h" -/* 80BE2F98-80BE2FA0 000000 0004+04 4/4 0/0 0/0 .rodata @3673 */ -static u8 const lit_3673[4+ 4 /* padding */] = { - 0x00, - 0x00, - 0x00, - 0x00, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, -}; - /* 80BE3054-80BE3058 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ static const char* l_arcName = "M_Dust"; namespace { - /* 80BE30F8-80BE30FC 000000 0004+00 2/2 0/0 0/0 .bss e_ymb__26@unnamed@d_a_obj_dust_cpp@ */ - static fopAc_ac_c* e_ymb; +/* 80BE30F8-80BE30FC 000000 0004+00 2/2 0/0 0/0 .bss e_ymb__26@unnamed@d_a_obj_dust_cpp@ */ +static fopAc_ac_c* e_ymb; - /* 80BE30FC-80BE3100 000004 0004+00 2/2 0/0 0/0 .bss e_ymb_Pos__26@unnamed@d_a_obj_dust_cpp@ */ - static cXyz* e_ymb_Pos; +/* 80BE30FC-80BE3100 000004 0004+00 2/2 0/0 0/0 .bss e_ymb_Pos__26@unnamed@d_a_obj_dust_cpp@ */ +static cXyz* e_ymb_Pos; }; -/* 80BE2490-80BE24F8 000250 0068+00 1/1 0/0 0/0 .text RideOn_Angle__11daObjDust_cFRsfsf */ -void daObjDust_c::RideOn_Angle(s16& i_angle, f32 i_param1, s16 i_param2, f32 i_param3) { - cLib_addCalcAngleS(&i_angle, i_param2 * (i_param1 / i_param3), 1, 0x100, 1); +static f32 dummyFloat() { + return 0.0f; +} + +static f64 dummyFloat2() { + return 4503601774854144.0; } /* 80BE22B8-80BE2490 000078 01D8+00 1/1 0/0 0/0 .text Search_Ymb__11daObjDust_cFv */ void daObjDust_c::Search_Ymb() { - cXyz ymb_delta(e_ymb_Pos->x - current.pos.x, e_ymb_Pos->y - current.pos.y, e_ymb_Pos->z - current.pos.z); + f32 e_ymb_speed = 0.0f; + cXyz ymb_rel_dist(e_ymb_Pos->x - current.pos.x, e_ymb_Pos->y - current.pos.y, e_ymb_Pos->z - current.pos.z); mDoMtx_stack_c::YrotS(-shape_angle.y); - mDoMtx_stack_c::multVec(&ymb_delta, &ymb_delta); + mDoMtx_stack_c::multVec(&ymb_rel_dist, &ymb_rel_dist); - if (ymb_delta.x < 750.0f && ymb_delta.x > -750.0f && ymb_delta.z < 450.0f && ymb_delta.z > -450.0f && ymb_delta.y < 600.0f) { - f32 speed = fopAcM_GetSpeedF(e_ymb); - if (speed > 0) { - field_0x5ac = 256.0f + speed * 16.0f; - field_0x5a0 = speed * 31.0f; + if (ymb_rel_dist.x < (750.0f + BREG_F(0)) && ymb_rel_dist.x > (-750.0f - BREG_F(0)) && + ymb_rel_dist.z < (450.0f + BREG_F(1)) && ymb_rel_dist.z > (-450.0f - BREG_F(1)) && + ymb_rel_dist.y < (600.0f + BREG_F(7))) + { + e_ymb_speed = fopAcM_GetSpeedF(e_ymb); + if (e_ymb_speed > 0.0f) { + mRideAngleAmplitude = 256.0f + (e_ymb_speed * (16.0f + BREG_F(6))); + mRideOscillationSpeed = e_ymb_speed * (31.0f + BREG_F(5)); - cLib_addCalc(&field_0x5d0, -100.0f, 0.5f, 100.0f, 0); - if (mYmbFlag == NULL && mRideOnFlag == NULL && field_0x5a0 > 300.0f && field_0x5a0 < 1900.0f) { + cLib_addCalc(&mOffsetY, -100.0f + BREG_F(8), 0.5f, 100.0f, 0); + + if (mYmbFlag == false && mRideOnFlag == true && mRideOscillationSpeed > 300.0f && mRideOscillationSpeed < 1900.0f) { fopAcM_seStart(this, Z2SE_OBJ_FLOATBOARD_SWING, 0); mYmbFlag = true; } @@ -58,34 +53,44 @@ void daObjDust_c::Search_Ymb() { } } +/* 80BE2490-80BE24F8 000250 0068+00 1/1 0/0 0/0 .text RideOn_Angle__11daObjDust_cFRsfsf */ +void daObjDust_c::RideOn_Angle(s16& o_angle, f32 i_value, s16 i_scale, f32 i_max) { + cLib_addCalcAngleS(&o_angle, i_scale * (i_value / i_max), 1, 0x100, 1); +} + /* 80BE24F8-80BE2708 0002B8 0210+00 1/1 0/0 0/0 .text Check_RideOn__11daObjDust_cFv */ int daObjDust_c::Check_RideOn() { daPy_py_c* player = daPy_getPlayerActorClass(); - cXyz* player_pos = fopAcM_GetPosition_p(player); - s16 target = 0; + cXyz& player_pos = fopAcM_GetPosition(player); + f32 player_speed = 0.0f; + s16 intensity_target = 0; + mRideOnFlag = false; - cXyz delta_vec(player_pos->x -current.pos.x, player_pos->y - current.pos.y, player_pos->z - current.pos.z); + cXyz player_rel_dist(player_pos.x - current.pos.x, player_pos.y - current.pos.y, player_pos.z - current.pos.z); mDoMtx_stack_c::YrotS(-shape_angle.y); - mDoMtx_stack_c::multVec(&delta_vec, &delta_vec); + mDoMtx_stack_c::multVec(&player_rel_dist, &player_rel_dist); - if (delta_vec.x < 750.0f && delta_vec.x > -750.0f && delta_vec.z < 450.0f && delta_vec.z > -450.0f) { - RideOn_Angle(field_0x5c8, (s16)-delta_vec.x, 0x200, 750.0); - RideOn_Angle(field_0x5cc, delta_vec.z, 0x200, 450.0); + if (player_rel_dist.x < 750.0f && player_rel_dist.x > -750.0f && player_rel_dist.z < 450.0f && player_rel_dist.z > -450.0f) { + RideOn_Angle(mRideAngle.x, (s16)-player_rel_dist.x, 0x200, 750.0); + RideOn_Angle(mRideAngle.z, player_rel_dist.z, 0x200, 450.0); + f32 var_f30 = 0.0f; mRideOnFlag = true; - if (fopAcM_GetSpeedF(player) > 0.0f) { - cLib_addCalcAngleS(&field_0x5ac, 0x150, 0xb, 0x100, 0); - target = 0x400; + player_speed = fopAcM_GetSpeedF(player); + if (player_speed > 0.0f) { + cLib_addCalcAngleS(&mRideAngleAmplitude, 0x150, 11, 0x100, 0); + intensity_target = 0x400; } else { - cLib_addCalcAngleS(&field_0x5ac, 0x100, 0xb, 0x100, 0); + cLib_addCalcAngleS(&mRideAngleAmplitude, 0x100, 11, 0x100, 0); } } else { - cLib_addCalcAngleS(&field_0x5ac, 0x100, 0xb, 0x100, 0); - cLib_addCalcAngleS(&field_0x5c8, 0, 2, 0x100, 1); - cLib_addCalcAngleS(&field_0x5cc, 0, 2, 0x100, 1); + cLib_addCalcAngleS(&mRideAngleAmplitude, 0x100, 11, 0x100, 0); + cLib_addCalcAngleS(&mRideAngle.x, 0, 2, 0x100, 1); + cLib_addCalcAngleS(&mRideAngle.z, 0, 2, 0x100, 1); } - cLib_addCalc(&field_0x5a4, target, 0.05, 100.0f, 0.0f); + + cLib_addCalc(&mRideIntensity, intensity_target, 0.05f + HREG_F(13), 100.0f, 0.0f); return 0; } @@ -106,9 +111,12 @@ void daObjDust_c::setBaseMtx() { /* 80BE2790-80BE27BC 000550 002C+00 1/1 0/0 0/0 .text * rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ -static void rideCallBack(dBgW*, fopAc_ac_c* i_bgActor, fopAc_ac_c* i_rideActor) { - if (std::abs(i_rideActor->current.pos.y - i_rideActor->old.pos.y) > 30.0f) { - static_cast(i_bgActor)->field_0x5a8 = i_rideActor->current.pos.y - i_rideActor->old.pos.y; +static void rideCallBack(dBgW* i_bgw, fopAc_ac_c* i_bgActor, fopAc_ac_c* i_rideActor) { + fopAc_ac_c* ride_actor = (fopAc_ac_c*)i_rideActor; + daObjDust_c* a_this = (daObjDust_c*)i_bgActor; + + if (std::abs(ride_actor->current.pos.y - ride_actor->old.pos.y) > 30.0f) { + a_this->mRideBounce = ride_actor->current.pos.y - ride_actor->old.pos.y; } } @@ -126,13 +134,13 @@ static int daObjDust_Execute(daObjDust_c* i_this) { /* 80BE2808-80BE2810 0005C8 0008+00 1/0 0/0 0/0 .text daObjDust_IsDelete__FP11daObjDust_c */ static int daObjDust_IsDelete(daObjDust_c* i_this) { - return true; + return 1; } /* 80BE2810-80BE2834 0005D0 0024+00 1/0 0/0 0/0 .text daObjDust_Delete__FP11daObjDust_c */ static int daObjDust_Delete(daObjDust_c* i_this) { - fopAcM_GetID(i_this); + fpc_ProcID id = fopAcM_GetID(i_this); i_this->MoveBGDelete(); return 1; } @@ -140,20 +148,19 @@ static int daObjDust_Delete(daObjDust_c* i_this) { int daObjDust_c::create() { fopAcM_SetupActor(this, daObjDust_c); - int phaseStep = dComIfG_resLoad(&mPhaseReq, l_arcName); - if (phaseStep == cPhs_COMPLEATE_e) { - phaseStep = MoveBGCreate( - l_arcName, - dComIfG_getObjctResName2Index(l_arcName, "M_FloatingDust01.dzb"), - dBgS_MoveBGProc_TypicalRotY, - 0x1060, - NULL); - if (phaseStep == cPhs_ERROR_e) { - return phaseStep; + int phase_state = dComIfG_resLoad(&mPhaseReq, l_arcName); + if (phase_state == cPhs_COMPLEATE_e) { + int dzb_id = dComIfG_getObjctResName2Index(l_arcName, "M_FloatingDust01.dzb"); + JUT_ASSERT(116, dzb_id != -1); + + phase_state = MoveBGCreate(l_arcName, dzb_id, dBgS_MoveBGProc_TypicalRotY, 0x1060, NULL); + if (phase_state == cPhs_ERROR_e) { + return phase_state; } } fopAcM_setCullSizeBox(this, -200.0f, -50.0f, -200.0f, 200.0f, 50.0f, 200.0f); + mAcch.Set( fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), @@ -165,25 +172,28 @@ int daObjDust_c::create() { NULL); mAcchCir.SetWall(100.0f, 200.0f); mAcch.CrrPos(dComIfG_Bgsp()); - current.pos.y = -18850.0f; - return phaseStep; + current.pos.y = -18850.0f + HREG_F(0) + oREG_F(0); + + return phase_state; } /* 80BE2834-80BE2A00 0005F4 01CC+00 1/0 0/0 0/0 .text daObjDust_Create__FP10fopAc_ac_c */ static int daObjDust_Create(fopAc_ac_c* i_this) { daObjDust_c* a_this = (daObjDust_c*)i_this; + fpc_ProcID id = fopAcM_GetID(i_this); return a_this->create(); } /* 80BE2A70-80BE2AE8 000830 0078+00 1/0 0/0 0/0 .text CreateHeap__11daObjDust_cFv */ int daObjDust_c::CreateHeap() { J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, "M_FloatingDust01.bmd"); - JUT_ASSERT(82, modelData != 0); + JUT_ASSERT(86, modelData != 0); mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); if (mpModel == NULL) { return 0; } + return 1; } @@ -199,40 +209,35 @@ int daObjDust_c::Create() { // NONMATCHING somehow this needs to not inline TSinCosTable<13,f32>::sinShort int daObjDust_c::Execute(Mtx** i_mtx) { fopAcM_seStartLevel(this, Z2SE_OBJ_FLOATBOARD, 0); - daPy_py_c* pdVar = daPy_getPlayerActorClass(); - fopAcM_GetPosition(pdVar); - fopAcM_GetSpeed(pdVar); + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz& player_pos = fopAcM_GetPosition(player); + cXyz& player_speed = fopAcM_GetSpeed(player); - if (fopAcM_SearchByName(PROC_E_YMB, &e_ymb) != 0 && e_ymb != NULL) { - e_ymb_Pos = fopAcM_GetPosition_p(e_ymb); + if (fopAcM_SearchByName(PROC_E_YMB, &e_ymb) && e_ymb != NULL) { + e_ymb_Pos = &fopAcM_GetPosition(e_ymb); } - field_0x5c4 += field_0x5a4 * 2.0f + 768.0f + field_0x5a0 * 2.0f; - field_0x5c6 += field_0x5a4 * 2.0f + 768.0f + field_0x5a0 * 2.0f; + mRideOscillationPhaseX += 768.0f + TREG_F(1) + ((2.0f + HREG_F(1)) * mRideIntensity) + ((2.0f + BREG_F(3)) * mRideOscillationSpeed); + mRideOscillationPhaseZ += 768.0f + TREG_F(2) + ((2.0f + HREG_F(2)) * mRideIntensity) + ((2.0f + BREG_F(3)) * mRideOscillationSpeed); Check_RideOn(); if (e_ymb != NULL) { Search_Ymb(); } - cXyz water_pos(current.pos.x, current.pos.y + 300.0f, current.pos.z); - f32 water_f32; - if(fopAcM_wt_c::waterCheck(&water_pos)) { - water_f32 = fopAcM_wt_c::getWaterY() - 40.0f; + cXyz water_check_pos(current.pos.x, current.pos.y + 300.0f, current.pos.z); + f32 height; //! @bug: uninitialized value. if the waterCheck fails, this causes the platform height to chase to an unintended height, usually y-0 + if (fopAcM_wt_c::waterCheck(&water_check_pos)) { + height = fopAcM_wt_c::getWaterY() - 40.0f; } - cLib_addCalc(¤t.pos.y, - water_f32 + cM_ssin(field_0x5c6) * 20.0f + ((field_0x5d0 + 80.0f) + field_0x5a8), - 0.1f, 15.0f, 0.1f); - cLib_addCalcAngleS(&shape_angle.x, - field_0x5c8 + field_0x5ac * cM_ssin(field_0x5c4 + 0x2000), - 2, 0x1000, 1); - cLib_addCalcAngleS(&shape_angle.z, - field_0x5cc + field_0x5ac * cM_ssin(field_0x5c6), - 2, 0x1000, 1); - cLib_chaseF(&field_0x5a8, 0.0f, 1.0f); - cLib_addCalc(&field_0x5a0, 0.0f, 0.01f, 100.0f, 0.0f); - cLib_addCalc(&field_0x5d0, 0.0f, 0.1f, 100.0f, 0.0f); + cLib_addCalc(¤t.pos.y, mOffsetY + (HREG_F(0) + (80.0f + height + mRideBounce) + (20.0f * cM_ssin(mRideOscillationPhaseZ))), 0.1f, 15.0f, 0.1f); + cLib_addCalcAngleS(&shape_angle.x, mRideAngle.x + ((1.0f + nREG_F(0)) * mRideAngleAmplitude * cM_ssin(mRideOscillationPhaseX + oREG_S(1) + 0x2000)), 2, 0x1000, 1); + cLib_addCalcAngleS(&shape_angle.z, mRideAngle.z + ((1.0f + nREG_F(1)) * mRideAngleAmplitude * cM_ssin(mRideOscillationPhaseZ)), 2, 0x1000, 1); + + cLib_chaseF(&mRideBounce, 0.0f, 1.0f); + cLib_addCalc(&mRideOscillationSpeed, 0.0f, 0.01f + HREG_F(13), 100.0f, 0.0f); + cLib_addCalc(&mOffsetY, 0.0f, 0.1f, 100.0f, 0.0f); fopAcM_posMoveF(this, mStts.GetCCMoveP()); diff --git a/src/d/actor/d_a_obj_rope_bridge.cpp b/src/d/actor/d_a_obj_rope_bridge.cpp index d843c30b66..468e320f17 100644 --- a/src/d/actor/d_a_obj_rope_bridge.cpp +++ b/src/d/actor/d_a_obj_rope_bridge.cpp @@ -4,466 +4,293 @@ */ #include "d/actor/d_a_obj_rope_bridge.h" -#include "d/d_cc_d.h" -#include "dol2asm.h" +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" +UNK_REL_DATA -// -// Forward References: -// +/* 80597E84-80597E8C -00001 0008+00 3/3 0/0 0/0 .data l_arcName */ +static char* l_arcName[2] = {"L_RopeB_S", "L_RopeB_L"}; -extern "C" void initBaseMtx__14daObjRBridge_cFv(); -extern "C" void setBaseMtx__14daObjRBridge_cFv(); -extern "C" void checkE3Special__14daObjRBridge_cFv(); -extern "C" void setStPos__14daObjRBridge_cFv(); -extern "C" void __dt__4cXyzFv(); -extern "C" void initLinePos__14daObjRBridge_cFv(); -extern "C" void setLinePos__14daObjRBridge_cFv(); -extern "C" void getLinePosSt__14daObjRBridge_cFP4cXyz(); -extern "C" void getLinePosBrg__14daObjRBridge_cFiP4cXyz(); -extern "C" void checkTight__14daObjRBridge_cFv(); -extern "C" void Create__14daObjRBridge_cFv(); -extern "C" void CreateHeap__14daObjRBridge_cFv(); -extern "C" void __ct__4cXyzFv(); -extern "C" void create1st__14daObjRBridge_cFv(); -extern "C" void Execute__14daObjRBridge_cFPPA3_A4_f(); -extern "C" void action__14daObjRBridge_cFv(); -extern "C" void init_wait__14daObjRBridge_cFv(); -extern "C" void mode_wait__14daObjRBridge_cFv(); -extern "C" void init_cut__14daObjRBridge_cFv(); -extern "C" void mode_cut__14daObjRBridge_cFv(); -extern "C" void init_end__14daObjRBridge_cFv(); -extern "C" void mode_end__14daObjRBridge_cFv(); -extern "C" void Draw__14daObjRBridge_cFv(); -extern "C" void checkHimoCulling__14daObjRBridge_cFv(); -extern "C" void Delete__14daObjRBridge_cFv(); -extern "C" static void daObjRBridge_create1st__FP14daObjRBridge_c(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__8dCcD_CpsFv(); -extern "C" void __ct__8dCcD_CpsFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" static void daObjRBridge_MoveBGDelete__FP14daObjRBridge_c(); -extern "C" static void daObjRBridge_MoveBGExecute__FP14daObjRBridge_c(); -extern "C" static void daObjRBridge_MoveBGDraw__FP14daObjRBridge_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" extern char const* const d_a_obj_rope_bridge__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void transM__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void init__19mDoExt_3DlineMat1_cFUsUsP7ResTIMGi(); -extern "C" void update__19mDoExt_3DlineMat1_cFifR8_GXColorUsP12dKy_tevstr_c(); -extern "C" void setMat__26mDoExt_3DlineMatSortPacketFP18mDoExt_3DlineMat_c(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void fopAcM_checkCullingBox__FPA4_fffffff(); -extern "C" void lineCheck__11fopAcM_lc_cFPC4cXyzPC4cXyzPC10fopAc_ac_c(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void request__10dAttLook_cFP10fopAc_ac_cfffsi(); -extern "C" void dBgS_MoveBGProc_Typical__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool IsDelete__16dBgS_MoveBgActorFv(); -extern "C" bool ToFore__16dBgS_MoveBgActorFv(); -extern "C" bool ToBack__16dBgS_MoveBgActorFv(); -extern "C" void -MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f(); -extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv(); -extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CpsFRC11dCcD_SrcCps(); -extern "C" void CalcTgVec__8dCcD_CpsFv(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void normalizeZP__4cXyzFv(); -extern "C" void __ct__8cM3dGCpsFv(); -extern "C" void __dt__8cM3dGCpsFv(); -extern "C" void Set__8cM3dGCpsFRC4cXyzRC4cXyzf(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalc0__FPfff(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void deleteObject__14Z2SoundObjBaseFv(); -extern "C" void startCollisionSE__14Z2SoundObjBaseFUlUlP14Z2SoundObjBase(); -extern "C" void __ct__16Z2SoundObjSimpleFv(); -extern "C" void* __nw__FUl(); -extern "C" void* __nwa__FUl(); -extern "C" void __dl__FPv(); -extern "C" void __construct_array(); -extern "C" void __construct_new_array(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_22(); -extern "C" void _savegpr_23(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_22(); -extern "C" void _restgpr_23(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__19mDoExt_3DlineMat1_c[5]; -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__8dCcD_Cps[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__12cCcD_CpsAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mLineCheck__11fopAcM_lc_c[112]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 mStayNo__20dStage_roomControl_c[4]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" extern u8 data_805980F8[4]; - -// -// Declarations: -// +/* 80597E8C-80597E90 -00001 0004+00 3/3 0/0 0/0 .data l_ropeArcName */ +static char* l_ropeArcName = "L_Ropest"; /* 80595E38-80595ED8 000078 00A0+00 1/1 0/0 0/0 .text initBaseMtx__14daObjRBridge_cFv */ void daObjRBridge_c::initBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(NULL, current.angle.y, 0); + MTXCopy(mDoMtx_stack_c::get(), mMtx); + + mpBrgModel->setBaseScale(scale); + if (mpStopModel != NULL) { + mpStopModel->setBaseScale(scale); + } + + setBaseMtx(); } /* 80595ED8-80595F84 000118 00AC+00 2/2 0/0 0/0 .text setBaseMtx__14daObjRBridge_cFv */ void daObjRBridge_c::setBaseMtx() { - // NONMATCHING -} + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::XrotM(shape_angle.x); + mpBrgModel->setBaseTRMtx(mDoMtx_stack_c::get()); -/* ############################################################################################## */ -/* 80597E40-80597E40 0000C4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80597E40 = "L_RopeB_S"; -SECTION_DEAD static char const* const stringBase_80597E4A = "L_RopeB_L"; -SECTION_DEAD static char const* const stringBase_80597E54 = "L_Ropest"; -SECTION_DEAD static char const* const stringBase_80597E5D = "D_MN54"; -#pragma pop + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); + + if (mpStopModel != NULL) { + mDoMtx_stack_c::transS(mStopPos); + mDoMtx_stack_c::YrotM(shape_angle.y); + mpStopModel->setBaseTRMtx(mDoMtx_stack_c::get()); + } +} /* 80595F84-80595FE0 0001C4 005C+00 2/2 0/0 0/0 .text checkE3Special__14daObjRBridge_cFv */ -void daObjRBridge_c::checkE3Special() { - // NONMATCHING +BOOL daObjRBridge_c::checkE3Special() { + // E3 Dungeon - Fortress (Interior 1) + if (strcmp(dComIfGp_getStartStageName(), "D_MN54") == 0 && dComIfGp_roomControl_getStayNo() == 7) { + return TRUE; + } + + return FALSE; } -/* ############################################################################################## */ /* 80597D7C-80597D84 000000 0008+00 9/9 0/0 0/0 .rodata l_brgBmdIdx */ -SECTION_RODATA static u8 const l_brgBmdIdx[8] = { - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, -}; -COMPILER_STRIP_GATE(0x80597D7C, &l_brgBmdIdx); +static const int l_brgBmdIdx[] = {4, 4}; /* 80597D84-80597D8C 000008 0008+00 1/1 0/0 0/0 .rodata l_brgDzbIdx */ -SECTION_RODATA static u8 const l_brgDzbIdx[8] = { - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, -}; -COMPILER_STRIP_GATE(0x80597D84, &l_brgDzbIdx); +static const int l_brgDzbIdx[] = {7, 7}; /* 80597D8C-80597D94 000010 0008+00 0/0 0/0 0/0 .rodata l_brg_height */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_brg_height[8] = { - 0x44, 0x16, 0x00, 0x00, 0x44, 0x96, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80597D8C, &l_brg_height); -#pragma pop +static const f32 l_brg_height[] = {600.0f, 1200.0f}; /* 80597D94-80597D9C 000018 0008+00 0/1 0/0 0/0 .rodata l_rope_length */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_rope_length[8] = { - 0x43, 0x96, 0x00, 0x00, 0x43, 0xE1, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80597D94, &l_rope_length); -#pragma pop +static const f32 l_rope_length[] = {300.0f, 450.0f}; /* 80597D9C-80597DA4 000020 0008+00 0/2 0/0 0/0 .rodata l_himo_thick */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_himo_thick[8] = { - 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xDC, -}; -COMPILER_STRIP_GATE(0x80597D9C, &l_himo_thick); -#pragma pop +static const int l_himo_thick[] = {80, 220}; /* 80597DA4-80597DAC 000028 0008+00 1/1 0/0 0/0 .rodata l_heap_size */ -SECTION_RODATA static u8 const l_heap_size[8] = { - 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x25, 0x00, -}; -COMPILER_STRIP_GATE(0x80597DA4, &l_heap_size); +static const u32 l_heap_size[] = {0x2500, 0x2500}; /* 80597DAC-80597DC4 000030 0018+00 1/1 0/0 0/0 .rodata l_rope_cullbox_offset */ -SECTION_RODATA static u8 const l_rope_cullbox_offset[24] = { - 0x00, 0x00, 0x00, 0x00, 0x44, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0x89, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, +static const Vec l_rope_cullbox_offset[] = { + {0.0f, 550.0f, 0.0f}, + {0.0f, 1100.0f, 0.0f}, }; -COMPILER_STRIP_GATE(0x80597DAC, &l_rope_cullbox_offset); /* 80597DC4-80597DDC 000048 0018+00 1/1 0/0 0/0 .rodata l_rope_cullbox */ -SECTION_RODATA static u8 const l_rope_cullbox[24] = { - 0xC3, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0xAF, 0x00, 0x00, - 0x43, 0xAF, 0x00, 0x00, 0x43, 0xAF, 0x00, 0x00, 0x43, 0xAF, 0x00, 0x00, +static const cull_box l_rope_cullbox = { + {-350.0f, 0.0f, -350.0f}, + {350.0f, 350.0f, 350.0f}, }; -COMPILER_STRIP_GATE(0x80597DC4, &l_rope_cullbox); - -/* 80597DDC-80597DE4 000060 0008+00 0/1 0/0 0/0 .rodata @3669 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3669[8] = { - 0x44, 0x53, 0x40, 0x00, 0x44, 0xC8, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80597DDC, &lit_3669); -#pragma pop - -/* 80597DE4-80597DE8 000068 0004+00 0/6 0/0 0/0 .rodata @3696 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3696[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80597DE4, &lit_3696); -#pragma pop - -/* 80597DE8-80597DEC 00006C 0004+00 0/2 0/0 0/0 .rodata @3697 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3697 = 100.0f; -COMPILER_STRIP_GATE(0x80597DE8, &lit_3697); -#pragma pop - -/* 80597DEC-80597DF0 000070 0004+00 0/1 0/0 0/0 .rodata @3698 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3698 = -1500.0f; -COMPILER_STRIP_GATE(0x80597DEC, &lit_3698); -#pragma pop /* 80595FE0-80596130 000220 0150+00 1/1 0/0 0/0 .text setStPos__14daObjRBridge_cFv */ void daObjRBridge_c::setStPos() { - // NONMATCHING + f32 height[2] = {845.0f + KREG_F(3), 1600.0f + KREG_F(4)}; + cXyz start(0.0f, 0.0f, 100.0f); + cXyz end(0.0f, 0.0f, -1500.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::multVec(&start, &start); + mDoMtx_stack_c::multVec(&end, &end); + start.y += height[mType]; + end.y += height[mType]; + + if (fopAcM_lc_c::lineCheck(&start, &end, this)) { + mStopPos = fopAcM_lc_c::getCross(); + } else { + // "No wall around stop set position!\n" + OS_REPORT_ERROR("止め具セット位置周辺に壁がありません!\n"); + mStopPos = current.pos; + } + + attention_info.position = mStopPos; + eyePos = mStopPos; } -/* 80596130-8059616C 000370 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80597DF0-80597DF4 000074 0004+00 0/1 0/0 0/0 .rodata @3824 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3824 = 15.0f; -COMPILER_STRIP_GATE(0x80597DF0, &lit_3824); -#pragma pop - -/* 80597DF4-80597DF8 000078 0004+00 0/2 0/0 0/0 .rodata @3825 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3825 = 30.0f; -COMPILER_STRIP_GATE(0x80597DF4, &lit_3825); -#pragma pop - /* 8059616C-805963C4 0003AC 0258+00 1/1 0/0 0/0 .text initLinePos__14daObjRBridge_cFv */ void daObjRBridge_c::initLinePos() { - // NONMATCHING + cXyz st_pos; + cXyz brg_pos[2]; + getLinePosSt(&st_pos); + getLinePosBrg(0, &brg_pos[0]); + getLinePosBrg(1, &brg_pos[1]); + + if (!fopAcM_isSwitch(this, getSwbit()) && !fopAcM_isSwitch(this, getSwbit2())) { + for (int i = 0; i < 2; i++) { + cXyz sp5C = brg_pos[i] - st_pos; + sp5C.normalizeZP(); + + cXyz* linepos_p = mpLineMat[i]->getPos(0); + cXyz* sp10 = field_0xb04; + + cXyz sp50; + cXyz sp44; + cXyz sp38; + sp38.set(0.0f, 0.0f, 15.0f + KREG_F(2)); + mDoMtx_stack_c::YrotS(current.angle.y); + mDoMtx_stack_c::multVec(&sp38, &sp38); + + *linepos_p = st_pos; + sp50 = *linepos_p; + + int j = 0; + cXyz* var_r28 = linepos_p + 1; + for (; j < mRopeSegmentNum - 1; j++, var_r28++, sp10++) { + *var_r28 = sp50 + (sp5C * 30.0f); + sp50 = *var_r28; + *sp10 = sp38; + } + + var_r28[-1] = brg_pos[i]; + field_0xb08[i] = mRopeSegmentNum - 1; + } + } } -/* ############################################################################################## */ -/* 80597DF8-80597DFC 00007C 0004+00 0/1 0/0 0/0 .rodata @3998 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_3998 = 0xBC23D708; -COMPILER_STRIP_GATE(0x80597DF8, &lit_3998); -#pragma pop - -/* 80597DFC-80597E04 000080 0004+04 0/3 0/0 0/0 .rodata @3999 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3999[1 + 1 /* padding */] = { - 1.0f / 10.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80597DFC, &lit_3999); -#pragma pop - /* 805963C4-80596768 000604 03A4+00 1/1 0/0 0/0 .text setLinePos__14daObjRBridge_cFv */ void daObjRBridge_c::setLinePos() { - // NONMATCHING + cXyz st_pos; + cXyz brg_pos[2]; + getLinePosSt(&st_pos); + getLinePosBrg(0, &brg_pos[0]); + getLinePosBrg(1, &brg_pos[1]); + + if (!fopAcM_isSwitch(this, getSwbit()) && !fopAcM_isSwitch(this, getSwbit2())) { + for (int i = 0; i < 2; i++) { + cXyz spB0 = brg_pos[i] - st_pos; + spB0.normalizeZP(); + + cXyz* linepos_p = mpLineMat[i]->getPos(0); + + cXyz spA4; + *linepos_p = st_pos; + spA4 = *linepos_p; + + linepos_p++; + for (int j = 0; j < mRopeSegmentNum - 1; j++, linepos_p++) { + *linepos_p = spA4 + (spB0 * 30.0f); + spA4 = *linepos_p; + } + + linepos_p[-1] = brg_pos[i]; + } + } else { + for (int i = 0; i < 2; i++) { + if (mpLineMat[i] != NULL) { + cXyz* linepos_p = mpLineMat[i]->getPos(0); + cXyz* sp14 = &field_0xb04[mRopeSegmentNum - 1]; + + cXyz sp98; + linepos_p += mRopeSegmentNum - 1; + *linepos_p = brg_pos[i]; + sp98 = *linepos_p; + + linepos_p--; + sp14--; + + for (int j = mRopeSegmentNum - 2; j >= 0; j--, linepos_p--, sp14--) { + if (j < field_0xb08[i]) { + sp14->z *= 1.0f - KREG_F(1); + sp14->y += -0.0099999979f - KREG_F(0); + + cXyz sp8C = linepos_p[1] - linepos_p[0]; + if (sp8C.y > 0.0f) { + sp8C.normalizeZP(); + sp14->z += sp8C.z * (0.1f + KREG_F(14)); + sp14->x += sp8C.x * (0.1f + KREG_F(14)); + } + + *linepos_p += *sp14; + + cXyz sp80 = linepos_p[0] - linepos_p[1]; + sp80.normalizeZP(); + sp80 = sp80 * 30.0f; + *linepos_p = linepos_p[1] + sp80; + } + } + } + } + } } -/* ############################################################################################## */ -/* 80597E64-80597E70 000000 000C+00 3/3 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, -}; - -/* 80597E70-80597E84 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ -#pragma push -#pragma force_active on -SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { - 0x02000201, - /* padding */ - 0x40080000, - 0x00000000, - 0x3FE00000, - 0x00000000, -}; -#pragma pop - -/* 80597E84-80597E8C -00001 0008+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName[2] = { - (void*)&d_a_obj_rope_bridge__stringBase0, - (void*)(((char*)&d_a_obj_rope_bridge__stringBase0) + 0xA), -}; - -/* 80597E8C-80597E90 -00001 0004+00 3/3 0/0 0/0 .data l_ropeArcName */ -SECTION_DATA static void* l_ropeArcName = - (void*)(((char*)&d_a_obj_rope_bridge__stringBase0) + 0x14); - /* 80597E90-80597EA8 00002C 0018+00 1/1 0/0 0/0 .data l_rope_offsetL */ -SECTION_DATA static u8 l_rope_offsetL[24] = { - 0xC2, 0xF0, 0x00, 0x00, 0x44, 0x91, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0xF0, 0x00, 0x00, 0x44, 0x91, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, +static Vec l_rope_offsetL[] = { + {-120.0f, 1165.0f, 0.0f}, + {120.0f, 1165.0f, 0.0f}, }; /* 80597EA8-80597EC0 000044 0018+00 1/1 0/0 0/0 .data l_rope_offsetS */ -SECTION_DATA static u8 l_rope_offsetS[24] = { - 0xC2, 0xF0, 0x00, 0x00, 0x44, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0xF0, 0x00, 0x00, 0x44, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, +static Vec l_rope_offsetS[] = { + {-120.0f, 575.0f, 0.0f}, + {120.0f, 575.0f, 0.0f}, }; /* 80597EC0-80597ECC 00005C 000C+00 1/1 0/0 0/0 .data l_rope_offsetSt */ -SECTION_DATA static u8 l_rope_offsetSt[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x8C, 0x00, 0x00, -}; +static Vec l_rope_offsetSt = {0.0f, 0.0f, 70.0f}; /* 80596768-805967E4 0009A8 007C+00 4/4 0/0 0/0 .text getLinePosSt__14daObjRBridge_cFP4cXyz */ -void daObjRBridge_c::getLinePosSt(cXyz* param_0) { - // NONMATCHING +void daObjRBridge_c::getLinePosSt(cXyz* o_pos) { + *o_pos = l_rope_offsetSt; + mDoMtx_stack_c::transS(mStopPos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(o_pos, o_pos); } /* 805967E4-8059689C 000A24 00B8+00 4/4 0/0 0/0 .text getLinePosBrg__14daObjRBridge_cFiP4cXyz */ -void daObjRBridge_c::getLinePosBrg(int param_0, cXyz* param_1) { - // NONMATCHING +void daObjRBridge_c::getLinePosBrg(int param_0, cXyz* o_pos) { + if (mType == 0) { + *o_pos = l_rope_offsetS[param_0]; + } else { + *o_pos = l_rope_offsetL[param_0]; + } + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::multVec(o_pos, o_pos); } -/* ############################################################################################## */ -/* 80597E04-80597E0C 000088 0008+00 0/1 0/0 0/0 .rodata @4060 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4060[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80597E04, &lit_4060); -#pragma pop - -/* 80597E0C-80597E14 000090 0008+00 0/1 0/0 0/0 .rodata @4061 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4061[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80597E0C, &lit_4061); -#pragma pop - -/* 80597E14-80597E1C 000098 0008+00 0/1 0/0 0/0 .rodata @4062 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4062[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80597E14, &lit_4062); -#pragma pop - /* 8059689C-805969FC 000ADC 0160+00 1/1 0/0 0/0 .text checkTight__14daObjRBridge_cFv */ -void daObjRBridge_c::checkTight() { - // NONMATCHING +BOOL daObjRBridge_c::checkTight() { + cXyz brg_pos; + cXyz st_pos; + getLinePosBrg(0, &brg_pos); + getLinePosSt(&st_pos); + + if (st_pos.abs(brg_pos) >= (KREG_F(6) + l_rope_length[mType])) { + return TRUE; + } + + return FALSE; } -/* ############################################################################################## */ /* 80597ECC-80597EE4 000068 0018+00 0/1 0/0 0/0 .data l_cull_sizeS */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_cull_sizeS[24] = { - 0xC3, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, - 0x43, 0x7A, 0x00, 0x00, 0x44, 0x89, 0x80, 0x00, 0x44, 0x7A, 0x00, 0x00, +static cull_box l_cull_sizeS = { + {-250.0f, 0.0f, -100.0f}, + {250.0f, 1100.0f, 1000.0f}, }; -#pragma pop /* 80597EE4-80597EFC 000080 0018+00 0/1 0/0 0/0 .data l_cull_sizeL */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_cull_sizeL[24] = { - 0xC3, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, - 0x43, 0xC8, 0x00, 0x00, 0x44, 0xBB, 0x80, 0x00, 0x44, 0xBB, 0x80, 0x00, +static cull_box l_cull_sizeL = { + {-400.0f, 0.0f, -100.0f}, + {400.0f, 1500.0f, 1500.0f}, }; -#pragma pop /* 80597EFC-80597F04 000098 0008+00 0/1 0/0 0/0 .data l_att_disXZ */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_att_disXZ[8] = { - 0x44, 0xFA, 0x00, 0x00, 0x44, 0xFA, 0x00, 0x00, -}; -#pragma pop +static f32 l_att_disXZ[] = {2000.0f, 2000.0f}; /* 80597F04-80597F0C 0000A0 0008+00 0/1 0/0 0/0 .data l_att_high */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_att_high[8] = { - 0x44, 0x7A, 0x00, 0x00, 0x44, 0xFA, 0x00, 0x00, -}; -#pragma pop +static f32 l_att_high[] = {1000.0f, 2000.0f}; /* 80597F0C-80597F14 0000A8 0008+00 0/1 0/0 0/0 .data l_att_low */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_att_low[8] = { - 0xC3, 0xFA, 0x00, 0x00, 0xC3, 0xFA, 0x00, 0x00, -}; -#pragma pop +static f32 l_att_low[] = {-500.0f, -500.0f}; /* 80597F14-80597F18 0000B0 0004+00 0/1 0/0 0/0 .data l_att_ang */ -#pragma push -#pragma force_active on -SECTION_DATA static u32 l_att_ang = 0x60006000; -#pragma pop +static s16 l_att_ang[] = {0x6000, 0x6000}; /* 80597F18-80597F58 0000B4 0040+00 0/1 0/0 0/0 .data l_sph_src */ -#pragma push -#pragma force_active on static dCcD_SrcSph l_sph_src = { { {0x0, {{0x0, 0x0, 0x0}, {0x2002, 0x11}, 0x18}}, // mObj @@ -475,11 +302,8 @@ static dCcD_SrcSph l_sph_src = { {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph } // mSphAttr }; -#pragma pop /* 80597F58-80597F98 0000F4 0040+00 0/1 0/0 0/0 .data l_sph_src2 */ -#pragma push -#pragma force_active on static dCcD_SrcSph l_sph_src2 = { { {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x10}, 0x19}}, // mObj @@ -491,11 +315,8 @@ static dCcD_SrcSph l_sph_src2 = { {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph } // mSphAttr }; -#pragma pop /* 80597F98-80597FE4 000134 004C+00 0/1 0/0 0/0 .data l_cps_src */ -#pragma push -#pragma force_active on static dCcD_SrcCps l_cps_src = { { {0x0, {{0x0, 0x0, 0x0}, {0x2002, 0x11}, 0x0}}, // mObj @@ -507,71 +328,368 @@ static dCcD_SrcCps l_cps_src = { {{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, 50.0f}, // mCps } // mCpsAttr }; -#pragma pop /* 805969FC-80596B88 000C3C 018C+00 1/0 0/0 0/0 .text Create__14daObjRBridge_cFv */ -void daObjRBridge_c::Create() { - // NONMATCHING +int daObjRBridge_c::Create() { + if (fopAcM_isSwitch(this, getSwbit()) || fopAcM_isSwitch(this, getSwbit2())) { + shape_angle.x = 0x4000; + init_end(); + } else { + init_wait(); + } + + setStPos(); + initBaseMtx(); + fopAcM_SetMtx(this, mMtx); + + mCcStts.Init(0xFF, 0xFF, this); + mCcSph.Set(l_sph_src); + mCcSph.SetStts(&mCcStts); + mCcSph2.Set(l_sph_src2); + mCcSph2.SetStts(&mCcStts); + + for (int i = 0; i < 2; i++) { + mCcCps[i].Set(l_cps_src); + mCcCps[i].SetStts(&mCcStts); + } + + Vec* cull_min; + Vec* cull_max; + if (mType == 0) { + cull_min = &l_cull_sizeS.min; + cull_max = &l_cull_sizeS.max; + } else { + cull_min = &l_cull_sizeL.min; + cull_max = &l_cull_sizeL.max; + } + + fopAcM_setCullSizeBox(this, cull_min->x, cull_min->y, cull_min->z, cull_max->x, cull_max->y, cull_max->z); + field_0xb18 = 50; + initLinePos(); + + mSound.init(&mStopPos, 1); + return 1; } -/* ############################################################################################## */ -/* 80597FE4-80597FF0 -00001 000C+00 0/1 0/0 0/0 .data @4218 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4218[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)mode_wait__14daObjRBridge_cFv, -}; -#pragma pop +/* 80596B88-80596DE8 000DC8 0260+00 1/0 0/0 0/0 .text CreateHeap__14daObjRBridge_cFv */ +int daObjRBridge_c::CreateHeap() { + void* modelData = dComIfG_getObjectRes(l_arcName[mType], l_brgBmdIdx[mType]); + JUT_ASSERT(837, modelData != 0); + mpBrgModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000084); + if (mpBrgModel == NULL) { + return 0; + } -/* 80597FF0-80597FFC -00001 000C+00 0/1 0/0 0/0 .data @4219 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4219[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)mode_cut__14daObjRBridge_cFv, -}; -#pragma pop + if (!fopAcM_isSwitch(this, getSwbit2())) { + modelData = dComIfG_getObjectRes(l_ropeArcName, 4); + JUT_ASSERT(853, modelData != 0); + mpStopModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000084); + if (mpStopModel == NULL) { + return 0; + } + } else { + mpStopModel = NULL; + } -/* 80597FFC-80598008 -00001 000C+00 0/1 0/0 0/0 .data @4220 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4220[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)mode_end__14daObjRBridge_cFv, -}; -#pragma pop + if (!fopAcM_isSwitch(this, getSwbit2()) && !fopAcM_isSwitch(this, getSwbit())) { + mRopeSegmentNum = 10; + field_0xb04 = new cXyz[mRopeSegmentNum]; + if (field_0xb04 == NULL) { + return 0; + } -/* 80598008-8059802C 0001A4 0024+00 0/1 0/0 0/0 .data mode_proc$4217 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 mode_proc[36] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#pragma pop + for (int i = 0; i < 2; i++) { + mpLineMat[i] = new mDoExt_3DlineMat1_c(); + if (mpLineMat[i] == NULL) { + // "Rope Stop: 3D line material class creation failure" + OS_REPORT_ERROR("止め具ロープ:3Dラインマテリアルクラス生成失敗\n"); + return 0; + } -/* 8059802C-80598034 0001C8 0008+00 1/1 0/0 0/0 .data l_fall_start_se$4321 */ -SECTION_DATA static u8 l_fall_start_se[8] = { - 0x00, 0x08, 0x01, 0x44, 0x00, 0x08, 0x01, 0x46, -}; + if (!mpLineMat[i]->init(1, mRopeSegmentNum, (ResTIMG*)dComIfG_getObjectRes(l_ropeArcName, 7), 1)) { + // "Rope Stop: 3D line material class initialization failure" + OS_REPORT_ERROR("止め具ロープ:3Dラインマテリアルクラス初期化失敗\n"); + return 0; + } + } + } else { + for (int i = 0; i < 2; i++) { + mpLineMat[i] = NULL; + } + } -/* 80598034-8059803C 0001D0 0008+00 1/1 0/0 0/0 .data l_fall_end_se$4322 */ -SECTION_DATA static u8 l_fall_end_se[8] = { - 0x00, 0x08, 0x01, 0x45, 0x00, 0x08, 0x01, 0x47, -}; + return 1; +} + +/* 80596DEC-80596EBC 00102C 00D0+00 1/1 0/0 0/0 .text create1st__14daObjRBridge_cFv */ +int daObjRBridge_c::create1st() { + mType = getType(); + if (mType != 0 && mType != 1) { + // "Rope Stop Bridge: Invalid type\n" + OS_REPORT_ERROR("止め具ロープ付き橋:タイプが不正です\n"); + JUT_ASSERT(923, 0); + } + + int rope_phase_state = dComIfG_resLoad(&mRopePhase, l_ropeArcName); + if (rope_phase_state != cPhs_COMPLEATE_e) { + return rope_phase_state; + } + + int phase_state = dComIfG_resLoad(&mPhase, l_arcName[mType]); + if (phase_state == cPhs_COMPLEATE_e) { + phase_state = MoveBGCreate(l_arcName[mType], l_brgDzbIdx[mType], dBgS_MoveBGProc_Typical, l_heap_size[mType], NULL); + if (phase_state == cPhs_ERROR_e) { + return phase_state; + } + + OS_REPORT("ROPEB PARAM : %x\n", fopAcM_GetParam(this)); + } + + return phase_state; +} + +/* 80596EBC-80596FA8 0010FC 00EC+00 1/0 0/0 0/0 .text Execute__14daObjRBridge_cFPPA3_A4_f + */ +int daObjRBridge_c::Execute(f32 (**param_0)[3][4]) { + action(); + setLinePos(); + + *param_0 = &mBgMtx; + setBaseMtx(); + + mSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + + if (!fopAcM_isSwitch(this, getSwbit())) { + dComIfGp_att_LookRequest(this, l_att_disXZ[mType], l_att_high[mType], l_att_low[mType], l_att_ang[mType], 1); + } + + return 1; +} + +/* 80596FA8-8059715C 0011E8 01B4+00 1/1 0/0 0/0 .text action__14daObjRBridge_cFv */ +void daObjRBridge_c::action() { + typedef void (daObjRBridge_c::*modeProc)(); + static modeProc mode_proc[] = { + &daObjRBridge_c::mode_wait, + &daObjRBridge_c::mode_cut, + &daObjRBridge_c::mode_end, + }; + + if (mCcSph.ChkTgHit()) { + cCcD_Obj* hit_obj = mCcSph.GetTgHitObj(); + if (hit_obj != NULL && (hit_obj->ChkAtType(AT_TYPE_ARROW) || hit_obj->ChkAtType(AT_TYPE_NORMAL_SWORD))) { + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28, NULL); + } + + mCcSph.ClrTgHit(); + } + + (this->*mode_proc[mMode])(); + + cXyz cc_center(0.0f, 0.0f, 100.0f); + mDoMtx_stack_c::transS(mStopPos); + mDoMtx_stack_c::YrotM(current.angle.y); + mDoMtx_stack_c::multVec(&cc_center, &cc_center); + + mCcSph.SetR(40.0f); + mCcSph.SetC(cc_center); + dComIfG_Ccsp()->Set(&mCcSph); + + mCcSph2.SetR(40.0f + KREG_F(4)); + mCcSph2.SetC(cc_center); + dComIfG_Ccsp()->Set(&mCcSph2); +} + +/* 8059715C-80597170 00139C 0014+00 1/1 0/0 0/0 .text init_wait__14daObjRBridge_cFv */ +void daObjRBridge_c::init_wait() { + mFallTimer = 5; + mMode = 0; +} + +/* 80597170-805973BC 0013B0 024C+00 1/0 0/0 0/0 .text mode_wait__14daObjRBridge_cFv */ +void daObjRBridge_c::mode_wait() { + if (checkTight()) { + field_0xb18 = 0; + field_0xb1a = 0; + shape_angle.x = 0x600; + } else { + field_0xb18 = 50; + field_0xb1a += field_0xb18; + shape_angle.x += field_0xb1a; + } + + bool rope_cut = false; + for (int i = 0; i < 2; i++) { + if (mCcCps[i].ChkTgHit()) { + cCcD_Obj* hit_obj = mCcCps[i].GetTgHitObj(); + if (hit_obj != NULL && (hit_obj->ChkAtType(AT_TYPE_ARROW) || hit_obj->ChkAtType(AT_TYPE_NORMAL_SWORD))) { + rope_cut = true; + } + } + } + + bool is_switch = fopAcM_isSwitch(this, getSwbit2()); + if (rope_cut || is_switch) { + // "Rope Stop rope is cut! <%d>\n" + OS_REPORT("止め具付きロープ切れた!<%d>\n", getSwbit2()); + if (!checkE3Special()) { + mDoAud_seStart(Z2SE_OBJ_ROPEBRDG_CUT, &mStopPos, 0, 0); + } + + fopAcM_onSwitch(this, getSwbit()); + init_cut(); + } + + for (int i = 0; i < 2; i++) { + cXyz st_pos; + cXyz brg_pos; + getLinePosSt(&st_pos); + getLinePosBrg(i, &brg_pos); + + mCcCps[i].cM3dGCps::Set(st_pos, brg_pos, 0.1f * (KREG_F(10) + l_himo_thick[mType])); + mCcCps[i].CalcTgVec(); + dComIfG_Ccsp()->Set(&mCcCps[i]); + } +} + +/* 805973BC-805973E4 0015FC 0028+00 1/1 0/0 0/0 .text init_cut__14daObjRBridge_cFv */ +void daObjRBridge_c::init_cut() { + field_0xb18 = 0; + field_0xb1a = 0; + field_0xaf4 = 0; + field_0xaf8 = 1.0f; + mMode = 1; +} + +/* 805973E4-805975E8 001624 0204+00 1/0 0/0 0/0 .text mode_cut__14daObjRBridge_cFv */ +void daObjRBridge_c::mode_cut() { + if (mFallTimer >= 0) { + if (mFallTimer == 0 && !checkE3Special()) { + static u32 l_fall_start_se[] = {Z2SE_OBJ_ROPEBRDG_MOVE_S, Z2SE_OBJ_ROPEBRDG_MOVE_L}; + fopAcM_seStart(this, l_fall_start_se[mType], 0); + } + mFallTimer--; + return; + } + + cLib_addCalcAngleS(&field_0xb18, 50, 60, 4, 1); + cLib_addCalc0(&field_0xaf8, 0.05f, 0.15f); + + field_0xb1a += field_0xb18; + field_0xb1a = field_0xb1a * (1.0f - field_0xaf8); + + shape_angle.x += field_0xb1a; + if (shape_angle.x > 0x4000) { + field_0xb1a = 0; + shape_angle.x = 0x4000; + + if (!checkE3Special()) { + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER4, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); + static u32 l_fall_end_se[] = {Z2SE_OBJ_ROPEBRDG_FALLDOWN_S, Z2SE_OBJ_ROPEBRDG_FALLDOWN_L}; + fopAcM_seStart(this, l_fall_end_se[mType], 0); + } + + init_end(); + } +} + +/* 805975E8-805975F4 001828 000C+00 2/2 0/0 0/0 .text init_end__14daObjRBridge_cFv */ +void daObjRBridge_c::init_end() { + mMode = 2; +} + +/* 805975F4-805975F8 001834 0004+00 1/0 0/0 0/0 .text mode_end__14daObjRBridge_cFv */ +void daObjRBridge_c::mode_end() {} + +/* 805975F8-805977D0 001838 01D8+00 1/0 0/0 0/0 .text Draw__14daObjRBridge_cFv */ +int daObjRBridge_c::Draw() { + g_env_light.settingTevStruct(16, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpBrgModel, &tevStr); + + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpBrgModel); + dComIfGd_setList(); + + if (mpStopModel != NULL) { + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpStopModel, &tevStr); + mDoExt_modelUpdateDL(mpStopModel); + } + + if (shape_angle.x == 0x4000 && checkHimoCulling()) { + mHideRope = true; + } + + if (!mHideRope) { + for (int i = 0; i < 2; i++) { + if (mpLineMat[i] != NULL) { + GXColor sp40 = {0, 0, 0, 0}; + mpLineMat[i]->update(mRopeSegmentNum, 0.1f * (KREG_F(10) + l_himo_thick[mType]), sp40, 0, &tevStr); + dComIfGd_set3DlineMat(mpLineMat[i]); + } + } + } + + return 1; +} + +/* 805977D0-805978BC 001A10 00EC+00 1/1 0/0 0/0 .text checkHimoCulling__14daObjRBridge_cFv */ +BOOL daObjRBridge_c::checkHimoCulling() { + Mtx cullmtx; + cXyz offset(l_rope_cullbox_offset[mType]); + cXyz min(l_rope_cullbox.min); + cXyz max(l_rope_cullbox.max); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::XrotM(shape_angle.x); + mDoMtx_stack_c::transM(offset); + + MTXCopy(mDoMtx_stack_c::get(), cullmtx); + return fopAcM_checkCullingBox(cullmtx, min.x, min.y, min.z, max.x, max.y, max.z); +} + +/* 805978BC-80597920 001AFC 0064+00 1/0 0/0 0/0 .text Delete__14daObjRBridge_cFv */ +int daObjRBridge_c::Delete() { + mSound.deleteObject(); + + dComIfG_resDelete(&mPhase, l_arcName[mType]); + dComIfG_resDelete(&mRopePhase, l_ropeArcName); + return 1; +} + +/* 80597920-80597A90 001B60 0170+00 1/0 0/0 0/0 .text daObjRBridge_create1st__FP14daObjRBridge_c + */ +static int daObjRBridge_create1st(daObjRBridge_c* a_this) { + fopAcM_SetupActor(a_this, daObjRBridge_c); + return a_this->create1st(); +} + +/* 80597CC0-80597CE0 001F00 0020+00 1/0 0/0 0/0 .text + * daObjRBridge_MoveBGDelete__FP14daObjRBridge_c */ +static int daObjRBridge_MoveBGDelete(daObjRBridge_c* a_this) { + return a_this->MoveBGDelete(); +} + +/* 80597CE0-80597D00 001F20 0020+00 1/0 0/0 0/0 .text + * daObjRBridge_MoveBGExecute__FP14daObjRBridge_c */ +static int daObjRBridge_MoveBGExecute(daObjRBridge_c* a_this) { + return a_this->MoveBGExecute(); +} + +/* 80597D00-80597D2C 001F40 002C+00 1/0 0/0 0/0 .text daObjRBridge_MoveBGDraw__FP14daObjRBridge_c + */ +static int daObjRBridge_MoveBGDraw(daObjRBridge_c* a_this) { + return a_this->MoveBGDraw(); +} /* 8059803C-8059805C -00001 0020+00 1/0 0/0 0/0 .data daObjRBridge_METHODS */ static actor_method_class daObjRBridge_METHODS = { - (process_method_func)daObjRBridge_create1st__FP14daObjRBridge_c, - (process_method_func)daObjRBridge_MoveBGDelete__FP14daObjRBridge_c, - (process_method_func)daObjRBridge_MoveBGExecute__FP14daObjRBridge_c, - 0, - (process_method_func)daObjRBridge_MoveBGDraw__FP14daObjRBridge_c, + (process_method_func)daObjRBridge_create1st, + (process_method_func)daObjRBridge_MoveBGDelete, + (process_method_func)daObjRBridge_MoveBGExecute, + (process_method_func)NULL, + (process_method_func)daObjRBridge_MoveBGDraw, }; /* 8059805C-8059808C -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_RopeBridge */ @@ -591,246 +709,3 @@ extern actor_process_profile_definition g_profile_Obj_RopeBridge = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 8059808C-80598098 000228 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 80598098-805980A4 000234 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 805980A4-805980B0 000240 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 805980B0-805980BC 00024C 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 805980BC-805980D0 000258 0014+00 1/1 0/0 0/0 .data __vt__18mDoExt_3DlineMat_c */ -SECTION_DATA extern void* __vt__18mDoExt_3DlineMat_c[5] = { - (void*)NULL /* RTTI */, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, -}; - -/* 80596B88-80596DE8 000DC8 0260+00 1/0 0/0 0/0 .text CreateHeap__14daObjRBridge_cFv */ -void daObjRBridge_c::CreateHeap() { - // NONMATCHING -} - -/* 80596DE8-80596DEC 001028 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -// cXyz::cXyz() { -extern "C" void __ct__4cXyzFv() { - /* empty function */ -} - -/* 80596DEC-80596EBC 00102C 00D0+00 1/1 0/0 0/0 .text create1st__14daObjRBridge_cFv */ -void daObjRBridge_c::create1st() { - // NONMATCHING -} - -/* 80596EBC-80596FA8 0010FC 00EC+00 1/0 0/0 0/0 .text Execute__14daObjRBridge_cFPPA3_A4_f - */ -void daObjRBridge_c::Execute(f32 (**param_0)[3][4]) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80597E1C-80597E20 0000A0 0004+00 0/1 0/0 0/0 .rodata @4239 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4239 = 40.0f; -COMPILER_STRIP_GATE(0x80597E1C, &lit_4239); -#pragma pop - -/* 80596FA8-8059715C 0011E8 01B4+00 1/1 0/0 0/0 .text action__14daObjRBridge_cFv */ -void daObjRBridge_c::action() { - // NONMATCHING -} - -/* 8059715C-80597170 00139C 0014+00 1/1 0/0 0/0 .text init_wait__14daObjRBridge_cFv */ -void daObjRBridge_c::init_wait() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80597E20-80597E24 0000A4 0004+00 1/3 0/0 0/0 .rodata @4310 */ -SECTION_RODATA static f32 const lit_4310 = 1.0f; -COMPILER_STRIP_GATE(0x80597E20, &lit_4310); - -/* 80597E24-80597E2C 0000A8 0004+04 0/2 0/0 0/0 .rodata @4311 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4311[1 + 1 /* padding */] = { - -1.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80597E24, &lit_4311); -#pragma pop - -/* 80597E2C-80597E34 0000B0 0008+00 0/3 0/0 0/0 .rodata @4313 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4313[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80597E2C, &lit_4313); -#pragma pop - -/* 80597170-805973BC 0013B0 024C+00 1/0 0/0 0/0 .text mode_wait__14daObjRBridge_cFv */ -void daObjRBridge_c::mode_wait() { - // NONMATCHING -} - -/* 805973BC-805973E4 0015FC 0028+00 1/1 0/0 0/0 .text init_cut__14daObjRBridge_cFv */ -void daObjRBridge_c::init_cut() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80597E34-80597E38 0000B8 0004+00 0/1 0/0 0/0 .rodata @4356 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4356 = 1.0f / 20.0f; -COMPILER_STRIP_GATE(0x80597E34, &lit_4356); -#pragma pop - -/* 80597E38-80597E3C 0000BC 0004+00 0/1 0/0 0/0 .rodata @4357 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4357 = 3.0f / 20.0f; -COMPILER_STRIP_GATE(0x80597E38, &lit_4357); -#pragma pop - -/* 805973E4-805975E8 001624 0204+00 1/0 0/0 0/0 .text mode_cut__14daObjRBridge_cFv */ -void daObjRBridge_c::mode_cut() { - // NONMATCHING -} - -/* 805975E8-805975F4 001828 000C+00 2/2 0/0 0/0 .text init_end__14daObjRBridge_cFv */ -void daObjRBridge_c::init_end() { - // NONMATCHING -} - -/* 805975F4-805975F8 001834 0004+00 1/0 0/0 0/0 .text mode_end__14daObjRBridge_cFv */ -void daObjRBridge_c::mode_end() { - /* empty function */ -} - -/* ############################################################################################## */ -/* 80597E3C-80597E40 0000C0 0004+00 0/1 0/0 0/0 .rodata @4385 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4385[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80597E3C, &lit_4385); -#pragma pop - -/* 805975F8-805977D0 001838 01D8+00 1/0 0/0 0/0 .text Draw__14daObjRBridge_cFv */ -void daObjRBridge_c::Draw() { - // NONMATCHING -} - -/* 805977D0-805978BC 001A10 00EC+00 1/1 0/0 0/0 .text checkHimoCulling__14daObjRBridge_cFv */ -void daObjRBridge_c::checkHimoCulling() { - // NONMATCHING -} - -/* 805978BC-80597920 001AFC 0064+00 1/0 0/0 0/0 .text Delete__14daObjRBridge_cFv */ -void daObjRBridge_c::Delete() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 805980D0-805980F8 00026C 0028+00 1/1 0/0 0/0 .data __vt__14daObjRBridge_c */ -SECTION_DATA extern void* __vt__14daObjRBridge_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__14daObjRBridge_cFv, - (void*)Create__14daObjRBridge_cFv, - (void*)Execute__14daObjRBridge_cFPPA3_A4_f, - (void*)Draw__14daObjRBridge_cFv, - (void*)Delete__14daObjRBridge_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - -/* 80597920-80597A90 001B60 0170+00 1/0 0/0 0/0 .text daObjRBridge_create1st__FP14daObjRBridge_c - */ -static void daObjRBridge_create1st(daObjRBridge_c* param_0) { - // NONMATCHING -} - -/* 80597A90-80597AD8 001CD0 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 80597AD8-80597B20 001D18 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80597B20-80597BE4 001D60 00C4+00 1/1 0/0 0/0 .text __dt__8dCcD_CpsFv */ -// dCcD_Cps::~dCcD_Cps() { -extern "C" void __dt__8dCcD_CpsFv() { - // NONMATCHING -} - -/* 80597BE4-80597C64 001E24 0080+00 1/1 0/0 0/0 .text __ct__8dCcD_CpsFv */ -// dCcD_Cps::dCcD_Cps() { -extern "C" void __ct__8dCcD_CpsFv() { - // NONMATCHING -} - -/* 80597C64-80597CC0 001EA4 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80597CC0-80597CE0 001F00 0020+00 1/0 0/0 0/0 .text - * daObjRBridge_MoveBGDelete__FP14daObjRBridge_c */ -static void daObjRBridge_MoveBGDelete(daObjRBridge_c* param_0) { - // NONMATCHING -} - -/* 80597CE0-80597D00 001F20 0020+00 1/0 0/0 0/0 .text - * daObjRBridge_MoveBGExecute__FP14daObjRBridge_c */ -static void daObjRBridge_MoveBGExecute(daObjRBridge_c* param_0) { - // NONMATCHING -} - -/* 80597D00-80597D2C 001F40 002C+00 1/0 0/0 0/0 .text daObjRBridge_MoveBGDraw__FP14daObjRBridge_c - */ -static void daObjRBridge_MoveBGDraw(daObjRBridge_c* param_0) { - // NONMATCHING -} - -/* 80597D2C-80597D74 001F6C 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 80597E40-80597E40 0000C4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index 655aafbb6e..5711b52594 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -622,12 +622,16 @@ BOOL fopAcM_rollPlayerCrash(fopAc_ac_c const* i_crashActor, f32 i_range, u32 i_f } /* 8001AC40-8001ACEC 015580 00AC+00 0/0 0/0 2/2 .text fopAcM_checkCullingBox__FPA4_fffffff */ -s32 fopAcM_checkCullingBox(Mtx m, f32 x1, f32 y1, f32 z1, f32 x2, f32 y2, f32 z2) { +bool fopAcM_checkCullingBox(Mtx m, f32 x1, f32 y1, f32 z1, f32 x2, f32 y2, f32 z2) { Vec tmp1 = {x1, y1, z1}; Vec tmp2 = {x2, y2, z2}; Mtx tmpMtx; - MTXConcat(j3dSys.getViewMtx(), m, tmpMtx); - return mDoLib_clipper::clip(tmpMtx, &tmp2, &tmp1) != 0; + cMtx_concat(j3dSys.getViewMtx(), m, tmpMtx); + + if (mDoLib_clipper::clip(tmpMtx, &tmp2, &tmp1)) + return true; + else + return false; } /* 803A35F0-803A3740 000710 0150+00 1/1 0/0 0/0 .data l_cullSizeBox */