summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCovenEsme <84377742+CovenEsme@users.noreply.github.com>2025-03-14 02:48:47 +0000
committerGitHub <noreply@github.com>2025-03-13 22:48:47 -0400
commitb3b140ff7fa8990bc894f32a17e7e45683a5ef7e (patch)
treef755ddbf871176d723d9bfab773b2ffc4f3e073d
parentd10e2680174d30c3f43fc8eb6df2fd9cc972c9f5 (diff)
Shrine OK (#137)
* d_a_obj_shrine_after ok * d_a_obj_shrine_before ok * d_a_obj_shrine_bef_inside ok * Add offset comments
-rw-r--r--config/SOUE01/rels/d_a_obj_shrine_afterNP/splits.txt2
-rw-r--r--config/SOUE01/rels/d_a_obj_shrine_afterNP/symbols.txt12
-rw-r--r--config/SOUE01/rels/d_a_obj_shrine_bef_insideNP/splits.txt2
-rw-r--r--config/SOUE01/rels/d_a_obj_shrine_bef_insideNP/symbols.txt31
-rw-r--r--config/SOUE01/rels/d_a_obj_shrine_beforeNP/splits.txt2
-rw-r--r--config/SOUE01/rels/d_a_obj_shrine_beforeNP/symbols.txt12
-rw-r--r--configure.py6
-rw-r--r--include/d/a/obj/d_a_obj_fence_boko.h8
-rw-r--r--include/d/a/obj/d_a_obj_fence_boko2.h6
-rw-r--r--include/d/a/obj/d_a_obj_fence_konsai.h6
-rw-r--r--include/d/a/obj/d_a_obj_iron_stage.h6
-rw-r--r--include/d/a/obj/d_a_obj_shrine_after.h8
-rw-r--r--include/d/a/obj/d_a_obj_shrine_bef_inside.h10
-rw-r--r--include/d/a/obj/d_a_obj_shrine_before.h8
-rw-r--r--src/REL/d/a/obj/d_a_obj_shrine_after.cpp30
-rw-r--r--src/REL/d/a/obj/d_a_obj_shrine_bef_inside.cpp56
-rw-r--r--src/REL/d/a/obj/d_a_obj_shrine_before.cpp30
17 files changed, 196 insertions, 39 deletions
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;
+}