d_a_obj_mkie - matching retail (#931)

* d_a_obj_mkie - matching

* review changes
This commit is contained in:
TetrisGG
2026-02-15 16:23:06 +01:00
committed by GitHub
parent ca9481dcc9
commit 847a5e98bf
3 changed files with 436 additions and 74 deletions
+1 -1
View File
@@ -1725,7 +1725,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_obj_kanoke"),
ActorRel(Matching, "d_a_obj_ladder"),
ActorRel(NonMatching, "d_a_obj_light"),
ActorRel(NonMatching, "d_a_obj_mkie"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_mkie"),
ActorRel(Matching, "d_a_obj_mkiek"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_mknjd"),
ActorRel(NonMatching, "d_a_obj_mmrr"),
+85 -44
View File
@@ -2,52 +2,93 @@
#define D_A_OBJ_MKIE_H
#include "d/d_bg_s_movebg_actor.h"
#include "m_Do/m_Do_ext.h"
namespace daObjMkie {
class Act_c : public dBgS_MoveBgActor {
public:
static u32 prm_make(u8 eventId, int swNo) {
return swNo << 0x10 | (eventId | 0x3000);
}
void setup(const cXyz* pos) {
current.pos = *pos;
mF58 = 1;
}
void attr() const {}
void prm_get_correct() const {}
void prm_get_evId() const {}
void prm_get_swSave() const {}
void prm_get_type() const {}
virtual BOOL CreateHeap();
void init_cc();
void set_cc_pos();
virtual BOOL Create();
cPhs_State Mthd_Create();
virtual BOOL Delete();
BOOL Mthd_Delete();
void set_mtx();
void init_mtx();
void chk_light();
void eff_break();
void sound_melt();
void sound_break();
void vib_break();
void mode_wait();
void mode_demoWait_init();
void mode_demoWait();
void mode_demo_init();
void mode_demo();
void mode_proc_call();
virtual BOOL Execute(Mtx**);
virtual BOOL Draw();
public:
/* 0x2C8 */ u8 m2C8[0xF58 - 0x2C8];
/* 0xF58 */ u8 mF58;
/* 0xF59 */ u8 mF59[0xF64 - 0xF59];
class Act_c : public dBgS_MoveBgActor {
public:
static Mtx M_tmp_mtx;
static u32 prm_make(u8 eventId, int swNo) { return swNo << 0x10 | (eventId | 0x3000); };
void setup(const cXyz* pos) {
current.pos = *pos;
mCcInit = 1;
};
};
struct Attr_c {
const char* name;
float mScale;
Vec table[8][3];
};
enum Prm_e {
PRM_CORRECT_W = 0x01,
PRM_CORRECT_S = 0xc,
PRM_EVID_W = 0x08,
PRM_EVID_S = 0x0,
PRM_SWSAVE_W = 0x08,
PRM_SWSAVE_S = 0x10,
PRM_TYPE_W = 0x01,
PRM_TYPE_S = 0x08,
PRM_FLAG_W = 0x01,
PRM_FLAG_S = 0x0d,
};
BOOL prm_get_correct() const { return daObj::PrmAbstract<Prm_e>(this, PRM_CORRECT_W, PRM_CORRECT_S); }
u8 prm_get_evId() const { return daObj::PrmAbstract<Prm_e>(this, PRM_EVID_W, PRM_EVID_S); }
int prm_get_swSave() const { return daObj::PrmAbstract<Prm_e>(this, PRM_SWSAVE_W, PRM_SWSAVE_S); }
int prm_get_type() const { return daObj::PrmAbstract<Prm_e>(this, PRM_TYPE_W, PRM_TYPE_S); }
virtual BOOL CreateHeap();
void init_cc();
void set_cc_pos();
virtual BOOL Create();
cPhs_State Mthd_Create();
virtual BOOL Delete();
BOOL Mthd_Delete();
void set_mtx();
void init_mtx();
BOOL chk_light();
void eff_break();
void sound_melt();
void sound_break();
void vib_break();
void mode_wait();
void mode_demoWait_init();
void mode_demoWait();
void mode_demo_init();
void mode_demo();
void mode_proc_call();
virtual BOOL Execute(Mtx**);
virtual BOOL Draw();
static const char M_arcname[];
static const dCcD_SrcTri M_tri_src;
static const Attr_c M_attr[];
public:
/* 0x2C8 */ request_of_phase_process_class mPhs;
/* 0x2D0 */ J3DModel* mModelBase;
/* 0x2D4 */ J3DModel* mModelVan;
/* 0x2D8 */ mDoExt_brkAnm mBrkVan;
/* 0x2F0 */ dCcD_Tri mTri[8];
/* 0xD70 */ dCcD_Stts mStts[8];
/* 0xF50 */ int mModeProc;
/* 0xF54 */ int mType;
/* 0xF58 */ bool mCcInit;
/* 0xF59 */ bool mStatueDelete;
/* 0xF5A */ bool mEvtPlaying;
/* 0xF5B */ bool mBaseAnmPlaying;
/* 0xF5C */ s16 mState;
/* 0xF5E */ s16 mLightCnt;
/* 0xF60 */ s16 mEvtIdx;
/* 0xF62 */ bool mSwitch;
/* 0xF63 */ bool mBroken;
}; // Size: 0xF64
}; // namespace daObjMkie
#endif /* D_A_OBJ_MKIE_H */
+350 -29
View File
@@ -1,121 +1,442 @@
//
// Generated by dtk
// Translation Unit: d_a_obj_mkie.cpp
//
/**
* d_a_obj_mkie.cpp
* Elephant statue in Earth Temple, that dissolves when hit with light.
*/
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_obj_mkie.h"
#include "d/res/res_mkieb.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
Mtx daObjMkie::Act_c::M_tmp_mtx;
const char daObjMkie::Act_c::M_arcname[] = "MkieB";
const dCcD_SrcTri daObjMkie::Act_c::M_tri_src = {
// dCcD_SrcGObjInf
{
/* Flags */ 0,
/* SrcObjAt Type */ 0,
/* SrcObjAt Atp */ 0,
/* SrcObjAt SPrm */ 0,
/* SrcObjTg Type */ AT_TYPE_LIGHT,
/* SrcObjTg SPrm */ dCcG_TgSPrm_Shield_e | dCcG_TgSPrm_ShieldFrontRange_e,
/* SrcObjCo SPrm */ 0,
/* SrcGObjAt Se */ 0,
/* SrcGObjAt HitMark */ 0,
/* SrcGObjAt Spl */ 0,
/* SrcGObjAt Mtrl */ 0,
/* SrcGObjAt SPrm */ 0,
/* SrcGObjTg Se */ 0,
/* SrcGObjTg HitMark */ 0,
/* SrcGObjTg Spl */ 0,
/* SrcGObjTg Mtrl */ 0,
/* SrcGObjTg SPrm */ 0,
/* SrcGObjCo SPrm */ 0,
},
// cM3dGTriS
{{
/* a */ {0.0f, 0.0f, 0.0f},
/* b */ {0.0f, 0.0f, 0.0f},
/* c */ {0.0f, 0.0f, 0.0f},
}},
};
const daObjMkie::Act_c::Attr_c daObjMkie::Act_c::M_attr[2] = {
{
"MkieB_die",
1.0f,
{
{
{-30.0f, 190.0f, 40.0f},
{-65.0f, 50.0f, 75.0f},
{65.0f, 50.0f, 75.0f},
},
{
{-30.0f, 190.0f, 40.0f},
{65.0f, 50.0f, 75.0f},
{30.0f, 190.0f, 40.0f},
},
{
{38.0f, 190.0f, 20.0f},
{75.0f, 50.0f, 65.0f},
{75.0f, 50.0f, -65.0f},
},
{
{38.0f, 190.0f, 20.0f},
{75.0f, 50.0f, -65.0f},
{38.0f, 190.0f, -40.0f},
},
{
{30.0f, 190.0f, -60.0f},
{65.0f, 50.0f, -75.0f},
{-65.0f, 50.0f, -75.0f},
},
{
{30.0f, 190.0f, -60.0f},
{-65.0f, 50.0f, -75.0f},
{-30.0f, 190.0f, -60.0f},
},
{
{-38.0f, 190.0f, -40.0f},
{-75.0f, 50.0f, -65.0f},
{-75.0f, 50.0f, 65.0f},
},
{{-38.0f, 190.0f, -40.0f}, {-75.0f, 50.0f, 65.0f}, {-38.0f, 190.0f, 20.0f}},
},
},
{"MkieBAB_die",
3.0f,
{{
{-90.0f, 570.0f, 170.0f},
{-195.0f, 150.0f, 225.0f},
{195.0f, 150.0f, 225.0f},
},
{
{-90.0f, 570.0f, 170.0f},
{195.0f, 150.0f, 225.0f},
{90.0f, 570.0f, 170.0f},
},
{
{120.0f, 570.0f, 60.0f},
{225.f, 150.0f, 195.0f},
{225.0f, 150.0f, -195.0f},
},
{
{120.0f, 570.0f, 60.0f},
{225.0f, 150.0f, -195.0f},
{120.0f, 570.0f, -120.0f},
},
{
{90.0f, 570.0f, -180.0f},
{195.0f, 150.0f, -225.0f},
{-195.0f, 150.0f, -225.0f},
},
{
{90.0f, 570.0f, -180.0f},
{-195.0f, 150.0f, -225.0f},
{-90.0f, 570.0f, -180.0f},
},
{
{-120.0f, 570.0f, -120.0f},
{-225.0f, 150.0f, -195.0f},
{-225.0f, 150.0f, 195.0f},
},
{{-120.0f, 570.0f, -120.0f}, {-225.0f, 150.0f, 195.0f}, {-120.0f, 570.0f, 60.0f}}}}
};
/* 00000078-00000250 .text CreateHeap__Q29daObjMkie5Act_cFv */
BOOL daObjMkie::Act_c::CreateHeap() {
/* Nonmatching */
J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(M_arcname, MKIEB_BDL_MKIEB);
JUT_ASSERT(0x192, model_data != NULL);
mModelBase = mDoExt_J3DModel__create(model_data, 0x80000, 0x11000022);
J3DModelData* model_data_van = (J3DModelData*)dComIfG_getObjectRes(M_arcname, MKIEB_BDL_YLSMF00);
JUT_ASSERT(0x19b, model_data_van != NULL);
mModelVan = mDoExt_J3DModel__create(model_data_van, 0x80000, 0x11000022);
J3DAnmTevRegKey* brk_van = (J3DAnmTevRegKey*)dComIfG_getObjectRes(M_arcname, MKIEB_BRK_YLSMF00);
JUT_ASSERT(0x1a5, brk_van != NULL);
int init = mBrkVan.init(model_data_van, brk_van, true, 0, 1.0f, 0, -1, false, 0);
bool ret = false;
if (mModelBase != NULL && mModelVan != NULL && init != 0) {
ret = true;
}
return ret;
}
/* 00000250-000002EC .text init_cc__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::init_cc() {
/* Nonmatching */
for (int i = 0; i < 8; i++) {
mStts[i].Init(0xff, 0xff, this);
mTri[i].Set(M_tri_src);
mTri[i].SetStts(&mStts[i]);
mTri[i].OnTgNoHitMark();
}
set_cc_pos();
}
/* 000002EC-00000420 .text set_cc_pos__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::set_cc_pos() {
/* Nonmatching */
for (int i = 0; i < 8; i++) {
Vec src[3];
Vec dst[3];
src[0] = M_attr[mType].table[i][0];
src[1] = M_attr[mType].table[i][1];
src[2] = M_attr[mType].table[i][2];
mDoMtx_multVecArray(mModelBase->getBaseTRMtx(), src, dst, 3);
mTri[i].setPos(&dst[0], &dst[1], &dst[2]);
}
}
/* 00000420-00000568 .text Create__Q29daObjMkie5Act_cFv */
BOOL daObjMkie::Act_c::Create() {
/* Nonmatching */
fopAcM_SetMtx(this, mModelBase->getBaseTRMtx());
init_mtx();
{
const Attr_c* mAttrPtr = M_attr + mType;
float initialScale = mAttrPtr->mScale;
fopAcM_setCullSizeBox(
this, initialScale * -80.0f, initialScale * -1.0f, initialScale * -80.0f, initialScale * 80.0f, initialScale * 230.0f, initialScale * 80.0f
);
}
init_cc();
if (daObj::PrmAbstract<Prm_e>(this, PRM_FLAG_W, PRM_FLAG_S) != 0) {
actor_status &= ~0x3F;
gbaName = 0;
}
mCcInit = false;
mBaseAnmPlaying = false;
{
const Attr_c* mAttrPtr = M_attr + mType;
attention_info.position.y = current.pos.y + mAttrPtr->mScale * 130.0f;
}
eyePos = attention_info.position;
mEvtIdx = dComIfGp_evmng_getEventIdx(M_attr[mType].name, prm_get_evId());
return true;
}
/* 00000568-00000754 .text Mthd_Create__Q29daObjMkie5Act_cFv */
cPhs_State daObjMkie::Act_c::Mthd_Create() {
/* Nonmatching */
cPhs_State phase_state = cPhs_ERROR_e;
fopAcM_SetupActor(this, daObjMkie::Act_c);
mSwitch = !fopAcM_isSwitch(this, prm_get_swSave());
if (mSwitch && (phase_state = dComIfG_resLoad(&mPhs, M_arcname), phase_state == cPhs_COMPLEATE_e)) {
mType = prm_get_type();
const Attr_c* mAttrPtr = M_attr + mType;
float initialScale = mAttrPtr->mScale;
scale.setall(initialScale);
phase_state = MoveBGCreate(M_arcname, MKIEB_DZB_MKIEB, dBgS_MoveBGProc_Trans, 0x1b20);
JUT_ASSERT(0x216, (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e));
}
return phase_state;
}
/* 00000BF0-00000BF8 .text Delete__Q29daObjMkie5Act_cFv */
BOOL daObjMkie::Act_c::Delete() {
/* Nonmatching */
return true;
}
/* 00000BF8-00000C54 .text Mthd_Delete__Q29daObjMkie5Act_cFv */
BOOL daObjMkie::Act_c::Mthd_Delete() {
/* Nonmatching */
BOOL ret = true;
if (mSwitch != false) {
ret = MoveBGDelete();
dComIfG_resDelete(&mPhs, M_arcname);
}
return ret;
}
/* 00000C54-00000CF8 .text set_mtx__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::set_mtx() {
/* Nonmatching */
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(shape_angle);
mModelBase->setBaseTRMtx(mDoMtx_stack_c::get());
mModelVan->setBaseTRMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::scaleM(scale);
cMtx_copy(mDoMtx_stack_c::now, M_tmp_mtx);
}
/* 00000CF8-00000D50 .text init_mtx__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::init_mtx() {
/* Nonmatching */
mModelBase->setBaseScale(scale);
mModelVan->setBaseScale(scale);
set_mtx();
}
/* 00000D50-00000DF4 .text chk_light__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::chk_light() {
/* Nonmatching */
BOOL daObjMkie::Act_c::chk_light() {
BOOL ret = false;
if (dComIfGp_getDetect().chk_light(&eyePos)) {
ret = true;
} else {
for (int i = 0; i < 8; i++) {
if (mTri[i].ChkTgHit()) {
mTri[i].ClrTgHit();
ret = true;
}
}
}
return ret;
}
/* 00000DF4-00000E84 .text eff_break__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::eff_break() {
/* Nonmatching */
_GXColor envColor;
envColor.r = (u8)tevStr.mColorC0.r;
envColor.g = (u8)tevStr.mColorC0.g;
envColor.b = (u8)tevStr.mColorC0.b;
envColor.a = (u8)tevStr.mColorC0.a;
dComIfGp_particle_set(dPa_name::ID_SCENE_81A0, &current.pos, &shape_angle, &scale, 0xff, NULL, -1, &tevStr.mColorK0, &envColor, NULL);
}
/* 00000E84-00000EF4 .text sound_melt__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::sound_melt() {
/* Nonmatching */
fopAcM_seStart(this, JA_SE_OBJ_L_OBJ_BRK_TAME, 0);
}
/* 00000EF4-00000F7C .text sound_break__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::sound_break() {
/* Nonmatching */
static const u32 se_break[] = {
JA_SE_OBJ_L_STATUE_BREAK,
JA_SE_OBJ_L_STATUE_L_BREAK,
};
fopAcM_seStart(this, se_break[mType], 0);
}
/* 00000F7C-00000FD0 .text vib_break__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::vib_break() {
/* Nonmatching */
dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0f, 1.0f, 0.0f));
}
/* 00000FD0-00001094 .text mode_wait__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::mode_wait() {
/* Nonmatching */
if (chk_light() & 0xff) {
mLightCnt += 1;
} else {
mLightCnt = 0;
}
if (mLightCnt > 20) {
mode_demoWait_init();
} else {
if (mCcInit != false) {
set_cc_pos();
}
if (!fopAcM_cullingCheck(this)) {
for (int i = 0; i < 8; i++) {
dComIfG_Ccsp()->Set(&mTri[i]);
}
}
}
}
/* 00001094-000010A8 .text mode_demoWait_init__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::mode_demoWait_init() {
/* Nonmatching */
mEvtPlaying = false;
mModeProc = 1;
}
/* 000010A8-00001168 .text mode_demoWait__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::mode_demoWait() {
/* Nonmatching */
bool demo = false;
if (dComIfGp_evmng_existence(mEvtIdx)) {
if (eventInfo.checkCommandDemoAccrpt()) {
demo = true;
mEvtPlaying = true;
} else {
fopAcM_orderOtherEventId(this, mEvtIdx, prm_get_evId());
eventInfo.onCondition(2);
}
} else {
demo = true;
}
if (demo) {
mode_demo_init();
}
}
/* 00001168-000011FC .text mode_demo_init__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::mode_demo_init() {
/* Nonmatching */
mModeProc = 2;
mState = 10;
if (!prm_get_correct()) {
mDoAud_seStart(JA_SE_READ_RIDDLE_1);
}
mBroken = false;
mBaseAnmPlaying = false;
}
/* 000011FC-00001338 .text mode_demo__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::mode_demo() {
/* Nonmatching */
if (mState > 0 && (mState -= 1, mState == 0)) {
eff_break();
sound_melt();
fopAcM_onSwitch(this, prm_get_swSave());
}
if (mState == 0) {
mBaseAnmPlaying = mBrkVan.play();
if (!mBroken && mBaseAnmPlaying) {
sound_break();
vib_break();
mBroken = true;
}
}
if (mEvtPlaying && dComIfGp_evmng_endCheck(mEvtIdx)) {
dComIfGp_event_reset();
mEvtPlaying = false;
}
if (!mEvtPlaying && mState == 0 && mBaseAnmPlaying) {
mStatueDelete = true;
}
}
/* 00001338-000013DC .text mode_proc_call__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::mode_proc_call() {
/* Nonmatching */
static void (Act_c::* mode_proc[])() = {
&Act_c::mode_wait,
&Act_c::mode_demoWait,
&Act_c::mode_demo,
};
(this->*mode_proc[mModeProc])();
}
/* 000013DC-000014A0 .text Execute__Q29daObjMkie5Act_cFPPA3_A4_f */
BOOL daObjMkie::Act_c::Execute(Mtx**) {
/* Nonmatching */
BOOL daObjMkie::Act_c::Execute(Mtx** pMtx) {
attention_info.position.x = current.pos.x;
const Attr_c* mAttrPtr = M_attr + mType;
attention_info.position.y = current.pos.y + mAttrPtr->mScale * 130.0f;
attention_info.position.z = current.pos.z;
eyePos = attention_info.position;
mode_proc_call();
if (mStatueDelete) {
fopAcM_delete(this);
}
mCcInit = false;
set_mtx();
*pMtx = &M_tmp_mtx;
return true;
}
/* 000014A0-000015B8 .text Draw__Q29daObjMkie5Act_cFv */
BOOL daObjMkie::Act_c::Draw() {
/* Nonmatching */
if (!mBaseAnmPlaying) {
bool flagVan = false;
if (mModeProc == 2) {
if (mState == 0) {
flagVan = true;
}
}
g_env_light.settingTevStruct(0, &current.pos, &tevStr);
if (flagVan) {
g_env_light.setLightTevColorType(mModelVan, &tevStr);
J3DModelData* modelData = mModelVan->getModelData();
mBrkVan.entry(modelData, mBrkVan.getFrame());
} else {
g_env_light.setLightTevColorType(mModelBase, &tevStr);
}
dComIfGd_setListBG();
if (flagVan) {
mDoExt_modelUpdateDL(mModelVan);
} else {
mDoExt_modelUpdateDL(mModelBase);
}
dComIfGd_setList();
}
return true;
}
namespace daObjMkie {
@@ -137,7 +458,7 @@ BOOL Mthd_Execute(void* i_this) {
/* 00001618-00001644 .text Mthd_Draw__Q29daObjMkie26@unnamed@d_a_obj_mkie_cpp@FPv */
BOOL Mthd_Draw(void* i_this) {
return ((daObjMkie::Act_c*)i_this)->Draw();
return ((daObjMkie::Act_c*)i_this)->MoveBGDraw();
}
/* 00001644-00001670 .text Mthd_IsDelete__Q29daObjMkie26@unnamed@d_a_obj_mkie_cpp@FPv */