From 0b181f84d442347275713c975350edfa5bb08640 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Sun, 2 Nov 2025 22:22:25 -0800 Subject: [PATCH] lv7bsgate, lv8udfloor, lv9swshutter done, lv7propellery almost (#2768) * lv7bsgate, lv8udfloor, lv9swshutter done, lv7propellery almost * fix builds * obj_lv6egate done --- configure.py | 8 +- include/d/actor/d_a_obj_lv6egate.h | 32 +- include/d/actor/d_a_obj_lv7BsGate.h | 36 +- include/d/actor/d_a_obj_lv7PropellerY.h | 43 +- include/d/actor/d_a_obj_lv8UdFloor.h | 48 +- include/d/actor/d_a_obj_lv9SwShutter.h | 30 +- include/d/d_cc_d.h | 2 +- src/d/actor/d_a_alink_damage.inc | 8 +- src/d/actor/d_a_e_hzelda.cpp | 2 +- src/d/actor/d_a_obj_lv6egate.cpp | 450 ++++++--------- src/d/actor/d_a_obj_lv7BsGate.cpp | 547 +++++++----------- src/d/actor/d_a_obj_lv7PropellerY.cpp | 698 ++++++++++------------- src/d/actor/d_a_obj_lv8UdFloor.cpp | 707 ++++++++++-------------- src/d/actor/d_a_obj_lv9SwShutter.cpp | 537 +++++++----------- src/m_Do/m_Do_graphic.cpp | 2 +- 15 files changed, 1293 insertions(+), 1857 deletions(-) diff --git a/configure.py b/configure.py index d1ef60e442..278694bdd5 100755 --- a/configure.py +++ b/configure.py @@ -2110,17 +2110,17 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_lv6TogeTrap"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv6bemos"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv6bemos2"), - ActorRel(NonMatching, "d_a_obj_lv6egate"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv6egate"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv6elevta"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv6swturn"), - ActorRel(NonMatching, "d_a_obj_lv7BsGate"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv7BsGate"), ActorRel(NonMatching, "d_a_obj_lv7PropellerY"), ActorRel(Equivalent, "d_a_obj_lv7bridge"), # small regalloc ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv8KekkaiTrap"), ActorRel(NonMatching, "d_a_obj_lv8Lift"), ActorRel(NonMatching, "d_a_obj_lv8OptiLift"), - ActorRel(NonMatching, "d_a_obj_lv8UdFloor"), - ActorRel(NonMatching, "d_a_obj_lv9SwShutter"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv8UdFloor"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv9SwShutter"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_magLift"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_magLiftRot"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_maki"), diff --git a/include/d/actor/d_a_obj_lv6egate.h b/include/d/actor/d_a_obj_lv6egate.h index c793ed29c1..6fbdc4d185 100644 --- a/include/d/actor/d_a_obj_lv6egate.h +++ b/include/d/actor/d_a_obj_lv6egate.h @@ -2,6 +2,8 @@ #define D_A_OBJ_LV6EGATE_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,24 +13,32 @@ * @details * */ -class daObjLv6EGate_c : public fopAc_ac_c { +class daObjLv6EGate_c : public dBgS_MoveBgActor, public request_of_phase_process_class { public: - /* 80C82078 */ void create1st(); + /* 80C82078 */ int create1st(); /* 80C82108 */ void setMtx(); - /* 80C82178 */ bool CreateHeap(); - /* 80C82180 */ void Create(); /* 80C822DC */ void offDisp(); /* 80C82330 */ void onDisp(); - /* 80C82388 */ void Execute(Mtx**); - /* 80C82690 */ void Draw(); - /* 80C826A0 */ void Delete(); - /* 80C82A80 */ ~daObjLv6EGate_c(); -private: - /* 0x568 */ u8 field_0x568[0x1038 - 0x568]; + /* 80C82178 */ virtual int CreateHeap(); + /* 80C82180 */ virtual int Create(); + /* 80C82388 */ virtual int Execute(Mtx**); + /* 80C82690 */ virtual int Draw(); + /* 80C826A0 */ virtual int Delete(); + /* 80C82A80 */ virtual ~daObjLv6EGate_c() {} + + int getSwNo() { return fopAcM_GetParamBit(this, 0, 8); } + int getType() { return fopAcM_GetParamBit(this, 8, 1); } + + /* 0x05A8 */ Mtx field_0x5a8; + /* 0x05D8 */ Mtx field_0x5d8; + /* 0x0608 */ dCcD_Stts mCcStts; + /* 0x0644 */ dCcD_Cyl mAtCyl[8]; + /* 0x1024 */ u8 mElecOff; + /* 0x1025 */ u8 field_0x1025; + /* 0x1028 */ u32 mEmtId[4]; }; STATIC_ASSERT(sizeof(daObjLv6EGate_c) == 0x1038); - #endif /* D_A_OBJ_LV6EGATE_H */ diff --git a/include/d/actor/d_a_obj_lv7BsGate.h b/include/d/actor/d_a_obj_lv7BsGate.h index 5e2e3c30b9..464552ff2a 100644 --- a/include/d/actor/d_a_obj_lv7BsGate.h +++ b/include/d/actor/d_a_obj_lv7BsGate.h @@ -2,6 +2,7 @@ #define D_A_OBJ_LV7BSGATE_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_movebg_actor.h" /** * @ingroup actors-objects @@ -11,12 +12,10 @@ * @details * */ -class daLv7BsGate_c : public fopAc_ac_c { +class daLv7BsGate_c : public dBgS_MoveBgActor { public: /* 80C84930 */ void setBaseMtx(); - /* 80C849CC */ void CreateHeap(); - /* 80C84A4C */ void create(); - /* 80C84BCC */ void Execute(Mtx**); + /* 80C84A4C */ int create(); /* 80C84C1C */ void moveGate(); /* 80C84D24 */ void init_modeWait(); /* 80C84D30 */ void modeWait(); @@ -24,20 +23,27 @@ public: /* 80C84D40 */ void modeOpen(); /* 80C84E94 */ void init_modeClose(); /* 80C84EA0 */ void modeClose(); - /* 80C84FF4 */ void Draw(); - /* 80C85098 */ void Delete(); -private: - /* 0x568 */ u8 field_0x568[0x5bc - 0x568]; + /* 80C849CC */ virtual int CreateHeap(); + /* 80C84BCC */ virtual int Execute(Mtx**); + /* 80C84FF4 */ virtual int Draw(); + /* 80C85098 */ virtual int Delete(); + + int getType() { return fopAcM_GetParamBit(this, 0, 4); } + int getSw() { return fopAcM_GetParamBit(this, 4, 8); } + int getLR() { return fopAcM_GetParamBit(this, 12, 4); } + + /* 0x5A0 */ request_of_phase_process_class mPhase; + /* 0x5A8 */ J3DModel* mpModel; + /* 0x5AC */ u8 mMode; + /* 0x5AD */ u8 field_0x5ad; + /* 0x5AE */ u8 mType; + /* 0x5AF */ u8 mIsSwitch; + /* 0x5B0 */ u8 mLR; + /* 0x5B4 */ f32 field_0x5b4; + /* 0x5B8 */ f32 field_0x5b8; }; STATIC_ASSERT(sizeof(daLv7BsGate_c) == 0x5bc); -class daLv7BsGate_HIO_c { -public: - /* 80C848AC */ daLv7BsGate_HIO_c(); - /* 80C85164 */ ~daLv7BsGate_HIO_c(); -}; - - #endif /* D_A_OBJ_LV7BSGATE_H */ diff --git a/include/d/actor/d_a_obj_lv7PropellerY.h b/include/d/actor/d_a_obj_lv7PropellerY.h index bc4bcb95b3..90c4535ed2 100644 --- a/include/d/actor/d_a_obj_lv7PropellerY.h +++ b/include/d/actor/d_a_obj_lv7PropellerY.h @@ -2,6 +2,7 @@ #define D_A_OBJ_LV7PROPELLERY_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_movebg_actor.h" /** * @ingroup actors-objects @@ -11,12 +12,10 @@ * @details * */ -class daPropY_c : public fopAc_ac_c { +class daPropY_c : public dBgS_MoveBgActor { public: /* 80C8550C */ void setBaseMtx(); - /* 80C855A4 */ void CreateHeap(); - /* 80C85624 */ void create(); - /* 80C85810 */ void Execute(Mtx**); + /* 80C85624 */ int create(); /* 80C85860 */ void procMain(); /* 80C859B4 */ void init_modeMoveWait(); /* 80C859C0 */ void modeMoveWait(); @@ -28,20 +27,34 @@ public: /* 80C85B84 */ void modeMove2(); /* 80C85CAC */ void init_modeStop(); /* 80C85DD0 */ void modeStop(); - /* 80C85F14 */ void Draw(); - /* 80C85FB8 */ void Delete(); -private: - /* 0x568 */ u8 field_0x568[0x5c8 - 0x568]; + /* 80C855A4 */ virtual int CreateHeap(); + /* 80C85810 */ virtual int Execute(Mtx**); + /* 80C85F14 */ virtual int Draw(); + /* 80C85FB8 */ virtual int Delete(); + + int getType() { return fopAcM_GetParamBit(this, 0, 4); } + int getSw() { return fopAcM_GetParamBit(this, 8, 8); } + int getTurnType() { return fopAcM_GetParamBit(this, 4, 4); } + int getTurnVec() { return fopAcM_GetParamBit(this, 16, 4); } + + /* 0x5A0 */ request_of_phase_process_class mPhase; + /* 0x5A8 */ J3DModel* mpModel; + /* 0x5AC */ u8 mMode; + /* 0x5AD */ u8 mSwbit; + /* 0x5AE */ u8 mIsSwitch; + /* 0x5AF */ u8 mType; + /* 0x5B0 */ u8 mTurnType; + /* 0x5B1 */ u8 mTurnVec; + /* 0x5B2 */ s8 field_0x5b2; + /* 0x5B4 */ s16 field_0x5b4; + /* 0x5B6 */ s16 field_0x5b6; + /* 0x5B8 */ u8 mTimer; + /* 0x5BC */ f32 field_0x5bc; + /* 0x5C0 */ f32 field_0x5c0; + /* 0x5C4 */ f32 field_0x5c4; }; STATIC_ASSERT(sizeof(daPropY_c) == 0x5c8); -class daPropY_HIO_c { -public: - /* 80C8546C */ daPropY_HIO_c(); - /* 80C86084 */ ~daPropY_HIO_c(); -}; - - #endif /* D_A_OBJ_LV7PROPELLERY_H */ diff --git a/include/d/actor/d_a_obj_lv8UdFloor.h b/include/d/actor/d_a_obj_lv8UdFloor.h index d7f3176219..66b576ae9a 100644 --- a/include/d/actor/d_a_obj_lv8UdFloor.h +++ b/include/d/actor/d_a_obj_lv8UdFloor.h @@ -2,6 +2,7 @@ #define D_A_OBJ_LV8UDFLOOR_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_movebg_actor.h" /** * @ingroup actors-objects @@ -11,38 +12,53 @@ * @details * */ -class daUdFloor_c : public fopAc_ac_c { +class daUdFloor_c : public dBgS_MoveBgActor { public: /* 80C8BDC8 */ void setBaseMtx(); - /* 80C8BE64 */ void CreateHeap(); - /* 80C8BEE4 */ void create(); - /* 80C8C0DC */ void Execute(Mtx**); + /* 80C8BEE4 */ int create(); /* 80C8C12C */ void moveLift(); /* 80C8C264 */ void init_modeWait(); /* 80C8C270 */ void modeWait(); /* 80C8C274 */ void init_modeUpMoveInit(); /* 80C8C310 */ void modeUpMoveInit(); - /* 80C8C354 */ void colorAnm(int); + /* 80C8C354 */ u8 colorAnm(int); /* 80C8C5E4 */ void init_modeUpMove(); /* 80C8C68C */ void modeUpMove(); /* 80C8C7F8 */ void init_modeDownMoveInit(); /* 80C8C81C */ void modeDownMoveInit(); /* 80C8C860 */ void init_modeDownMove(); /* 80C8C8E4 */ void modeDownMove(); - /* 80C8C994 */ void Draw(); - /* 80C8CA78 */ void Delete(); -private: - /* 0x568 */ u8 field_0x568[0x5c8 - 0x568]; + /* 80C8BE64 */ virtual int CreateHeap(); + /* 80C8C0DC */ virtual int Execute(Mtx**); + /* 80C8C994 */ virtual int Draw(); + /* 80C8CA78 */ virtual int Delete(); + + u8 getModelType() { return current.angle.x & 0xFF; } + u8 getTimer() { return (current.angle.x & 0xFF00) >> 8; } + + int getSw() { return fopAcM_GetParamBit(this, 0, 8); } + int getMoveHeight() { return fopAcM_GetParamBit(this, 16, 8); } + int getMoveSpeed() { return fopAcM_GetParamBit(this, 24, 8); } + + /* 0x5A0 */ request_of_phase_process_class mPhase; + /* 0x5A8 */ J3DModel* mpModel; + /* 0x5AC */ u8 mMode; + /* 0x5B0 */ f32 field_0x5b0; + /* 0x5B4 */ f32 field_0x5b4; + /* 0x5B8 */ u8 field_0x5b8; + /* 0x5B9 */ u8 mTimer; + /* 0x5BA */ u8 field_0x5ba; + /* 0x5BB */ u8 mModelType; + /* 0x5BC */ u8 mIsSwitch; + /* 0x5BD */ u8 mColorR; + /* 0x5BE */ u8 mColorG; + /* 0x5BF */ u8 mColorB; + /* 0x5C0 */ f32 field_0x5c0; + /* 0x5C4 */ u8 field_0x5c4; + /* 0x5C5 */ u8 field_0x5c5; }; STATIC_ASSERT(sizeof(daUdFloor_c) == 0x5c8); -class daUdFloor_HIO_c { -public: - /* 80C8BD0C */ daUdFloor_HIO_c(); - /* 80C8CB44 */ ~daUdFloor_HIO_c(); -}; - - #endif /* D_A_OBJ_LV8UDFLOOR_H */ diff --git a/include/d/actor/d_a_obj_lv9SwShutter.h b/include/d/actor/d_a_obj_lv9SwShutter.h index 4adbae1f4e..7797d16db2 100644 --- a/include/d/actor/d_a_obj_lv9SwShutter.h +++ b/include/d/actor/d_a_obj_lv9SwShutter.h @@ -2,6 +2,7 @@ #define D_A_OBJ_LV9SWSHUTTER_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_movebg_actor.h" /** * @ingroup actors-objects @@ -11,12 +12,10 @@ * @details * */ -class daLv9SwShutter_c : public fopAc_ac_c { +class daLv9SwShutter_c : public dBgS_MoveBgActor { public: /* 80C8CF38 */ void setBaseMtx(); - /* 80C8CFD4 */ void CreateHeap(); - /* 80C8D040 */ void create(); - /* 80C8D168 */ void Execute(Mtx**); + /* 80C8D040 */ int create(); /* 80C8D1B8 */ void moveShutter(); /* 80C8D2BC */ void init_modeWait(); /* 80C8D2C8 */ void modeWait(); @@ -24,20 +23,23 @@ public: /* 80C8D2D8 */ void modeOpen(); /* 80C8D440 */ void init_modeClose(); /* 80C8D458 */ void modeClose(); - /* 80C8D5D0 */ void Draw(); - /* 80C8D674 */ void Delete(); + + /* 80C8CFD4 */ virtual int CreateHeap(); + /* 80C8D168 */ virtual int Execute(Mtx**); + /* 80C8D5D0 */ virtual int Draw(); + /* 80C8D674 */ virtual int Delete(); + + int getSw() { return fopAcM_GetParamBit(this, 0, 8); } private: - /* 0x568 */ u8 field_0x568[0x5b4 - 0x568]; + /* 0x5A0 */ request_of_phase_process_class mPhase; + /* 0x5A8 */ J3DModel* mpModel; + /* 0x5AC */ u8 mMode; + /* 0x5AD */ u8 mSwbit; + /* 0x5AE */ u8 mIsSwitch; + /* 0x5B0 */ f32 field_0x5b0; }; STATIC_ASSERT(sizeof(daLv9SwShutter_c) == 0x5b4); -class daLv9SwShutter_HIO_c { -public: - /* 80C8CEAC */ daLv9SwShutter_HIO_c(); - /* 80C8D730 */ ~daLv9SwShutter_HIO_c(); -}; - - #endif /* D_A_OBJ_LV9SWSHUTTER_H */ diff --git a/include/d/d_cc_d.h b/include/d/d_cc_d.h index e6da8bc611..9d13c848b0 100644 --- a/include/d/d_cc_d.h +++ b/include/d/d_cc_d.h @@ -42,7 +42,7 @@ enum dCcD_Material { dCcD_MTRL_ICE, dCcD_MTRL_WIND, dCcD_MTRL_LIGHT, - dCcD_MTRL_UNK_5, + dCcD_MTRL_ELECTRIC, dCcD_MTRL_UNK_6, dCcD_MTRL_UNK_7, }; diff --git a/src/d/actor/d_a_alink_damage.inc b/src/d/actor/d_a_alink_damage.inc index 3ea022aff2..f97890351d 100644 --- a/src/d/actor/d_a_alink_damage.inc +++ b/src/d/actor/d_a_alink_damage.inc @@ -669,7 +669,7 @@ BOOL daAlink_c::checkDamageAction() { } } - if (at_mtrl == dCcD_MTRL_UNK_5) { + if (at_mtrl == dCcD_MTRL_ELECTRIC) { dComIfGp_getVibration().StartShock(4, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); } else if (checkHugeAttack(at_spl)) { dComIfGp_getVibration().StartShock(8, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); @@ -681,7 +681,7 @@ BOOL daAlink_c::checkDamageAction() { setDamagePoint(dmg, at_mtrl == dCcD_MTRL_FIRE || at_mtrl == dCcD_MTRL_ICE, TRUE, 0); - if (armor_no_dmg && at_mtrl != dCcD_MTRL_UNK_5 && at_mtrl != dCcD_MTRL_ICE) { + if (armor_no_dmg && at_mtrl != dCcD_MTRL_ELECTRIC && at_mtrl != dCcD_MTRL_ICE) { setGuardSe(var_r29); } else if (at_mtrl == dCcD_MTRL_FIRE) { seStartOnlyReverb(Z2SE_AL_BURN_START); @@ -699,10 +699,10 @@ BOOL daAlink_c::checkDamageAction() { voiceStart(Z2SE_AL_V_DAMAGE_S); seStartOnlyReverb(Z2SE_AL_DAMAGE_NORMAL); } - } else if (at_mtrl == dCcD_MTRL_UNK_5 && !checkSpecialHorseRide()) { + } else if (at_mtrl == dCcD_MTRL_ELECTRIC && !checkSpecialHorseRide()) { return procCoElecDamageInit(var_r29->GetTgHitAc(), var_r29, at_spl); } else if (checkReinRide()) { - if (at_mtrl == dCcD_MTRL_UNK_5) { + if (at_mtrl == dCcD_MTRL_ELECTRIC) { return procCoLargeDamageInit(-1, 1, 0, 0, var_r29, 0); } diff --git a/src/d/actor/d_a_e_hzelda.cpp b/src/d/actor/d_a_e_hzelda.cpp index 25eca4ea3c..f699b92f8d 100644 --- a/src/d/actor/d_a_e_hzelda.cpp +++ b/src/d/actor/d_a_e_hzelda.cpp @@ -1483,7 +1483,7 @@ static int daE_HZELDA_Create(fopAc_ac_c* i_this) { a_this->mBallSphAt.Set(ball_at_sph_src); a_this->mBallSphAt.SetStts(&a_this->field_0xd3c); - a_this->mBallSphAt.SetAtMtrl(dCcD_MTRL_UNK_5); + a_this->mBallSphAt.SetAtMtrl(dCcD_MTRL_ELECTRIC); static dCcD_SrcSph ball_tg_sph_src = { { diff --git a/src/d/actor/d_a_obj_lv6egate.cpp b/src/d/actor/d_a_obj_lv6egate.cpp index 04405f5663..f40648e564 100644 --- a/src/d/actor/d_a_obj_lv6egate.cpp +++ b/src/d/actor/d_a_obj_lv6egate.cpp @@ -6,120 +6,44 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_lv6egate.h" -#include "d/d_cc_d.h" -#include "dol2asm.h" - - -// -// Forward References: -// - -extern "C" void create1st__15daObjLv6EGate_cFv(); -extern "C" void setMtx__15daObjLv6EGate_cFv(); -extern "C" bool CreateHeap__15daObjLv6EGate_cFv(); -extern "C" void Create__15daObjLv6EGate_cFv(); -extern "C" void offDisp__15daObjLv6EGate_cFv(); -extern "C" void onDisp__15daObjLv6EGate_cFv(); -extern "C" void Execute__15daObjLv6EGate_cFPPA3_A4_f(); -extern "C" void Draw__15daObjLv6EGate_cFv(); -extern "C" void Delete__15daObjLv6EGate_cFv(); -extern "C" static void daObjLv6EGate_create1st__FP15daObjLv6EGate_c(); -extern "C" void __dt__8dCcD_CylFv(); -extern "C" void __ct__8dCcD_CylFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" static void daObjLv6EGate_MoveBGDelete__FP15daObjLv6EGate_c(); -extern "C" static void daObjLv6EGate_MoveBGExecute__FP15daObjLv6EGate_c(); -extern "C" static void daObjLv6EGate_MoveBGDraw__FP15daObjLv6EGate_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__15daObjLv6EGate_cFv(); -extern "C" extern char const* const d_a_obj_lv6egate__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void Release__4cBgSFP9dBgW_Base(); -extern "C" void Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__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 ChkAtHit__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void ChkUsed__9cBgW_BgIdCFv(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void __destroy_arr(); -extern "C" void __construct_array(); -extern "C" void _savegpr_25(); -extern "C" void _restgpr_25(); -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 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80C82BA4-80C82BA4 000034 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C82BA4 = "LV6EGATE"; -#pragma pop /* 80C82BB0-80C82BB4 -00001 0004+00 2/2 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_lv6egate__stringBase0; +static char* l_arcName = "LV6EGATE"; + +static const int l_dzbidx = 3; /* 80C82078-80C82108 000078 0090+00 1/1 0/0 0/0 .text create1st__15daObjLv6EGate_cFv */ -void daObjLv6EGate_c::create1st() { - // NONMATCHING +int daObjLv6EGate_c::create1st() { + int phase_state = dComIfG_resLoad(this, l_arcName); + if (phase_state == cPhs_COMPLEATE_e) { + setMtx(); + phase_state = MoveBGCreate(l_arcName, l_dzbidx, dBgS_MoveBGProc_TypicalRotY, 0x7B0, &field_0x5a8); + if (phase_state == cPhs_ERROR_e) { + return phase_state; + } + } + + return phase_state; } /* 80C82108-80C82178 000108 0070+00 2/2 0/0 0/0 .text setMtx__15daObjLv6EGate_cFv */ void daObjLv6EGate_c::setMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::YrotM(current.angle.y); + MTXCopy(mDoMtx_stack_c::get(), field_0x5d8); + MTXCopy(mDoMtx_stack_c::get(), field_0x5a8); } /* 80C82178-80C82180 000178 0008+00 1/0 0/0 0/0 .text CreateHeap__15daObjLv6EGate_cFv */ -bool daObjLv6EGate_c::CreateHeap() { - return true; +int daObjLv6EGate_c::CreateHeap() { + return 1; } -/* ############################################################################################## */ /* 80C82B70-80C82B88 000000 0018+00 2/2 0/0 0/0 .rodata l_cull_box */ -SECTION_RODATA static u8 const l_cull_box[24] = { - 0xC3, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x48, 0x00, 0x00, - 0x43, 0xFA, 0x00, 0x00, 0x43, 0x96, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, +static const cull_box l_cull_box = { + {-500.0f, 0.0f, -50.0f}, + {500.0f, 300.0f, 50.0f}, }; -COMPILER_STRIP_GATE(0x80C82B70, &l_cull_box); /* 80C82BB4-80C82BF8 000004 0044+00 1/1 0/0 0/0 .data l_at_cyl_src */ static dCcD_SrcCyl l_at_cyl_src = { @@ -137,98 +61,174 @@ static dCcD_SrcCyl l_at_cyl_src = { }; /* 80C82180-80C822DC 000180 015C+00 1/0 0/0 0/0 .text Create__15daObjLv6EGate_cFv */ -void daObjLv6EGate_c::Create() { - // NONMATCHING +int daObjLv6EGate_c::Create() { + fopAcM_SetMtx(this, field_0x5d8); + fopAcM_setCullSizeBox(this, l_cull_box.min.x, l_cull_box.min.y, l_cull_box.min.z, l_cull_box.max.x, l_cull_box.max.y, l_cull_box.max.z); + mCcStts.Init(255, 0, this); + + for (int i = 0; i < 8; i++) { + mAtCyl[i].Set(l_at_cyl_src); + mAtCyl[i].SetStts(&mCcStts); + mAtCyl[i].SetAtMtrl(dCcD_MTRL_ELECTRIC); + } + + if (getSwNo() == 0xFF) { + onDisp(); + } else if (getType() != 0) { + if (fopAcM_isSwitch(this, getSwNo())) { + onDisp(); + } else { + offDisp(); + } + } else if (fopAcM_isSwitch(this, getSwNo())) { + offDisp(); + } else { + onDisp(); + } + + field_0x1025 = 0; + + for (int i = 0; i < 4; i++) { + mEmtId[i] = 0; + } + + return 1; } /* 80C822DC-80C82330 0002DC 0054+00 2/2 0/0 0/0 .text offDisp__15daObjLv6EGate_cFv */ void daObjLv6EGate_c::offDisp() { - // NONMATCHING + mElecOff = true; + + if (mpBgW->ChkUsed()) { + int result = dComIfG_Bgsp().Release(mpBgW); + JUT_ASSERT(301, result == 0); + } } /* 80C82330-80C82388 000330 0058+00 2/2 0/0 0/0 .text onDisp__15daObjLv6EGate_cFv */ void daObjLv6EGate_c::onDisp() { - // NONMATCHING + mElecOff = false; + + if (!mpBgW->ChkUsed()) { + int result = dComIfG_Bgsp().Regist(mpBgW, this); + JUT_ASSERT(313, result == 0); + } } -/* ############################################################################################## */ -/* 80C82B88-80C82B8C 000018 0004+00 0/1 0/0 0/0 .rodata @3798 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3798 = 1.0f; -COMPILER_STRIP_GATE(0x80C82B88, &lit_3798); -#pragma pop - -/* 80C82B8C-80C82B90 00001C 0004+00 0/1 0/0 0/0 .rodata @3799 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3799 = -1.0f; -COMPILER_STRIP_GATE(0x80C82B8C, &lit_3799); -#pragma pop - -/* 80C82B90-80C82B94 000020 0004+00 0/1 0/0 0/0 .rodata @3800 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3800 = -280.0f; -COMPILER_STRIP_GATE(0x80C82B90, &lit_3800); -#pragma pop - -/* 80C82B94-80C82B98 000024 0004+00 0/1 0/0 0/0 .rodata @3801 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3801[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80C82B94, &lit_3801); -#pragma pop - -/* 80C82B98-80C82B9C 000028 0004+00 0/1 0/0 0/0 .rodata @3802 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3802 = 76.25f; -COMPILER_STRIP_GATE(0x80C82B98, &lit_3802); -#pragma pop - -/* 80C82B9C-80C82BA0 00002C 0004+00 0/1 0/0 0/0 .rodata @3803 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3803 = 30.0f; -COMPILER_STRIP_GATE(0x80C82B9C, &lit_3803); -#pragma pop - -/* 80C82BA0-80C82BA4 000030 0004+00 0/1 0/0 0/0 .rodata @3804 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3804 = 50.0f; -COMPILER_STRIP_GATE(0x80C82BA0, &lit_3804); -#pragma pop - /* 80C82388-80C82690 000388 0308+00 1/0 0/0 0/0 .text Execute__15daObjLv6EGate_cFPPA3_A4_f */ -void daObjLv6EGate_c::Execute(Mtx** param_0) { - // NONMATCHING +int daObjLv6EGate_c::Execute(Mtx** param_0) { + if (getSwNo() != 0xFF) { + if (getType() != 0) { + if (fopAcM_isSwitch(this, getSwNo())) { + onDisp(); + } else { + offDisp(); + } + } else if (fopAcM_isSwitch(this, getSwNo())) { + offDisp(); + } else { + onDisp(); + } + } + + setMtx(); + *param_0 = &field_0x5a8; + + if (mElecOff) { + return 1; + } + + bool at_cyl_hit = false; + if (field_0x1025 == 0) { + for (int i = 0; i < 8; i++) { + if (mAtCyl[i].ChkAtHit()) { + Z2GetAudioMgr()->seStart(Z2SE_OBJ_L6_ELK_GATE_TOUCH, mAtCyl[i].GetCP(), 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + at_cyl_hit = true; + break; + } + } + } + + if (at_cyl_hit) { + field_0x1025 = 1; + } else { + field_0x1025 = 0; + } + + Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_L6_ELK_GATE_LV, ¤t.pos, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + + cXyz cyl_pos; + f32 var_f31 = -280.0f; + f32 temp_f30 = (330.0f - var_f31) * 0.125f; + for (int i = 0; i < 8; i++) { + cXyz local_pos; + local_pos.x = var_f31; + local_pos.y = 0.0f; + local_pos.z = 0.0f; + PSMTXMultVec(field_0x5a8, &local_pos, &cyl_pos); + mAtCyl[i].SetC(cyl_pos); + dComIfG_Ccsp()->Set(&mAtCyl[i]); + + var_f31 += temp_f30; + } + + cXyz effpos(current.pos); + effpos.y += 30.0f; + for (int i = 0; i < 4; i++) { + mEmtId[i] = dComIfGp_particle_set(mEmtId[i], dPa_RM(ID_ZI_S_ELECGATE_A), &effpos, &shape_angle, NULL); + effpos.y += 50.0f; + } + + return 1; } /* 80C82690-80C826A0 000690 0010+00 1/0 0/0 0/0 .text Draw__15daObjLv6EGate_cFv */ -void daObjLv6EGate_c::Draw() { - // NONMATCHING +int daObjLv6EGate_c::Draw() { + if (mElecOff) { + return 1; + } + + return 1; } /* 80C826A0-80C826DC 0006A0 003C+00 1/0 0/0 0/0 .text Delete__15daObjLv6EGate_cFv */ -void daObjLv6EGate_c::Delete() { - // NONMATCHING +int daObjLv6EGate_c::Delete() { + dComIfG_resDelete(this, l_arcName); + return 1; +} + +/* 80C826DC-80C82790 0006DC 00B4+00 1/0 0/0 0/0 .text daObjLv6EGate_create1st__FP15daObjLv6EGate_c + */ +static int daObjLv6EGate_create1st(daObjLv6EGate_c* i_this) { + fopAcM_ct(i_this, daObjLv6EGate_c); + return i_this->create1st(); +} + +/* 80C829CC-80C829EC 0009CC 0020+00 1/0 0/0 0/0 .text + * daObjLv6EGate_MoveBGDelete__FP15daObjLv6EGate_c */ +static int daObjLv6EGate_MoveBGDelete(daObjLv6EGate_c* i_this) { + return i_this->MoveBGDelete(); +} + +/* 80C829EC-80C82A0C 0009EC 0020+00 1/0 0/0 0/0 .text + * daObjLv6EGate_MoveBGExecute__FP15daObjLv6EGate_c */ +static int daObjLv6EGate_MoveBGExecute(daObjLv6EGate_c* i_this) { + return i_this->MoveBGExecute(); +} + +/* 80C82A0C-80C82A38 000A0C 002C+00 1/0 0/0 0/0 .text + * daObjLv6EGate_MoveBGDraw__FP15daObjLv6EGate_c */ +static int daObjLv6EGate_MoveBGDraw(daObjLv6EGate_c* i_this) { + return i_this->MoveBGDraw(); } -/* ############################################################################################## */ /* 80C82BF8-80C82C18 -00001 0020+00 1/0 0/0 0/0 .data daObjLv6EGate_METHODS */ static actor_method_class daObjLv6EGate_METHODS = { - (process_method_func)daObjLv6EGate_create1st__FP15daObjLv6EGate_c, - (process_method_func)daObjLv6EGate_MoveBGDelete__FP15daObjLv6EGate_c, - (process_method_func)daObjLv6EGate_MoveBGExecute__FP15daObjLv6EGate_c, - 0, - (process_method_func)daObjLv6EGate_MoveBGDraw__FP15daObjLv6EGate_c, + (process_method_func)daObjLv6EGate_create1st, + (process_method_func)daObjLv6EGate_MoveBGDelete, + (process_method_func)daObjLv6EGate_MoveBGExecute, + NULL, + (process_method_func)daObjLv6EGate_MoveBGDraw, }; /* 80C82C18-80C82C48 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Lv6EGate */ @@ -248,113 +248,3 @@ extern actor_process_profile_definition g_profile_Obj_Lv6EGate = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80C82C48-80C82C54 000098 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, -}; - -/* 80C82C54-80C82C60 0000A4 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, -}; - -/* 80C82C60-80C82C6C 0000B0 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, -}; - -/* 80C82C6C-80C82C78 0000BC 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, -}; - -/* 80C82C78-80C82CA4 0000C8 002C+00 2/2 0/0 0/0 .data __vt__15daObjLv6EGate_c */ -SECTION_DATA extern void* __vt__15daObjLv6EGate_c[11] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__15daObjLv6EGate_cFv, - (void*)Create__15daObjLv6EGate_cFv, - (void*)Execute__15daObjLv6EGate_cFPPA3_A4_f, - (void*)Draw__15daObjLv6EGate_cFv, - (void*)Delete__15daObjLv6EGate_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, - (void*)__dt__15daObjLv6EGate_cFv, -}; - -/* 80C826DC-80C82790 0006DC 00B4+00 1/0 0/0 0/0 .text daObjLv6EGate_create1st__FP15daObjLv6EGate_c - */ -static void daObjLv6EGate_create1st(daObjLv6EGate_c* param_0) { - // NONMATCHING -} - -/* 80C82790-80C8285C 000790 00CC+00 2/2 0/0 0/0 .text __dt__8dCcD_CylFv */ -// dCcD_Cyl::~dCcD_Cyl() { -extern "C" void __dt__8dCcD_CylFv() { - // NONMATCHING -} - -/* 80C8285C-80C828E0 00085C 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_CylFv */ -// dCcD_Cyl::dCcD_Cyl() { -extern "C" void __ct__8dCcD_CylFv() { - // NONMATCHING -} - -/* 80C828E0-80C82928 0008E0 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80C82928-80C82970 000928 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80C82970-80C829CC 000970 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80C829CC-80C829EC 0009CC 0020+00 1/0 0/0 0/0 .text - * daObjLv6EGate_MoveBGDelete__FP15daObjLv6EGate_c */ -static void daObjLv6EGate_MoveBGDelete(daObjLv6EGate_c* param_0) { - // NONMATCHING -} - -/* 80C829EC-80C82A0C 0009EC 0020+00 1/0 0/0 0/0 .text - * daObjLv6EGate_MoveBGExecute__FP15daObjLv6EGate_c */ -static void daObjLv6EGate_MoveBGExecute(daObjLv6EGate_c* param_0) { - // NONMATCHING -} - -/* 80C82A0C-80C82A38 000A0C 002C+00 1/0 0/0 0/0 .text - * daObjLv6EGate_MoveBGDraw__FP15daObjLv6EGate_c */ -static void daObjLv6EGate_MoveBGDraw(daObjLv6EGate_c* param_0) { - // NONMATCHING -} - -/* 80C82A38-80C82A80 000A38 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 80C82A80-80C82B68 000A80 00E8+00 1/0 0/0 0/0 .text __dt__15daObjLv6EGate_cFv */ -daObjLv6EGate_c::~daObjLv6EGate_c() { - // NONMATCHING -} - -/* 80C82BA4-80C82BA4 000034 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_obj_lv7BsGate.cpp b/src/d/actor/d_a_obj_lv7BsGate.cpp index 88ace9dbf8..221d0f7038 100644 --- a/src/d/actor/d_a_obj_lv7BsGate.cpp +++ b/src/d/actor/d_a_obj_lv7BsGate.cpp @@ -6,158 +6,232 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_lv7BsGate.h" -#include "dol2asm.h" +class daLv7BsGate_HIO_c : public mDoHIO_entry_c { +public: + /* 80C848AC */ daLv7BsGate_HIO_c(); + /* 80C85164 */ virtual ~daLv7BsGate_HIO_c() {} + void genMessage(JORMContext*); -// -// Forward References: -// + /* 0x04 */ f32 open_speed; + /* 0x08 */ f32 close_speed; + /* 0x0C */ u8 vibration; +}; -extern "C" void __ct__17daLv7BsGate_HIO_cFv(); -extern "C" void __dt__14mDoHIO_entry_cFv(); -extern "C" void setBaseMtx__13daLv7BsGate_cFv(); -extern "C" void CreateHeap__13daLv7BsGate_cFv(); -extern "C" void create__13daLv7BsGate_cFv(); -extern "C" void Execute__13daLv7BsGate_cFPPA3_A4_f(); -extern "C" void moveGate__13daLv7BsGate_cFv(); -extern "C" void init_modeWait__13daLv7BsGate_cFv(); -extern "C" void modeWait__13daLv7BsGate_cFv(); -extern "C" void init_modeOpen__13daLv7BsGate_cFv(); -extern "C" void modeOpen__13daLv7BsGate_cFv(); -extern "C" void init_modeClose__13daLv7BsGate_cFv(); -extern "C" void modeClose__13daLv7BsGate_cFv(); -extern "C" void Draw__13daLv7BsGate_cFv(); -extern "C" void Delete__13daLv7BsGate_cFv(); -extern "C" static void daLv7BsGate_Draw__FP13daLv7BsGate_c(); -extern "C" static void daLv7BsGate_Execute__FP13daLv7BsGate_c(); -extern "C" static void daLv7BsGate_Delete__FP13daLv7BsGate_c(); -extern "C" static void daLv7BsGate_Create__FP10fopAc_ac_c(); -extern "C" void __dt__17daLv7BsGate_HIO_cFv(); -extern "C" void __sinit_d_a_obj_lv7BsGate_cpp(); -extern "C" extern char const* const d_a_obj_lv7BsGate__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData(); -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 isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool Create__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 settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80C85210-80C85214 000000 0004+00 3/3 0/0 0/0 .rodata @3628 */ -SECTION_RODATA static f32 const lit_3628 = 2.0f; -COMPILER_STRIP_GATE(0x80C85210, &lit_3628); - -/* 80C85214-80C85218 000004 0004+00 1/1 0/0 0/0 .rodata @3629 */ -SECTION_RODATA static f32 const lit_3629 = 12.0f; -COMPILER_STRIP_GATE(0x80C85214, &lit_3629); - -/* 80C85234-80C85234 000024 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C85234 = "L7Gate"; -SECTION_DEAD static char const* const stringBase_80C8523B = "L7GateL"; -#pragma pop +/* 80C8536C-80C8537C 000014 0010+00 3/3 0/0 0/0 .bss l_HIO */ +static daLv7BsGate_HIO_c l_HIO; /* 80C85264-80C8526C -00001 0008+00 3/3 0/0 0/0 .data l_type */ -SECTION_DATA static void* l_type[2] = { - (void*)&d_a_obj_lv7BsGate__stringBase0, - (void*)(((char*)&d_a_obj_lv7BsGate__stringBase0) + 0x7), +static char* l_type[2] = { + "L7Gate", + "L7GateL", }; /* 80C8526C-80C85274 000028 0008+00 1/1 0/0 0/0 .data l_bmdIdx */ -SECTION_DATA static u8 l_bmdIdx[8] = { - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, -}; +static int l_bmdIdx[] = {4, 4}; /* 80C85274-80C8527C 000030 0008+00 1/1 0/0 0/0 .data l_dzbIdx */ -SECTION_DATA static u8 l_dzbIdx[8] = { - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, -}; +static int l_dzbIdx[] = {7, 7}; -/* 80C8527C-80C85288 -00001 000C+00 0/1 0/0 0/0 .data @3736 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3736[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWait__13daLv7BsGate_cFv, -}; -#pragma pop +/* 80C848AC-80C848E8 0000EC 003C+00 1/1 0/0 0/0 .text __ct__17daLv7BsGate_HIO_cFv */ +daLv7BsGate_HIO_c::daLv7BsGate_HIO_c() { + open_speed = 2.0f; + close_speed = 12.0f; + vibration = 3; +} -/* 80C85288-80C85294 -00001 000C+00 0/1 0/0 0/0 .data @3737 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3737[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeOpen__13daLv7BsGate_cFv, -}; -#pragma pop +/* 80C84930-80C849CC 000170 009C+00 2/2 0/0 0/0 .text setBaseMtx__13daLv7BsGate_cFv */ +void daLv7BsGate_c::setBaseMtx() { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mDoMtx_stack_c::transM(field_0x5b8, 0.0f, 0.0f); + mpModel->setBaseScale(scale); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); +} -/* 80C85294-80C852A0 -00001 000C+00 0/1 0/0 0/0 .data @3738 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3738[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeClose__13daLv7BsGate_cFv, -}; -#pragma pop +/* 80C849CC-80C84A4C 00020C 0080+00 1/0 0/0 0/0 .text CreateHeap__13daLv7BsGate_cFv */ +int daLv7BsGate_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_type[mType], l_bmdIdx[mType]); + JUT_ASSERT(191, modelData != NULL); -/* 80C852A0-80C852C4 00005C 0024+00 0/1 0/0 0/0 .data mode_proc$3735 */ -#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 + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } + + return 1; +} + +/* 80C84A4C-80C84BCC 00028C 0180+00 1/1 0/0 0/0 .text create__13daLv7BsGate_cFv */ +int daLv7BsGate_c::create() { + fopAcM_ct(this, daLv7BsGate_c); + + mType = getType(); + + int phase_state = dComIfG_resLoad(&mPhase, l_type[mType]); + if (phase_state == cPhs_COMPLEATE_e) { + if (MoveBGCreate(l_type[mType], l_dzbIdx[mType], dBgS_MoveBGProc_TypicalRotY, 0x2600, NULL) == cPhs_ERROR_e) { + return cPhs_ERROR_e; + } + + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + fopAcM_setCullSizeBox2(this, mpModel->getModelData()); + + mIsSwitch = fopAcM_isSwitch(this, getSw()); + mLR = getLR(); + field_0x5b4 = -450.0f; + + if (mLR == 1) { + shape_angle.y += 0x8000; + } + + field_0x5b8 = 0.0f; + + if (mIsSwitch) { + field_0x5b8 = field_0x5b4; + } + + init_modeWait(); + setBaseMtx(); + + #if DEBUG + l_HIO.entryHIO("ぶら下がりスイッチゲート(Lv7)"); + #endif + } + + return phase_state; +} + +/* 80C84BCC-80C84C1C 00040C 0050+00 1/0 0/0 0/0 .text Execute__13daLv7BsGate_cFPPA3_A4_f + */ +int daLv7BsGate_c::Execute(Mtx** param_0) { + moveGate(); + *param_0 = &mpModel->getBaseTRMtx(); + setBaseMtx(); + return 1; +} + +/* 80C84C1C-80C84D24 00045C 0108+00 1/1 0/0 0/0 .text moveGate__13daLv7BsGate_cFv */ +void daLv7BsGate_c::moveGate() { + static void (daLv7BsGate_c::*mode_proc[])() = { + &daLv7BsGate_c::modeWait, + &daLv7BsGate_c::modeOpen, + &daLv7BsGate_c::modeClose, + }; + + u8 prev_switch = mIsSwitch; + mIsSwitch = fopAcM_isSwitch(this, getSw()); + if (mIsSwitch != prev_switch) { + if (mIsSwitch) { + init_modeOpen(); + } else { + init_modeClose(); + } + } + + (this->*mode_proc[mMode])(); +} + +/* 80C84D24-80C84D30 000564 000C+00 3/3 0/0 0/0 .text init_modeWait__13daLv7BsGate_cFv */ +void daLv7BsGate_c::init_modeWait() { + mMode = 0; +} + +/* 80C84D30-80C84D34 000570 0004+00 1/0 0/0 0/0 .text modeWait__13daLv7BsGate_cFv */ +void daLv7BsGate_c::modeWait() {} + +/* 80C84D34-80C84D40 000574 000C+00 1/1 0/0 0/0 .text init_modeOpen__13daLv7BsGate_cFv */ +void daLv7BsGate_c::init_modeOpen() { + mMode = 1; +} + +/* 80C84D40-80C84E94 000580 0154+00 1/0 0/0 0/0 .text modeOpen__13daLv7BsGate_cFv */ +void daLv7BsGate_c::modeOpen() { + if (mLR == 0) { + mDoAud_seStartLevel(Z2SE_OBJ_SW_W_DR_OP, ¤t.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + } + + if (0.0f == cLib_addCalc(&field_0x5b8, field_0x5b4, 0.2f, l_HIO.open_speed, 0.5f)) { + if (mLR == 0) { + mDoAud_seStart(Z2SE_OBJ_SW_W_DR_OP_STOP, ¤t.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + } + + dComIfGp_getVibration().StartShock(l_HIO.vibration, 0xF, cXyz(0.0f, 1.0f, 0.0f)); + init_modeWait(); + } +} + +/* 80C84E94-80C84EA0 0006D4 000C+00 1/1 0/0 0/0 .text init_modeClose__13daLv7BsGate_cFv + */ +void daLv7BsGate_c::init_modeClose() { + mMode = 2; +} + +/* 80C84EA0-80C84FF4 0006E0 0154+00 1/0 0/0 0/0 .text modeClose__13daLv7BsGate_cFv */ +void daLv7BsGate_c::modeClose() { + if (mLR == 0) { + mDoAud_seStartLevel(Z2SE_OBJ_SW_W_DR_CL, ¤t.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + } + + if (0.0f == cLib_addCalc(&field_0x5b8, 0.0f, 0.4f, l_HIO.close_speed, 0.5f)) { + if (mLR == 0) { + mDoAud_seStart(Z2SE_OBJ_SW_W_DR_CL_STOP, ¤t.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + } + + dComIfGp_getVibration().StartShock(l_HIO.vibration, 0xF, cXyz(0.0f, 1.0f, 0.0f)); + init_modeWait(); + } +} + +/* 80C84FF4-80C85098 000834 00A4+00 1/0 0/0 0/0 .text Draw__13daLv7BsGate_cFv */ +int daLv7BsGate_c::Draw() { + g_env_light.settingTevStruct(16, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + return 1; +} + +/* 80C85098-80C850D8 0008D8 0040+00 1/0 0/0 0/0 .text Delete__13daLv7BsGate_cFv */ +int daLv7BsGate_c::Delete() { + dComIfG_resDelete(&mPhase, l_type[mType]); + #if DEBUG + l_HIO.removeHIO(); + #endif + return 1; +} + +/* 80C850D8-80C85104 000918 002C+00 1/0 0/0 0/0 .text daLv7BsGate_Draw__FP13daLv7BsGate_c + */ +static int daLv7BsGate_Draw(daLv7BsGate_c* i_this) { + return i_this->MoveBGDraw(); +} + +/* 80C85104-80C85124 000944 0020+00 1/0 0/0 0/0 .text daLv7BsGate_Execute__FP13daLv7BsGate_c */ +static int daLv7BsGate_Execute(daLv7BsGate_c* i_this) { + return i_this->MoveBGExecute(); +} + +/* 80C85124-80C85144 000964 0020+00 1/0 0/0 0/0 .text daLv7BsGate_Delete__FP13daLv7BsGate_c */ +static int daLv7BsGate_Delete(daLv7BsGate_c* i_this) { + return i_this->MoveBGDelete(); +} + +/* 80C85144-80C85164 000984 0020+00 1/0 0/0 0/0 .text daLv7BsGate_Create__FP10fopAc_ac_c + */ +static int daLv7BsGate_Create(fopAc_ac_c* i_this) { + return ((daLv7BsGate_c*)i_this)->create(); +} /* 80C852C4-80C852E4 -00001 0020+00 1/0 0/0 0/0 .data l_daLv7BsGate_Method */ static actor_method_class l_daLv7BsGate_Method = { - (process_method_func)daLv7BsGate_Create__FP10fopAc_ac_c, - (process_method_func)daLv7BsGate_Delete__FP13daLv7BsGate_c, - (process_method_func)daLv7BsGate_Execute__FP13daLv7BsGate_c, + (process_method_func)daLv7BsGate_Create, + (process_method_func)daLv7BsGate_Delete, + (process_method_func)daLv7BsGate_Execute, 0, - (process_method_func)daLv7BsGate_Draw__FP13daLv7BsGate_c, + (process_method_func)daLv7BsGate_Draw, }; /* 80C852E4-80C85314 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Lv7BsGate */ @@ -177,210 +251,3 @@ extern actor_process_profile_definition g_profile_Obj_Lv7BsGate = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80C85314-80C8533C 0000D0 0028+00 1/1 0/0 0/0 .data __vt__13daLv7BsGate_c */ -SECTION_DATA extern void* __vt__13daLv7BsGate_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__13daLv7BsGate_cFv, - (void*)Create__16dBgS_MoveBgActorFv, - (void*)Execute__13daLv7BsGate_cFPPA3_A4_f, - (void*)Draw__13daLv7BsGate_cFv, - (void*)Delete__13daLv7BsGate_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - -/* 80C8533C-80C85348 0000F8 000C+00 2/2 0/0 0/0 .data __vt__17daLv7BsGate_HIO_c */ -SECTION_DATA extern void* __vt__17daLv7BsGate_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__17daLv7BsGate_HIO_cFv, -}; - -/* 80C85348-80C85354 000104 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */ -SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14mDoHIO_entry_cFv, -}; - -/* 80C848AC-80C848E8 0000EC 003C+00 1/1 0/0 0/0 .text __ct__17daLv7BsGate_HIO_cFv */ -daLv7BsGate_HIO_c::daLv7BsGate_HIO_c() { - // NONMATCHING -} - -/* 80C848E8-80C84930 000128 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */ -// mDoHIO_entry_c::~mDoHIO_entry_c() { -extern "C" void __dt__14mDoHIO_entry_cFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C85218-80C8521C 000008 0004+00 2/4 0/0 0/0 .rodata @3650 */ -SECTION_RODATA static u8 const lit_3650[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80C85218, &lit_3650); - -/* 80C84930-80C849CC 000170 009C+00 2/2 0/0 0/0 .text setBaseMtx__13daLv7BsGate_cFv */ -void daLv7BsGate_c::setBaseMtx() { - // NONMATCHING -} - -/* 80C849CC-80C84A4C 00020C 0080+00 1/0 0/0 0/0 .text CreateHeap__13daLv7BsGate_cFv */ -void daLv7BsGate_c::CreateHeap() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8521C-80C85220 00000C 0004+00 1/1 0/0 0/0 .rodata @3722 */ -SECTION_RODATA static f32 const lit_3722 = -450.0f; -COMPILER_STRIP_GATE(0x80C8521C, &lit_3722); - -/* 80C84A4C-80C84BCC 00028C 0180+00 1/1 0/0 0/0 .text create__13daLv7BsGate_cFv */ -void daLv7BsGate_c::create() { - // NONMATCHING -} - -/* 80C84BCC-80C84C1C 00040C 0050+00 1/0 0/0 0/0 .text Execute__13daLv7BsGate_cFPPA3_A4_f - */ -void daLv7BsGate_c::Execute(Mtx** param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C85360-80C8536C 000008 000C+00 1/1 0/0 0/0 .bss @3622 */ -static u8 lit_3622[12]; - -/* 80C8536C-80C8537C 000014 0010+00 3/3 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[16]; - -/* 80C8537C-80C85380 000024 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80C8537C[4]; - -/* 80C84C1C-80C84D24 00045C 0108+00 1/1 0/0 0/0 .text moveGate__13daLv7BsGate_cFv */ -void daLv7BsGate_c::moveGate() { - // NONMATCHING -} - -/* 80C84D24-80C84D30 000564 000C+00 3/3 0/0 0/0 .text init_modeWait__13daLv7BsGate_cFv */ -void daLv7BsGate_c::init_modeWait() { - // NONMATCHING -} - -/* 80C84D30-80C84D34 000570 0004+00 1/0 0/0 0/0 .text modeWait__13daLv7BsGate_cFv */ -void daLv7BsGate_c::modeWait() { - /* empty function */ -} - -/* 80C84D34-80C84D40 000574 000C+00 1/1 0/0 0/0 .text init_modeOpen__13daLv7BsGate_cFv */ -void daLv7BsGate_c::init_modeOpen() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C85220-80C85224 000010 0004+00 0/2 0/0 0/0 .rodata @3796 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3796 = 1.0f; -COMPILER_STRIP_GATE(0x80C85220, &lit_3796); -#pragma pop - -/* 80C85224-80C85228 000014 0004+00 0/2 0/0 0/0 .rodata @3797 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3797 = -1.0f; -COMPILER_STRIP_GATE(0x80C85224, &lit_3797); -#pragma pop - -/* 80C85228-80C8522C 000018 0004+00 0/1 0/0 0/0 .rodata @3798 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3798 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x80C85228, &lit_3798); -#pragma pop - -/* 80C8522C-80C85230 00001C 0004+00 0/2 0/0 0/0 .rodata @3799 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3799 = 0.5f; -COMPILER_STRIP_GATE(0x80C8522C, &lit_3799); -#pragma pop - -/* 80C84D40-80C84E94 000580 0154+00 1/0 0/0 0/0 .text modeOpen__13daLv7BsGate_cFv */ -void daLv7BsGate_c::modeOpen() { - // NONMATCHING -} - -/* 80C84E94-80C84EA0 0006D4 000C+00 1/1 0/0 0/0 .text init_modeClose__13daLv7BsGate_cFv - */ -void daLv7BsGate_c::init_modeClose() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C85230-80C85234 000020 0004+00 0/1 0/0 0/0 .rodata @3833 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3833 = 2.0f / 5.0f; -COMPILER_STRIP_GATE(0x80C85230, &lit_3833); -#pragma pop - -/* 80C84EA0-80C84FF4 0006E0 0154+00 1/0 0/0 0/0 .text modeClose__13daLv7BsGate_cFv */ -void daLv7BsGate_c::modeClose() { - // NONMATCHING -} - -/* 80C84FF4-80C85098 000834 00A4+00 1/0 0/0 0/0 .text Draw__13daLv7BsGate_cFv */ -void daLv7BsGate_c::Draw() { - // NONMATCHING -} - -/* 80C85098-80C850D8 0008D8 0040+00 1/0 0/0 0/0 .text Delete__13daLv7BsGate_cFv */ -void daLv7BsGate_c::Delete() { - // NONMATCHING -} - -/* 80C850D8-80C85104 000918 002C+00 1/0 0/0 0/0 .text daLv7BsGate_Draw__FP13daLv7BsGate_c - */ -static void daLv7BsGate_Draw(daLv7BsGate_c* param_0) { - // NONMATCHING -} - -/* 80C85104-80C85124 000944 0020+00 1/0 0/0 0/0 .text daLv7BsGate_Execute__FP13daLv7BsGate_c */ -static void daLv7BsGate_Execute(daLv7BsGate_c* param_0) { - // NONMATCHING -} - -/* 80C85124-80C85144 000964 0020+00 1/0 0/0 0/0 .text daLv7BsGate_Delete__FP13daLv7BsGate_c */ -static void daLv7BsGate_Delete(daLv7BsGate_c* param_0) { - // NONMATCHING -} - -/* 80C85144-80C85164 000984 0020+00 1/0 0/0 0/0 .text daLv7BsGate_Create__FP10fopAc_ac_c - */ -static void daLv7BsGate_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80C85164-80C851C0 0009A4 005C+00 2/1 0/0 0/0 .text __dt__17daLv7BsGate_HIO_cFv */ -daLv7BsGate_HIO_c::~daLv7BsGate_HIO_c() { - // NONMATCHING -} - -/* 80C851C0-80C851FC 000A00 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_lv7BsGate_cpp */ -void __sinit_d_a_obj_lv7BsGate_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80C851C0, __sinit_d_a_obj_lv7BsGate_cpp); -#pragma pop - -/* 80C85234-80C85234 000024 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_obj_lv7PropellerY.cpp b/src/d/actor/d_a_obj_lv7PropellerY.cpp index c9e5293d62..44b4183a1d 100644 --- a/src/d/actor/d_a_obj_lv7PropellerY.cpp +++ b/src/d/actor/d_a_obj_lv7PropellerY.cpp @@ -6,213 +6,318 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_lv7PropellerY.h" -#include "dol2asm.h" +class daPropY_HIO_c : public mDoHIO_entry_c { +public: + /* 80C8546C */ daPropY_HIO_c(); + /* 80C86084 */ virtual ~daPropY_HIO_c() {} + void genMessage(JORMContext*); -// -// Forward References: -// - -extern "C" void __ct__13daPropY_HIO_cFv(); -extern "C" void __dt__14mDoHIO_entry_cFv(); -extern "C" void setBaseMtx__9daPropY_cFv(); -extern "C" void CreateHeap__9daPropY_cFv(); -extern "C" void create__9daPropY_cFv(); -extern "C" void Execute__9daPropY_cFPPA3_A4_f(); -extern "C" void procMain__9daPropY_cFv(); -extern "C" void init_modeMoveWait__9daPropY_cFv(); -extern "C" void modeMoveWait__9daPropY_cFv(); -extern "C" void init_modeMove__9daPropY_cFv(); -extern "C" void modeMove__9daPropY_cFv(); -extern "C" void init_modeWait__9daPropY_cFv(); -extern "C" void modeWait__9daPropY_cFv(); -extern "C" void init_modeMove2__9daPropY_cFv(); -extern "C" void modeMove2__9daPropY_cFv(); -extern "C" void init_modeStop__9daPropY_cFv(); -extern "C" void modeStop__9daPropY_cFv(); -extern "C" void Draw__9daPropY_cFv(); -extern "C" void Delete__9daPropY_cFv(); -extern "C" static void daPropY_Draw__FP9daPropY_c(); -extern "C" static void daPropY_Execute__FP9daPropY_c(); -extern "C" static void daPropY_Delete__FP9daPropY_c(); -extern "C" static void daPropY_Create__FP10fopAc_ac_c(); -extern "C" void __dt__13daPropY_HIO_cFv(); -extern "C" void __sinit_d_a_obj_lv7PropellerY_cpp(); -extern "C" extern char const* const d_a_obj_lv7PropellerY__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData(); -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 isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool Create__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 settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void __ptmf_scall(); -extern "C" void __cvt_fp2unsigned(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80C86130-80C86134 000000 0004+00 7/7 0/0 0/0 .rodata @3650 */ -SECTION_RODATA static u8 const lit_3650[4] = { - 0x00, - 0x00, - 0x00, - 0x00, + /* 0x04 */ f32 rot_speed; + /* 0x08 */ f32 rot_accel; + /* 0x0C */ f32 field_0xc; + /* 0x10 */ f32 max_rot_speed; + /* 0x14 */ f32 rot_time_sec; + /* 0x18 */ u8 wait_time; + /* 0x1C */ f32 y_offset; }; -COMPILER_STRIP_GATE(0x80C86130, &lit_3650); - -/* 80C86134-80C86138 000004 0004+00 0/1 0/0 0/0 .rodata @3651 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3651 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80C86134, &lit_3651); -#pragma pop - -/* 80C86138-80C8613C 000008 0004+00 0/1 0/0 0/0 .rodata @3652 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_3652 = 0x3B449BA6; -COMPILER_STRIP_GATE(0x80C86138, &lit_3652); -#pragma pop - -/* 80C8613C-80C86140 00000C 0004+00 0/4 0/0 0/0 .rodata @3653 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3653 = 1.0f; -COMPILER_STRIP_GATE(0x80C8613C, &lit_3653); -#pragma pop - -/* 80C86140-80C86144 000010 0004+00 0/1 0/0 0/0 .rodata @3654 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3654 = 20.0f; -COMPILER_STRIP_GATE(0x80C86140, &lit_3654); -#pragma pop - -/* 80C86160-80C86160 000030 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C86160 = "stickwl00"; -SECTION_DEAD static char const* const stringBase_80C8616A = "stickwl01"; -#pragma pop /* 80C86194-80C8619C -00001 0008+00 3/3 0/0 0/0 .data l_type */ -SECTION_DATA static void* l_type[2] = { - (void*)&d_a_obj_lv7PropellerY__stringBase0, - (void*)(((char*)&d_a_obj_lv7PropellerY__stringBase0) + 0xA), +static char* l_type[2] = { + "stickwl00", + "stickwl01", }; /* 80C8619C-80C861A4 000028 0008+00 1/1 0/0 0/0 .data l_bmdIdx */ -SECTION_DATA static u8 l_bmdIdx[8] = { - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, -}; +static int l_bmdIdx[] = {4, 4}; /* 80C861A4-80C861AC 000030 0008+00 1/1 0/0 0/0 .data l_dzbIdx */ -SECTION_DATA static u8 l_dzbIdx[8] = { - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, -}; +static int l_dzbIdx[] = {7, 7}; -/* 80C861AC-80C861B8 -00001 000C+00 0/1 0/0 0/0 .data @3788 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3788[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeMoveWait__9daPropY_cFv, -}; -#pragma pop +/* 80C8546C-80C854C4 0000EC 0058+00 1/1 0/0 0/0 .text __ct__13daPropY_HIO_cFv */ +daPropY_HIO_c::daPropY_HIO_c() { + rot_speed = 0.0f; + rot_accel = 0.1f; + field_0xc = 0.003f; + max_rot_speed = 1.0f; + rot_time_sec = 20.0f; + wait_time = 30; + y_offset = 0.0f; +} -/* 80C861B8-80C861C4 -00001 000C+00 0/1 0/0 0/0 .data @3789 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3789[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeMove__9daPropY_cFv, -}; -#pragma pop +/* 80C862CC-80C862EC 000014 0020+00 7/7 0/0 0/0 .bss l_HIO */ +static daPropY_HIO_c l_HIO; -/* 80C861C4-80C861D0 -00001 000C+00 0/1 0/0 0/0 .data @3790 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3790[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWait__9daPropY_cFv, -}; -#pragma pop +/* 80C8550C-80C855A4 00018C 0098+00 2/2 0/0 0/0 .text setBaseMtx__9daPropY_cFv */ +void daPropY_c::setBaseMtx() { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y + l_HIO.y_offset, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mpModel->setBaseScale(scale); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); +} -/* 80C861D0-80C861DC -00001 000C+00 0/1 0/0 0/0 .data @3791 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3791[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeMove2__9daPropY_cFv, -}; -#pragma pop +/* 80C855A4-80C85624 000224 0080+00 1/0 0/0 0/0 .text CreateHeap__9daPropY_cFv */ +int daPropY_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_type[mType], l_bmdIdx[mType]); + JUT_ASSERT(184, modelData != NULL); -/* 80C861DC-80C861E8 -00001 000C+00 0/1 0/0 0/0 .data @3792 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3792[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeStop__9daPropY_cFv, -}; -#pragma pop + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } -/* 80C861E8-80C86224 000074 003C+00 0/1 0/0 0/0 .data mode_proc$3787 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 mode_proc[60] = { - 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, 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 + return 1; +} + +/* 80C85624-80C85810 0002A4 01EC+00 1/1 0/0 0/0 .text create__9daPropY_cFv */ +int daPropY_c::create() { + fopAcM_ct(this, daPropY_c); + + mType = getType(); + + int phase_state = dComIfG_resLoad(&mPhase, l_type[mType]); + if (phase_state == cPhs_COMPLEATE_e) { + if (MoveBGCreate(l_type[mType], l_dzbIdx[mType], dBgS_MoveBGProc_TypicalRotY, 0x2A40, NULL) == cPhs_ERROR_e) { + return cPhs_ERROR_e; + } + + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + fopAcM_setCullSizeBox2(this, mpModel->getModelData()); + setBaseMtx(); + + mSwbit = getSw(); + mTurnType = getTurnType(); + mTurnVec = getTurnVec(); + if (mTurnVec > 1) { + mTurnVec = 0; + } + + if (mTurnVec == 0) { + field_0x5b2 = -1; + field_0x5b6 = -0x8000; + } else { + field_0x5b2 = 1; + field_0x5b6 = 0; + } + + if (mSwbit == 0xFF) { + if (mTurnType == 0) { + init_modeMove(); + } else { + init_modeWait(); + } + } else { + mIsSwitch = fopAcM_isSwitch(this, mSwbit); + if (mIsSwitch) { + if (mTurnType == 0) { + init_modeMove(); + } else { + init_modeWait(); + } + } else { + init_modeMoveWait(); + } + } + + #if DEBUG + l_HIO.entryHIO("プロペラ横"); + #endif + } + + return phase_state; +} + +/* 80C85810-80C85860 000490 0050+00 1/0 0/0 0/0 .text Execute__9daPropY_cFPPA3_A4_f */ +int daPropY_c::Execute(Mtx** param_0) { + procMain(); + *param_0 = &mpModel->getBaseTRMtx(); + setBaseMtx(); + return 1; +} + +/* 80C85860-80C859B4 0004E0 0154+00 1/1 0/0 0/0 .text procMain__9daPropY_cFv */ +void daPropY_c::procMain() { + static void (daPropY_c::*mode_proc[])() = { + &daPropY_c::modeMoveWait, + &daPropY_c::modeMove, + &daPropY_c::modeWait, + &daPropY_c::modeMove2, + &daPropY_c::modeStop, + }; + + if (mSwbit != 0xFF) { + u8 prev_switch = mIsSwitch; + mIsSwitch = fopAcM_isSwitch(this, mSwbit); + if (mIsSwitch != prev_switch) { + if (mIsSwitch) { + if (mTurnType == 0) { + init_modeMove(); + } else { + init_modeMove2(); + } + } else { + init_modeStop(); + } + } + } + + (this->*mode_proc[mMode])(); +} + +/* 80C859B4-80C859C0 000634 000C+00 2/2 0/0 0/0 .text init_modeMoveWait__9daPropY_cFv */ +void daPropY_c::init_modeMoveWait() { + mMode = 0; +} + +/* 80C859C0-80C859C4 000640 0004+00 1/0 0/0 0/0 .text modeMoveWait__9daPropY_cFv */ +void daPropY_c::modeMoveWait() {} + +/* 80C859C4-80C859E0 000644 001C+00 2/2 0/0 0/0 .text init_modeMove__9daPropY_cFv */ +void daPropY_c::init_modeMove() { + fopAcM_SetSpeedF(this, 0.0f); + field_0x5c4 = 0.0f; + mMode = 1; +} + +/* 80C859E0-80C85B08 000660 0128+00 1/0 0/0 0/0 .text modeMove__9daPropY_cFv */ +void daPropY_c::modeMove() { + cLib_chaseF(&speedF, 360.0f / (30.0f * l_HIO.rot_time_sec), l_HIO.field_0xc); + field_0x5b4 = cM_deg2s(speedF); + field_0x5c4 = 127.0f * (speedF / (360.0f / (30.0f * l_HIO.rot_time_sec))); + mDoAud_seStartLevel(Z2SE_OBJ_AMI_ROLL, ¤t.pos, field_0x5c4, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + + if (l_HIO.rot_time_sec != 0.0f) { + shape_angle.y += (field_0x5b4 * field_0x5b2); + } +} + +/* 80C85B08-80C85B24 000788 001C+00 2/2 0/0 0/0 .text init_modeWait__9daPropY_cFv */ +void daPropY_c::init_modeWait() { + mTimer = l_HIO.wait_time; + mMode = 2; +} + +/* 80C85B24-80C85B5C 0007A4 0038+00 1/0 0/0 0/0 .text modeWait__9daPropY_cFv */ +void daPropY_c::modeWait() { + if (mTimer == 0) { + init_modeMove2(); + } else { + mTimer--; + } +} + +/* 80C85B5C-80C85B84 0007DC 0028+00 2/2 0/0 0/0 .text init_modeMove2__9daPropY_cFv */ +void daPropY_c::init_modeMove2() { + fopAcM_SetSpeedF(this, l_HIO.rot_speed); + field_0x5c4 = 0.0f; + mMode = 3; +} + +/* 80C85B84-80C85CAC 000804 0128+00 1/0 0/0 0/0 .text modeMove2__9daPropY_cFv */ +void daPropY_c::modeMove2() { + cLib_chaseF(&speedF, l_HIO.max_rot_speed, l_HIO.rot_accel); + s16 temp_r30 = cLib_addCalcAngleS(&shape_angle.y, field_0x5b6, 1, (182.04445f * fopAcM_GetSpeedF(this)), 1); + field_0x5c4 = 127.0f * (speedF / l_HIO.max_rot_speed); + mDoAud_seStartLevel(Z2SE_OBJ_AMI_ROLL, ¤t.pos, field_0x5c4, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + + if (temp_r30 == 0) { + if (mTurnVec == 0) { + field_0x5b6 -= 0x8000; + } else { + field_0x5b6 += 0x7FFF; + } + init_modeWait(); + } +} + +/* 80C85CAC-80C85DD0 00092C 0124+00 1/1 0/0 0/0 .text init_modeStop__9daPropY_cFv */ +void daPropY_c::init_modeStop() { + if (mTurnType == 0) { + fopAcM_SetSpeedF(this, cM_deg2s(360.0f / (30.0f * l_HIO.rot_time_sec))); + } + + if (mTurnVec == 0) { + if (shape_angle.y <= 0) { + field_0x5b6 = home.angle.y - 0x8000; + } else { + field_0x5b6 = home.angle.y; + } + } else if (shape_angle.y >= 0) { + field_0x5b6 = home.angle.y + 0x7FFF; + } else { + field_0x5b6 = home.angle.y; + } + + field_0x5bc = std::fabs((f32)shape_angle.y - (f32)field_0x5b6); + field_0x5c0 = field_0x5c4; + mMode = 4; +} + +/* 80C85DD0-80C85F14 000A50 0144+00 1/0 0/0 0/0 .text modeStop__9daPropY_cFv */ +// NONMATCHING - fsubs instead of fsub +void daPropY_c::modeStop() { + s16 var_r30; + if (mTurnType == 0) { + var_r30 = cLib_addCalcAngleS(&shape_angle.y, field_0x5b6, 16, fopAcM_GetSpeedF(this), cM_deg2s(0.1f)); + } else { + var_r30 = cLib_addCalcAngleS(&shape_angle.y, field_0x5b6, 1, (182.04445f * fopAcM_GetSpeedF(this)), 1); + } + + field_0x5c4 = field_0x5c0 * (std::fabs((f32)var_r30) / field_0x5bc); + mDoAud_seStartLevel(Z2SE_OBJ_AMI_ROLL, ¤t.pos, field_0x5c4, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + + if (var_r30 == 0) { + init_modeMoveWait(); + } +} + +/* 80C85F14-80C85FB8 000B94 00A4+00 1/0 0/0 0/0 .text Draw__9daPropY_cFv */ +int daPropY_c::Draw() { + g_env_light.settingTevStruct(16, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + return 1; +} + +/* 80C85FB8-80C85FF8 000C38 0040+00 1/0 0/0 0/0 .text Delete__9daPropY_cFv */ +int daPropY_c::Delete() { + dComIfG_resDelete(&mPhase, l_type[mType]); + #if DEBUG + l_HIO.removeHIO(); + #endif + return 1; +} + +/* 80C85FF8-80C86024 000C78 002C+00 1/0 0/0 0/0 .text daPropY_Draw__FP9daPropY_c */ +static int daPropY_Draw(daPropY_c* i_this) { + return i_this->MoveBGDraw(); +} + +/* 80C86024-80C86044 000CA4 0020+00 1/0 0/0 0/0 .text daPropY_Execute__FP9daPropY_c */ +static int daPropY_Execute(daPropY_c* i_this) { + return i_this->MoveBGExecute(); +} + +/* 80C86044-80C86064 000CC4 0020+00 1/0 0/0 0/0 .text daPropY_Delete__FP9daPropY_c */ +static int daPropY_Delete(daPropY_c* i_this) { + return i_this->MoveBGDelete(); +} + +/* 80C86064-80C86084 000CE4 0020+00 1/0 0/0 0/0 .text daPropY_Create__FP10fopAc_ac_c */ +static int daPropY_Create(fopAc_ac_c* i_this) { + return ((daPropY_c*)i_this)->create(); +} /* 80C86224-80C86244 -00001 0020+00 1/0 0/0 0/0 .data l_daPropY_Method */ static actor_method_class l_daPropY_Method = { - (process_method_func)daPropY_Create__FP10fopAc_ac_c, - (process_method_func)daPropY_Delete__FP9daPropY_c, - (process_method_func)daPropY_Execute__FP9daPropY_c, - 0, - (process_method_func)daPropY_Draw__FP9daPropY_c, + (process_method_func)daPropY_Create, + (process_method_func)daPropY_Delete, + (process_method_func)daPropY_Execute, + NULL, + (process_method_func)daPropY_Draw, }; /* 80C86244-80C86274 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Lv7PropY */ @@ -232,222 +337,3 @@ extern actor_process_profile_definition g_profile_Obj_Lv7PropY = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80C86274-80C8629C 000100 0028+00 1/1 0/0 0/0 .data __vt__9daPropY_c */ -SECTION_DATA extern void* __vt__9daPropY_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__9daPropY_cFv, - (void*)Create__16dBgS_MoveBgActorFv, - (void*)Execute__9daPropY_cFPPA3_A4_f, - (void*)Draw__9daPropY_cFv, - (void*)Delete__9daPropY_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - -/* 80C8629C-80C862A8 000128 000C+00 2/2 0/0 0/0 .data __vt__13daPropY_HIO_c */ -SECTION_DATA extern void* __vt__13daPropY_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__13daPropY_HIO_cFv, -}; - -/* 80C862A8-80C862B4 000134 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */ -SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14mDoHIO_entry_cFv, -}; - -/* 80C8546C-80C854C4 0000EC 0058+00 1/1 0/0 0/0 .text __ct__13daPropY_HIO_cFv */ -daPropY_HIO_c::daPropY_HIO_c() { - // NONMATCHING -} - -/* 80C854C4-80C8550C 000144 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */ -// mDoHIO_entry_c::~mDoHIO_entry_c() { -extern "C" void __dt__14mDoHIO_entry_cFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C862C0-80C862CC 000008 000C+00 1/1 0/0 0/0 .bss @3644 */ -static u8 lit_3644[12]; - -/* 80C862CC-80C862EC 000014 0020+00 7/7 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[32]; - -/* 80C8550C-80C855A4 00018C 0098+00 2/2 0/0 0/0 .text setBaseMtx__9daPropY_cFv */ -void daPropY_c::setBaseMtx() { - // NONMATCHING -} - -/* 80C855A4-80C85624 000224 0080+00 1/0 0/0 0/0 .text CreateHeap__9daPropY_cFv */ -void daPropY_c::CreateHeap() { - // NONMATCHING -} - -/* 80C85624-80C85810 0002A4 01EC+00 1/1 0/0 0/0 .text create__9daPropY_cFv */ -void daPropY_c::create() { - // NONMATCHING -} - -/* 80C85810-80C85860 000490 0050+00 1/0 0/0 0/0 .text Execute__9daPropY_cFPPA3_A4_f */ -void daPropY_c::Execute(Mtx** param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C862EC-80C862F0 000034 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80C862EC[4]; - -/* 80C85860-80C859B4 0004E0 0154+00 1/1 0/0 0/0 .text procMain__9daPropY_cFv */ -void daPropY_c::procMain() { - // NONMATCHING -} - -/* 80C859B4-80C859C0 000634 000C+00 2/2 0/0 0/0 .text init_modeMoveWait__9daPropY_cFv */ -void daPropY_c::init_modeMoveWait() { - // NONMATCHING -} - -/* 80C859C0-80C859C4 000640 0004+00 1/0 0/0 0/0 .text modeMoveWait__9daPropY_cFv */ -void daPropY_c::modeMoveWait() { - /* empty function */ -} - -/* 80C859C4-80C859E0 000644 001C+00 2/2 0/0 0/0 .text init_modeMove__9daPropY_cFv */ -void daPropY_c::init_modeMove() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C86144-80C86148 000014 0004+00 0/2 0/0 0/0 .rodata @3845 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3845 = 360.0f; -COMPILER_STRIP_GATE(0x80C86144, &lit_3845); -#pragma pop - -/* 80C86148-80C8614C 000018 0004+00 0/2 0/0 0/0 .rodata @3846 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3846 = 30.0f; -COMPILER_STRIP_GATE(0x80C86148, &lit_3846); -#pragma pop - -/* 80C8614C-80C86150 00001C 0004+00 0/4 0/0 0/0 .rodata @3847 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_3847 = 0x43360B61; -COMPILER_STRIP_GATE(0x80C8614C, &lit_3847); -#pragma pop - -/* 80C86150-80C86154 000020 0004+00 0/2 0/0 0/0 .rodata @3848 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3848 = 127.0f; -COMPILER_STRIP_GATE(0x80C86150, &lit_3848); -#pragma pop - -/* 80C86154-80C86158 000024 0004+00 0/3 0/0 0/0 .rodata @3849 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3849 = -1.0f; -COMPILER_STRIP_GATE(0x80C86154, &lit_3849); -#pragma pop - -/* 80C859E0-80C85B08 000660 0128+00 1/0 0/0 0/0 .text modeMove__9daPropY_cFv */ -void daPropY_c::modeMove() { - // NONMATCHING -} - -/* 80C85B08-80C85B24 000788 001C+00 2/2 0/0 0/0 .text init_modeWait__9daPropY_cFv */ -void daPropY_c::init_modeWait() { - // NONMATCHING -} - -/* 80C85B24-80C85B5C 0007A4 0038+00 1/0 0/0 0/0 .text modeWait__9daPropY_cFv */ -void daPropY_c::modeWait() { - // NONMATCHING -} - -/* 80C85B5C-80C85B84 0007DC 0028+00 2/2 0/0 0/0 .text init_modeMove2__9daPropY_cFv */ -void daPropY_c::init_modeMove2() { - // NONMATCHING -} - -/* 80C85B84-80C85CAC 000804 0128+00 1/0 0/0 0/0 .text modeMove2__9daPropY_cFv */ -void daPropY_c::modeMove2() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C86158-80C86160 000028 0008+00 0/2 0/0 0/0 .rodata @3913 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3913[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C86158, &lit_3913); -#pragma pop - -/* 80C85CAC-80C85DD0 00092C 0124+00 1/1 0/0 0/0 .text init_modeStop__9daPropY_cFv */ -void daPropY_c::init_modeStop() { - // NONMATCHING -} - -/* 80C85DD0-80C85F14 000A50 0144+00 1/0 0/0 0/0 .text modeStop__9daPropY_cFv */ -void daPropY_c::modeStop() { - // NONMATCHING -} - -/* 80C85F14-80C85FB8 000B94 00A4+00 1/0 0/0 0/0 .text Draw__9daPropY_cFv */ -void daPropY_c::Draw() { - // NONMATCHING -} - -/* 80C85FB8-80C85FF8 000C38 0040+00 1/0 0/0 0/0 .text Delete__9daPropY_cFv */ -void daPropY_c::Delete() { - // NONMATCHING -} - -/* 80C85FF8-80C86024 000C78 002C+00 1/0 0/0 0/0 .text daPropY_Draw__FP9daPropY_c */ -static void daPropY_Draw(daPropY_c* param_0) { - // NONMATCHING -} - -/* 80C86024-80C86044 000CA4 0020+00 1/0 0/0 0/0 .text daPropY_Execute__FP9daPropY_c */ -static void daPropY_Execute(daPropY_c* param_0) { - // NONMATCHING -} - -/* 80C86044-80C86064 000CC4 0020+00 1/0 0/0 0/0 .text daPropY_Delete__FP9daPropY_c */ -static void daPropY_Delete(daPropY_c* param_0) { - // NONMATCHING -} - -/* 80C86064-80C86084 000CE4 0020+00 1/0 0/0 0/0 .text daPropY_Create__FP10fopAc_ac_c */ -static void daPropY_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80C86084-80C860E0 000D04 005C+00 2/1 0/0 0/0 .text __dt__13daPropY_HIO_cFv */ -daPropY_HIO_c::~daPropY_HIO_c() { - // NONMATCHING -} - -/* 80C860E0-80C8611C 000D60 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_lv7PropellerY_cpp - */ -void __sinit_d_a_obj_lv7PropellerY_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80C860E0, __sinit_d_a_obj_lv7PropellerY_cpp); -#pragma pop - -/* 80C86160-80C86160 000030 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_obj_lv8UdFloor.cpp b/src/d/actor/d_a_obj_lv8UdFloor.cpp index baa4dd64d3..ffef276232 100644 --- a/src/d/actor/d_a_obj_lv8UdFloor.cpp +++ b/src/d/actor/d_a_obj_lv8UdFloor.cpp @@ -6,175 +6,318 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_lv8UdFloor.h" -#include "dol2asm.h" +class daUdFloor_HIO_c : public mDoHIO_entry_c { +public: + /* 80C8BD0C */ daUdFloor_HIO_c(); + /* 80C8CB44 */ virtual ~daUdFloor_HIO_c() {} + void genMessage(JORMContext*); -// -// Forward References: -// - -extern "C" void __ct__15daUdFloor_HIO_cFv(); -extern "C" void __dt__14mDoHIO_entry_cFv(); -extern "C" void setBaseMtx__11daUdFloor_cFv(); -extern "C" void CreateHeap__11daUdFloor_cFv(); -extern "C" void create__11daUdFloor_cFv(); -extern "C" void Execute__11daUdFloor_cFPPA3_A4_f(); -extern "C" void moveLift__11daUdFloor_cFv(); -extern "C" void init_modeWait__11daUdFloor_cFv(); -extern "C" void modeWait__11daUdFloor_cFv(); -extern "C" void init_modeUpMoveInit__11daUdFloor_cFv(); -extern "C" void modeUpMoveInit__11daUdFloor_cFv(); -extern "C" void colorAnm__11daUdFloor_cFi(); -extern "C" void init_modeUpMove__11daUdFloor_cFv(); -extern "C" void modeUpMove__11daUdFloor_cFv(); -extern "C" void init_modeDownMoveInit__11daUdFloor_cFv(); -extern "C" void modeDownMoveInit__11daUdFloor_cFv(); -extern "C" void init_modeDownMove__11daUdFloor_cFv(); -extern "C" void modeDownMove__11daUdFloor_cFv(); -extern "C" void Draw__11daUdFloor_cFv(); -extern "C" void Delete__11daUdFloor_cFv(); -extern "C" static void daUdFloor_Draw__FP11daUdFloor_c(); -extern "C" static void daUdFloor_Execute__FP11daUdFloor_c(); -extern "C" static void daUdFloor_Delete__FP11daUdFloor_c(); -extern "C" static void daUdFloor_Create__FP10fopAc_ac_c(); -extern "C" void __dt__15daUdFloor_HIO_cFv(); -extern "C" void __sinit_d_a_obj_lv8UdFloor_cpp(); -extern "C" extern char const* const d_a_obj_lv8UdFloor__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData(); -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 isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool Create__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 settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80C8CBF0-80C8CBF4 000000 0004+00 5/5 0/0 0/0 .rodata @3628 */ -SECTION_RODATA static u8 const lit_3628[4] = { - 0x00, - 0x00, - 0x00, - 0x00, + /* 0x04 */ u8 field_0x4; + /* 0x08 */ f32 init_speed; + /* 0x0C */ u8 vibration; + /* 0x0D */ u8 down_color_R; + /* 0x0E */ u8 down_color_G; + /* 0x0F */ u8 down_color_B; + /* 0x10 */ u8 down_framecount; + /* 0x11 */ u8 up_color_R; + /* 0x12 */ u8 up_color_G; + /* 0x13 */ u8 up_color_B; + /* 0x14 */ u8 up_framecount; }; -COMPILER_STRIP_GATE(0x80C8CBF0, &lit_3628); - -/* 80C8CC34-80C8CC34 000044 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C8CC34 = "L8Step"; -SECTION_DEAD static char const* const stringBase_80C8CC3B = "L8StepX"; -#pragma pop /* 80C8CC64-80C8CC6C -00001 0008+00 3/3 0/0 0/0 .data l_resNameIdx */ -SECTION_DATA static void* l_resNameIdx[2] = { - (void*)&d_a_obj_lv8UdFloor__stringBase0, - (void*)(((char*)&d_a_obj_lv8UdFloor__stringBase0) + 0x7), +static char* l_resNameIdx[2] = { + "L8Step", + "L8StepX", }; -/* 80C8CC6C-80C8CC78 -00001 000C+00 0/1 0/0 0/0 .data @3736 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3736[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWait__11daUdFloor_cFv, -}; -#pragma pop +/* 80C8BD0C-80C8BD80 0000EC 0074+00 1/1 0/0 0/0 .text __ct__15daUdFloor_HIO_cFv */ +daUdFloor_HIO_c::daUdFloor_HIO_c() { + field_0x4 = 60; + init_speed = 0.0f; + vibration = 4; -/* 80C8CC78-80C8CC84 -00001 000C+00 0/1 0/0 0/0 .data @3737 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3737[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeUpMoveInit__11daUdFloor_cFv, -}; -#pragma pop + down_color_R = 7; + down_color_G = 14; + down_color_B = 16; + down_framecount = 10; -/* 80C8CC84-80C8CC90 -00001 000C+00 0/1 0/0 0/0 .data @3738 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3738[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeUpMove__11daUdFloor_cFv, -}; -#pragma pop + up_color_R = 0; + up_color_G = 255; + up_color_B = 255; + up_framecount = 15; +} -/* 80C8CC90-80C8CC9C -00001 000C+00 0/1 0/0 0/0 .data @3739 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3739[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeDownMoveInit__11daUdFloor_cFv, -}; -#pragma pop +/* 80C8BDC8-80C8BE64 0001A8 009C+00 2/2 0/0 0/0 .text setBaseMtx__11daUdFloor_cFv */ +void daUdFloor_c::setBaseMtx() { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(0, current.angle.y, 0); + mDoMtx_stack_c::transM(0.0f, field_0x5c0, 0.0f); + mpModel->setBaseScale(scale); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); +} -/* 80C8CC9C-80C8CCA8 -00001 000C+00 0/1 0/0 0/0 .data @3740 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3740[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeDownMove__11daUdFloor_cFv, -}; -#pragma pop +/* 80C8CBF4-80C8CBFC 000004 0008+00 1/1 0/0 0/0 .rodata l_bmdIdx */ +static const int l_bmdIdx[] = {4, 4}; -/* 80C8CCA8-80C8CCE4 000064 003C+00 0/1 0/0 0/0 .data mode_proc$3735 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 mode_proc[60] = { - 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, 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 +/* 80C8BE64-80C8BEE4 000244 0080+00 1/0 0/0 0/0 .text CreateHeap__11daUdFloor_cFv */ +int daUdFloor_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_resNameIdx[mModelType], l_bmdIdx[mModelType]); + JUT_ASSERT(231, modelData != NULL); + + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } + + return 1; +} + +/* 80C8CBFC-80C8CC04 00000C 0008+00 0/1 0/0 0/0 .rodata l_dzbIdx */ +static const int l_dzbIdx[] = {7, 7}; + +/* 80C8CC04-80C8CC0C 000014 0008+00 0/1 0/0 0/0 .rodata l_heap_size */ +static const u32 l_heap_size[] = {0x1200, 0x1400}; + +/* 80C8CD8C-80C8CDA4 000014 0018+00 7/7 0/0 0/0 .bss l_HIO */ +static daUdFloor_HIO_c l_HIO; + +/* 80C8BEE4-80C8C0DC 0002C4 01F8+00 1/1 0/0 0/0 .text create__11daUdFloor_cFv */ +int daUdFloor_c::create() { + fopAcM_ct(this, daUdFloor_c); + + mModelType = getModelType(); + + int phase_state = dComIfG_resLoad(&mPhase, l_resNameIdx[mModelType]); + if (phase_state == cPhs_COMPLEATE_e) { + if (MoveBGCreate(l_resNameIdx[mModelType], l_dzbIdx[mModelType], dBgS_MoveBGProc_TypicalRotY, l_heap_size[mModelType], NULL) == cPhs_ERROR_e) { + return cPhs_ERROR_e; + } + + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + fopAcM_setCullSizeBox2(this, mpModel->getModelData()); + + s8 move_height = getMoveHeight(); + field_0x5b0 = 50.0f * move_height; + + u8 move_speed = getMoveSpeed(); + field_0x5b4 = field_0x5b0 / move_speed; + + mTimer = getTimer(); + mIsSwitch = fopAcM_isSwitch(this, getSw()); + + if (mIsSwitch) { + field_0x5c0 = field_0x5b0; + mColorR = l_HIO.up_color_R; + mColorG = l_HIO.up_color_G; + mColorB = l_HIO.up_color_B; + } else { + field_0x5c0 = 0.0f; + mColorR = l_HIO.down_color_R; + mColorG = l_HIO.down_color_G; + mColorB = l_HIO.down_color_B; + } + + init_modeWait(); + setBaseMtx(); + + #if DEBUG + l_HIO.entryHIO("上下床(Lv8)"); + #endif + } + + return phase_state; +} + +/* 80C8C0DC-80C8C12C 0004BC 0050+00 1/0 0/0 0/0 .text Execute__11daUdFloor_cFPPA3_A4_f */ +int daUdFloor_c::Execute(Mtx** param_0) { + moveLift(); + *param_0 = &mpModel->getBaseTRMtx(); + setBaseMtx(); + return 1; +} + +/* 80C8C12C-80C8C264 00050C 0138+00 1/1 0/0 0/0 .text moveLift__11daUdFloor_cFv */ +void daUdFloor_c::moveLift() { + static void (daUdFloor_c::*mode_proc[])() = { + &daUdFloor_c::modeWait, + &daUdFloor_c::modeUpMoveInit, + &daUdFloor_c::modeUpMove, + &daUdFloor_c::modeDownMoveInit, + &daUdFloor_c::modeDownMove, + }; + + u8 prev_switch = mIsSwitch; + mIsSwitch = fopAcM_isSwitch(this, getSw()); + if (prev_switch != mIsSwitch) { + if (mIsSwitch) { + init_modeUpMoveInit(); + } else { + init_modeDownMoveInit(); + } + } + + (this->*mode_proc[mMode])(); +} + +/* 80C8C264-80C8C270 000644 000C+00 3/3 0/0 0/0 .text init_modeWait__11daUdFloor_cFv */ +void daUdFloor_c::init_modeWait() { + mMode = 0; +} + +/* 80C8C270-80C8C274 000650 0004+00 1/0 0/0 0/0 .text modeWait__11daUdFloor_cFv */ +void daUdFloor_c::modeWait() {} + +/* 80C8C274-80C8C310 000654 009C+00 1/1 0/0 0/0 .text init_modeUpMoveInit__11daUdFloor_cFv */ +void daUdFloor_c::init_modeUpMoveInit() { + field_0x5c4 = 0; + field_0x5c5 = l_HIO.up_framecount; + mDoAud_seStart(Z2SE_OBJ_L8_STAIR_ON, &home.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mMode = 1; +} + +/* 80C8C310-80C8C354 0006F0 0044+00 1/0 0/0 0/0 .text modeUpMoveInit__11daUdFloor_cFv */ +void daUdFloor_c::modeUpMoveInit() { + if (colorAnm(1) == TRUE) { + init_modeUpMove(); + } +} + +/* 80C8C354-80C8C5E4 000734 0290+00 2/2 0/0 0/0 .text colorAnm__11daUdFloor_cFi */ +u8 daUdFloor_c::colorAnm(BOOL param_0) { + u8 rt = FALSE; + + f32 temp_f31 = field_0x5c4 / (field_0x5c5 - 1.0f); + if (param_0) { + mColorR = l_HIO.down_color_R + (temp_f31 * ((f32)l_HIO.up_color_R - (f32)l_HIO.down_color_R)); + mColorG = l_HIO.down_color_G + (temp_f31 * ((f32)l_HIO.up_color_G - (f32)l_HIO.down_color_G)); + mColorB = l_HIO.down_color_B + (temp_f31 * ((f32)l_HIO.up_color_B - (f32)l_HIO.down_color_B)); + } else { + mColorR = l_HIO.up_color_R - (temp_f31 * ((f32)l_HIO.up_color_R - (f32)l_HIO.down_color_R)); + mColorG = l_HIO.up_color_G - (temp_f31 * ((f32)l_HIO.up_color_G - (f32)l_HIO.down_color_G)); + mColorB = l_HIO.up_color_B - (temp_f31 * ((f32)l_HIO.up_color_B - (f32)l_HIO.down_color_B)); + } + + field_0x5c4++; + if (field_0x5c4 > field_0x5c5 - 1) { + rt = TRUE; + } + + return rt; +} + +/* 80C8C5E4-80C8C68C 0009C4 00A8+00 1/1 0/0 0/0 .text init_modeUpMove__11daUdFloor_cFv */ +void daUdFloor_c::init_modeUpMove() { + fopAcM_SetSpeedF(this, l_HIO.init_speed); + field_0x5ba = mTimer; + if (field_0x5ba == 0) { + mDoAud_seStart(Z2SE_OBJ_L8_STAIR_MV_UP, &home.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + } + mMode = 2; +} + +/* 80C8C68C-80C8C7F8 000A6C 016C+00 1/0 0/0 0/0 .text modeUpMove__11daUdFloor_cFv */ +void daUdFloor_c::modeUpMove() { + if (field_0x5ba != 0) { + field_0x5ba--; + if (field_0x5ba == 0) { + mDoAud_seStart(Z2SE_OBJ_L8_STAIR_MV_UP, &home.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + } + } else { + cLib_chaseF(&speedF, field_0x5b4, field_0x5b4 / 30.0f); + if (cLib_addCalc(&field_0x5c0, field_0x5b0, 1.0f, fopAcM_GetSpeedF(this), 0.1f) == 0.0f) { + mDoAud_seStart(Z2SE_OBJ_L8_STAIR_ST_UP, &home.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + dComIfGp_getVibration().StartShock(l_HIO.vibration, 0xF, cXyz(0.0f, 1.0f, 0.0f)); + init_modeWait(); + } + } +} + +/* 80C8C7F8-80C8C81C 000BD8 0024+00 1/1 0/0 0/0 .text init_modeDownMoveInit__11daUdFloor_cFv */ +void daUdFloor_c::init_modeDownMoveInit() { + field_0x5c4 = 0; + field_0x5c5 = l_HIO.down_framecount; + mMode = 3; +} + +/* 80C8C81C-80C8C860 000BFC 0044+00 1/0 0/0 0/0 .text modeDownMoveInit__11daUdFloor_cFv + */ +void daUdFloor_c::modeDownMoveInit() { + if (colorAnm(0) == TRUE) { + init_modeDownMove(); + } +} + +/* 80C8C860-80C8C8E4 000C40 0084+00 1/1 0/0 0/0 .text init_modeDownMove__11daUdFloor_cFv + */ +void daUdFloor_c::init_modeDownMove() { + mDoAud_seStart(Z2SE_OBJ_L8_STAIR_MV_DW, &home.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mMode = 4; +} + +/* 80C8C8E4-80C8C994 000CC4 00B0+00 1/0 0/0 0/0 .text modeDownMove__11daUdFloor_cFv */ +void daUdFloor_c::modeDownMove() { + if (cLib_addCalc(&field_0x5c0, 0.0f, 0.3f, field_0x5b4, 0.1f) == 0.0f) { + mDoAud_seStart(Z2SE_OBJ_L8_STAIR_ST_DW, &home.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + init_modeWait(); + } +} + +/* 80C8C994-80C8CA78 000D74 00E4+00 1/0 0/0 0/0 .text Draw__11daUdFloor_cFv */ +int daUdFloor_c::Draw() { + g_env_light.settingTevStruct(64, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + + J3DGXColor* matColor_p = mpModel->getModelData()->getMaterialNodePointer(1)->getTevKColor(1); + matColor_p->r = mColorR; + matColor_p->g = mColorG; + matColor_p->b = mColorB; + return 1; +} + +/* 80C8CA78-80C8CAB8 000E58 0040+00 1/0 0/0 0/0 .text Delete__11daUdFloor_cFv */ +int daUdFloor_c::Delete() { + dComIfG_resDelete(&mPhase, l_resNameIdx[mModelType]); + #if DEBUG + l_HIO.removeHIO(); + #endif + return 1; +} + +/* 80C8CAB8-80C8CAE4 000E98 002C+00 1/0 0/0 0/0 .text daUdFloor_Draw__FP11daUdFloor_c */ +static int daUdFloor_Draw(daUdFloor_c* i_this) { + return i_this->MoveBGDraw(); +} + +/* 80C8CAE4-80C8CB04 000EC4 0020+00 1/0 0/0 0/0 .text daUdFloor_Execute__FP11daUdFloor_c + */ +static int daUdFloor_Execute(daUdFloor_c* i_this) { + return i_this->MoveBGExecute(); +} + +/* 80C8CB04-80C8CB24 000EE4 0020+00 1/0 0/0 0/0 .text daUdFloor_Delete__FP11daUdFloor_c + */ +static int daUdFloor_Delete(daUdFloor_c* i_this) { + return i_this->MoveBGDelete(); +} + +/* 80C8CB24-80C8CB44 000F04 0020+00 1/0 0/0 0/0 .text daUdFloor_Create__FP10fopAc_ac_c */ +static int daUdFloor_Create(fopAc_ac_c* i_this) { + return ((daUdFloor_c*)i_this)->create(); +} /* 80C8CCE4-80C8CD04 -00001 0020+00 1/0 0/0 0/0 .data l_daUdFloor_Method */ static actor_method_class l_daUdFloor_Method = { - (process_method_func)daUdFloor_Create__FP10fopAc_ac_c, - (process_method_func)daUdFloor_Delete__FP11daUdFloor_c, - (process_method_func)daUdFloor_Execute__FP11daUdFloor_c, + (process_method_func)daUdFloor_Create, + (process_method_func)daUdFloor_Delete, + (process_method_func)daUdFloor_Execute, 0, - (process_method_func)daUdFloor_Draw__FP11daUdFloor_c, + (process_method_func)daUdFloor_Draw, }; /* 80C8CD04-80C8CD34 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Lv8UdFloor */ @@ -194,263 +337,3 @@ extern actor_process_profile_definition g_profile_Obj_Lv8UdFloor = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80C8CD34-80C8CD5C 0000F0 0028+00 1/1 0/0 0/0 .data __vt__11daUdFloor_c */ -SECTION_DATA extern void* __vt__11daUdFloor_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__11daUdFloor_cFv, - (void*)Create__16dBgS_MoveBgActorFv, - (void*)Execute__11daUdFloor_cFPPA3_A4_f, - (void*)Draw__11daUdFloor_cFv, - (void*)Delete__11daUdFloor_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - -/* 80C8CD5C-80C8CD68 000118 000C+00 2/2 0/0 0/0 .data __vt__15daUdFloor_HIO_c */ -SECTION_DATA extern void* __vt__15daUdFloor_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__15daUdFloor_HIO_cFv, -}; - -/* 80C8CD68-80C8CD74 000124 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */ -SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14mDoHIO_entry_cFv, -}; - -/* 80C8BD0C-80C8BD80 0000EC 0074+00 1/1 0/0 0/0 .text __ct__15daUdFloor_HIO_cFv */ -daUdFloor_HIO_c::daUdFloor_HIO_c() { - // NONMATCHING -} - -/* 80C8BD80-80C8BDC8 000160 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */ -// mDoHIO_entry_c::~mDoHIO_entry_c() { -extern "C" void __dt__14mDoHIO_entry_cFv() { - // NONMATCHING -} - -/* 80C8BDC8-80C8BE64 0001A8 009C+00 2/2 0/0 0/0 .text setBaseMtx__11daUdFloor_cFv */ -void daUdFloor_c::setBaseMtx() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8CBF4-80C8CBFC 000004 0008+00 1/1 0/0 0/0 .rodata l_bmdIdx */ -SECTION_RODATA static u8 const l_bmdIdx[8] = { - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, -}; -COMPILER_STRIP_GATE(0x80C8CBF4, &l_bmdIdx); - -/* 80C8BE64-80C8BEE4 000244 0080+00 1/0 0/0 0/0 .text CreateHeap__11daUdFloor_cFv */ -void daUdFloor_c::CreateHeap() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8CBFC-80C8CC04 00000C 0008+00 0/1 0/0 0/0 .rodata l_dzbIdx */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_dzbIdx[8] = { - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, -}; -COMPILER_STRIP_GATE(0x80C8CBFC, &l_dzbIdx); -#pragma pop - -/* 80C8CC04-80C8CC0C 000014 0008+00 0/1 0/0 0/0 .rodata l_heap_size */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_heap_size[8] = { - 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x14, 0x00, -}; -COMPILER_STRIP_GATE(0x80C8CC04, &l_heap_size); -#pragma pop - -/* 80C8CC0C-80C8CC10 00001C 0004+00 0/1 0/0 0/0 .rodata @3718 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3718 = 50.0f; -COMPILER_STRIP_GATE(0x80C8CC0C, &lit_3718); -#pragma pop - -/* 80C8CC10-80C8CC18 000020 0008+00 0/1 0/0 0/0 .rodata @3720 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3720[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C8CC10, &lit_3720); -#pragma pop - -/* 80C8CC18-80C8CC20 000028 0008+00 1/2 0/0 0/0 .rodata @3722 */ -SECTION_RODATA static u8 const lit_3722[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C8CC18, &lit_3722); - -/* 80C8CD80-80C8CD8C 000008 000C+00 1/1 0/0 0/0 .bss @3622 */ -static u8 lit_3622[12]; - -/* 80C8CD8C-80C8CDA4 000014 0018+00 7/7 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[24]; - -/* 80C8BEE4-80C8C0DC 0002C4 01F8+00 1/1 0/0 0/0 .text create__11daUdFloor_cFv */ -void daUdFloor_c::create() { - // NONMATCHING -} - -/* 80C8C0DC-80C8C12C 0004BC 0050+00 1/0 0/0 0/0 .text Execute__11daUdFloor_cFPPA3_A4_f */ -void daUdFloor_c::Execute(Mtx** param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8CDA4-80C8CDA8 00002C 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80C8CDA4[4]; - -/* 80C8C12C-80C8C264 00050C 0138+00 1/1 0/0 0/0 .text moveLift__11daUdFloor_cFv */ -void daUdFloor_c::moveLift() { - // NONMATCHING -} - -/* 80C8C264-80C8C270 000644 000C+00 3/3 0/0 0/0 .text init_modeWait__11daUdFloor_cFv */ -void daUdFloor_c::init_modeWait() { - // NONMATCHING -} - -/* 80C8C270-80C8C274 000650 0004+00 1/0 0/0 0/0 .text modeWait__11daUdFloor_cFv */ -void daUdFloor_c::modeWait() { - /* empty function */ -} - -/* ############################################################################################## */ -/* 80C8CC20-80C8CC24 000030 0004+00 4/6 0/0 0/0 .rodata @3777 */ -SECTION_RODATA static f32 const lit_3777 = 1.0f; -COMPILER_STRIP_GATE(0x80C8CC20, &lit_3777); - -/* 80C8CC24-80C8CC28 000034 0004+00 3/5 0/0 0/0 .rodata @3778 */ -SECTION_RODATA static f32 const lit_3778 = -1.0f; -COMPILER_STRIP_GATE(0x80C8CC24, &lit_3778); - -/* 80C8C274-80C8C310 000654 009C+00 1/1 0/0 0/0 .text init_modeUpMoveInit__11daUdFloor_cFv */ -void daUdFloor_c::init_modeUpMoveInit() { - // NONMATCHING -} - -/* 80C8C310-80C8C354 0006F0 0044+00 1/0 0/0 0/0 .text modeUpMoveInit__11daUdFloor_cFv */ -void daUdFloor_c::modeUpMoveInit() { - // NONMATCHING -} - -/* 80C8C354-80C8C5E4 000734 0290+00 2/2 0/0 0/0 .text colorAnm__11daUdFloor_cFi */ -void daUdFloor_c::colorAnm(int param_0) { - // NONMATCHING -} - -/* 80C8C5E4-80C8C68C 0009C4 00A8+00 1/1 0/0 0/0 .text init_modeUpMove__11daUdFloor_cFv */ -void daUdFloor_c::init_modeUpMove() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8CC28-80C8CC2C 000038 0004+00 0/1 0/0 0/0 .rodata @3856 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3856 = 30.0f; -COMPILER_STRIP_GATE(0x80C8CC28, &lit_3856); -#pragma pop - -/* 80C8CC2C-80C8CC30 00003C 0004+00 0/2 0/0 0/0 .rodata @3857 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3857 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80C8CC2C, &lit_3857); -#pragma pop - -/* 80C8C68C-80C8C7F8 000A6C 016C+00 1/0 0/0 0/0 .text modeUpMove__11daUdFloor_cFv */ -void daUdFloor_c::modeUpMove() { - // NONMATCHING -} - -/* 80C8C7F8-80C8C81C 000BD8 0024+00 1/1 0/0 0/0 .text init_modeDownMoveInit__11daUdFloor_cFv */ -void daUdFloor_c::init_modeDownMoveInit() { - // NONMATCHING -} - -/* 80C8C81C-80C8C860 000BFC 0044+00 1/0 0/0 0/0 .text modeDownMoveInit__11daUdFloor_cFv - */ -void daUdFloor_c::modeDownMoveInit() { - // NONMATCHING -} - -/* 80C8C860-80C8C8E4 000C40 0084+00 1/1 0/0 0/0 .text init_modeDownMove__11daUdFloor_cFv - */ -void daUdFloor_c::init_modeDownMove() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8CC30-80C8CC34 000040 0004+00 0/1 0/0 0/0 .rodata @3892 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3892 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x80C8CC30, &lit_3892); -#pragma pop - -/* 80C8C8E4-80C8C994 000CC4 00B0+00 1/0 0/0 0/0 .text modeDownMove__11daUdFloor_cFv */ -void daUdFloor_c::modeDownMove() { - // NONMATCHING -} - -/* 80C8C994-80C8CA78 000D74 00E4+00 1/0 0/0 0/0 .text Draw__11daUdFloor_cFv */ -void daUdFloor_c::Draw() { - // NONMATCHING -} - -/* 80C8CA78-80C8CAB8 000E58 0040+00 1/0 0/0 0/0 .text Delete__11daUdFloor_cFv */ -void daUdFloor_c::Delete() { - // NONMATCHING -} - -/* 80C8CAB8-80C8CAE4 000E98 002C+00 1/0 0/0 0/0 .text daUdFloor_Draw__FP11daUdFloor_c */ -static void daUdFloor_Draw(daUdFloor_c* param_0) { - // NONMATCHING -} - -/* 80C8CAE4-80C8CB04 000EC4 0020+00 1/0 0/0 0/0 .text daUdFloor_Execute__FP11daUdFloor_c - */ -static void daUdFloor_Execute(daUdFloor_c* param_0) { - // NONMATCHING -} - -/* 80C8CB04-80C8CB24 000EE4 0020+00 1/0 0/0 0/0 .text daUdFloor_Delete__FP11daUdFloor_c - */ -static void daUdFloor_Delete(daUdFloor_c* param_0) { - // NONMATCHING -} - -/* 80C8CB24-80C8CB44 000F04 0020+00 1/0 0/0 0/0 .text daUdFloor_Create__FP10fopAc_ac_c */ -static void daUdFloor_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80C8CB44-80C8CBA0 000F24 005C+00 2/1 0/0 0/0 .text __dt__15daUdFloor_HIO_cFv */ -daUdFloor_HIO_c::~daUdFloor_HIO_c() { - // NONMATCHING -} - -/* 80C8CBA0-80C8CBDC 000F80 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_lv8UdFloor_cpp */ -void __sinit_d_a_obj_lv8UdFloor_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80C8CBA0, __sinit_d_a_obj_lv8UdFloor_cpp); -#pragma pop - -/* 80C8CC34-80C8CC34 000044 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_obj_lv9SwShutter.cpp b/src/d/actor/d_a_obj_lv9SwShutter.cpp index f49b74b2c3..0930239f17 100644 --- a/src/d/actor/d_a_obj_lv9SwShutter.cpp +++ b/src/d/actor/d_a_obj_lv9SwShutter.cpp @@ -6,146 +6,216 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_lv9SwShutter.h" -#include "dol2asm.h" +class daLv9SwShutter_HIO_c : public mDoHIO_entry_c { +public: + /* 80C8CEAC */ daLv9SwShutter_HIO_c(); + /* 80C8D730 */ virtual ~daLv9SwShutter_HIO_c() {} + void genMessage(JORMContext*); -// -// Forward References: -// - -extern "C" void __ct__20daLv9SwShutter_HIO_cFv(); -extern "C" void __dt__14mDoHIO_entry_cFv(); -extern "C" void setBaseMtx__16daLv9SwShutter_cFv(); -extern "C" void CreateHeap__16daLv9SwShutter_cFv(); -extern "C" void create__16daLv9SwShutter_cFv(); -extern "C" void Execute__16daLv9SwShutter_cFPPA3_A4_f(); -extern "C" void moveShutter__16daLv9SwShutter_cFv(); -extern "C" void init_modeWait__16daLv9SwShutter_cFv(); -extern "C" void modeWait__16daLv9SwShutter_cFv(); -extern "C" void init_modeOpen__16daLv9SwShutter_cFv(); -extern "C" void modeOpen__16daLv9SwShutter_cFv(); -extern "C" void init_modeClose__16daLv9SwShutter_cFv(); -extern "C" void modeClose__16daLv9SwShutter_cFv(); -extern "C" void Draw__16daLv9SwShutter_cFv(); -extern "C" void Delete__16daLv9SwShutter_cFv(); -extern "C" static void daLv9SwShutter_Draw__FP16daLv9SwShutter_c(); -extern "C" static void daLv9SwShutter_Execute__FP16daLv9SwShutter_c(); -extern "C" static void daLv9SwShutter_Delete__FP16daLv9SwShutter_c(); -extern "C" static void daLv9SwShutter_Create__FP10fopAc_ac_c(); -extern "C" void __dt__20daLv9SwShutter_HIO_cFv(); -extern "C" void __sinit_d_a_obj_lv9SwShutter_cpp(); -extern "C" extern char const* const d_a_obj_lv9SwShutter__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotS__FPA4_fsss(); -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData(); -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 isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool Create__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 settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80C8D7DC-80C8D7E0 000000 0004+00 3/3 0/0 0/0 .rodata @3627 */ -SECTION_RODATA static f32 const lit_3627 = 6.0f; -COMPILER_STRIP_GATE(0x80C8D7DC, &lit_3627); - -/* 80C8D7E0-80C8D7E4 000004 0004+00 0/1 0/0 0/0 .rodata @3628 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3628 = 30.0f; -COMPILER_STRIP_GATE(0x80C8D7E0, &lit_3628); -#pragma pop - -/* 80C8D7E4-80C8D7E8 000008 0004+00 0/1 0/0 0/0 .rodata @3629 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3629 = 15.0f; -COMPILER_STRIP_GATE(0x80C8D7E4, &lit_3629); -#pragma pop - -/* 80C8D82C-80C8D838 -00001 000C+00 0/1 0/0 0/0 .data @3722 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3722[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWait__16daLv9SwShutter_cFv, + /* 0x04 */ f32 open_speed; + /* 0x08 */ f32 close_speed; + /* 0x0C */ f32 close_accel; + /* 0x10 */ u8 vibration; }; -#pragma pop -/* 80C8D838-80C8D844 -00001 000C+00 0/1 0/0 0/0 .data @3723 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3723[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeOpen__16daLv9SwShutter_cFv, -}; -#pragma pop +/* 80C8CEAC-80C8CEF0 0000EC 0044+00 1/1 0/0 0/0 .text __ct__20daLv9SwShutter_HIO_cFv */ +daLv9SwShutter_HIO_c::daLv9SwShutter_HIO_c() { + open_speed = 6.0f; + close_speed = 30.0f; + close_accel = 15.0f; + vibration = 3; +} -/* 80C8D844-80C8D850 -00001 000C+00 0/1 0/0 0/0 .data @3724 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3724[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeClose__16daLv9SwShutter_cFv, -}; -#pragma pop +/* 80C8D91C-80C8D930 000014 0014+00 3/3 0/0 0/0 .bss l_HIO */ +static daLv9SwShutter_HIO_c l_HIO; -/* 80C8D850-80C8D874 000044 0024+00 0/1 0/0 0/0 .data mode_proc$3721 */ -#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 +/* 80C8CF38-80C8CFD4 000178 009C+00 2/2 0/0 0/0 .text setBaseMtx__16daLv9SwShutter_cFv */ +void daLv9SwShutter_c::setBaseMtx() { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mDoMtx_stack_c::transM(0.0f, field_0x5b0, 0.0f); + mpModel->setBaseScale(scale); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); +} + +/* 80C8CFD4-80C8D040 000214 006C+00 1/0 0/0 0/0 .text CreateHeap__16daLv9SwShutter_cFv */ +int daLv9SwShutter_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("L9SwShut", 4); + JUT_ASSERT(167, modelData != NULL); + + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } + + return 1; +} + +/* 80C8D040-80C8D168 000280 0128+00 1/1 0/0 0/0 .text create__16daLv9SwShutter_cFv */ +int daLv9SwShutter_c::create() { + fopAcM_ct(this, daLv9SwShutter_c); + + int phase_state = dComIfG_resLoad(&mPhase, "L9SwShut"); + if (phase_state == cPhs_COMPLEATE_e) { + if (MoveBGCreate("L9SwShut", 7, dBgS_MoveBGProc_TypicalRotY, 0x1300, NULL) == cPhs_ERROR_e) { + return cPhs_ERROR_e; + } + + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + fopAcM_setCullSizeBox2(this, mpModel->getModelData()); + + mSwbit = getSw(); + field_0x5b0 = 0.0f; + + mIsSwitch = fopAcM_isSwitch(this, mSwbit); + if (mIsSwitch) { + field_0x5b0 = 600.0f; + } + + init_modeWait(); + setBaseMtx(); + + #if DEBUG + l_HIO.entryHIO("スイッチシャッター(Lv9)"); + #endif + } + + return phase_state; +} + +/* 80C8D168-80C8D1B8 0003A8 0050+00 1/0 0/0 0/0 .text Execute__16daLv9SwShutter_cFPPA3_A4_f */ +int daLv9SwShutter_c::Execute(Mtx** param_0) { + moveShutter(); + *param_0 = &mpModel->getBaseTRMtx(); + setBaseMtx(); + return 1; +} + +/* 80C8D1B8-80C8D2BC 0003F8 0104+00 1/1 0/0 0/0 .text moveShutter__16daLv9SwShutter_cFv + */ +void daLv9SwShutter_c::moveShutter() { + static void (daLv9SwShutter_c::*mode_proc[])() = { + &daLv9SwShutter_c::modeWait, + &daLv9SwShutter_c::modeOpen, + &daLv9SwShutter_c::modeClose, + }; + + u8 prev_switch = mIsSwitch; + mIsSwitch = fopAcM_isSwitch(this, mSwbit); + if (mIsSwitch != prev_switch) { + if (mIsSwitch) { + init_modeOpen(); + } else { + init_modeClose(); + } + } + + (this->*mode_proc[mMode])(); +} + +/* 80C8D2BC-80C8D2C8 0004FC 000C+00 3/3 0/0 0/0 .text init_modeWait__16daLv9SwShutter_cFv + */ +void daLv9SwShutter_c::init_modeWait() { + mMode = 0; +} + +/* 80C8D2C8-80C8D2CC 000508 0004+00 1/0 0/0 0/0 .text modeWait__16daLv9SwShutter_cFv */ +void daLv9SwShutter_c::modeWait() {} + +/* 80C8D2CC-80C8D2D8 00050C 000C+00 1/1 0/0 0/0 .text init_modeOpen__16daLv9SwShutter_cFv + */ +void daLv9SwShutter_c::init_modeOpen() { + mMode = 1; +} + +/* 80C8D2D8-80C8D440 000518 0168+00 1/0 0/0 0/0 .text modeOpen__16daLv9SwShutter_cFv */ +void daLv9SwShutter_c::modeOpen() { + f32 temp_f31 = cLib_addCalc(&field_0x5b0, 600.0f, 0.1f, l_HIO.open_speed, 5.0f); + mDoMtx_stack_c::ZXYrotS(shape_angle.x, shape_angle.y, shape_angle.z); + cXyz sp8(0.0f, field_0x5b0, 0.0f); + mDoMtx_stack_c::multVec(&sp8, &sp8); + sp8 += current.pos; + + mDoAud_seStartLevel(Z2SE_OBJ_GATE_LV9_OP, &sp8, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + if (0.0f == temp_f31) { + mDoAud_seStart(Z2SE_OBJ_GATE_LV9_STOP, &sp8, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + init_modeWait(); + } +} + +/* 80C8D440-80C8D458 000680 0018+00 1/1 0/0 0/0 .text init_modeClose__16daLv9SwShutter_cFv */ +void daLv9SwShutter_c::init_modeClose() { + fopAcM_SetSpeedF(this, 0.0f); + mMode = 2; +} + +/* 80C8D458-80C8D5D0 000698 0178+00 1/0 0/0 0/0 .text modeClose__16daLv9SwShutter_cFv */ +void daLv9SwShutter_c::modeClose() { + cLib_chaseF(&speedF, l_HIO.close_speed, l_HIO.close_accel); + + f32 temp_f31 = cLib_addCalc(&field_0x5b0, 0.0f, 1.0f, fopAcM_GetSpeedF(this), 5.0f); + mDoMtx_stack_c::ZXYrotS(shape_angle.x, shape_angle.y, shape_angle.z); + cXyz sp8(0.0f, field_0x5b0, 0.0f); + mDoMtx_stack_c::multVec(&sp8, &sp8); + sp8 += current.pos; + + mDoAud_seStartLevel(Z2SE_OBJ_GATE_LV9_OP, &sp8, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + if (0.0f == temp_f31) { + mDoAud_seStart(Z2SE_OBJ_GATE_LV9_STOP, &sp8, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + init_modeWait(); + } +} + +/* 80C8D5D0-80C8D674 000810 00A4+00 1/0 0/0 0/0 .text Draw__16daLv9SwShutter_cFv */ +int daLv9SwShutter_c::Draw() { + g_env_light.settingTevStruct(16, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + return 1; +} + +/* 80C8D674-80C8D6A4 0008B4 0030+00 1/0 0/0 0/0 .text Delete__16daLv9SwShutter_cFv */ +int daLv9SwShutter_c::Delete() { + dComIfG_resDelete(&mPhase, "L9SwShut"); + #if DEBUG + l_HIO.removeHIO(); + #endif + return 1; +} + +/* 80C8D6A4-80C8D6D0 0008E4 002C+00 1/0 0/0 0/0 .text daLv9SwShutter_Draw__FP16daLv9SwShutter_c */ +static int daLv9SwShutter_Draw(daLv9SwShutter_c* i_this) { + return i_this->MoveBGDraw(); +} + +/* 80C8D6D0-80C8D6F0 000910 0020+00 1/0 0/0 0/0 .text daLv9SwShutter_Execute__FP16daLv9SwShutter_c + */ +static int daLv9SwShutter_Execute(daLv9SwShutter_c* i_this) { + return i_this->MoveBGExecute(); +} + +/* 80C8D6F0-80C8D710 000930 0020+00 1/0 0/0 0/0 .text daLv9SwShutter_Delete__FP16daLv9SwShutter_c + */ +static int daLv9SwShutter_Delete(daLv9SwShutter_c* i_this) { + return i_this->MoveBGDelete(); +} + +/* 80C8D710-80C8D730 000950 0020+00 1/0 0/0 0/0 .text daLv9SwShutter_Create__FP10fopAc_ac_c */ +static int daLv9SwShutter_Create(fopAc_ac_c* i_this) { + return ((daLv9SwShutter_c*)i_this)->create(); +} /* 80C8D874-80C8D894 -00001 0020+00 1/0 0/0 0/0 .data l_daLv9SwShutter_Method */ static actor_method_class l_daLv9SwShutter_Method = { - (process_method_func)daLv9SwShutter_Create__FP10fopAc_ac_c, - (process_method_func)daLv9SwShutter_Delete__FP16daLv9SwShutter_c, - (process_method_func)daLv9SwShutter_Execute__FP16daLv9SwShutter_c, - 0, - (process_method_func)daLv9SwShutter_Draw__FP16daLv9SwShutter_c, + (process_method_func)daLv9SwShutter_Create, + (process_method_func)daLv9SwShutter_Delete, + (process_method_func)daLv9SwShutter_Execute, + NULL, + (process_method_func)daLv9SwShutter_Draw, }; /* 80C8D894-80C8D8C4 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Lv9SwShutter */ @@ -165,210 +235,3 @@ extern actor_process_profile_definition g_profile_Obj_Lv9SwShutter = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80C8D8C4-80C8D8EC 0000B8 0028+00 1/1 0/0 0/0 .data __vt__16daLv9SwShutter_c */ -SECTION_DATA extern void* __vt__16daLv9SwShutter_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__16daLv9SwShutter_cFv, - (void*)Create__16dBgS_MoveBgActorFv, - (void*)Execute__16daLv9SwShutter_cFPPA3_A4_f, - (void*)Draw__16daLv9SwShutter_cFv, - (void*)Delete__16daLv9SwShutter_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - -/* 80C8D8EC-80C8D8F8 0000E0 000C+00 2/2 0/0 0/0 .data __vt__20daLv9SwShutter_HIO_c */ -SECTION_DATA extern void* __vt__20daLv9SwShutter_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__20daLv9SwShutter_HIO_cFv, -}; - -/* 80C8D8F8-80C8D904 0000EC 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */ -SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14mDoHIO_entry_cFv, -}; - -/* 80C8CEAC-80C8CEF0 0000EC 0044+00 1/1 0/0 0/0 .text __ct__20daLv9SwShutter_HIO_cFv */ -daLv9SwShutter_HIO_c::daLv9SwShutter_HIO_c() { - // NONMATCHING -} - -/* 80C8CEF0-80C8CF38 000130 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */ -// mDoHIO_entry_c::~mDoHIO_entry_c() { -extern "C" void __dt__14mDoHIO_entry_cFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8D7E8-80C8D7EC 00000C 0004+00 3/5 0/0 0/0 .rodata @3650 */ -SECTION_RODATA static u8 const lit_3650[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80C8D7E8, &lit_3650); - -/* 80C8CF38-80C8CFD4 000178 009C+00 2/2 0/0 0/0 .text setBaseMtx__16daLv9SwShutter_cFv */ -void daLv9SwShutter_c::setBaseMtx() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8D800-80C8D800 000024 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C8D800 = "L9SwShut"; -#pragma pop - -/* 80C8CFD4-80C8D040 000214 006C+00 1/0 0/0 0/0 .text CreateHeap__16daLv9SwShutter_cFv */ -void daLv9SwShutter_c::CreateHeap() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8D7EC-80C8D7F0 000010 0004+00 1/2 0/0 0/0 .rodata @3708 */ -SECTION_RODATA static f32 const lit_3708 = 600.0f; -COMPILER_STRIP_GATE(0x80C8D7EC, &lit_3708); - -/* 80C8D040-80C8D168 000280 0128+00 1/1 0/0 0/0 .text create__16daLv9SwShutter_cFv */ -void daLv9SwShutter_c::create() { - // NONMATCHING -} - -/* 80C8D168-80C8D1B8 0003A8 0050+00 1/0 0/0 0/0 .text Execute__16daLv9SwShutter_cFPPA3_A4_f */ -void daLv9SwShutter_c::Execute(Mtx** param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8D910-80C8D91C 000008 000C+00 1/1 0/0 0/0 .bss @3621 */ -static u8 lit_3621[12]; - -/* 80C8D91C-80C8D930 000014 0014+00 3/3 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[20]; - -/* 80C8D930-80C8D934 000028 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80C8D930[4]; - -/* 80C8D1B8-80C8D2BC 0003F8 0104+00 1/1 0/0 0/0 .text moveShutter__16daLv9SwShutter_cFv - */ -void daLv9SwShutter_c::moveShutter() { - // NONMATCHING -} - -/* 80C8D2BC-80C8D2C8 0004FC 000C+00 3/3 0/0 0/0 .text init_modeWait__16daLv9SwShutter_cFv - */ -void daLv9SwShutter_c::init_modeWait() { - // NONMATCHING -} - -/* 80C8D2C8-80C8D2CC 000508 0004+00 1/0 0/0 0/0 .text modeWait__16daLv9SwShutter_cFv */ -void daLv9SwShutter_c::modeWait() { - /* empty function */ -} - -/* 80C8D2CC-80C8D2D8 00050C 000C+00 1/1 0/0 0/0 .text init_modeOpen__16daLv9SwShutter_cFv - */ -void daLv9SwShutter_c::init_modeOpen() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8D7F0-80C8D7F4 000014 0004+00 0/1 0/0 0/0 .rodata @3782 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3782 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80C8D7F0, &lit_3782); -#pragma pop - -/* 80C8D7F4-80C8D7F8 000018 0004+00 0/2 0/0 0/0 .rodata @3783 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3783 = 5.0f; -COMPILER_STRIP_GATE(0x80C8D7F4, &lit_3783); -#pragma pop - -/* 80C8D7F8-80C8D7FC 00001C 0004+00 0/2 0/0 0/0 .rodata @3784 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3784 = 1.0f; -COMPILER_STRIP_GATE(0x80C8D7F8, &lit_3784); -#pragma pop - -/* 80C8D7FC-80C8D800 000020 0004+00 0/2 0/0 0/0 .rodata @3785 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3785 = -1.0f; -COMPILER_STRIP_GATE(0x80C8D7FC, &lit_3785); -#pragma pop - -/* 80C8D2D8-80C8D440 000518 0168+00 1/0 0/0 0/0 .text modeOpen__16daLv9SwShutter_cFv */ -void daLv9SwShutter_c::modeOpen() { - // NONMATCHING -} - -/* 80C8D440-80C8D458 000680 0018+00 1/1 0/0 0/0 .text init_modeClose__16daLv9SwShutter_cFv */ -void daLv9SwShutter_c::init_modeClose() { - // NONMATCHING -} - -/* 80C8D458-80C8D5D0 000698 0178+00 1/0 0/0 0/0 .text modeClose__16daLv9SwShutter_cFv */ -void daLv9SwShutter_c::modeClose() { - // NONMATCHING -} - -/* 80C8D5D0-80C8D674 000810 00A4+00 1/0 0/0 0/0 .text Draw__16daLv9SwShutter_cFv */ -void daLv9SwShutter_c::Draw() { - // NONMATCHING -} - -/* 80C8D674-80C8D6A4 0008B4 0030+00 1/0 0/0 0/0 .text Delete__16daLv9SwShutter_cFv */ -void daLv9SwShutter_c::Delete() { - // NONMATCHING -} - -/* 80C8D6A4-80C8D6D0 0008E4 002C+00 1/0 0/0 0/0 .text daLv9SwShutter_Draw__FP16daLv9SwShutter_c */ -static void daLv9SwShutter_Draw(daLv9SwShutter_c* param_0) { - // NONMATCHING -} - -/* 80C8D6D0-80C8D6F0 000910 0020+00 1/0 0/0 0/0 .text daLv9SwShutter_Execute__FP16daLv9SwShutter_c - */ -static void daLv9SwShutter_Execute(daLv9SwShutter_c* param_0) { - // NONMATCHING -} - -/* 80C8D6F0-80C8D710 000930 0020+00 1/0 0/0 0/0 .text daLv9SwShutter_Delete__FP16daLv9SwShutter_c - */ -static void daLv9SwShutter_Delete(daLv9SwShutter_c* param_0) { - // NONMATCHING -} - -/* 80C8D710-80C8D730 000950 0020+00 1/0 0/0 0/0 .text daLv9SwShutter_Create__FP10fopAc_ac_c */ -static void daLv9SwShutter_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80C8D730-80C8D78C 000970 005C+00 2/1 0/0 0/0 .text __dt__20daLv9SwShutter_HIO_cFv */ -daLv9SwShutter_HIO_c::~daLv9SwShutter_HIO_c() { - // NONMATCHING -} - -/* 80C8D78C-80C8D7C8 0009CC 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_lv9SwShutter_cpp */ -void __sinit_d_a_obj_lv9SwShutter_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80C8D78C, __sinit_d_a_obj_lv9SwShutter_cpp); -#pragma pop - -/* 80C8D800-80C8D800 000024 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index da9f8e243e..125bd63001 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -364,7 +364,7 @@ static void drawDepth2(view_class* param_0, view_port_class* param_1, int param_ if (atn_actor != NULL) { cXyz sp28 = atn_actor->eyePos; - if (fabsf(sp28.y - camera_p->lookat.eye.y) < 400.0f) { + if (std::fabs(sp28.y - camera_p->lookat.eye.y) < 400.0f) { sp28.y = camera_p->lookat.eye.y; }