summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaide <34639600+Kelebek1@users.noreply.github.com>2025-08-06 03:47:01 +0100
committerGitHub <noreply@github.com>2025-08-05 22:47:01 -0400
commitefc93e2fa5cd2cd29149e43ca592352a623b9082 (patch)
treeafa0167fc0c184a9028d8415ced7515cbaf871a0 /src
parentc1bd4bdd9e17bc13ff52e9b752f1abe6cda357a5 (diff)
d_a_obj_ohatch (#834)
* d_a_obj_ohatch * PR
Diffstat (limited to 'src')
-rw-r--r--src/d/actor/d_a_obj_ohatch.cpp277
1 files changed, 262 insertions, 15 deletions
diff --git a/src/d/actor/d_a_obj_ohatch.cpp b/src/d/actor/d_a_obj_ohatch.cpp
index 39eb3726..89c2dd17 100644
--- a/src/d/actor/d_a_obj_ohatch.cpp
+++ b/src/d/actor/d_a_obj_ohatch.cpp
@@ -4,72 +4,319 @@
*/
#include "d/actor/d_a_obj_ohatch.h"
+#include "d/res/res_ohatch.h"
#include "d/d_procname.h"
+#include "d/d_bg_w.h"
#include "d/d_priority.h"
+#include "d/d_com_inf_game.h"
+#include "f_op/f_op_actor_mng.h"
+#include "m_Do/m_Do_hostIO.h"
+
+namespace {
+static const char l_arcname[] = "Ohatch";
+}
+
+#if VERSION == VERSION_DEMO
+class daObjOhatch_HIO_c : public JORReflexible {
+public:
+ daObjOhatch_HIO_c();
+ virtual ~daObjOhatch_HIO_c() {}
+
+ void genMessage(JORMContext*);
+
+public:
+ /* 0x04 */ s8 mNo;
+ /* 0x08 */ f32 m08;
+ /* 0x0C */ f32 m0C;
+ /* 0x10 */ f32 m10;
+ /* 0x14 */ f32 m14;
+ /* 0x18 */ f32 m18;
+ /* 0x1C */ f32 m1C;
+ /* 0x20 */ f32 m20;
+ /* 0x24 */ f32 m24;
+ /* 0x28 */ f32 m28;
+ /* 0x2C */ f32 m2C;
+ /* 0x30 */ f32 m30;
+ /* 0x34 */ f32 m34;
+ /* 0x38 */ u8 m38;
+}; // size = 0x40
+
+static daObjOhatch_HIO_c l_HIO;
+
+daObjOhatch_HIO_c::daObjOhatch_HIO_c() {
+ mNo = -1;
+ m08 = -4096.0f;
+ m0C = -16384.0f;
+ m10 = 0.0f;
+ m14 = -25.0f;
+ m18 = 190.0f;
+ m1C = 1.0f;
+ m20 = 8192.0f;
+ m24 = 131072.0f;
+ m28 = 6.0f;
+ m2C = -64.0f;
+ m30 = 1024.0f;
+ m34 = 8192.0f;
+ m38 = 0;
+}
+#else
+namespace L_HIO {
+static const f32 m08 = -4096.0f;
+static const f32 m0C = -16384.0f;
+static const f32 m10 = 0.0f;
+static const f32 m14 = -25.0f;
+static const f32 m18 = 190.0f;
+static const f32 m1C = 1.0f;
+static const f32 m20 = 8192.0f;
+static const f32 m24 = 131072.0f;
+static const f32 m28 = 6.0f;
+static const f32 m2C = -64.0f;
+static const f32 m30 = 1024.0f;
+static const f32 m34 = 8192.0f;
+static const u8 m38 = 0;
+} // namespace L_HIO
+#endif
/* 00000078-0000018C .text set_mtx__13daObjOhatch_cFv */
void daObjOhatch_c::set_mtx() {
- /* Nonmatching */
+ s16 tmp = m2D8 + (s32)(m2F0 * cM_ssin(m2F2));
+
+ mDoMtx_stack_c::transS(current.pos.x, current.pos.y + m2E8, current.pos.z);
+ mDoMtx_stack_c::XYZrotM(shape_angle);
+ mDoMtx_stack_c::transM(0.0f, -HIO(m14), -HIO(m18));
+ mDoMtx_stack_c::XrotM(tmp);
+ mDoMtx_stack_c::transM(0.0f, HIO(m14), HIO(m18));
+ mModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
/* 0000018C-0000027C .text init_mtx__13daObjOhatch_cFv */
void daObjOhatch_c::init_mtx() {
- /* Nonmatching */
+ mModel->setBaseScale(scale);
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::XYZrotM(shape_angle);
+ mDoMtx_stack_c::push();
+ mDoMtx_stack_c::transM(0.0f, 25.0f, -190.0f);
+ mDoMtx_stack_c::XrotM(m2D8);
+ mDoMtx_stack_c::transM(0.0f, -25.0f, 190.0f);
+ mModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ mDoMtx_stack_c::pop();
+ mDoMtx_stack_c::scaleM(scale);
+ cMtx_copy(mDoMtx_stack_c::get(), m2A8);
}
/* 0000027C-000002A0 .text solidHeapCB__13daObjOhatch_cFP10fopAc_ac_c */
-void daObjOhatch_c::solidHeapCB(fopAc_ac_c*) {
- /* Nonmatching */
+BOOL daObjOhatch_c::solidHeapCB(fopAc_ac_c* a_this) {
+ return ((daObjOhatch_c*)a_this)->create_heap();
}
/* 000002A0-000003CC .text create_heap__13daObjOhatch_cFv */
-void daObjOhatch_c::create_heap() {
- /* Nonmatching */
+bool daObjOhatch_c::create_heap() {
+ bool uVar5 = true;
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcname, OHATCH_BDL_OHATCH);
+ if (modelData == NULL) {
+ JUT_ASSERT(DEMO_SELECT(308, 311), FALSE);
+ uVar5 = false;
+ } else {
+ mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
+ mBgW1 = dBgW_NewSet((cBgD_t*)dComIfG_getObjectRes(l_arcname, OHATCH_DZB_OH_CLS), cBgW::MOVE_BG_e, &m2A8);
+ mBgW2 = dBgW_NewSet((cBgD_t*)dComIfG_getObjectRes(l_arcname, OHATCH_DZB_OH_OPN), cBgW::MOVE_BG_e, &m2A8);
+ if (mModel == NULL || mBgW1 == NULL || mBgW2 == NULL) {
+ uVar5 = false;
+ }
+ }
+ return uVar5;
}
/* 000003CC-00000548 .text _create__13daObjOhatch_cFv */
cPhs_State daObjOhatch_c::_create() {
- /* Nonmatching */
+ fopAcM_SetupActor(this, daObjOhatch_c);
+ cPhs_State ret = dComIfG_resLoad(&mPhase, l_arcname);
+ if (ret == cPhs_COMPLEATE_e) {
+ if (fopAcM_entrySolidHeap(this, solidHeapCB, 0xB90)) {
+ fopAcM_SetMtx(this, mModel->getBaseTRMtx());
+ m29C = param_get_swSave();
+ if (m29C != 0xff && fopAcM_isSwitch(this, m29C) == TRUE) {
+ m2D8 = -0x4000;
+ mActionFunc = &daObjOhatch_c::open_wait_act_proc;
+ if (dComIfG_Bgsp()->Regist(mBgW2, this)) {
+ ret = cPhs_ERROR_e;
+ }
+ } else {
+ mActionFunc = &daObjOhatch_c::close_wait_act_proc;
+ if (dComIfG_Bgsp()->Regist(mBgW1, this)) {
+ ret = cPhs_ERROR_e;
+ }
+ }
+ init_mtx();
+ } else {
+ ret = cPhs_ERROR_e;
+ }
+ }
+
+#if VERSION == VERSION_DEMO
+ if (l_HIO.mNo < 0) {
+ l_HIO.mNo = mDoHIO_createChild("フィギュア屋の入口", &l_HIO);
+ }
+#endif
+ return ret;
}
/* 00000548-00000628 .text _delete__13daObjOhatch_cFv */
bool daObjOhatch_c::_delete() {
- /* Nonmatching */
+ dComIfG_resDelete(&mPhase, l_arcname);
+#if VERSION > VERSION_DEMO
+ if (heap != NULL)
+#endif
+ {
+ if (mBgW1 != NULL) {
+ if (mBgW1->ChkUsed()) {
+ dComIfG_Bgsp()->Release(mBgW1);
+ }
+#if VERSION > VERSION_DEMO
+ mBgW1 = NULL;
+#endif
+ }
+
+ if (mBgW2 != NULL) {
+ if (mBgW2->ChkUsed()) {
+ dComIfG_Bgsp()->Release(mBgW2);
+ }
+#if VERSION > VERSION_DEMO
+ mBgW2 = NULL;
+#endif
+ }
+ }
+
+#if VERSION == VERSION_DEMO
+ if (l_HIO.mNo >= 0) {
+ mDoHIO_deleteChild(l_HIO.mNo);
+ l_HIO.mNo = -1;
+ }
+#endif
+ return true;
}
/* 00000628-00000810 .text close_wait_act_proc__13daObjOhatch_cFv */
void daObjOhatch_c::close_wait_act_proc() {
- /* Nonmatching */
+ if (m29C != 0xff && fopAcM_isSwitch(this, m29C) == TRUE) {
+ if (dComIfGp_evmng_existence("FIGURE_HATCH_OPEN")) {
+ s32 staffIdx = dComIfGp_evmng_getMyStaffId("Ohatch");
+ if (staffIdx != -1) {
+ if (strcmp(dComIfGp_getPEvtManager()->getMyNowCutName(staffIdx), "OPEN") == 0) {
+ fopAcM_seStartCurrent(this, JA_SE_OBJ_FIG_HATCH_OPEN, 0);
+ if (mBgW1 != NULL && mBgW1->ChkUsed()) {
+ dComIfG_Bgsp()->Release(mBgW1);
+ }
+ if (mBgW2 != NULL && !mBgW2->ChkUsed()) {
+ dComIfG_Bgsp()->Regist(mBgW2, this);
+ }
+
+ dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f));
+ mActionFunc = &daObjOhatch_c::tremor_act_proc;
+ }
+ }
+ }
+ } else if (HIO(m38) == 1) {
+ fopAcM_seStartCurrent(this, JA_SE_OBJ_FIG_HATCH_OPEN, 0);
+ if (mBgW1 != NULL && mBgW1->ChkUsed()) {
+ dComIfG_Bgsp()->Release(mBgW1);
+ }
+ if (mBgW2 != NULL && !mBgW2->ChkUsed()) {
+ dComIfG_Bgsp()->Regist(mBgW2, this);
+ }
+ dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f));
+ mActionFunc = &daObjOhatch_c::tremor_act_proc;
+ }
}
/* 00000810-000008A4 .text tremor_act_proc__13daObjOhatch_cFv */
void daObjOhatch_c::tremor_act_proc() {
- /* Nonmatching */
+ m2EC += (s32)HIO(m20);
+ if (m2EC > (s32)HIO(m24)) {
+ m2E8 = 0.0f;
+ mActionFunc = &daObjOhatch_c::open_act_proc;
+ } else {
+ f32 fVar1 = cM_ssin(m2EC);
+ if (fVar1 < 0.0f) {
+ fVar1 *= -1.0f;
+ }
+ m2E8 = fVar1 * HIO(m28);
+ }
}
/* 000008A4-00000A00 .text open_act_proc__13daObjOhatch_cFv */
void daObjOhatch_c::open_act_proc() {
- /* Nonmatching */
+#if VERSION == VERSION_DEMO
+ f32 uVar3 = (cM_ssin(m2D8 / HIO(m0C) * 32768.0f) + HIO(m1C)) / (HIO(m1C) + 1.0f);
+ s32 uVar2 = HIO(m08) * uVar3;
+#else
+ f32 sin = m2D8 / HIO(m0C) * 32768.0f;
+ s32 uVar2 = (cM_ssin(sin) + HIO(m1C)) / (HIO(m1C) + 1.0f) * HIO(m08);
+#endif
+ m2D8 += uVar2;
+
+ if (m2D8 <= (s16)HIO(m0C)) {
+ m2D8 = (s16)HIO(m0C);
+ mDoAud_seStart(JA_SE_READ_RIDDLE_1);
+ m2F0 = (s16)HIO(m30);
+ dComIfGp_getVibration().StartShock(6, 1, cXyz(0.0f, 1.0f, 0.0f));
+ mActionFunc = &daObjOhatch_c::vibrate_act_proc;
+ }
}
/* 00000A00-00000A4C .text vibrate_act_proc__13daObjOhatch_cFv */
void daObjOhatch_c::vibrate_act_proc() {
- /* Nonmatching */
+ m2F0 += (s32)HIO(m2C);
+ if (m2F0 < 0) {
+ mActionFunc = &daObjOhatch_c::open_wait_act_proc;
+ } else {
+ m2F2 += (s32)HIO(m34);
+ }
}
/* 00000A4C-00000A50 .text open_wait_act_proc__13daObjOhatch_cFv */
void daObjOhatch_c::open_wait_act_proc() {
- /* Nonmatching */
+#if VERSION == VERSION_DEMO
+ if ((m29C == 0xff || fopAcM_isSwitch(this, m29C) != TRUE) && HIO(m38) == 0) {
+ m2D8 = 0;
+ m2E8 = 0.0f;
+ m2EC = 0;
+ m2F2 = 0;
+ m2F0 = 0;
+ if (mBgW2 != NULL && mBgW2->ChkUsed()) {
+ dComIfG_Bgsp()->Release(mBgW2);
+ }
+
+ if (mBgW1 != NULL && !mBgW1->ChkUsed()) {
+ dComIfG_Bgsp()->Regist(mBgW1, this);
+ }
+
+ mActionFunc = &daObjOhatch_c::close_wait_act_proc;
+ }
+#endif
}
/* 00000A50-00000B04 .text _execute__13daObjOhatch_cFv */
bool daObjOhatch_c::_execute() {
- /* Nonmatching */
+ if (mBgW1 != NULL && mBgW1->ChkUsed()) {
+ mBgW1->Move();
+ }
+
+ if (mBgW2 != NULL && mBgW2->ChkUsed()) {
+ mBgW2->Move();
+ }
+
+ set_mtx();
+ (this->*mActionFunc)();
+ return true;
}
/* 00000B04-00000B64 .text _draw__13daObjOhatch_cFv */
bool daObjOhatch_c::_draw() {
- /* Nonmatching */
+ g_env_light.settingTevStruct(TEV_TYPE_BG0, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType(mModel, &tevStr);
+ mDoExt_modelUpdateDL(mModel);
+ return true;
}
/* 00000B64-00000B84 .text daObjOhatch_Create__FP10fopAc_ac_c */