From 53eea0cc9f4da7925ab2d4c2131ab182e0d18b39 Mon Sep 17 00:00:00 2001 From: elijah-thomas774 Date: Sat, 18 Apr 2026 08:53:27 -0400 Subject: [PATCH] misc dAcOFlag_c --- config/SOUE01/rels/d_a_obj_flagNP/symbols.txt | 30 ++++---- include/d/a/d_a_base.h | 1 + include/d/a/obj/d_a_obj_flag.h | 16 +++- src/REL/d/a/obj/d_a_obj_flag.cpp | 76 +++++++++++++++++++ 4 files changed, 105 insertions(+), 18 deletions(-) diff --git a/config/SOUE01/rels/d_a_obj_flagNP/symbols.txt b/config/SOUE01/rels/d_a_obj_flagNP/symbols.txt index f3dfe5b1..d442d8a5 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 360397b2..2eae40a1 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_flag.h b/include/d/a/obj/d_a_obj_flag.h index 88ac57f8..06debca0 100644 --- a/include/d/a/obj/d_a_obj_flag.h +++ b/include/d/a/obj/d_a_obj_flag.h @@ -2,6 +2,7 @@ #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" @@ -10,8 +11,8 @@ #include "nw4r/g3d/g3d_scnobj.h" #include "nw4r/g3d/res/g3d_resfile.h" #include "s/s_State.hpp" -#include "toBeSorted/stage_render_stuff.h" +class dAcODesertAgo_c; class dAcOFlag_c : public dAcObjBase_c { public: class callback_c : public nw4r::g3d::IScnObjCallback { @@ -31,6 +32,9 @@ public: STATE_FUNC_DECLARE(dAcOFlag_c, Wait); + void setCollider(); + void createPlacement(); + bool isSail(); bool isPurpleFlag(); const char *getArcName(); @@ -47,9 +51,15 @@ private: /* 0x530 */ s32 field_0x530; /* 0x534 */ s32 mNumJoints; /* 0x538 */ mVec3_c *mpJoints; - /* 0x53C */ u8 _0x538[0x548 - 0x53C]; + /* 0x53C */ mVec3_c field_0x53C; /* 0x548 */ s32 field_0x548; - /* 0x54C */ u8 _0x54C[0x56C - 0x54C]; + /* 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 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 78049595..c9075989 100644 --- a/src/REL/d/a/obj/d_a_obj_flag.cpp +++ b/src/REL/d/a/obj/d_a_obj_flag.cpp @@ -2,9 +2,16 @@ #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" @@ -138,6 +145,75 @@ int dAcOFlag_c::actorCreate() { 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() {}