d_a_obj_burnbox matching (#2331)

* initial work

* d_a_obj_burnbox, matching

* renamed varia bles and additional cleanup

* assigned correct comments to models' name

* post review changes

* if statement separation in Execute method
This commit is contained in:
Łukasz Starzyk 2025-03-19 01:18:22 +01:00 committed by GitHub
parent d3e9175bfb
commit 57fe6dcdea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 181 additions and 244 deletions

View File

@ -1454,7 +1454,7 @@ config.libs = [
ActorRel(MatchingFor("GZ2E01"), "d_a_kytag04"),
ActorRel(MatchingFor("GZ2E01"), "d_a_kytag17"),
ActorRel(NonMatching, "d_a_obj_brakeeff"),
ActorRel(NonMatching, "d_a_obj_burnbox"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_burnbox"),
ActorRel(NonMatching, "d_a_obj_carry"),
ActorRel(NonMatching, "d_a_obj_ito"),
ActorRel(NonMatching, "d_a_obj_movebox"),

View File

@ -1,6 +1,8 @@
#ifndef D_A_OBJ_BURNBOX_H
#define D_A_OBJ_BURNBOX_H
#include "d/d_bg_s_movebg_actor.h"
#include "d/d_cc_d.h"
#include "f_op/f_op_actor_mng.h"
/**
@ -11,26 +13,33 @@
* @details
*
*/
class daObjBurnBox_c : public fopAc_ac_c {
class daObjBurnBox_c : public dBgS_MoveBgActor {
public:
/* 8046E698 */ void initBaseMtx();
/* 8046E6D4 */ void setBaseMtx();
/* 8046E738 */ void Create();
/* 8046E8BC */ void CreateHeap();
/* 8046E93C */ void create1st();
/* 8046E9EC */ void Execute(f32 (**)[3][4]);
/* 8046EABC */ void Draw();
/* 8046EC10 */ void Delete();
/* 8046E738 */ int Create();
/* 8046E8BC */ int CreateHeap();
/* 8046E93C */ cPhs__Step create1st();
/* 8046E9EC */ int Execute(Mtx**);
/* 8046EABC */ int Draw();
/* 8046EC10 */ int Delete();
static void make_prm_burnBox(u32* param_0, u8 param_1) {
*param_0 = param_1;
}
static void make_prm_burnBox(u32* param_0, u8 param_1) { *param_0 = param_1; }
u8 getType() { return fopAcM_GetParamBit(this, 0, 8); }
private:
/* 0x568 */ u8 field_0x568[0x740 - 0x568];
/* 0x5A0 */ request_of_phase_process_class mPhaseReq;
/* 0x5A8 */ J3DModel* mpBoxModel;
/* 0x5AC */ dCcD_Stts mStts;
/* 0x5E8 */ dCcD_Cyl mCyl;
/* 0x724 */ u32 field_0x724;
/* 0x728 */ s16 field_0x728;
/* 0x72a */ u8 field_0x72a;
/* 0x72b */ u8 field_0x72b;
/* 0x72c */ JPABaseEmitter* mpEmitters[5];
};
STATIC_ASSERT(sizeof(daObjBurnBox_c) == 0x740);
#endif /* D_A_OBJ_BURNBOX_H */

View File

@ -1,77 +1,10 @@
/**
* @file d_a_obj_burnbox.cpp
*
*/
*
*/
#include "d/actor/d_a_obj_burnbox.h"
#include "d/d_cc_d.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void initBaseMtx__14daObjBurnBox_cFv();
extern "C" void setBaseMtx__14daObjBurnBox_cFv();
extern "C" void Create__14daObjBurnBox_cFv();
extern "C" void CreateHeap__14daObjBurnBox_cFv();
extern "C" void create1st__14daObjBurnBox_cFv();
extern "C" void Execute__14daObjBurnBox_cFPPA3_A4_f();
extern "C" void Draw__14daObjBurnBox_cFv();
extern "C" void Delete__14daObjBurnBox_cFv();
extern "C" static void daObjBurnBox_create1st__FP14daObjBurnBox_c();
extern "C" void __dt__8cM3dGCylFv();
extern "C" void __dt__8cM3dGAabFv();
extern "C" static void daObjBurnBox_MoveBGDelete__FP14daObjBurnBox_c();
extern "C" static void daObjBurnBox_MoveBGExecute__FP14daObjBurnBox_c();
extern "C" static void daObjBurnBox_MoveBGDraw__FP14daObjBurnBox_c();
extern "C" extern char const* const d_a_obj_burnbox__stringBase0;
//
// External References:
//
extern "C" void mDoMtx_YrotM__FPA4_fs();
extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
extern "C" void fopAcM_delete__FP10fopAc_ac_c();
extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData();
extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
extern "C" void
set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
extern "C" void __ct__16dBgS_MoveBgActorFv();
extern "C" bool IsDelete__16dBgS_MoveBgActorFv();
extern "C" bool ToFore__16dBgS_MoveBgActorFv();
extern "C" bool ToBack__16dBgS_MoveBgActorFv();
extern "C" void
MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f();
extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv();
extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv();
extern "C" void __ct__10dCcD_GSttsFv();
extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
extern "C" void __ct__12dCcD_GObjInfFv();
extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl();
extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
extern "C" void Set__4cCcSFP8cCcD_Obj();
extern "C" void SetC__8cM3dGCylFRC4cXyz();
extern "C" void __dl__FPv();
extern "C" void _savegpr_25();
extern "C" void _savegpr_28();
extern "C" void _restgpr_25();
extern "C" void _restgpr_28();
extern "C" extern void* __vt__8dCcD_Cyl[36];
extern "C" extern void* __vt__9dCcD_Stts[11];
extern "C" extern void* __vt__12cCcD_CylAttr[25];
extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
extern "C" extern void* __vt__9cCcD_Stts[8];
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" extern u8 g_dComIfG_gameInfo[122384];
#include "d/d_com_inf_game.h"
//
// Declarations:
@ -79,31 +12,35 @@ extern "C" extern u8 g_dComIfG_gameInfo[122384];
/* 8046E698-8046E6D4 000078 003C+00 1/1 0/0 0/0 .text initBaseMtx__14daObjBurnBox_cFv */
void daObjBurnBox_c::initBaseMtx() {
// NONMATCHING
mpBoxModel->setBaseScale(scale);
setBaseMtx();
}
/* 8046E6D4-8046E738 0000B4 0064+00 2/2 0/0 0/0 .text setBaseMtx__14daObjBurnBox_cFv */
void daObjBurnBox_c::setBaseMtx() {
// NONMATCHING
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(shape_angle.y);
mpBoxModel->setBaseTRMtx(mDoMtx_stack_c::get());
MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
}
/* ############################################################################################## */
/* 8046EE48-8046EE54 000000 000C+00 2/2 0/0 0/0 .rodata l_bmd */
SECTION_RODATA static u8 const l_bmd[12] = {
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03,
const u32 l_bmd[3] = {
0x04,
0x04,
0x03,
};
COMPILER_STRIP_GATE(0x8046EE48, &l_bmd);
/* 8046EE54-8046EE60 00000C 000C+00 1/1 0/0 0/0 .rodata l_heap_size */
SECTION_RODATA static u8 const l_heap_size[12] = {
0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x08, 0x20,
const u32 l_heap_size[3] = {
0x0820,
0x0C00,
0x0820,
};
COMPILER_STRIP_GATE(0x8046EE54, &l_heap_size);
/* 8046EE60-8046EEA4 000018 0044+00 0/1 0/0 0/0 .rodata l_cyl_src */
#pragma push
#pragma force_active on
const static dCcD_SrcCyl l_cyl_src = {
const dCcD_SrcCyl l_cyl_src = {
{
{0x0, {{0x0, 0x0, 0x1e}, {0x0, 0x1e}, 0x79}}, // mObj
{dCcD_SE_NONE, 0x1, 0x0, 0x0, 0x0}, // mGObjAt
@ -116,193 +53,184 @@ const static dCcD_SrcCyl l_cyl_src = {
100.0f // mHeight
} // mCyl
};
#pragma pop
/* 8046EEA4-8046EEB0 00005C 000A+02 0/1 0/0 0/0 .rodata particle_id$3649 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const particle_id[10 + 2 /* padding */] = {
0x85,
0x26,
0x85,
0x27,
0x85,
0x28,
0x85,
0x29,
0x87,
0x46,
/* padding */
0x00,
0x00,
};
COMPILER_STRIP_GATE(0x8046EEA4, &particle_id);
#pragma pop
/* 8046EEB0-8046EEB4 000068 0004+00 0/1 0/0 0/0 .rodata @3684 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3684 = 37.5f;
COMPILER_STRIP_GATE(0x8046EEB0, &lit_3684);
#pragma pop
/* 8046EEB4-8046EEB8 00006C 0004+00 0/1 0/0 0/0 .rodata @3685 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3685 = 0.5f;
COMPILER_STRIP_GATE(0x8046EEB4, &lit_3685);
#pragma pop
/* 8046EEB8-8046EEBC 000070 0004+00 0/1 0/0 0/0 .rodata @3686 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3686 = 75.0f;
COMPILER_STRIP_GATE(0x8046EEB8, &lit_3686);
#pragma pop
/* 8046EEBC-8046EEC0 000074 0004+00 0/1 0/0 0/0 .rodata @3687 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3687 = 1.0f;
COMPILER_STRIP_GATE(0x8046EEBC, &lit_3687);
#pragma pop
/* 8046E738-8046E8BC 000118 0184+00 1/0 0/0 0/0 .text Create__14daObjBurnBox_cFv */
void daObjBurnBox_c::Create() {
// NONMATCHING
int daObjBurnBox_c::Create() {
static const u16 particle_id[5] = {
0x8526, 0x8527, 0x8528, 0x8529, 0x8746,
};
initBaseMtx();
fopAcM_SetMtx(this, mpBoxModel->getBaseTRMtx());
mStts.Init(0xff, 0xff, this);
mCyl.Set(l_cyl_src);
mCyl.SetStts(&mStts);
fopAcM_setCullSizeBox2(this, mpBoxModel->getModelData());
cXyz particlePos = current.pos;
cXyz particleScale = scale;
int type = getType();
switch (type) {
case 0:
case 2:
particlePos.y += 37.5f;
particleScale.setall(0.5f);
break;
case 1:
particlePos.y += 75.0f;
break;
}
for (int index = 0; index < 5; index++) {
mpEmitters[index] = dComIfGp_particle_set(particle_id[index], &particlePos, NULL, &particleScale, 0xff,
NULL, -1, NULL, NULL, NULL);
}
return 1;
}
/* ############################################################################################## */
/* 8046EEC0-8046EEC0 000078 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8046EEC0 = "Kkiba_00";
SECTION_DEAD static char const* const stringBase_8046EEC9 = "J_taru00";
#pragma pop
/* 8046EED4-8046EEE0 -00001 000C+00 3/3 0/0 0/0 .data l_arcName */
SECTION_DATA static void* l_arcName[3] = {
(void*)&d_a_obj_burnbox__stringBase0,
(void*)&d_a_obj_burnbox__stringBase0,
(void*)(((char*)&d_a_obj_burnbox__stringBase0) + 0x9),
const char* l_arcName[3] = {
"Kkiba_00", // crate
"Kkiba_00",
"J_taru00", // barrel
};
/* 8046E8BC-8046E93C 00029C 0080+00 1/0 0/0 0/0 .text CreateHeap__14daObjBurnBox_cFv */
void daObjBurnBox_c::CreateHeap() {
// NONMATCHING
int daObjBurnBox_c::CreateHeap() {
u8 type = getType();
J3DModelData* modelData = (J3DModelData*) dComIfG_getObjectRes(l_arcName[type], l_bmd[type]);
JUT_ASSERT(0x106, modelData != 0);
mpBoxModel = mDoExt_J3DModel__create(modelData, J3DMdlFlag_Unk80000, 0x11000084);
if (mpBoxModel == NULL) {
return 0;
}
return 1;
}
/* 8046E93C-8046E9EC 00031C 00B0+00 1/1 0/0 0/0 .text create1st__14daObjBurnBox_cFv */
void daObjBurnBox_c::create1st() {
// NONMATCHING
cPhs__Step daObjBurnBox_c::create1st() {
cPhs__Step phaseStep = (cPhs__Step) dComIfG_resLoad(&mPhaseReq, l_arcName[getType()]);
if (phaseStep == cPhs_COMPLEATE_e) {
int dzb_id = -1;
u8 type = getType();
switch (type) {
case 1:
dzb_id = 7;
}
phaseStep = (cPhs__Step) MoveBGCreate(l_arcName[type], dzb_id, dBgS_MoveBGProc_TypicalRotY,
l_heap_size[type], NULL);
if (phaseStep == cPhs_ERROR_e) {
return phaseStep;
}
}
return phaseStep;
}
/* 8046E9EC-8046EABC 0003CC 00D0+00 1/0 0/0 0/0 .text Execute__14daObjBurnBox_cFPPA3_A4_f
*/
void daObjBurnBox_c::Execute(f32 (**param_0)[3][4]) {
// NONMATCHING
int daObjBurnBox_c::Execute(Mtx** mtx) {
field_0x724++;
if (field_0x724 % 3 == 0) {
field_0x728--;
if (field_0x728 == -20) {
fopAcM_delete(this);
}
}
*mtx = &mBgMtx;
setBaseMtx();
switch (getType()) {
case 0:
case 2:
mCyl.SetC(current.pos);
dComIfG_Ccsp()->Set(&mCyl);
}
return 1;
}
/* 8046EABC-8046EC10 00049C 0154+00 1/0 0/0 0/0 .text Draw__14daObjBurnBox_cFv */
void daObjBurnBox_c::Draw() {
// NONMATCHING
int daObjBurnBox_c::Draw() {
g_env_light.settingTevStruct(0x10, &current.pos, &tevStr);
g_env_light.setLightTevColorType_MAJI(mpBoxModel, &tevStr);
dComIfGd_setListBG();
J3DModelData* boxModelData = mpBoxModel->getModelData();
for (u16 index = 0; index < boxModelData->getMaterialNum(); index++) {
J3DGXColorS10* tevColor = boxModelData->getMaterialNodePointer(index)->getTevColor(0);
tevColor->r = field_0x728;
tevColor->g = field_0x728;
tevColor->b = field_0x728;
}
mDoExt_modelUpdateDL(mpBoxModel);
for (u16 index = 0; index < boxModelData->getMaterialNum(); index++) {
J3DGXColorS10* tevColor = boxModelData->getMaterialNodePointer(index)->getTevColor(0);
tevColor->r = 0;
tevColor->g = 0;
tevColor->b = 0;
}
dComIfGd_setList();
return 1;
}
/* 8046EC10-8046EC50 0005F0 0040+00 1/0 0/0 0/0 .text Delete__14daObjBurnBox_cFv */
void daObjBurnBox_c::Delete() {
// NONMATCHING
int daObjBurnBox_c::Delete() {
dComIfG_resDelete(&mPhaseReq, l_arcName[getType()]);
return 1;
}
/* ############################################################################################## */
/* 8046EEE0-8046EF00 -00001 0020+00 1/0 0/0 0/0 .data daObjBurnBox_METHODS */
static actor_method_class daObjBurnBox_METHODS = {
(process_method_func)daObjBurnBox_create1st__FP14daObjBurnBox_c,
(process_method_func)daObjBurnBox_MoveBGDelete__FP14daObjBurnBox_c,
(process_method_func)daObjBurnBox_MoveBGExecute__FP14daObjBurnBox_c,
0,
(process_method_func)daObjBurnBox_MoveBGDraw__FP14daObjBurnBox_c,
};
/* 8046EF00-8046EF30 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_BurnBox */
extern actor_process_profile_definition g_profile_Obj_BurnBox = {
fpcLy_CURRENT_e, // mLayerID
3, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_Obj_BurnBox, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daObjBurnBox_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
532, // mPriority
&daObjBurnBox_METHODS, // sub_method
0x00040100, // mStatus
fopAc_ACTOR_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};
/* 8046EF30-8046EF3C 00005C 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGCyl */
SECTION_DATA extern void* __vt__8cM3dGCyl[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__8cM3dGCylFv,
};
/* 8046EF3C-8046EF48 000068 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGAab */
SECTION_DATA extern void* __vt__8cM3dGAab[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__8cM3dGAabFv,
};
/* 8046EF48-8046EF70 000074 0028+00 1/1 0/0 0/0 .data __vt__14daObjBurnBox_c */
SECTION_DATA extern void* __vt__14daObjBurnBox_c[10] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)CreateHeap__14daObjBurnBox_cFv,
(void*)Create__14daObjBurnBox_cFv,
(void*)Execute__14daObjBurnBox_cFPPA3_A4_f,
(void*)Draw__14daObjBurnBox_cFv,
(void*)Delete__14daObjBurnBox_cFv,
(void*)IsDelete__16dBgS_MoveBgActorFv,
(void*)ToFore__16dBgS_MoveBgActorFv,
(void*)ToBack__16dBgS_MoveBgActorFv,
};
/* 8046EC50-8046ED44 000630 00F4+00 1/0 0/0 0/0 .text daObjBurnBox_create1st__FP14daObjBurnBox_c
*/
static void daObjBurnBox_create1st(daObjBurnBox_c* param_0) {
// NONMATCHING
}
/* 8046ED44-8046ED8C 000724 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */
// cM3dGCyl::~cM3dGCyl() {
extern "C" void __dt__8cM3dGCylFv() {
// NONMATCHING
}
/* 8046ED8C-8046EDD4 00076C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
// cM3dGAab::~cM3dGAab() {
extern "C" void __dt__8cM3dGAabFv() {
// NONMATCHING
int daObjBurnBox_create1st(daObjBurnBox_c* i_this) {
fopAcM_SetupActor(i_this, daObjBurnBox_c);
return i_this->create1st();
}
/* 8046EDD4-8046EDF4 0007B4 0020+00 1/0 0/0 0/0 .text
* daObjBurnBox_MoveBGDelete__FP14daObjBurnBox_c */
static void daObjBurnBox_MoveBGDelete(daObjBurnBox_c* param_0) {
// NONMATCHING
int daObjBurnBox_MoveBGDelete(daObjBurnBox_c* i_this) {
return i_this->MoveBGDelete();
}
/* 8046EDF4-8046EE14 0007D4 0020+00 1/0 0/0 0/0 .text
* daObjBurnBox_MoveBGExecute__FP14daObjBurnBox_c */
static void daObjBurnBox_MoveBGExecute(daObjBurnBox_c* param_0) {
// NONMATCHING
int daObjBurnBox_MoveBGExecute(daObjBurnBox_c* i_this) {
return i_this->MoveBGExecute();
}
/* 8046EE14-8046EE40 0007F4 002C+00 1/0 0/0 0/0 .text daObjBurnBox_MoveBGDraw__FP14daObjBurnBox_c
*/
static void daObjBurnBox_MoveBGDraw(daObjBurnBox_c* param_0) {
// NONMATCHING
int daObjBurnBox_MoveBGDraw(daObjBurnBox_c* i_this) {
return i_this->MoveBGDraw();
}
/* 8046EEC0-8046EEC0 000078 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
/* ############################################################################################## */
/* 8046EEE0-8046EF00 -00001 0020+00 1/0 0/0 0/0 .data daObjBurnBox_METHODS */
actor_method_class daObjBurnBox_METHODS = {
(process_method_func) daObjBurnBox_create1st, (process_method_func)daObjBurnBox_MoveBGDelete,
(process_method_func) daObjBurnBox_MoveBGExecute, NULL,
(process_method_func) daObjBurnBox_MoveBGDraw,
};
/* 8046EF00-8046EF30 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_BurnBox */
extern actor_process_profile_definition g_profile_Obj_BurnBox = {
fpcLy_CURRENT_e, // mLayerID
3, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_Obj_BurnBox, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daObjBurnBox_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
532, // mPriority
&daObjBurnBox_METHODS, // sub_method
0x00040100, // mStatus
fopAc_ACTOR_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};