From 0f7e070c1421fd540da6f55f1a362b306a34c847 Mon Sep 17 00:00:00 2001 From: gymnast86 Date: Tue, 30 Sep 2025 09:18:33 -0700 Subject: [PATCH 1/5] obj_warp_hole work --- include/d/a/npc/d_a_npc_kensei.h | 8 ++ include/d/a/obj/d_a_obj_warp_hole.h | 22 ++++- src/REL/d/a/obj/d_a_obj_warp_hole.cpp | 114 ++++++++++++++++++++++++++ 3 files changed, 143 insertions(+), 1 deletion(-) diff --git a/include/d/a/npc/d_a_npc_kensei.h b/include/d/a/npc/d_a_npc_kensei.h index 2d2c77eb..292f8e31 100644 --- a/include/d/a/npc/d_a_npc_kensei.h +++ b/include/d/a/npc/d_a_npc_kensei.h @@ -10,8 +10,16 @@ public: dAcNpcKensei_c() : mStateMgr(*this, sStateID::null) {} virtual ~dAcNpcKensei_c() {} + static dAcNpcKensei_c* GetInstance() { + return sInstance; + } + private: + static dAcNpcKensei_c *sInstance; + /* 0x??? */ STATE_MGR_DECLARE(dAcNpcKensei_c); }; + + #endif diff --git a/include/d/a/obj/d_a_obj_warp_hole.h b/include/d/a/obj/d_a_obj_warp_hole.h index 1df439af..4defe361 100644 --- a/include/d/a/obj/d_a_obj_warp_hole.h +++ b/include/d/a/obj/d_a_obj_warp_hole.h @@ -2,13 +2,33 @@ #define D_A_OBJ_WARP_HOLE_H #include "d/a/obj/d_a_obj_base.h" +#include "d/col/cc/d_cc_d.h" +#include "toBeSorted/actor_event.h" +#include "toBeSorted/d_emitter.h" class dAcOwarpHole_c : public dAcObjBase_c { public: - dAcOwarpHole_c() {} + dAcOwarpHole_c() : mEvent(*this, nullptr) {} virtual ~dAcOwarpHole_c() {} + virtual bool createHeap() override; + virtual int create() override; + + virtual int doDelete() override; + virtual int actorExecute() override; + virtual int actorExecuteInEvent() override; + virtual int draw() override; + private: + /* 0x330 */ dCcD_Cyl mCcCyl; + /* 0x480 */ EffectsStruct mEff; + /* 0x4B4 */ ActorEventRelated mEvent; + /* 0x504 */ mVec3_c mLinkPos; + /* 0x510 */ u8 mExitListIdx; + /* 0x511 */ u8 mWalkFramesMaybe; + + static dCcD_SrcCyl sCylSrc; + static const float dummy600; }; #endif diff --git a/src/REL/d/a/obj/d_a_obj_warp_hole.cpp b/src/REL/d/a/obj/d_a_obj_warp_hole.cpp index 958f7d87..3092cdd7 100644 --- a/src/REL/d/a/obj/d_a_obj_warp_hole.cpp +++ b/src/REL/d/a/obj/d_a_obj_warp_hole.cpp @@ -1,3 +1,117 @@ #include "d/a/obj/d_a_obj_warp_hole.h" +#include "c/c_lib.h" +#include "d/a/d_a_player.h" +#include "d/a/npc/d_a_npc_talk_kensei.h" +#include "d/col/cc/d_cc_s.h" +#include "d/d_sc_game.h" +#include "toBeSorted/event_manager.h" + SPECIAL_ACTOR_PROFILE(OBJ_WARP_HOLE, dAcOwarpHole_c, fProfile::OBJ_WARP_HOLE, 0x25C, 0, 0); + +dCcD_SrcCyl dAcOwarpHole_c::sCylSrc = { + /* mObjInf */ + {/* mObjAt */ {0, 0, {0, 0, 0}, 0, 0, 0, 0, 0, 0}, + /* mObjTg */ + {~(AT_TYPE_BUGNET | AT_TYPE_0x80000 | AT_TYPE_BEETLE | AT_TYPE_WIND | AT_TYPE_0x8000), 0x111, {0, 0, 0x407}, 0, 0}, + /* mObjCo */ {0x29}}, + /* mCylInf */ + {320.f, 300.f} +}; + +// Unused(?) 600.0f float at start of rodata +const float dAcOwarpHole_c::dummy600 = 600.0f; + +bool dAcOwarpHole_c::createHeap() { + return true; +} + +int dAcOwarpHole_c::create() { + mExitListIdx = mParams; + CREATE_ALLOCATOR(dAcOwarpHole_c); + mStts.SetRank(0xD); + mCcCyl.Set(sCylSrc); + mCcCyl.SetStts(mStts); + dCcS::GetInstance()->Set(&mCcCyl); + mCcCyl.OnCoSet(); + mCcCyl.ClrTgSet(); + mLinkPos = dAcPy_c::GetLink()->mPosition; + mEff.init(this); + mWalkFramesMaybe = 0; + mPositionCopy2 = mPosition; + mPositionCopy2.y += 170.0f; + mPositionCopy3 = mPositionCopy2; + + return SUCCEEDED; +} + +int dAcOwarpHole_c::doDelete() { + return SUCCEEDED; +} + +int dAcOwarpHole_c::actorExecute() { + if (!dAcPy_c::GetLink()->checkObjectProperty(0x200) && getDistanceTo(dAcPy_c::GetLinkM()->mPosition) < 600.0f) { + Event ev = Event("BeforeLastBossBattleTalk", 100, 0x100001, nullptr, nullptr); + EventManager::alsoSetAsCurrentEvent(dAcNpcTalkKensei_c::GetInstance(), &ev, nullptr); + } + + dCcS::GetInstance()->Set(&mCcCyl); + updateMatrix(); + mEff.createContinuousEffect(PARTICLE_RESOURCE_ID_MAPPING_914_, mWorldMtx, nullptr, nullptr); + holdSound(0xC90); + + return SUCCEEDED; +} + +int dAcOwarpHole_c::actorExecuteInEvent() { + mEff.createContinuousEffect(PARTICLE_RESOURCE_ID_MAPPING_914_, mWorldMtx, nullptr, nullptr); + holdSound(0xC90); + bool advance = mEvent.isAdvance(); + mPositionCopy2 = mPosition; + mPositionCopy2.y += 170.0f; + s16 targetAngleY; + + switch (mEvent.getCurrentEventCommand()) { + case 'none': mEvent.advanceNext(); break; + case 'plwk': + if (advance) { + mLinkPos = dAcPy_c::GetLink()->mPosition; + targetAngleY = cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition); + mLinkPos.x += 330.0f * nw4r::math::SinIdx(targetAngleY); + mLinkPos.z += 330.0f * nw4r::math::CosIdx(targetAngleY); + } + if (EventManager::isInEvent()) { + if (EventManager::isCurrentEvent("BeforeLastBossBattleChicken")) { + dAcPy_c::GetLinkM()->vt_0x2AC(); + dAcPy_c::GetLinkM()->triggerMoveEventMaybe(); // TODO: parameters + } + } + if (dAcPy_c::GetLinkM()->mPosition.absXZTo(mLinkPos) < 10.0f) { + mEvent.advanceNext(); + } + break; + case 'warp': + if (advance) { + dJEffManager_c::spawnEffect(PARTICLE_RESOURCE_ID_MAPPING_916_, mWorldMtx, nullptr, nullptr, 0, 0); + mWalkFramesMaybe = 80; + } + if (mWalkFramesMaybe) { + mWalkFramesMaybe -= 1; + } + if (mWalkFramesMaybe == 77) { + dAcPy_c::GetLinkM()->setObjectProperty(OBJ_PROP_0x200); + } + if (mWalkFramesMaybe == 20) { + dScGame_c::GetInstance()->triggerExit(mRoomID, mExitListIdx); + } + if (!mWalkFramesMaybe) { + mEvent.advanceNext(); + } + } + + return SUCCEEDED; +} + +int dAcOwarpHole_c::draw() { + return SUCCEEDED; +} From bb05c5239fd4aed380e5777b920c64bd0fcb79ce Mon Sep 17 00:00:00 2001 From: gymnast86 Date: Tue, 30 Sep 2025 22:12:09 -0700 Subject: [PATCH 2/5] fix stuff --- config/SOUE01/rels/d_a_obj_warpNP/symbols.txt | 100 +++++++++--------- .../rels/d_a_obj_warp_holeNP/symbols.txt | 28 ++--- include/d/d_player_act.h | 2 +- src/REL/d/a/obj/d_a_obj_warp_hole.cpp | 40 ++++--- 4 files changed, 88 insertions(+), 82 deletions(-) diff --git a/config/SOUE01/rels/d_a_obj_warpNP/symbols.txt b/config/SOUE01/rels/d_a_obj_warpNP/symbols.txt index f90b0220..c456a64a 100644 --- a/config/SOUE01/rels/d_a_obj_warpNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_warpNP/symbols.txt @@ -5,27 +5,27 @@ __register_global_object = .text:0x00000070; // type:function size:0x1C scope:gl __destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global dAcOWarp_c_classInit__Fv = .text:0x000000F0; // type:function size:0x258 __dt__10dAcOWarp_cFv = .text:0x00000350; // type:function size:0x58 -fn_292_3B0 = .text:0x000003B0; // type:function size:0x3C -fn_292_3F0 = .text:0x000003F0; // type:function size:0x64 +__ct__Q23m3d8anmChr_cFv = .text:0x000003B0; // type:function size:0x3C +__ct__Q23m3d11anmMatClr_cFv = .text:0x000003F0; // type:function size:0x64 fn_292_460 = .text:0x00000460; // type:function size:0x40 fn_292_4A0 = .text:0x000004A0; // type:function size:0x58 __dt__23sFState_c<10dAcOWarp_c>Fv = .text:0x00000500; // type:function size:0x58 __dt__26sFStateFct_c<10dAcOWarp_c>Fv = .text:0x00000560; // type:function size:0x6C __dt__79sStateMgr_c<10dAcOWarp_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000005D0; // type:function size:0xA0 __dt__49sFStateMgr_c<10dAcOWarp_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000670; // type:function size:0xA4 -AcOWarp__initModels = .text:0x00000720; // type:function size:0x4C -AcOWarp__init = .text:0x00000770; // type:function size:0x594 +createHeap__10dAcOWarp_cFv = .text:0x00000720; // type:function size:0x4C +create__10dAcOWarp_cFv = .text:0x00000770; // type:function size:0x594 changeState__79sStateMgr_c<10dAcOWarp_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000D10; // type:function size:0x10 -AcOWarp__init2 = .text:0x00000D20; // type:function size:0xE0 +init2__10dAcOWarp_cFv = .text:0x00000D20; // type:function size:0xE0 getStateID__79sStateMgr_c<10dAcOWarp_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000E00; // type:function size:0x10 -fn_292_E10 = .text:0x00000E10; // type:function size:0x10C -AcOWarp__update = .text:0x00000F20; // type:function size:0x2C8 +fn_292_E10__10dAcOWarp_cFv = .text:0x00000E10; // type:function size:0x10C +update__10dAcOWarp_cFv = .text:0x00000F20; // type:function size:0x2C8 executeState__79sStateMgr_c<10dAcOWarp_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000011F0; // type:function size:0x10 -fn_292_1200 = .text:0x00001200; // type:function size:0x134 -fn_292_1340 = .text:0x00001340; // type:function size:0x328 -AcOWarp__updateInEvent = .text:0x00001670; // type:function size:0x530 -AcOWarp__decr = .text:0x00001BA0; // type:function size:0x1C -AcOWarp__draw = .text:0x00001BC0; // type:function size:0xC8 +fun_292_1200__10dAcOWarp_cFi = .text:0x00001200; // type:function size:0x134 +fun_292_1340__10dAcOWarp_cFv = .text:0x00001340; // type:function size:0x328 +updateInEvent__10dAcOWarp_cFv = .text:0x00001670; // type:function size:0x530 +decr__10dAcOWarp_cFRSc_Sc = .text:0x00001BA0; // type:function size:0x1C +draw__10dAcOWarp_cFv = .text:0x00001BC0; // type:function size:0xC8 initializeState_Wait__10dAcOWarp_cFv = .text:0x00001C90; // type:function size:0x4 executeState_Wait__10dAcOWarp_cFv = .text:0x00001CA0; // type:function size:0x33C finalizeState_Wait__10dAcOWarp_cFv = .text:0x00001FE0; // type:function size:0x4 @@ -48,41 +48,41 @@ finalizeState_GateIn__10dAcOWarp_cFv = .text:0x00002D30; // type:function size:0 initializeState_GateClear__10dAcOWarp_cFv = .text:0x00002D40; // type:function size:0x9C executeState_GateClear__10dAcOWarp_cFv = .text:0x00002DE0; // type:function size:0x168 finalizeState_GateClear__10dAcOWarp_cFv = .text:0x00002F50; // type:function size:0x4 -fn_292_2F60 = .text:0x00002F60; // type:function size:0xDC -AcOWarp__triggerOutExitOfTrial = .text:0x00003040; // type:function size:0x64 -fn_292_30B0 = .text:0x000030B0; // type:function size:0x9C -fn_292_3150 = .text:0x00003150; // type:function size:0x578 -fn_292_36D0 = .text:0x000036D0; // type:function size:0x278 -fn_292_3950 = .text:0x00003950; // type:function size:0x9C -fn_292_39F0 = .text:0x000039F0; // type:function size:0xE8 -fn_292_3AE0 = .text:0x00003AE0; // type:function size:0x3DC -fn_292_3EC0 = .text:0x00003EC0; // type:function size:0x228 -fn_292_40F0 = .text:0x000040F0; // type:function size:0xBC -AcOWarp__checkHasSongItem = .text:0x000041B0; // type:function size:0x104 -fn_292_42C0 = .text:0x000042C0; // type:function size:0xD8 -fn_292_43A0 = .text:0x000043A0; // type:function size:0x284 -AcOWarp__shouldDowse = .text:0x00004630; // type:function size:0x18C -fn_292_47C0 = .text:0x000047C0; // type:function size:0x124 -fn_292_48F0 = .text:0x000048F0; // type:function size:0x4 -fn_292_4900 = .text:0x00004900; // type:function size:0x44 -fn_292_4950 = .text:0x00004950; // type:function size:0xC -fn_292_4960 = .text:0x00004960; // type:function size:0xC -fn_292_4970 = .text:0x00004970; // type:function size:0xC -fn_292_4980 = .text:0x00004980; // type:function size:0x8 -fn_292_4990 = .text:0x00004990; // type:function size:0x8 -fn_292_49A0 = .text:0x000049A0; // type:function size:0x50 -fn_292_49F0 = .text:0x000049F0; // type:function size:0x8 -fn_292_4A00 = .text:0x00004A00; // type:function size:0x58 -fn_292_4A60 = .text:0x00004A60; // type:function size:0x1E0 -fn_292_4C40 = .text:0x00004C40; // type:function size:0x4 -fn_292_4C50 = .text:0x00004C50; // type:function size:0x4 -fn_292_4C60 = .text:0x00004C60; // type:function size:0x4 -fn_292_4C70 = .text:0x00004C70; // type:function size:0x8 -fn_292_4C80 = .text:0x00004C80; // type:function size:0x4 -fn_292_4C90 = .text:0x00004C90; // type:function size:0x4 -fn_292_4CA0 = .text:0x00004CA0; // type:function size:0x4 -fn_292_4CB0 = .text:0x00004CB0; // type:function size:0x4 -fn_292_4CC0 = .text:0x00004CC0; // type:function size:0x4 +fun_292_2F60__10dAcOWarp_cFv = .text:0x00002F60; // type:function size:0xDC +triggerOutExitOfTrial__10dAcOWarp_cFv = .text:0x00003040; // type:function size:0x64 +fun_292_30B0__10dAcOWarp_cFv = .text:0x000030B0; // type:function size:0x9C +fun_292_3150__10dAcOWarp_cFv = .text:0x00003150; // type:function size:0x578 +fun_292_36D0__10dAcOWarp_cFv = .text:0x000036D0; // type:function size:0x278 +fun_292_3950__10dAcOWarp_cFv = .text:0x00003950; // type:function size:0x9C +fun_292_39F0__10dAcOWarp_cFv = .text:0x000039F0; // type:function size:0xE8 +fun_292_3AE0__10dAcOWarp_cFv = .text:0x00003AE0; // type:function size:0x3DC +fun_292_3EC0__10dAcOWarp_cFv = .text:0x00003EC0; // type:function size:0x228 +fun_292_40F0__10dAcOWarp_cFv = .text:0x000040F0; // type:function size:0xBC +checkHasSongItem__10dAcOWarp_cFi = .text:0x000041B0; // type:function size:0x104 +fun_292_42C0__10dAcOWarp_cFv = .text:0x000042C0; // type:function size:0xD8 +fun_292_43A0__10dAcOWarp_cFv = .text:0x000043A0; // type:function size:0x284 +shouldDowse__10dAcOWarp_cFv = .text:0x00004630; // type:function size:0x18C +fun_292_47C0__10dAcOWarp_cFlUl = .text:0x000047C0; // type:function size:0x124 +fun_292_48F0__10dAcOWarp_cFv = .text:0x000048F0; // type:function size:0x4 +fun_292_4900__10dAcOWarp_cFv = .text:0x00004900; // type:function size:0x44 +fun_292_4950__10dAcOWarp_cFv = .text:0x00004950; // type:function size:0xC +fun_292_4960__10dAcOWarp_cFv = .text:0x00004960; // type:function size:0xC +fun_292_4970__10dAcOWarp_cFv = .text:0x00004970; // type:function size:0xC +fun_292_4980__10dAcOWarp_cFv = .text:0x00004980; // type:function size:0x8 +fun_292_4990__10dAcOWarp_cFv = .text:0x00004990; // type:function size:0x8 +fun_292_49A0__10dAcOWarp_cFv = .text:0x000049A0; // type:function size:0x50 +fun_292_49F0__10dAcOWarp_cFv = .text:0x000049F0; // type:function size:0x8 +fun_292_4A00__10dAcOWarp_cFv = .text:0x00004A00; // type:function size:0x58 +__dt__10dAcOWarp_cFv = .text:0x00004A60; // type:function size:0x1E0 +fun_292_4C40__10dAcOWarp_cFv = .text:0x00004C40; // type:function size:0x4 +fun_292_4C50__10dAcOWarp_cFv = .text:0x00004C50; // type:function size:0x4 +fun_292_4C60__10dAcOWarp_cFv = .text:0x00004C60; // type:function size:0x4 +fun_292_4C70__10dAcOWarp_cFv = .text:0x00004C70; // type:function size:0x8 +fun_292_4C80__10dAcOWarp_cFv = .text:0x00004C80; // type:function size:0x4 +fun_292_4C90__10dAcOWarp_cFv = .text:0x00004C90; // type:function size:0x4 +fun_292_4CA0__10dAcOWarp_cFv = .text:0x00004CA0; // type:function size:0x4 +fun_292_4CB0__10dAcOWarp_cFv = .text:0x00004CB0; // type:function size:0x4 +fun_292_4CC0__10dAcOWarp_cFv = .text:0x00004CC0; // type:function size:0x4 build__26sFStateFct_c<10dAcOWarp_c>FRC12sStateIDIf_c = .text:0x00004CD0; // type:function size:0x60 dispose__26sFStateFct_c<10dAcOWarp_c>FRP10sStateIf_c = .text:0x00004D30; // type:function size:0xC initialize__23sFState_c<10dAcOWarp_c>Fv = .text:0x00004D40; // type:function size:0x1C @@ -118,12 +118,12 @@ lbl_292_data_0 = .data:0x00000000; // type:object size:0x8 data:4byte g_profile_OBJ_WARP = .data:0x00000008; // type:object size:0x10 lbl_292_data_18 = .data:0x00000018; // type:object size:0x68 lbl_292_data_80 = .data:0x00000080; // type:object size:0x10 -lbl_292_data_90 = .data:0x00000090; // type:object size:0x64 +@30111 = .data:0x00000090; // type:object size:0x64 lbl_292_data_F4 = .data:0x000000F4; // type:object size:0x128 lbl_292_data_21C = .data:0x0000021C; // type:object size:0x4 data:4byte -lbl_292_data_220 = .data:0x00000220; // type:object size:0x18 data:string +@36553 = .data:0x00000220; // type:object size:0x18 data:string lbl_292_data_238 = .data:0x00000238; // type:object size:0x8 -AcOWarp__vtable = .data:0x00000240; // type:object size:0xB0 +__vt__25sFStateID_c<10dAcOWarp_c> = .data:0x00000240; // type:object size:0xB0 lbl_292_data_2F0 = .data:0x000002F0; // type:object size:0x30 lbl_292_data_320 = .data:0x00000320; // type:object size:0x30 lbl_292_data_350 = .data:0x00000350; // type:object size:0x18 diff --git a/config/SOUE01/rels/d_a_obj_warp_holeNP/symbols.txt b/config/SOUE01/rels/d_a_obj_warp_holeNP/symbols.txt index 60e8abc3..bd1b9747 100644 --- a/config/SOUE01/rels/d_a_obj_warp_holeNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_warp_holeNP/symbols.txt @@ -2,21 +2,21 @@ _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 dAcOwarpHole_c_classInit__Fv = .text:0x00000070; // type:function size:0x6C -fn_619_E0 = .text:0x000000E0; // type:function size:0x8 -AcOwarpHole__init = .text:0x000000F0; // type:function size:0xF8 -fn_619_1F0 = .text:0x000001F0; // type:function size:0x8 -AcOwarpHole__update = .text:0x00000200; // type:function size:0xDC -AcOwarpHole__updateInEvent = .text:0x000002E0; // type:function size:0x350 -fn_619_630 = .text:0x00000630; // type:function size:0x8 +createHeap__14dAcOwarpHole_cFv = .text:0x000000E0; // type:function size:0x8 +create__14dAcOwarpHole_cFv = .text:0x000000F0; // type:function size:0xF8 +doDelete__14dAcOwarpHole_cFv = .text:0x000001F0; // type:function size:0x8 +actorExecute__14dAcOwarpHole_cFv = .text:0x00000200; // type:function size:0xDC +actorExecuteInEvent__14dAcOwarpHole_cFv = .text:0x000002E0; // type:function size:0x350 +draw__14dAcOwarpHole_cFv = .text:0x00000630; // type:function size:0x8 __dt__14dAcOwarpHole_cFv = .text:0x00000640; // type:function size:0x80 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global -lbl_619_rodata_0 = .rodata:0x00000000; // type:object size:0x4 data:float -lbl_619_rodata_4 = .rodata:0x00000004; // type:object size:0x4 align:4 data:float -lbl_619_rodata_8 = .rodata:0x00000008; // type:object size:0x10 align:4 data:float +dummy600__14dAcOwarpHole_c = .rodata:0x00000000; // type:object size:0x4 data:float +@24817 = .rodata:0x00000004; // type:object size:0x4 align:4 data:float +@24840 = .rodata:0x00000008; // type:object size:0x10 align:4 data:float g_profile_OBJ_WARP_HOLE = .data:0x00000000; // type:object size:0x10 -lbl_619_data_10 = .data:0x00000010; // type:object size:0x30 -lbl_619_data_40 = .data:0x00000040; // type:object size:0x1C data:string -lbl_619_data_5C = .data:0x0000005C; // type:object size:0x1C -lbl_619_data_78 = .data:0x00000078; // type:object size:0x20 -AcOwarpHole__vtable = .data:0x00000098; // type:object size:0x80 +sCylSrc__14dAcOwarpHole_c = .data:0x00000010; // type:object size:0x30 +@24816 = .data:0x00000040; // type:object size:0x1C data:string +@24841 = .data:0x0000005C; // type:object size:0x19 align:4 data:string +@24908 = .data:0x00000078; // type:object size:0x1C align:8 data:string +__vt__14dAcOwarpHole_c = .data:0x00000098; // type:object size:0x80 diff --git a/include/d/d_player_act.h b/include/d/d_player_act.h index b06ba8fa..9437cb4a 100644 --- a/include/d/d_player_act.h +++ b/include/d/d_player_act.h @@ -412,7 +412,7 @@ public: /* vt 0x2A8 */ virtual void lookTowardItem() {} /* vt 0x2AC */ virtual void vt_0x2AC() {} /* vt 0x2B0 */ virtual void vt_0x2B0() {} - /* vt 0x2B4 */ virtual void triggerMoveEventMaybe() {} + /* vt 0x2B4 */ virtual void triggerMoveEventMaybe(u32, u32, u32, mVec3_c &, u16, u32, u32) {} /* vt 0x2B8 */ virtual void setActorRef9() {} /* vt 0x2BC */ virtual void unlinkActorRef9() {} /* vt 0x2C0 */ virtual bool vt_0x2C0() { diff --git a/src/REL/d/a/obj/d_a_obj_warp_hole.cpp b/src/REL/d/a/obj/d_a_obj_warp_hole.cpp index 3092cdd7..183a64e4 100644 --- a/src/REL/d/a/obj/d_a_obj_warp_hole.cpp +++ b/src/REL/d/a/obj/d_a_obj_warp_hole.cpp @@ -5,6 +5,7 @@ #include "d/a/npc/d_a_npc_talk_kensei.h" #include "d/col/cc/d_cc_s.h" #include "d/d_sc_game.h" +#include "d/snd/d_snd_wzsound.h" #include "toBeSorted/event_manager.h" SPECIAL_ACTOR_PROFILE(OBJ_WARP_HOLE, dAcOwarpHole_c, fProfile::OBJ_WARP_HOLE, 0x25C, 0, 0); @@ -38,8 +39,7 @@ int dAcOwarpHole_c::create() { mLinkPos = dAcPy_c::GetLink()->mPosition; mEff.init(this); mWalkFramesMaybe = 0; - mPositionCopy2 = mPosition; - mPositionCopy2.y += 170.0f; + mPositionCopy2.set(mPosition.x, mPosition.y + 170.0f, mPosition.z); mPositionCopy3 = mPositionCopy2; return SUCCEEDED; @@ -58,44 +58,49 @@ int dAcOwarpHole_c::actorExecute() { dCcS::GetInstance()->Set(&mCcCyl); updateMatrix(); mEff.createContinuousEffect(PARTICLE_RESOURCE_ID_MAPPING_914_, mWorldMtx, nullptr, nullptr); - holdSound(0xC90); + holdSound(SE_WarpH_Wait); return SUCCEEDED; } int dAcOwarpHole_c::actorExecuteInEvent() { mEff.createContinuousEffect(PARTICLE_RESOURCE_ID_MAPPING_914_, mWorldMtx, nullptr, nullptr); - holdSound(0xC90); + holdSound(SE_WarpH_Wait); + int retVal = NOT_READY; bool advance = mEvent.isAdvance(); - mPositionCopy2 = mPosition; - mPositionCopy2.y += 170.0f; - s16 targetAngleY; + mPositionCopy2.set(mPosition.x, mPosition.y + 170.0f, mPosition.z); switch (mEvent.getCurrentEventCommand()) { - case 'none': mEvent.advanceNext(); break; + case 'none': + mEvent.advanceNext(); + retVal = SUCCEEDED; + break; case 'plwk': if (advance) { - mLinkPos = dAcPy_c::GetLink()->mPosition; - targetAngleY = cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition); - mLinkPos.x += 330.0f * nw4r::math::SinIdx(targetAngleY); - mLinkPos.z += 330.0f * nw4r::math::CosIdx(targetAngleY); + float multiplier330 = 330.0f; + mLinkPos = dAcPy_c::GetLinkM()->mPosition; + mAng targetAngleY = (mAng)cLib::targetAngleY(mPosition, dAcPy_c::GetLinkM()->getPosition()); + mLinkPos.x += multiplier330 * targetAngleY.sin(); + mLinkPos.z += multiplier330 * targetAngleY.cos(); } if (EventManager::isInEvent()) { if (EventManager::isCurrentEvent("BeforeLastBossBattleChicken")) { - dAcPy_c::GetLinkM()->vt_0x2AC(); - dAcPy_c::GetLinkM()->triggerMoveEventMaybe(); // TODO: parameters + dAcPy_c* player = dAcPy_c::GetLinkM(); + player->vt_0x2AC(); + player->triggerMoveEventMaybe(2, 0, 0, mLinkPos, 0, 0, 0); } } if (dAcPy_c::GetLinkM()->mPosition.absXZTo(mLinkPos) < 10.0f) { mEvent.advanceNext(); } + retVal = SUCCEEDED; break; case 'warp': if (advance) { dJEffManager_c::spawnEffect(PARTICLE_RESOURCE_ID_MAPPING_916_, mWorldMtx, nullptr, nullptr, 0, 0); mWalkFramesMaybe = 80; } - if (mWalkFramesMaybe) { + if (mWalkFramesMaybe != 0) { mWalkFramesMaybe -= 1; } if (mWalkFramesMaybe == 77) { @@ -104,12 +109,13 @@ int dAcOwarpHole_c::actorExecuteInEvent() { if (mWalkFramesMaybe == 20) { dScGame_c::GetInstance()->triggerExit(mRoomID, mExitListIdx); } - if (!mWalkFramesMaybe) { + if (mWalkFramesMaybe == 0) { mEvent.advanceNext(); } + retVal = SUCCEEDED; } - return SUCCEEDED; + return retVal; } int dAcOwarpHole_c::draw() { From c9ce9afb27b80a961001c49c756b8cc3a84ff791 Mon Sep 17 00:00:00 2001 From: gymnast86 Date: Wed, 1 Oct 2025 04:17:37 -0700 Subject: [PATCH 3/5] revert symbols for obj_warp --- config/SOUE01/rels/d_a_obj_warpNP/symbols.txt | 100 +++++++++--------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/config/SOUE01/rels/d_a_obj_warpNP/symbols.txt b/config/SOUE01/rels/d_a_obj_warpNP/symbols.txt index c456a64a..f90b0220 100644 --- a/config/SOUE01/rels/d_a_obj_warpNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_warpNP/symbols.txt @@ -5,27 +5,27 @@ __register_global_object = .text:0x00000070; // type:function size:0x1C scope:gl __destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global dAcOWarp_c_classInit__Fv = .text:0x000000F0; // type:function size:0x258 __dt__10dAcOWarp_cFv = .text:0x00000350; // type:function size:0x58 -__ct__Q23m3d8anmChr_cFv = .text:0x000003B0; // type:function size:0x3C -__ct__Q23m3d11anmMatClr_cFv = .text:0x000003F0; // type:function size:0x64 +fn_292_3B0 = .text:0x000003B0; // type:function size:0x3C +fn_292_3F0 = .text:0x000003F0; // type:function size:0x64 fn_292_460 = .text:0x00000460; // type:function size:0x40 fn_292_4A0 = .text:0x000004A0; // type:function size:0x58 __dt__23sFState_c<10dAcOWarp_c>Fv = .text:0x00000500; // type:function size:0x58 __dt__26sFStateFct_c<10dAcOWarp_c>Fv = .text:0x00000560; // type:function size:0x6C __dt__79sStateMgr_c<10dAcOWarp_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000005D0; // type:function size:0xA0 __dt__49sFStateMgr_c<10dAcOWarp_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000670; // type:function size:0xA4 -createHeap__10dAcOWarp_cFv = .text:0x00000720; // type:function size:0x4C -create__10dAcOWarp_cFv = .text:0x00000770; // type:function size:0x594 +AcOWarp__initModels = .text:0x00000720; // type:function size:0x4C +AcOWarp__init = .text:0x00000770; // type:function size:0x594 changeState__79sStateMgr_c<10dAcOWarp_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000D10; // type:function size:0x10 -init2__10dAcOWarp_cFv = .text:0x00000D20; // type:function size:0xE0 +AcOWarp__init2 = .text:0x00000D20; // type:function size:0xE0 getStateID__79sStateMgr_c<10dAcOWarp_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000E00; // type:function size:0x10 -fn_292_E10__10dAcOWarp_cFv = .text:0x00000E10; // type:function size:0x10C -update__10dAcOWarp_cFv = .text:0x00000F20; // type:function size:0x2C8 +fn_292_E10 = .text:0x00000E10; // type:function size:0x10C +AcOWarp__update = .text:0x00000F20; // type:function size:0x2C8 executeState__79sStateMgr_c<10dAcOWarp_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000011F0; // type:function size:0x10 -fun_292_1200__10dAcOWarp_cFi = .text:0x00001200; // type:function size:0x134 -fun_292_1340__10dAcOWarp_cFv = .text:0x00001340; // type:function size:0x328 -updateInEvent__10dAcOWarp_cFv = .text:0x00001670; // type:function size:0x530 -decr__10dAcOWarp_cFRSc_Sc = .text:0x00001BA0; // type:function size:0x1C -draw__10dAcOWarp_cFv = .text:0x00001BC0; // type:function size:0xC8 +fn_292_1200 = .text:0x00001200; // type:function size:0x134 +fn_292_1340 = .text:0x00001340; // type:function size:0x328 +AcOWarp__updateInEvent = .text:0x00001670; // type:function size:0x530 +AcOWarp__decr = .text:0x00001BA0; // type:function size:0x1C +AcOWarp__draw = .text:0x00001BC0; // type:function size:0xC8 initializeState_Wait__10dAcOWarp_cFv = .text:0x00001C90; // type:function size:0x4 executeState_Wait__10dAcOWarp_cFv = .text:0x00001CA0; // type:function size:0x33C finalizeState_Wait__10dAcOWarp_cFv = .text:0x00001FE0; // type:function size:0x4 @@ -48,41 +48,41 @@ finalizeState_GateIn__10dAcOWarp_cFv = .text:0x00002D30; // type:function size:0 initializeState_GateClear__10dAcOWarp_cFv = .text:0x00002D40; // type:function size:0x9C executeState_GateClear__10dAcOWarp_cFv = .text:0x00002DE0; // type:function size:0x168 finalizeState_GateClear__10dAcOWarp_cFv = .text:0x00002F50; // type:function size:0x4 -fun_292_2F60__10dAcOWarp_cFv = .text:0x00002F60; // type:function size:0xDC -triggerOutExitOfTrial__10dAcOWarp_cFv = .text:0x00003040; // type:function size:0x64 -fun_292_30B0__10dAcOWarp_cFv = .text:0x000030B0; // type:function size:0x9C -fun_292_3150__10dAcOWarp_cFv = .text:0x00003150; // type:function size:0x578 -fun_292_36D0__10dAcOWarp_cFv = .text:0x000036D0; // type:function size:0x278 -fun_292_3950__10dAcOWarp_cFv = .text:0x00003950; // type:function size:0x9C -fun_292_39F0__10dAcOWarp_cFv = .text:0x000039F0; // type:function size:0xE8 -fun_292_3AE0__10dAcOWarp_cFv = .text:0x00003AE0; // type:function size:0x3DC -fun_292_3EC0__10dAcOWarp_cFv = .text:0x00003EC0; // type:function size:0x228 -fun_292_40F0__10dAcOWarp_cFv = .text:0x000040F0; // type:function size:0xBC -checkHasSongItem__10dAcOWarp_cFi = .text:0x000041B0; // type:function size:0x104 -fun_292_42C0__10dAcOWarp_cFv = .text:0x000042C0; // type:function size:0xD8 -fun_292_43A0__10dAcOWarp_cFv = .text:0x000043A0; // type:function size:0x284 -shouldDowse__10dAcOWarp_cFv = .text:0x00004630; // type:function size:0x18C -fun_292_47C0__10dAcOWarp_cFlUl = .text:0x000047C0; // type:function size:0x124 -fun_292_48F0__10dAcOWarp_cFv = .text:0x000048F0; // type:function size:0x4 -fun_292_4900__10dAcOWarp_cFv = .text:0x00004900; // type:function size:0x44 -fun_292_4950__10dAcOWarp_cFv = .text:0x00004950; // type:function size:0xC -fun_292_4960__10dAcOWarp_cFv = .text:0x00004960; // type:function size:0xC -fun_292_4970__10dAcOWarp_cFv = .text:0x00004970; // type:function size:0xC -fun_292_4980__10dAcOWarp_cFv = .text:0x00004980; // type:function size:0x8 -fun_292_4990__10dAcOWarp_cFv = .text:0x00004990; // type:function size:0x8 -fun_292_49A0__10dAcOWarp_cFv = .text:0x000049A0; // type:function size:0x50 -fun_292_49F0__10dAcOWarp_cFv = .text:0x000049F0; // type:function size:0x8 -fun_292_4A00__10dAcOWarp_cFv = .text:0x00004A00; // type:function size:0x58 -__dt__10dAcOWarp_cFv = .text:0x00004A60; // type:function size:0x1E0 -fun_292_4C40__10dAcOWarp_cFv = .text:0x00004C40; // type:function size:0x4 -fun_292_4C50__10dAcOWarp_cFv = .text:0x00004C50; // type:function size:0x4 -fun_292_4C60__10dAcOWarp_cFv = .text:0x00004C60; // type:function size:0x4 -fun_292_4C70__10dAcOWarp_cFv = .text:0x00004C70; // type:function size:0x8 -fun_292_4C80__10dAcOWarp_cFv = .text:0x00004C80; // type:function size:0x4 -fun_292_4C90__10dAcOWarp_cFv = .text:0x00004C90; // type:function size:0x4 -fun_292_4CA0__10dAcOWarp_cFv = .text:0x00004CA0; // type:function size:0x4 -fun_292_4CB0__10dAcOWarp_cFv = .text:0x00004CB0; // type:function size:0x4 -fun_292_4CC0__10dAcOWarp_cFv = .text:0x00004CC0; // type:function size:0x4 +fn_292_2F60 = .text:0x00002F60; // type:function size:0xDC +AcOWarp__triggerOutExitOfTrial = .text:0x00003040; // type:function size:0x64 +fn_292_30B0 = .text:0x000030B0; // type:function size:0x9C +fn_292_3150 = .text:0x00003150; // type:function size:0x578 +fn_292_36D0 = .text:0x000036D0; // type:function size:0x278 +fn_292_3950 = .text:0x00003950; // type:function size:0x9C +fn_292_39F0 = .text:0x000039F0; // type:function size:0xE8 +fn_292_3AE0 = .text:0x00003AE0; // type:function size:0x3DC +fn_292_3EC0 = .text:0x00003EC0; // type:function size:0x228 +fn_292_40F0 = .text:0x000040F0; // type:function size:0xBC +AcOWarp__checkHasSongItem = .text:0x000041B0; // type:function size:0x104 +fn_292_42C0 = .text:0x000042C0; // type:function size:0xD8 +fn_292_43A0 = .text:0x000043A0; // type:function size:0x284 +AcOWarp__shouldDowse = .text:0x00004630; // type:function size:0x18C +fn_292_47C0 = .text:0x000047C0; // type:function size:0x124 +fn_292_48F0 = .text:0x000048F0; // type:function size:0x4 +fn_292_4900 = .text:0x00004900; // type:function size:0x44 +fn_292_4950 = .text:0x00004950; // type:function size:0xC +fn_292_4960 = .text:0x00004960; // type:function size:0xC +fn_292_4970 = .text:0x00004970; // type:function size:0xC +fn_292_4980 = .text:0x00004980; // type:function size:0x8 +fn_292_4990 = .text:0x00004990; // type:function size:0x8 +fn_292_49A0 = .text:0x000049A0; // type:function size:0x50 +fn_292_49F0 = .text:0x000049F0; // type:function size:0x8 +fn_292_4A00 = .text:0x00004A00; // type:function size:0x58 +fn_292_4A60 = .text:0x00004A60; // type:function size:0x1E0 +fn_292_4C40 = .text:0x00004C40; // type:function size:0x4 +fn_292_4C50 = .text:0x00004C50; // type:function size:0x4 +fn_292_4C60 = .text:0x00004C60; // type:function size:0x4 +fn_292_4C70 = .text:0x00004C70; // type:function size:0x8 +fn_292_4C80 = .text:0x00004C80; // type:function size:0x4 +fn_292_4C90 = .text:0x00004C90; // type:function size:0x4 +fn_292_4CA0 = .text:0x00004CA0; // type:function size:0x4 +fn_292_4CB0 = .text:0x00004CB0; // type:function size:0x4 +fn_292_4CC0 = .text:0x00004CC0; // type:function size:0x4 build__26sFStateFct_c<10dAcOWarp_c>FRC12sStateIDIf_c = .text:0x00004CD0; // type:function size:0x60 dispose__26sFStateFct_c<10dAcOWarp_c>FRP10sStateIf_c = .text:0x00004D30; // type:function size:0xC initialize__23sFState_c<10dAcOWarp_c>Fv = .text:0x00004D40; // type:function size:0x1C @@ -118,12 +118,12 @@ lbl_292_data_0 = .data:0x00000000; // type:object size:0x8 data:4byte g_profile_OBJ_WARP = .data:0x00000008; // type:object size:0x10 lbl_292_data_18 = .data:0x00000018; // type:object size:0x68 lbl_292_data_80 = .data:0x00000080; // type:object size:0x10 -@30111 = .data:0x00000090; // type:object size:0x64 +lbl_292_data_90 = .data:0x00000090; // type:object size:0x64 lbl_292_data_F4 = .data:0x000000F4; // type:object size:0x128 lbl_292_data_21C = .data:0x0000021C; // type:object size:0x4 data:4byte -@36553 = .data:0x00000220; // type:object size:0x18 data:string +lbl_292_data_220 = .data:0x00000220; // type:object size:0x18 data:string lbl_292_data_238 = .data:0x00000238; // type:object size:0x8 -__vt__25sFStateID_c<10dAcOWarp_c> = .data:0x00000240; // type:object size:0xB0 +AcOWarp__vtable = .data:0x00000240; // type:object size:0xB0 lbl_292_data_2F0 = .data:0x000002F0; // type:object size:0x30 lbl_292_data_320 = .data:0x00000320; // type:object size:0x30 lbl_292_data_350 = .data:0x00000350; // type:object size:0x18 From 30016e973716119c90599b3b8d3f493d915189fe Mon Sep 17 00:00:00 2001 From: gymnast86 Date: Wed, 1 Oct 2025 05:49:09 -0700 Subject: [PATCH 4/5] match last function --- config/SOUE01/rels/d_a_obj_warp_holeNP/symbols.txt | 10 +++++----- configure.py | 2 +- include/d/d_player_act.h | 2 +- src/REL/d/a/obj/d_a_obj_warp_hole.cpp | 14 +++++++++----- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/config/SOUE01/rels/d_a_obj_warp_holeNP/symbols.txt b/config/SOUE01/rels/d_a_obj_warp_holeNP/symbols.txt index bd1b9747..a60ea418 100644 --- a/config/SOUE01/rels/d_a_obj_warp_holeNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_warp_holeNP/symbols.txt @@ -12,11 +12,11 @@ __dt__14dAcOwarpHole_cFv = .text:0x00000640; // type:function size:0x80 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global dummy600__14dAcOwarpHole_c = .rodata:0x00000000; // type:object size:0x4 data:float -@24817 = .rodata:0x00000004; // type:object size:0x4 align:4 data:float -@24840 = .rodata:0x00000008; // type:object size:0x10 align:4 data:float +@24817 = .rodata:0x00000004; // type:object size:0x4 scope:local align:4 data:float +@24840 = .rodata:0x00000008; // type:object size:0x10 scope:local align:4 data:float g_profile_OBJ_WARP_HOLE = .data:0x00000000; // type:object size:0x10 sCylSrc__14dAcOwarpHole_c = .data:0x00000010; // type:object size:0x30 -@24816 = .data:0x00000040; // type:object size:0x1C data:string -@24841 = .data:0x0000005C; // type:object size:0x19 align:4 data:string -@24908 = .data:0x00000078; // type:object size:0x1C align:8 data:string +@24816 = .data:0x00000040; // type:object size:0x1C scope:local data:string +@24841 = .data:0x0000005C; // type:object size:0x19 scope:local align:4 data:string +@24908 = .data:0x00000078; // type:object size:0x1C scope:local align:8 data:string __vt__14dAcOwarpHole_c = .data:0x00000098; // type:object size:0x80 diff --git a/configure.py b/configure.py index 4c8acef2..20c59ade 100644 --- a/configure.py +++ b/configure.py @@ -2825,7 +2825,7 @@ config.libs = [ Rel(NonMatching, "d_a_obj_vent_fan", "REL/d/a/obj/d_a_obj_vent_fan.cpp"), Rel(NonMatching, "d_a_obj_vortex", "REL/d/a/obj/d_a_obj_vortex.cpp"), Rel(NonMatching, "d_a_obj_warp", "REL/d/a/obj/d_a_obj_warp.cpp"), - Rel(NonMatching, "d_a_obj_warp_hole", "REL/d/a/obj/d_a_obj_warp_hole.cpp"), + Rel(Matching, "d_a_obj_warp_hole", "REL/d/a/obj/d_a_obj_warp_hole.cpp"), Rel( NonMatching, "d_a_obj_waterfall_D100", "REL/d/a/obj/d_a_obj_waterfall_D100.cpp" ), diff --git a/include/d/d_player_act.h b/include/d/d_player_act.h index 9437cb4a..c5096561 100644 --- a/include/d/d_player_act.h +++ b/include/d/d_player_act.h @@ -412,7 +412,7 @@ public: /* vt 0x2A8 */ virtual void lookTowardItem() {} /* vt 0x2AC */ virtual void vt_0x2AC() {} /* vt 0x2B0 */ virtual void vt_0x2B0() {} - /* vt 0x2B4 */ virtual void triggerMoveEventMaybe(u32, u32, u32, mVec3_c &, u16, u32, u32) {} + /* vt 0x2B4 */ virtual void triggerMoveEventMaybe(u32, u32, u32, mVec3_c &, const mAng&, u32, u32) {} /* vt 0x2B8 */ virtual void setActorRef9() {} /* vt 0x2BC */ virtual void unlinkActorRef9() {} /* vt 0x2C0 */ virtual bool vt_0x2C0() { diff --git a/src/REL/d/a/obj/d_a_obj_warp_hole.cpp b/src/REL/d/a/obj/d_a_obj_warp_hole.cpp index 183a64e4..5babbb42 100644 --- a/src/REL/d/a/obj/d_a_obj_warp_hole.cpp +++ b/src/REL/d/a/obj/d_a_obj_warp_hole.cpp @@ -63,6 +63,12 @@ int dAcOwarpHole_c::actorExecute() { return SUCCEEDED; } +// copy from d_a_obj_fairy - TODO move it to a shared file +inline static void vecCylCalc(mVec3_c &target, const mAng &rot, f32 factor) { + target.x += factor * rot.sin(); + target.z += factor * rot.cos(); +} + int dAcOwarpHole_c::actorExecuteInEvent() { mEff.createContinuousEffect(PARTICLE_RESOURCE_ID_MAPPING_914_, mWorldMtx, nullptr, nullptr); holdSound(SE_WarpH_Wait); @@ -77,11 +83,9 @@ int dAcOwarpHole_c::actorExecuteInEvent() { break; case 'plwk': if (advance) { - float multiplier330 = 330.0f; - mLinkPos = dAcPy_c::GetLinkM()->mPosition; - mAng targetAngleY = (mAng)cLib::targetAngleY(mPosition, dAcPy_c::GetLinkM()->getPosition()); - mLinkPos.x += multiplier330 * targetAngleY.sin(); - mLinkPos.z += multiplier330 * targetAngleY.cos(); + dAcPy_c *link = dAcPy_c::GetLinkM(); + mLinkPos = link->mPosition; + vecCylCalc(mLinkPos,cLib::targetAngleY(mPosition, link->mPosition), 330.0f); } if (EventManager::isInEvent()) { if (EventManager::isCurrentEvent("BeforeLastBossBattleChicken")) { From 0abd919314572692964589861b2c32148f520097 Mon Sep 17 00:00:00 2001 From: gymnast86 Date: Wed, 1 Oct 2025 06:45:14 -0700 Subject: [PATCH 5/5] update triggerMoveEventMaybe mangled name --- config/SOUE01/symbols.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index ff5d9b53..f1ea4879 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -1290,7 +1290,7 @@ ActorLink__setObjActorFlags0x200 = .text:0x800346B0; // type:function size:0x14 ActorLink__unsetObjActorFlags0x200 = .text:0x800346D0; // type:function size:0x14 fn_800346F0 = .text:0x800346F0; // type:function size:0xDC vt_0x2AC__17daPlayerActBase_cFv = .text:0x800347D0; // type:function size:0x4 -triggerMoveEventMaybe__17daPlayerActBase_cFv = .text:0x800347E0; // type:function size:0x4 +triggerMoveEventMaybe__17daPlayerActBase_cFUlUlUlR7mVec3_cRC4mAngUlUl = .text:0x800347E0; // type:function size:0x4 vt_0x2C4__17daPlayerActBase_cFv = .text:0x800347F0; // type:function size:0x8 fn_80034800 = .text:0x80034800; // type:function size:0x170 fn_80034970 = .text:0x80034970; // type:function size:0xFC