d_a_e_po 99% Matching (#2517)

* anm_init and nodeCallBack, need to review nodeCallBack as weird code

* First pass on class, 86% match

* Cleanup for PR, still work to do

* Solve error after pull

* Clangd format

* Adressing PR comments

* Update l_HIOInit

* Fix debug building, 60% match on debug :')
This commit is contained in:
Stbn-antier 2025-07-16 05:35:50 +09:00 committed by GitHub
parent c0717e1e56
commit 522f06458d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 3232 additions and 3117 deletions

View File

@ -363,7 +363,7 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa
@1012 = .bss:0x0000003C; // type:object size:0x1 scope:local
@1010 = .bss:0x00000040; // type:object size:0x1 scope:local
@1009 = .bss:0x00000044; // type:object size:0x1 scope:local
lbl_221_bss_45 = .bss:0x00000045; // type:object size:0x1 data:byte
l_HIOInit = .bss:0x00000045; // type:object size:0x1 data:byte
@3933 = .bss:0x00000048; // type:object size:0xC scope:local
l_HIO = .bss:0x00000054; // type:object size:0x3C scope:global align:4 data:float
mRollCount = .bss:0x00000090; // type:object size:0x2 scope:global

View File

@ -362,7 +362,7 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa
@1012 = .bss:0x0000003C; // type:object size:0x1 scope:local
@1010 = .bss:0x00000040; // type:object size:0x1 scope:local
@1009 = .bss:0x00000044; // type:object size:0x1 scope:local
lbl_221_bss_45 = .bss:0x00000045; // type:object size:0x1 data:byte
l_HIOInit = .bss:0x00000045; // type:object size:0x1 data:byte
@3933 = .bss:0x00000048; // type:object size:0xC scope:local
l_HIO = .bss:0x00000054; // type:object size:0x3C scope:global align:4 data:float
mRollCount = .bss:0x00000090; // type:object size:0x2 scope:global

View File

@ -362,7 +362,7 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa
@1012 = .bss:0x0000003C; // type:object size:0x1 scope:local
@1010 = .bss:0x00000040; // type:object size:0x1 scope:local
@1009 = .bss:0x00000044; // type:object size:0x1 scope:local
lbl_221_bss_45 = .bss:0x00000045; // type:object size:0x1 data:byte
l_HIOInit = .bss:0x00000045; // type:object size:0x1 data:byte
@3933 = .bss:0x00000048; // type:object size:0xC scope:local
l_HIO = .bss:0x00000054; // type:object size:0x3C scope:global align:4 data:float
mRollCount = .bss:0x00000090; // type:object size:0x2 scope:global

View File

@ -1,27 +1,175 @@
#ifndef D_A_E_PO_H
#define D_A_E_PO_H
#include "f_op/f_op_actor_mng.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "d/d_cc_uty.h"
#include "d/d_com_inf_game.h"
/**
* @ingroup actors-enemies
* @class e_po_class
* @brief Poe
*
* @details
*
*
* @details
*
*/
class e_po_class : public fopEn_enemy_c {
enum daE_PO_ANM {
ANM_ATTACK = 5,
ANM_AWAKE = 6,
ANM_DAMAGE = 7,
ANM_DOWN = 8,
ANM_DOWN_DAMAGE = 9,
ANM_DOWN_DEAD = 10,
ANM_DOWN_WAIT = 11,
ANM_FIRE_CATCH = 12,
ANM_HANGED = 13,
ANM_HANGED_BRUSH = 14,
ANM_HANGED_DAMAGE = 15,
ANM_HANGED_WAIT = 16,
ANM_POSSESS = 17,
ANM_RUN_AFTER = 18,
ANM_RUN_AFTER2 = 19,
ANM_SWAY_BACK = 20,
ANM_WAIT = 21,
ANM_WAIT02 = 22,
};
enum Action_e {
ACT_WAIT = 0,
ACT_AVOID = 1,
ACT_OPENING = 2,
ACT_SEARCH = 3,
ACT_ATTACK = 4,
ACT_LIMBERING = 5,
ACT_ROLL_MOVE = 6,
ACT_DAMAGE = 10,
ACT_WOLF_BITE = 11,
ACT_DEAD = 12,
ACT_HOLL_DEMO = 20,
};
class e_po_class {
public:
/* 80756900 */ e_po_class();
private:
/* 0x5ac */ u8 field_0x5ac[0xee0 - 0x5ac];
/* 0x000 */ fopEn_enemy_c enemy;
/* 0x5AC */ request_of_phase_process_class mPhase;
/* 0x5B4 */ int mType;
/* 0x5B8 */ u32 field_0x5B8;
/* 0x5BC */ u8 mArg0;
/* 0x5BD */ u8 BitSW;
/* 0x5BE */ u8 BitSW2;
/* 0x5BF */ u8 BitSW3;
/* 0x5C0 */ bool field_0x5C0;
/* 0x5C1 */ bool field_0x5C1;
/* 0x5C2 */ u8 field_0x5C2[0x5D4 - 0x5C2]; // Padding
/* 0x5D4 */ mDoExt_McaMorfSO* mpMorf;
/* 0x5D8 */ mDoExt_McaMorfSO* mpMorf3;
/* 0x5DC */ mDoExt_invisibleModel mInvModel;
/* 0x5E4 */ int mAnmID;
/* 0x5E8 */ J3DModel* mpModel;
/* 0x5EC */ J3DModel* mpModel2;
/* 0x5F0 */ mDoExt_McaMorf* mpMorf2;
/* 0x5F4 */ f32 field_0x5F4;
/* 0x5F8 */ Z2CreatureEnemy mSound1;
/* 0x69C */ Z2CreatureEnemy mSound2;
/* 0x740 */ s16 field_0x740;
/* 0x742 */ s16 mActionID;
/* 0x744 */ f32 field_0x744;
/* 0x748 */ u8 field_0x748[0x74A - 0x748]; // Padding
/* 0x74A */ s16 field_0x74A[5];
/* 0x754 */ s16 field_0x754;
/* 0x756 */ u8 field_0x756;
/* 0x757 */ s8 field_0x757;
/* 0x758 */ u8 field_0x758;
/* 0x759 */ u8 field_0x759;
/* 0x75A */ u8 field_0x75A;
/* 0x75B */ u8 field_0x75B;
/* 0x75C */ u32 field_0x75C;
/* 0x760 */ u8 field_0x760;
/* 0x762 */ s16 field_0x762;
/* 0x764 */ csXyz field_0x764;
/* 0x76C */ f32 field_0x76C;
/* 0x770 */ cXyz field_0x770; // From here on, a lot of joint angles and position vectors...
/* 0x77C */ cXyz field_0x77C;
/* 0x788 */ cXyz field_0x788;
/* 0x794 */ cXyz field_0x794;
/* 0x7A0 */ cXyz field_0x7A0;
/* 0x7AC */ cXyz field_0x7AC;
/* 0x7B8 */ cXyz field_0x7B8;
/* 0x7C4 */ f32 field_0x7C4; // Linked to lamp anim after death, flame spawn height above ground ?
/* 0x7C8 */ u8 field_0x7C8[0x7D0 - 0x7C8]; // Padding
/* 0x7D0 */ f32 field_0x7D0;
/* 0x7D4 */ f32 field_0x7D4;
/* 0x7D8 */ f32 field_0x7D8; // FovY camera ?
/* 0x7DC */ bool field_0x7DC;
/* 0x7DD */ bool field_0x7DD;
/* 0x7DE */ s16 field_0x7DE; // Amount of times bitten by wolf
/* 0x7E0 */ s16 field_0x7E0;
/* 0x7E2 */ s16 field_0x7E2;
/* 0x7E4 */ s16 field_0x7E4;
/* 0x7E6 */ csXyz field_0x7E6[4];
/* 0x7FE */ u8 field_0x7FE;
/* 0x800 */ f32 field_0x800;
/* 0x804 */ f32 field_0x804;
/* 0x808 */ f32 field_0x808;
/* 0x80C */ f32 field_0x80C;
/* 0x810 */ s16 field_0x810;
/* 0x812 */ s8 field_0x812;
/* 0x814 */ cXyz field_0x814;
/* 0x820 */ cXyz field_0x820;
/* 0x82C */ cXyz field_0x82C;
/* 0x838 */ cXyz field_0x838; // Eye pointer, camera ?
/* 0x844 */ cXyz field_0x844; // Center pointer, camera ?
/* 0x850 */ dBgS_AcchCir mAcchCir;
/* 0x890 */ dBgS_ObjAcch mAcch;
/* 0xA68 */ s8 field_0xA68;
/* 0xA6C */ dCcD_Stts mColliderStts;
/* 0xAA8 */ dCcD_Cyl mCyl;
/* 0xBE4 */ dCcD_Sph mSph;
/* 0xD1C */ dCcD_Sph mSph2;
/* 0xE54 */ dCcU_AtInfo mAtInfo;
/* 0xE78 */ u32 mParticleKey6;
/* 0xE7C */ u32 mParticleKey5[2];
/* 0xE84 */ u32 mParticleKey[4];
/* 0xE94 */ u32 mParticleKey2[4];
/* 0xEA4 */ u32 mParticleKey3[2];
/* 0xEAC */ u32 mParticleKey4[2];
/* 0xEB4 */ dPa_hermiteEcallBack_c field_0xEB4;
/* 0xECC */ u8 field_0xECC;
/* 0xECD */ u8 field_0xECD[0xee0 - 0xECD]; // Padding
};
STATIC_ASSERT(sizeof(e_po_class) == 0xee0);
class daE_PO_HIO_c {
public:
/* 8074C54C */ daE_PO_HIO_c();
/* 80756DE8 */ ~daE_PO_HIO_c();
/* 80756DE8 */ virtual ~daE_PO_HIO_c() {}
/* 0x04 */ s8 field_0x04[4];
/* 0x08 */ f32 mBaseSize;
/* 0x0c */ f32 mSearchDist;
/* 0x10 */ f32 mAttackDist;
/* 0x14 */ f32 mMovementSpeed;
/* 0x18 */ f32 mType0AtRange;
/* 0x1c */ s16 mKanteraColor1R;
/* 0x1e */ s16 mKanteraColor1G;
/* 0x20 */ s16 mKanteraColor1B;
/* 0x22 */ s16 mKanteraColor2R;
/* 0x24 */ s16 mKanteraColor2G;
/* 0x26 */ s16 mKanteraColor2B;
/* 0x28 */ s16 mKanteraColor1A;
/* 0x2a */ s16 mReviveTime1;
/* 0x2c */ s16 mReviveTime2;
/* 0x2e */ s16 mReviveTime3;
/* 0x30 */ s16 mReviveTime4;
/* 0x32 */ s16 mFallChanceTime;
/* 0x34 */ s16 mAttackChanceTime;
/* 0x36 */ s16 field_0x36;
/* 0x38 */ f32 mModelSize;
};
#endif /* D_A_E_PO_H */

View File

@ -43,8 +43,12 @@ public:
/* 80CB3C6C */ bool Draw();
/* 80CB3C74 */ void Delete();
/* 80CB3E58 */ ~daPoFire_c();
u8 getMoveEnd() { return mMoveEnd; }
private:
/* 0x568 */ u8 field_0x568[0x618 - 0x568];
/* 0x568 */ u8 field_0x568[0x594 - 0x568];
/* 0x594 */ bool mMoveEnd;
/* 0x595 */ u8 field_0x595[0x618 - 0x595];
};
STATIC_ASSERT(sizeof(daPoFire_c) == 0x618);

View File

@ -1317,6 +1317,10 @@ inline void dComIfGs_setCollectSmell(u8 smell) {
g_dComIfG_gameInfo.info.getPlayer().getPlayerStatusA().setSelectEquip(3, smell);
}
inline void dComIfGs_addPohSpiritNum() {
g_dComIfG_gameInfo.info.getPlayer().getCollect().addPohNum();
}
inline u8 dComIfGs_getPohSpiritNum() {
return g_dComIfG_gameInfo.info.getPlayer().getCollect().getPohNum();
}

View File

@ -395,6 +395,11 @@ public:
BOOL isCollectMirror(u8 i_item) const;
u8 getPohNum() const { return mPohNum; }
void addPohNum() {
if (mPohNum < 0xFF) {
mPohNum += 1;
}
};
private:
/* 0x0 */ u8 mItem[8];

View File

@ -254,7 +254,7 @@ STATIC_ASSERT(sizeof(fopAc_ac_c) == 0x568);
class fopEn_enemy_c : public fopAc_ac_c {
public:
/* 80019404 */ bool initBallModel();
/* 80019404 */ BOOL initBallModel();
/* 800194FC */ bool checkBallModelDraw();
/* 80019520 */ void setBallModelEffect(dKy_tevstr_c*);
/* 800196A0 */ void drawBallModel(dKy_tevstr_c*);

File diff suppressed because it is too large Load Diff

View File

@ -217,7 +217,7 @@ static int fopAc_Create(void* i_this) {
}
/* 80019404-800194FC 013D44 00F8+00 0/0 0/0 2/2 .text initBallModel__13fopEn_enemy_cFv */
bool fopEn_enemy_c::initBallModel() {
BOOL fopEn_enemy_c::initBallModel() {
void* objRes = dComIfG_getObjectRes("Alink", daAlink_c::getBallModelIdx());
mBallModel = mDoExt_J3DModel__create((J3DModelData*)objRes, 0x80000, 0x11000284);