From c2a3844d6a8d57ccf098a2d222862a3d6a9fdb04 Mon Sep 17 00:00:00 2001 From: CovenEsme <84377742+CovenEsme@users.noreply.github.com> Date: Thu, 13 Mar 2025 23:17:06 +0000 Subject: [PATCH] d_a_obj_fence_boko2 ok --- .../rels/d_a_obj_fence_boko2NP/splits.txt | 2 + .../rels/d_a_obj_fence_boko2NP/symbols.txt | 19 +++++---- configure.py | 2 +- include/d/a/obj/d_a_obj_fence_boko2.h | 10 +++++ src/REL/d/a/obj/d_a_obj_fence_boko2.cpp | 39 +++++++++++++++++++ 5 files changed, 63 insertions(+), 9 deletions(-) diff --git a/config/SOUE01/rels/d_a_obj_fence_boko2NP/splits.txt b/config/SOUE01/rels/d_a_obj_fence_boko2NP/splits.txt index a4b4cf0e..242fdec5 100644 --- a/config/SOUE01/rels/d_a_obj_fence_boko2NP/splits.txt +++ b/config/SOUE01/rels/d_a_obj_fence_boko2NP/splits.txt @@ -11,3 +11,5 @@ REL/executor.c: REL/d/a/obj/d_a_obj_fence_boko2.cpp: .text start:0x00000070 end:0x000003C4 + .rodata start:0x00000000 end:0x0000001C + .data start:0x00000000 end:0x000000E8 diff --git a/config/SOUE01/rels/d_a_obj_fence_boko2NP/symbols.txt b/config/SOUE01/rels/d_a_obj_fence_boko2NP/symbols.txt index 97926aa3..e280cd7d 100644 --- a/config/SOUE01/rels/d_a_obj_fence_boko2NP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_fence_boko2NP/symbols.txt @@ -2,15 +2,18 @@ _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 dAcOfenceBoko2_c_classInit__Fv = .text:0x00000070; // type:function size:0x64 -AcOfenceBoko2__initModels = .text:0x000000E0; // type:function size:0x104 -AcOfenceBoko2__init = .text:0x000001F0; // type:function size:0xE0 -AcOfenceBoko2__destroy = .text:0x000002D0; // type:function size:0x38 -fn_371_310 = .text:0x00000310; // type:function size:0x8 -AcOfenceBoko2__draw = .text:0x00000320; // type:function size:0x28 +createHeap__16dAcOfenceBoko2_cFv = .text:0x000000E0; // type:function size:0x104 +create__16dAcOfenceBoko2_cFv = .text:0x000001F0; // type:function size:0xE0 +doDelete__16dAcOfenceBoko2_cFv = .text:0x000002D0; // type:function size:0x38 +actorExecute__16dAcOfenceBoko2_cFv = .text:0x00000310; // type:function size:0x8 +draw__16dAcOfenceBoko2_cFv = .text:0x00000320; // type:function size:0x28 __dt__16dAcOfenceBoko2_cFv = .text:0x00000350; // type:function size:0x74 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global lbl_371_rodata_0 = .rodata:0x00000000; // type:object size:0x1C data:float -g_profile_OBJ_FENCE_BOKO2 = .data:0x00000000; // type:object size:0x44 -lbl_371_data_44 = .data:0x00000044; // type:object size:0x24 -AcOfenceBoko2__vtable = .data:0x00000068; // type:object size:0x80 +g_profile_OBJ_FENCE_BOKO2 = .data:0x00000000; // type:object size:0x10 +lbl_370_data_10 = .data:0x00000010; // type:object size:0xB scope:local data:string +lbl_370_data_1C = .data:0x0000001C; // type:object size:0x13 scope:local data:string +lbl_370_data_30 = .data:0x00000030; // type:object size:0x13 scope:local data:string +lbl_370_data_44 = .data:0x00000044; // type:object size:0x1E scope:local data:string +__vt__16dAcOfenceBoko2_c = .data:0x00000068; // type:object size:0x80 diff --git a/configure.py b/configure.py index 20b61625..03c24656 100644 --- a/configure.py +++ b/configure.py @@ -1398,7 +1398,7 @@ config.libs = [ ), Rel(NonMatching, "d_a_obj_farmland", "REL/d/a/obj/d_a_obj_farmland.cpp"), Rel(NonMatching, "d_a_obj_fence", "REL/d/a/obj/d_a_obj_fence.cpp"), - Rel(NonMatching, "d_a_obj_fence_boko2", "REL/d/a/obj/d_a_obj_fence_boko2.cpp"), + Rel(Matching, "d_a_obj_fence_boko2", "REL/d/a/obj/d_a_obj_fence_boko2.cpp"), Rel(Matching, "d_a_obj_fence_boko", "REL/d/a/obj/d_a_obj_fence_boko.cpp"), Rel(NonMatching, "d_a_obj_fence_iron", "REL/d/a/obj/d_a_obj_fence_iron.cpp"), Rel(NonMatching, "d_a_obj_fence_konsai", "REL/d/a/obj/d_a_obj_fence_konsai.cpp"), diff --git a/include/d/a/obj/d_a_obj_fence_boko2.h b/include/d/a/obj/d_a_obj_fence_boko2.h index f0086c6b..8108c2c0 100644 --- a/include/d/a/obj/d_a_obj_fence_boko2.h +++ b/include/d/a/obj/d_a_obj_fence_boko2.h @@ -2,11 +2,21 @@ #define D_A_OBJ_FENCE_BOKO2_H #include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_w.h" class dAcOfenceBoko2_c : public dAcObjBase_c { public: dAcOfenceBoko2_c() {} + virtual int create() override; + virtual int doDelete() override; + virtual int draw() override; + virtual bool createHeap() override; virtual ~dAcOfenceBoko2_c() {} + virtual int actorExecute() override; + + nw4r::g3d::ResFile mResFile; + m3d::smdl_c mModel; + dBgW mCollision; private: }; diff --git a/src/REL/d/a/obj/d_a_obj_fence_boko2.cpp b/src/REL/d/a/obj/d_a_obj_fence_boko2.cpp index 572874f1..8792f07a 100644 --- a/src/REL/d/a/obj/d_a_obj_fence_boko2.cpp +++ b/src/REL/d/a/obj/d_a_obj_fence_boko2.cpp @@ -1,3 +1,42 @@ #include "d/a/obj/d_a_obj_fence_boko2.h" +#include "d/col/bg/d_bg_s.h" + SPECIAL_ACTOR_PROFILE(OBJ_FENCE_BOKO2, dAcOfenceBoko2_c, fProfile::OBJ_FENCE_BOKO2, 0x1D8, 0, 3); + +bool dAcOfenceBoko2_c::createHeap() { + mResFile = nw4r::g3d::ResFile(getOarcResFile("FenceBoko2")); + nw4r::g3d::ResMdl mdl = mResFile.GetResMdl("FenceBoko2"); + TRY_CREATE(mModel.create(mdl, &heap_allocator, 0x120)); + cBgD_t *dzb = (cBgD_t *)getOarcFile("FenceBoko2", "dzb/FenceBoko2.dzb"); + PLC *plc = (PLC *)getOarcFile("FenceBoko2", "dat/FenceBoko2.plc"); + updateMatrix(); + mModel.setLocalMtx(mWorldMtx); + TRY_CREATE(!mCollision.Set(dzb, plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale)); + mCollision.Lock(); + return mCollision.InitMapStuff(&heap_allocator); +} + +int dAcOfenceBoko2_c::create() { + CREATE_ALLOCATOR(dAcOfenceBoko2_c); + dBgS::GetInstance()->Regist(&mCollision, this); + dBgS::GetInstance()->RegistBg(&mCollision, this); + mModel.setPriorityDraw(0x1C, 0x9); + boundingBox.Set(mVec3_c(-160.0f, -40.0f, -70.0f), mVec3_c(180.0f, 300.0f, 60.0f)); + mCullingDistance = 50000.0; + return SUCCEEDED; +} + +int dAcOfenceBoko2_c::doDelete() { + dBgS::GetInstance()->UnRegist(&mCollision); + return SUCCEEDED; +} + +int dAcOfenceBoko2_c::actorExecute() { + return SUCCEEDED; +} + +int dAcOfenceBoko2_c::draw() { + drawModelType1(&mModel); + return SUCCEEDED; +}