Matching d_a_obj_poFire (#2551)

* Matching daPoFire

* Adressed comments
This commit is contained in:
Stbn-antier 2025-07-23 23:03:44 +09:00 committed by GitHub
parent 295cc46d34
commit c5584cc6c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 441 additions and 572 deletions

View File

@ -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"),

View File

@ -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);

View File

@ -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 */

View File

@ -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;

File diff suppressed because it is too large Load Diff