d_a_sie_flag (#799)

* match CheckCreateHeap, start _delete

* Match daSie_Flag_c::_draw

* Approach daSie_Flag_c::set_mtx

* fix l_flag_offset

* approach daSie_Flag_c::CreateInit

* Approach daSie_Flag_c::_create

* Approach daSie_Flag_c::CreateHeap

* Use the original var name

* Reformat

* approach daSie_Flag_c::_execute

* Find the correct virtual function

* Use cylinder struct

* simplify set_mtx

* start matching daSie_Flag_HIO_c class

* Fix constants

* Match daSie_Flag_c::_create

* Match daSie_Flag_c::_execute better

* 100% daSie_Flag_c::set_mtx

* Match bss

* use .abs() method instead of own implementation

* Fix resource header

* Match data

* Match _execute + fix inline usages

* use simple bool where possible

* fix const order

* mark d_a_sie_flag matching for non-demo

* Fixes after review
This commit is contained in:
LihMeh
2025-06-27 09:24:21 +03:00
committed by GitHub
parent 3bb95dd90c
commit 82b576442e
3 changed files with 124 additions and 18 deletions
+1 -1
View File
@@ -1519,7 +1519,7 @@ config.libs = [
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_shand", extra_cflags=['-pragma "nosyminline on"']),
ActorRel(NonMatching, "d_a_ship", extra_cflags=['-pragma "nosyminline on"']),
ActorRel(Equivalent, "d_a_shop_item"), # weak func order
ActorRel(NonMatching, "d_a_sie_flag"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_sie_flag", extra_cflags=['-pragma "nosyminline on"']),
ActorRel(NonMatching, "d_a_sitem"),
ActorRel(NonMatching, "d_a_ss"),
ActorRel(NonMatching, "d_a_sss"),
+11 -3
View File
@@ -9,13 +9,15 @@
class daSie_Flag_c : public fopAc_ac_c {
public:
void set_mtx();
void CreateHeap();
void CreateInit();
BOOL CreateHeap();
cPhs_State CreateInit();
cPhs_State _create();
bool _delete();
bool _execute();
bool _draw();
static const char M_arcname[];
public:
/* 0x290 */ request_of_phase_process_class mPhsEshata;
/* 0x298 */ request_of_phase_process_class mPhsCloth;
@@ -25,14 +27,20 @@ public:
/* 0x2B4 */ dKy_tevstr_c mTevStr;
/* 0x364 */ dCcD_Stts mStts;
/* 0x3A0 */ dCcD_Cyl mCyl;
/* 0x4D0 */ dCcD_Cyl mCyl2;
};
class daSie_Flag_HIO_c {
public:
daSie_Flag_HIO_c();
virtual ~daSie_Flag_HIO_c() {};
public:
/* Place member variables here */
/* 0x00 */ //vtable
/* 0x04 */ s8 m04;
/* 0x08 */ f32 m08;
/* 0x0C */ s16 m0c;
};
#endif /* D_A_SIE_FLAG_H */
+112 -14
View File
@@ -4,9 +4,18 @@
//
#include "d/actor/d_a_sie_flag.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "d/d_a_obj.h"
#include "d/d_cc_d.h"
#include "d/d_com_inf_game.h"
#include "d/d_kankyo.h"
#include "d/d_kankyo_wether.h"
#include "d/d_priority.h"
#include "d/d_procname.h"
#include "d/res/res_cloth.h"
#include "d/res/res_eshata.h"
#include "f_op/f_op_actor_mng.h"
#include "m_Do/m_Do_ext.h"
#include "weak_bss_936_to_1036.h" // IWYU pragma: keep
static dCcD_SrcCyl l_cyl_src = {
// dCcD_SrcGObjInf
@@ -38,50 +47,139 @@ static dCcD_SrcCyl l_cyl_src = {
},
};
static daSie_Flag_HIO_c l_HIO;
static cXyz l_flag_offset(0.0f, 900.0f, 0.0f);
static cXyz l_wind_offset(0.0f, 725.0f, 0.0f);
/* 000000EC-00000118 .text __ct__16daSie_Flag_HIO_cFv */
daSie_Flag_HIO_c::daSie_Flag_HIO_c() {
/* Nonmatching */
m04 = -1;
m08 = 0.0f;
m0c = 0;
}
const char daSie_Flag_c::M_arcname[] = "Eshata";
/* 00000118-000001C4 .text set_mtx__12daSie_Flag_cFv */
void daSie_Flag_c::set_mtx() {
/* Nonmatching */
mpModel->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
mDoMtx_stack_c::ZXYrotM(shape_angle);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::transM(l_flag_offset);
mpClothPacket->setMtx(mDoMtx_stack_c::get());
}
/* 000001C4-000001E4 .text CheckCreateHeap__FP10fopAc_ac_c */
static BOOL CheckCreateHeap(fopAc_ac_c*) {
/* Nonmatching */
static BOOL CheckCreateHeap(fopAc_ac_c* i_actor) {
return static_cast<daSie_Flag_c*>(i_actor)->CreateHeap();
}
/* 000001E4-0000030C .text CreateHeap__12daSie_Flag_cFv */
void daSie_Flag_c::CreateHeap() {
/* Nonmatching */
BOOL daSie_Flag_c::CreateHeap() {
J3DModelData *modelData = (J3DModelData*)dComIfG_getObjectRes(M_arcname, ESHATA_BDL_ESHATA);
JUT_ASSERT(0x109, modelData != NULL);
mpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
if (mpModel == NULL) {
return FALSE;
} else {
ResTIMG* eshata_timg = (ResTIMG*)dComIfG_getObjectRes(M_arcname, ESHATA_BTI_ESHATA);
ResTIMG* cloth_timg = (ResTIMG*)dComIfG_getObjectRes("Cloth", CLOTH_BTI_CLOTHTOON);
mpClothPacket = dCloth_packet_create(eshata_timg, cloth_timg, 5, 5, 700.0f, 350.0, &mTevStr, NULL);
return mpClothPacket != NULL ? TRUE : FALSE;
}
}
/* 0000030C-000003D4 .text CreateInit__12daSie_Flag_cFv */
void daSie_Flag_c::CreateInit() {
/* Nonmatching */
cPhs_State daSie_Flag_c::CreateInit() {
mStts.Init(0xFF, 0xFF, this);
mCyl.Set(l_cyl_src);
mCyl.SetStts(&mStts);
mWindvec = *dKyw_get_wind_vec();
set_mtx();
cullMtx = mpModel->getBaseTRMtx();
fopAcM_setCullSizeBox(this, -700.0f, 0.0f, -700.0f, 700.0f, 1100.0f, 700.0f);
dKy_tevstr_init(&mTevStr, fopAcM_GetRoomNo(this), 0xFF);
return cPhs_COMPLEATE_e;
}
/* 000003D4-00000488 .text _create__12daSie_Flag_cFv */
cPhs_State daSie_Flag_c::_create() {
/* Nonmatching */
fopAcM_SetupActor(this, daSie_Flag_c);
cPhs_State result = dComIfG_resLoad(&mPhsEshata, M_arcname);
if (result != cPhs_COMPLEATE_e) {
return result;
}
result = dComIfG_resLoad(&mPhsCloth, "Cloth");
if (result != cPhs_COMPLEATE_e) {
return result;
}
if (fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x1020)) {
return CreateInit();
} else {
return cPhs_ERROR_e;
}
}
/* 00000814-00000864 .text _delete__12daSie_Flag_cFv */
bool daSie_Flag_c::_delete() {
/* Nonmatching */
dComIfG_resDelete(&mPhsEshata, M_arcname);
dComIfG_resDelete(&mPhsCloth, "Cloth");
return true;
}
/* 00000864-00000B08 .text _execute__12daSie_Flag_cFv */
bool daSie_Flag_c::_execute() {
/* Nonmatching */
cXyz allwind;
cXyz position_plus_offset;
set_mtx();
mStts.Move();
if (mCyl.ChkTgHit() != 0) {
daObj::HitSeStart(fopAcM_GetPosition_p(this), fopAcM_GetRoomNo(this), &mCyl, 0x0B);
}
fopAcM_rollPlayerCrash(this, 40.0f, 0x07);
position_plus_offset = fopAcM_GetPosition(this) + l_flag_offset;
allwind = dKyw_get_AllWind_vecpow(&position_plus_offset);
if (allwind.abs() > mWindvec.abs()) {
mWindvec = allwind;
} else {
cLib_addCalcPos2(&mWindvec, allwind, 0.1f, 0.1f);
}
mCyl.SetC(current.pos);
dComIfG_Ccsp()->Set(&mCyl);
mpClothPacket->setParam(0.4f, -0.75f, 0.9f, 1.0f, 1.0f, 0x400, 0, 900, -800, 7.0f, 6.0f);
mpClothPacket->setWindPower(13.0f, 8.0f);
mpClothPacket->setGlobalWind(&mWindvec);
mpClothPacket->cloth_move();
return false;
}
/* 00000B08-00000B94 .text _draw__12daSie_Flag_cFv */
bool daSie_Flag_c::_draw() {
/* Nonmatching */
g_env_light.settingTevStruct(TEV_TYPE_BG0, &current.pos, &tevStr);
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &mTevStr);
g_env_light.setLightTevColorType(mpModel, &tevStr);
mDoExt_modelUpdateDL(mpModel);
mpClothPacket->cloth_draw();
return true;
}
/* 00000B94-00000BB4 .text daSie_FlagCreate__FPv */