diff --git a/config/SOUE01/rels/d_a_obj_bird_statueNP/symbols.txt b/config/SOUE01/rels/d_a_obj_bird_statueNP/symbols.txt index dcc5f003..939963f1 100644 --- a/config/SOUE01/rels/d_a_obj_bird_statueNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_bird_statueNP/symbols.txt @@ -2,9 +2,9 @@ _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 dAcOBirdStatue_c_classInit__Fv = .text:0x00000070; // type:function size:0x54 -fn_627_D0 = .text:0x000000D0; // type:function size:0x98 -fn_627_170 = .text:0x00000170; // type:function size:0xA4 -fn_627_220 = .text:0x00000220; // type:function size:0x28 +createHeap__16dAcOBirdStatue_cFv = .text:0x000000D0; // type:function size:0x98 +create__16dAcOBirdStatue_cFv = .text:0x00000170; // type:function size:0xA4 +draw__16dAcOBirdStatue_cFv = .text:0x00000220; // type:function size:0x28 __dt__16dAcOBirdStatue_cFv = .text:0x00000250; // type:function size:0x68 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global diff --git a/configure.py b/configure.py index e4a5ed71..9abbc2b9 100644 --- a/configure.py +++ b/configure.py @@ -1958,7 +1958,7 @@ config.libs = [ NonMatching, "d_a_obj_bigbomb_flower", "REL/d/a/obj/d_a_obj_bigbomb_flower.cpp" ), Rel(NonMatching, "d_a_obj_bird_sp", "REL/d/a/obj/d_a_obj_bird_sp.cpp"), - Rel(NonMatching, "d_a_obj_bird_statue", "REL/d/a/obj/d_a_obj_bird_statue.cpp"), + Rel(Matching, "d_a_obj_bird_statue", "REL/d/a/obj/d_a_obj_bird_statue.cpp"), Rel(NonMatching, "d_a_obj_blade", "REL/d/a/obj/d_a_obj_blade.cpp"), Rel(NonMatching, "d_a_obj_blast_rock", "REL/d/a/obj/d_a_obj_blast_rock.cpp"), Rel(NonMatching, "d_a_obj_block_rope", "REL/d/a/obj/d_a_obj_block_rope.cpp"), diff --git a/include/d/a/obj/d_a_obj_bird_statue.h b/include/d/a/obj/d_a_obj_bird_statue.h index 7e47c69d..511c7dbb 100644 --- a/include/d/a/obj/d_a_obj_bird_statue.h +++ b/include/d/a/obj/d_a_obj_bird_statue.h @@ -6,9 +6,14 @@ class dAcOBirdStatue_c : public dAcObjBase_c { public: dAcOBirdStatue_c() {} - virtual ~dAcOBirdStatue_c() {} + virtual ~dAcOBirdStatue_c() {} + + virtual bool createHeap() override; + virtual int create() override; + virtual int draw() override; private: + /* 0x330 */ m3d::smdl_c mMdl; }; #endif diff --git a/src/REL/d/a/obj/d_a_obj_bird_statue.cpp b/src/REL/d/a/obj/d_a_obj_bird_statue.cpp index 5d98fe9f..44c10b07 100644 --- a/src/REL/d/a/obj/d_a_obj_bird_statue.cpp +++ b/src/REL/d/a/obj/d_a_obj_bird_statue.cpp @@ -1,3 +1,39 @@ #include "d/a/obj/d_a_obj_bird_statue.h" SPECIAL_ACTOR_PROFILE(OBJ_BIRD_STATUE, dAcOBirdStatue_c, fProfile::OBJ_BIRD_STATUE, 0x285, 0, 3); + +bool dAcOBirdStatue_c::createHeap() { + void *data = getOarcResFile("BirdStatue"); + if (data == nullptr) { + return false; + } + + nw4r::g3d::ResFile file(data); + if (!file.IsValid()) { + return false; + } + + nw4r::g3d::ResMdl mdl = file.GetResMdl("BirdStatue"); + if (!mdl.IsValid()) { + return false; + } + + return mMdl.create(mdl, &heap_allocator, 0, 1, nullptr); +} + +int dAcOBirdStatue_c::create() { + if (!initAllocatorWork1Heap(0xffffffff, "dAcOBirdStatue_c::m_allocator", 0x20)) { + return FAILED; + } + updateMatrix(); + mMdl.setLocalMtx(mWorldMtx); + mVec3_c min, max; + mMdl.getBounds(&min,&max); + boundingBox.Set(min, max); + return SUCCEEDED; +} + +int dAcOBirdStatue_c::draw(){ + dAcObjBase_c::drawModelType1(&mMdl); + return SUCCEEDED; +}