d_a_obj_gm almost matching (#2750)

* linked some objs

* major work

* equivalent

* almost matching

* almost matching

* PR cleanup
This commit is contained in:
Carco_21 2025-10-22 21:39:18 -04:00 committed by GitHub
parent d6711a18c8
commit 4a5752fe52
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 757 additions and 726 deletions

View File

@ -89,6 +89,6 @@ __vt__8cM3dGAab = .data:0x0000018C; // type:object size:0xC scope:global
__vt__12dBgS_ObjAcch = .data:0x00000198; // type:object size:0x24 scope:global
__vt__14daObj_Gm_HIO_c = .data:0x000001BC; // type:object size:0xC scope:global
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
lbl_460_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte
l_initHIO = .bss:0x00000008; // type:object size:0x1 data:byte
@3661 = .bss:0x0000000C; // type:object size:0xC scope:local
l_HIO = .bss:0x00000018; // type:object size:0x8 scope:global data:byte

View File

@ -1981,7 +1981,7 @@ config.libs = [
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_cho"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_cowdoor"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_crope"),
ActorRel(NonMatching, "d_a_obj_crvfence"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_crvfence"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_crvgate"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_crvhahen"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_crvlh_down"),
@ -1995,7 +1995,7 @@ config.libs = [
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_digsnow"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_dmelevator"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_drop"),
ActorRel(NonMatching, "d_a_obj_dust"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_dust"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_enemy_create"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_fallobj"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_fan"),

View File

@ -32,10 +32,10 @@ public:
inline int create();
/* 80BE2A70 */ inline int CreateHeap();
/* 80BE2AE8 */ int Create();
/* 80BE2B30 */ int Execute(Mtx**);
/* 80BE2E9C */ int Draw();
/* 80BE2F40 */ int Delete();
/* 80BE2AE8 */ inline int Create();
/* 80BE2B30 */ inline int Execute(Mtx**);
/* 80BE2E9C */ inline int Draw();
/* 80BE2F40 */ inline int Delete();
/* 0x5A0 */ f32 mRideOscillationSpeed;
/* 0x5A4 */ f32 mRideIntensity;

View File

@ -1,10 +1,10 @@
#ifndef D_A_OBJ_GM_H
#define D_A_OBJ_GM_H
#include "d/actor/d_a_tbox.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "d/d_cc_uty.h"
#include "f_op/f_op_actor_mng.h"
/**
* @ingroup actors-objects
@ -13,21 +13,21 @@
*
* @details
*
*/
class obj_gm_class : public fopAc_ac_c {
*/
class obj_gm_class {
public:
/* 0x000 */ fopAc_ac_c actor;
/* 0x568 */ request_of_phase_process_class mPhase;
/* 0x570 */ u8 field_0x570;
/* 0x570 */ u8 mType;
/* 0x571 */ u8 field_0x571;
/* 0x572 */ u8 field_0x572;
/* 0x573 */ u8 field_0x573;
/* 0x574 */ J3DModel* field_0x574;
/* 0x572 */ u8 mSwBit;
/* 0x574 */ J3DModel* mModel;
/* 0x578 */ Z2Creature mSound;
/* 0x608 */ s16 field_0x608;
/* 0x60A */ s16 field_0x60a;
/* 0x60C */ s16 field_0x60c;
/* 0x60E */ s16 field_0x60e;
/* 0x610 */ u8 field_0x610[0x614 - 0x610];
/* 0x60A */ s16 mAction;
/* 0x60C */ s16 mActionMode;
/* 0x60E */ s16 mTimers[2];
/* 0x614 */ cXyz field_0x614[2];
/* 0x62C */ f32 field_0x62c;
/* 0x630 */ f32 field_0x630;
@ -38,51 +38,32 @@ public:
/* 0x640 */ s16 field_0x640;
/* 0x642 */ s16 field_0x642;
/* 0x644 */ s16 field_0x644;
/* 0x646 */ u8 field_0x646[0x648 - 0x646];
/* 0x648 */ f32 field_0x648;
/* 0x64C */ s16 field_0x64c[4];
/* 0x64C */ s16 field_0x64c[2];
/* 0x650 */ void* field_0x650;
/* 0x654 */ cXyz field_0x654[2];
/* 0x66C */ cXyz field_0x66c[2];
/* 0x684 */ cXyz field_0x684[6];
/* 0x6CC */ cXyz field_0x6cc[6];
/* 0x714 */ u8 field_0x714[0x720 - 0x714];
/* 0x714 */ cXyz field_0x714;
/* 0x720 */ s16 field_0x720;
/* 0x722 */ s16 field_0x722;
/* 0x724 */ u8 field_0x724[0x726 - 0x724];
/* 0x726 */ u8 field_0x726;
/* 0x727 */ u8 field_0x727;
/* 0x726 */ s8 field_0x726;
/* 0x728 */ f32 field_0x728;
/* 0x72C */ u8 field_0x72c;
/* 0x72D */ u8 field_0x72d[0x730 - 0x72d];
/* 0x72C */ s8 field_0x72c;
/* 0x730 */ dBgS_AcchCir mAcchCir;
/* 0x770 */ dBgS_ObjAcch mObjAcch;
/* 0x770 */ dBgS_ObjAcch mBgc;
/* 0x948 */ s16 field_0x948;
/* 0x94A */ u8 field_0x94a[0x94c - 0x94a];
/* 0x94C */ dCcD_Stts mStts;
/* 0x988 */ dCcD_Sph field_0x988;
/* 0x988 */ dCcD_Sph mSph;
/* 0xAC0 */ dCcU_AtInfo mAtInfo;
/* 0xAE4 */ u8 field_0xae4;
/* 0xAE5 */ u8 field_0xae5[0xae8 - 0xae5];
/* 0xAE8 */ u32 field_0xae8;
/* 0xAEC */ u32 field_0xaec;
/* 0xAF0 */ u8 field_0xaf0;
/* 0xAF1 */ u8 field_0xaf1[0xaf4 - 0xaf1];
/* 0xAF0 */ bool mIsFirstSpawn;
};
STATIC_ASSERT(sizeof(obj_gm_class) == 0xaf4);
class daObj_Gm_HIO_c {
public:
/* 80BFB14C */ daObj_Gm_HIO_c();
/* 80BFD284 */ ~daObj_Gm_HIO_c();
};
struct daObj {
public:
/* 800372A0 */ void make_eff_break_gm_kotubo(fopAc_ac_c*);
/* 80037330 */ void make_eff_break_gm_ootubo(fopAc_ac_c*);
};
#endif /* D_A_OBJ_GM_H */

View File

@ -1,6 +1,7 @@
#ifndef D_A_TBOX_H
#define D_A_TBOX_H
#include "SSystem/SComponent/c_lib.h"
#include "d/d_cc_d.h"
#include "d/d_bg_s_acch.h"
#include "d/d_bg_s_movebg_actor.h"
@ -141,6 +142,10 @@ public:
u16 flagCheck(u16 i_flag) { return mFlags & i_flag; }
void setAction(daTbox_actionFn i_actionFn) { mpActionFn = i_actionFn; }
void action() { (this->*mpActionFn)(); }
void setDrawMtx(Mtx i_mtx) {
MTXCopy(i_mtx, mDrawMtx);
field_0x9fc = 1;
}
private:
/* 0x718 */ u8 field_0x718;
@ -187,7 +192,7 @@ private:
/* 0x9F8 */ u32 mOpenSeId;
/* 0x9FC */ u8 field_0x9fc;
/* 0x9FD */ u8 field_0x9fd;
/* 0xA00 */ Mtx field_0xa00;
/* 0xA00 */ Mtx mDrawMtx;
};
STATIC_ASSERT(sizeof(daTbox_c) == 0xA30);

File diff suppressed because it is too large Load Diff

View File

@ -72,9 +72,9 @@ static void cut_line_calc(obj_ito_class* i_this, ito_s* param_2, int param_3) {
cXyz sp11c(0.0f, 0.0f, 0.0f);
cXyz sp128;
if (param_2 == &i_this->field_0x103c && actor_p != NULL && actor_p->field_0x60a == 2) {
sp11c = *pos - actor_p->current.pos;
sp11c *= (XREG_F(2) + 0.0018f) * actor_p->speedF;
if (param_2 == &i_this->field_0x103c && actor_p != NULL && actor_p->mAction == 2) {
sp11c = *pos - actor_p->actor.current.pos;
sp11c *= (XREG_F(2) + 0.0018f) * actor_p->actor.speedF;
}
cXyz sp134;
@ -89,7 +89,7 @@ static void cut_line_calc(obj_ito_class* i_this, ito_s* param_2, int param_3) {
cXyz sp140;
sp104.y = sp104.z = 0.0f;
if (actor_p != NULL && actor_p->field_0x60a == 1) {
if (actor_p != NULL && actor_p->mAction == 1) {
bVar1 = true;
cMtx_YrotS(*calc_mtx, actor_p->field_0x64c[0] + param_3 * (hREG_S(3) + 18000));
sp104.x = hREG_F(8) + 2.0f;
@ -248,7 +248,7 @@ static void action(obj_ito_class* i_this) {
spe8 = i_this->field_0x618 - a_this->current.pos;
i_this->field_0x624 = a_this->current.pos + (spe8 * 0.5f);
if (actor_p->field_0x60a == 0) {
if (actor_p->mAction == 0) {
spe8 = actor_p->field_0x654[i_this->field_0x570] - actor_p->field_0x66c[i_this->field_0x570];
i_this->field_0x624 += spe8 * (TREG_F(5) + 0.25f);
}
@ -342,14 +342,14 @@ static void action(obj_ito_class* i_this) {
if (i_this->field_0x678[i].ChkCoHit()) {
fopAc_ac_c* var_r25 = i_this->field_0x678[i].GetCoHitObj()->GetAc();
if (actor_p != NULL && var_r25 != actor_p) {
if (actor_p != NULL && var_r25 != &actor_p->actor) {
actor_p->field_0xae4 |= 0x4;
}
}
}
if (actor_p != NULL && actor_p->field_0x567 != 0) {
actor_p->field_0x567 = 0;
if (actor_p != NULL && actor_p->actor.field_0x567 != 0) {
actor_p->actor.field_0x567 = 0;
actor_p->field_0xae4 |= 2;
cut_set(i_this, 100);
}
@ -403,7 +403,7 @@ static void action(obj_ito_class* i_this) {
}
}
if (i_this->field_0x570 == 0 && actor_p->field_0x60a == 2 && i_this->field_0x1038 == 0) {
if (i_this->field_0x570 == 0 && actor_p->mAction == 2 && i_this->field_0x1038 == 0) {
cut_set(i_this, 100);
}
}
@ -430,7 +430,7 @@ static void action(obj_ito_class* i_this) {
i_this->field_0x1038 = 2;
}
a_this->current.angle = actor_p->current.angle;
a_this->current.angle = actor_p->actor.current.angle;
cMtx_YrotS(*calc_mtx, a_this->current.angle.y);
cMtx_XrotM(*calc_mtx, a_this->current.angle.x);

View File

@ -1753,7 +1753,7 @@ void daTbox_c::setBaseMtx() {
mDoMtx_stack_c::transM(0.0f, -50.0f, 0.0f);
if (field_0x9fc != 0) {
mpModel->setBaseTRMtx(field_0xa00);
mpModel->setBaseTRMtx(mDrawMtx);
} else {
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}