From d993bb66080c7ff0f5ba674a53383743db8da9c5 Mon Sep 17 00:00:00 2001 From: Swekka Date: Sun, 1 Jun 2025 19:39:59 +0200 Subject: [PATCH] d_a_obj_mole_cover OK --- .../rels/d_a_obj_mole_coverNP/symbols.txt | 16 +++---- include/d/a/obj/d_a_obj_mole_cover.h | 12 +++++ src/REL/d/a/obj/d_a_obj_mole_cover.cpp | 48 +++++++++++++++++++ 3 files changed, 68 insertions(+), 8 deletions(-) diff --git a/config/SOUE01/rels/d_a_obj_mole_coverNP/symbols.txt b/config/SOUE01/rels/d_a_obj_mole_coverNP/symbols.txt index 5cf2e2ab..471f13ea 100644 --- a/config/SOUE01/rels/d_a_obj_mole_coverNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_mole_coverNP/symbols.txt @@ -2,15 +2,15 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global _epilog = .text:0x00000030; // type:function size:0x2C scope:global _unresolved = .text:0x00000060; // type:function size:0x4 scope:global dAcOmoleCover_c_classInit__Fv = .text:0x00000070; // type:function size:0x64 -AcOmoleCover__initModels = .text:0x000000E0; // type:function size:0x110 -AcOmoleCover__init = .text:0x000001F0; // type:function size:0xD0 -fn_424_2C0 = .text:0x000002C0; // type:function size:0x8 -fn_424_2D0 = .text:0x000002D0; // type:function size:0x8 -AcOmoleCover__draw = .text:0x000002E0; // type:function size:0x28 +createHeap__15dAcOmoleCover_cFv = .text:0x000000E0; // type:function size:0x110 +create__15dAcOmoleCover_cFv = .text:0x000001F0; // type:function size:0xD0 +doDelete__15dAcOmoleCover_cFv = .text:0x000002C0; // type:function size:0x8 +actorExecute__15dAcOmoleCover_cFv = .text:0x000002D0; // type:function size:0x8 +draw__15dAcOmoleCover_cFv = .text:0x000002E0; // type:function size:0x28 __dt__15dAcOmoleCover_cFv = .text:0x00000310; // type:function size:0x74 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global -lbl_424_rodata_0 = .rodata:0x00000000; // type:object size:0x1C data:float +lbl_424_rodata_0 = .rodata:0x00000000; // type:object size:0x1C scope:local data:float g_profile_OBJ_MOLE_COVER = .data:0x00000000; // type:object size:0x6C -lbl_424_data_6C = .data:0x0000006C; // type:object size:0x24 -AcOmoleCover__vtable = .data:0x00000090; // type:object size:0x80 +lbl_424_data_6C = .data:0x0000006C; // type:object size:0x24 scope:local +__vt__15dAcOmoleCover_c = .data:0x00000090; // type:object size:0x80 diff --git a/include/d/a/obj/d_a_obj_mole_cover.h b/include/d/a/obj/d_a_obj_mole_cover.h index a03a8323..3c1216d8 100644 --- a/include/d/a/obj/d_a_obj_mole_cover.h +++ b/include/d/a/obj/d_a_obj_mole_cover.h @@ -2,13 +2,25 @@ #define D_A_OBJ_MOLE_COVER_H #include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_w.h" +#include "m/m3d/m_smdl.h" +#include "nw4r/g3d/res/g3d_resfile.h" class dAcOmoleCover_c : public dAcObjBase_c { public: dAcOmoleCover_c() {} virtual ~dAcOmoleCover_c() {} + virtual bool createHeap() override; + virtual int create() override; + virtual int doDelete() override; + virtual int actorExecute() override; + virtual int draw() override; + private: + /* 0x330 */ nw4r::g3d::ResFile mResFile; + /* 0x334 */ m3d::smdl_c mMdl; + /* 0x350 */ dBgW mBgW; }; #endif diff --git a/src/REL/d/a/obj/d_a_obj_mole_cover.cpp b/src/REL/d/a/obj/d_a_obj_mole_cover.cpp index 6baa0ca1..adfea836 100644 --- a/src/REL/d/a/obj/d_a_obj_mole_cover.cpp +++ b/src/REL/d/a/obj/d_a_obj_mole_cover.cpp @@ -1,3 +1,51 @@ #include "d/a/obj/d_a_obj_mole_cover.h" +#include "common.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_s.h" +#include "d/d_stage.h" +#include "f/f_base.h" +#include "m/m_vec.h" +#include "nw4r/g3d/res/g3d_resfile.h" +#include "nw4r/g3d/res/g3d_resmdl.h" +#include "toBeSorted/arc_managers/current_stage_arc_manager.h" + SPECIAL_ACTOR_PROFILE(OBJ_MOLE_COVER, dAcOmoleCover_c, fProfile::OBJ_MOLE_COVER, 0x20F, 0, 3); + +bool dAcOmoleCover_c::createHeap() { + void *data = CurrentStageArcManager::GetInstance()->getData("g3d/stage.brres"); + mResFile = nw4r::g3d::ResFile(data); + dStage_c::bindStageResToFile(&mResFile); + dStage_c::bindSkyCmnToResFile(&mResFile); + nw4r::g3d::ResMdl mdl = mResFile.GetResMdl("StageF000MallCover"); + TRY_CREATE(mMdl.create(mdl, &heap_allocator, 0x120, 1, nullptr)); + void *dzb = CurrentStageArcManager::GetInstance()->getData("dzb/StageF000MallCover.dzb"); + void *plc = CurrentStageArcManager::GetInstance()->getData("dat/StageF000MallCover.plc"); + updateMatrix(); + mMdl.setLocalMtx(mWorldMtx); + TRY_CREATE(!mBgW.Set((cBgD_t *)dzb, (PLC *)plc, 1, &mWorldMtx, &mScale)); + mBgW.Lock(); + return true; +} + +int dAcOmoleCover_c::create() { + CREATE_ALLOCATOR(dAcOmoleCover_c); + dBgS::GetInstance()->Regist(&mBgW, this); + mMdl.setPriorityDraw(0x1C, 9); + boundingBox.Set(mVec3_c(-1900.0f, 1100.0f, -5500.0f), mVec3_c(100.0f, 1700.0f, -1800.0f)); + mCullingDistance = FLOAT_MAX; + return SUCCEEDED; +} + +int dAcOmoleCover_c::doDelete() { + return SUCCEEDED; +} + +int dAcOmoleCover_c::actorExecute() { + return SUCCEEDED; +} + +int dAcOmoleCover_c::draw() { + drawModelType1(&mMdl); + return SUCCEEDED; +}