d_a_obj_msdan progress (#951)

* d_a_obj_msdan

* fixed extra 0x

* formatting
This commit is contained in:
ThePlayerRolo
2026-04-13 16:25:55 -04:00
committed by GitHub
parent 2d0dc6ea49
commit 47edd9aec4
2 changed files with 177 additions and 13 deletions
+24 -4
View File
@@ -6,9 +6,20 @@
namespace daObjMsdanSub {
class Act_c : public dBgS_MoveBgActor {
public:
void prm_get_objNo() const {}
void prm_get_size() const {}
void prm_get_swSave() const {}
enum Prm_e {
PRM_SIZE_W = 0x1,
PRM_SIZE_H = 0x10,
PRM_SWSAVE_W = 0x8,
PRM_SWSAVE_S = 0x0,
PRM_OBJNO_W = 0x8,
PRM_OBJNO_S = 0x8,
};
s32 prm_get_objNo() const { return daObj::PrmAbstract(this, PRM_OBJNO_W, PRM_OBJNO_S); }
s32 prm_get_size() const { return daObj::PrmAbstract(this, PRM_SIZE_W, PRM_SIZE_H); }
s32 prm_get_swSave() const { return daObj::PrmAbstract(this, PRM_SWSAVE_W, PRM_SWSAVE_S); }
virtual BOOL CreateHeap();
virtual BOOL Create();
@@ -20,8 +31,17 @@ namespace daObjMsdanSub {
virtual BOOL Execute(Mtx**);
virtual BOOL Draw();
static const char M_arcname[];
static Mtx M_tmp_mtx;
public:
/* Place member variables here */
/* 0x2C8 */ request_of_phase_process_class mPhs;
/* 0x2D0 */ J3DModel *mModel;
/* 0x2D4 */ s32 m2D4;
/* 0x2D8 */ s32 mCurObjNo;
/* 0x2DC */ f32 m2DC;
/* 0x2E0 */ f32 m2E0;
/* 0x2E4 */ bool m2E4;
};
};
+153 -9
View File
@@ -7,50 +7,194 @@
#include "d/actor/d_a_obj_msdan_sub.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "d/res/res_msdan.h"
const char daObjMsdanSub::Act_c::M_arcname[] = "Msdan";
Mtx daObjMsdanSub::Act_c::M_tmp_mtx;
/* 00000078-0000012C .text CreateHeap__Q213daObjMsdanSub5Act_cFv */
BOOL daObjMsdanSub::Act_c::CreateHeap() {
/* Nonmatching */
J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(M_arcname, MSDAN_BDL_MSDAN);
JUT_ASSERT(93, model_data != NULL);
mModel = mDoExt_J3DModel__create(model_data, 0, 0x11020203);
return mModel != NULL;
}
/* 0000012C-00000304 .text Create__Q213daObjMsdanSub5Act_cFv */
BOOL daObjMsdanSub::Act_c::Create() {
/* Nonmatching */
fopAcM_SetMtx(this, mModel->getBaseTRMtx());
fopAcM_setCullSizeBox(this, -1000.0f, -1000.0f, -1000.0f, 1000.0f, 1000.0f, 1000.0f);
if (prm_get_size()) {
if (fopAcM_isSwitch(this, prm_get_swSave())) {
mCurObjNo = 31;
current.pos.y = (home.pos.y - 800.0f) + (prm_get_objNo() + 1) * 25.0f;
} else {
mCurObjNo = 0;
}
m2D4 = 0;
} else {
if (fopAcM_isSwitch(this, prm_get_swSave())) {
mCurObjNo = 31;
current.pos.y = (home.pos.y - 800.0f) + (prm_get_objNo() + 1) * 25.0f;
} else {
mCurObjNo = 16;
}
m2D4 = 16;
}
m2DC = home.pos.y;
m2E0 = 0.0f;
init_mtx();
mpBgW->Move();
m2E4 = false;
return TRUE;
}
/* 00000304-00000400 .text Mthd_Create__Q213daObjMsdanSub5Act_cFv */
cPhs_State daObjMsdanSub::Act_c::Mthd_Create() {
/* Nonmatching */
fopAcM_SetupActor(this, Act_c);
cPhs_State phase_state = dComIfG_resLoad(&mPhs, M_arcname);
if (phase_state == cPhs_COMPLEATE_e) {
phase_state = MoveBGCreate(M_arcname, MSDAN_DZB_MSDAN, dBgS_MoveBGProc_Trans, 0x9A0);
JUT_ASSERT(155, (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e));
}
return phase_state;
}
/* 00000400-00000408 .text Delete__Q213daObjMsdanSub5Act_cFv */
BOOL daObjMsdanSub::Act_c::Delete() {
/* Nonmatching */
return TRUE;
}
/* 00000408-00000454 .text Mthd_Delete__Q213daObjMsdanSub5Act_cFv */
BOOL daObjMsdanSub::Act_c::Mthd_Delete() {
/* Nonmatching */
BOOL move_bg_delete_val = MoveBGDelete();
dComIfG_resDeleteDemo(&mPhs, M_arcname);
return move_bg_delete_val;
}
/* 00000454-000004D4 .text set_mtx__Q213daObjMsdanSub5Act_cFv */
void daObjMsdanSub::Act_c::set_mtx() {
/* Nonmatching */
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(shape_angle);
mModel->setBaseTRMtx(mDoMtx_stack_c::get());
cMtx_copy(mDoMtx_stack_c::get(), M_tmp_mtx);
}
/* 000004D4-00000534 .text init_mtx__Q213daObjMsdanSub5Act_cFv */
void daObjMsdanSub::Act_c::init_mtx() {
/* Nonmatching */
scale *= 1.01f;
mModel->setBaseScale(scale);
set_mtx();
}
/* 00000534-00000BB4 .text Execute__Q213daObjMsdanSub5Act_cFPPA3_A4_f */
BOOL daObjMsdanSub::Act_c::Execute(Mtx**) {
BOOL daObjMsdanSub::Act_c::Execute(Mtx** pMtx) {
//https://decomp.me/scratch/OWEBm
/* Nonmatching */
if (prm_get_size()) {
if (fopAcM_isSwitch(this, prm_get_swSave())) {
if (m2E0 > 0.0f) {
m2E0 = 0.0f;
}
if (mCurObjNo < 31) {
m2E0 -= 10.0f;
m2DC += m2E0;
if (mCurObjNo == prm_get_objNo()) {
current.pos.y = m2DC;
if (m2DC <= home.pos.y - 800.0f + (mCurObjNo + 1) * 25.0f) {
current.pos.y = home.pos.y - 800.0f + (mCurObjNo + 1) * 25.0f;
mCurObjNo++;
if (!m2E4) {
if (m2DC <= (((home.pos.y * 25.0f) - 800.0f) + (mCurObjNo + 1) * 0.5f) && (mCurObjNo <= 20 || (mCurObjNo & 1) == 1)) {
dComIfGp_getVibration().StartShock(1, -0x21, cXyz(0.0f, 1.0f, 0.0f));
m2E4 = true;
}
}
}
fopAcM_seStartCurrent(this, JA_SE_OBJ_SW_STAIR_ON_1, 0);
m2E0 = 0.0f;
} else {
if (m2DC <= ((home.pos.y * 2.0f - 800.0f) + (mCurObjNo + 1) * 25.0f) * 0.5f) {
mCurObjNo++;
m2E0 = 0.0f;
m2DC = home.pos.y;
}
}
}
}
} else if (fopAcM_isSwitch(this, prm_get_swSave())) {
if (m2E0 > 0.0f) {
m2E0 = 0.0f;
}
if (mCurObjNo < 31) {
m2E0 -= 10.0f;
m2DC += m2E0;
if (mCurObjNo == prm_get_objNo()) {
current.pos.y = m2DC;
}
if (m2DC <= (home.pos.y - 800.0f) + (mCurObjNo + 1) * 25.0f) {
if (mCurObjNo == prm_get_objNo()) {
current.pos.y = (home.pos.y - 800.0f) + (mCurObjNo + 1) * 25.0f;
fopAcM_seStartCurrent(this, JA_SE_OBJ_SW_STAIR_ON_1, 0);
}
mCurObjNo++;
m2E0 = 0.0f;
m2DC = home.pos.y;
}
if (mCurObjNo == prm_get_objNo() && !m2E4) {
if (m2DC <= (((home.pos.y * 25.0f) - 800.0f) + (mCurObjNo + 1) * 0.5f) && (mCurObjNo <= 20 || (mCurObjNo & 1) == 1)) {
dComIfGp_getVibration().StartShock(1, -0x21, cXyz(0.0f, 1.0f, 0.0f));
m2E4 = true;
}
}
}
} else {
if (m2E0 < 0.0f) {
m2E0 = 0.0f;
}
if (mCurObjNo >= m2D4) {
m2E0 += 15.0f;
m2DC += m2E0;
if (mCurObjNo == prm_get_objNo()) {
current.pos.y = m2DC;
}
if (this->m2DC >= home.pos.y) {
if (mCurObjNo == prm_get_objNo()) {
current.pos.y = home.pos.y;
}
if (mCurObjNo > m2D4) {
if (mCurObjNo == prm_get_objNo()) {
fopAcM_seStartCurrent(this, JA_SE_OBJ_SW_STAIR_OFF_1, 0);
m2E4 = false;
}
mCurObjNo--;
m2DC = home.pos.y - 800.0f + (mCurObjNo + 1) * 25.0f;
} else {
m2DC = home.pos.y;
}
m2E0 = 0.0f;
}
}
}
set_mtx();
*pMtx = &M_tmp_mtx;
return TRUE;
}
/* 00000BB4-00000C54 .text Draw__Q213daObjMsdanSub5Act_cFv */
BOOL daObjMsdanSub::Act_c::Draw() {
/* Nonmatching */
g_env_light.settingTevStruct(TEV_TYPE_BG0, &current.pos, &tevStr);
g_env_light.setLightTevColorType(mModel, &tevStr);
dComIfGd_setListBG();
mDoExt_modelUpdateDL(mModel);
dComIfGd_setList();
return TRUE;
}
namespace daObjMsdanSub {