d_a_obj_key / d_a_obj_keyhole / d_a_obj_smallkey (#2584)

* obj_key equivalent

* obj_keyhole done

* obj_smallkey done

* use macro
This commit is contained in:
TakaRikka 2025-08-13 12:47:18 -07:00 committed by GitHub
parent 3de1f91acb
commit c724824c5c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 2143 additions and 2396 deletions

View File

@ -1975,8 +1975,8 @@ config.libs = [
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_katatsumuri"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_kazeneko"),
ActorRel(NonMatching, "d_a_obj_kbox"),
ActorRel(NonMatching, "d_a_obj_key"),
ActorRel(NonMatching, "d_a_obj_keyhole"),
ActorRel(Equivalent, "d_a_obj_key"), # weak func order
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_keyhole"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_ki"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_kiPot"),
ActorRel(NonMatching, "d_a_obj_kita"),
@ -2098,7 +2098,7 @@ config.libs = [
ActorRel(Equivalent, "d_a_obj_sekizoa"), # weak function order
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_shield"),
ActorRel(Equivalent, "d_a_obj_sm_door"), # vtable order
ActorRel(NonMatching, "d_a_obj_smallkey"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_smallkey"),
ActorRel(NonMatching, "d_a_obj_smgdoor"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_smoke"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_smtile"),

View File

@ -1,6 +1,10 @@
#ifndef D_A_E_DB_H
#define D_A_E_DB_H
#include "f_op/f_op_actor_mng.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "d/d_cc_uty.h"
/**
* @ingroup actors-enemies
@ -10,12 +14,65 @@
* @details
*
*/
class e_db_class : public fopEn_enemy_c {
class e_db_class {
public:
/* 0x5ac */ u8 field_0x5ac[0x66a - 0x5ac];
/* 0x66A */ s16 field_0x66a;
/* 0x66C */ s16 field_0x66c;
/* 0x66E */ u8 field_0x66e[0x1270 - 0x66e];
/* 0x0000 */ fopEn_enemy_c enemy;
/* 0x05AC */ request_of_phase_process_class field_0x5ac;
/* 0x05B4 */ u8 field_0x5b4;
/* 0x05B5 */ u8 field_0x5b5;
/* 0x05B6 */ u8 field_0x5b6;
/* 0x05B7 */ u8 field_0x5b7;
/* 0x05B8 */ mDoExt_McaMorfSO* field_0x5b8;
/* 0x05BC */ Z2CreatureEnemy sound;
/* 0x0660 */ int field_0x660;
/* 0x0664 */ u32 field_0x664;
/* 0x0668 */ s16 field_0x668;
/* 0x066A */ s16 field_0x66a;
/* 0x066C */ s16 field_0x66c;
/* 0x0670 */ f32 field_0x670;
/* 0x0674 */ cXyz field_0x674;
/* 0x0680 */ s16 field_0x680;
/* 0x0682 */ u8 field_0x682[0x0684 - 0x0682];
/* 0x0684 */ s16 field_0x684;
/* 0x0688 */ f32 field_0x688;
/* 0x068C */ f32 field_0x68c;
/* 0x0690 */ f32 field_0x690;
/* 0x0694 */ s16 field_0x694[3];
/* 0x069A */ s16 field_0x69a;
/* 0x069C */ cXyz field_0x69c[12];
/* 0x072C */ csXyz field_0x72c[12];
/* 0x0774 */ J3DModel* field_0x774[11];
/* 0x07A0 */ u8 field_0x7A0[0x07D4 - 0x07A0];
/* 0x07D4 */ f32 field_0x7d4[11];
/* 0x0800 */ u8 field_0x800[0x0804 - 0x0800];
/* 0x0804 */ mDoExt_3DlineMat1_c field_0x804;
/* 0x0840 */ f32 field_0x840;
/* 0x0844 */ f32 field_0x844;
/* 0x0848 */ f32 field_0x848;
/* 0x084C */ u8 field_0x84C[0x084E - 0x084C];
/* 0x084E */ s16 field_0x84e;
/* 0x0850 */ u8 field_0x850;
/* 0x0851 */ u8 field_0x851;
/* 0x0852 */ s8 field_0x852;
/* 0x0854 */ f32 field_0x854;
/* 0x0858 */ f32 field_0x858;
/* 0x085C */ s16 field_0x85c;
/* 0x085E */ u8 field_0x85E[0x0860 - 0x085E];
/* 0x0860 */ s16 field_0x860;
/* 0x0864 */ f32 field_0x864;
/* 0x0868 */ dCcD_Stts field_0x868;
/* 0x08A4 */ dCcD_Sph field_0x8a4;
/* 0x09DC */ dCcD_Sph field_0x9dc;
/* 0x0B14 */ u8 field_0xb14;
/* 0x0B18 */ dCcD_Sph field_0xb18[4];
/* 0x0FF8 */ dCcU_AtInfo field_0xff8;
/* 0x101C */ dBgS_AcchCir field_0x101c;
/* 0x105C */ dBgS_ObjAcch field_0x105c;
/* 0x1234 */ fpc_ProcID field_0x1234;
/* 0x1238 */ u8 field_0x1238;
/* 0x1239 */ u8 field_0x1239;
/* 0x123A */ u8 field_0x123A[0x126C - 0x123A];
/* 0x126C */ u8 field_0x126c;
};
STATIC_ASSERT(sizeof(e_db_class) == 0x1270);

View File

@ -84,6 +84,7 @@ public:
f32 getPlayerRange() const { return mPlayerRange; }
int getActionMode() const { return mActionMode; }
daE_OC_c* getTalkOc() const { return mpTalk; }
J3DModel* getOcModel() { return mpMorf->getModel(); }
private:
/* 0x5a0 */ request_of_phase_process_class mPhaseReqs[2];

View File

@ -193,7 +193,7 @@ public:
/* 0x10F4 */ f32 mDemoCamFovy;
/* 0x10F8 */ f32 field_0x10f8;
/* 0x10FC */ u8 field_0x10fc[0x1104 - 0x10fc];
/* 0x1104 */ s8 field_0x1104;
/* 0x1104 */ u8 field_0x1104;
/* 0x1105 */ u8 field_0x1105[0x1108 - 0x1105];
/* 0x1108 */ dMsgFlow_c mMsgFlow;
};

View File

@ -2,6 +2,17 @@
#define D_A_OBJ_KEY_H
#include "f_op/f_op_actor_mng.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
struct obj_key_s {
/* 0x00 */ J3DModel* model[3];
/* 0x0C */ cXyz pos[3];
/* 0x30 */ cXyz field_0x30[3];
/* 0x54 */ csXyz angle[3];
/* 0x68 */ f32 ground_y[3];
/* 0x74 */ fpc_ProcID key_actor_id;
};
/**
* @ingroup actors-objects
@ -11,9 +22,27 @@
* @details
*
*/
class obj_key_class : public fopAc_ac_c {
private:
/* 0x568 */ u8 field_0x568[0x9b8 - 0x568];
class obj_key_class {
public:
/* 0x000 */ fopAc_ac_c actor;
/* 0x568 */ request_of_phase_process_class phase;
/* 0x570 */ obj_key_s key_s;
/* 0x5E8 */ Z2SoundObjSimple sound;
/* 0x608 */ u8 field_0x608[0x60A - 0x608];
/* 0x60A */ s16 action;
/* 0x60C */ s16 field_0x60c;
/* 0x60E */ s16 timers[2];
/* 0x612 */ s16 field_0x612;
/* 0x614 */ s16 field_0x614;
/* 0x616 */ s16 field_0x616;
/* 0x618 */ f32 field_0x618;
/* 0x61C */ u8 hide;
/* 0x620 */ dBgS_AcchCir acchcir;
/* 0x660 */ dBgS_ObjAcch acch;
/* 0x838 */ dCcD_Stts ccStts;
/* 0x874 */ dCcD_Sph ccSph;
/* 0x9AC */ u32 field_0x9ac[2];
/* 0x9B4 */ u8 HIOInit;
};
STATIC_ASSERT(sizeof(obj_key_class) == 0x9b8);
@ -21,7 +50,11 @@ STATIC_ASSERT(sizeof(obj_key_class) == 0x9b8);
class daObj_Key_HIO_c {
public:
/* 80C3F40C */ daObj_Key_HIO_c();
/* 80C40F28 */ ~daObj_Key_HIO_c();
/* 80C40F28 */ virtual ~daObj_Key_HIO_c() {}
/* 0x4 */ s8 id;
/* 0x8 */ f32 size;
/* 0xC */ f32 chain_size;
};

View File

@ -2,6 +2,20 @@
#define D_A_OBJ_KEYHOLE_H
#include "f_op/f_op_actor_mng.h"
#include "d/d_cc_d.h"
#include "d/d_cc_uty.h"
struct kh_chain_s {
/* 0x000 */ J3DModel* model[16];
/* 0x040 */ cXyz field_0x40;
/* 0x04C */ cXyz field_0x4c;
/* 0x058 */ cXyz field_0x58[16];
/* 0x118 */ cXyz field_0x118[16];
/* 0x1D8 */ csXyz field_0x1d8[16];
/* 0x238 */ f32 field_0x238;
/* 0x23C */ dCcD_Stts ccStts;
/* 0x278 */ dCcD_Sph ccSph[3];
};
/**
* @ingroup actors-objects
@ -11,29 +25,58 @@
* @details
*
*/
class obj_keyhole_class : public fopAc_ac_c {
class obj_keyhole_class{
public:
void setOpen() { mOpenState = 1; }
bool checkOpenEnd() { return mOpenState == 3; }
void setOpen() { open_state = 1; }
void setOpenEnd() { open_state = 3; }
bool checkOpenEnd() { return open_state == 3; }
bool checkOpen() { return open_state == 1; }
private:
/* 0x0568 */ u8 field_0x0568[0x2ca4 - 0x568];
/* 0x2ca4 */ u8 mOpenState;
/* 0x2ca5 */ u8 field_0x2ca5[0x2cb8 - 0x2ca5];
/* 0x0000 */ fopAc_ac_c actor;
/* 0x0568 */ request_of_phase_process_class phase;
/* 0x0570 */ char* arcname;
/* 0x0574 */ mDoExt_McaMorf* lock_modelMorf;
/* 0x0578 */ J3DModel* lock_model;
/* 0x057C */ int chain_num;
/* 0x0580 */ int field_0x580;
/* 0x0584 */ u8 arg0;
/* 0x0588 */ Z2Creature sound;
/* 0x0618 */ s16 hit_timer;
/* 0x061A */ s16 field_0x61a;
/* 0x061C */ s16 action;
/* 0x061E */ s16 mode;
/* 0x0620 */ s16 timers[2];
/* 0x0624 */ kh_chain_s chain_s[6];
/* 0x2AE4 */ f32 field_0x2ae4;
/* 0x2AE8 */ f32 field_0x2ae8;
/* 0x2AEC */ s16 field_0x2aec;
/* 0x2AF0 */ f32 field_0x2af0;
/* 0x2AF4 */ f32 field_0x2af4;
/* 0x2AF8 */ f32 field_0x2af8;
/* 0x2AFC */ f32 field_0x2afc;
/* 0x2B00 */ s16 field_0x2b00;
/* 0x2B04 */ dCcD_Stts ccStts;
/* 0x2B40 */ dCcD_Sph ccSph;
/* 0x2C78 */ dCcU_AtInfo atInfo;
/* 0x2C9C */ u32 field_0x2c9c;
/* 0x2CA0 */ u32 field_0x2ca0;
/* 0x2CA4 */ u8 open_state;
/* 0x2CA5 */ u8 HIOInit;
/* 0x2CA6 */ s8 field_0x2ca6;
/* 0x2CA7 */ s8 hide_lock;
/* 0x2CA8 */ cXyz field_0x2ca8;
/* 0x2CB4 */ u8 field_0x2cb4;
};
STATIC_ASSERT(sizeof(obj_keyhole_class) == 0x2CB8);
class kh_chain_s {
public:
/* 80C436A0 */ ~kh_chain_s();
/* 80C437A4 */ kh_chain_s();
};
class daObj_Keyhole_HIO_c {
public:
/* 80C4124C */ daObj_Keyhole_HIO_c();
/* 80C4394C */ ~daObj_Keyhole_HIO_c();
/* 80C4394C */ virtual ~daObj_Keyhole_HIO_c() {}
/* 0x4 */ s8 id;
/* 0x8 */ f32 obj_size;
};

View File

@ -2,6 +2,8 @@
#define D_A_OBJ_SMALLKEY_H
#include "f_op/f_op_actor_mng.h"
#include "d/actor/d_a_itembase.h"
#include "d/d_particle.h"
/**
* @ingroup actors-objects
@ -11,52 +13,88 @@
* @details
*
*/
class daKey_c : public fopAc_ac_c {
class daKey_c : public daItemBase_c {
private:
/* 80CDB2E0 */ void seStartTwinkle_private(u32);
public:
enum daKey_Status_e {
STATUS_INIT_e,
STATUS_PARENT_WAIT_e,
STATUS_WAIT_e,
STATUS_ORDER_GET_DEMO_e,
STATUS_GET_DEMO_e,
STATUS_SW_ON_WAIT_e,
STATUS_BOOMERANG_CARRY_e,
STATUS_E_GB_e,
};
/* 80CD9F2C */ void initBaseMtx();
/* 80CD9F68 */ void setBaseMtx();
/* 80CD9FDC */ void Create();
/* 80CDA15C */ bool __CreateHeap();
/* 80CDA164 */ void create();
/* 80CD9FDC */ int Create();
/* 80CDA15C */ int __CreateHeap();
/* 80CDA164 */ int create();
/* 80CDA680 */ void bg_check();
/* 80CDA7E8 */ void actionInitInit();
/* 80CDA81C */ void actionInit();
/* 80CDA8C8 */ void actionParentWaitInit();
/* 80CDA8FC */ void actionParentWait();
/* 80CDA9AC */ void actionWaitInit();
/* 80CDAA28 */ void actionWait();
/* 80CDAB74 */ void initActionOrderGetDemo();
/* 80CDAC18 */ void actionOrderGetDemo();
/* 80CDAC94 */ void actionGetDemo();
/* 80CDAD28 */ void actionInitSwOnWait();
/* 80CDADD4 */ void actionSwOnWait();
/* 80CDAE54 */ void actionInitBoomerangCarry();
/* 80CDAF40 */ void actionBoomerangCarry();
/* 80CDA7E8 */ int actionInitInit();
/* 80CDA81C */ int actionInit();
/* 80CDA8C8 */ int actionParentWaitInit();
/* 80CDA8FC */ int actionParentWait();
/* 80CDA9AC */ int actionWaitInit();
/* 80CDAA28 */ int actionWait();
/* 80CDAB74 */ int initActionOrderGetDemo();
/* 80CDAC18 */ int actionOrderGetDemo();
/* 80CDAC94 */ int actionGetDemo();
/* 80CDAD28 */ int actionInitSwOnWait();
/* 80CDADD4 */ int actionSwOnWait();
/* 80CDAE54 */ int actionInitBoomerangCarry();
/* 80CDAF40 */ int actionBoomerangCarry();
/* 80CDAFB4 */ void effectSet();
/* 80CDB0D8 */ void effectStop();
/* 80CDB128 */ void effectCtrl();
/* 80CDB2E0 */ void seStartTwinkle_private(u32);
/* 80CDB36C */ void actionInitE_GB();
/* 80CDB3D8 */ void actionE_GB();
/* 80CDB404 */ void execute();
/* 80CDB5D4 */ void draw();
/* 80CDB628 */ void _delete();
/* 80CDB36C */ int actionInitE_GB();
/* 80CDB3D8 */ int actionE_GB();
/* 80CDB404 */ int execute();
/* 80CDB5D4 */ int draw();
/* 80CDB628 */ int _delete();
void setPos(cXyz pos) {
current.pos = pos;
int getSwNo() { return fopAcM_GetParamBit(this, 16, 8); }
int getSaveBitNo() { return fopAcM_GetParamBit(this, 8, 8); }
u16 getSwOnWaitTimer() { return field_0x93a & 0x3F; }
void setStatus(u8 i_status) { mStatus = i_status; }
bool chkStatus(u8 i_status) { return mStatus == i_status; }
void setPos(cXyz i_pos) {
current.pos = i_pos;
}
void startMove(f32 param_1, f32 param_2) {
speedF = param_1;
speed.y = param_2;
void startMove(f32 i_speedF, f32 i_speedY) {
speedF = i_speedF;
speed.y = i_speedY;
gravity = -6.0f;
actionWaitInit();
}
/* 0x568 */ u8 field_0x568[0x978 - 0x568];
void seStartTwinkle(u32 i_soundId, cXyz* param_1) {
field_0x978 = *param_1;
mDoAud_seStartLevel(i_soundId, &field_0x978, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
field_0x984 = 1;
}
/* 0x92C */ fpc_ProcID mItemId;
/* 0x930 */ int field_0x930;
/* 0x934 */ u8 mStatus;
/* 0x935 */ u8 mSwOnTimer;
/* 0x936 */ u8 field_0x936;
/* 0x937 */ u8 mIsPrmInit;
/* 0x938 */ s16 field_0x938;
/* 0x93A */ u16 field_0x93a;
/* 0x93C */ dPa_followEcallBack mEffect[2];
/* 0x964 */ csXyz mEffRot;
/* 0x96C */ cXyz mPrevSpeed;
/* 0x978 */ cXyz field_0x978;
/* 0x984 */ u8 field_0x984;
/* 0x985 */ u8 field_0x985[0x988 - 0x985];
};
STATIC_ASSERT(sizeof(daKey_c) == 0x988);

View File

@ -90,6 +90,10 @@ public:
setPosition(i_tboxNo, 11, i_pos, -1);
}
static void offStatus(int param_0, int i_flag) {
offStatus(0, param_0, i_flag);
}
static u8 const typeToTypeGroup[17][2];
static type_group_list mTypeGroupListAll[17];
static typeGroupData_c* mTypeGroupData;

View File

@ -756,7 +756,7 @@ int daBdoorL1_c::unlockInit() {
obj_keyhole_class* keyhole = (obj_keyhole_class*)fopAcM_SearchByID(mKeyHoleId);
if (keyhole != NULL) {
keyhole->setOpen();
mDoAud_seStart(Z2SE_OBJ_BOSS_LOCK_OPEN, &keyhole->current.pos, 0, 0);
mDoAud_seStart(Z2SE_OBJ_BOSS_LOCK_OPEN, &keyhole->actor.current.pos, 0, 0);
}
field_0x59b = 1;
return 1;

View File

@ -330,7 +330,7 @@ int daBdoorL5_c::unlockInit() {
obj_keyhole_class* keyHole = (obj_keyhole_class*)fopAcM_SearchByID(mKeyHoleId);
if (keyHole != NULL) {
keyHole->setOpen();
mDoAud_seStart(Z2SE_OBJ_BOSS_LOCK_OPEN_LV5, &keyHole->current.pos, 0, 0);
mDoAud_seStart(Z2SE_OBJ_BOSS_LOCK_OPEN_LV5, &keyHole->actor.current.pos, 0, 0);
}
dComIfGs_onSwitch(door_param2_c::getSwbit(this), fopAcM_GetRoomNo(this));
return 1;

View File

@ -89,7 +89,7 @@ static int daE_MK_Draw(e_mk_class* i_this) {
static void* s_obj_delete(void* i_actor, void* i_data) {
if (fopAcM_IsActor(i_actor)) {
if (fopAcM_GetName(i_actor) == PROC_E_DB) {
static_cast<e_db_class*>(i_actor)->health = 1000;
static_cast<e_db_class*>(i_actor)->enemy.health = 1000;
} else if (fopAcM_GetName(i_actor) == PROC_E_DB_LEAF) {
fopAcM_delete(static_cast<e_db_leaf_class*>(i_actor));
}
@ -216,7 +216,7 @@ static e_db_class* search_db(e_mk_class* i_this) {
int i = 0;
while (i < target_info_count) {
pDekuBaba = (e_db_class*)target_info[i];
sp44 = pDekuBaba->current.pos - i_this->enemy.current.pos;
sp44 = pDekuBaba->enemy.current.pos - i_this->enemy.current.pos;
f32 fVar2 = sp44.abs();
if ((cM_rndF(1.0f) < 0.5f && fVar2 > 500.0f) && fVar2 < fVar1) {
@ -491,7 +491,7 @@ static void e_mk_shoot(e_mk_class* i_this) {
break;
case 10:
sp48 = i_this->field_0x70c->current.pos - i_this->enemy.current.pos;
sp48 = i_this->field_0x70c->enemy.current.pos - i_this->enemy.current.pos;
cLib_addCalcAngleS2(&i_this->enemy.current.angle.y, cM_atan2s(sp48.x, sp48.z), 2, 0x1000);
if (i_this->mpModelMorf->checkFrame(15.0f)) {
i_this->mSound.startCreatureVoice(Z2SE_EN_MK_V_THROW_BOOM, -1);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff