diff --git a/config/SOUE01/rels/d_a_obj_shrine_afterNP/splits.txt b/config/SOUE01/rels/d_a_obj_shrine_afterNP/splits.txt index 4ce39af5..fe3080ea 100644 --- a/config/SOUE01/rels/d_a_obj_shrine_afterNP/splits.txt +++ b/config/SOUE01/rels/d_a_obj_shrine_afterNP/splits.txt @@ -11,3 +11,5 @@ REL/executor.c: REL/d/a/obj/d_a_obj_shrine_after.cpp: .text start:0x00000070 end:0x000002D8 + .rodata start:0x00000000 end:0x00000018 + .data start:0x00000000 end:0x000000C0 diff --git a/config/SOUE01/rels/d_a_obj_shrine_afterNP/symbols.txt b/config/SOUE01/rels/d_a_obj_shrine_afterNP/symbols.txt index 50e7ae0c..d89092a6 100644 --- a/config/SOUE01/rels/d_a_obj_shrine_afterNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_shrine_afterNP/symbols.txt @@ -2,11 +2,11 @@ _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 dAcOshrineAfter_c_classInit__Fv = .text:0x00000070; // type:function size:0x5C -AcOshrineAfter__initModels = .text:0x000000D0; // type:function size:0x80 -AcOshrineAfter__init = .text:0x00000150; // type:function size:0xD0 -fn_387_220 = .text:0x00000220; // type:function size:0x8 -fn_387_230 = .text:0x00000230; // type:function size:0x8 -AcOshrineAfter__draw = .text:0x00000240; // type:function size:0x28 +createHeap__17dAcOshrineAfter_cFv = .text:0x000000D0; // type:function size:0x80 +create__17dAcOshrineAfter_cFv = .text:0x00000150; // type:function size:0xD0 +doDelete__17dAcOshrineAfter_cFv = .text:0x00000220; // type:function size:0x8 +actorExecute__17dAcOshrineAfter_cFv = .text:0x00000230; // type:function size:0x8 +draw__17dAcOshrineAfter_cFv = .text:0x00000240; // type:function size:0x28 __dt__17dAcOshrineAfter_cFv = .text:0x00000270; // type:function size:0x68 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global @@ -14,4 +14,4 @@ lbl_387_rodata_0 = .rodata:0x00000000; // type:object size:0x18 data:float g_profile_OBJ_SHRINE_AFTER = .data:0x00000000; // type:object size:0x10 lbl_387_data_10 = .data:0x00000010; // type:object size:0x10 lbl_387_data_20 = .data:0x00000020; // type:object size:0x20 -AcOshrineAfter__vtable = .data:0x00000040; // type:object size:0x80 +__vt__17dAcOshrineAfter_c = .data:0x00000040; // type:object size:0x80 diff --git a/config/SOUE01/rels/d_a_obj_shrine_bef_insideNP/splits.txt b/config/SOUE01/rels/d_a_obj_shrine_bef_insideNP/splits.txt index 09b356e9..9a76d3d4 100644 --- a/config/SOUE01/rels/d_a_obj_shrine_bef_insideNP/splits.txt +++ b/config/SOUE01/rels/d_a_obj_shrine_bef_insideNP/splits.txt @@ -11,3 +11,5 @@ REL/executor.c: REL/d/a/obj/d_a_obj_shrine_bef_inside.cpp: .text start:0x00000070 end:0x00000400 + .rodata start:0x00000000 end:0x00000020 + .data start:0x00000000 end:0x00000118 diff --git a/config/SOUE01/rels/d_a_obj_shrine_bef_insideNP/symbols.txt b/config/SOUE01/rels/d_a_obj_shrine_bef_insideNP/symbols.txt index a9b25a62..e9f054fc 100644 --- a/config/SOUE01/rels/d_a_obj_shrine_bef_insideNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_shrine_bef_insideNP/symbols.txt @@ -2,17 +2,26 @@ _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 dAcOshrineBefInside_c_classInit__Fv = .text:0x00000070; // type:function size:0x7C -AcOshrineBefInside__initModels = .text:0x000000F0; // type:function size:0x130 -AcOshrineBefInside__init = .text:0x00000220; // type:function size:0xD8 -fn_418_300 = .text:0x00000300; // type:function size:0x8 -fn_418_310 = .text:0x00000310; // type:function size:0x8 -AcOshrineBefInside__draw = .text:0x00000320; // type:function size:0x60 +createHeap__21dAcOshrineBefInside_cFv = .text:0x000000F0; // type:function size:0x130 +create__21dAcOshrineBefInside_cFv = .text:0x00000220; // type:function size:0xD8 +doDelete__21dAcOshrineBefInside_cFv = .text:0x00000300; // type:function size:0x8 +actorExecute__21dAcOshrineBefInside_cFv = .text:0x00000310; // type:function size:0x8 +draw__21dAcOshrineBefInside_cFv = .text:0x00000320; // type:function size:0x60 __dt__21dAcOshrineBefInside_cFv = .text:0x00000380; // type:function size:0x80 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global -AcOshrineBefInside__MODELS = .rodata:0x00000000; // type:object size:0x20 data:float -lbl_418_data_0 = .data:0x00000000; // type:object size:0x10 -lbl_418_data_10 = .data:0x00000010; // type:object size:0x10 -g_profile_OBJ_SHRINE_BEF_INSIDE = .data:0x00000020; // type:object size:0x50 -lbl_418_data_70 = .data:0x00000070; // type:object size:0x28 -AcOshrineBefInside__vtable = .data:0x00000098; // type:object size:0x80 +AcOshrineBefInside__MODELS = .rodata:0x00000000; // type:object size:0x8 scope:local +lbl_418_rodata_08 = .rodata:0x00000008; // type:object size:0x4 scope:local data:float +lbl_418_rodata_0C = .rodata:0x0000000C; // type:object size:0x4 scope:local data:float +lbl_418_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_418_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_418_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_418_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_418_data_00 = .data:0x00000000; // type:object size:0x10 scope:local data:string +lbl_418_data_10 = .data:0x00000010; // type:object size:0x10 scope:local data:string +g_profile_OBJ_SHRINE_BEF_INSIDE = .data:0x00000020; // type:object size:0x10 +lbl_418_data_30 = .data:0x00000030; // type:object size:0x10 scope:local data:string +lbl_418_data_40 = .data:0x00000040; // type:object size:0x18 scope:local data:string +lbl_418_data_58 = .data:0x00000058; // type:object size:0x18 scope:local data:string +lbl_418_data_70 = .data:0x00000070; // type:object size:0x28 scope:local data:string +__vt__21dAcOshrineBefInside_c = .data:0x00000098; // type:object size:0x80 diff --git a/config/SOUE01/rels/d_a_obj_shrine_beforeNP/splits.txt b/config/SOUE01/rels/d_a_obj_shrine_beforeNP/splits.txt index 5cfd3010..93bbc5a2 100644 --- a/config/SOUE01/rels/d_a_obj_shrine_beforeNP/splits.txt +++ b/config/SOUE01/rels/d_a_obj_shrine_beforeNP/splits.txt @@ -11,3 +11,5 @@ REL/executor.c: REL/d/a/obj/d_a_obj_shrine_before.cpp: .text start:0x00000070 end:0x000002E8 + .rodata start:0x00000000 end:0x0000001C + .data start:0x00000000 end:0x000000C0 diff --git a/config/SOUE01/rels/d_a_obj_shrine_beforeNP/symbols.txt b/config/SOUE01/rels/d_a_obj_shrine_beforeNP/symbols.txt index 8a948eb5..e097667e 100644 --- a/config/SOUE01/rels/d_a_obj_shrine_beforeNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_shrine_beforeNP/symbols.txt @@ -2,11 +2,11 @@ _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 dAcOshrineBefore_c_classInit__Fv = .text:0x00000070; // type:function size:0x5C -AcOshrineBefore__initModel = .text:0x000000D0; // type:function size:0x80 -AcOshrineBefore__init = .text:0x00000150; // type:function size:0xD4 -fn_388_230 = .text:0x00000230; // type:function size:0x8 -fn_388_240 = .text:0x00000240; // type:function size:0x8 -AcOshrineBefore__draw = .text:0x00000250; // type:function size:0x28 +createHeap__18dAcOshrineBefore_cFv = .text:0x000000D0; // type:function size:0x80 +create__18dAcOshrineBefore_cFv = .text:0x00000150; // type:function size:0xD4 +doDelete__18dAcOshrineBefore_cFv = .text:0x00000230; // type:function size:0x8 +actorExecute__18dAcOshrineBefore_cFv = .text:0x00000240; // type:function size:0x8 +draw__18dAcOshrineBefore_cFv = .text:0x00000250; // type:function size:0x28 __dt__18dAcOshrineBefore_cFv = .text:0x00000280; // type:function size:0x68 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global @@ -14,4 +14,4 @@ lbl_388_rodata_0 = .rodata:0x00000000; // type:object size:0x1C data:float g_profile_OBJ_SHRINE_BEFORE = .data:0x00000000; // type:object size:0x10 lbl_388_data_10 = .data:0x00000010; // type:object size:0x10 lbl_388_data_20 = .data:0x00000020; // type:object size:0x20 data:string -AcOshrineBefore__vtable = .data:0x00000040; // type:object size:0x80 +__vt__18dAcOshrineBefore_c = .data:0x00000040; // type:object size:0x80 diff --git a/configure.py b/configure.py index af990a33..73d9b554 100644 --- a/configure.py +++ b/configure.py @@ -1566,10 +1566,10 @@ config.libs = [ Rel(NonMatching, "d_a_obj_sea_F301", "REL/d/a/obj/d_a_obj_sea_F301.cpp"), Rel(NonMatching, "d_a_obj_shed", "REL/d/a/obj/d_a_obj_shed.cpp"), Rel(NonMatching, "d_a_obj_ship_window", "REL/d/a/obj/d_a_obj_ship_window.cpp"), - Rel(NonMatching, "d_a_obj_shrine_after", "REL/d/a/obj/d_a_obj_shrine_after.cpp"), - Rel(NonMatching, "d_a_obj_shrine_before", "REL/d/a/obj/d_a_obj_shrine_before.cpp"), + Rel(Matching, "d_a_obj_shrine_after", "REL/d/a/obj/d_a_obj_shrine_after.cpp"), + Rel(Matching, "d_a_obj_shrine_before", "REL/d/a/obj/d_a_obj_shrine_before.cpp"), Rel( - NonMatching, + Matching, "d_a_obj_shrine_bef_inside", "REL/d/a/obj/d_a_obj_shrine_bef_inside.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 d6297ce0..9bc69e21 100644 --- a/include/d/a/obj/d_a_obj_fence_boko.h +++ b/include/d/a/obj/d_a_obj_fence_boko.h @@ -14,10 +14,10 @@ public: virtual ~dAcOfenceBoko_c() {} virtual int actorExecute() override; - nw4r::g3d::ResFile mResFile; - m3d::smdl_c mModel; - dBgW mCollision; - bool field_0x560; + /* 0x330 */ nw4r::g3d::ResFile mResFile; + /* 0x334 */ m3d::smdl_c mModel; + /* 0x350 */ dBgW mCollision; + /* 0x560 */ bool field_0x560; private: }; 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 8108c2c0..f270c1b9 100644 --- a/include/d/a/obj/d_a_obj_fence_boko2.h +++ b/include/d/a/obj/d_a_obj_fence_boko2.h @@ -14,9 +14,9 @@ public: virtual ~dAcOfenceBoko2_c() {} virtual int actorExecute() override; - nw4r::g3d::ResFile mResFile; - m3d::smdl_c mModel; - dBgW mCollision; + /* 0x330 */ nw4r::g3d::ResFile mResFile; + /* 0x334 */ m3d::smdl_c mModel; + /* 0x350 */ dBgW mCollision; private: }; diff --git a/include/d/a/obj/d_a_obj_fence_konsai.h b/include/d/a/obj/d_a_obj_fence_konsai.h index 74cd5c06..a72fc500 100644 --- a/include/d/a/obj/d_a_obj_fence_konsai.h +++ b/include/d/a/obj/d_a_obj_fence_konsai.h @@ -14,9 +14,9 @@ public: virtual ~dAcOfenceKonsai_c() {} virtual int actorExecute() override; - nw4r::g3d::ResFile mResFile; - m3d::smdl_c mModel; - dBgW mCollision; + /* 0x330 */ nw4r::g3d::ResFile mResFile; + /* 0x334 */ m3d::smdl_c mModel; + /* 0x350 */ dBgW mCollision; private: }; diff --git a/include/d/a/obj/d_a_obj_iron_stage.h b/include/d/a/obj/d_a_obj_iron_stage.h index 935ca30a..a27a5758 100644 --- a/include/d/a/obj/d_a_obj_iron_stage.h +++ b/include/d/a/obj/d_a_obj_iron_stage.h @@ -16,9 +16,9 @@ public: virtual ~dAcOironStage_c() {} virtual int actorExecute() override; - nw4r::g3d::ResFile mResFile; - m3d::smdl_c mModel; - dBgW mCollision; + /* 0x330 */ nw4r::g3d::ResFile mResFile; + /* 0x334 */ m3d::smdl_c mModel; + /* 0x350 */ dBgW mCollision; private: }; diff --git a/include/d/a/obj/d_a_obj_shrine_after.h b/include/d/a/obj/d_a_obj_shrine_after.h index ccc6aad5..3b20746e 100644 --- a/include/d/a/obj/d_a_obj_shrine_after.h +++ b/include/d/a/obj/d_a_obj_shrine_after.h @@ -6,7 +6,15 @@ class dAcOshrineAfter_c : public dAcObjBase_c { public: dAcOshrineAfter_c() {} + virtual int create() override; + virtual int doDelete() override; + virtual int draw() override; + virtual bool createHeap() override; virtual ~dAcOshrineAfter_c() {} + virtual int actorExecute() override; + + /* 0x330 */ nw4r::g3d::ResFile mResFile; + /* 0x334 */ m3d::smdl_c mModel; private: }; diff --git a/include/d/a/obj/d_a_obj_shrine_bef_inside.h b/include/d/a/obj/d_a_obj_shrine_bef_inside.h index 937d6c5e..c6d9f64c 100644 --- a/include/d/a/obj/d_a_obj_shrine_bef_inside.h +++ b/include/d/a/obj/d_a_obj_shrine_bef_inside.h @@ -2,11 +2,21 @@ #define D_A_OBJ_SHRINE_BEF_INSIDE_H #include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_w.h" class dAcOshrineBefInside_c : public dAcObjBase_c { public: dAcOshrineBefInside_c() {} + virtual int create() override; + virtual int doDelete() override; + virtual int draw() override; + virtual bool createHeap() override; virtual ~dAcOshrineBefInside_c() {} + virtual int actorExecute() override; + + /* 0x330 */ nw4r::g3d::ResFile mResFile; + /* 0x334 */ m3d::smdl_c mModel[2]; + /* 0x36C */ dBgW mCollision; private: }; diff --git a/include/d/a/obj/d_a_obj_shrine_before.h b/include/d/a/obj/d_a_obj_shrine_before.h index 96c8d257..6930e772 100644 --- a/include/d/a/obj/d_a_obj_shrine_before.h +++ b/include/d/a/obj/d_a_obj_shrine_before.h @@ -6,7 +6,15 @@ class dAcOshrineBefore_c : public dAcObjBase_c { public: dAcOshrineBefore_c() {} + virtual int create() override; + virtual int doDelete() override; + virtual int draw() override; + virtual bool createHeap() override; virtual ~dAcOshrineBefore_c() {} + virtual int actorExecute() override; + + /* 0x330 */ nw4r::g3d::ResFile mResFile; + /* 0x334 */ m3d::smdl_c mModel; private: }; diff --git a/src/REL/d/a/obj/d_a_obj_shrine_after.cpp b/src/REL/d/a/obj/d_a_obj_shrine_after.cpp index 4eba6d77..4796600c 100644 --- a/src/REL/d/a/obj/d_a_obj_shrine_after.cpp +++ b/src/REL/d/a/obj/d_a_obj_shrine_after.cpp @@ -1,3 +1,33 @@ #include "d/a/obj/d_a_obj_shrine_after.h" SPECIAL_ACTOR_PROFILE(OBJ_SHRINE_AFTER, dAcOshrineAfter_c, fProfile::OBJ_SHRINE_AFTER, 0x1E9, 0, 3); + +bool dAcOshrineAfter_c::createHeap() { + mResFile = nw4r::g3d::ResFile(getOarcResFile("F401ShrineAft")); + nw4r::g3d::ResMdl mdl = mResFile.GetResMdl("F401ShrineAft"); + TRY_CREATE(mModel.create(mdl, &heap_allocator, 0x120)); + return true; +} + +int dAcOshrineAfter_c::create() { + CREATE_ALLOCATOR(dAcOshrineAfter_c); + updateMatrix(); + mModel.setLocalMtx(mWorldMtx); + mModel.setPriorityDraw(0x1C, 0x9); + boundingBox.Set(mVec3_c(-4000.0f, 7000.0f, 5000.0f), mVec3_c(5000.0f, 15000.0f, 14000.0f)); + mCullingDistance = 50000.0; + return SUCCEEDED; +} + +int dAcOshrineAfter_c::doDelete() { + return SUCCEEDED; +} + +int dAcOshrineAfter_c::actorExecute() { + return SUCCEEDED; +} + +int dAcOshrineAfter_c::draw() { + drawModelType1(&mModel); + return SUCCEEDED; +} diff --git a/src/REL/d/a/obj/d_a_obj_shrine_bef_inside.cpp b/src/REL/d/a/obj/d_a_obj_shrine_bef_inside.cpp index 49da5371..feb6ed0c 100644 --- a/src/REL/d/a/obj/d_a_obj_shrine_bef_inside.cpp +++ b/src/REL/d/a/obj/d_a_obj_shrine_bef_inside.cpp @@ -1,3 +1,59 @@ #include "d/a/obj/d_a_obj_shrine_bef_inside.h" +#include "d/col/bg/d_bg_s.h" +#include "nw4r/g3d/res/g3d_resfile.h" +#include "toBeSorted/arc_managers/current_stage_arc_manager.h" + +static const char *const AcOshrineBefInside__MODELS[] = { + "StageF402Bef", + "StageF402Bef_s", +}; + SPECIAL_ACTOR_PROFILE(OBJ_SHRINE_BEF_INSIDE, dAcOshrineBefInside_c, fProfile::OBJ_SHRINE_BEF_INSIDE, 0x209, 0, 3); + +bool dAcOshrineBefInside_c::createHeap() { + mResFile = nw4r::g3d::ResFile(CurrentStageArcManager::GetInstance()->getData("g3d/stage.brres")); + + for (int modelIndex = 0; modelIndex < 2; modelIndex++) { + nw4r::g3d::ResMdl mdl = mResFile.GetResMdl(AcOshrineBefInside__MODELS[modelIndex]); + TRY_CREATE(mModel[modelIndex].create(mdl, &heap_allocator, 0x120)); + } + + cBgD_t *dzb = (cBgD_t *)CurrentStageArcManager::GetInstance()->getData("dzb/StageF402Bef.dzb"); + PLC *plc = (PLC *)CurrentStageArcManager::GetInstance()->getData("dat/StageF402Bef.plc"); + + updateMatrix(); + + for (int i = 0; i < 2; i++) { + mModel[i].setLocalMtx(mWorldMtx); + } + + TRY_CREATE(!mCollision.Set(dzb, plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale)); + mCollision.Lock(); + + return true; +} + +int dAcOshrineBefInside_c::create() { + CREATE_ALLOCATOR(dAcOshrineBefInside_c); + dBgS::GetInstance()->Regist(&mCollision, this); + mModel[0].setPriorityDraw(0x1C, 0x9); + mModel[1].setPriorityDraw(0x22, 0x9); + boundingBox.Set(mVec3_c(-2000.0f, 7400.0f, 7200.0f), mVec3_c(4400.0f, 10000.0f, 15800.0f)); + return SUCCEEDED; +} + +int dAcOshrineBefInside_c::doDelete() { + return SUCCEEDED; +} + +int dAcOshrineBefInside_c::actorExecute() { + return SUCCEEDED; +} + +int dAcOshrineBefInside_c::draw() { + for (int i = 0; i < 2; i++) { + drawModelType1(&mModel[i]); + } + return SUCCEEDED; +} diff --git a/src/REL/d/a/obj/d_a_obj_shrine_before.cpp b/src/REL/d/a/obj/d_a_obj_shrine_before.cpp index ab07cfdd..9bca3319 100644 --- a/src/REL/d/a/obj/d_a_obj_shrine_before.cpp +++ b/src/REL/d/a/obj/d_a_obj_shrine_before.cpp @@ -1,3 +1,33 @@ #include "d/a/obj/d_a_obj_shrine_before.h" SPECIAL_ACTOR_PROFILE(OBJ_SHRINE_BEFORE, dAcOshrineBefore_c, fProfile::OBJ_SHRINE_BEFORE, 0x1EA, 0, 3); + +bool dAcOshrineBefore_c::createHeap() { + mResFile = nw4r::g3d::ResFile(getOarcResFile("F401ShrineBef")); + nw4r::g3d::ResMdl mdl = mResFile.GetResMdl("F401ShrineBef"); + TRY_CREATE(mModel.create(mdl, &heap_allocator, 0x120)); + return true; +} + +int dAcOshrineBefore_c::create() { + CREATE_ALLOCATOR(dAcOshrineBefore_c); + updateMatrix(); + mModel.setLocalMtx(mWorldMtx); + mModel.setPriorityDraw(0x1C, 0x9); + boundingBox.Set(mVec3_c(-4000.0f, 7000.0f, 5000.0f), mVec3_c(4000.0f, 13000.0f, 14000.0f)); + mCullingDistance = 50000.0; + return SUCCEEDED; +} + +int dAcOshrineBefore_c::doDelete() { + return SUCCEEDED; +} + +int dAcOshrineBefore_c::actorExecute() { + return SUCCEEDED; +} + +int dAcOshrineBefore_c::draw() { + drawModelType1(&mModel); + return SUCCEEDED; +}