D_a_obj_pfall matching (#769)

* bit too difficult for me for now, might go back later

* progress

* getmsg

* logic matching data isnt

* data section matches

* mathubcg 100%

* cleanup

* revert this change

* final cleanup and configure.py

* nevermind cleanup

* Equivalent onstead of matching

* removed padding

* cleanup code comments and a bit more

* close to matching

* matches

* added d/d_priority.h back

* configure.pu

* updated to match retail and cleanup
This commit is contained in:
Zeclos
2025-05-26 19:54:30 +02:00
committed by GitHub
parent c484eb490d
commit 693c92638f
3 changed files with 408 additions and 69 deletions
+1 -1
View File
@@ -1697,7 +1697,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_obj_ospbox"),
ActorRel(Matching, "d_a_obj_paper", extra_cflags=['-pragma "nosyminline on"']),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_pbka"),
ActorRel(NonMatching, "d_a_obj_pfall"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_pfall", extra_cflags=['-pragma "nosyminline on"']),
ActorRel(NonMatching, "d_a_obj_plant"),
ActorRel(NonMatching, "d_a_obj_rflw"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_rforce"),
+38 -29
View File
@@ -4,6 +4,7 @@
#include "f_op/f_op_actor.h"
#include "d/d_bg_w.h"
#include "SSystem/SComponent/c_phase.h"
#include "m_Do/m_Do_ext.h"
class mDoExt_McaMorf;
@@ -11,7 +12,7 @@ class daObj_Pfall_c : public fopAc_ac_c {
public:
void setAnm();
void set_mtx();
void CreateHeap();
BOOL CreateHeap();
void CreateInit();
cPhs_State _create();
bool _delete();
@@ -30,43 +31,51 @@ public:
bool _execute();
void nz_draw();
bool _draw();
public:
/* 0x290 */ void* m290;
/* 0x294 */ cXyz m294[10];
/* 0x30C */ cXyz m30C[10];
/* 0x384 */ cXyz m384[2];
/* 0x39C */ void* m39C;
/* 0x3A0 */ void* m3A0;
/* 0x3A4 */ void* m3A4;
/* 0x3A8 */ void* m3A8;
/* 0x3AC */ void* m3AC;
/* 0x3B0 */ void* m3B0;
/* 0x3B4 */ void* m3B4;
/* 0x3B8 */ u8 m3B8[0x3BC - 0x3B8];
/* 0x290 */ void* field_0x290;
/* 0x294 */ cXyz field_0x294[10];
/* 0x30C */ cXyz field_0x30C[10];
/* 0x384 */ cXyz field_0x384[2];
/* 0x39C */ u8 field_0x39C[0x3A8 - 0x39C];
/* 0x3A8 */ int field_0x3A8;
/* 0x3AC */ int mTimer;
/* 0x3B0 */ int field_0x3B0;
/* 0x3B4 */ s16 field_0x3B4;
/* 0x3B6 */ u8 field_0x3B6[0x3B8 - 0x3B6];
/* 0x3B8 */ int field_0x3B8;
/* 0x3BC */ request_of_phase_process_class mPhsPfall;
/* 0x3C4 */ J3DModel* m3C4;
/* 0x3C8 */ dBgW* m3C8;
/* 0x3CC */ Mtx m3CC;
/* 0x3FC */ J3DModel* m3FC;
/* 0x400 */ dBgW* m400;
/* 0x404 */ Mtx m404;
/* 0x434 */ J3DModel* m434;
/* 0x438 */ u8 m438[0x43C - 0x438];
/* 0x43C */ mDoExt_McaMorf* m43C;
/* 0x440 */ u8 m440[0x444 - 0x440];
/* 0x444 */ void* vtbl;
/* 0x448 */ u8 m448[0x481 - 0x448];
/* 0x481 */ u8 mState;
/* 0x482 */ u8 m482[0x484 - 0x482];
};
/* 0x3C4 */ J3DModel* field_0x3C4;
/* 0x3C8 */ dBgW* mpBgW;
/* 0x3CC */ Mtx field_0x3CC;
/* 0x3FC */ J3DModel* field_0x3FC;
/* 0x400 */ dBgW* mpBgW2;
/* 0x404 */ Mtx field_0x404;
/* 0x434 */ J3DModel* mpHimoModel;
/* 0x438 */ f32 field_0x438;
/* 0x43C */ mDoExt_McaMorf* mpMorf;
/* 0x440 */ u8 field_0x440[0x444 - 0x440];
/* 0x444 */ mDoExt_3DlineMat1_c field_0x444;
/* 0x480 */ s8 mBckIdx;
/* 0x481 */ s8 field_0x481;
/* 0x482 */ s8 mOldAnmPrmIdx;
/* 0x483 */ bool field_0x483;
}; // Size: 0x484
class daObj_PfallHIO_c {
public:
daObj_PfallHIO_c();
virtual ~daObj_PfallHIO_c() {mNo = -1;}
public:
/* Place member variables here */
/* 0x04 */ s8 mNo;
/* 0x05 */ bool field_0x05;
/* 0x06 */ u8 field_0x06;
/* 0x07 */ u8 field_0x07;
/* 0x08 */ f32 field_0x08;
/* 0x0C */ s16 field_0x0C;
};
#endif /* D_A_OBJ_PFALL_H */
+369 -39
View File
@@ -5,146 +5,476 @@
#include "d/actor/d_a_obj_pfall.h"
#include "d/d_procname.h"
#include "d/d_com_inf_game.h"
#include "d/res/res_pfall.h"
#include "d/d_lib.h"
#include "d/actor/d_a_player_main.h"
#include "d/d_priority.h"
#include "weak_data_1811.h" // IWYU pragma: keep
#include "weak_bss_936_to_1036.h" // IWYU pragma: keep
static const int l_bck_ix_tbl[] = {
PFALL_BCK_NZ_WAIT,
PFALL_BCK_HIKU,
};
static daObj_PfallHIO_c l_HIO;
/* 000000EC-0000010C .text CallbackCreateHeap__FP10fopAc_ac_c */
static BOOL CallbackCreateHeap(fopAc_ac_c*) {
/* Nonmatching */
static BOOL CallbackCreateHeap(fopAc_ac_c* i_this) {
return static_cast<daObj_Pfall_c*>(i_this)->CreateHeap();
}
/* 0000010C-00000140 .text __ct__16daObj_PfallHIO_cFv */
daObj_PfallHIO_c::daObj_PfallHIO_c() {
/* Nonmatching */
mNo = -1;
field_0x05 = false;
field_0x06 = 0;
field_0x08 = 3.0f;
field_0x0C = 0;
}
/* 00000140-00000190 .text setAnm__13daObj_Pfall_cFv */
void daObj_Pfall_c::setAnm() {
/* Nonmatching */
static const int a_anm_bcks_tbl[] = {
PFALL_BCK_NZ_WAIT,
PFALL_BCK_HIKU,
};
static const dLib_anm_prm_c a_anm_prm_tbl[] = {
{
/* mAnmIdx */ -1,
/* mNextPrmIdx */ -1,
/* field_0x02 */ 0,
/* mMorf */ 8.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::EMode_NONE
},
{
/* mAnmIdx */ 0,
/* mNextPrmIdx */ -1,
/* field_0x02 */ 0,
/* mMorf */ 8.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::EMode_LOOP
},
{
/* mAnmIdx */ 1,
/* mNextPrmIdx */ -1,
/* field_0x02 */ 0,
/* mMorf */ 8.0f,
/* mPlaySpeed */ 1.0f,
/* mLoopMode */ J3DFrameCtrl::EMode_NONE
},
};
dLib_bcks_setAnm("Pfall", mpMorf, &mBckIdx, &field_0x481, &mOldAnmPrmIdx, a_anm_bcks_tbl, a_anm_prm_tbl, false);
}
/* 00000190-000004DC .text set_mtx__13daObj_Pfall_cFv */
void daObj_Pfall_c::set_mtx() {
/* Nonmatching */
static cXyz offset_pos_left(-35.0f, 0.0f, 105.0f);
static cXyz offset_pos_right(35.0f, 0.0f, -105.0f);
field_0x3C4->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(current.angle.y);
mDoMtx_stack_c::transM(offset_pos_left);
mDoMtx_stack_c::transM(0.0f, -10.0f, 0.0f);
mDoMtx_stack_c::ZrotM(field_0x3B4);
mDoMtx_stack_c::transM(0.0f, 10.0f, 0.0f);
field_0x3C4->setBaseTRMtx(mDoMtx_stack_c::get());
cMtx_copy(mDoMtx_stack_c::get(), field_0x3CC);
field_0x3FC->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(current.angle.y);
mDoMtx_stack_c::transM(offset_pos_right);
mDoMtx_stack_c::YrotM( -0x8000);
mDoMtx_stack_c::transM(0.0f, -10.0f, 0.0f);
mDoMtx_stack_c::ZrotM(field_0x3B4);
mDoMtx_stack_c::transM(0.0f, 10.0f, 0.0f);
field_0x3FC->setBaseTRMtx(mDoMtx_stack_c::get());
cMtx_copy(mDoMtx_stack_c::get(), field_0x404);
J3DModel* pModel = mpMorf->getModel();
static cXyz offset_pos(0.0f, 0.0f, -130.0f);
static cXyz scale(0.5f, 0.5f, 0.5f);
pModel->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(current.angle.y);
mDoMtx_stack_c::transM(offset_pos);
pModel->setBaseTRMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::transM(0.0f, field_0x438 + l_HIO.field_0x08, 0.0f);
mDoMtx_stack_c::YrotM(-0x8000);
mpHimoModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
/* 00000518-00000858 .text CreateHeap__13daObj_Pfall_cFv */
void daObj_Pfall_c::CreateHeap() {
/* Nonmatching */
BOOL daObj_Pfall_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Pfall", PFALL_BDL_AOTSI);
JUT_ASSERT(0xD1, modelData != NULL);
field_0x3C4 = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
field_0x3FC = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
if(field_0x3C4 == NULL || field_0x3FC == NULL) {
return FALSE;
}
J3DModelData* himoModelData = (J3DModelData*)dComIfG_getObjectRes("Pfall", PFALL_BDL_PSUZU);
JUT_ASSERT(0xD9, himoModelData != NULL);
mpHimoModel = mDoExt_J3DModel__create(himoModelData, 0, 0x11020203);
if (mpHimoModel == NULL) {
return FALSE;
}
J3DModelData* nzModelData = (J3DModelData*)dComIfG_getObjectRes("Pfall", PFALL_BDL_NZ);
JUT_ASSERT(0xE0, nzModelData != NULL);
mpMorf = new mDoExt_McaMorf(
nzModelData,
NULL, NULL,
NULL,
-1, 1.0f, 0, -1, 1,
NULL,
0x00080000,
0x11000002
);
if(mpMorf == NULL || mpMorf->getModel() == NULL) {
return FALSE;
}
mpMorf->getModel()->setUserArea((u32)this);
set_mtx();
mpMorf->calc();
mpBgW = new dBgW();
if(mpBgW == NULL) {
return FALSE;
}
cBgD_t* pData = (cBgD_t*)dComIfG_getObjectRes("Pfall", PFALL_DZB_AOTOSI);
if (mpBgW->Set(pData, cBgW::MOVE_BG_e, &field_0x3CC) == true) {
return FALSE;
}
mpBgW2 = new dBgW();
if(mpBgW2 == NULL) {
return FALSE;
}
pData = (cBgD_t*)dComIfG_getObjectRes("Pfall", PFALL_DZB_AOTOSI);
if (mpBgW2->Set(pData, cBgW::MOVE_BG_e, &field_0x404) == true) {
return FALSE;
}
return TRUE;
}
/* 00000858-000008CC .text CreateInit__13daObj_Pfall_cFv */
void daObj_Pfall_c::CreateInit() {
/* Nonmatching */
dComIfG_Bgsp()->Regist(mpBgW, this);
dComIfG_Bgsp()->Regist(mpBgW2, this);
set_mtx();
field_0x481 = 1;
mode_wait_init();
}
/* 000008CC-000009E8 .text _create__13daObj_Pfall_cFv */
cPhs_State daObj_Pfall_c::_create() {
/* Nonmatching */
fopAcM_SetupActor(this, daObj_Pfall_c);
cPhs_State phase = dComIfG_resLoad(&mPhsPfall, "Pfall");
if (phase == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, CallbackCreateHeap, 0x38E0)) {
return cPhs_ERROR_e;
} else {
CreateInit();
}
}
return phase;
}
/* 000009EC-00000AB0 .text _delete__13daObj_Pfall_cFv */
bool daObj_Pfall_c::_delete() {
/* Nonmatching */
dComIfG_resDelete(&mPhsPfall, "Pfall");
if(mpBgW && mpBgW->ChkUsed()) {
dComIfG_Bgsp()->Release(mpBgW);
}
if(mpBgW2 && mpBgW2->ChkUsed()) {
dComIfG_Bgsp()->Release(mpBgW2);
}
return true;
}
/* 00000AB0-00000C04 .text cutProc__13daObj_Pfall_cFv */
void daObj_Pfall_c::cutProc() {
/* Nonmatching */
static char* action_table[3] = {
"WAIT",
"OPEN",
"HIKU"
};
int staffIdx = dComIfGp_evmng_getMyStaffId("Nzfall");
if(staffIdx != -1) {
int actIdx = dComIfGp_evmng_getMyActIdx(staffIdx, action_table, ARRAY_SIZE(action_table), NULL, 0);
if(actIdx == -1) {
dComIfGp_evmng_cutEnd(staffIdx);
} else {
if(dComIfGp_evmng_getIsAddvance(staffIdx)) {
switch(actIdx) {
case 0:
cutWaitStart(staffIdx);
break;
case 1:
cutOpenStart(staffIdx);
break;
case 2:
cutHikuStart(staffIdx);
break;
}
}
switch(actIdx) {
case 0:
cutWaitProc(staffIdx);
break;
case 1:
cutOpenProc(staffIdx);
break;
case 2:
cutHikuProc(staffIdx);
break;
}
}
}
}
/* 00000C04-00000C6C .text cutWaitStart__13daObj_Pfall_cFi */
void daObj_Pfall_c::cutWaitStart(int) {
/* Nonmatching */
void daObj_Pfall_c::cutWaitStart(int staffIdx) {
int* pTimerData = dComIfGp_evmng_getMyIntegerP(staffIdx, "Timer");
if (pTimerData == NULL) {
mTimer = 0;
}
else {
mTimer = (s16)*pTimerData;
}
}
/* 00000C6C-00000D18 .text cutWaitProc__13daObj_Pfall_cFi */
void daObj_Pfall_c::cutWaitProc(int) {
/* Nonmatching */
void daObj_Pfall_c::cutWaitProc(int staffIdx) {
if(cLib_calcTimer(&mTimer) == 0) {
if(!field_0x483) {
field_0x483 = true;
fopAcM_monsSeStart(this, JA_SE_CV_NZ_LAUGH, 0);
}
dComIfGp_evmng_cutEnd(staffIdx);
}
}
/* 00000D18-00000D94 .text cutOpenStart__13daObj_Pfall_cFi */
void daObj_Pfall_c::cutOpenStart(int) {
/* Nonmatching */
field_0x3B4 = 0;
field_0x3B0 = 0;
fopAcM_seStart(this, JA_SE_OBJ_TC_JAIL_FLR_BRK, 0);
}
/* 00000D94-00000E74 .text cutOpenProc__13daObj_Pfall_cFi */
void daObj_Pfall_c::cutOpenProc(int) {
/* Nonmatching */
void daObj_Pfall_c::cutOpenProc(int staffIdx) {
if (field_0x3B0 >= 7) {
dComIfGp_evmng_cutEnd(staffIdx);
} else {
const s16 temp[] = {
0xC568,
0xD508,
0xC950,
0xD120,
0xCD38,
0xCF2C,
0xCE32
};
s16 temp2 = cLib_addCalcAngleS(&field_0x3B4, temp[field_0x3B0], 4, 0x2000, 0x100);
if ((s16)std::fabsf(temp2) <= 0x100) {
field_0x3B0++;
}
}
}
/* 00000E74-00000E80 .text cutHikuStart__13daObj_Pfall_cFi */
void daObj_Pfall_c::cutHikuStart(int) {
/* Nonmatching */
field_0x481 = 2;
}
/* 00000E80-00000F00 .text cutHikuProc__13daObj_Pfall_cFi */
void daObj_Pfall_c::cutHikuProc(int) {
/* Nonmatching */
void daObj_Pfall_c::cutHikuProc(int staffIdx) {
if(field_0x481 == 2){
if(mpMorf->isStop()) {
dComIfGp_evmng_cutEnd(staffIdx);
field_0x481 = 1;
}
}
}
/* 00000F00-00000F1C .text mode_wait_init__13daObj_Pfall_cFv */
void daObj_Pfall_c::mode_wait_init() {
/* Nonmatching */
}
field_0x3B8 = l_HIO.field_0x0C;
field_0x3A8 = NULL;
}
/* 00000F1C-00000FC0 .text mode_wait__13daObj_Pfall_cFv */
void daObj_Pfall_c::mode_wait() {
/* Nonmatching */
if(dLib_checkPlayerInCircle(current.pos, 100.0f, 100.0f)
&& dComIfGp_getPlayer(0)->speedF == 0.0f
&& cLib_calcTimer(&field_0x3B8) == 0) {
mode_event_init();
}
mpBgW->Move();
mpBgW2->Move();
}
/* 00000FC0-00000FCC .text mode_event_init__13daObj_Pfall_cFv */
void daObj_Pfall_c::mode_event_init() {
/* Nonmatching */
field_0x3A8 = 1;
}
/* 00000FCC-000010A4 .text mode_event__13daObj_Pfall_cFv */
void daObj_Pfall_c::mode_event() {
/* Nonmatching */
if(eventInfo.checkCommandDemoAccrpt()) {
if(dComIfGp_evmng_endCheck("NZFALL")) {
if(l_HIO.field_0x06 != 0) {
mode_wait_init();
} else {
dComIfGp_setNextStage("sea", 15, 11);
}
}
} else {
fopAcM_orderOtherEvent(this, "NZFALL");
}
mpBgW->Move();
mpBgW2->Move();
}
/* 000010A4-00001130 .text mode_proc_call__13daObj_Pfall_cFv */
void daObj_Pfall_c::mode_proc_call() {
/* Nonmatching */
typedef void(daObj_Pfall_c::*ProcFunc)(void);
static const ProcFunc mode_proc[] = {
&daObj_Pfall_c::mode_wait,
&daObj_Pfall_c::mode_event,
};
(this->*mode_proc[field_0x3A8])();
}
/* 00001130-000012F4 .text _execute__13daObj_Pfall_cFv */
bool daObj_Pfall_c::_execute() {
/* Nonmatching */
attention_info.position = current.pos;
eyePos = current.pos;
if(dComIfGp_event_runCheck()) {
cutProc();
}
if(field_0x481 == 2) {
if(mpMorf->getFrame() == 6.0f) {
fopAcM_seStart(this, JA_SE_OBJ_TC_JAIL_STRING, 0);
}
f32 frame = mpMorf->getFrame();
if (!(frame > 0.0f && frame <= 6.0f)) {
if (frame > 6.0f && frame <= 10.0f) {
field_0x438 += 1.0f;
}
else {
if (!(frame > 10.0f && frame <= 23.0f) && frame > 23.0f && frame <= 29.0f) {
field_0x438 -= 3.0f;
}
}
}
} else {
field_0x438 = 0.0f;
}
mpMorf->play(NULL, 0, 0);
fopAcM_posMoveF(this, NULL);
set_mtx();
mode_proc_call();
setAnm();
return false;
}
/* 000012F4-0000142C .text nz_draw__13daObj_Pfall_cFv */
void daObj_Pfall_c::nz_draw() {
/* Nonmatching */
J3DModel* pModel = mpMorf->getModel();
J3DModelData* pModelData = pModel->getModelData();
J3DJoint* rootJoint = pModelData->getJointNodePointer(0);
J3DShape* matShape = pModelData->getMaterialNodePointer(0)->getShape();
J3DShape* matShape2 = pModelData->getMaterialNodePointer(1)->getShape();
J3DShape* matShape3 = pModelData->getMaterialNodePointer(2)->getShape();
matShape->hide();
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
g_env_light.setLightTevColorType(pModel, &tevStr);
mpMorf->updateDL();
dComIfGd_setListMaskOff();
matShape->show();
pModel->getMatPacket(0)->unlock();
matShape2->hide();
matShape3->hide();
rootJoint->entryIn();
matShape2->show();
matShape3->show();
dComIfGd_setList();
}
/* 0000142C-000014E4 .text _draw__13daObj_Pfall_cFv */
bool daObj_Pfall_c::_draw() {
/* Nonmatching */
g_env_light.settingTevStruct(TEV_TYPE_BG0, &current.pos, &tevStr);
g_env_light.setLightTevColorType(field_0x3C4, &tevStr);
g_env_light.setLightTevColorType(field_0x3FC, &tevStr);
mDoExt_modelUpdateDL(field_0x3C4);
mDoExt_modelUpdateDL(field_0x3FC);
nz_draw();
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
g_env_light.setLightTevColorType(mpHimoModel, &tevStr);
mDoExt_modelUpdateDL(mpHimoModel);
return true;
}
// to match .rodata
static const int dummy[] = {0x00FF0080};
/* 000014E4-00001504 .text daObj_PfallCreate__FPv */
static s32 daObj_PfallCreate(void*) {
/* Nonmatching */
static cPhs_State daObj_PfallCreate(void* i_this) {
return static_cast<daObj_Pfall_c*>(i_this)->_create();
}
/* 00001504-00001528 .text daObj_PfallDelete__FPv */
static BOOL daObj_PfallDelete(void*) {
/* Nonmatching */
static BOOL daObj_PfallDelete(void* i_this) {
return static_cast<daObj_Pfall_c*>(i_this)->_delete();
}
/* 00001528-0000154C .text daObj_PfallExecute__FPv */
static BOOL daObj_PfallExecute(void*) {
/* Nonmatching */
static BOOL daObj_PfallExecute(void* i_this) {
return static_cast<daObj_Pfall_c*>(i_this)->_execute();
}
/* 0000154C-00001570 .text daObj_PfallDraw__FPv */
static BOOL daObj_PfallDraw(void*) {
/* Nonmatching */
static BOOL daObj_PfallDraw(void* i_this) {
return static_cast<daObj_Pfall_c*>(i_this)->_draw();
}
/* 00001570-00001578 .text daObj_PfallIsDelete__FPv */
static BOOL daObj_PfallIsDelete(void*) {
/* Nonmatching */
return TRUE;
}
static actor_method_class daObj_PfallMethodTable = {