From 0d3fef9d3dba4a22db73d1974b4b9ca749944429 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 30 Jul 2025 01:15:52 -0400 Subject: [PATCH] obj_vmc OK for demo --- configure.py | 4 +-- include/d/actor/d_a_obj_vmc.h | 3 ++ src/d/actor/d_a_obj_vmc.cpp | 53 +++++++++++++++++++++++++++++++++-- 3 files changed, 56 insertions(+), 4 deletions(-) diff --git a/configure.py b/configure.py index 341e81819..4112d755b 100755 --- a/configure.py +++ b/configure.py @@ -1719,8 +1719,8 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_try"), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_usovmc"), ActorRel(Matching, "d_a_obj_vfan", extra_cflags=[ '-pragma "nosyminline on"']), - ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_vgnfd", extra_cflags=[ '-pragma "nosyminline on"']), - ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_vmc", extra_cflags=["-sym off"]), + ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_vgnfd", extra_cflags=['-pragma "nosyminline on"']), + ActorRel(Matching, "d_a_obj_vmc", extra_cflags=["-sym off"]), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_vmsdz"), ActorRel(Matching, "d_a_obj_vmsms"), ActorRel(NonMatching, "d_a_obj_volcano"), diff --git a/include/d/actor/d_a_obj_vmc.h b/include/d/actor/d_a_obj_vmc.h index 0387f1795..aad2ae218 100644 --- a/include/d/actor/d_a_obj_vmc.h +++ b/include/d/actor/d_a_obj_vmc.h @@ -51,6 +51,9 @@ namespace daObjVmc { /* 0x434 */ Mtx mMtxBase; /* 0x434 */ Mtx mMtxTree; /* 0x494 */ dPa_smokeEcallBack mSmoke; +#if VERSION == VERSION_DEMO + /* 0x4B4 */ JPABaseEmitter* m4B4_demo; +#endif /* 0x4B4 */ u8 mLinkRangeCheck; /* 0x4B8 */ s32 mState; /* 0x4BC */ s32 mTimer; diff --git a/src/d/actor/d_a_obj_vmc.cpp b/src/d/actor/d_a_obj_vmc.cpp index bb04b7d81..f67eae7dc 100644 --- a/src/d/actor/d_a_obj_vmc.cpp +++ b/src/d/actor/d_a_obj_vmc.cpp @@ -46,6 +46,38 @@ static dCcD_SrcCyl cyl_src_base = { }, }; +#if VERSION == VERSION_DEMO +static dCcD_SrcCyl cyl_src_tree = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ ~(AT_TYPE_BOOMERANG | AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT), + /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e | cCcD_TgSPrm_IsPlayer_e | cCcD_TgSPrm_IsOther_e, + /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_VsEnemy_e | cCcD_CoSPrm_IsOther_e, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGCylS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 50.0f, + /* Height */ 300.0f, + }, +}; +#endif + const char daObjVmc::Act_c::M_arcname[4] = "Vmc"; /* 00000078-0000009C .text solidHeapCB__Q28daObjVmc5Act_cFP10fopAc_ac_c */ @@ -118,6 +150,9 @@ void daObjVmc::Act_c::CreateInit() { mHasTreeBg = true; mBckAnmGrow.setFrame(mBckAnmGrow.getEndFrame()); +#if VERSION == VERSION_DEMO + mCyl.Set(cyl_src_tree); +#endif mState = STATE_TREE_MAIN; mHasTree = true; } else { @@ -127,6 +162,9 @@ void daObjVmc::Act_c::CreateInit() { init_mtx(); mHookshotAnim = false; +#if VERSION == VERSION_DEMO + m4B4_demo = NULL; +#endif mSmoke.setRateOff(0); attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xA7; attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0xA7; @@ -162,7 +200,7 @@ bool daObjVmc::Act_c::_delete() { if (mHasTreeBg == 1) dComIfG_Bgsp()->Release(mpBgTree); mSmoke.end(); - dComIfG_resDelete(&mPhs, M_arcname); + dComIfG_resDeleteDemo(&mPhs, M_arcname); return true; } @@ -187,7 +225,13 @@ void daObjVmc::Act_c::init_mtx() { /* 00000B1C-00000BD0 .text daObjVmc_base_main__Q28daObjVmc5Act_cFv */ void daObjVmc::Act_c::daObjVmc_base_main() { if (mHasTree == 1) { +#if VERSION == VERSION_DEMO + m4B4_demo = +#endif dComIfGp_particle_setToon(dPa_name::ID_SCENE_A1BC, ¤t.pos, ¤t.angle, NULL, 0xFF, &mSmoke, fopAcM_GetRoomNo(this)); +#if VERSION == VERSION_DEMO + mCyl.Set(cyl_src_tree); +#endif cLib_offBit(attention_info.flags, fopAc_Attn_UNK10000000_e); mState = STATE_TREE_DEMO_WAIT; shape_angle.y = fopAcM_searchActorAngleY(this, dComIfGp_getPlayer(0)) + 0x1800; @@ -225,7 +269,7 @@ void daObjVmc::Act_c::daObjVmc_tree_main() { if (!mHookshotAnim) { if (mCyl.ChkCoHit()) { J3DAnmTransform* bck_wh = (J3DAnmTransform*)dComIfG_getObjectRes(M_arcname, VMC_BCK_VMCWH); - JUT_ASSERT(0x1ad, bck_wh != NULL); + JUT_ASSERT(DEMO_SELECT(430, 429), bck_wh != NULL); mBckAnmHookshot.init(mModelTree->getModelData(), bck_wh, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, true); mHookshotAnim = true; } @@ -251,8 +295,13 @@ void daObjVmc::Act_c::daObjVmc_tree_main() { bool daObjVmc::Act_c::_execute() { /* Nonmatching */ mCyl.SetC(current.pos); +#if VERSION > VERSION_DEMO if (mState == STATE_BASE_MAIN) +#endif + { dComIfG_Ccsp()->Set(&mCyl); + } + switch (mState) { case STATE_BASE_MAIN: daObjVmc_base_main();