diff --git a/config/SOUE01/rels/d_a_obj_bellNP/symbols.txt b/config/SOUE01/rels/d_a_obj_bellNP/symbols.txt index d78fc1054..fd35cb4fa 100644 --- a/config/SOUE01/rels/d_a_obj_bellNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_bellNP/symbols.txt @@ -8,13 +8,13 @@ __dt__23sFState_c<10dAcObell_c>Fv = .text:0x000001E0; // type:function size:0x58 __dt__26sFStateFct_c<10dAcObell_c>Fv = .text:0x00000240; // type:function size:0x6C __dt__79sStateMgr_c<10dAcObell_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000002B0; // type:function size:0xA0 __dt__49sFStateMgr_c<10dAcObell_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000350; // type:function size:0xA4 -AcObell__initModels = .text:0x00000400; // type:function size:0xFC -AcObell__init = .text:0x00000500; // type:function size:0x1A4 +createHeap__10dAcObell_cFv = .text:0x00000400; // type:function size:0xFC +create__10dAcObell_cFv = .text:0x00000500; // type:function size:0x1A4 changeState__79sStateMgr_c<10dAcObell_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x000006B0; // type:function size:0x10 -fn_417_6C0 = .text:0x000006C0; // type:function size:0x8 -AcObell__update = .text:0x000006D0; // type:function size:0x10C +doDelete__10dAcObell_cFv = .text:0x000006C0; // type:function size:0x8 +execute__10dAcObell_cFv = .text:0x000006D0; // type:function size:0x10C executeState__79sStateMgr_c<10dAcObell_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000007E0; // type:function size:0x10 -AcObell__draw = .text:0x000007F0; // type:function size:0x28 +draw__10dAcObell_cFv = .text:0x000007F0; // type:function size:0x28 initializeState_Wait__10dAcObell_cFv = .text:0x00000820; // type:function size:0xC executeState_Wait__10dAcObell_cFv = .text:0x00000830; // type:function size:0x17C finalizeState_Wait__10dAcObell_cFv = .text:0x000009B0; // type:function size:0x4 diff --git a/config/SOUE01/rels/d_a_obj_dormitory_gateNP/symbols.txt b/config/SOUE01/rels/d_a_obj_dormitory_gateNP/symbols.txt index fb836b20e..e7cda11ff 100644 --- a/config/SOUE01/rels/d_a_obj_dormitory_gateNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_dormitory_gateNP/symbols.txt @@ -9,8 +9,8 @@ __dt__35sFStateFct_c<19dAcODormitoryGate_c>Fv = .text:0x00000290; // type:functi __dt__88sStateMgr_c<19dAcODormitoryGate_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000300; // type:function size:0xA0 __dt__58sFStateMgr_c<19dAcODormitoryGate_c,20sStateMethodUsr_FI_c>Fv = .text:0x000003A0; // type:function size:0xA4 fn_534_450 = .text:0x00000450; // type:function size:0x40 -AcODormitoryGate__initModels = .text:0x00000490; // type:function size:0x238 -fn_534_6D0 = .text:0x000006D0; // type:function size:0x2BC +createHeap__19dAcODormitoryGate_cFv = .text:0x00000490; // type:function size:0x238 +create__19dAcODormitoryGate_cFv = .text:0x000006D0; // type:function size:0x2BC changeState__88sStateMgr_c<19dAcODormitoryGate_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000990; // type:function size:0x10 fn_534_9A0 = .text:0x000009A0; // type:function size:0x8 fn_534_9B0 = .text:0x000009B0; // type:function size:0xEC diff --git a/config/SOUE01/rels/d_a_obj_flagNP/symbols.txt b/config/SOUE01/rels/d_a_obj_flagNP/symbols.txt index f3dfe5b10..d442d8a54 100644 --- a/config/SOUE01/rels/d_a_obj_flagNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_flagNP/symbols.txt @@ -3,7 +3,7 @@ _epilog = .text:0x00000030; // type:function size:0x2C scope:global _unresolved = .text:0x00000060; // type:function size:0x4 scope:global __register_global_object = .text:0x00000070; // type:function size:0x1C scope:global __destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global -fn_552_F0 = .text:0x000000F0; // type:function size:0x40 +__dt__7mVec3_cFv = .text:0x000000F0; // type:function size:0x40 dAcOFlag_c_classInit__Fv = .text:0x00000130; // type:function size:0x110 __dt__23sFState_c<10dAcOFlag_c>Fv = .text:0x00000240; // type:function size:0x58 __dt__26sFStateFct_c<10dAcOFlag_c>Fv = .text:0x000002A0; // type:function size:0x6C @@ -11,15 +11,15 @@ __dt__79sStateMgr_c<10dAcOFlag_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateI __dt__49sFStateMgr_c<10dAcOFlag_c,20sStateMethodUsr_FI_c>Fv = .text:0x000003B0; // type:function size:0xA4 fn_552_460 = .text:0x00000460; // type:function size:0x40 fn_552_4A0 = .text:0x000004A0; // type:function size:0x40 -fn_552_4E0 = .text:0x000004E0; // type:function size:0x4 -fn_552_4F0 = .text:0x000004F0; // type:function size:0x3AC -fn_552_8A0 = .text:0x000008A0; // type:function size:0x290 +__ct__7mVec3_cFv = .text:0x000004E0; // type:function size:0x4 +createHeap__10dAcOFlag_cFv = .text:0x000004F0; // type:function size:0x3AC +actorCreate__10dAcOFlag_cFv = .text:0x000008A0; // type:function size:0x290 changeState__79sStateMgr_c<10dAcOFlag_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000B30; // type:function size:0x10 -fn_552_B40 = .text:0x00000B40; // type:function size:0x1A4 -fn_552_CF0 = .text:0x00000CF0; // type:function size:0x8 -fn_552_D00 = .text:0x00000D00; // type:function size:0x178 +actorPostCreate__10dAcOFlag_cFv = .text:0x00000B40; // type:function size:0x1A4 +doDelete__10dAcOFlag_cFv = .text:0x00000CF0; // type:function size:0x8 +actorExecute__10dAcOFlag_cFv = .text:0x00000D00; // type:function size:0x178 executeState__79sStateMgr_c<10dAcOFlag_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000E80; // type:function size:0x10 -fn_552_E90 = .text:0x00000E90; // type:function size:0x28 +draw__10dAcOFlag_cFv = .text:0x00000E90; // type:function size:0x28 initializeState_Wait__10dAcOFlag_cFv = .text:0x00000EC0; // type:function size:0x4 executeState_Wait__10dAcOFlag_cFv = .text:0x00000ED0; // type:function size:0x2C finalizeState_Wait__10dAcOFlag_cFv = .text:0x00000F00; // type:function size:0x4 @@ -34,13 +34,13 @@ fn_552_2EA0 = .text:0x00002EA0; // type:function size:0xB0 fn_552_2F50 = .text:0x00002F50; // type:function size:0x48 fn_552_2FA0 = .text:0x00002FA0; // type:function size:0x414 fn_552_33C0 = .text:0x000033C0; // type:function size:0x414 -fn_552_37E0 = .text:0x000037E0; // type:function size:0x184 -fn_552_3970 = .text:0x00003970; // type:function size:0x53C -fn_552_3EB0 = .text:0x00003EB0; // type:function size:0x4C -fn_552_3F00 = .text:0x00003F00; // type:function size:0x4C -fn_552_3F50 = .text:0x00003F50; // type:function size:0x44 -fn_552_3FA0 = .text:0x00003FA0; // type:function size:0x24 -fn_552_3FD0 = .text:0x00003FD0; // type:function size:0x24 +setCollider__10dAcOFlag_cFv = .text:0x000037E0; // type:function size:0x184 +createPlacement__10dAcOFlag_cFv = .text:0x00003970; // type:function size:0x53C +getArcName__10dAcOFlag_cFv = .text:0x00003EB0; // type:function size:0x4C +getMdlName__10dAcOFlag_cFv = .text:0x00003F00; // type:function size:0x4C +getAnmTexSrtName__10dAcOFlag_cFv = .text:0x00003F50; // type:function size:0x44 +isSail__10dAcOFlag_cFv = .text:0x00003FA0; // type:function size:0x24 +isPurpleFlag__10dAcOFlag_cFv = .text:0x00003FD0; // type:function size:0x24 fn_552_4000 = .text:0x00004000; // type:function size:0x90 __dt__10dAcOFlag_cFv = .text:0x00004090; // type:function size:0xF4 getStateID__79sStateMgr_c<10dAcOFlag_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00004190; // type:function size:0x10 diff --git a/include/d/a/d_a_base.h b/include/d/a/d_a_base.h index 360397b25..2eae40a1a 100644 --- a/include/d/a/d_a_base.h +++ b/include/d/a/d_a_base.h @@ -70,6 +70,7 @@ class dAcBase_c : public dBase_c { public: enum AcProperties_e { AC_PROP_0x1 = (1 << 0), + AC_PROP_0x2 = (1 << 1), AC_PROP_0x4 = (1 << 2), AC_PROP_0x100 = (1 << 8), AC_PROP_0x400 = (1 << 10), diff --git a/include/d/a/obj/d_a_obj_base.h b/include/d/a/obj/d_a_obj_base.h index 57f1222a6..8f7287c21 100644 --- a/include/d/a/obj/d_a_obj_base.h +++ b/include/d/a/obj/d_a_obj_base.h @@ -254,14 +254,17 @@ class dAcObjBase_c : public dAcBase_c { return result; \ } while (0) -// Use this in actors' create functions -#define CREATE_ALLOCATOR(className) \ +#define CREATE_ALLOCATOR_SIZE(className, size) \ do { \ - if (!initAllocatorWork1Heap(-1, #className "::m_allocator", 0x20)) { \ + if (!initAllocatorWork1Heap(size, #className "::m_allocator", 0x20)) { \ return FAILED; \ } \ } while (0) +// Use this in actors' create functions +#define CREATE_ALLOCATOR(className) CREATE_ALLOCATOR_SIZE(className, -1) +#define CREATE_ALLOCATOR_UNCHECKED(className) initAllocatorWork1Heap(-1, #className "::m_allocator", 0x20) + class dAcObjRef_unk { public: dAcObjRef_unk(dAcObjBase_c *ref) : mObj(nullptr), refOwner(ref) {} diff --git a/include/d/a/obj/d_a_obj_bell.h b/include/d/a/obj/d_a_obj_bell.h index 45cdbae5c..79b5a4bfd 100644 --- a/include/d/a/obj/d_a_obj_bell.h +++ b/include/d/a/obj/d_a_obj_bell.h @@ -2,19 +2,39 @@ #define D_A_OBJ_BELL_H #include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_w.h" +#include "d/col/cc/d_cc_d.h" +#include "m/m3d/m_smdl.h" +#include "m/m_vec.h" +#include "nw4r/g3d/res/g3d_resfile.h" #include "s/s_State.hpp" +#include "toBeSorted/dowsing_target.h" class dAcObell_c : public dAcObjBase_c { public: - dAcObell_c() : mStateMgr(*this) {} + dAcObell_c() : mStateMgr(*this), mDowsingTarget(this, DowsingTarget::SLOT_NONE) {} virtual ~dAcObell_c() {} + virtual int create() override; + virtual int doDelete() override; + virtual int draw() override; + virtual bool createHeap() override; + virtual int actorExecute() override; + STATE_FUNC_DECLARE(dAcObell_c, Wait); STATE_FUNC_DECLARE(dAcObell_c, WaitRupee); STATE_FUNC_DECLARE(dAcObell_c, After); private: - /* 0x??? */ STATE_MGR_DECLARE(dAcObell_c); + /* 0x330 */ nw4r::g3d::ResFile mResFile; + /* 0x334 */ m3d::smdl_c mMdl; + /* 0x350 */ dBgW mBgW; + /* 0x560 */ dCcD_Sph mSph; + /* 0x6B0 */ STATE_MGR_DECLARE(dAcObell_c); + /* 0x6EC */ DowsingTarget mDowsingTarget; + /* 0x70C */ mVec3_c mRupeeDir; + /* 0x718 */ mVec3_c field_0x718; + /* 0x### */ // More }; #endif diff --git a/include/d/a/obj/d_a_obj_dormitory_gate.h b/include/d/a/obj/d_a_obj_dormitory_gate.h index 3e0ab4109..9f1e81c1a 100644 --- a/include/d/a/obj/d_a_obj_dormitory_gate.h +++ b/include/d/a/obj/d_a_obj_dormitory_gate.h @@ -2,18 +2,58 @@ #define D_A_OBJ_DORMITORY_GATE_H #include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_w.h" +#include "m/m3d/m_anmmatclr.h" +#include "m/m3d/m_smdl.h" +#include "m/m_mtx.h" +#include "nw4r/g3d/res/g3d_resfile.h" #include "s/s_State.hpp" +#include "toBeSorted/stage_render_stuff.h" class dAcODormitoryGate_c : public dAcObjBase_c { public: - dAcODormitoryGate_c() : mStateMgr(*this) {} + enum Type_e { + TYPE_GATE = 0, + TYPE_GODDOOR = 1, + TYPE_SHUTTER = 2, + TYPE_GATE_F400 = 3, + }; + dAcODormitoryGate_c() : mStateMgr(*this), mScnCallback(this) {} virtual ~dAcODormitoryGate_c() {} + virtual int create() override; + virtual int doDelete() override; + virtual int draw() override; + virtual bool createHeap() override; + virtual int actorExecute() override; + STATE_FUNC_DECLARE(dAcODormitoryGate_c, Wait); STATE_FUNC_DECLARE(dAcODormitoryGate_c, End); private: - /* 0x??? */ STATE_MGR_DECLARE(dAcODormitoryGate_c); + /** Sets the parameter for Door to be open/closed physically */ + void fn_534_C80(); + + /** Sets the Door open/closed physically */ + void fn_534_D40(); + + bool checkOpenFlag(); + + /* 0x330 */ nw4r::g3d::ResFile mResFile; + /* 0x334 */ m3d::smdl_c mMdls[2]; + /* 0x36C */ m3d::anmMatClr_c mAnmMatClr; + /* 0x398 */ dBgW mCollision[2]; + /* 0x7B8 */ STATE_MGR_DECLARE(dAcODormitoryGate_c); + /* 0x7F4 */ mMtx_c mDoorMtx[2]; + /* 0x854 */ Type_e mSubtype; + /* 0x858 */ u8 mNumDoors; + /* 0x85C */ f32 mShutterHeight; + /* 0x860 */ mAng mGateAngle; + /* 0x862 */ bool mIsOpen; + /* 0x863 */ u8 _0x863[0x865 - 0x863]; + /* 0x865 */ u8 mGodDoorSomething; + /* 0x868 */ dScnCallback_c mScnCallback; + /* 0x874 */ u16 mStoryflag; }; #endif diff --git a/include/d/a/obj/d_a_obj_flag.h b/include/d/a/obj/d_a_obj_flag.h index a021f691b..06debca07 100644 --- a/include/d/a/obj/d_a_obj_flag.h +++ b/include/d/a/obj/d_a_obj_flag.h @@ -1,18 +1,68 @@ #ifndef D_A_OBJ_FLAG_H #define D_A_OBJ_FLAG_H +#include "common.h" +#include "d/a/d_a_base.h" #include "d/a/obj/d_a_obj_base.h" +#include "d/col/cc/d_cc_d.h" +#include "m/m3d/m_anmtexsrt.h" +#include "m/m3d/m_smdl.h" +#include "m/m_vec.h" +#include "nw4r/g3d/g3d_scnobj.h" +#include "nw4r/g3d/res/g3d_resfile.h" #include "s/s_State.hpp" +class dAcODesertAgo_c; class dAcOFlag_c : public dAcObjBase_c { public: - dAcOFlag_c() : mStateMgr(*this) {} + class callback_c : public nw4r::g3d::IScnObjCallback { + public: + callback_c(dAcObjBase_c *arg) : mpActor(arg) {} + /* 0x04 */ dAcObjBase_c *mpActor; + }; + dAcOFlag_c() : mResFile(nullptr), mStateMgr(*this), mCallback(this) {} virtual ~dAcOFlag_c() {} + virtual int doDelete() override; + virtual int draw() override; + virtual bool createHeap() override; + virtual int actorCreate() override; + virtual int actorPostCreate() override; + virtual int actorExecute() override; + STATE_FUNC_DECLARE(dAcOFlag_c, Wait); + void setCollider(); + void createPlacement(); + + bool isSail(); + bool isPurpleFlag(); + const char *getArcName(); + const char *getMdlName(); + const char *getAnmTexSrtName(); + private: - /* 0x??? */ STATE_MGR_DECLARE(dAcOFlag_c); + /* 0x330 */ nw4r::g3d::ResFile mResFile; + /* 0x334 */ m3d::smdl_c mMdl; + /* 0x350 */ m3d::anmTexSrt_c mAnmTexSrt; + /* 0x37C */ dCcD_Cps mCps; + /* 0x4EC */ STATE_MGR_DECLARE(dAcOFlag_c); + /* 0x528 */ callback_c mCallback; + /* 0x530 */ s32 field_0x530; + /* 0x534 */ s32 mNumJoints; + /* 0x538 */ mVec3_c *mpJoints; + /* 0x53C */ mVec3_c field_0x53C; + /* 0x548 */ s32 field_0x548; + /* 0x54C */ dAcRef_c mDesertAgoRef; + /* 0x558 */ s32 field_0x558; + /* 0x55C */ s32 field_0x55C; + /* 0x560 */ u8 field_0x560; + /* 0x561 */ u8 field_0x561; + /* 0x564 */ s32 field_0x564; + /* 0x568 */ f32 field_0x568; + /* 0x56C */ mVec3_c *mpJoints1; // Size 15 + /* 0x570 */ mVec3_c *mpJoints2; // Size 15 + /* 0x574 */ mVec3_c *mpJoints3; // Size 15 }; #endif diff --git a/include/d/flag/storyflag_map.h b/include/d/flag/storyflag_map.h index 4feeed1f5..a8c617a82 100644 --- a/include/d/flag/storyflag_map.h +++ b/include/d/flag/storyflag_map.h @@ -3383,7 +3383,7 @@ enum StoryFlags_e { /** [Goddess Statue Opened] * Story Flag #672 (0x02A0) - JP 805ACDA0 0x02 / US 805A9B20 0x02 */ - STORYFLAG_672, + STORYFLAG_GODDESS_STATUE_ACCESS, /** [Set when Scrapper picks up Oolo] * Story Flag #673 (0x02A1) - JP 805ACDA0 0x04 / US 805A9B20 0x04 diff --git a/include/nw4r/g3d/res/g3d_resnode.h b/include/nw4r/g3d/res/g3d_resnode.h index 43f080c9d..d3198e8f3 100644 --- a/include/nw4r/g3d/res/g3d_resnode.h +++ b/include/nw4r/g3d/res/g3d_resnode.h @@ -141,7 +141,7 @@ class ResNode : public ResCommon, public ResNodeDataTypedef { } const math::VEC3 &GetTranslate() const { - return ref().translate; + return *(const math::VEC3 *)&ref().translate; } // not in the dwarf diff --git a/src/REL/d/a/npc/d_a_npc_rival_lod.cpp b/src/REL/d/a/npc/d_a_npc_rival_lod.cpp index f1440a070..5b727b574 100644 --- a/src/REL/d/a/npc/d_a_npc_rival_lod.cpp +++ b/src/REL/d/a/npc/d_a_npc_rival_lod.cpp @@ -14,9 +14,7 @@ bool dAcNpcRivalLOD_c::createHeap() { return true; } int dAcNpcRivalLOD_c::create() { - if (!initAllocatorWork1Heap(-1, "dAcNpcRivalLOD_c::m_allocator", 0x20)) { - return FAILED; - } + CREATE_ALLOCATOR(dAcNpcRivalLOD_c); 0.0f; // float order, cool mAcceleration = -1.0f; mMaxSpeed = -40.0f; diff --git a/src/REL/d/a/obj/d_a_obj_barrel.cpp b/src/REL/d/a/obj/d_a_obj_barrel.cpp index 3f7c6857f..51bb16397 100644 --- a/src/REL/d/a/obj/d_a_obj_barrel.cpp +++ b/src/REL/d/a/obj/d_a_obj_barrel.cpp @@ -28,7 +28,6 @@ #include "m/m_mtx.h" #include "m/m_quat.h" #include "m/m_vec.h" -#include "math.h" #include "nw4r/g3d/res/g3d_resfile.h" #include "nw4r/math/math_arithmetic.h" #include "rvl/MTX/mtxvec.h" diff --git a/src/REL/d/a/obj/d_a_obj_bell.cpp b/src/REL/d/a/obj/d_a_obj_bell.cpp index a23ab54e9..735903c42 100644 --- a/src/REL/d/a/obj/d_a_obj_bell.cpp +++ b/src/REL/d/a/obj/d_a_obj_bell.cpp @@ -1,11 +1,71 @@ #include "d/a/obj/d_a_obj_bell.h" +#include "common.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_plc.h" +#include "d/col/bg/d_bg_s.h" +#include "d/col/bg/d_bg_w.h" +#include "d/col/cc/d_cc_d.h" +#include "d/d_stage.h" +#include "f/f_base.h" +#include "m/m_vec.h" +#include "nw4r/g3d/res/g3d_resfile.h" +#include "nw4r/g3d/res/g3d_resmdl.h" +#include "toBeSorted/arc_managers/current_stage_arc_manager.h" +#include "toBeSorted/dowsing_target.h" + SPECIAL_ACTOR_PROFILE(OBJ_BELL, dAcObell_c, fProfile::OBJ_BELL, 0x208, 0, 2); STATE_DEFINE(dAcObell_c, Wait); STATE_DEFINE(dAcObell_c, WaitRupee); STATE_DEFINE(dAcObell_c, After); +static dCcD_SrcSph sSrcSph = { + // TODO +}; + +bool dAcObell_c::createHeap() { + mResFile = nw4r::g3d::ResFile(CurrentStageArcManager::GetInstance()->getData("g3d/stage.brres")); + dStage_c::bindStageResToFile(&mResFile); + dStage_c::bindSkyCmnToResFile(&mResFile); + + nw4r::g3d::ResMdl resMdl = mResFile.GetResMdl("StageF000Bell"); + TRY_CREATE(mMdl.create(resMdl, &mAllocator, 0x120)); + + cBgD_t *dzb = (cBgD_t *)CurrentStageArcManager::GetInstance()->getData("dzb/StageF000Bell.dzb"); + PLC *plc = (PLC *)CurrentStageArcManager::GetInstance()->getData("dat/StageF000Bell.plc"); + updateMatrix(); + + TRY_CREATE(!(BOOL)mBgW.Set(dzb, plc, 1, &mWorldMtx, &mScale)); + + return true; +} + +int dAcObell_c::create() { + CREATE_ALLOCATOR(dAcObell_c); + + mBgW.SetCrrFunc(dBgS_MoveBGProc_Typical); + dBgS::GetInstance()->Regist(&mBgW, this); + + mStts.SetRank(13); + mSph.Set(sSrcSph); + mSph.SetStts(mStts); + + mRupeeDir = mVec3_c(0.f, -300.f, 0.f); + field_0x718 = mVec3_c(0.f, -210.f, 0.f); + + mDowsingTarget.initialize(DowsingTarget::SLOT_RUPEE, 0, nullptr, 0.f); + mDowsingTarget.doRegister(); + mDowsingTarget.setOffset(mVec3_c::Ey * -150.f); + + mStateMgr.changeState(StateID_Wait); + + mMdl.setPriorityDraw(0x1C, 9); + mBoundingBox.Set(mVec3_c(-160.f, -320.f, -160.f), mVec3_c(160.f, 10.f, 160.f)); + mCullingDistance = 50000.f; + return SUCCEEDED; +} + void dAcObell_c::initializeState_Wait() {} void dAcObell_c::executeState_Wait() {} void dAcObell_c::finalizeState_Wait() {} 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 6ce53e52c..c44b90af1 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,5 +1,7 @@ #include "d/a/obj/d_a_obj_bird_statue.h" +#include "d/a/obj/d_a_obj_base.h" + SPECIAL_ACTOR_PROFILE(OBJ_BIRD_STATUE, dAcOBirdStatue_c, fProfile::OBJ_BIRD_STATUE, 0x285, 0, 3); bool dAcOBirdStatue_c::createHeap() { @@ -22,9 +24,7 @@ bool dAcOBirdStatue_c::createHeap() { } int dAcOBirdStatue_c::create() { - if (!initAllocatorWork1Heap(0xffffffff, "dAcOBirdStatue_c::m_allocator", 0x20)) { - return FAILED; - } + CREATE_ALLOCATOR(dAcOBirdStatue_c); updateMatrix(); mMdl.setLocalMtx(mWorldMtx); mVec3_c min, max; diff --git a/src/REL/d/a/obj/d_a_obj_chest.cpp b/src/REL/d/a/obj/d_a_obj_chest.cpp index 2d7d86255..81135a646 100644 --- a/src/REL/d/a/obj/d_a_obj_chest.cpp +++ b/src/REL/d/a/obj/d_a_obj_chest.cpp @@ -109,9 +109,7 @@ bool dAcOChest_c::createHeap() { } int dAcOChest_c::create() { - if (!initAllocatorWork1Heap(0x4000, "dAcOChest_c::m_allocator", 0x20)) { - return FAILED; - } + CREATE_ALLOCATOR_SIZE(dAcOChest_c, 0x4000); mBgW.Lock(); dBgS::GetInstance()->Regist(&mBgW, this); dBgS::GetInstance()->RegistBg(&mBgW, this); diff --git a/src/REL/d/a/obj/d_a_obj_decoB.cpp b/src/REL/d/a/obj/d_a_obj_decoB.cpp index 5de5f8f26..36d3e0751 100644 --- a/src/REL/d/a/obj/d_a_obj_decoB.cpp +++ b/src/REL/d/a/obj/d_a_obj_decoB.cpp @@ -2,6 +2,7 @@ #include "common.h" #include "d/a/d_a_player.h" +#include "d/a/obj/d_a_obj_base.h" #include "f/f_base.h" #include "m/m_vec.h" #include "nw4r/g3d/res/g3d_resfile.h" @@ -20,9 +21,7 @@ bool dAcODecoB_c::createHeap() { } int dAcODecoB_c::create() { - if (!initAllocatorWork1Heap(0x1000, "dAcODecoB_c::m_allocator", 0x20)) { - return FAILED; - } + CREATE_ALLOCATOR_SIZE(dAcODecoB_c, 0x1000); mAcceleration = 0.0f; mMaxSpeed = 0.0f; mStateMgr.changeState(StateID_Wait); diff --git a/src/REL/d/a/obj/d_a_obj_dormitory_gate.cpp b/src/REL/d/a/obj/d_a_obj_dormitory_gate.cpp index 702214c11..c343ad04a 100644 --- a/src/REL/d/a/obj/d_a_obj_dormitory_gate.cpp +++ b/src/REL/d/a/obj/d_a_obj_dormitory_gate.cpp @@ -1,10 +1,134 @@ #include "d/a/obj/d_a_obj_dormitory_gate.h" +#include "common.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_s.h" +#include "d/col/bg/d_bg_w.h" +#include "d/col/c/c_m3d_g_aab.h" +#include "d/d_stage.h" +#include "d/flag/storyflag_manager.h" +#include "f/f_base.h" +#include "m/m_vec.h" +#include "nw4r/g3d/res/g3d_resanmclr.h" +#include "nw4r/g3d/res/g3d_resfile.h" +#include "nw4r/g3d/res/g3d_resmdl.h" +#include "nw4r/g3d/res/g3d_resnode.h" +#include "toBeSorted/arc_managers/current_stage_arc_manager.h" + SPECIAL_ACTOR_PROFILE(OBJ_DORMITORY_GATE, dAcODormitoryGate_c, fProfile::OBJ_DORMITORY_GATE, 0x17A, 0, 3); STATE_DEFINE(dAcODormitoryGate_c, Wait); STATE_DEFINE(dAcODormitoryGate_c, End); +static const char *sGateMdls[4] = { + "StageF000Gate", + "StageF000GodDoor", + "StageF000Shutter", + "StageF400Gate", +}; +static const char *sGateDZB[4] = { + "dzb/StageF000Gate.dzb", + "dzb/StageF000GodDoor.dzb", + "dzb/StageF000Shutter.dzb", + "dzb/StageF400Gate.dzb", +}; +static const char *sGatePLC[4] = { + "dat/StageF000Gate.plc", + "dat/StageF000GodDoor.plc", + "dat/StageF000Shutter.plc", + "dat/StageF400Gate.plc", +}; +bool dAcODormitoryGate_c::createHeap() { + mResFile = nw4r::g3d::ResFile(CurrentStageArcManager::GetInstance()->getData("g3d/stage.brres")); + dStage_c::bindStageResToFile(&mResFile); + dStage_c::bindSkyCmnToResFile(&mResFile); + + nw4r::g3d::ResMdl resMdl = mResFile.GetResMdl(sGateMdls[mSubtype]); + if (mSubtype == TYPE_GATE || mSubtype == TYPE_GATE_F400) { + mNumDoors = 2; + } else { + mNumDoors = 1; + } + + // TODO: Rename - Opens the Doors + fn_534_C80(); + fn_534_D40(); + for (int i = 0; i < mNumDoors; ++i) { + if (!mMdls[i].create(resMdl, &mAllocator, 0x120, 1, nullptr)) { + return false; + } + cBgD_t *dzb = (cBgD_t *)CurrentStageArcManager::GetInstance()->getData(sGateDZB[mSubtype]); + PLC *plc = (PLC *)CurrentStageArcManager::GetInstance()->getData(sGatePLC[mSubtype]); + if (mSubtype != TYPE_GODDOOR) { + mMdls[i].setPriorityDraw(0x1C, -1); + } + + // TODO: Return Type + s32 tmp = !(BOOL)mCollision[i].Set(dzb, plc, 1, &mDoorMtx[i], &mScale); + if (tmp != 0) { + return false; + } + } + + if (mSubtype == TYPE_GODDOOR) { + nw4r::g3d::ResMdl mdl = mResFile.GetResMdl(sGateMdls[mSubtype]); + nw4r::g3d::ResAnmClr anmClr = mResFile.GetResAnmClr("StageF000GodDoor"); + if (!mAnmMatClr.create(mdl, anmClr, &mAllocator, nullptr, 1)) { + return false; + } + mMdls[0].setAnm(mAnmMatClr); + mAnmMatClr.setRate(0.f, 0); + mScnCallback.attach(mMdls[0]); + } + return true; +} + +int dAcODormitoryGate_c::create() { + mSubtype = static_cast(getFromParams(8, 0xFF)); + if (mSubtype == 1 && StoryflagManager::sInstance->getFlag(STORYFLAG_GODDESS_STATUE_ACCESS)) { + return FAILED; + } + + if (mSubtype == TYPE_GATE_F400) { + mStoryflag = getFromParams(16, 0x7FF); + } + + CREATE_ALLOCATOR_SIZE(dAcODormitoryGate_c, 0x2000); + + for (int i = 0; i < mNumDoors; ++i) { + dBgS::GetInstance()->Regist(&mCollision[i], this); + } + + mStateMgr.changeState(StateID_Wait); + + mVec3_c min, max; + switch (mSubtype) { + case TYPE_GATE: + case TYPE_GATE_F400: + min = mVec3_c(-400.f, -0.f, -50.f); + max = mVec3_c(400.f, 600.f, 250.f); + break; + case TYPE_SHUTTER: + min = mVec3_c(-250.f, -0.f, -50.f); + max = mVec3_c(250.f, 400.f, 50.f); + break; + case TYPE_GODDOOR: + min = mVec3_c(-50.f, -0.f, -100.f); + max = mVec3_c(500.f, 500.f, 100.f); + break; + } + mBoundingBox.Set(min, max); + + if (mSubtype == TYPE_GODDOOR) { + mPosition.copyFrom(mMdls[0].getResMdl().GetResNode(0).GetTranslate()); + } + mWorldMtx.transS(mPosition); + mWorldMtx.ZXYrotM(mRotation); + mIsOpen = checkOpenFlag(); + + return SUCCEEDED; +} + void dAcODormitoryGate_c::initializeState_Wait() {} void dAcODormitoryGate_c::executeState_Wait() {} void dAcODormitoryGate_c::finalizeState_Wait() {} 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 abcd43cc8..4bdfa042f 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 @@ -4,6 +4,7 @@ #include "c/c_math.h" #include "common.h" #include "d/a/d_a_player.h" +#include "d/a/obj/d_a_obj_base.h" #include "d/col/bg/d_bg_s.h" #include "d/col/cc/d_cc_s.h" #include "d/flag/sceneflag_manager.h" @@ -116,9 +117,7 @@ int dAcODungeonShip_c::create() { mIsDocked = true; } - if (!initAllocatorWork1Heap(0x40000, "dAcODungeonShip_c::m_allocator", 0x20)) { - return FAILED; - } + CREATE_ALLOCATOR_SIZE(dAcODungeonShip_c, 0x40000); mPathIdx = mParams & 0xFF; if (mPathIdx == 0xFF) { @@ -190,9 +189,7 @@ int dAcODungeonShip_c::actorExecute() { mAnmMatClr.play(); mMdl.calc(false); if (field_0x8D8) { - mEffects[0].holdEffect( - PARTICLE_RESOURCE_ID_MAPPING_682_, mPosition, &mRotation, nullptr, nullptr, nullptr - ); + mEffects[0].holdEffect(PARTICLE_RESOURCE_ID_MAPPING_682_, mPosition, &mRotation, nullptr, nullptr, nullptr); } if (field_0x8D9) { diff --git a/src/REL/d/a/obj/d_a_obj_flag.cpp b/src/REL/d/a/obj/d_a_obj_flag.cpp index ad08d1c6d..c90759890 100644 --- a/src/REL/d/a/obj/d_a_obj_flag.cpp +++ b/src/REL/d/a/obj/d_a_obj_flag.cpp @@ -1,9 +1,219 @@ #include "d/a/obj/d_a_obj_flag.h" +#include "c/c_math.h" +#include "common.h" +#include "d/a/d_a_base.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/a/obj/d_a_obj_desert_ago.h" +#include "d/col/cc/d_cc_d.h" +#include "d/d_sc_game.h" +#include "d/snd/d_snd_wzsound.h" +#include "f/f_base.h" +#include "f/f_manager.h" +#include "f/f_profile_name.h" +#include "m/m_mtx.h" +#include "m/m_vec.h" +#include "nw4r/g3d/res/g3d_resanmtexsrt.h" +#include "nw4r/g3d/res/g3d_resfile.h" +#include "nw4r/g3d/res/g3d_resmdl.h" + SPECIAL_ACTOR_PROFILE(OBJ_FLAG, dAcOFlag_c, fProfile::OBJ_FLAG, 0x14E, 0, 3); STATE_DEFINE(dAcOFlag_c, Wait); +static dCcD_SrcCps sSrcCps = { + // TODO +}; + +bool dAcOFlag_c::createHeap() { + const char *arcName = getArcName(); + const char *mdlName = getMdlName(); + const char *anmName = getAnmTexSrtName(); + + mResFile = nw4r::g3d::ResFile(getOarcResFile(arcName)); + nw4r::g3d::ResMdl resMdl = mResFile.GetResMdl(mdlName); + u32 bufferOption = 0x1003120; + if (anmName) { + bufferOption = 0x1003324; + } + if (!mMdl.create(resMdl, &mAllocator, bufferOption, 1, nullptr)) { + return false; + } + + s32 type = getFromParams(0, 0xF); + if (anmName) { + nw4r::g3d::ResAnmTexSrt texSrt = mResFile.GetResAnmTexSrt(anmName); + if (!mAnmTexSrt.create(resMdl, texSrt, &mAllocator, nullptr, 1)) { + return false; + } + mMdl.setAnm(mAnmTexSrt); + if (type == 2) { + mAnmTexSrt.setFrame(0.f, 0); + } else if (type == 3) { + mAnmTexSrt.setFrame(1.f, 0); + } + mAnmTexSrt.setRate(0.f, 0); + } + + mpJoints = new mVec3_c[mNumJoints]; + if (!mpJoints) { + return false; + } + + for (s32 i = 0; i < mNumJoints; ++i) { + mpJoints[i] = mVec3_c::Zero; + } + + if (type == 1 || type == 2 || type == 3) { + mpJoints1 = new mVec3_c[15]; + if (!mpJoints1) { + return false; + } + mpJoints2 = new mVec3_c[15]; + if (!mpJoints2) { + return false; + } + mpJoints3 = new mVec3_c[15]; + if (!mpJoints3) { + return false; + } + for (int i = 0; i < 15; ++i) { + mpJoints2[i] = mVec3_c::Zero; + mpJoints3[i] = mVec3_c::Zero; + } + } + mMdl.setCallback(&mCallback); + mMdl.enableCallbackOp(nw4r::g3d::ScnObj::EXECOP_CALC_MAT); + mMdl.enableCallbackTiming(nw4r::g3d::ScnObj::CALLBACK_TIMING_C); + + return true; +} + +int dAcOFlag_c::actorCreate() { + s32 type = getFromParams(0, 0xF); + if (isSail()) { + mNumJoints = 104; + } else { + mNumJoints = 21; + } + + CREATE_ALLOCATOR_SIZE(dAcOFlag_c, 0x4000); + + mStts.SetRank(0); + mCps.Set(sSrcCps); + mCps.SetR(sSrcCps.mCpsInf.mRadius * mScale.x); + mCps.SetStts(mStts); + + mAcceleration = -9.8f; + mMaxSpeed = 0.f; + mStateMgr.changeState(StateID_Wait); + + if (type == 1) { + mBoundingBox.Set(mVec3_c(-800.f, -100.f, -800.f), mVec3_c(800.f, 410.f, 800.f)); + } else if (isPurpleFlag()) { + mBoundingBox.Set(mVec3_c(-250.f, -500.f, -250.f), mVec3_c(250.f, 500.f, 250.f)); + } + + mWorldMtx.transS(mPosition); + mWorldMtx.YrotM(mRotation.y); + field_0x530 = cM::rndInt(100); + + switch (type) { + case 1: { + field_0x548 = 0; + if (mScale.x < 0.5f) { + mCullingDistance += 6000.f; + } else { + mCullingDistance += 3000.f; + } + } break; + case 2: + case 3: { + field_0x548 = 1; + } break; + case 4: { + if (mScale.x < 1.f) { + mCullingDistance *= 100.f; + } + mMdl.setPriorityDraw(0x1C, -1); + } break; + case 5: { + mCullingDistance *= 5.f; + mMdl.setPriorityDraw(0x1C, -1); + } + } + return SUCCEEDED; +} + +int dAcOFlag_c::actorPostCreate() { + if (isSail()) { + if (dScGame_c::isCurrentStage("F301_6")) { + if ((s32)getFromParams(0, 0xF) == 4) { + dAcODesertAgo_c *pDesertAgo = + static_cast(fManager_c::searchBaseByProfName(fProfile::OBJ_DESERT_AGO)); + if (!pDesertAgo) { + return FAILED; + } + mDesertAgoRef.link(pDesertAgo); + unsetActorProperty(AC_PROP_0x1 | AC_PROP_0x2); + field_0x530 = 8995; + field_0x564 = 249; + field_0x561 = 0; + } else { + f32 s = 1.f / mScale.x; + mBoundingBox.Set( + mVec3_c(s * -4000.f, s * -2000.f, s * -6000.f), mVec3_c(s * 4000.f, s * 1500.f, s * 4000.f) + ); + } + setActorProperty(AC_PROP_0x4); + } else { + f32 s = 1.f / mScale.x; + mBoundingBox.Set( + mVec3_c(s * -3000.f, s * -4000.f, s * -3000.f), mVec3_c(s * 3000.f, s * 2000.f, s * 3000.f) + ); + } + field_0x558 = 0; + field_0x55C = 91; + } + createPlacement(); + return SUCCEEDED; +} + +int dAcOFlag_c::doDelete() { + return SUCCEEDED; +} + +int dAcOFlag_c::actorExecute() { + field_0x530++; + mStateMgr.executeState(); + + if (isSail()) { + setCollider(); + } + + if ((s32)getFromParams(0, 0xF) == 4) { + mVec3_c v = mVec3_c::Zero; + if (mDesertAgoRef.isLinked()) { + // TODO: Fix for field at 0x86C. Probably translation from matrix + mMtx_c m = mDesertAgoRef.get()->mWorldMtx; + m.getTranslation(v); + } else { + v = mPosition; + } + mWorldMtx.transS(v); + } else { + mWorldMtx.transS(mPosition); + } + mMdl.setLocalMtx(mWorldMtx); + holdSound(SE_Flag_FLUTTER_LV); + return SUCCEEDED; +} + +int dAcOFlag_c::draw() { + drawModelType1(&mMdl); + return SUCCEEDED; +} + void dAcOFlag_c::initializeState_Wait() {} void dAcOFlag_c::executeState_Wait() {} void dAcOFlag_c::finalizeState_Wait() {} diff --git a/src/REL/d/a/obj/d_a_obj_flying_clawshot_target.cpp b/src/REL/d/a/obj/d_a_obj_flying_clawshot_target.cpp index 7265baedc..3bde0aa38 100644 --- a/src/REL/d/a/obj/d_a_obj_flying_clawshot_target.cpp +++ b/src/REL/d/a/obj/d_a_obj_flying_clawshot_target.cpp @@ -46,7 +46,7 @@ const cCcD_SrcGObj dAcOFlyingClawshotTarget_c::sColSrc = { // clang-format on int dAcOFlyingClawshotTarget_c::actorCreate() { - initAllocatorWork1Heap(-1, "dAcOFlyingClawshotTarget_c::m_allocator", 0x20); + CREATE_ALLOCATOR_UNCHECKED(dAcOFlyingClawshotTarget_c); mMdl.setPriorityDraw(0x7F, 0x7F); mWorldMtx.transS(mVec3_c::Zero); diff --git a/src/REL/d/a/obj/d_a_obj_pumpkin_leaf.cpp b/src/REL/d/a/obj/d_a_obj_pumpkin_leaf.cpp index 1cf42d468..970858dc9 100644 --- a/src/REL/d/a/obj/d_a_obj_pumpkin_leaf.cpp +++ b/src/REL/d/a/obj/d_a_obj_pumpkin_leaf.cpp @@ -1,5 +1,6 @@ #include "d/a/obj/d_a_obj_pumpkin_leaf.h" +#include "d/a/obj/d_a_obj_base.h" #include "nw4r/g3d/res/g3d_resfile.h" #include "s/s_Math.h" @@ -15,9 +16,7 @@ bool dAcOPumpkinLeaf_c::createHeap() { } int dAcOPumpkinLeaf_c::create() { - if (!initAllocatorWork1Heap(0x1000, "dAcOPumpkinLeaf_c::m_allocator", 0x20)) { - return FAILED; - } + CREATE_ALLOCATOR_SIZE(dAcOPumpkinLeaf_c, 0x1000); mAcceleration = -1.0f; mMaxSpeed = -40.0f; diff --git a/src/REL/d/a/obj/d_a_obj_spike.cpp b/src/REL/d/a/obj/d_a_obj_spike.cpp index 3a38eda4f..9cec98085 100644 --- a/src/REL/d/a/obj/d_a_obj_spike.cpp +++ b/src/REL/d/a/obj/d_a_obj_spike.cpp @@ -1,5 +1,6 @@ #include "d/a/obj/d_a_obj_spike.h" +#include "d/a/obj/d_a_obj_base.h" #include "d/col/cc/d_cc_s.h" SPECIAL_ACTOR_PROFILE(OBJ_SPIKE, dAcOspike_c, fProfile::OBJ_SPIKE, 0x1D9, 0, 2); @@ -25,9 +26,7 @@ bool dAcOspike_c::createHeap() { } int dAcOspike_c::create() { - if (!initAllocatorWork1Heap(-1, "dAcOspike_c::m_allocator", 0x20)) { - return FAILED; - } + CREATE_ALLOCATOR(dAcOspike_c); mStts.SetDefaultRank(); mCollision.Set(sCcSrc); diff --git a/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp b/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp index 6b651ba0a..e5f146df4 100644 --- a/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp +++ b/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp @@ -1,6 +1,7 @@ #include "d/a/obj/d_a_obj_toD3_stone_figure.h" #include "d/a/d_a_item.h" +#include "d/a/obj/d_a_obj_base.h" #include "d/col/cc/d_cc_s.h" #include "d/d_sc_game.h" #include "d/flag/storyflag_manager.h" @@ -39,9 +40,8 @@ int dAcOtoD3StoneFigure_c::create() { mIsSkyKeepAlreadyOpen = isStoneOfTrialsPlaced(); mExitId = mParams & 0xFF; updateMatrix(); - if (!initAllocatorWork1Heap(-1, "dAcOtoD3StoneFigure_c::m_allocator", 0x20)) { - return FAILED; - } + + CREATE_ALLOCATOR(dAcOtoD3StoneFigure_c); mMdl.setLocalMtx(mWorldMtx); mStts.SetDefaultRank(); diff --git a/src/REL/d/a/obj/d_a_obj_tower_gearD101.cpp b/src/REL/d/a/obj/d_a_obj_tower_gearD101.cpp index 8737934d7..09ebb0dde 100644 --- a/src/REL/d/a/obj/d_a_obj_tower_gearD101.cpp +++ b/src/REL/d/a/obj/d_a_obj_tower_gearD101.cpp @@ -34,9 +34,7 @@ bool dAcOTowerGearD101_c::createHeap() { } int dAcOTowerGearD101_c::actorCreate() { - if (!initAllocatorWork1Heap(0x1000, "dAcOTowerGearD101_c::m_allocator", 0x20)) { - return FAILED; - } + CREATE_ALLOCATOR_SIZE(dAcOTowerGearD101_c, 0x1000); nw4r::g3d::ResMdl mdl = mMdl.getResMdl(); mMdlCallback.init(mdl.GetResNode("model0").GetID()); mMdl.setCallback(&mMdlCallback); @@ -128,7 +126,5 @@ void dAcOTowerGearD101_c::initTransform() { } void dAcOTowerGearD101_c::playVisualEffect() { - mEffects.holdEffect( - PARTICLE_RESOURCE_ID_MAPPING_572_, field_0x3F4, &mRotation, nullptr, nullptr, nullptr - ); + mEffects.holdEffect(PARTICLE_RESOURCE_ID_MAPPING_572_, field_0x3F4, &mRotation, nullptr, nullptr, nullptr); } diff --git a/src/REL/d/a/obj/d_a_obj_triforce.cpp b/src/REL/d/a/obj/d_a_obj_triforce.cpp index 3b6937f15..4c17ba029 100644 --- a/src/REL/d/a/obj/d_a_obj_triforce.cpp +++ b/src/REL/d/a/obj/d_a_obj_triforce.cpp @@ -1,6 +1,7 @@ #include "d/a/obj/d_a_obj_triforce.h" #include "c/c_math.h" +#include "d/a/obj/d_a_obj_base.h" #include "d/col/cc/d_cc_s.h" #include "m/m_vec.h" #include "nw4r/g3d/res/g3d_resfile.h" @@ -32,9 +33,7 @@ bool dAcOtriforce_c::createHeap() { } int dAcOtriforce_c::create() { - if (!initAllocatorWork1Heap(-1, "dAcOtriforce_c::m_allocator", 0x20)) { - return FAILED; - } + CREATE_ALLOCATOR(dAcOtriforce_c); mStts.SetDefaultRank(); mCollision.Set(sCcSrc); diff --git a/src/REL/d/a/obj/d_a_obj_underground_switch.cpp b/src/REL/d/a/obj/d_a_obj_underground_switch.cpp index 2424d2d16..aca8de7f7 100644 --- a/src/REL/d/a/obj/d_a_obj_underground_switch.cpp +++ b/src/REL/d/a/obj/d_a_obj_underground_switch.cpp @@ -40,9 +40,7 @@ int dAcOUgSwitch_c::create() { mActiveSceneFlag = mParams & 0xFF; field_0x3BD = (mParams >> 8) & 0xFF; setVariant((mParams >> 16) & 0xF); - if (!initAllocatorWork1Heap(0x1000, "dAcOUgSwitch_c::m_allocator", 0x20)) { - return FAILED; - } + CREATE_ALLOCATOR_SIZE(dAcOUgSwitch_c, 0x1000); mOnEventTimer = 0; updateMatrix(); diff --git a/src/REL/d/t/d_t_reaction.cpp b/src/REL/d/t/d_t_reaction.cpp index 26918ab6e..5ede15d29 100644 --- a/src/REL/d/t/d_t_reaction.cpp +++ b/src/REL/d/t/d_t_reaction.cpp @@ -4,6 +4,7 @@ #include "c/c_math.h" #include "d/a/d_a_item.h" #include "d/a/d_a_player.h" +#include "d/a/obj/d_a_obj_base.h" #include "d/col/c/c_cc_d.h" #include "d/col/cc/d_cc_s.h" #include "d/d_pouch.h" @@ -33,9 +34,7 @@ bool dTgReaction_c::createHeap() { int dTgReaction_c::create() { // Note the double _c here - if (!initAllocatorWork1Heap(0x1000, "dTgReaction_c_c::m_allocator", 0x20)) { - return FAILED; - } + CREATE_ALLOCATOR_SIZE(dTgReaction_c_c, 0x1000); if (getReactType() != REACT_UNDERWATER) { if (getSceneFlag() >= 0xFF) {