From 44e612e13ff408b4b7f555b3fd885be2cf883e7b Mon Sep 17 00:00:00 2001 From: Stbn-antier <99532548+Stbn-antier@users.noreply.github.com> Date: Wed, 23 Jul 2025 23:03:44 +0900 Subject: [PATCH] Matching d_a_obj_poFire (#2551) * Matching daPoFire * Adressed comments --- configure.py | 2 +- include/d/actor/d_a_obj_poCandle.h | 12 +- include/d/actor/d_a_obj_poFire.h | 93 ++- include/d/actor/d_a_tag_poFire.h | 2 + src/d/actor/d_a_obj_poFire.cpp | 904 +++++++++++------------------ 5 files changed, 441 insertions(+), 572 deletions(-) diff --git a/configure.py b/configure.py index 2beb3318ee..97e38ee7ed 100755 --- a/configure.py +++ b/configure.py @@ -2073,7 +2073,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_obj_pillar"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_pleaf"), ActorRel(NonMatching, "d_a_obj_poCandle"), - ActorRel(NonMatching, "d_a_obj_poFire"), + ActorRel(Equivalent, "d_a_obj_poFire"), ActorRel(NonMatching, "d_a_obj_poTbox"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_prop"), ActorRel(NonMatching, "d_a_obj_pumpkin"), diff --git a/include/d/actor/d_a_obj_poCandle.h b/include/d/actor/d_a_obj_poCandle.h index 417ee125b7..dd6d7439d9 100644 --- a/include/d/actor/d_a_obj_poCandle.h +++ b/include/d/actor/d_a_obj_poCandle.h @@ -33,10 +33,18 @@ public: /* 80CB242C */ void Delete(); /* 80CB2610 */ ~daPoCandle_c(); - /* 80CB3E3C */ void getFirePos(); // implemented in d_a_obj_poFire.cpp + /* 80CB3E3C */ cXyz getFirePos(); // implemented in d_a_obj_poFire.cpp + u8 getIDNum() {return mIDNum;} + void setFireFlag(u8 flag) { field_0x5D2 = flag; } private: - /* 0x568 */ u8 field_0x568[0x614 - 0x568]; + /* 0x568 */ u8 field_0x568[0x5C4 - 0x568]; + /* 0x5C4 */ cXyz mFirePos; + /* 0x5D0 */ u8 field_0x5D0[0x5D2 - 0x5D0]; + /* 0x5D2 */ u8 field_0x5D2; + /* 0x5D3 */ u8 field_0x5D3[0x5D5 - 0x5D3]; + /* 0x5D5 */ u8 mIDNum; + /* 0x5DB */ u8 field_0x5DB[0x614 - 0x5D6]; }; STATIC_ASSERT(sizeof(daPoCandle_c) == 0x614); diff --git a/include/d/actor/d_a_obj_poFire.h b/include/d/actor/d_a_obj_poFire.h index 2815197d98..5afc413e38 100644 --- a/include/d/actor/d_a_obj_poFire.h +++ b/include/d/actor/d_a_obj_poFire.h @@ -1,8 +1,11 @@ #ifndef D_A_OBJ_POFIRE_H #define D_A_OBJ_POFIRE_H -#include "f_op/f_op_actor_mng.h" #include "d/actor/d_a_obj_poCandle.h" +#include "d/actor/d_a_player.h" +#include "d/actor/d_a_tag_poFire.h" +#include "d/d_event_lib.h" + /** * @ingroup actors-objects @@ -12,15 +15,32 @@ * @details * */ -class daPoFire_c : public fopAc_ac_c { +class daPoFire_c : public fopAc_ac_c, + public request_of_phase_process_class, + public dEvLib_callback_c { public: + typedef void (daPoFire_c::*modeProc)(); + daPoFire_c() : dEvLib_callback_c(this) {} + + enum Mode { + MODE_INIT_MOVE = 0, + MODE_WAIT = 1, + MODE_WAIT_SET_EFFECT = 2, + MODE_MOVE_OUT = 3, + MODE_MOVE = 4, + MODE_NO_MOVE = 5, + MODE_MOVE_WAIT = 6, + MODE_ON_FIRE = 7, + MODE_FIRE_END = 8, + }; + /* 80CB2A0C */ void setBaseMtx(); - /* 80CB2A74 */ void create(); - /* 80CB2BB8 */ void Execute(); + /* 80CB2A74 */ int create(); + /* 80CB2BB8 */ int Execute(); /* 80CB2BFC */ void procMain(); /* 80CB2D84 */ void setFire(); - /* 80CB2F68 */ void searchCandle(void*, void*); - /* 80CB2FD4 */ void searchFireTag(void*, void*); + /* 80CB2F68 */ static void* searchCandle(void*, void*); + /* 80CB2FD4 */ static void* searchFireTag(void*, void*); /* 80CB3024 */ void init_modeInitMove(); /* 80CB30FC */ void modeInitMove(); /* 80CB31FC */ void modeWait(); @@ -37,26 +57,67 @@ public: /* 80CB39E0 */ void modeOnFire(); /* 80CB3ADC */ void init_modeFireEnd(); /* 80CB3AE8 */ void modeFireEnd(); - /* 80CB3B70 */ void eventStart(); - /* 80CB3BE0 */ void eventRun(); - /* 80CB3C64 */ bool eventEnd(); - /* 80CB3C6C */ bool Draw(); - /* 80CB3C74 */ void Delete(); - /* 80CB3E58 */ ~daPoFire_c(); + /* 80CB3C6C */ int Draw(); + /* 80CB3C74 */ int Delete(); + + /* 80CB3E58 */ virtual ~daPoFire_c() {} + /* 80CB3B70 */ virtual bool eventStart(); + /* 80CB3BE0 */ virtual bool eventRun(); + /* 80CB3C64 */ virtual bool eventEnd(); u8 getMoveEnd() { return mMoveEnd; } + u32 getID() { return fopAcM_GetParamBit(this, 0, 8); } + private: - /* 0x568 */ u8 field_0x568[0x594 - 0x568]; + /* 0x584 */ request_of_phase_process_class mPhase; + /* 0x58C */ int mStaffID; + /* 0x590 */ s16 unk590; + /* 0x592 */ u8 mMode; + /* 0x593 */ u8 mActorID; // Identifies each of the 4 Poe flames /* 0x594 */ bool mMoveEnd; - /* 0x595 */ u8 field_0x595[0x618 - 0x595]; + /* 0x598 */ u32 mParticleKeys[2]; + /* 0x5A0 */ cXyz unk5A0; + /* 0x5AC */ cXyz unk5AC; + /* 0x5B4 */ cXyz unk5B4; + /* 0x5C4 */ u8 unk5C4; + /* 0x5C5 */ u8 mWaitTimer; + /* 0x5C8 */ daPoCandle_c* mpPoCandle; + /* 0x5CC */ daTagPoFire_c* mpTagPoFire; + /* 0x5D0 */ f32 mGroundY; + /* 0x5D4 */ f32 unk5D4; + /* 0x5D8 */ f32 unk5D8; + /* 0x5DC */ u8 pad5DC[0xC]; // Padding + /* 0x5E8 */ f32 unk5E8; + /* 0x5EC */ f32 unk5EC; + /* 0x5F0 */ f32 unk5F0; + /* 0x5F4 */ f32 unk5F4; + /* 0x5F8 */ cXyz unk5F8; + /* 0x604 */ s32 unk604; + /* 0x608 */ f32 unk608; + /* 0x610 */ cXyz unk610; }; STATIC_ASSERT(sizeof(daPoFire_c) == 0x618); -class daPoFire_HIO_c { +class daPoFire_HIO_c : public mDoHIO_entry_c { public: /* 80CB294C */ daPoFire_HIO_c(); - /* 80CB3D24 */ ~daPoFire_HIO_c(); + /* 80CB3D24 */ virtual ~daPoFire_HIO_c() {} + + void genMessage(JORMContext*); + + /* 0x06 */ s8 unk6; + /* 0x08 */ f32 mWaitPeriod; // Wait oscillation period + /* 0x0C */ f32 mWaitVertRange; // Wait oscillation amplitude, vertical range + /* 0x10 */ f32 mWaitVertSpeed; // Wait oscillation speed, vertical speed + /* 0x14 */ f32 mMovePeriod1; // Move period + /* 0x18 */ f32 mMoveSwingSpeed1; // Move oscillation speed + /* 0x1C */ f32 mMoveSpeed; // Move speed + /* 0x20 */ f32 mMovePeriod2; // Move period ?? + /* 0x24 */ f32 mMoveSwingSpeed2; // Move oscillation speed + /* 0x28 */ f32 mMoveSwingRange; // Move oscillation range + /* 0x2C */ f32 mPickupRange; // Horizontal dist ? + /* 0x30 */ u8 mFireWaitTime; // Fire wait }; #endif /* D_A_OBJ_POFIRE_H */ diff --git a/include/d/actor/d_a_tag_poFire.h b/include/d/actor/d_a_tag_poFire.h index d198e1c876..ae3c6ed3a1 100644 --- a/include/d/actor/d_a_tag_poFire.h +++ b/include/d/actor/d_a_tag_poFire.h @@ -12,6 +12,8 @@ public: /* 80D5DC20 */ int Draw(); /* 80D5DC28 */ int Delete(); + void setFireFlag(u8 flag) { field_0x569 = flag; } + /* 0x568 */ u8 field_0x568; /* 0x569 */ u8 field_0x569; /* 0x56A */ u16 field_0x56a; diff --git a/src/d/actor/d_a_obj_poFire.cpp b/src/d/actor/d_a_obj_poFire.cpp index 1d738bc726..13697aa177 100644 --- a/src/d/actor/d_a_obj_poFire.cpp +++ b/src/d/actor/d_a_obj_poFire.cpp @@ -1,602 +1,418 @@ /** * @file d_a_obj_poFire.cpp - * -*/ + * + */ #include "d/actor/d_a_obj_poFire.h" -#include "dol2asm.h" - -// -// Forward References: -// - -extern "C" void __ct__14daPoFire_HIO_cFv(); -extern "C" void __dt__14mDoHIO_entry_cFv(); -extern "C" void setBaseMtx__10daPoFire_cFv(); -extern "C" void create__10daPoFire_cFv(); -extern "C" void Execute__10daPoFire_cFv(); -extern "C" void procMain__10daPoFire_cFv(); -extern "C" void setFire__10daPoFire_cFv(); -extern "C" void searchCandle__10daPoFire_cFPvPv(); -extern "C" void searchFireTag__10daPoFire_cFPvPv(); -extern "C" void init_modeInitMove__10daPoFire_cFv(); -extern "C" void modeInitMove__10daPoFire_cFv(); -extern "C" void modeWait__10daPoFire_cFv(); -extern "C" void init_modeWaitSetEffect__10daPoFire_cFv(); -extern "C" void modeWaitSetEffect__10daPoFire_cFv(); -extern "C" void init_modeMoveOut__10daPoFire_cFv(); -extern "C" void modeMoveOut__10daPoFire_cFv(); -extern "C" void init_modeMove__10daPoFire_cFv(); -extern "C" void modeMove__10daPoFire_cFv(); -extern "C" void init_modeMoveWait__10daPoFire_cFv(); -extern "C" void modeMoveWait__10daPoFire_cFv(); -extern "C" void modeNoMove__10daPoFire_cFv(); -extern "C" void init_modeOnFire__10daPoFire_cFv(); -extern "C" void modeOnFire__10daPoFire_cFv(); -extern "C" void init_modeFireEnd__10daPoFire_cFv(); -extern "C" void modeFireEnd__10daPoFire_cFv(); -extern "C" void eventStart__10daPoFire_cFv(); -extern "C" void eventRun__10daPoFire_cFv(); -extern "C" bool eventEnd__10daPoFire_cFv(); -extern "C" bool Draw__10daPoFire_cFv(); -extern "C" void Delete__10daPoFire_cFv(); -extern "C" static void daPoFire_Draw__FP10daPoFire_c(); -extern "C" static void daPoFire_Execute__FP10daPoFire_c(); -extern "C" static void daPoFire_Delete__FP10daPoFire_c(); -extern "C" static void daPoFire_Create__FP10fopAc_ac_c(); -extern "C" void __dt__14daPoFire_HIO_cFv(); -extern "C" void __sinit_d_a_obj_poFire_cpp(); -extern "C" static void func_80CB3DBC(); -extern "C" static void func_80CB3DC4(); -extern "C" static void func_80CB3DCC(); -extern "C" static void func_80CB3DD4(); -extern "C" void __dt__17dEvLib_callback_cFv(); -extern "C" bool eventStart__17dEvLib_callback_cFv(); -extern "C" bool eventRun__17dEvLib_callback_cFv(); -extern "C" bool eventEnd__17dEvLib_callback_cFv(); -extern "C" void getFirePos__12daPoCandle_cFv(); -extern "C" void __dt__10daPoFire_cFv(); -extern "C" extern char const* const d_a_obj_poFire__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAc_IsActor__FPv(); -extern "C" void fopAcIt_Judge__FPFPvPv_PvPv(); -extern "C" void fopAcM_setRoomLayer__FPvi(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void offFirstBit__21dSv_player_get_item_cFUc(); -extern "C" void setPtT__14dEvt_control_cFPv(); -extern "C" void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci(); -extern "C" void getMyActIdx__16dEvent_manager_cFiPCPCciii(); -extern "C" void cutEnd__16dEvent_manager_cFi(); -extern "C" void eventUpdate__17dEvLib_callback_cFv(); -extern "C" void orderEvent__17dEvLib_callback_cFiii(); -extern "C" void forceOnEventMove__Q213dPa_control_c7level_cFUl(); -extern "C" void getEmitter__Q213dPa_control_c7level_cFUl(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void request__11dAttCatch_cFP10fopAc_ac_cUcfffsi(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void SetPos__11cBgS_GndChkFPC4cXyz(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void cLib_addCalcPos__FP4cXyzRC4cXyzfff(); -extern "C" void deleteAllParticle__14JPABaseEmitterFv(); -extern "C" void func_802807E0(); -extern "C" void __dl__FPv(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" u8 mParticleTracePCB__13dPa_control_c[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// +UNK_REL_DATA /* ############################################################################################## */ -/* 80CB3EEC-80CB3EF0 000000 0004+00 9/9 0/0 0/0 .rodata @3662 */ -SECTION_RODATA static f32 const lit_3662 = 1.0f; -COMPILER_STRIP_GATE(0x80CB3EEC, &lit_3662); -/* 80CB3EF0-80CB3EF4 000004 0004+00 0/1 0/0 0/0 .rodata @3663 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3663 = 10.0f; -COMPILER_STRIP_GATE(0x80CB3EF0, &lit_3663); -#pragma pop - -/* 80CB3EF4-80CB3EF8 000008 0004+00 0/1 0/0 0/0 .rodata @3664 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3664 = 5.0f; -COMPILER_STRIP_GATE(0x80CB3EF4, &lit_3664); -#pragma pop - -/* 80CB3EF8-80CB3EFC 00000C 0004+00 0/3 0/0 0/0 .rodata @3665 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3665 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x80CB3EF8, &lit_3665); -#pragma pop - -/* 80CB3EFC-80CB3F00 000010 0004+00 0/1 0/0 0/0 .rodata @3666 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3666 = 6.0f; -COMPILER_STRIP_GATE(0x80CB3EFC, &lit_3666); -#pragma pop - -/* 80CB3F00-80CB3F04 000014 0004+00 0/1 0/0 0/0 .rodata @3667 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3667 = 40.0f; -COMPILER_STRIP_GATE(0x80CB3F00, &lit_3667); -#pragma pop - -/* 80CB3F04-80CB3F08 000018 0004+00 0/1 0/0 0/0 .rodata @3668 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3668 = 150.0f; -COMPILER_STRIP_GATE(0x80CB3F04, &lit_3668); -#pragma pop - -/* 80CB3F3C-80CB3F3C 000050 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80CB3F3C = "poFire"; -SECTION_DEAD static char const* const stringBase_80CB3F43 = "pofire"; -SECTION_DEAD static char const* const stringBase_80CB3F4A = "MOVE_END"; -#pragma pop - -/* 80CB3F54-80CB3F60 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */ -SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - -/* 80CB3F60-80CB3F74 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ -#pragma push -#pragma force_active on -SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { - 0x02000201, - /* padding */ - 0x40080000, - 0x00000000, - 0x3FE00000, - 0x00000000, -}; -#pragma pop - -/* 80CB3F74-80CB3F80 -00001 000C+00 0/1 0/0 0/0 .data @3740 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3740[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeInitMove__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3F80-80CB3F8C -00001 000C+00 0/1 0/0 0/0 .data @3741 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3741[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWait__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3F8C-80CB3F98 -00001 000C+00 0/1 0/0 0/0 .data @3742 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3742[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWaitSetEffect__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3F98-80CB3FA4 -00001 000C+00 0/1 0/0 0/0 .data @3743 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3743[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeMoveOut__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3FA4-80CB3FB0 -00001 000C+00 0/1 0/0 0/0 .data @3744 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3744[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeMove__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3FB0-80CB3FBC -00001 000C+00 0/1 0/0 0/0 .data @3745 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3745[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeNoMove__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3FBC-80CB3FC8 -00001 000C+00 0/1 0/0 0/0 .data @3746 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3746[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeMoveWait__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3FC8-80CB3FD4 -00001 000C+00 0/1 0/0 0/0 .data @3747 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3747[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeOnFire__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3FD4-80CB3FE0 -00001 000C+00 0/1 0/0 0/0 .data @3748 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3748[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeFireEnd__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3FE0-80CB404C 00008C 006C+00 0/1 0/0 0/0 .data mode_proc$3739 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 mode_proc[108] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#pragma pop - -/* 80CB404C-80CB4050 -00001 0004+00 1/1 0/0 0/0 .data action_table$4176 */ -SECTION_DATA static void* action_table = (void*)(((char*)&d_a_obj_poFire__stringBase0) + 0xE); - -/* 80CB4050-80CB4070 -00001 0020+00 1/0 0/0 0/0 .data l_daPoFire_Method */ -static actor_method_class l_daPoFire_Method = { - (process_method_func)daPoFire_Create__FP10fopAc_ac_c, - (process_method_func)daPoFire_Delete__FP10daPoFire_c, - (process_method_func)daPoFire_Execute__FP10daPoFire_c, - 0, - (process_method_func)daPoFire_Draw__FP10daPoFire_c, -}; - -/* 80CB4070-80CB40A0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_poFire */ -extern actor_process_profile_definition g_profile_Obj_poFire = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Tag_Lv4Candle, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daPoFire_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 540, // mPriority - &l_daPoFire_Method, // sub_method - 0x00044000, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80CB40A0-80CB40D0 00014C 0030+00 2/2 0/0 0/0 .data __vt__10daPoFire_c */ -SECTION_DATA extern void* __vt__10daPoFire_c[12] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)func_80CB3DD4, - (void*)func_80CB3DCC, - (void*)func_80CB3DC4, - (void*)func_80CB3DBC, - (void*)__dt__10daPoFire_cFv, - (void*)eventStart__10daPoFire_cFv, - (void*)eventRun__10daPoFire_cFv, - (void*)eventEnd__10daPoFire_cFv, -}; - -/* 80CB40D0-80CB40E8 00017C 0018+00 3/3 0/0 0/0 .data __vt__17dEvLib_callback_c */ -SECTION_DATA extern void* __vt__17dEvLib_callback_c[6] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__17dEvLib_callback_cFv, - (void*)eventStart__17dEvLib_callback_cFv, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)eventEnd__17dEvLib_callback_cFv, -}; - -/* 80CB40E8-80CB40F4 000194 000C+00 2/2 0/0 0/0 .data __vt__14daPoFire_HIO_c */ -SECTION_DATA extern void* __vt__14daPoFire_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14daPoFire_HIO_cFv, -}; - -/* 80CB40F4-80CB4100 0001A0 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */ -SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14mDoHIO_entry_cFv, -}; +/* 80CB4114-80CB4148 000014 0034+00 5/5 0/0 0/0 .bss l_HIO */ +static daPoFire_HIO_c l_HIO; /* 80CB294C-80CB29C4 0000EC 0078+00 1/1 0/0 0/0 .text __ct__14daPoFire_HIO_cFv */ daPoFire_HIO_c::daPoFire_HIO_c() { - // NONMATCHING + unk6 = 0x3C; + mWaitPeriod = 1.0f; + mWaitVertRange = 10.0f; + mWaitVertSpeed = 5.0f; + mMovePeriod1 = 0.2f; + mMoveSwingSpeed1 = 10.0f; + mMoveSpeed = 6.0f; + mMovePeriod2 = 1.0f; + mMoveSwingSpeed2 = 5.0f; + mMoveSwingRange = 40.0f; + mPickupRange = 150.0f; + mFireWaitTime = 20; } - -/* 80CB29C4-80CB2A0C 000164 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */ -// mDoHIO_entry_c::~mDoHIO_entry_c() { -extern "C" void __dt__14mDoHIO_entry_cFv() { - // NONMATCHING +#ifdef DEBUG +/* daPoFire_HIO_c::genMessage (JORMContext *) */ +void daPoFire_HIO_c::genMessage(JORMContext* mctx) { + mctx->genSlider("捕まえ範囲", &mPickupRange, 0.0f, 1000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genLabel("\n", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("周期", &mWaitPeriod, 0.1f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("上下幅", &mWaitVertRange, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("上下速度", &mWaitVertSpeed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genLabel("\n", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("周期", &mMovePeriod1, 0.1f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("移動速度", &mMoveSpeed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("揺らぎ速度", &mMoveSwingSpeed1, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 24); + mctx->genLabel("\n", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("周期", &mMovePeriod2, 0.1f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("揺らぎ速度", &mMoveSwingSpeed2, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 24); + mctx->genSlider("揺らぎ幅", &mMoveSwingRange, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genLabel("\n", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("Fire Wait", &mFireWaitTime, 0, 0xFFU, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); } +#endif /* 80CB2A0C-80CB2A74 0001AC 0068+00 2/2 0/0 0/0 .text setBaseMtx__10daPoFire_cFv */ void daPoFire_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mDoMtx_stack_c::transM(unk5F8.x, unk5F8.y, unk5F8.z); } /* ############################################################################################## */ -/* 80CB3F08-80CB3F0C 00001C 0004+00 1/2 0/0 0/0 .rodata itemNo */ -SECTION_RODATA static u32 const itemNo = 0xEFF0F1F2; -COMPILER_STRIP_GATE(0x80CB3F08, &itemNo); -/* 80CB3F0C-80CB3F10 000020 0004+00 4/9 0/0 0/0 .rodata @3726 */ -SECTION_RODATA static u8 const lit_3726[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80CB3F0C, &lit_3726); +/* 80CB3F08-80CB3F0C 00001C 0004+00 1/2 0/0 0/0 .rodata itemNo */ +static u8 const itemNo[4] = {fpcNm_ITEM_POU_FIRE1, fpcNm_ITEM_POU_FIRE2, fpcNm_ITEM_POU_FIRE3, + fpcNm_ITEM_POU_FIRE4}; /* 80CB2A74-80CB2BB8 000214 0144+00 1/1 0/0 0/0 .text create__10daPoFire_cFv */ -void daPoFire_c::create() { - // NONMATCHING +int daPoFire_c::create() { + fopAcM_SetupActor(this, daPoFire_c); + + int phase = dComIfG_resLoad(&mPhase, "poFire"); + if (phase != cPhs_COMPLEATE_e) { + return cPhs_INIT_e; + } + fopAcM_setRoomLayer(this, fopAcM_GetRoomNo(this)); + mActorID = getID(); + if (mActorID > 3 && mActorID != 0xFF) { + OS_REPORT("=== ポウ炎:IDが無効な値です ===\n"); + mActorID &= (u8)0x03; + } + dComIfGs_offItemFirstBit(itemNo[mActorID]); + unk5F4 = 0.0f; + unk5F8.x = 0.0f; + unk5F8.y = 0.0f; + unk5F8.z = 0.0f; + unk604 = 0; + unk590 = -1; + mMoveEnd = 0; + setBaseMtx(); + if (mActorID != 0xFF) { + init_modeInitMove(); + } else { + init_modeOnFire(); + } + +#ifdef DEBUG + l_HIO.entryHIO("ポウ炎"); +#endif + + return cPhs_COMPLEATE_e; } /* 80CB2BB8-80CB2BFC 000358 0044+00 1/1 0/0 0/0 .text Execute__10daPoFire_cFv */ -void daPoFire_c::Execute() { - // NONMATCHING +int daPoFire_c::Execute() { + eventUpdate(); + procMain(); + setBaseMtx(); + return 1; } /* ############################################################################################## */ -/* 80CB3F10-80CB3F14 000024 0004+00 1/1 0/0 0/0 .rodata @3756 */ -SECTION_RODATA static f32 const lit_3756 = 20.0f; -COMPILER_STRIP_GATE(0x80CB3F10, &lit_3756); - -/* 80CB4108-80CB4114 000008 000C+00 1/1 0/0 0/0 .bss @3656 */ -static u8 lit_3656[12]; - -/* 80CB4114-80CB4148 000014 0034+00 5/5 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[52]; - -/* 80CB4148-80CB414C 000048 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80CB4148[4]; - /* 80CB2BFC-80CB2D84 00039C 0188+00 1/1 0/0 0/0 .text procMain__10daPoFire_cFv */ void daPoFire_c::procMain() { - // NONMATCHING + static const daPoFire_c::modeProc mode_proc[9] = { + &daPoFire_c::modeInitMove, &daPoFire_c::modeWait, &daPoFire_c::modeWaitSetEffect, + &daPoFire_c::modeMoveOut, &daPoFire_c::modeMove, &daPoFire_c::modeNoMove, + &daPoFire_c::modeMoveWait, &daPoFire_c::modeOnFire, &daPoFire_c::modeFireEnd, + }; + + if (unk5C4) { + setFire(); + } + (this->*(mode_proc[mMode]))(); + attention_info.position = current.pos; + attention_info.position.y += 20.0f; } /* ############################################################################################## */ -/* 80CB3F14-80CB3F18 000028 0004+00 0/5 0/0 0/0 .rodata @3821 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3821 = 0.5f; -COMPILER_STRIP_GATE(0x80CB3F14, &lit_3821); -#pragma pop /* 80CB2D84-80CB2F68 000524 01E4+00 1/1 0/0 0/0 .text setFire__10daPoFire_cFv */ void daPoFire_c::setFire() { - // NONMATCHING + cXyz temp_r1(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::transS(unk5F8.x, unk5F8.y, unk5F8.z); + mDoMtx_stack_c::multVec(&temp_r1, &temp_r1); + + cXyz temp_r2 = current.pos + temp_r1; + unk5A0 = (temp_r2 - unk5AC) * 0.5f; + mParticleKeys[0] = dComIfGp_particle_set(mParticleKeys[0], 0x866D, &temp_r2, NULL, NULL); + mParticleKeys[1] = dComIfGp_particle_set(mParticleKeys[1], 0x869B, &temp_r2, NULL, NULL); + for (int i = 0; i < 2; i++) { + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleKeys[i]); + if (emitter != NULL) { + emitter->setParticleCallBackPtr(dPa_control_c::getParticleTracePCB()); + emitter->setUserWork((u32)&unk5A0); + } + } + unk5AC = temp_r2; } /* 80CB2F68-80CB2FD4 000708 006C+00 1/1 0/0 0/0 .text searchCandle__10daPoFire_cFPvPv */ -void daPoFire_c::searchCandle(void* param_0, void* param_1) { - // NONMATCHING +void* daPoFire_c::searchCandle(void* i_actor, void* i_this) { + daPoFire_c* _this = static_cast(i_this); + daPoCandle_c* _actor = static_cast(i_actor); + if (_actor != NULL && fopAcM_IsActor(_actor) && + fopAcM_GetProfName(_actor) == PROC_Obj_poCandle && + _this->mActorID == ((daPoCandle_c*)_actor)->getIDNum()) + { + return _actor; + } + return NULL; } /* 80CB2FD4-80CB3024 000774 0050+00 1/1 0/0 0/0 .text searchFireTag__10daPoFire_cFPvPv */ -void daPoFire_c::searchFireTag(void* param_0, void* param_1) { - // NONMATCHING +void* daPoFire_c::searchFireTag(void* i_actor, void* i_this) { + daPoFire_c* _this = static_cast(i_this); + daTagPoFire_c* _actor = static_cast(i_actor); + if (_actor != NULL && fopAcM_IsActor(_actor) && fopAcM_GetProfName(_actor) == PROC_Tag_poFire) { + return _actor; + } + return NULL; } /* 80CB3024-80CB30FC 0007C4 00D8+00 1/1 0/0 0/0 .text init_modeInitMove__10daPoFire_cFv */ void daPoFire_c::init_modeInitMove() { - // NONMATCHING + dBgS_GndChk gndchk; + gndchk.SetPos(¤t.pos); + mGroundY = dComIfG_Bgsp().GroundCross(&gndchk); + cXyz sp14(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::transS(unk5F8.x, unk5F8.y, unk5F8.z); + mDoMtx_stack_c::multVec(&sp14, &sp14); + unk5AC = current.pos + sp14; + unk5C4 = 1; + mMode = MODE_INIT_MOVE; } /* ############################################################################################## */ -/* 80CB3F18-80CB3F1C 00002C 0004+00 0/2 0/0 0/0 .rodata @3883 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3883 = 70.0f; -COMPILER_STRIP_GATE(0x80CB3F18, &lit_3883); -#pragma pop - -/* 80CB3F1C-80CB3F20 000030 0004+00 0/2 0/0 0/0 .rodata @3884 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3884 = 2.0f; -COMPILER_STRIP_GATE(0x80CB3F1C, &lit_3884); -#pragma pop /* 80CB30FC-80CB31FC 00089C 0100+00 1/0 0/0 0/0 .text modeInitMove__10daPoFire_cFv */ void daPoFire_c::modeInitMove() { - // NONMATCHING + f32 calc_res = cLib_addCalc(¤t.pos.y, mGroundY + 70.0f, 0.5f, 2.0f, 0.5f); + if (calc_res == 0.0f) { + unk5D4 = current.pos.y; + mpPoCandle = (daPoCandle_c*)fopAcM_Search((fopAcIt_JudgeFunc)searchCandle, this); + mpTagPoFire = (daTagPoFire_c*)fopAcM_Search((fopAcIt_JudgeFunc)searchFireTag, this); + if (mpPoCandle == NULL && mpTagPoFire == NULL) { + init_modeMoveOut(); + return; + } + if (mpTagPoFire != NULL) { + init_modeMoveOut(); + return; + } + if (mpPoCandle != NULL) { + if (unk590 != -1) { + orderEvent(0xFF, unk590, 1); + return; + } + init_modeMove(); + } + } +} + +// needed for .rodata ordering +static f32 dummy1() { + return -1.0f; } /* ############################################################################################## */ -/* 80CB3F20-80CB3F24 000034 0004+00 0/0 0/0 0/0 .rodata @3889 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3889 = -1.0f; -COMPILER_STRIP_GATE(0x80CB3F20, &lit_3889); -#pragma pop - -/* 80CB3F24-80CB3F28 000038 0004+00 0/1 0/0 0/0 .rodata @3915 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3915 = -70.0f; -COMPILER_STRIP_GATE(0x80CB3F24, &lit_3915); -#pragma pop - -/* 80CB3F28-80CB3F2C 00003C 0004+00 0/3 0/0 0/0 .rodata @3916 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_3916 = 0x43360B61; -COMPILER_STRIP_GATE(0x80CB3F28, &lit_3916); -#pragma pop /* 80CB31FC-80CB32EC 00099C 00F0+00 1/0 0/0 0/0 .text modeWait__10daPoFire_cFv */ void daPoFire_c::modeWait() { - // NONMATCHING + if (eventInfo.checkCommandCatch()) { + init_modeWaitSetEffect(); + } else { + dComIfGp_att_CatchRequest(this, itemNo[mActorID], l_HIO.mPickupRange, 70.0f, -70.0f, 0x5000, + 1); + eventInfo.onCondition(dEvtCnd_40_e); + } + current.pos.y = unk5D4 + l_HIO.mWaitVertRange * cM_ssin(cM_deg2s(unk5D8 * l_HIO.mWaitPeriod)); + unk5D8 += l_HIO.mWaitVertSpeed; } /* 80CB32EC-80CB3380 000A8C 0094+00 1/1 0/0 0/0 .text init_modeWaitSetEffect__10daPoFire_cFv */ void daPoFire_c::init_modeWaitSetEffect() { - // NONMATCHING + for (int i = 0; i < 2; i++) { + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleKeys[i]); + if (emitter != NULL) { + emitter->deleteAllParticle(); + emitter->becomeInvalidEmitter(); + } + } + unk5C4 = 0; + mMode = MODE_WAIT_SET_EFFECT; } /* 80CB3380-80CB3540 000B20 01C0+00 1/0 0/0 0/0 .text modeWaitSetEffect__10daPoFire_cFv */ void daPoFire_c::modeWaitSetEffect() { - // NONMATCHING + JPABaseEmitter* emitter; + if (!daPy_getLinkPlayerActorClass()->getBottleMtx()) { + for (int i = 0; i < 2; i++) { + emitter = dComIfGp_particle_getEmitter(mParticleKeys[i]); + if (emitter != NULL) { + emitter->deleteAllParticle(); + emitter->becomeInvalidEmitter(); + } + } + fopAcM_delete(this); + return; + } + + mParticleKeys[0] = dComIfGp_particle_set(mParticleKeys[0], 0x866F, ¤t.pos, NULL, NULL); + mParticleKeys[1] = dComIfGp_particle_set(mParticleKeys[1], 0x866E, ¤t.pos, NULL, NULL); + + for (int i = 0; i < 2; i++) { + emitter = dComIfGp_particle_getEmitter(mParticleKeys[i]); + if (emitter != NULL) { + emitter->setGlobalRTMatrix(daPy_getLinkPlayerActorClass()->getBottleMtx()); + } + } } /* 80CB3540-80CB355C 000CE0 001C+00 1/1 0/0 0/0 .text init_modeMoveOut__10daPoFire_cFv */ void daPoFire_c::init_modeMoveOut() { - // NONMATCHING + unk5EC = 0.0f; + unk5F0 = 0.0f; + mMode = MODE_MOVE_OUT; } /* ############################################################################################## */ -/* 80CB3F2C-80CB3F30 000040 0004+00 0/2 0/0 0/0 .rodata @4039 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4039 = 100.0f; -COMPILER_STRIP_GATE(0x80CB3F2C, &lit_4039); -#pragma pop - -/* 80CB3F30-80CB3F34 000044 0004+00 0/2 0/0 0/0 .rodata @4040 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4040 = 1.0f / 100.0f; -COMPILER_STRIP_GATE(0x80CB3F30, &lit_4040); -#pragma pop /* 80CB355C-80CB3714 000CFC 01B8+00 1/0 0/0 0/0 .text modeMoveOut__10daPoFire_cFv */ void daPoFire_c::modeMoveOut() { - // NONMATCHING + unk5E8 = 1.0f + cM_ssin(cM_deg2s(unk5EC * l_HIO.mMovePeriod1)); + f32 temp_f31 = cLib_addCalcPos(¤t.pos, mpTagPoFire->current.pos, 1.0f, + l_HIO.mMoveSpeed * unk5E8, 0.5f); + unk5EC += l_HIO.mMoveSwingSpeed1; + if (temp_f31 < 100.0f) { + cLib_addCalc(&unk608, 0.0f, 0.5f, 0.2f, 0.01f); + } else { + unk608 = 1.0f; + } + unk5F8.x = l_HIO.mMoveSwingRange * unk608 * cM_ssin(cM_deg2s(unk5F0 * l_HIO.mMovePeriod2)); + unk5F8.y = l_HIO.mMoveSwingRange * unk608 * cM_ssin(cM_deg2s(unk5F0 * l_HIO.mMovePeriod2)); + unk5F0 += l_HIO.mMoveSwingSpeed2; + if (0.0f == temp_f31) { + mpTagPoFire->setFireFlag(1); + mMoveEnd = true; + unk5C4 = 0; + init_modeFireEnd(); + } } /* 80CB3714-80CB3730 000EB4 001C+00 2/2 0/0 0/0 .text init_modeMove__10daPoFire_cFv */ void daPoFire_c::init_modeMove() { - // NONMATCHING + unk5EC = 0.0f; + unk5F0 = 0.0f; + mMode = MODE_MOVE; } /* 80CB3730-80CB38EC 000ED0 01BC+00 1/0 0/0 0/0 .text modeMove__10daPoFire_cFv */ void daPoFire_c::modeMove() { - // NONMATCHING + unk5E8 = 1.0f + cM_ssin(cM_deg2s(unk5EC * l_HIO.mMovePeriod1)); + f32 temp_f31 = cLib_addCalcPos(¤t.pos, mpPoCandle->getFirePos(), 1.0f, + l_HIO.mMoveSpeed * unk5E8, 0.5f); + unk5EC += l_HIO.mMoveSwingSpeed1; + if (temp_f31 < 100.0f) { + cLib_addCalc(&unk608, 0.0f, 0.5f, 0.2f, 0.01f); + } else { + unk608 = 1.0f; + } + unk5F8.x = l_HIO.mMoveSwingRange * unk608 * cM_ssin(cM_deg2s(unk5F0 * l_HIO.mMovePeriod2)); + unk5F8.y = l_HIO.mMoveSwingRange * unk608 * cM_ssin(cM_deg2s(unk5F0 * l_HIO.mMovePeriod2)); + unk5F0 += l_HIO.mMoveSwingSpeed2; + if (0.0f == temp_f31) { + unk5F8.x = 0.0f; + unk5F8.y = 0.0f; + init_modeMoveWait(); + } } /* 80CB38EC-80CB3918 00108C 002C+00 1/1 0/0 0/0 .text init_modeMoveWait__10daPoFire_cFv */ void daPoFire_c::init_modeMoveWait() { - // NONMATCHING + mWaitTimer = l_HIO.mFireWaitTime; + mMoveEnd = true; + mpPoCandle->setFireFlag(1); + mMode = MODE_MOVE_WAIT; } /* 80CB3918-80CB3958 0010B8 0040+00 1/0 0/0 0/0 .text modeMoveWait__10daPoFire_cFv */ void daPoFire_c::modeMoveWait() { - // NONMATCHING + if (mWaitTimer != 0) { + mWaitTimer--; + return; + } + unk5C4 = 0; + init_modeFireEnd(); } /* ############################################################################################## */ -/* 80CB3F34-80CB3F38 000048 0004+00 0/1 0/0 0/0 .rodata @4107 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4107 = 300.0f; -COMPILER_STRIP_GATE(0x80CB3F34, &lit_4107); -#pragma pop /* 80CB3958-80CB39CC 0010F8 0074+00 1/0 0/0 0/0 .text modeNoMove__10daPoFire_cFv */ void daPoFire_c::modeNoMove() { - // NONMATCHING + f32 calc_res = cLib_addCalc(¤t.pos.y, mGroundY + 300.0f, 0.5f, 2.0f, 0.5f); + if (calc_res == 0.0f) { + unk5C4 = 0; + init_modeFireEnd(); + } } /* 80CB39CC-80CB39E0 00116C 0014+00 1/1 0/0 0/0 .text init_modeOnFire__10daPoFire_cFv */ void daPoFire_c::init_modeOnFire() { - // NONMATCHING + unk5C4 = 0; + mMode = MODE_ON_FIRE; } /* ############################################################################################## */ -/* 80CB3F38-80CB3F3C 00004C 0004+00 1/1 0/0 0/0 .rodata @4134 */ -SECTION_RODATA static f32 const lit_4134 = 3.5f; -COMPILER_STRIP_GATE(0x80CB3F38, &lit_4134); /* 80CB39E0-80CB3ADC 001180 00FC+00 1/0 0/0 0/0 .text modeOnFire__10daPoFire_cFv */ void daPoFire_c::modeOnFire() { - // NONMATCHING + cXyz sp8(3.5f, 3.5f, 3.5f); + mParticleKeys[0] = dComIfGp_particle_set(mParticleKeys[0], 0x8670, ¤t.pos, NULL, &sp8); + mParticleKeys[1] = dComIfGp_particle_set(mParticleKeys[1], 0x8671, ¤t.pos, NULL, &sp8); } /* 80CB3ADC-80CB3AE8 00127C 000C+00 3/3 0/0 0/0 .text init_modeFireEnd__10daPoFire_cFv */ void daPoFire_c::init_modeFireEnd() { - // NONMATCHING + mMode = MODE_FIRE_END; } /* 80CB3AE8-80CB3B70 001288 0088+00 1/0 0/0 0/0 .text modeFireEnd__10daPoFire_cFv */ void daPoFire_c::modeFireEnd() { - // NONMATCHING + for (int i = 0; i < 2; i++) { + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleKeys[i]); + if (emitter != NULL) { + emitter->deleteAllParticle(); + dComIfGp_particle_levelEmitterOnEventMove(mParticleKeys[i]); + } + } + fopAcM_delete(this); } /* 80CB3B70-80CB3BE0 001310 0070+00 2/1 0/0 0/0 .text eventStart__10daPoFire_cFv */ -void daPoFire_c::eventStart() { - // NONMATCHING +bool daPoFire_c::eventStart() { + mStaffID = dComIfGp_evmng_getMyStaffId("pofire", NULL, 0); + dComIfGp_event_setTalkPartner(mpPoCandle); + init_modeMove(); + return true; } /* 80CB3BE0-80CB3C64 001380 0084+00 2/1 0/0 0/0 .text eventRun__10daPoFire_cFv */ -void daPoFire_c::eventRun() { - // NONMATCHING +bool daPoFire_c::eventRun() { + static char* action_table[1] = { + "MOVE_END", + }; + + int staff_id = dComIfGp_evmng_getMyActIdx(mStaffID, action_table, 1, 0, 0); + switch (staff_id) { + case 0: + if (mMoveEnd) { + dComIfGp_evmng_cutEnd(mStaffID); + } + } + return true; } /* 80CB3C64-80CB3C6C 001404 0008+00 2/1 0/0 0/0 .text eventEnd__10daPoFire_cFv */ @@ -605,103 +421,85 @@ bool daPoFire_c::eventEnd() { } /* 80CB3C6C-80CB3C74 00140C 0008+00 1/1 0/0 0/0 .text Draw__10daPoFire_cFv */ -bool daPoFire_c::Draw() { - return true; +int daPoFire_c::Draw() { + return 1; } /* 80CB3C74-80CB3CA4 001414 0030+00 1/1 0/0 0/0 .text Delete__10daPoFire_cFv */ -void daPoFire_c::Delete() { - // NONMATCHING +int daPoFire_c::Delete() { + dComIfG_resDelete(&mPhase, "poFire"); + +#ifdef DEBUG + l_HIO.removeHIO(); +#endif + + return 1; } /* 80CB3CA4-80CB3CC4 001444 0020+00 1/0 0/0 0/0 .text daPoFire_Draw__FP10daPoFire_c */ -static void daPoFire_Draw(daPoFire_c* param_0) { - // NONMATCHING +static int daPoFire_Draw(daPoFire_c* i_this) { + return static_cast(i_this)->Draw(); } /* 80CB3CC4-80CB3CE4 001464 0020+00 1/0 0/0 0/0 .text daPoFire_Execute__FP10daPoFire_c */ -static void daPoFire_Execute(daPoFire_c* param_0) { - // NONMATCHING +static int daPoFire_Execute(daPoFire_c* i_this) { + return static_cast(i_this)->Execute(); } /* 80CB3CE4-80CB3D04 001484 0020+00 1/0 0/0 0/0 .text daPoFire_Delete__FP10daPoFire_c */ -static void daPoFire_Delete(daPoFire_c* param_0) { - // NONMATCHING +static int daPoFire_Delete(daPoFire_c* i_this) { + fopAcM_RegisterDeleteID(i_this, "daPoFire"); + return static_cast(i_this)->Delete(); } /* 80CB3D04-80CB3D24 0014A4 0020+00 1/0 0/0 0/0 .text daPoFire_Create__FP10fopAc_ac_c */ -static void daPoFire_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80CB3D24-80CB3D80 0014C4 005C+00 2/1 0/0 0/0 .text __dt__14daPoFire_HIO_cFv */ -daPoFire_HIO_c::~daPoFire_HIO_c() { - // NONMATCHING -} - -/* 80CB3D80-80CB3DBC 001520 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_poFire_cpp */ -void __sinit_d_a_obj_poFire_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80CB3D80, __sinit_d_a_obj_poFire_cpp); -#pragma pop - -/* 80CB3DBC-80CB3DC4 00155C 0008+00 1/0 0/0 0/0 .text @1392@eventEnd__10daPoFire_cFv */ -static void func_80CB3DBC() { - // NONMATCHING -} - -/* 80CB3DC4-80CB3DCC 001564 0008+00 1/0 0/0 0/0 .text @1392@eventRun__10daPoFire_cFv */ -static void func_80CB3DC4() { - // NONMATCHING -} - -/* 80CB3DCC-80CB3DD4 00156C 0008+00 1/0 0/0 0/0 .text @1392@eventStart__10daPoFire_cFv */ -static void func_80CB3DCC() { - // NONMATCHING -} - -/* 80CB3DD4-80CB3DDC 001574 0008+00 1/0 0/0 0/0 .text @1392@__dt__10daPoFire_cFv */ -static void func_80CB3DD4() { - // NONMATCHING -} - -/* 80CB3DDC-80CB3E24 00157C 0048+00 1/0 0/0 0/0 .text __dt__17dEvLib_callback_cFv */ -// dEvLib_callback_c::~dEvLib_callback_c() { -extern "C" void __dt__17dEvLib_callback_cFv() { - // NONMATCHING -} - -/* 80CB3E24-80CB3E2C 0015C4 0008+00 1/0 0/0 0/0 .text eventStart__17dEvLib_callback_cFv - */ -// bool dEvLib_callback_c::eventStart() { -extern "C" bool eventStart__17dEvLib_callback_cFv() { - return true; -} - -/* 80CB3E2C-80CB3E34 0015CC 0008+00 1/0 0/0 0/0 .text eventRun__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventRun() { -extern "C" bool eventRun__17dEvLib_callback_cFv() { - return true; -} - -/* 80CB3E34-80CB3E3C 0015D4 0008+00 1/0 0/0 0/0 .text eventEnd__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventEnd() { -extern "C" bool eventEnd__17dEvLib_callback_cFv() { - return true; +static int daPoFire_Create(fopAc_ac_c* i_this) { + fopAcM_RegisterCreateID(daPoFire_c, i_this, "daPoFire"); + return a_this->create(); } /* 80CB3E3C-80CB3E58 0015DC 001C+00 1/1 0/0 0/0 .text getFirePos__12daPoCandle_cFv */ -void daPoCandle_c::getFirePos() { - // NONMATCHING +cXyz daPoCandle_c::getFirePos() { + return static_cast(mFirePos); } -/* 80CB3E58-80CB3ED8 0015F8 0080+00 2/1 0/0 0/0 .text __dt__10daPoFire_cFv */ -daPoFire_c::~daPoFire_c() { - // NONMATCHING -} +// Used to match data on debug, instead of UNK_REL_DATA +// #ifdef DEBUG +// const u8 cNullVec__6Z2Calc[12] = { \ +// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ +// }; +// const u32 lit_1787[1 + 6 /* padding */] = { \ +// 0x02000201, \ +// 0x00000000, \ +// 0x7FF7FFFF, \ +// 0xFFFFFFFF, \ +// 0x7FF7FFFF, \ +// 0xFFFFFFFF, \ +// 0x7FBFFFFF, \ +// }; +// #endif -/* 80CB3F3C-80CB3F3C 000050 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80CB4050-80CB4070 -00001 0020+00 1/0 0/0 0/0 .data l_daPoFire_Method */ +static actor_method_class l_daPoFire_Method = { + (process_method_func)daPoFire_Create, (process_method_func)daPoFire_Delete, + (process_method_func)daPoFire_Execute, NULL, + (process_method_func)daPoFire_Draw, +}; + +/* 80CB4070-80CB40A0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_poFire */ +extern actor_process_profile_definition g_profile_Obj_poFire = { + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Tag_Lv4Candle, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daPoFire_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 540, // mPriority + &l_daPoFire_Method, // sub_method + 0x00044000, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +};