d_a_obj_twGate Matching (#2555)

* d_a_obj_twGate Matching

* d_a_obj_volcbom OK
This commit is contained in:
hatal175
2025-07-26 03:44:23 +03:00
committed by GitHub
parent 585670f2b1
commit 70a1741977
40 changed files with 1428 additions and 1542 deletions
+3 -1
View File
@@ -67,11 +67,13 @@ public:
STATIC_ASSERT(sizeof(e_bu_class) == 0xaa4);
class daE_BU_HIO_c {
class daE_BU_HIO_c : public JORReflexible {
public:
/* 806911AC */ daE_BU_HIO_c();
/* 806941D4 */ virtual ~daE_BU_HIO_c() {}
void genMessage(JORMContext* ctx);
/* 0x04 */ s8 id;
/* 0x08 */ f32 base_size;
/* 0x0C */ f32 fly_speed;
+2
View File
@@ -118,6 +118,8 @@ public:
/* 8082902C */ daE_ZH_HIO_c();
/* 8082F160 */ virtual ~daE_ZH_HIO_c() {}
void genMessage(JORMContext* ctx);
// ボールマスター (Ball Master)
/* 0x04 */ s8 field_0x4;
/* 0x08 */ f32 model_size; // モデルサイズ (Model Size)
+6
View File
@@ -136,6 +136,7 @@ public:
FLG0_UNK_4 = 4,
FLG0_UNK_2 = 2,
FLG0_UNK_1 = 1,
FLG0_TAG_PORTAL = FLG0_TAG_WAIT | FLG0_PORTAL_OBJ_CALL,
};
enum daMidna_FLG1 {
@@ -298,6 +299,11 @@ public:
onEndResetStateFlg0(ERFLG0_UNK_2);
}
void onTagWaitPosPortalObj(const cXyz& i_pos) {
mTagWaitPos = i_pos;
onStateFlg0(FLG0_TAG_PORTAL);
}
void onTagWaitPos(const cXyz* param_0) {
mTagWaitPos = *param_0;
onStateFlg0(FLG0_TAG_WAIT);
+22 -9
View File
@@ -2,6 +2,7 @@
#define D_A_OBJ_TWGATE_H
#include "f_op/f_op_actor_mng.h"
#include "d/d_bg_s_movebg_actor.h"
/**
* @ingroup actors-objects
@@ -11,24 +12,36 @@
* @details
*
*/
class daTwGate_c : public fopAc_ac_c {
class daTwGate_c : public dBgS_MoveBgActor {
public:
/* 80D1FB84 */ void setBaseMtx();
/* 80D1FC0C */ void CreateHeap();
/* 80D1FD44 */ void create();
/* 80D1FFA4 */ void Execute(f32 (**)[3][4]);
/* 80D200B4 */ void Draw();
/* 80D20180 */ void Delete();
/* 80D1FC0C */ int CreateHeap();
/* 80D1FD44 */ int create();
/* 80D1FFA4 */ int Execute(Mtx**);
/* 80D200B4 */ int Draw();
/* 80D20180 */ int Delete();
int getGateType() { return fopAcM_GetParamBit(this, 4, 8); }
private:
/* 0x568 */ u8 field_0x568[0x5fc - 0x568];
/* 0x5A0 */ request_of_phase_process_class mPhase;
/* 0x5A8 */ J3DModel* mModel;
/* 0x5AC */ mDoExt_btkAnm mBtk;
/* 0x5C4 */ mDoExt_brkAnm mBrk;
/* 0x5DC */ u8 mGateType;
/* 0x5E0 */ cM3dGLin mLine;
};
STATIC_ASSERT(sizeof(daTwGate_c) == 0x5fc);
class daTwGate_HIO_c {
class daTwGate_HIO_c : public fOpAcm_HIO_entry_c {
public:
/* 80D1FAAC */ daTwGate_HIO_c();
/* 80D2024C */ ~daTwGate_HIO_c();
/* 80D2024C */ ~daTwGate_HIO_c() {}
void genMessage(JORMContext* ctx);
/* 0x4 */ f32 mRange;
};
#endif /* D_A_OBJ_TWGATE_H */
+96 -11
View File
@@ -1,6 +1,10 @@
#ifndef D_A_OBJ_VOLCBOM_H
#define D_A_OBJ_VOLCBOM_H
#include "d/d_bg_s_acch.h"
#include "d/d_bg_s_movebg_actor.h"
#include "d/d_cc_d.h"
#include "d/d_msg_flow.h"
#include "f_op/f_op_actor_mng.h"
/**
@@ -11,14 +15,33 @@
* @details
*
*/
class daObjVolcBom_c : public fopAc_ac_c {
class daObjVolcBom_c : public dBgS_MoveBgActor {
public:
typedef void (daObjVolcBom_c::*modeFunc)();
typedef void (daObjVolcBom_c::*actionFunc)();
enum Mode {
MODE_WAIT_APPEAR,
MODE_FALL,
MODE_WAIT_END_FALL_DEMO,
MODE_WAIT,
};
enum Action {
ACTION_WAIT,
ACTION_ORDER_EVENT,
ACTION_TALK_EVENT,
ACTION_WARP_EVENT,
ACTION_ORDER_A_TALK_EVENT,
ACTION_DEAD,
};
/* 80D241E0 */ void initBaseMtx();
/* 80D24238 */ void setBaseMtx();
/* 80D242A8 */ void Create();
/* 80D244E0 */ void CreateHeap();
/* 80D248F4 */ void create1st();
/* 80D249D0 */ void Execute(f32 (**)[3][4]);
/* 80D242A8 */ int Create();
/* 80D244E0 */ int CreateHeap();
/* 80D248F4 */ int create1st();
/* 80D249D0 */ int Execute(Mtx**);
/* 80D24A2C */ void mode_proc_call();
/* 80D24B18 */ void init_modeWaitAppear();
/* 80D24B6C */ void modeWaitAppear();
@@ -33,7 +56,7 @@ public:
/* 80D25224 */ void appear();
/* 80D25230 */ void disappear();
/* 80D2523C */ void setSmoke();
/* 80D252C8 */ void checkTalkDistance();
/* 80D252C8 */ bool checkTalkDistance();
/* 80D25364 */ void calcMidnaWaitPos();
/* 80D253FC */ void setSrcEffect();
/* 80D25528 */ void setBindEffect();
@@ -51,20 +74,82 @@ public:
/* 80D25EE4 */ void actionDead();
/* 80D25EE8 */ void demoProc();
/* 80D26468 */ void calcObjPos();
/* 80D264E8 */ void Draw();
/* 80D266FC */ void Delete();
/* 80D264E8 */ int Draw();
/* 80D266FC */ int Delete();
void startFall() { field_0x95f = 1; }
void startSearch() { field_0x960 = 1; }
void setAction(u8 action) { mAction = action; }
u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); }
u8 getArg0() { return fopAcM_GetParamBit(this, 16, 8); }
u16 getMsgID() { return mMsgID; }
private:
/* 0x568 */ u8 field_0x568[0x95F - 0x568];
/* 0x5A0 */ request_of_phase_process_class mPhase;
/* 0x5A8 */ J3DModel* mModel1;
/* 0x5AC */ mDoExt_btkAnm* mBtk1;
/* 0x5B0 */ mDoExt_brkAnm* mBrk1;
/* 0x5B4 */ mDoExt_bckAnm* mBck1;
/* 0x5B8 */ J3DModel* mModel2;
/* 0x5BC */ mDoExt_btkAnm* mBtk2;
/* 0x5C0 */ mDoExt_brkAnm* mBrk2;
/* 0x5C4 */ JPABaseEmitter* mSmokeEmitter;
/* 0x5C8 */ u8 mSmokeTimer;
/* 0x5C9 */ bool field_0x5c9;
/* 0x5CA */ u8 mAction;
/* 0x5CB */ bool field_0x5cb;
/* 0x5CC */ dBgS_ObjAcch mAcch;
/* 0x7A4 */ dBgS_AcchCir mAcchCir;
/* 0x7E4 */ dCcD_Stts mStts;
/* 0x820 */ dCcD_Cyl mCyl;
/* 0x95C */ u8 mDemoTimer;
/* 0x95D */ u8 mWaitAppearState;
/* 0x95E */ bool field_0x95e;
/* 0x95F */ u8 field_0x95f;
/* 0x960 */ u8 field_0x960;
/* 0x961 */ u8 field_0x961[0xA1C - 0x961];
/* 0x960 */ bool field_0x960;
/* 0x961 */ u8 mMode;
/* 0x962 */ bool misAppearing;
/* 0x963 */ bool mIsMsgIDInit;
/* 0x964 */ u16 mMsgID;
/* 0x968 */ cXyz mLightPosWorld;
/* 0x974 */ u32 mShadowID;
/* 0x978 */ f32 field_0x978;
/* 0x97C */ f32 mBaseScale;
/* 0x980 */ cXyz mWarpSEPos;
/* 0x98C */ cXyz mWaitSEPos;
/* 0x998 */ cXyz mMidnaWaitPos;
/* 0x9A4 */ dMsgFlow_c mMsgFlow;
/* 0x9F0 */ s16 mEventId;
/* 0x9F4 */ int mStaffId;
/* 0x9F8 */ JPABaseEmitter* mStartEmitters[3];
/* 0xA04 */ JPABaseEmitter* mDisappearEmitters[1];
/* 0xA08 */ JPABaseEmitter* mBindEmitters[4];
/* 0xA18 */ u16 mEffectJntNo;
/* 0xA1A */ bool field_0xa1a;
/* 0xA1B */ u8 mNaviTimer;
};
STATIC_ASSERT(sizeof(daObjVolcBom_c) == 0xa1c);
#ifdef DEBUG
class daObjVolcBom_HIO_c : public mDoHIO_entry_c {
public:
daObjVolcBom_HIO_c();
void genMessage(JORMContext* ctx);
/* 0x04 */ u8 field_0x04;
/* 0x08 */ f32 field_0x08;
/* 0x0C */ u8 field_0x0c[0x14 - 0x0c];
/* 0x14 */ u8 field_0x14;
/* 0x15 */ u8 field_0x15;
/* 0x18 */ f32 field_0x18;
/* 0x1C */ f32 field_0x1c;
/* 0x20 */ f32 field_0x20;
/* 0x24 */ f32 field_0x24;
/* 0x28 */ u8 field_0x28[0x34 - 0x28];
/* 0x34 */ u8 field_0x34;
};
#endif
#endif /* D_A_OBJ_VOLCBOM_H */
+2 -1
View File
@@ -437,7 +437,7 @@ public:
FLG3_COPY_ROD_ATN_KEEP = 0x10000000,
FLG3_BOOMERANG_ATN_KEEP = 0x8000000,
FLG3_UNK_4000000 = 0x4000000,
FLG3_UNK_2000000 = 0x2000000,
FLG3_WARP_OBJ_DEMO = 0x2000000,
FLG3_UNK_1000000 = 0x1000000,
FLG3_UNK_800000 = 0x800000,
FLG3_UNK_400000 = 0x400000,
@@ -963,6 +963,7 @@ public:
}
}
void onMidnaTalkPolySpeed() { onNoResetFlg3(FLG3_MIDNA_TALK_POLY_SPEED); }
void onWarpObjDemo() { onNoResetFlg3(FLG3_WARP_OBJ_DEMO); }
void offCargoCarry() {
if (checkCargoCarry()) {
+4
View File
@@ -3517,6 +3517,10 @@ inline BOOL dComIfGp_evmng_startCheck(char const* i_event) {
return g_dComIfG_gameInfo.play.getEvtManager().startCheckOld(i_event);
}
inline BOOL dComIfGp_evmng_startCheck(s16 i_eventId) {
return g_dComIfG_gameInfo.play.getEvtManager().startCheck(i_eventId);
}
inline BOOL dComIfGp_evmng_endCheck(const char* event) {
return g_dComIfG_gameInfo.play.getEvtManager().endCheckOld(event);
}
+12
View File
@@ -88,6 +88,18 @@ struct fopAcM_search_prm {
struct fOpAcm_HIO_entry_c : public mDoHIO_entry_c {
virtual ~fOpAcm_HIO_entry_c() {}
#ifdef DEBUG
void removeHIO(const fopAc_ac_c* i_this) { removeHIO(*i_this); }
void removeHIO(const fopAc_ac_c& i_this) { removeHIO(static_cast<const leafdraw_class&>(i_this)); }
void removeHIO(const leafdraw_class& i_this) { removeHIO(i_this.base); }
void removeHIO(const base_process_class& i_this) { removeHIO(i_this.state); }
void removeHIO(const state_class& state) {
if (state.create_phase == cPhs_NEXT_e) {
mDoHIO_entry_c::removeHIO();
}
}
#endif
};
class l_HIO {
+6 -2
View File
@@ -14,14 +14,18 @@ typedef struct process_method_class process_method_class;
typedef struct process_profile_definition process_profile_definition;
typedef struct profile_method_class profile_method_class;
typedef struct state_class {
/* 0x00 */ s8 init_state; // maybe inaccurate name
/* 0x01 */ u8 create_phase;
} state_class;
typedef struct base_process_class {
/* 0x00 */ int type;
/* 0x04 */ fpc_ProcID id;
/* 0x08 */ s16 name;
/* 0x0A */ s8 unk_0xA;
/* 0x0B */ u8 pause_flag;
/* 0x0C */ s8 init_state; // maybe inaccurate name
/* 0x0D */ u8 create_phase;
/* 0x0C */ state_class state;
/* 0x0E */ s16 profname;
/* 0x10 */ process_profile_definition* profile;
/* 0x14 */ struct create_request* create_req;
+1 -1
View File
@@ -54,7 +54,7 @@ inline BOOL fpcM_IsJustType(int i_typeA, int i_typeB) {
}
inline bool fpcM_IsFirstCreating(void* i_process) {
return ((base_process_class*)i_process)->init_state == 0;
return ((base_process_class*)i_process)->state.init_state == 0;
}
inline process_profile_definition* fpcM_GetProfile(void* i_process) {