From f813a28e8a138bcd7230a863de761cb94825ab96 Mon Sep 17 00:00:00 2001 From: oga-sven Date: Sun, 27 Sep 2026 11:52:48 +0200 Subject: [PATCH] d_a_obj_msdan2 OK --- configure.py | 2 +- include/d/actor/d_a_obj_msdan2.h | 18 +++++++++---- src/d/actor/d_a_obj_msdan2.cpp | 45 +++++++++++++++++++++++++++++--- 3 files changed, 56 insertions(+), 9 deletions(-) diff --git a/configure.py b/configure.py index 098b3e1b4..d81cc7890 100755 --- a/configure.py +++ b/configure.py @@ -1778,7 +1778,7 @@ config.libs = [ ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_mknjd"), ActorRel(Matching, "d_a_obj_mmrr"), ActorRel(NonMatching, "d_a_obj_msdan"), - ActorRel(NonMatching, "d_a_obj_msdan2"), + ActorRel(MatchingFor("GZLE01"), "d_a_obj_msdan2"), ActorRel(Matching, "d_a_obj_msdan_sub"), ActorRel(NonMatching, "d_a_obj_msdan_sub2"), ActorRel(Matching, "d_a_obj_mtest"), diff --git a/include/d/actor/d_a_obj_msdan2.h b/include/d/actor/d_a_obj_msdan2.h index 131c27f3c..e378a4513 100644 --- a/include/d/actor/d_a_obj_msdan2.h +++ b/include/d/actor/d_a_obj_msdan2.h @@ -2,19 +2,27 @@ #define D_A_OBJ_MSDAN2_H #include "f_op/f_op_actor.h" +#include "d/d_a_obj.h" namespace daObjMsdan2 { class Act_c : public fopAc_ac_c { public: - void prm_get_swSave() const {} - + enum Prm_e { + PRM_SWSAVE_W = 0x08, + PRM_SWSAVE_S = 0x00, + }; + + int prm_get_swSave() const { return daObj::PrmAbstract(this, PRM_SWSAVE_W, PRM_SWSAVE_S); } + cPhs_State Mthd_Create(); BOOL Mthd_Execute(); BOOL Mthd_Delete(); - + public: - /* Place member variables here */ - }; + /* 0x290 */ u8 field_0x290[0x298 - 0x290]; + /* 0x298 */ s16 mEventIdx; + /* 0x29C */ int mMode; + }; // Size: 0x2A0 }; #endif /* D_A_OBJ_MSDAN2_H */ diff --git a/src/d/actor/d_a_obj_msdan2.cpp b/src/d/actor/d_a_obj_msdan2.cpp index d43bf61c7..064d5186a 100644 --- a/src/d/actor/d_a_obj_msdan2.cpp +++ b/src/d/actor/d_a_obj_msdan2.cpp @@ -8,17 +8,56 @@ /* 00000078-0000024C .text Mthd_Create__Q211daObjMsdan25Act_cFv */ cPhs_State daObjMsdan2::Act_c::Mthd_Create() { - /* Nonmatching */ + fopAcM_SetupActor(this, daObjMsdan2::Act_c); + + cXyz pos = current.pos; + csXyz angle = current.angle; + angle.y += 0x8000; + pos.y += 400.0f; + for (int i = 0; i < 16; i++) { + pos.x += 50.0f * cM_ssin(current.angle.y); + pos.z += 50.0f * cM_scos(current.angle.y); + fopAcM_create(fpcNm_Obj_MsdanSub2_e, (i << 8) + prm_get_swSave(), &pos, current.roomNo, &angle); + } + + mEventIdx = dComIfGp_evmng_getEventIdx("Msdan2"); + if (fopAcM_isSwitch(this, prm_get_swSave())) { + mMode = 3; + } else { + mMode = 0; + } + return cPhs_COMPLEATE_e; } /* 0000024C-00000344 .text Mthd_Execute__Q211daObjMsdan25Act_cFv */ BOOL daObjMsdan2::Act_c::Mthd_Execute() { - /* Nonmatching */ + switch (mMode) { + case 0: + if (fopAcM_isSwitch(this, prm_get_swSave())) { + fopAcM_orderOtherEventId(this, mEventIdx); + mMode = 1; + } + break; + case 1: + if (eventInfo.checkCommandDemoAccrpt()) { + mMode = 2; + } + break; + case 2: + if (dComIfGp_evmng_endCheck(mEventIdx)) { + dComIfGp_event_reset(); + mMode = 3; + } + break; + case 3: + break; + } + return TRUE; } /* 00000344-0000034C .text Mthd_Delete__Q211daObjMsdan25Act_cFv */ BOOL daObjMsdan2::Act_c::Mthd_Delete() { - /* Nonmatching */ + return TRUE; } namespace daObjMsdan2 {