From f6a1fa66b0ff769420b2e8594e0cf389dec152f9 Mon Sep 17 00:00:00 2001 From: CovenEsme <84377742+CovenEsme@users.noreply.github.com> Date: Thu, 13 Mar 2025 22:57:08 +0000 Subject: [PATCH] d_a_obj_fence_boko ok --- .../rels/d_a_obj_fence_bokoNP/splits.txt | 2 + .../rels/d_a_obj_fence_bokoNP/symbols.txt | 29 +++++++---- configure.py | 2 +- include/d/a/obj/d_a_obj_fence_boko.h | 11 ++++ include/d/col/bg/d_bg_w_base.h | 2 +- src/REL/d/a/obj/d_a_obj_dungeon_ship.cpp | 14 ++--- src/REL/d/a/obj/d_a_obj_fence_boko.cpp | 51 +++++++++++++++++++ src/REL/d/a/obj/d_a_obj_island_nusi.cpp | 3 +- src/REL/d/a/obj/d_a_obj_megami_island.cpp | 2 +- src/REL/d/a/obj/d_a_obj_utajima_lv2.cpp | 4 +- src/d/col/bg/d_bg_w_base.cpp | 2 +- src/d/d_room.cpp | 2 +- 12 files changed, 94 insertions(+), 30 deletions(-) diff --git a/config/SOUE01/rels/d_a_obj_fence_bokoNP/splits.txt b/config/SOUE01/rels/d_a_obj_fence_bokoNP/splits.txt index e05cb0f5..9137cffb 100644 --- a/config/SOUE01/rels/d_a_obj_fence_bokoNP/splits.txt +++ b/config/SOUE01/rels/d_a_obj_fence_bokoNP/splits.txt @@ -11,3 +11,5 @@ REL/executor.c: REL/d/a/obj/d_a_obj_fence_boko.cpp: .text start:0x00000070 end:0x00000494 + .rodata start:0x00000000 end:0x00000020 + .data start:0x00000000 end:0x000000E8 diff --git a/config/SOUE01/rels/d_a_obj_fence_bokoNP/symbols.txt b/config/SOUE01/rels/d_a_obj_fence_bokoNP/symbols.txt index 9d1dd095..991a3c53 100644 --- a/config/SOUE01/rels/d_a_obj_fence_bokoNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_fence_bokoNP/symbols.txt @@ -2,16 +2,25 @@ _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 dAcOfenceBoko_c_classInit__Fv = .text:0x00000070; // type:function size:0x64 -AcOfenceBoko__initModels = .text:0x000000E0; // type:function size:0x104 -AcOfenceBoko__init = .text:0x000001F0; // type:function size:0xF4 -AcOfenceBoko__destory = .text:0x000002F0; // type:function size:0x38 -AcOfenceBoko__update = .text:0x00000330; // type:function size:0xB4 -AcOfenceBoko__draw = .text:0x000003F0; // type:function size:0x28 +createHeap__15dAcOfenceBoko_cFv = .text:0x000000E0; // type:function size:0x104 +create__15dAcOfenceBoko_cFv = .text:0x000001F0; // type:function size:0xF4 +doDelete__15dAcOfenceBoko_cFv = .text:0x000002F0; // type:function size:0x38 +actorExecute__15dAcOfenceBoko_cFv = .text:0x00000330; // type:function size:0xB4 +draw__15dAcOfenceBoko_cFv = .text:0x000003F0; // type:function size:0x28 __dt__15dAcOfenceBoko_cFv = .text:0x00000420; // type:function size:0x74 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global -lbl_370_rodata_0 = .rodata:0x00000000; // type:object size:0x1C data:float -lbl_370_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -g_profile_OBJ_FENCE_BOKO = .data:0x00000000; // type:object size:0x44 -lbl_370_data_44 = .data:0x00000044; // type:object size:0x24 -AcOfenceBoko__vtable = .data:0x00000068; // type:object size:0x80 +lbl_370_rodata_00 = .rodata:0x00000000; // type:object size:0x4 scope:local data:float +lbl_370_rodata_04 = .rodata:0x00000004; // type:object size:0x4 scope:local data:float +lbl_370_rodata_08 = .rodata:0x00000008; // type:object size:0x4 scope:local data:float +lbl_370_rodata_0C = .rodata:0x0000000C; // type:object size:0x4 scope:local data:float +lbl_370_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_370_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_370_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_370_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +g_profile_OBJ_FENCE_BOKO = .data:0x00000000; // type:object size:0x10 +lbl_370_data_10 = .data:0x00000010; // type:object size:0xA scope:local data:string +lbl_370_data_1C = .data:0x0000001C; // type:object size:0x12 scope:local data:string +lbl_370_data_30 = .data:0x00000030; // type:object size:0x12 scope:local data:string +lbl_370_data_44 = .data:0x00000044; // type:object size:0x1D scope:local data:string +__vt__15dAcOfenceBoko_c = .data:0x00000068; // type:object size:0x80 diff --git a/configure.py b/configure.py index 16e3edfc..20b61625 100644 --- a/configure.py +++ b/configure.py @@ -1399,7 +1399,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(NonMatching, "d_a_obj_fence_boko", "REL/d/a/obj/d_a_obj_fence_boko.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"), Rel(NonMatching, "d_a_obj_fire", "REL/d/a/obj/d_a_obj_fire.cpp"), diff --git a/include/d/a/obj/d_a_obj_fence_boko.h b/include/d/a/obj/d_a_obj_fence_boko.h index a85d1c3d..d6297ce0 100644 --- a/include/d/a/obj/d_a_obj_fence_boko.h +++ b/include/d/a/obj/d_a_obj_fence_boko.h @@ -2,11 +2,22 @@ #define D_A_OBJ_FENCE_BOKO_H #include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_w.h" class dAcOfenceBoko_c : public dAcObjBase_c { public: dAcOfenceBoko_c() {} + virtual int create() override; + virtual int doDelete() override; + virtual int draw() override; + virtual bool createHeap() override; virtual ~dAcOfenceBoko_c() {} + virtual int actorExecute() override; + + nw4r::g3d::ResFile mResFile; + m3d::smdl_c mModel; + dBgW mCollision; + bool field_0x560; private: }; diff --git a/include/d/col/bg/d_bg_w_base.h b/include/d/col/bg/d_bg_w_base.h index af0eba52..73a0b3e6 100644 --- a/include/d/col/bg/d_bg_w_base.h +++ b/include/d/col/bg/d_bg_w_base.h @@ -60,7 +60,7 @@ public: dBgW_Base(); void ClrDBgWBase(); void CalcDiffShapeAngleY(s16); - bool InitMapStuff(mAllocator_c *pAllocator); + BOOL InitMapStuff(mAllocator_c *pAllocator); bool fn_8034AD70() const; bool fn_8034ADA0() const; void RegistBg(int id); diff --git a/src/REL/d/a/obj/d_a_obj_dungeon_ship.cpp b/src/REL/d/a/obj/d_a_obj_dungeon_ship.cpp index 1758197d..9fc94614 100644 --- a/src/REL/d/a/obj/d_a_obj_dungeon_ship.cpp +++ b/src/REL/d/a/obj/d_a_obj_dungeon_ship.cpp @@ -93,7 +93,7 @@ bool dAcODungeonShip_c::createHeap() { if (!SceneflagManager::sInstance->checkBoolFlag(roomid, (params >> 0x10) & 0xFF)) { goto ok; } else { - bool result = (BOOL)mBg.InitMapStuff(&heap_allocator); + bool result = mBg.InitMapStuff(&heap_allocator); if (result == false) { return false; } @@ -459,9 +459,7 @@ void dAcODungeonShip_c::fn_485_1720() { field_0x84C = tmp2; } -bool dAcODungeonShip_c::fn_485_1830(s32 pathSegmentIndex, s32 direction, s32 *out) { - -} +bool dAcODungeonShip_c::fn_485_1830(s32 pathSegmentIndex, s32 direction, s32 *out) {} u16 dAcODungeonShip_c::fn_485_1900() { s32 sign = mPath.CheckFlag(0x40000000) ? -1 : 1; @@ -501,13 +499,9 @@ void dAcODungeonShip_c::fn_485_1A70(mVec3_c *v) { v->set(0.0f, 0.0f, 0.0f); } -void dAcODungeonShip_c::fn_485_1A90() { - -} +void dAcODungeonShip_c::fn_485_1A90() {} -void dAcODungeonShip_c::fn_485_1BF0() { - -} +void dAcODungeonShip_c::fn_485_1BF0() {} void dAcODungeonShip_c::fn_485_1DF0() { const dAcPy_c *link = dAcPy_c::GetLink(); diff --git a/src/REL/d/a/obj/d_a_obj_fence_boko.cpp b/src/REL/d/a/obj/d_a_obj_fence_boko.cpp index d0f40eac..854552be 100644 --- a/src/REL/d/a/obj/d_a_obj_fence_boko.cpp +++ b/src/REL/d/a/obj/d_a_obj_fence_boko.cpp @@ -1,3 +1,54 @@ #include "d/a/obj/d_a_obj_fence_boko.h" +#include "d/col/bg/d_bg_s.h" +#include "d/col/bg/d_bg_s_gnd_chk.h" +#include "d/d_stage.h" + SPECIAL_ACTOR_PROFILE(OBJ_FENCE_BOKO, dAcOfenceBoko_c, fProfile::OBJ_FENCE_BOKO, 0x1D7, 0, 3); + +bool dAcOfenceBoko_c::createHeap() { + mResFile = nw4r::g3d::ResFile(getOarcResFile("FenceBoko")); + nw4r::g3d::ResMdl mdl = mResFile.GetResMdl("FenceBoko"); + TRY_CREATE(mModel.create(mdl, &heap_allocator, 0x120)); + cBgD_t *dzb = (cBgD_t *)getOarcFile("FenceBoko", "dzb/FenceBoko.dzb"); + PLC *plc = (PLC *)getOarcFile("FenceBoko", "dat/FenceBoko.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 dAcOfenceBoko_c::create() { + CREATE_ALLOCATOR(dAcOfenceBoko_c); + dBgS::GetInstance()->Regist(&mCollision, this); + dBgS::GetInstance()->RegistBg(&mCollision, this); + mCollision.mRoomId = dStage_c::GetInstance()->getCurrRoomId(); + roomid = mCollision.mRoomId; + mModel.setPriorityDraw(0x1C, 0x9); + boundingBox.Set(mVec3_c(-210.0f, -10.0f, -20.0f), mVec3_c(210.0f, 340.0f, 20.0f)); + mCullingDistance = 50000.0; + return SUCCEEDED; +} + +int dAcOfenceBoko_c::doDelete() { + dBgS::GetInstance()->UnRegist(&mCollision); + return SUCCEEDED; +} + +int dAcOfenceBoko_c::actorExecute() { + // Putting these in a single if fails to match ;-; + if (!field_0x560) { + if (dBgS_ObjGndChk::CheckPos(position + mVec3_c::Ey * 100.f)) { + mCollision.mRoomId = dBgS_ObjGndChk::GetRoomID(); + roomid = mCollision.mRoomId; + field_0x560 = true; + } + } + return SUCCEEDED; +} + +int dAcOfenceBoko_c::draw() { + drawModelType1(&mModel); + return SUCCEEDED; +} diff --git a/src/REL/d/a/obj/d_a_obj_island_nusi.cpp b/src/REL/d/a/obj/d_a_obj_island_nusi.cpp index 0177af16..d949abcb 100644 --- a/src/REL/d/a/obj/d_a_obj_island_nusi.cpp +++ b/src/REL/d/a/obj/d_a_obj_island_nusi.cpp @@ -43,8 +43,7 @@ bool dAcOislandNusi_c::createHeap() { } TRY_CREATE(!mBgW.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale)); mBgW.Lock(); - // TODO InitMapStuff bool vs BOOL - return (BOOL)mBgW.InitMapStuff(&heap_allocator); + return mBgW.InitMapStuff(&heap_allocator); } int dAcOislandNusi_c::create() { diff --git a/src/REL/d/a/obj/d_a_obj_megami_island.cpp b/src/REL/d/a/obj/d_a_obj_megami_island.cpp index 529e1f8a..79754a32 100644 --- a/src/REL/d/a/obj/d_a_obj_megami_island.cpp +++ b/src/REL/d/a/obj/d_a_obj_megami_island.cpp @@ -73,7 +73,7 @@ bool dAcOmegamiIsland_c::createHeap() { mBgW.OnFlag0x20(); } - return (BOOL)mBgW.InitMapStuff(&heap_allocator); + return mBgW.InitMapStuff(&heap_allocator); } int dAcOmegamiIsland_c::create() { diff --git a/src/REL/d/a/obj/d_a_obj_utajima_lv2.cpp b/src/REL/d/a/obj/d_a_obj_utajima_lv2.cpp index b8624e2e..b1479114 100644 --- a/src/REL/d/a/obj/d_a_obj_utajima_lv2.cpp +++ b/src/REL/d/a/obj/d_a_obj_utajima_lv2.cpp @@ -22,9 +22,7 @@ bool dAcOutajimaLv2_c::createHeap() { mMdl.setLocalMtx(mWorldMtx); TRY_CREATE(!mBgW.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale)); mBgW.Lock(); - // TODO InitMapStuff says it already returns a bool - BOOL ok = mBgW.InitMapStuff(&heap_allocator); - return ok; + return mBgW.InitMapStuff(&heap_allocator); } int dAcOutajimaLv2_c::create() { diff --git a/src/d/col/bg/d_bg_w_base.cpp b/src/d/col/bg/d_bg_w_base.cpp index 0f447459..664d361a 100644 --- a/src/d/col/bg/d_bg_w_base.cpp +++ b/src/d/col/bg/d_bg_w_base.cpp @@ -61,7 +61,7 @@ void dBgW_Base::SetOldShapeAngleY(s16 oldShapeAngleY) { mOldShapeAngleY = oldShapeAngleY; } -bool dBgW_Base::InitMapStuff(mAllocator_c *pAllocator) { +BOOL dBgW_Base::InitMapStuff(mAllocator_c *pAllocator) { ClearMap(); return UpdateDraw(pAllocator) != false; } diff --git a/src/d/d_room.cpp b/src/d/d_room.cpp index c6e6ffeb..56e623f8 100644 --- a/src/d/d_room.cpp +++ b/src/d/d_room.cpp @@ -248,7 +248,7 @@ bool dRoom_c::setupBg() { bg->Set(kcl, plc); bg->SetRoomId(roomid); bg->SetPriority(dBgW_Base::PRIORITY_0); - bool ok = (BOOL)bg->InitMapStuff(&mAllocator); + bool ok = bg->InitMapStuff(&mAllocator); if (!ok) { return true; }