d_a_obj_udoor matching (#2337)

* d_a_obj_udoor done

* Fix: Re-type unused fields to u8[]

* Fix: Make padding data implicit in obj_udoor_class

---------

Co-authored-by: Ttobas <anon@ym.ous>
This commit is contained in:
Ttobas 2025-03-21 07:01:58 +01:00 committed by GitHub
parent 861e99c403
commit 6519691a47
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 153 additions and 221 deletions

View File

@ -2109,7 +2109,7 @@ config.libs = [
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tp"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_treesh"),
ActorRel(NonMatching, "d_a_obj_twGate"),
ActorRel(NonMatching, "d_a_obj_udoor"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_udoor"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_usaku"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_vground"),
ActorRel(NonMatching, "d_a_obj_volcball"),

View File

@ -2,6 +2,8 @@
#define D_A_OBJ_UDOOR_H
#include "f_op/f_op_actor_mng.h"
#include "d/d_cc_d.h"
#include "d/d_bg_w.h"
/**
* @ingroup actors-objects
@ -12,8 +14,19 @@
*
*/
class obj_udoor_class : public fopAc_ac_c {
private:
/* 0x568 */ u8 field_0x568[0x754 - 0x568];
public:
/* 0x568 */ request_of_phase_process_class mPhase;
/* 0x570 */ u8 field_0x570;
/* 0x574 */ J3DModel* mpModel;
/* 0x578 */ u8 field_0x578[0x57c - 0x578];
/* 0x57c */ s16 field_0x57c;
/* 0x580 */ f32 field_0x580;
/* 0x584 */ u8 field_0x584[0x588 - 0x584];
/* 0x588 */ Mtx mBgMtx;
/* 0x5b8 */ dBgW* mpBgW;
/* 0x5bc */ dCcD_Stts mCcStts;
/* 0x5f8 */ dCcD_Sph mCcSph;
/* 0x730 */ u8 field_0x730[0x754 - 0x730];
};
STATIC_ASSERT(sizeof(obj_udoor_class) == 0x754);

View File

@ -5,135 +5,66 @@
#include "d/actor/d_a_obj_udoor.h"
#include "d/d_cc_d.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" static void daObj_Udoor_Draw__FP15obj_udoor_class();
extern "C" static void daObj_Udoor_Execute__FP15obj_udoor_class();
extern "C" static bool daObj_Udoor_IsDelete__FP15obj_udoor_class();
extern "C" static void daObj_Udoor_Delete__FP15obj_udoor_class();
extern "C" static void useHeapInit__FP10fopAc_ac_c();
extern "C" static void daObj_Udoor_Create__FP10fopAc_ac_c();
extern "C" void __dt__8cM3dGSphFv();
extern "C" void __dt__8cM3dGAabFv();
extern "C" extern char const* const d_a_obj_udoor__stringBase0;
//
// External References:
//
extern "C" void mDoMtx_YrotM__FPA4_fs();
extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
extern "C" void __ct__10fopAc_ac_cFv();
extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff();
extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff();
extern "C" void getLayerNo__14dComIfG_play_cFi();
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 Release__4cBgSFP9dBgW_Base();
extern "C" void Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c();
extern "C" void dBgS_MoveBGProc_Typical__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
extern "C" void Set__4cBgWFP6cBgD_tUlPA3_A4_f();
extern "C" void __ct__4dBgWFv();
extern "C" void Move__4dBgWFv();
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_SphFRC11dCcD_SrcSph();
extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
extern "C" void cLib_addCalc0__FPfff();
extern "C" void cLib_addCalcAngleS2__FPssss();
extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
extern "C" void* __nw__FUl();
extern "C" void __dl__FPv();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__8dCcD_Sph[36];
extern "C" extern void* __vt__9dCcD_Stts[11];
extern "C" extern void* __vt__12cCcD_SphAttr[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];
extern "C" u8 sincosTable___5JMath[65536];
extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
#include "d/d_com_inf_game.h"
#include "d/actor/d_a_player.h"
#include "SSystem/SComponent/c_math.h"
//
// Declarations:
//
/* 80D20738-80D2079C 000078 0064+00 1/0 0/0 0/0 .text daObj_Udoor_Draw__FP15obj_udoor_class */
static void daObj_Udoor_Draw(obj_udoor_class* param_0) {
// NONMATCHING
static int daObj_Udoor_Draw(obj_udoor_class* i_this) {
g_env_light.settingTevStruct(0x10, &i_this->current.pos, &i_this->tevStr);
g_env_light.setLightTevColorType_MAJI(i_this->mpModel, &i_this->tevStr);
mDoExt_modelUpdateDL(i_this->mpModel);
return 1;
}
/* ############################################################################################## */
/* 80D20DE0-80D20DE4 000000 0004+00 2/2 0/0 0/0 .rodata @3707 */
SECTION_RODATA static f32 const lit_3707 = 2000.0f;
COMPILER_STRIP_GATE(0x80D20DE0, &lit_3707);
/* 80D20DE4-80D20DE8 000004 0004+00 0/1 0/0 0/0 .rodata @3708 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3708 = 1.0f;
COMPILER_STRIP_GATE(0x80D20DE4, &lit_3708);
#pragma pop
/* 80D20DE8-80D20DEC 000008 0004+00 0/1 0/0 0/0 .rodata @3709 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3709 = -1.0f;
COMPILER_STRIP_GATE(0x80D20DE8, &lit_3709);
#pragma pop
/* 80D20DEC-80D20DF0 00000C 0004+00 0/1 0/0 0/0 .rodata @3710 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3710 = -20066.0f;
COMPILER_STRIP_GATE(0x80D20DEC, &lit_3710);
#pragma pop
/* 80D20DF0-80D20DF4 000010 0004+00 0/1 0/0 0/0 .rodata @3711 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3711 = -20428.0f;
COMPILER_STRIP_GATE(0x80D20DF0, &lit_3711);
#pragma pop
/* 80D20DF4-80D20DF8 000014 0004+00 0/1 0/0 0/0 .rodata @3712 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3712 = 500.0f;
COMPILER_STRIP_GATE(0x80D20DF4, &lit_3712);
#pragma pop
/* 80D20DF8-80D20DFC 000018 0004+00 0/1 0/0 0/0 .rodata @3713 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3713 = 1.0f / 20.0f;
COMPILER_STRIP_GATE(0x80D20DF8, &lit_3713);
#pragma pop
/* 80D20DFC-80D20E00 00001C 0004+00 0/1 0/0 0/0 .rodata @3714 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3714 = 50.0f;
COMPILER_STRIP_GATE(0x80D20DFC, &lit_3714);
#pragma pop
/* 80D2079C-80D209BC 0000DC 0220+00 2/1 0/0 0/0 .text daObj_Udoor_Execute__FP15obj_udoor_class */
static void daObj_Udoor_Execute(obj_udoor_class* param_0) {
// NONMATCHING
static int daObj_Udoor_Execute(obj_udoor_class* i_this) {
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
i_this->field_0x57c++;
switch (i_this->field_0x567) {
case 0:
cLib_addCalcAngleS2(&i_this->shape_angle.y, 0, 2, 0x1000);
break;
case 1:
i_this->field_0x580 = 2000.0f;
i_this->field_0x567 = 2;
Z2GetAudioMgr()->seStart(Z2SE_OBJ_RANCHHOUSE_DOOR_OPEN, &i_this->current.pos, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
case 2:
cLib_addCalcAngleS2(&i_this->shape_angle.y, -25000, 1, 0x1000);
break;
}
if (daPy_getPlayerActorClass()->checkFrontRollCrash()
&& player->current.pos.z < -20066.0f
&& player->current.pos.z > -20428.0f) {
i_this->field_0x580 = 500.0f;
i_this->field_0x57c = 0;
}
i_this->current.angle.y = i_this->field_0x580 * cM_ssin(i_this->field_0x57c * 9000);
cLib_addCalc0(&i_this->field_0x580, 0.05f, 50.0f);
mDoMtx_stack_c::transS(i_this->current.pos.x, i_this->current.pos.y, i_this->current.pos.z);
if (i_this->field_0x570 == 0) {
mDoMtx_YrotM(mDoMtx_stack_c::now, i_this->home.angle.y + i_this->shape_angle.y + i_this->current.angle.y);
} else {
mDoMtx_YrotM(mDoMtx_stack_c::now, i_this->home.angle.y - i_this->shape_angle.y - i_this->current.angle.y);
}
i_this->mpModel->setBaseTRMtx(mDoMtx_stack_c::now);
if (i_this->mpBgW != NULL) {
PSMTXCopy(mDoMtx_stack_c::now, i_this->mBgMtx);
i_this->mpBgW->Move();
}
return 1;
}
/* 80D209BC-80D209C4 0002FC 0008+00 1/0 0/0 0/0 .text daObj_Udoor_IsDelete__FP15obj_udoor_class */
@ -141,83 +72,105 @@ static bool daObj_Udoor_IsDelete(obj_udoor_class* param_0) {
return true;
}
/* ############################################################################################## */
/* 80D20E10-80D20E10 000030 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_80D20E10 = "Obj_udoor";
#pragma pop
/* 80D209C4-80D20A1C 000304 0058+00 1/0 0/0 0/0 .text daObj_Udoor_Delete__FP15obj_udoor_class */
static void daObj_Udoor_Delete(obj_udoor_class* param_0) {
// NONMATCHING
static int daObj_Udoor_Delete(obj_udoor_class* i_this) {
fopAcM_GetID(i_this);
dComIfG_resDelete(&i_this->mPhase, "Obj_udoor");
if (i_this->mpBgW != NULL) {
dComIfG_Bgsp().Release(i_this->mpBgW);
}
return 1;
}
/* ############################################################################################## */
/* 80D20E1C-80D20E24 000000 0008+00 1/1 0/0 0/0 .data bmdd$3732 */
SECTION_DATA static u8 bmdd[8] = {
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05,
};
/* 80D20E24-80D20E2C 000008 0008+00 1/1 0/0 0/0 .data dzbd$3733 */
SECTION_DATA static u8 dzbd[8] = {
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09,
};
/* 80D20A1C-80D20B40 00035C 0124+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */
static void useHeapInit(fopAc_ac_c* param_0) {
// NONMATCHING
static int useHeapInit(fopAc_ac_c* i_this) {
static int bmdd[2] = { 4, 5 };
static int dzbd[2] = { 8, 9 };
obj_udoor_class* a_this = static_cast<obj_udoor_class*>(i_this);
J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes("Obj_udoor", bmdd[a_this->field_0x570]);
JUT_ASSERT(model_data != 0);
a_this->mpModel = mDoExt_J3DModel__create(model_data, 0x80000, 0x11000084);
if (a_this->mpModel == NULL) {
return 0;
}
a_this->mpBgW = new dBgW();
if (a_this->mpBgW == NULL) {
return 0;
}
cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes("Obj_udoor", dzbd[a_this->field_0x570]);
if (a_this->mpBgW->Set(dzb, cBgW::MOVE_BG_e, &a_this->mBgMtx) == TRUE) {
return 0;
}
a_this->mpBgW->SetCrrFunc(dBgS_MoveBGProc_Typical);
return 1;
}
/* ############################################################################################## */
/* 80D20E00-80D20E04 000020 0004+00 0/1 0/0 0/0 .rodata @3828 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3828 = -300.0f;
COMPILER_STRIP_GATE(0x80D20E00, &lit_3828);
#pragma pop
/* 80D20B40-80D20D48 000480 0208+00 1/0 0/0 0/0 .text daObj_Udoor_Create__FP10fopAc_ac_c */
static cPhs__Step daObj_Udoor_Create(fopAc_ac_c* i_this) {
static dCcD_SrcSph cc_sph_src = {
{
{0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdff, 0x3}, 0x0}}, // mObj
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg
{0x0}, // mGObjCo
}, // mObjInf
{
{{0.0f, 0.0f, 0.0f}, 40.0f} // mSph
} // mSphAttr
};
/* 80D20E04-80D20E08 000024 0004+00 0/1 0/0 0/0 .rodata @3829 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3829 = -600.0f;
COMPILER_STRIP_GATE(0x80D20E04, &lit_3829);
#pragma pop
fopAcM_SetupActor(i_this, obj_udoor_class);
obj_udoor_class* a_this = static_cast<obj_udoor_class*>(i_this);
cPhs__Step phase_state = (cPhs__Step)dComIfG_resLoad(&a_this->mPhase, "Obj_udoor");
if (phase_state == cPhs_COMPLEATE_e) {
a_this->field_0x570 = a_this->base.parameters;
if (a_this->field_0x570 == 0xff) {
a_this->field_0x570 = 0;
}
/* 80D20E08-80D20E0C 000028 0004+00 0/1 0/0 0/0 .rodata @3830 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3830 = 300.0f;
COMPILER_STRIP_GATE(0x80D20E08, &lit_3830);
#pragma pop
if (!fopAcM_entrySolidHeap(a_this, useHeapInit, 0xD20)) {
return cPhs_ERROR_e;
}
if (a_this->mpBgW != NULL) {
if (dComIfG_Bgsp().Regist(a_this->mpBgW, a_this)) {
return cPhs_ERROR_e;
}
}
/* 80D20E0C-80D20E10 00002C 0004+00 0/1 0/0 0/0 .rodata @3831 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3831 = 600.0f;
COMPILER_STRIP_GATE(0x80D20E0C, &lit_3831);
#pragma pop
a_this->mCcStts.Init(0xff, 0, a_this);
a_this->mCcSph.Set(cc_sph_src);
a_this->mCcSph.SetStts(&a_this->mCcStts);
fopAcM_SetMtx(a_this, a_this->mpModel->getBaseTRMtx());
fopAcM_SetMin(a_this, -300.0f, -600.0, -300.0f);
fopAcM_SetMax(a_this, 300.0f, 600.0, 300.0f);
/* 80D20E2C-80D20E6C 000010 0040+00 1/1 0/0 0/0 .data cc_sph_src$3768 */
static dCcD_SrcSph cc_sph_src = {
{
{0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdff, 0x3}, 0x0}}, // mObj
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg
{0x0}, // mGObjCo
}, // mObjInf
{
{{0.0f, 0.0f, 0.0f}, 40.0f} // mSph
} // mSphAttr
};
if (dComIfG_play_c::getLayerNo(0) != 1 && dComIfG_play_c::getLayerNo(0) != 3) {
a_this->field_0x567 = 2;
}
daObj_Udoor_Execute(a_this);
}
return phase_state;
}
/* 80D20E6C-80D20E8C -00001 0020+00 1/0 0/0 0/0 .data l_daObj_Udoor_Method */
static actor_method_class l_daObj_Udoor_Method = {
(process_method_func)daObj_Udoor_Create__FP10fopAc_ac_c,
(process_method_func)daObj_Udoor_Delete__FP15obj_udoor_class,
(process_method_func)daObj_Udoor_Execute__FP15obj_udoor_class,
(process_method_func)daObj_Udoor_IsDelete__FP15obj_udoor_class,
(process_method_func)daObj_Udoor_Draw__FP15obj_udoor_class,
(process_method_func)daObj_Udoor_Create,
(process_method_func)daObj_Udoor_Delete,
(process_method_func)daObj_Udoor_Execute,
(process_method_func)daObj_Udoor_IsDelete,
(process_method_func)daObj_Udoor_Draw,
};
/* 80D20E8C-80D20EBC -00001 0030+00 0/0 0/0 1/0 .data g_profile_OBJ_UDOOR */
@ -237,37 +190,3 @@ extern actor_process_profile_definition g_profile_OBJ_UDOOR = {
fopAc_ACTOR_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};
/* 80D20EBC-80D20EC8 0000A0 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGSph */
SECTION_DATA extern void* __vt__8cM3dGSph[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__8cM3dGSphFv,
};
/* 80D20EC8-80D20ED4 0000AC 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,
};
/* 80D20B40-80D20D48 000480 0208+00 1/0 0/0 0/0 .text daObj_Udoor_Create__FP10fopAc_ac_c
*/
static void daObj_Udoor_Create(fopAc_ac_c* param_0) {
// NONMATCHING
}
/* 80D20D48-80D20D90 000688 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */
// cM3dGSph::~cM3dGSph() {
extern "C" void __dt__8cM3dGSphFv() {
// NONMATCHING
}
/* 80D20D90-80D20DD8 0006D0 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
// cM3dGAab::~cM3dGAab() {
extern "C" void __dt__8cM3dGAabFv() {
// NONMATCHING
}
/* 80D20E10-80D20E10 000030 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */