summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLagoLunatic <LagoLunatic@users.noreply.github.com>2026-07-24 11:30:45 -0400
committerLagoLunatic <LagoLunatic@users.noreply.github.com>2026-07-24 11:30:45 -0400
commit26d9efe3b63ac38960f8b0c5afe461c4b96b0eb5 (patch)
tree17f955bd88dc9dde838385680ade851a94412aa3 /src
parent7efaae45c77dd3ce555e73970ae9182ec2dd4e76 (diff)
Unindent some namespaces
Diffstat (limited to 'src')
-rw-r--r--src/d/actor/d_a_bomb2.cpp2152
-rw-r--r--src/d/actor/d_a_obj_akabe.cpp306
-rw-r--r--src/d/actor/d_a_obj_movebox.cpp3514
-rw-r--r--src/d/actor/d_a_obj_paper.cpp534
-rw-r--r--src/d/actor/d_a_tag_waterlevel.cpp230
5 files changed, 3372 insertions, 3364 deletions
diff --git a/src/d/actor/d_a_bomb2.cpp b/src/d/actor/d_a_bomb2.cpp
index 1b6001b1..cafc3b50 100644
--- a/src/d/actor/d_a_bomb2.cpp
+++ b/src/d/actor/d_a_bomb2.cpp
@@ -16,996 +16,996 @@
#include "m_Do/m_Do_mtx.h"
namespace daBomb2 {
- namespace {
- struct Attr_c {
- /* 0x00 */ const char* resName;
- /* 0x04 */ u32 heapSize;
- /* 0x08 */ s16 field_0x8;
- /* 0x0A */ s16 field_0xA; // Appears to be the bomb timer cap
- /* 0x0C */ f32 gravity;
- /* 0x10 */ f32 maxFallSpeed;
- /* 0x14 */ f32 field_0x14;
- /* 0x18 */ f32 field_0x18;
- /* 0x1C */ f32 field_0x1C;
- /* 0x20 */ f32 field_0x20;
- /* 0x24 */ f32 field_0x24;
- /* 0x28 */ f32 field_0x28;
- /* 0x2C */ f32 field_0x2C;
- /* 0x30 */ f32 field_0x30;
- /* 0x34 */ f32 field_0x34;
- /* 0x38 */ f32 field_0x38;
- /* 0x3C */ f32 field_0x3C;
- /* 0x40 */ f32 field_0x40;
- /* 0x44 */ f32 field_0x44;
- /* 0x48 */ f32 field_0x48;
- /* 0x4C */ f32 field_0x4C;
- /* 0x50 */ f32 field_0x50;
- /* 0x54 */ f32 field_0x54;
- /* 0x58 */ f32 field_0x58;
- /* 0x5C */ f32 field_0x5C;
- /* 0x60 */ f32 field_0x60;
- /* 0x64 */ f32 field_0x64;
- /* 0x68 */ f32 field_0x68;
- };
-
- const Attr_c L_attr = {
- /* resName */ "VbakH",
- /* heapSize */ 0x920,
- /* field_0x8 */ 0x96,
- /* field_0xA */ 0x1E,
- /* gravity */ -2.9f,
- /* maxFallSpeed */ -100.0f,
- /* field_0x14 */ -0.6f,
- /* field_0x18 */ 19.5f,
- /* field_0x1C */ 13.0f,
- /* field_0x20 */ 0.1f,
- /* field_0x24 */ 0.5f,
- /* field_0x28 */ 20.0f,
- /* field_0x2C */ 25.0f,
- /* field_0x30 */ 0.002f,
- /* field_0x34 */ 0.0005f,
- /* field_0x38 */ 140.0f,
- /* field_0x3C */ 100.0f,
- /* field_0x40 */ 180.0f,
- /* field_0x44 */ 50.0f,
- /* field_0x48 */ 2.0f,
- /* field_0x4C */ 0.3f,
- /* field_0x50 */ 0.03f,
- /* field_0x54 */ 0.1f,
- /* field_0x58 */ 0.4f,
- /* field_0x5C */ 0.5f,
- /* field_0x60 */ -0.005f,
- /* field_0x64 */ 1.5f,
- /* field_0x68 */ 0.6f,
- };
-
- inline static const Attr_c& attr() { return L_attr; }
- }
-
- void Env_c::set(const cXyz& pos) {
- mPntLight.mPos = pos;
- mPntLight.mPos.y += 100.0f;
- mPntLight.mColor.r = 200;
- mPntLight.mColor.g = 200;
- mPntLight.mColor.b = 160;
- mPntLight.mPower = 600.0f;
- mPntLight.mFluctuation = 100.0f;
- dKy_efplight_set(&mPntLight);
-
- mPntWind.mPos = pos;
- mPntWind.mDir.x = 0.0f;
- mPntWind.mDir.y = 1.0f;
- mPntWind.mDir.z = 0.0f;
- mPntWind.mRadius = 500.0f;
- mPntWind.field_0x20 = 0.0f;
- mPntWind.mStrength = 0.5f;
- dKyw_pntwind_set(&mPntWind);
-
- field_0x4C = 0;
- field_0x50 = 0.0f;
- }
-
- void Env_c::clean() {
- dKy_actor_addcol_set(0, 0, 0, 0.0f);
- dKy_efplight_cut(&mPntLight);
- dKyw_pntwind_cut(&mPntWind);
- }
-
- bool Env_c::is_end() const {
- return field_0x4C > 1;
- }
-
- /* 800DD4B0-800DD670 .text proc__Q27daBomb25Env_cFRC4cXyz */
- void Env_c::proc(const cXyz& param_1) {
- camera_class* camera = dComIfGp_getCamera(0);
- f32 temp2 = 0.0f;
-
- mPntLight.mPower = field_0x50 * 1500.0f;
- mPntWind.mStrength = field_0x50;
- f32 temp = param_1.abs(camera->mLookat.mEye);
-
- if(temp < 1500.0f) {
- temp2 = 1.0f - (temp * (1.0f / 1500.0f));
- }
- temp2 = field_0x50 * temp2;
- dKy_actor_addcol_amb_set(200, 180, 100, temp2);
- dKy_bg_addcol_amb_set(180, 160, 60, temp2);
- dKy_bg_addcol_dif_set(255, 225, 120, temp2);
+namespace {
+ struct Attr_c {
+ /* 0x00 */ const char* resName;
+ /* 0x04 */ u32 heapSize;
+ /* 0x08 */ s16 field_0x8;
+ /* 0x0A */ s16 field_0xA; // Appears to be the bomb timer cap
+ /* 0x0C */ f32 gravity;
+ /* 0x10 */ f32 maxFallSpeed;
+ /* 0x14 */ f32 field_0x14;
+ /* 0x18 */ f32 field_0x18;
+ /* 0x1C */ f32 field_0x1C;
+ /* 0x20 */ f32 field_0x20;
+ /* 0x24 */ f32 field_0x24;
+ /* 0x28 */ f32 field_0x28;
+ /* 0x2C */ f32 field_0x2C;
+ /* 0x30 */ f32 field_0x30;
+ /* 0x34 */ f32 field_0x34;
+ /* 0x38 */ f32 field_0x38;
+ /* 0x3C */ f32 field_0x3C;
+ /* 0x40 */ f32 field_0x40;
+ /* 0x44 */ f32 field_0x44;
+ /* 0x48 */ f32 field_0x48;
+ /* 0x4C */ f32 field_0x4C;
+ /* 0x50 */ f32 field_0x50;
+ /* 0x54 */ f32 field_0x54;
+ /* 0x58 */ f32 field_0x58;
+ /* 0x5C */ f32 field_0x5C;
+ /* 0x60 */ f32 field_0x60;
+ /* 0x64 */ f32 field_0x64;
+ /* 0x68 */ f32 field_0x68;
+ };
- switch(field_0x4C) {
- case 0:
- cLib_addCalc(&field_0x50, 1.0f, 0.5f, 0.4f, 0.01f);
- if(field_0x50 >= 0.99f) {
- field_0x4C += 1;
- }
+ const Attr_c L_attr = {
+ /* resName */ "VbakH",
+ /* heapSize */ 0x920,
+ /* field_0x8 */ 0x96,
+ /* field_0xA */ 0x1E,
+ /* gravity */ -2.9f,
+ /* maxFallSpeed */ -100.0f,
+ /* field_0x14 */ -0.6f,
+ /* field_0x18 */ 19.5f,
+ /* field_0x1C */ 13.0f,
+ /* field_0x20 */ 0.1f,
+ /* field_0x24 */ 0.5f,
+ /* field_0x28 */ 20.0f,
+ /* field_0x2C */ 25.0f,
+ /* field_0x30 */ 0.002f,
+ /* field_0x34 */ 0.0005f,
+ /* field_0x38 */ 140.0f,
+ /* field_0x3C */ 100.0f,
+ /* field_0x40 */ 180.0f,
+ /* field_0x44 */ 50.0f,
+ /* field_0x48 */ 2.0f,
+ /* field_0x4C */ 0.3f,
+ /* field_0x50 */ 0.03f,
+ /* field_0x54 */ 0.1f,
+ /* field_0x58 */ 0.4f,
+ /* field_0x5C */ 0.5f,
+ /* field_0x60 */ -0.005f,
+ /* field_0x64 */ 1.5f,
+ /* field_0x68 */ 0.6f,
+ };
- break;
- case 1:
- cLib_addCalc(&field_0x50, 0.0f, 0.05f, 0.04f, 0.001f);
- if(field_0x50 <= 0.01f) {
- field_0x4C += 1;
- }
+ inline static const Attr_c& attr() { return L_attr; }
+}
- break;
- }
- }
+void Env_c::set(const cXyz& pos) {
+ mPntLight.mPos = pos;
+ mPntLight.mPos.y += 100.0f;
+ mPntLight.mColor.r = 200;
+ mPntLight.mColor.g = 200;
+ mPntLight.mColor.b = 160;
+ mPntLight.mPower = 600.0f;
+ mPntLight.mFluctuation = 100.0f;
+ dKy_efplight_set(&mPntLight);
+
+ mPntWind.mPos = pos;
+ mPntWind.mDir.x = 0.0f;
+ mPntWind.mDir.y = 1.0f;
+ mPntWind.mDir.z = 0.0f;
+ mPntWind.mRadius = 500.0f;
+ mPntWind.field_0x20 = 0.0f;
+ mPntWind.mStrength = 0.5f;
+ dKyw_pntwind_set(&mPntWind);
+
+ field_0x4C = 0;
+ field_0x50 = 0.0f;
+}
- void FuseSmokeCB_c::setOldPosP(const cXyz* param_1, const cXyz* param_2) {
- field_0x0C = param_1;
- field_0x10 = param_2;
- field_0x04 = 0x14;
- }
+void Env_c::clean() {
+ dKy_actor_addcol_set(0, 0, 0, 0.0f);
+ dKy_efplight_cut(&mPntLight);
+ dKyw_pntwind_cut(&mPntWind);
+}
- void FuseSmokeCB_c::deleteCallBack() {
- if(mpEmitter) {
- mpEmitter->setEmitterCallBackPtr(NULL);
- mpEmitter->becomeInvalidEmitter();
- }
- mpEmitter = NULL;
- }
+bool Env_c::is_end() const {
+ return field_0x4C > 1;
+}
+
+/* 800DD4B0-800DD670 .text proc__Q27daBomb25Env_cFRC4cXyz */
+void Env_c::proc(const cXyz& param_1) {
+ camera_class* camera = dComIfGp_getCamera(0);
+ f32 temp2 = 0.0f;
- /* 800DD6BC-800DD6C0 .text execute__Q27daBomb213FuseSmokeCB_cFP14JPABaseEmitter */
- void FuseSmokeCB_c::execute(JPABaseEmitter* emitter) {
+ mPntLight.mPower = field_0x50 * 1500.0f;
+ mPntWind.mStrength = field_0x50;
+ f32 temp = param_1.abs(camera->mLookat.mEye);
+
+ if(temp < 1500.0f) {
+ temp2 = 1.0f - (temp * (1.0f / 1500.0f));
}
+ temp2 = field_0x50 * temp2;
- /* 800DD6C0-800DDAE8 .text executeAfter__Q27daBomb213FuseSmokeCB_cFP14JPABaseEmitter */
- void FuseSmokeCB_c::executeAfter(JPABaseEmitter* emitter) {
- JGeometry::TVec3<f32> vec1;
- vec1.set(*field_0x0C);
- JGeometry::TVec3<f32> vec2;
- vec2.set(*mpPos);
- f32 f15 = attr().field_0x24;
- emitter->setGlobalTranslation(vec2);
-
- s16 r29 = 10.0f + (0.5f * (20.0f - mpPos->abs(*field_0x0C)));
- if (r29 < 0xA) {
- r29 = 0xA;
+ dKy_actor_addcol_amb_set(200, 180, 100, temp2);
+ dKy_bg_addcol_amb_set(180, 160, 60, temp2);
+ dKy_bg_addcol_dif_set(255, 225, 120, temp2);
+
+ switch(field_0x4C) {
+ case 0:
+ cLib_addCalc(&field_0x50, 1.0f, 0.5f, 0.4f, 0.01f);
+ if(field_0x50 >= 0.99f) {
+ field_0x4C += 1;
}
- emitter->setLifeTime(r29);
-
- JGeometry::TVec3<f32> vec3;
- vec3.z = f15 * (vec2.x - vec1.x);
- vec3.y = f15 * (vec2.y - vec1.y);
- vec3.x = f15 * (vec2.z - vec1.z);
-
- JGeometry::TVec3<f32> vec4;
- vec4.x = f15 * (vec1.x - field_0x10->x);
- vec4.y = f15 * (vec1.y - field_0x10->y);
- vec4.z = f15 * (vec1.z - field_0x10->z);
-
- f32 f0 = mpPos->abs(*field_0x0C) * attr().field_0x20;
- if (f0 > 1.0f) {
- f32 f20 = 1.0f / f0;
- s16 r28 = f20 * (field_0x04 - r29);
- s16 lifetime = r29 + r28;
- for (f32 f19 = f20; f19 < 1.0f; f19 += f20, lifetime += r28) {
- JGeometry::TVec3<f32> vec5;
- vec5.cubic<f32>(vec1, vec2, vec3, vec4, f19);
-
- emitter->setLifeTime(lifetime);
- JPABaseParticle* particle = emitter->createParticle();
- if (particle) {
- particle->setOffsetPosition(vec5);
- }
- }
+
+ break;
+ case 1:
+ cLib_addCalc(&field_0x50, 0.0f, 0.05f, 0.04f, 0.001f);
+ if(field_0x50 <= 0.01f) {
+ field_0x4C += 1;
}
-
- field_0x04 = r29;
- }
- /* 800DDAE8-800DDAEC .text draw__Q27daBomb213FuseSmokeCB_cFP14JPABaseEmitter */
- void FuseSmokeCB_c::draw(JPABaseEmitter*) {
+ break;
}
+}
- void FuseSmokeCB_c::setup(JPABaseEmitter* param_1, const cXyz* param_2, const csXyz*, signed char) {
- mpPos = param_2;
- mpEmitter = param_1;
+void FuseSmokeCB_c::setOldPosP(const cXyz* param_1, const cXyz* param_2) {
+ field_0x0C = param_1;
+ field_0x10 = param_2;
+ field_0x04 = 0x14;
+}
+
+void FuseSmokeCB_c::deleteCallBack() {
+ if(mpEmitter) {
+ mpEmitter->setEmitterCallBackPtr(NULL);
+ mpEmitter->becomeInvalidEmitter();
}
+ mpEmitter = NULL;
+}
+
+/* 800DD6BC-800DD6C0 .text execute__Q27daBomb213FuseSmokeCB_cFP14JPABaseEmitter */
+void FuseSmokeCB_c::execute(JPABaseEmitter* emitter) {
+}
- void FuseSparksCB_c::deleteCallBack() {
- if(mpEmitter) {
- mpEmitter->setEmitterCallBackPtr(NULL);
- mpEmitter->becomeInvalidEmitter();
+/* 800DD6C0-800DDAE8 .text executeAfter__Q27daBomb213FuseSmokeCB_cFP14JPABaseEmitter */
+void FuseSmokeCB_c::executeAfter(JPABaseEmitter* emitter) {
+ JGeometry::TVec3<f32> vec1;
+ vec1.set(*field_0x0C);
+ JGeometry::TVec3<f32> vec2;
+ vec2.set(*mpPos);
+ f32 f15 = attr().field_0x24;
+ emitter->setGlobalTranslation(vec2);
+
+ s16 r29 = 10.0f + (0.5f * (20.0f - mpPos->abs(*field_0x0C)));
+ if (r29 < 0xA) {
+ r29 = 0xA;
+ }
+ emitter->setLifeTime(r29);
+
+ JGeometry::TVec3<f32> vec3;
+ vec3.z = f15 * (vec2.x - vec1.x);
+ vec3.y = f15 * (vec2.y - vec1.y);
+ vec3.x = f15 * (vec2.z - vec1.z);
+
+ JGeometry::TVec3<f32> vec4;
+ vec4.x = f15 * (vec1.x - field_0x10->x);
+ vec4.y = f15 * (vec1.y - field_0x10->y);
+ vec4.z = f15 * (vec1.z - field_0x10->z);
+
+ f32 f0 = mpPos->abs(*field_0x0C) * attr().field_0x20;
+ if (f0 > 1.0f) {
+ f32 f20 = 1.0f / f0;
+ s16 r28 = f20 * (field_0x04 - r29);
+ s16 lifetime = r29 + r28;
+ for (f32 f19 = f20; f19 < 1.0f; f19 += f20, lifetime += r28) {
+ JGeometry::TVec3<f32> vec5;
+ vec5.cubic<f32>(vec1, vec2, vec3, vec4, f19);
+
+ emitter->setLifeTime(lifetime);
+ JPABaseParticle* particle = emitter->createParticle();
+ if (particle) {
+ particle->setOffsetPosition(vec5);
+ }
}
- mpEmitter = NULL;
}
+
+ field_0x04 = r29;
+}
- void FuseSparksCB_c::execute(JPABaseEmitter* emitter) {
- JGeometry::TVec3<f32> pos(*mpPos);
- emitter->setGlobalTranslation(pos);
-
- JSUPtrLink* link = emitter->getParticleList()->getFirstLink();
- while(link != 0) {
- JSUPtrLink* next = link->getNext();
+/* 800DDAE8-800DDAEC .text draw__Q27daBomb213FuseSmokeCB_cFP14JPABaseEmitter */
+void FuseSmokeCB_c::draw(JPABaseEmitter*) {
+}
- JPABaseParticle* ptcl = (JPABaseParticle*)link->getObjectPtr();
- ptcl->setOffsetPosition(pos);
+void FuseSmokeCB_c::setup(JPABaseEmitter* param_1, const cXyz* param_2, const csXyz*, signed char) {
+ mpPos = param_2;
+ mpEmitter = param_1;
+}
- link = next;
- }
+void FuseSparksCB_c::deleteCallBack() {
+ if(mpEmitter) {
+ mpEmitter->setEmitterCallBackPtr(NULL);
+ mpEmitter->becomeInvalidEmitter();
}
+ mpEmitter = NULL;
+}
- void FuseSparksCB_c::draw(JPABaseEmitter*) {
- return;
- }
+void FuseSparksCB_c::execute(JPABaseEmitter* emitter) {
+ JGeometry::TVec3<f32> pos(*mpPos);
+ emitter->setGlobalTranslation(pos);
- void FuseSparksCB_c::setup(JPABaseEmitter* param_1, const cXyz* param_2, const csXyz*, signed char) {
- mpPos = param_2;
- mpEmitter = param_1;
- }
+ JSUPtrLink* link = emitter->getParticleList()->getFirstLink();
+ while(link != 0) {
+ JSUPtrLink* next = link->getNext();
+
+ JPABaseParticle* ptcl = (JPABaseParticle*)link->getObjectPtr();
+ ptcl->setOffsetPosition(pos);
- BOOL Act_c::solidHeapCB(fopAc_ac_c* i_this) {
- return static_cast<Act_c*>(i_this)->create_heap();
+ link = next;
}
+}
- /* 800DDBAC-800DDD90 .text create_heap_nut__Q27daBomb25Act_cFv */
- bool Act_c::create_heap_nut() {
- const char* resName = attr().resName;
+void FuseSparksCB_c::draw(JPABaseEmitter*) {
+ return;
+}
- J3DModelData* mdl_data = static_cast<J3DModelData*>(dComIfG_getObjectRes(attr().resName, dRes_INDEX_VBAKH_BDL_VBAKM_e));
- JUT_ASSERT(0x303, mdl_data != NULL);
- mpModel = mDoExt_J3DModel__create(mdl_data, 0x80000, 0x11000022);
+void FuseSparksCB_c::setup(JPABaseEmitter* param_1, const cXyz* param_2, const csXyz*, signed char) {
+ mpPos = param_2;
+ mpEmitter = param_1;
+}
- J3DAnmTransform* bck_data = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes(resName, dRes_INDEX_VBAKH_BCK_VBAKM_e));
- JUT_ASSERT(0x30D, bck_data != NULL);
- int temp = mBck0.init(mdl_data, bck_data, true, J3DFrameCtrl::EMode_NONE);
+BOOL Act_c::solidHeapCB(fopAc_ac_c* i_this) {
+ return static_cast<Act_c*>(i_this)->create_heap();
+}
- J3DAnmTevRegKey* brk_data = static_cast<J3DAnmTevRegKey*>(dComIfG_getObjectRes(resName, dRes_INDEX_VBAKH_BRK_VBAKM_e));
- JUT_ASSERT(0x314, brk_data != NULL);
- int temp3 = mBrk0.init(mdl_data, brk_data, true, J3DFrameCtrl::EMode_NONE);
+/* 800DDBAC-800DDD90 .text create_heap_nut__Q27daBomb25Act_cFv */
+bool Act_c::create_heap_nut() {
+ const char* resName = attr().resName;
- return mpModel && temp && temp3;
- }
+ J3DModelData* mdl_data = static_cast<J3DModelData*>(dComIfG_getObjectRes(attr().resName, dRes_INDEX_VBAKH_BDL_VBAKM_e));
+ JUT_ASSERT(0x303, mdl_data != NULL);
+ mpModel = mDoExt_J3DModel__create(mdl_data, 0x80000, 0x11000022);
- bool Act_c::create_heap() {
- return create_heap_nut();
- }
+ J3DAnmTransform* bck_data = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes(resName, dRes_INDEX_VBAKH_BCK_VBAKM_e));
+ JUT_ASSERT(0x30D, bck_data != NULL);
+ int temp = mBck0.init(mdl_data, bck_data, true, J3DFrameCtrl::EMode_NONE);
- void Act_c::crr_init() {
- mCir.SetWall(30.0f, 30.0f);
- mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this));
- mAcch.ClrWaterNone();
- mAcch.ClrRoofNone();
- mAcch.m_roof_crr_height = 50.0f;
- mAcch.OnLineCheck();
- field_0x51C = -G_CM3D_F_INF;
- field_0x520 = -G_CM3D_F_INF;
- field_0x524 = 0;
- mbWaterIn = 0;
- field_0x526 = 0;
- field_0x528 = -G_CM3D_F_INF;
- }
-
- dCcD_SrcSph Act_c::M_sph_src = {
- // dCcD_SrcGObjInf
- {
- /* Flags */ 0,
- /* SrcObjAt Type */ AT_TYPE_BOMB,
- /* SrcObjAt Atp */ 0x04,
- /* SrcObjAt SPrm */ cCcD_AtSPrm_GrpAll_e,
- /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_UNK400000 | AT_TYPE_LIGHT),
- /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsOther_e,
- /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsGrpAll_e,
- /* SrcGObjAt Se */ 0,
- /* SrcGObjAt HitMark */ 0,
- /* SrcGObjAt Spl */ dCcG_At_Spl_UNK1,
- /* SrcGObjAt Mtrl */ 0,
- /* SrcGObjAt SPrm */ 0,
- /* SrcGObjTg Se */ 0,
- /* SrcGObjTg HitMark */ 0,
- /* SrcGObjTg Spl */ 0,
- /* SrcGObjTg Mtrl */ 0,
- /* SrcGObjTg SPrm */ dCcG_TgSPrm_NoConHit_e,
- /* SrcGObjCo SPrm */ 0,
- },
- // cM3dGSphS
- {{
- /* Center */ {0.0f, 0.0f, 0.0f},
- /* Radius */ 30.0f,
- }},
- };
+ J3DAnmTevRegKey* brk_data = static_cast<J3DAnmTevRegKey*>(dComIfG_getObjectRes(resName, dRes_INDEX_VBAKH_BRK_VBAKM_e));
+ JUT_ASSERT(0x314, brk_data != NULL);
+ int temp3 = mBrk0.init(mdl_data, brk_data, true, J3DFrameCtrl::EMode_NONE);
- void Act_c::cc_init() {
- mStts.Init(200, 0xFF, this);
- mSph.Set(M_sph_src);
- mSph.SetStts(&mStts);
- }
+ return mpModel && temp && temp3;
+}
- void Act_c::start_explode_instant() {
- if(chk_water_in()) {
- eff_explode_water();
- }
- else {
- eff_explode();
- }
+bool Act_c::create_heap() {
+ return create_heap_nut();
+}
- mode_explode_init();
- }
+void Act_c::crr_init() {
+ mCir.SetWall(30.0f, 30.0f);
+ mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this));
+ mAcch.ClrWaterNone();
+ mAcch.ClrRoofNone();
+ mAcch.m_roof_crr_height = 50.0f;
+ mAcch.OnLineCheck();
+ field_0x51C = -G_CM3D_F_INF;
+ field_0x520 = -G_CM3D_F_INF;
+ field_0x524 = 0;
+ mbWaterIn = 0;
+ field_0x526 = 0;
+ field_0x528 = -G_CM3D_F_INF;
+}
- void Act_c::start_explode_interval() {
- eff_fuse_start();
- set_nut_exp_interval();
- mode_wait_init();
- }
+dCcD_SrcSph Act_c::M_sph_src = {
+ // dCcD_SrcGObjInf
+ {
+ /* Flags */ 0,
+ /* SrcObjAt Type */ AT_TYPE_BOMB,
+ /* SrcObjAt Atp */ 0x04,
+ /* SrcObjAt SPrm */ cCcD_AtSPrm_GrpAll_e,
+ /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_UNK400000 | AT_TYPE_LIGHT),
+ /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsOther_e,
+ /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsGrpAll_e,
+ /* SrcGObjAt Se */ 0,
+ /* SrcGObjAt HitMark */ 0,
+ /* SrcGObjAt Spl */ dCcG_At_Spl_UNK1,
+ /* SrcGObjAt Mtrl */ 0,
+ /* SrcGObjAt SPrm */ 0,
+ /* SrcGObjTg Se */ 0,
+ /* SrcGObjTg HitMark */ 0,
+ /* SrcGObjTg Spl */ 0,
+ /* SrcGObjTg Mtrl */ 0,
+ /* SrcGObjTg SPrm */ dCcG_TgSPrm_NoConHit_e,
+ /* SrcGObjCo SPrm */ 0,
+ },
+ // cM3dGSphS
+ {{
+ /* Center */ {0.0f, 0.0f, 0.0f},
+ /* Radius */ 30.0f,
+ }},
+};
- void Act_c::start_carry() {
- mode_carry_init();
+void Act_c::cc_init() {
+ mStts.Init(200, 0xFF, this);
+ mSph.Set(M_sph_src);
+ mSph.SetStts(&mStts);
+}
+
+void Act_c::start_explode_instant() {
+ if(chk_water_in()) {
+ eff_explode_water();
+ }
+ else {
+ eff_explode();
}
- /* 800DDF60-800DE024 .text start_proc_call__Q27daBomb25Act_cFv */
- void Act_c::start_proc_call() {
- typedef void(Act_c::*procFunc)();
- static procFunc start_proc[] = {
- &Act_c::start_explode_instant,
- &Act_c::start_explode_interval,
- &Act_c::start_carry
- };
+ mode_explode_init();
+}
- int proc = daObj::PrmAbstract(this, PRM_2_W, PRM_2_S);
- return (this->*start_proc[proc])();
- }
+void Act_c::start_explode_interval() {
+ eff_fuse_start();
+ set_nut_exp_interval();
+ mode_wait_init();
+}
- /* 800DE024-800DE14C .text create_init__Q27daBomb25Act_cFv */
- void Act_c::create_init() {
- crr_init();
- cc_init();
-
- fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
+void Act_c::start_carry() {
+ mode_carry_init();
+}
- fopAcM_setCullSizeBox(this, -36.0f, 0.0f, -36.0f, 36.0f, 66.0f, 36.0f);
- fopAcM_setCullSizeFar(this, 10.0f);
+/* 800DDF60-800DE024 .text start_proc_call__Q27daBomb25Act_cFv */
+void Act_c::start_proc_call() {
+ typedef void(Act_c::*procFunc)();
+ static procFunc start_proc[] = {
+ &Act_c::start_explode_instant,
+ &Act_c::start_explode_interval,
+ &Act_c::start_carry
+ };
- if(daObj::PrmAbstract(this, PRM_1_W, PRM_1_S)) {
- off_carry();
- }
- else {
- on_carry();
- }
+ int proc = daObj::PrmAbstract(this, PRM_2_W, PRM_2_S);
+ return (this->*start_proc[proc])();
+}
- gravity = attr().gravity;
- maxFallSpeed = attr().maxFallSpeed;
- bgCrrPos();
- speed.y = 0.0f;
- speedF = 0.0f;
- current.pos = home.pos;
- init_mtx();
+/* 800DE024-800DE14C .text create_init__Q27daBomb25Act_cFv */
+void Act_c::create_init() {
+ crr_init();
+ cc_init();
+
+ fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
- mBombTimer = attr().field_0x8;
- field_0x740 = 0;
- field_0x741 = 0;
- field_0x742 = 0;
- field_0x743 = 0;
- mWindVec = cXyz::Zero;
+ fopAcM_setCullSizeBox(this, -36.0f, 0.0f, -36.0f, 36.0f, 66.0f, 36.0f);
+ fopAcM_setCullSizeFar(this, 10.0f);
- start_proc_call();
+ if(daObj::PrmAbstract(this, PRM_1_W, PRM_1_S)) {
+ off_carry();
+ }
+ else {
+ on_carry();
}
- cPhs_State Act_c::_create() {
- fopAcM_ct(this, Act_c);
+ gravity = attr().gravity;
+ maxFallSpeed = attr().maxFallSpeed;
+ bgCrrPos();
+ speed.y = 0.0f;
+ speedF = 0.0f;
+ current.pos = home.pos;
+ init_mtx();
- cPhs_State status = dComIfG_resLoad(&mPhase, attr().resName);
+ mBombTimer = attr().field_0x8;
+ field_0x740 = 0;
+ field_0x741 = 0;
+ field_0x742 = 0;
+ field_0x743 = 0;
+ mWindVec = cXyz::Zero;
- if(status == cPhs_COMPLEATE_e) {
- if(fopAcM_entrySolidHeap(this, solidHeapCB, attr().heapSize)) {
- create_init();
- }
- else {
- status = cPhs_ERROR_e;
- }
- }
+ start_proc_call();
+}
+
+cPhs_State Act_c::_create() {
+ fopAcM_ct(this, Act_c);
- return status;
+ cPhs_State status = dComIfG_resLoad(&mPhase, attr().resName);
+
+ if(status == cPhs_COMPLEATE_e) {
+ if(fopAcM_entrySolidHeap(this, solidHeapCB, attr().heapSize)) {
+ create_init();
+ }
+ else {
+ status = cPhs_ERROR_e;
+ }
}
- Act_c::Act_c() {}
+ return status;
+}
- bool Act_c::_delete() {
- eff_fuse_end();
- mEnv.clean();
- dComIfG_resDelete(&mPhase, attr().resName);
+Act_c::Act_c() {}
- return true;
- }
+bool Act_c::_delete() {
+ eff_fuse_end();
+ mEnv.clean();
+ dComIfG_resDelete(&mPhase, attr().resName);
- void Act_c::set_mtx() {
- mpModel->setBaseScale(scale);
- mDoMtx_stack_c::transS(current.pos);
- mDoMtx_stack_c::concat(field_0x754);
- mDoMtx_stack_c::ZXYrotM(shape_angle);
- mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ return true;
+}
- eff_fuse_move();
- }
+void Act_c::set_mtx() {
+ mpModel->setBaseScale(scale);
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::concat(field_0x754);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
- /* 800DE574-800DE5B0 .text init_mtx__Q27daBomb25Act_cFv */
- void Act_c::init_mtx() {
- tensor_init();
- eff_fuse_init();
- set_mtx();
- }
+ eff_fuse_move();
+}
- /* 800DE5B0-800DE740 .text cc_set__Q27daBomb25Act_cFv */
- void Act_c::cc_set() {
- bool r3 = mState == 2;
- bool r4 = mState == 3;
- bool r31 = true;
- f32 radius = 200.0f;
- cXyz pos = current.pos;
- if (r3) {
- if (field_0x73C > 0) {
- field_0x73C--;
- }
- if (field_0x73C <= 0) {
- r31 = false;
- }
- } else if (r4) {
+/* 800DE574-800DE5B0 .text init_mtx__Q27daBomb25Act_cFv */
+void Act_c::init_mtx() {
+ tensor_init();
+ eff_fuse_init();
+ set_mtx();
+}
+
+/* 800DE5B0-800DE740 .text cc_set__Q27daBomb25Act_cFv */
+void Act_c::cc_set() {
+ bool r3 = mState == 2;
+ bool r4 = mState == 3;
+ bool r31 = true;
+ f32 radius = 200.0f;
+ cXyz pos = current.pos;
+ if (r3) {
+ if (field_0x73C > 0) {
+ field_0x73C--;
+ }
+ if (field_0x73C <= 0) {
r31 = false;
- } else if (r31) {
- radius = scale.x * 30.0f;
- static cXyz local_center(0.0f, 30.0f, 0.0f);
- mDoMtx_stack_c::copy(mpModel->getBaseTRMtx());
- mDoMtx_stack_c::scaleM(scale);
- mDoMtx_stack_c::multVec(&local_center, &pos);
- }
-
- if (r31) {
- mStts.Move();
- mSph.SetR(radius);
- mSph.SetC(pos);
- dComIfG_Ccsp()->Set(&mSph);
- dComIfG_Ccsp()->SetMass(&mSph, 3);
}
+ } else if (r4) {
+ r31 = false;
+ } else if (r31) {
+ radius = scale.x * 30.0f;
+ static cXyz local_center(0.0f, 30.0f, 0.0f);
+ mDoMtx_stack_c::copy(mpModel->getBaseTRMtx());
+ mDoMtx_stack_c::scaleM(scale);
+ mDoMtx_stack_c::multVec(&local_center, &pos);
+ }
+
+ if (r31) {
+ mStts.Move();
+ mSph.SetR(radius);
+ mSph.SetC(pos);
+ dComIfG_Ccsp()->Set(&mSph);
+ dComIfG_Ccsp()->SetMass(&mSph, 3);
}
+}
- void Act_c::camera_lockoff() const {
- camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0));
- camera->mCamera.ForceLockOff(fopAcM_GetID((Act_c*)this));
- }
-
- /* 800DE794-800DE854 .text posMoveF__Q27daBomb25Act_cFv */
- void Act_c::posMoveF() {
- if (mWindVec.abs2() > 0.01f) {
- cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd);
- cXyz* norm;
- f32 friction, no_grade_cos;
- if (triPla) {
- norm = triPla->GetNP();
- friction = 0.06f;
- no_grade_cos = cM_scos(0xA4F);
- } else {
- norm = NULL;
- friction = 0.0f;
- no_grade_cos = 0.0f;
- }
- daObj::posMoveF_grade(
- this, mStts.GetCCMoveP(), &mWindVec,
- attr().field_0x30, attr().field_0x34,
- norm, friction, no_grade_cos, NULL
- );
+void Act_c::camera_lockoff() const {
+ camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0));
+ camera->mCamera.ForceLockOff(fopAcM_GetID((Act_c*)this));
+}
+
+/* 800DE794-800DE854 .text posMoveF__Q27daBomb25Act_cFv */
+void Act_c::posMoveF() {
+ if (mWindVec.abs2() > 0.01f) {
+ cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd);
+ cXyz* norm;
+ f32 friction, no_grade_cos;
+ if (triPla) {
+ norm = triPla->GetNP();
+ friction = 0.06f;
+ no_grade_cos = cM_scos(0xA4F);
} else {
- fopAcM_posMoveF(this, mStts.GetCCMoveP());
- }
+ norm = NULL;
+ friction = 0.0f;
+ no_grade_cos = 0.0f;
+ }
+ daObj::posMoveF_grade(
+ this, mStts.GetCCMoveP(), &mWindVec,
+ attr().field_0x30, attr().field_0x34,
+ norm, friction, no_grade_cos, NULL
+ );
+ } else {
+ fopAcM_posMoveF(this, mStts.GetCCMoveP());
}
+}
- /* 800DE854-800DE8A8 .text bgCrrPos__Q27daBomb25Act_cFv */
- void Act_c::bgCrrPos() {
- mAcch.CrrPos(*dComIfG_Bgsp());
- bgCrrPos_lava();
- bgCrrPos_water();
- setRoomInfo();
- }
+/* 800DE854-800DE8A8 .text bgCrrPos__Q27daBomb25Act_cFv */
+void Act_c::bgCrrPos() {
+ mAcch.CrrPos(*dComIfG_Bgsp());
+ bgCrrPos_lava();
+ bgCrrPos_water();
+ setRoomInfo();
+}
- /* 800DE8A8-800DE914 .text bgCrrPos_lava__Q27daBomb25Act_cFv */
- void Act_c::bgCrrPos_lava() {
- cXyz temp(current.pos.x, old.pos.y + 1.0f, current.pos.z);
- mGndChk.SetPos(&temp);
+/* 800DE8A8-800DE914 .text bgCrrPos_lava__Q27daBomb25Act_cFv */
+void Act_c::bgCrrPos_lava() {
+ cXyz temp(current.pos.x, old.pos.y + 1.0f, current.pos.z);
+ mGndChk.SetPos(&temp);
- field_0x51C = dComIfG_Bgsp()->GroundCross(&mGndChk);
- }
+ field_0x51C = dComIfG_Bgsp()->GroundCross(&mGndChk);
+}
- /* 800DE914-800DEA0C .text bgCrrPos_water__Q27daBomb25Act_cFv */
- void Act_c::bgCrrPos_water() {
- f32 f31 = mAcch.m_wtr.GetHeight();
- bool r31 = daSea_ChkArea(current.pos.x, current.pos.z);
- f32 f1 = daSea_calcWave(current.pos.x, current.pos.z);
- bool r4 = mAcch.ChkWaterIn();
- bool r3 = r31 && current.pos.y < f1;
- bool r5 = false;
- if (r4 && r3) {
- if (f31 > f1) {
- r3 = 0;
- } else {
- r4 = 0;
- }
- }
- if (r4) {
- field_0x520 = f31;
- r5 = true;
- field_0x526 = 0;
- } else if (r3) {
- field_0x520 = f1;
- r5 = true;
- field_0x526 = 1;
+/* 800DE914-800DEA0C .text bgCrrPos_water__Q27daBomb25Act_cFv */
+void Act_c::bgCrrPos_water() {
+ f32 f31 = mAcch.m_wtr.GetHeight();
+ bool r31 = daSea_ChkArea(current.pos.x, current.pos.z);
+ f32 f1 = daSea_calcWave(current.pos.x, current.pos.z);
+ bool r4 = mAcch.ChkWaterIn();
+ bool r3 = r31 && current.pos.y < f1;
+ bool r5 = false;
+ if (r4 && r3) {
+ if (f31 > f1) {
+ r3 = 0;
} else {
- field_0x520 = -G_CM3D_F_INF;
- field_0x526 = 0;
+ r4 = 0;
}
- mbWaterIn = r5;
}
+ if (r4) {
+ field_0x520 = f31;
+ r5 = true;
+ field_0x526 = 0;
+ } else if (r3) {
+ field_0x520 = f1;
+ r5 = true;
+ field_0x526 = 1;
+ } else {
+ field_0x520 = -G_CM3D_F_INF;
+ field_0x526 = 0;
+ }
+ mbWaterIn = r5;
+}
+
+bool Act_c::chk_water_in() const {
+ return mbWaterIn;
+}
- bool Act_c::chk_water_in() const {
- return mbWaterIn;
+bool Act_c::chk_lava_in() const {
+ if(field_0x51C == -G_CM3D_F_INF) {
+ return false;
}
- bool Act_c::chk_lava_in() const {
- if(field_0x51C == -G_CM3D_F_INF) {
- return false;
- }
+ return current.pos.y < field_0x51C;
+}
- return current.pos.y < field_0x51C;
+void Act_c::setRoomInfo() {
+ s32 roomNo;
+ if(mAcch.GetGroundH() != -G_CM3D_F_INF) {
+ roomNo = dComIfG_Bgsp()->GetRoomId(mAcch.m_gnd);
+ tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mAcch.m_gnd);
+ }
+ else {
+ roomNo = dComIfGp_roomControl_getStayNo();
}
- void Act_c::setRoomInfo() {
- s32 roomNo;
- if(mAcch.GetGroundH() != -G_CM3D_F_INF) {
- roomNo = dComIfG_Bgsp()->GetRoomId(mAcch.m_gnd);
- tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mAcch.m_gnd);
- }
- else {
- roomNo = dComIfGp_roomControl_getStayNo();
- }
+ tevStr.mRoomNo = roomNo;
+ mStts.SetRoomId(roomNo);
+ current.roomNo = roomNo;
+}
- tevStr.mRoomNo = roomNo;
- mStts.SetRoomId(roomNo);
- current.roomNo = roomNo;
+void Act_c::bound(f32 param_1) {
+ if(mAcch.ChkWallHit()) {
+ speedF *= 0.8f;
+ current.angle.y = (mCir.GetWallAngleY() * 2) - (current.angle.y + 0x8000);
}
- void Act_c::bound(f32 param_1) {
- if(mAcch.ChkWallHit()) {
- speedF *= 0.8f;
- current.angle.y = (mCir.GetWallAngleY() * 2) - (current.angle.y + 0x8000);
+ if(mAcch.ChkGroundLanding()) {
+ daObj::make_land_effect(this, &mAcch.m_gnd, attr().field_0x68);
+ param_1 *= attr().field_0x14;
+ if(param_1 < attr().field_0x18) {
+ field_0x741 = 0;
}
-
- if(mAcch.ChkGroundLanding()) {
- daObj::make_land_effect(this, &mAcch.m_gnd, attr().field_0x68);
- param_1 *= attr().field_0x14;
- if(param_1 < attr().field_0x18) {
- field_0x741 = 0;
+ else {
+ speedF *= 0.9f;
+ if(param_1 > attr().field_0x1C) {
+ speed.y = attr().field_0x1C;
}
else {
- speedF *= 0.9f;
- if(param_1 > attr().field_0x1C) {
- speed.y = attr().field_0x1C;
- }
- else {
- speed.y = param_1;
- }
+ speed.y = param_1;
}
}
- else {
- if(mAcch.ChkGroundHit()) {
- cLib_addCalc(&speedF, 0.0f, 0.5f, 5.0f, 1.0f);
- }
+ }
+ else {
+ if(mAcch.ChkGroundHit()) {
+ cLib_addCalc(&speedF, 0.0f, 0.5f, 5.0f, 1.0f);
}
}
+}
- void Act_c::set_nut_exp_interval() {
- if(mBombTimer > attr().field_0xA) {
- mBombTimer = attr().field_0xA;
+void Act_c::set_nut_exp_interval() {
+ if(mBombTimer > attr().field_0xA) {
+ mBombTimer = attr().field_0xA;
- f32 frame = 0x87 - attr().field_0xA;
- mBck0.setFrame(frame);
- mBrk0.setFrame(frame);
- }
+ f32 frame = 0x87 - attr().field_0xA;
+ mBck0.setFrame(frame);
+ mBrk0.setFrame(frame);
}
+}
- void Act_c::anm_play() {
- if(mBombTimer + 1 <= 0x87) {
- mBck0.play();
- mBrk0.play();
- }
+void Act_c::anm_play() {
+ if(mBombTimer + 1 <= 0x87) {
+ mBck0.play();
+ mBrk0.play();
}
+}
- /* 800DEC70-800DEFAC .text set_wind_vec__Q27daBomb25Act_cFv */
- void Act_c::set_wind_vec() {
- mWindVec *= 0.95f;
- if (mWindVec.abs2() < 0.1f)
- mWindVec.setall(0.0f);
- if (!mSph.ChkTgHit())
- return;
- cCcD_Obj* hitObj = mSph.GetTgHitObj();
- if (hitObj == NULL)
- return;
- if (!hitObj->ChkAtType(AT_TYPE_WIND))
- return;
-
- f32 f30 = attr().field_0x40;
- cXyz sp48 = *mSph.GetTgRVecP();
- f32 f31 = sp48.abs2();
- if (f31 > SQUARE(f30)) {
- sp48 *= f30 / std::sqrtf(f31);
- }
- cCcD_ShapeAttr* hitShapeAttr = hitObj->GetShapeAttr();
- cXyz hitNormal = cXyz::Zero;
- f30 = 1.0f;
- f32 f29 = 1.0f;
- if (hitShapeAttr->GetNVec(current.pos, &hitNormal)) {
- hitNormal *= attr().field_0x44;
- mWindVec.abs2();
- fopAc_ac_c* hitActor = mSph.GetTgHitAc();
- if (hitActor && fopAcM_GetProfName(hitActor) == fpcNm_PLAYER_e) {
- s16 hitObjAngleY = cM_atan2s(hitNormal.x, hitNormal.z);
- f32 f2 = cM_scos(hitActor->shape_angle.y - hitObjAngleY);
- if (f2 > 0.0f) {
- f30 = 1.0f + attr().field_0x48*f2;
- f29 = 1.0f + attr().field_0x4C*f2;
- }
+/* 800DEC70-800DEFAC .text set_wind_vec__Q27daBomb25Act_cFv */
+void Act_c::set_wind_vec() {
+ mWindVec *= 0.95f;
+ if (mWindVec.abs2() < 0.1f)
+ mWindVec.setall(0.0f);
+ if (!mSph.ChkTgHit())
+ return;
+ cCcD_Obj* hitObj = mSph.GetTgHitObj();
+ if (hitObj == NULL)
+ return;
+ if (!hitObj->ChkAtType(AT_TYPE_WIND))
+ return;
+
+ f32 f30 = attr().field_0x40;
+ cXyz sp48 = *mSph.GetTgRVecP();
+ f32 f31 = sp48.abs2();
+ if (f31 > SQUARE(f30)) {
+ sp48 *= f30 / std::sqrtf(f31);
+ }
+ cCcD_ShapeAttr* hitShapeAttr = hitObj->GetShapeAttr();
+ cXyz hitNormal = cXyz::Zero;
+ f30 = 1.0f;
+ f32 f29 = 1.0f;
+ if (hitShapeAttr->GetNVec(current.pos, &hitNormal)) {
+ hitNormal *= attr().field_0x44;
+ mWindVec.abs2();
+ fopAc_ac_c* hitActor = mSph.GetTgHitAc();
+ if (hitActor && fopAcM_GetProfName(hitActor) == fpcNm_PLAYER_e) {
+ s16 hitObjAngleY = cM_atan2s(hitNormal.x, hitNormal.z);
+ f32 f2 = cM_scos(hitActor->shape_angle.y - hitObjAngleY);
+ if (f2 > 0.0f) {
+ f30 = 1.0f + attr().field_0x48*f2;
+ f29 = 1.0f + attr().field_0x4C*f2;
}
}
- f32 f28;
- if (f31 > 0.01f) {
- f31 = 0.9f;
- f28 = 0.1f;
- } else {
- f31 = 0.0f;
- f28 = 1.0f;
- }
- mWindVec = sp48 * f31 + hitNormal * f28 * f30;
- if (std::fabsf(mWindVec.y) < 5.0f) {
- mWindVec.y += attr().field_0x38*f31 + f29*(attr().field_0x3C*f28);
- }
- field_0x7A8 = 2;
}
+ f32 f28;
+ if (f31 > 0.01f) {
+ f31 = 0.9f;
+ f28 = 0.1f;
+ } else {
+ f31 = 0.0f;
+ f28 = 1.0f;
+ }
+ mWindVec = sp48 * f31 + hitNormal * f28 * f30;
+ if (std::fabsf(mWindVec.y) < 5.0f) {
+ mWindVec.y += attr().field_0x38*f31 + f29*(attr().field_0x3C*f28);
+ }
+ field_0x7A8 = 2;
+}
- void Act_c::eff_explode() {
- if(!field_0x742) {
- field_0x742 = 1;
+void Act_c::eff_explode() {
+ if(!field_0x742) {
+ field_0x742 = 1;
- camera_class* cam = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0));
- csXyz rot;
- rot.x = -cam->mAngle.x;
- rot.y = cam->mAngle.y + 0x8000;
- rot.z = 0;
+ camera_class* cam = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0));
+ csXyz rot;
+ rot.x = -cam->mAngle.x;
+ rot.y = cam->mAngle.y + 0x8000;
+ rot.z = 0;
- eff_explode_normal(&rot);
- se_explode();
- set_sound_env(0xFF, 0xA);
- }
+ eff_explode_normal(&rot);
+ se_explode();
+ set_sound_env(0xFF, 0xA);
}
+}
- void Act_c::eff_explode_normal(const csXyz* rotation) {
- dComIfGp_particle_setP1(dPa_name::ID_IT_JN_BMEX_SENKO, &current.pos, rotation, &scale);
- dComIfGp_particle_setBombSmoke(dPa_name::ID_IT_JT_BMEX_SMOKE01, &current.pos, NULL, &scale);
- dComIfGp_particle_setBombSmoke(dPa_name::ID_IT_JT_BMEX_SMOKE02, &current.pos, NULL, &scale);
- dComIfGp_particle_setToonP1(dPa_name::ID_IT_JT_BMEX_HAHEN, &current.pos, NULL, &scale);
- }
+void Act_c::eff_explode_normal(const csXyz* rotation) {
+ dComIfGp_particle_setP1(dPa_name::ID_IT_JN_BMEX_SENKO, &current.pos, rotation, &scale);
+ dComIfGp_particle_setBombSmoke(dPa_name::ID_IT_JT_BMEX_SMOKE01, &current.pos, NULL, &scale);
+ dComIfGp_particle_setBombSmoke(dPa_name::ID_IT_JT_BMEX_SMOKE02, &current.pos, NULL, &scale);
+ dComIfGp_particle_setToonP1(dPa_name::ID_IT_JT_BMEX_HAHEN, &current.pos, NULL, &scale);
+}
- void Act_c::eff_explode_water() {
- if(!field_0x743) {
- fopKyM_createWpillar(&current.pos, 1.0f, 1.0f, 1);
- field_0x743 = 1;
- se_explode_water();
- set_sound_env(0xFF, 0xA);
- }
+void Act_c::eff_explode_water() {
+ if(!field_0x743) {
+ fopKyM_createWpillar(&current.pos, 1.0f, 1.0f, 1);
+ field_0x743 = 1;
+ se_explode_water();
+ set_sound_env(0xFF, 0xA);
}
+}
- void Act_c::eff_fuse_init() {
- field_0x6C0 = cXyz::Zero;
- field_0x6CC = cXyz::Zero;
- field_0x6D8 = cXyz::Zero;
- field_0x744 = 0;
- }
+void Act_c::eff_fuse_init() {
+ field_0x6C0 = cXyz::Zero;
+ field_0x6CC = cXyz::Zero;
+ field_0x6D8 = cXyz::Zero;
+ field_0x744 = 0;
+}
- void Act_c::eff_fuse_start() {
- if(!field_0x744) {
- field_0x744 = 1;
+void Act_c::eff_fuse_start() {
+ if(!field_0x744) {
+ field_0x744 = 1;
- field_0x6C0.x = current.pos.x;
- field_0x6C0.y = current.pos.y + 60.0f;
- field_0x6C0.z = current.pos.z;
- field_0x6CC = field_0x6C0;
- field_0x6D8 = field_0x6C0;
+ field_0x6C0.x = current.pos.x;
+ field_0x6C0.y = current.pos.y + 60.0f;
+ field_0x6C0.z = current.pos.z;
+ field_0x6CC = field_0x6C0;
+ field_0x6D8 = field_0x6C0;
- dComIfGp_particle_setP1(dPa_name::ID_IT_JN_BM_HIBANA, &field_0x6C0, NULL, &scale, 0xFF, &mSparks);
- dComIfGp_particle_setToonP1(dPa_name::ID_IT_JT_BM_SMOKE, &field_0x6C0, NULL, &scale, 0xDC, &mSmoke);
- mSmoke.setOldPosP(&field_0x6CC, &field_0x6D8);
- }
+ dComIfGp_particle_setP1(dPa_name::ID_IT_JN_BM_HIBANA, &field_0x6C0, NULL, &scale, 0xFF, &mSparks);
+ dComIfGp_particle_setToonP1(dPa_name::ID_IT_JT_BM_SMOKE, &field_0x6C0, NULL, &scale, 0xDC, &mSmoke);
+ mSmoke.setOldPosP(&field_0x6CC, &field_0x6D8);
}
+}
- void Act_c::eff_fuse_move() {
- static cXyz fuse_offset(0.0f, 60.0f, 5.0f);
-
- field_0x6D8 = field_0x6CC;
- field_0x6CC = field_0x6C0;
- mDoMtx_stack_c::multVec(&fuse_offset, &field_0x6C0);
+void Act_c::eff_fuse_move() {
+ static cXyz fuse_offset(0.0f, 60.0f, 5.0f);
+
+ field_0x6D8 = field_0x6CC;
+ field_0x6CC = field_0x6C0;
+ mDoMtx_stack_c::multVec(&fuse_offset, &field_0x6C0);
- if(field_0x744) {
- se_ignition();
- }
+ if(field_0x744) {
+ se_ignition();
}
+}
- /* 800DF3DC-800DF41C .text eff_fuse_end__Q27daBomb25Act_cFv */
- void Act_c::eff_fuse_end() {
- mSmoke.deleteCallBack();
- mSparks.deleteCallBack();
+/* 800DF3DC-800DF41C .text eff_fuse_end__Q27daBomb25Act_cFv */
+void Act_c::eff_fuse_end() {
+ mSmoke.deleteCallBack();
+ mSparks.deleteCallBack();
- field_0x744 = 0;
- }
+ field_0x744 = 0;
+}
- void Act_c::eff_water_splash() {
- cXyz pos(current.pos.x, field_0x520, current.pos.z);
- fopKyM_createWpillar(&pos, 0.5f, 0.75f, 0);
+void Act_c::eff_water_splash() {
+ cXyz pos(current.pos.x, field_0x520, current.pos.z);
+ fopKyM_createWpillar(&pos, 0.5f, 0.75f, 0);
- se_fall_water();
- set_sound_env(0x64, 0x5);
- }
+ se_fall_water();
+ set_sound_env(0x64, 0x5);
+}
- /* 800DF488-800DF578 .text se_fall_water__Q27daBomb25Act_cFv */
- void Act_c::se_fall_water() {
- cBgS_PolyInfo* temp[2] = {
- field_0x526 ? NULL : &mAcch.m_wtr,
- &mAcch.m_gnd,
- };
-
- u32 mtrlSndId = 0x13;
- for (int i = 0; i < ARRAY_SIZE(temp); i++) {
- if (temp[i] == NULL)
- continue;
- int bg_index = temp[i]->GetBgIndex();
- if (bg_index >= 0 && bg_index < 0x100) {
- mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(*temp[i]);
- break;
- }
+/* 800DF488-800DF578 .text se_fall_water__Q27daBomb25Act_cFv */
+void Act_c::se_fall_water() {
+ cBgS_PolyInfo* temp[2] = {
+ field_0x526 ? NULL : &mAcch.m_wtr,
+ &mAcch.m_gnd,
+ };
+
+ u32 mtrlSndId = 0x13;
+ for (int i = 0; i < ARRAY_SIZE(temp); i++) {
+ if (temp[i] == NULL)
+ continue;
+ int bg_index = temp[i]->GetBgIndex();
+ if (bg_index >= 0 && bg_index < 0x100) {
+ mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(*temp[i]);
+ break;
}
-
- fopAcM_seStart(this, JA_SE_OBJ_FALL_WATER_S, mtrlSndId);
}
- void Act_c::se_explode() {
- fopAcM_seStart(this, JA_SE_OBJ_BOMB_EXPLODE, 0);
- }
+ fopAcM_seStart(this, JA_SE_OBJ_FALL_WATER_S, mtrlSndId);
+}
- void Act_c::se_explode_water() {
- fopAcM_seStart(this, JA_SE_OBJ_BOMB_WATER, 0);
- }
+void Act_c::se_explode() {
+ fopAcM_seStart(this, JA_SE_OBJ_BOMB_EXPLODE, 0);
+}
- void Act_c::se_ignition() {
- fopAcM_seStart(this, JA_SE_OBJ_BOMB_IGNITION, 0);
- }
+void Act_c::se_explode_water() {
+ fopAcM_seStart(this, JA_SE_OBJ_BOMB_WATER, 0);
+}
- void Act_c::set_sound_env(int param_1, int param_2) {
- dKy_Sound_set(current.pos, param_1, fopAcM_GetID(this), param_2);
- }
+void Act_c::se_ignition() {
+ fopAcM_seStart(this, JA_SE_OBJ_BOMB_IGNITION, 0);
+}
- bool Act_c::chk_exp_cc_nut() {
- bool fuse = false;
- bool explode = false;
+void Act_c::set_sound_env(int param_1, int param_2) {
+ dKy_Sound_set(current.pos, param_1, fopAcM_GetID(this), param_2);
+}
- if(mSph.ChkTgHit()) {
- cCcD_Obj* obj = mSph.GetTgHitObj();
- if(obj) {
- if(obj->ChkAtType(AT_TYPE_BOMB)) {
- fuse = true;
- }
- else if(!obj->ChkAtType(AT_TYPE_WIND)) {
- explode = true;
- }
- }
+bool Act_c::chk_exp_cc_nut() {
+ bool fuse = false;
+ bool explode = false;
- mSph.ClrTgHit();
+ if(mSph.ChkTgHit()) {
+ cCcD_Obj* obj = mSph.GetTgHitObj();
+ if(obj) {
+ if(obj->ChkAtType(AT_TYPE_BOMB)) {
+ fuse = true;
+ }
+ else if(!obj->ChkAtType(AT_TYPE_WIND)) {
+ explode = true;
+ }
}
+ mSph.ClrTgHit();
+ }
- if(mSph.ChkCoHit()) {
- if(field_0x741 || speed.abs() > attr().field_0x2C) {
- explode = true;
- }
- mSph.ClrCoHit();
+ if(mSph.ChkCoHit()) {
+ if(field_0x741 || speed.abs() > attr().field_0x2C) {
+ explode = true;
}
- if(explode) {
- eff_fuse_start();
- set_nut_exp_interval();
- }
- if(fuse) {
- eff_explode();
- }
+ mSph.ClrCoHit();
+ }
- return fuse;
+ if(explode) {
+ eff_fuse_start();
+ set_nut_exp_interval();
+ }
+ if(fuse) {
+ eff_explode();
}
- bool Act_c::chk_exp_cc() {
- if(mBombTimer > 0) {
- return chk_exp_cc_nut();
- }
+ return fuse;
+}
- return false;
+bool Act_c::chk_exp_cc() {
+ if(mBombTimer > 0) {
+ return chk_exp_cc_nut();
}
- bool Act_c::chk_exp_bg_nut() {
- bool water = chk_water_in();
- bool lava = chk_lava_in();
-
- bool hit = mAcch.ChkWallHit() || mAcch.ChkGroundHit() || mAcch.ChkRoofHit();
+ return false;
+}
- bool ret = false;
- if(lava) {
- eff_explode();
+bool Act_c::chk_exp_bg_nut() {
+ bool water = chk_water_in();
+ bool lava = chk_lava_in();
+
+ bool hit = mAcch.ChkWallHit() || mAcch.ChkGroundHit() || mAcch.ChkRoofHit();
+
+ bool ret = false;
+ if(lava) {
+ eff_explode();
+ ret = true;
+ }
+ else {
+ if(water && speed.abs() > attr().field_0x28) {
+ eff_explode_water();
ret = true;
+
}
- else {
- if(water && speed.abs() > attr().field_0x28) {
- eff_explode_water();
- ret = true;
-
- }
- else if(hit) {
- if(field_0x741 || speed.abs() > attr().field_0x2C) {
- eff_fuse_start();
- set_nut_exp_interval();
- }
+ else if(hit) {
+ if(field_0x741 || speed.abs() > attr().field_0x2C) {
+ eff_fuse_start();
+ set_nut_exp_interval();
}
}
-
- return ret;
}
- bool Act_c::chk_exp_bg() {
- return chk_exp_bg_nut();
- }
+ return ret;
+}
- bool Act_c::chk_exp_timer() {
- bool ret = false;
- if(mBombTimer > 0 && --mBombTimer == 0) {
- eff_explode();
- ret = true;
- }
+bool Act_c::chk_exp_bg() {
+ return chk_exp_bg_nut();
+}
- return ret;
+bool Act_c::chk_exp_timer() {
+ bool ret = false;
+ if(mBombTimer > 0 && --mBombTimer == 0) {
+ eff_explode();
+ ret = true;
}
- /* 800DFAC0-800DFB94 .text chk_sink_bg_nut__Q27daBomb25Act_cFv */
- bool Act_c::chk_sink_bg_nut() {
- bool water = chk_water_in();
+ return ret;
+}
- bool ret = false;
- if(water && speed.abs() <= attr().field_0x28) {
- eff_water_splash();
- ret = true;
-
- }
+/* 800DFAC0-800DFB94 .text chk_sink_bg_nut__Q27daBomb25Act_cFv */
+bool Act_c::chk_sink_bg_nut() {
+ bool water = chk_water_in();
- return ret;
+ bool ret = false;
+ if(water && speed.abs() <= attr().field_0x28) {
+ eff_water_splash();
+ ret = true;
+
}
- bool Act_c::chk_sink_bg() {
- return chk_sink_bg_nut();
- }
+ return ret;
+}
- u8 Act_c::chk_exp_pre() {
- return chk_exp_cc() || chk_exp_timer();
- }
+bool Act_c::chk_sink_bg() {
+ return chk_sink_bg_nut();
+}
- u8 Act_c::chk_exp_post() {
- return chk_exp_bg();
- }
+u8 Act_c::chk_exp_pre() {
+ return chk_exp_cc() || chk_exp_timer();
+}
- u8 Act_c::chk_sink_post() {
- return chk_sink_bg();
- }
+u8 Act_c::chk_exp_post() {
+ return chk_exp_bg();
+}
+
+u8 Act_c::chk_sink_post() {
+ return chk_sink_bg();
+}
- /* 800DFC54-800DFD0C .text set_real_shadow_flag__Q27daBomb25Act_cFv */
- void Act_c::set_real_shadow_flag() {
- bool r30 = false;
- if (mState == 1) {
- if (model) {
+/* 800DFC54-800DFD0C .text set_real_shadow_flag__Q27daBomb25Act_cFv */
+void Act_c::set_real_shadow_flag() {
+ bool r30 = false;
+ if (mState == 1) {
+ if (model) {
+ r30 = true;
+ } else {
+ daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
+ if (player->getGrabActorID() == fopAcM_GetID(this) && player->getGrabUpStart()) {
r30 = true;
- } else {
- daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
- if (player->getGrabActorID() == fopAcM_GetID(this) && player->getGrabUpStart()) {
- r30 = true;
- }
}
}
- model = r30 ? mpModel : NULL;
}
+ model = r30 ? mpModel : NULL;
+}
- /* 800DFD0C-800DFDB0 .text carry_fuse_start__Q27daBomb25Act_cFv */
- void Act_c::carry_fuse_start() {
- bool r30 = false;
- if (field_0x744 == 0) {
- daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
- if (player->getGrabActorID() == fopAcM_GetID(this)) {
- if (player->getGrabUpEnd()) {
- r30 = true;
- }
- } else {
+/* 800DFD0C-800DFDB0 .text carry_fuse_start__Q27daBomb25Act_cFv */
+void Act_c::carry_fuse_start() {
+ bool r30 = false;
+ if (field_0x744 == 0) {
+ daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
+ if (player->getGrabActorID() == fopAcM_GetID(this)) {
+ if (player->getGrabUpEnd()) {
r30 = true;
}
- }
- if (r30) {
- eff_fuse_start();
+ } else {
+ r30 = true;
}
}
-
- void Act_c::on_carry() {
- cLib_onBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
+ if (r30) {
+ eff_fuse_start();
}
+}
- void Act_c::off_carry() {
- cLib_offBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
- }
+void Act_c::on_carry() {
+ cLib_onBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
+}
- void Act_c::mode_wait_init() {
- mState = 0;
- gravity = attr().gravity;
- mSph.OnCoSPrmBit(cCcD_CoSPrm_Set_e);
- }
+void Act_c::off_carry() {
+ cLib_offBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
+}
+
+void Act_c::mode_wait_init() {
+ mState = 0;
+ gravity = attr().gravity;
+ mSph.OnCoSPrmBit(cCcD_CoSPrm_Set_e);
+}
- void Act_c::mode_wait() {
- if(chk_exp_pre()) {
- mode_explode_init();
- mode_explode();
+void Act_c::mode_wait() {
+ if(chk_exp_pre()) {
+ mode_explode_init();
+ mode_explode();
+ }
+ else {
+ if(fopAcM_checkCarryNow(this)) {
+ mode_carry_init();
+ mode_carry();
}
else {
- if(fopAcM_checkCarryNow(this)) {
- mode_carry_init();
- mode_carry();
- }
- else {
- bool temp = daObj::PrmAbstract(this, PRM_1_W, PRM_1_S);
- f32 yVel = 0.0f;
- if(!temp) {
- if(!field_0x745) {
- posMoveF();
- }
-
- yVel = speed.y;
- bgCrrPos();
+ bool temp = daObj::PrmAbstract(this, PRM_1_W, PRM_1_S);
+ f32 yVel = 0.0f;
+ if(!temp) {
+ if(!field_0x745) {
+ posMoveF();
}
- if(chk_exp_post()) {
- mode_explode_init();
+ yVel = speed.y;
+ bgCrrPos();
+ }
+
+ if(chk_exp_post()) {
+ mode_explode_init();
+ }
+ else {
+ if(chk_sink_post()) {
+ mode_sink_init();
}
else {
- if(chk_sink_post()) {
- mode_sink_init();
- }
- else {
- if(!field_0x740) {
- if(temp) {
- off_carry();
+ if(!field_0x740) {
+ if(temp) {
+ off_carry();
+ }
+ else {
+ bound(yVel);
+ if(mAcch.ChkGroundHit()) {
+ on_carry();
}
else {
- bound(yVel);
- if(mAcch.ChkGroundHit()) {
- on_carry();
- }
- else {
- off_carry();
- }
+ off_carry();
}
}
}
@@ -1013,324 +1013,326 @@ namespace daBomb2 {
}
}
}
+}
- void Act_c::mode_carry_init() {
- mState = 1;
- speedF = 0.0f;
- speed = cXyz::Zero;
- off_carry();
- mSph.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
+void Act_c::mode_carry_init() {
+ mState = 1;
+ speedF = 0.0f;
+ speed = cXyz::Zero;
+ off_carry();
+ mSph.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
+}
+
+void Act_c::mode_carry() {
+ carry_fuse_start();
+ if(chk_exp_pre()) {
+ mode_explode_init();
+ mode_explode();
}
+ else {
+ if(!fopAcM_checkCarryNow(this)) {
+ if(speedF > 0.0f) {
+ field_0x741 = 1;
+ field_0x7A8 = 2;
+ }
- void Act_c::mode_carry() {
- carry_fuse_start();
- if(chk_exp_pre()) {
- mode_explode_init();
- mode_explode();
+ mode_wait_init();
+ mode_wait();
}
else {
- if(!fopAcM_checkCarryNow(this)) {
- if(speedF > 0.0f) {
- field_0x741 = 1;
- field_0x7A8 = 2;
- }
-
- mode_wait_init();
- mode_wait();
- }
- else {
- cXyz temp = current.pos;
- bgCrrPos();
- current.pos = temp;
- }
+ cXyz temp = current.pos;
+ bgCrrPos();
+ current.pos = temp;
}
}
+}
- void Act_c::mode_explode_init() {
- mState = 2;
- camera_lockoff();
- eff_fuse_end();
- mEnv.set(current.pos);
- speedF = 0.0f;
- speed = cXyz::Zero;
- gravity = 0.0f;
- off_carry();
- mSph.OffTgSPrmBit(cCcD_TgSPrm_Set_e);
- mSph.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
- mSph.OnAtSPrmBit(cCcD_AtSPrm_Set_e);
- fopAcM_cancelCarryNow(this);
- mBombTimer = 0;
- field_0x73C = 4;
- dComIfGp_getVibration().StartShock(7, -0x21, cXyz(0.0f, 1.0f, 0.0f));
- }
-
- void Act_c::mode_explode() {
- mEnv.proc(current.pos);
- if(!field_0x73C && mEnv.is_end()) {
- field_0x740 = 1;
- }
- }
+void Act_c::mode_explode_init() {
+ mState = 2;
+ camera_lockoff();
+ eff_fuse_end();
+ mEnv.set(current.pos);
+ speedF = 0.0f;
+ speed = cXyz::Zero;
+ gravity = 0.0f;
+ off_carry();
+ mSph.OffTgSPrmBit(cCcD_TgSPrm_Set_e);
+ mSph.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
+ mSph.OnAtSPrmBit(cCcD_AtSPrm_Set_e);
+ fopAcM_cancelCarryNow(this);
+ mBombTimer = 0;
+ field_0x73C = 4;
+ dComIfGp_getVibration().StartShock(7, -0x21, cXyz(0.0f, 1.0f, 0.0f));
+}
- void Act_c::mode_sink_init() {
- mState = 3;
- speed.y *= 0.8f;
- speedF *= 0.8f;
- mSph.OffAtSPrmBit(cCcD_AtSPrm_Set_e);
- mSph.OffTgSPrmBit(cCcD_TgSPrm_Set_e);
- mSph.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
- off_carry();
- fopAcM_cancelCarryNow(this);
- field_0x698 = 4;
- fopAcM_getWaterY(&current.pos, &field_0x528);
- }
-
- void Act_c::mode_sink() {
- f32 temp;
- bool temp2 = fopAcM_getWaterY(&current.pos, &temp);
- if(temp2 && field_0x528 != -G_CM3D_F_INF && --field_0x698 > 0) {
- current.pos.y += temp - field_0x528;
- field_0x528 = temp;
- posMoveF();
- }
- else {
- field_0x740 = 1;
- }
+void Act_c::mode_explode() {
+ mEnv.proc(current.pos);
+ if(!field_0x73C && mEnv.is_end()) {
+ field_0x740 = 1;
}
+}
- void Act_c::mode_proc_call() {
- typedef void(Act_c::*procFunc)();
- static procFunc mode_proc[] = {
- &Act_c::mode_wait,
- &Act_c::mode_carry,
- &Act_c::mode_explode,
- &Act_c::mode_sink,
- };
-
- if(fopAcM_checkCarryNow(this) && mState != 1) {
- mode_carry_init();
- }
+void Act_c::mode_sink_init() {
+ mState = 3;
+ speed.y *= 0.8f;
+ speedF *= 0.8f;
+ mSph.OffAtSPrmBit(cCcD_AtSPrm_Set_e);
+ mSph.OffTgSPrmBit(cCcD_TgSPrm_Set_e);
+ mSph.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
+ off_carry();
+ fopAcM_cancelCarryNow(this);
+ field_0x698 = 4;
+ fopAcM_getWaterY(&current.pos, &field_0x528);
+}
- (this->*mode_proc[mState])();
- set_real_shadow_flag();
+void Act_c::mode_sink() {
+ f32 temp;
+ bool temp2 = fopAcM_getWaterY(&current.pos, &temp);
+ if(temp2 && field_0x528 != -G_CM3D_F_INF && --field_0x698 > 0) {
+ current.pos.y += temp - field_0x528;
+ field_0x528 = temp;
+ posMoveF();
}
-
- void Act_c::tensor_init() {
- mDoMtx_identity(field_0x754);
- vib_init();
+ else {
+ field_0x740 = 1;
}
+}
- void Act_c::vib_init() {
- field_0x784 = 0.0f;
- field_0x788 = 0.0f;
- field_0x78C = 0.0f;
- field_0x790 = 0.0f;
- field_0x794 = 0.0f;
- field_0x798 = 0.0f;
- field_0x79C = 0.0f;
- field_0x7A0 = 0.0f;
- field_0x7A4 = 0.0f;
- field_0x7A8 = 0.0f;
- }
-
- /* 800E0430-800E04FC .text vib_proc__Q27daBomb25Act_cFv */
- void Act_c::vib_proc() {
- f32 f5 = field_0x7A0 - attr().field_0x50 * (field_0x790 - field_0x788);
- f32 f6 = 1.0f / attr().field_0x5C;
- f32 f7 = 1.0f - field_0x7A4;
- f32 f0 = field_0x79C - attr().field_0x50 * (field_0x78C - field_0x784);
- field_0x794 += f0 * f6;
- field_0x798 += f5 * f6;
- field_0x794 *= f7;
- field_0x798 *= f7;
- field_0x78C += field_0x794;
- field_0x790 += field_0x798;
- field_0x79C = 0.0f;
- field_0x7A0 = 0.0f;
- if (field_0x7A8 > 0) {
- field_0x7A8--;
- }
- }
+void Act_c::mode_proc_call() {
+ typedef void(Act_c::*procFunc)();
+ static procFunc mode_proc[] = {
+ &Act_c::mode_wait,
+ &Act_c::mode_carry,
+ &Act_c::mode_explode,
+ &Act_c::mode_sink,
+ };
- void Act_c::set_vib_tensor() {
- cXyz temp(field_0x790, 1.0f, field_0x78C);
- Quaternion quat;
- daObj::quat_rotBaseY2(&quat, temp);
- mDoMtx_quat(&field_0x754[0], &quat);
+ if(fopAcM_checkCarryNow(this) && mState != 1) {
+ mode_carry_init();
}
- /* 800E0554-800E0588 .text tensor_wait__Q27daBomb25Act_cFv */
- void Act_c::tensor_wait() {
- if(mAcch.ChkGroundHit()) {
- tensor_wait_ground();
- }
- else {
- tensor_wait_drop();
- }
- }
+ (this->*mode_proc[mState])();
+ set_real_shadow_flag();
+}
- void Act_c::tensor_wait_drop() {
- if(field_0x7A8 > 0) {
- field_0x79C = speed.z * attr().field_0x60;
- field_0x7A0 = speed.x * attr().field_0x60;
- }
+void Act_c::tensor_init() {
+ mDoMtx_identity(field_0x754);
+ vib_init();
+}
- field_0x784 = 0.0f;
- field_0x788 = 0.0f;
- field_0x7A4 = attr().field_0x54;
- }
+void Act_c::vib_init() {
+ field_0x784 = 0.0f;
+ field_0x788 = 0.0f;
+ field_0x78C = 0.0f;
+ field_0x790 = 0.0f;
+ field_0x794 = 0.0f;
+ field_0x798 = 0.0f;
+ field_0x79C = 0.0f;
+ field_0x7A0 = 0.0f;
+ field_0x7A4 = 0.0f;
+ field_0x7A8 = 0.0f;
+}
- void Act_c::tensor_wait_ground() {
- cM3dGPla* pNormal = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd);
- if(pNormal) {
- field_0x784 = pNormal->mNormal.z * attr().field_0x64;
- field_0x788 = pNormal->mNormal.x * attr().field_0x64;
- }
- else {
- field_0x784 = 0.0f;
- field_0x788 = 0.0f;
- }
-
- field_0x7A4 = attr().field_0x58;
+/* 800E0430-800E04FC .text vib_proc__Q27daBomb25Act_cFv */
+void Act_c::vib_proc() {
+ f32 f5 = field_0x7A0 - attr().field_0x50 * (field_0x790 - field_0x788);
+ f32 f6 = 1.0f / attr().field_0x5C;
+ f32 f7 = 1.0f - field_0x7A4;
+ f32 f0 = field_0x79C - attr().field_0x50 * (field_0x78C - field_0x784);
+ field_0x794 += f0 * f6;
+ field_0x798 += f5 * f6;
+ field_0x794 *= f7;
+ field_0x798 *= f7;
+ field_0x78C += field_0x794;
+ field_0x790 += field_0x798;
+ field_0x79C = 0.0f;
+ field_0x7A0 = 0.0f;
+ if (field_0x7A8 > 0) {
+ field_0x7A8--;
}
+}
- void Act_c::tensor_carry() {
- field_0x784 = 0.0f;
- field_0x788 = 0.0f;
- field_0x7A4 = attr().field_0x58;
+void Act_c::set_vib_tensor() {
+ cXyz temp(field_0x790, 1.0f, field_0x78C);
+ Quaternion quat;
+ daObj::quat_rotBaseY2(&quat, temp);
+ mDoMtx_quat(&field_0x754[0], &quat);
+}
+
+/* 800E0554-800E0588 .text tensor_wait__Q27daBomb25Act_cFv */
+void Act_c::tensor_wait() {
+ if(mAcch.ChkGroundHit()) {
+ tensor_wait_ground();
+ }
+ else {
+ tensor_wait_drop();
}
+}
- void Act_c::tensor_explode() {
- field_0x784 = 0.0f;
- field_0x788 = 0.0f;
- field_0x7A4 = attr().field_0x58;
+void Act_c::tensor_wait_drop() {
+ if(field_0x7A8 > 0) {
+ field_0x79C = speed.z * attr().field_0x60;
+ field_0x7A0 = speed.x * attr().field_0x60;
}
- void Act_c::tensor_sink() {
+ field_0x784 = 0.0f;
+ field_0x788 = 0.0f;
+ field_0x7A4 = attr().field_0x54;
+}
+
+void Act_c::tensor_wait_ground() {
+ cM3dGPla* pNormal = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd);
+ if(pNormal) {
+ field_0x784 = pNormal->mNormal.z * attr().field_0x64;
+ field_0x788 = pNormal->mNormal.x * attr().field_0x64;
+ }
+ else {
field_0x784 = 0.0f;
field_0x788 = 0.0f;
- field_0x7A4 = attr().field_0x58;
- }
-
- void Act_c::tensor_proc_call() {
- typedef void(Act_c::*procFunc)();
- static procFunc tensor_proc[] = {
- &Act_c::tensor_wait,
- &Act_c::tensor_carry,
- &Act_c::tensor_explode,
- &Act_c::tensor_sink,
- };
-
- if(!daObj::PrmAbstract(this, PRM_1_W, PRM_1_S)) {
- (this->*tensor_proc[mState])();
- vib_proc();
- set_vib_tensor();
- }
}
+
+ field_0x7A4 = attr().field_0x58;
+}
- bool Act_c::_execute() {
- set_wind_vec();
- mode_proc_call();
+void Act_c::tensor_carry() {
+ field_0x784 = 0.0f;
+ field_0x788 = 0.0f;
+ field_0x7A4 = attr().field_0x58;
+}
- if(field_0x740) {
- fopAcM_delete(this);
- }
- else {
- tensor_proc_call();
- anm_play();
+void Act_c::tensor_explode() {
+ field_0x784 = 0.0f;
+ field_0x788 = 0.0f;
+ field_0x7A4 = attr().field_0x58;
+}
- attention_info.position.x = current.pos.x;
- attention_info.position.y = current.pos.y + 50.0f;
- attention_info.position.z = current.pos.z;
- eyePos = attention_info.position;
+void Act_c::tensor_sink() {
+ field_0x784 = 0.0f;
+ field_0x788 = 0.0f;
+ field_0x7A4 = attr().field_0x58;
+}
- set_mtx();
- cc_set();
- }
+void Act_c::tensor_proc_call() {
+ typedef void(Act_c::*procFunc)();
+ static procFunc tensor_proc[] = {
+ &Act_c::tensor_wait,
+ &Act_c::tensor_carry,
+ &Act_c::tensor_explode,
+ &Act_c::tensor_sink,
+ };
- return true;
+ if(!daObj::PrmAbstract(this, PRM_1_W, PRM_1_S)) {
+ (this->*tensor_proc[mState])();
+ vib_proc();
+ set_vib_tensor();
}
+}
- bool Act_c::is_draw() {
- return mState != 2 && !field_0x743 && ! field_0x742;
+bool Act_c::_execute() {
+ set_wind_vec();
+ mode_proc_call();
+
+ if(field_0x740) {
+ fopAcM_delete(this);
}
+ else {
+ tensor_proc_call();
+ anm_play();
- void Act_c::draw_nut() {
- J3DModelData* mdlData = (J3DModelData*)mpModel->getModelData();
- mBck0.entry(mdlData);
- mBrk0.entry(mdlData);
- dComIfGd_setListP1();
- mDoExt_modelUpdateDL(mpModel);
- dComIfGd_setList();
+ attention_info.position.x = current.pos.x;
+ attention_info.position.y = current.pos.y + 50.0f;
+ attention_info.position.z = current.pos.z;
+ eyePos = attention_info.position;
- mBck0.remove(mdlData);
- mBrk0.remove(mdlData);
+ set_mtx();
+ cc_set();
}
- void Act_c::draw_shadow() {
- static const f32 mult[] = {
- 2.08f,
- 1.8f,
- 1.5f,
- 1.3f,
- 1.15f,
- 1.08f,
- 1.04f,
- 1.02f,
- 1.01f,
- 1.0f,
- };
+ return true;
+}
- if(fopAcM_GetModel(this) == 0) {
- int framesLeft = mBck0.getEndFrame() - mBck0.getFrame();
- f32 scale = mult[cLib_minMaxLimit<int>(framesLeft, 0, 9)] * 25.0f;
+bool Act_c::is_draw() {
+ return mState != 2 && !field_0x743 && ! field_0x742;
+}
- dComIfGd_setSimpleShadow2(&current.pos, mAcch.GetGroundH(), scale, mAcch.m_gnd, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
- }
- }
+void Act_c::draw_nut() {
+ J3DModelData* mdlData = (J3DModelData*)mpModel->getModelData();
+ mBck0.entry(mdlData);
+ mBrk0.entry(mdlData);
+ dComIfGd_setListP1();
+ mDoExt_modelUpdateDL(mpModel);
+ dComIfGd_setList();
- /* 800E0A0C-800E0A80 .text _draw__Q27daBomb25Act_cFv */
- bool Act_c::_draw() {
- if(is_draw()) {
- g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
- g_env_light.setLightTevColorType(mpModel, &tevStr);
- draw_nut();
- draw_shadow();
- }
+ mBck0.remove(mdlData);
+ mBrk0.remove(mdlData);
+}
+
+void Act_c::draw_shadow() {
+ static const f32 mult[] = {
+ 2.08f,
+ 1.8f,
+ 1.5f,
+ 1.3f,
+ 1.15f,
+ 1.08f,
+ 1.04f,
+ 1.02f,
+ 1.01f,
+ 1.0f,
+ };
+
+ if(fopAcM_GetModel(this) == 0) {
+ int framesLeft = mBck0.getEndFrame() - mBck0.getFrame();
+ f32 scale = mult[cLib_minMaxLimit<int>(framesLeft, 0, 9)] * 25.0f;
- return true;
+ dComIfGd_setSimpleShadow2(&current.pos, mAcch.GetGroundH(), scale, mAcch.m_gnd, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
}
+}
- namespace {
- cPhs_State Mthd_Create(void* i_this) {
- return static_cast<Act_c*>(i_this)->_create();
- }
+/* 800E0A0C-800E0A80 .text _draw__Q27daBomb25Act_cFv */
+bool Act_c::_draw() {
+ if(is_draw()) {
+ g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType(mpModel, &tevStr);
+ draw_nut();
+ draw_shadow();
+ }
- BOOL Mthd_Delete(void* i_this) {
- return static_cast<Act_c*>(i_this)->_delete();
- }
+ return true;
+}
- BOOL Mthd_Execute(void* i_this) {
- return static_cast<Act_c*>(i_this)->_execute();
- }
+namespace {
+cPhs_State Mthd_Create(void* i_this) {
+ return static_cast<Act_c*>(i_this)->_create();
+}
- BOOL Mthd_Draw(void* i_this) {
- return static_cast<Act_c*>(i_this)->_draw();
- }
+BOOL Mthd_Delete(void* i_this) {
+ return static_cast<Act_c*>(i_this)->_delete();
+}
- BOOL Mthd_IsDelete(void* i_this) {
- return TRUE;
- }
-
- static actor_method_class Mthd_Table = {
- (process_method_func)Mthd_Create,
- (process_method_func)Mthd_Delete,
- (process_method_func)Mthd_Execute,
- (process_method_func)Mthd_IsDelete,
- (process_method_func)Mthd_Draw,
- };
- }
+BOOL Mthd_Execute(void* i_this) {
+ return static_cast<Act_c*>(i_this)->_execute();
+}
+
+BOOL Mthd_Draw(void* i_this) {
+ return static_cast<Act_c*>(i_this)->_draw();
+}
+
+BOOL Mthd_IsDelete(void* i_this) {
+ return TRUE;
}
+static actor_method_class Mthd_Table = {
+ (process_method_func)Mthd_Create,
+ (process_method_func)Mthd_Delete,
+ (process_method_func)Mthd_Execute,
+ (process_method_func)Mthd_IsDelete,
+ (process_method_func)Mthd_Draw,
+};
+}; // namespace
+
+}; // namespace daBomb2
+
actor_process_profile_definition g_profile_Bomb2 = {
/* Layer ID */ fpcLy_CURRENT_e,
/* List ID */ 0x0007,
diff --git a/src/d/actor/d_a_obj_akabe.cpp b/src/d/actor/d_a_obj_akabe.cpp
index 1914cb3c..ae8853a4 100644
--- a/src/d/actor/d_a_obj_akabe.cpp
+++ b/src/d/actor/d_a_obj_akabe.cpp
@@ -13,179 +13,181 @@
#include "m_Do/m_Do_mtx.h"
namespace daObjAkabe {
- const char* const Act_c::M_arcname[4] = {
- "Akabe",
- "AkabeD",
- "AkabeK",
- "NBOX",
- };
-
- /* 00000078-0000009C .text solidHeapCB__Q210daObjAkabe5Act_cFP10fopAc_ac_c */
- BOOL Act_c::solidHeapCB(fopAc_ac_c* i_this) {
- return ((Act_c*)i_this)->create_heap();
- }
- /* 0000009C-000001A4 .text create_heap__Q210daObjAkabe5Act_cFv */
- u8 Act_c::create_heap() {
- bool ret = false;
-
- mpBgW = new dBgW();
- if (mpBgW != NULL) {
- static const s16 dzb[4] = { dRes_INDEX_AKABE_DZB_AKABE_e, dRes_INDEX_AKABED_DZB_AKABED_e, dRes_INDEX_AKABEK_DZB_AKABEK_e, dRes_INDEX_NBOX_DZB_NBOX_e, };
- cBgD_t * bgw_data = (cBgD_t*)dComIfG_getObjectRes(M_arcname[mType], dzb[mType]);
- JUT_ASSERT(0x82, bgw_data != NULL);
- if (!mpBgW->Set(bgw_data, cBgW::MOVE_BG_e, &mMtx))
- ret = true;
- }
+const char* const Act_c::M_arcname[4] = {
+ "Akabe",
+ "AkabeD",
+ "AkabeK",
+ "NBOX",
+};
- if (!ret) {
- mpBgW = NULL;
- return ret;
- }
+/* 00000078-0000009C .text solidHeapCB__Q210daObjAkabe5Act_cFP10fopAc_ac_c */
+BOOL Act_c::solidHeapCB(fopAc_ac_c* i_this) {
+ return ((Act_c*)i_this)->create_heap();
+}
+
+/* 0000009C-000001A4 .text create_heap__Q210daObjAkabe5Act_cFv */
+u8 Act_c::create_heap() {
+ bool ret = false;
+
+ mpBgW = new dBgW();
+ if (mpBgW != NULL) {
+ static const s16 dzb[4] = { dRes_INDEX_AKABE_DZB_AKABE_e, dRes_INDEX_AKABED_DZB_AKABED_e, dRes_INDEX_AKABEK_DZB_AKABEK_e, dRes_INDEX_NBOX_DZB_NBOX_e, };
+ cBgD_t * bgw_data = (cBgD_t*)dComIfG_getObjectRes(M_arcname[mType], dzb[mType]);
+ JUT_ASSERT(0x82, bgw_data != NULL);
+ if (!mpBgW->Set(bgw_data, cBgW::MOVE_BG_e, &mMtx))
+ ret = true;
+ }
- // Fakematch? This function should probably have return type bool, but the codegen towards the
- // end here doesn't work unless the return type is u8.
+ if (!ret) {
+ mpBgW = NULL;
return ret;
}
- /* 000001A4-00000360 .text _create__Q210daObjAkabe5Act_cFv */
- cPhs_State Act_c::_create() {
- cPhs_State rt = cPhs_ERROR_e;
-
- s32 arg0 = prm_get_arg0();
- if (arg0 == 1)
- mType = 1;
- else if (arg0 == 2)
- mType = 2;
- else if (arg0 == 3)
- mType = 3;
- else
- mType = 0;
-
- fopAcM_ct(this, daObjAkabe::Act_c);
-
- mbAppear = chk_appear();
- if (mbAppear) {
- rt = dComIfG_resLoad(&mPhs, M_arcname[mType]);
- if (rt == cPhs_COMPLEATE_e) {
- init_scale();
- init_mtx();
-
- static const u32 heap_size[4] = { 0x200, 0x200, 0x200, 0x3E0, };
- if (fopAcM_entrySolidHeap(this, solidHeapCB, heap_size[mType])) {
- dComIfG_Bgsp()->Regist(mpBgW, this);
- mpBgW->SetCrrFunc(NULL);
- mpBgW->SetPriority((cBgW::PRIORITY)1);
- fopAcM_SetMtx(this, mMtx);
- if (mType == 3) {
- fopAcM_setCullSizeBox(this, -51.0f, -1.0f, -51.0f, 51.0f, 101.0f, 51.0f);
- } else {
- fopAcM_setCullSizeBox(this, -51.0f, -1.0f, -1.0f, 51.0f, 101.0f, 1.0f);
- }
+ // Fakematch? This function should probably have return type bool, but the codegen towards the
+ // end here doesn't work unless the return type is u8.
+ return ret;
+}
+
+/* 000001A4-00000360 .text _create__Q210daObjAkabe5Act_cFv */
+cPhs_State Act_c::_create() {
+ cPhs_State rt = cPhs_ERROR_e;
+
+ s32 arg0 = prm_get_arg0();
+ if (arg0 == 1)
+ mType = 1;
+ else if (arg0 == 2)
+ mType = 2;
+ else if (arg0 == 3)
+ mType = 3;
+ else
+ mType = 0;
+
+ fopAcM_ct(this, daObjAkabe::Act_c);
+
+ mbAppear = chk_appear();
+ if (mbAppear) {
+ rt = dComIfG_resLoad(&mPhs, M_arcname[mType]);
+ if (rt == cPhs_COMPLEATE_e) {
+ init_scale();
+ init_mtx();
+
+ static const u32 heap_size[4] = { 0x200, 0x200, 0x200, 0x3E0, };
+ if (fopAcM_entrySolidHeap(this, solidHeapCB, heap_size[mType])) {
+ dComIfG_Bgsp()->Regist(mpBgW, this);
+ mpBgW->SetCrrFunc(NULL);
+ mpBgW->SetPriority((cBgW::PRIORITY)1);
+ fopAcM_SetMtx(this, mMtx);
+ if (mType == 3) {
+ fopAcM_setCullSizeBox(this, -51.0f, -1.0f, -51.0f, 51.0f, 101.0f, 51.0f);
} else {
- rt = cPhs_ERROR_e;
+ fopAcM_setCullSizeBox(this, -51.0f, -1.0f, -1.0f, 51.0f, 101.0f, 1.0f);
}
+ } else {
+ rt = cPhs_ERROR_e;
}
}
-
- return rt;
}
- /* 00000360-000003F8 .text _delete__Q210daObjAkabe5Act_cFv */
- bool Act_c::_delete() {
- if (mbAppear) {
- if (mpBgW != NULL && mpBgW->ChkUsed()) {
- dComIfG_Bgsp()->Release(mpBgW);
- }
+ return rt;
+}
- dComIfG_resDelete(&mPhs, M_arcname[mType]);
+/* 00000360-000003F8 .text _delete__Q210daObjAkabe5Act_cFv */
+bool Act_c::_delete() {
+ if (mbAppear) {
+ if (mpBgW != NULL && mpBgW->ChkUsed()) {
+ dComIfG_Bgsp()->Release(mpBgW);
}
- return true;
- }
-
- /* 000003F8-00000498 .text init_scale__Q210daObjAkabe5Act_cFv */
- void Act_c::init_scale() {
- s32 scl = prm_get_scl();
- if (scl == 1) {
- scale.x *= 10.0f;
- scale.y *= 10.0f;
- scale.z = 1.0f;
- } else if (scl == 2) {
- } else if (scl == 3) {
- scale *= 10.0f;
- } else {
- scale.z = 1.0f;
- }
- }
-
- /* 00000498-00000510 .text init_mtx__Q210daObjAkabe5Act_cFv */
- void Act_c::init_mtx() {
- mDoMtx_stack_c::transS(current.pos);
- mDoMtx_stack_c::ZXYrotM(shape_angle);
- mDoMtx_stack_c::scaleM(scale);
- mDoMtx_copy(mDoMtx_stack_c::get(), mMtx);
- }
-
- /* 00000510-000005A4 .text chk_appear__Q210daObjAkabe5Act_cFv */
- bool Act_c::chk_appear() {
- if (prm_get_always())
- return true;
- s32 swSaveNo = prm_get_swSave();
- if (swSaveNo == 0xFF) {
- return dComIfGs_checkCollect(0) == 0;
- } else {
- return !fopAcM_isSwitch(this, swSaveNo);
- }
+ dComIfG_resDelete(&mPhs, M_arcname[mType]);
}
- /* 000005A4-000005E4 .text _execute__Q210daObjAkabe5Act_cFv */
- bool Act_c::_execute() {
- if (!chk_appear())
- fopAcM_delete(this);
- return true;
+ return true;
+}
+
+/* 000003F8-00000498 .text init_scale__Q210daObjAkabe5Act_cFv */
+void Act_c::init_scale() {
+ s32 scl = prm_get_scl();
+ if (scl == 1) {
+ scale.x *= 10.0f;
+ scale.y *= 10.0f;
+ scale.z = 1.0f;
+ } else if (scl == 2) {
+ } else if (scl == 3) {
+ scale *= 10.0f;
+ } else {
+ scale.z = 1.0f;
}
-
- /* 000005E4-000005EC .text _draw__Q210daObjAkabe5Act_cFv */
- bool Act_c::_draw() {
+}
+
+/* 00000498-00000510 .text init_mtx__Q210daObjAkabe5Act_cFv */
+void Act_c::init_mtx() {
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
+ mDoMtx_stack_c::scaleM(scale);
+ mDoMtx_copy(mDoMtx_stack_c::get(), mMtx);
+}
+
+/* 00000510-000005A4 .text chk_appear__Q210daObjAkabe5Act_cFv */
+bool Act_c::chk_appear() {
+ if (prm_get_always())
return true;
+ s32 swSaveNo = prm_get_swSave();
+ if (swSaveNo == 0xFF) {
+ return dComIfGs_checkCollect(0) == 0;
+ } else {
+ return !fopAcM_isSwitch(this, swSaveNo);
}
-
- namespace {
- /* 000005EC-0000060C .text Mthd_Create__Q210daObjAkabe27@unnamed@d_a_obj_akabe_cpp@FPv */
- cPhs_State Mthd_Create(void* i_this) {
- return ((Act_c*)i_this)->_create();
- }
-
- /* 0000060C-00000630 .text Mthd_Delete__Q210daObjAkabe27@unnamed@d_a_obj_akabe_cpp@FPv */
- BOOL Mthd_Delete(void* i_this) {
- return ((Act_c*)i_this)->_delete();
- }
-
- /* 00000630-00000654 .text Mthd_Execute__Q210daObjAkabe27@unnamed@d_a_obj_akabe_cpp@FPv */
- BOOL Mthd_Execute(void* i_this) {
- return ((Act_c*)i_this)->_execute();
- }
-
- /* 00000654-00000678 .text Mthd_Draw__Q210daObjAkabe27@unnamed@d_a_obj_akabe_cpp@FPv */
- BOOL Mthd_Draw(void* i_this) {
- return ((Act_c*)i_this)->_draw();
- }
-
- /* 00000678-00000680 .text Mthd_IsDelete__Q210daObjAkabe27@unnamed@d_a_obj_akabe_cpp@FPv */
- BOOL Mthd_IsDelete(void* i_this) {
- return TRUE;
- }
-
- static actor_method_class Mthd_Table = {
- (process_method_func)Mthd_Create,
- (process_method_func)Mthd_Delete,
- (process_method_func)Mthd_Execute,
- (process_method_func)Mthd_IsDelete,
- (process_method_func)Mthd_Draw,
- };
- };
+}
+
+/* 000005A4-000005E4 .text _execute__Q210daObjAkabe5Act_cFv */
+bool Act_c::_execute() {
+ if (!chk_appear())
+ fopAcM_delete(this);
+ return true;
+}
+
+/* 000005E4-000005EC .text _draw__Q210daObjAkabe5Act_cFv */
+bool Act_c::_draw() {
+ return true;
+}
+
+namespace {
+/* 000005EC-0000060C .text Mthd_Create__Q210daObjAkabe27@unnamed@d_a_obj_akabe_cpp@FPv */
+cPhs_State Mthd_Create(void* i_this) {
+ return ((Act_c*)i_this)->_create();
+}
+
+/* 0000060C-00000630 .text Mthd_Delete__Q210daObjAkabe27@unnamed@d_a_obj_akabe_cpp@FPv */
+BOOL Mthd_Delete(void* i_this) {
+ return ((Act_c*)i_this)->_delete();
+}
+
+/* 00000630-00000654 .text Mthd_Execute__Q210daObjAkabe27@unnamed@d_a_obj_akabe_cpp@FPv */
+BOOL Mthd_Execute(void* i_this) {
+ return ((Act_c*)i_this)->_execute();
+}
+
+/* 00000654-00000678 .text Mthd_Draw__Q210daObjAkabe27@unnamed@d_a_obj_akabe_cpp@FPv */
+BOOL Mthd_Draw(void* i_this) {
+ return ((Act_c*)i_this)->_draw();
+}
+
+/* 00000678-00000680 .text Mthd_IsDelete__Q210daObjAkabe27@unnamed@d_a_obj_akabe_cpp@FPv */
+BOOL Mthd_IsDelete(void* i_this) {
+ return TRUE;
+}
+
+static actor_method_class Mthd_Table = {
+ (process_method_func)Mthd_Create,
+ (process_method_func)Mthd_Delete,
+ (process_method_func)Mthd_Execute,
+ (process_method_func)Mthd_IsDelete,
+ (process_method_func)Mthd_Draw,
};
+}; // namespace
+
+}; // namespace daObjAkabe
actor_process_profile_definition g_profile_Obj_Akabe = {
/* Layer ID */ fpcLy_CURRENT_e,
diff --git a/src/d/actor/d_a_obj_movebox.cpp b/src/d/actor/d_a_obj_movebox.cpp
index 53bd9a16..1d90c95a 100644
--- a/src/d/actor/d_a_obj_movebox.cpp
+++ b/src/d/actor/d_a_obj_movebox.cpp
@@ -25,1898 +25,1898 @@
#include "d/actor/d_a_obj_eff.h"
namespace daObjMovebox {
+
+dBgS_ObjGndChk Bgc_c::M_gnd_work[23];
+dBgS_WtrChk Bgc_c::M_wrt_work;
+dBgS_ObjLinChk Bgc_c::M_wall_work[23];
+
+const BgcSrc_c Bgc_c::M_lin5[5] = {
+ // TODO
+ {0.0f, 0.0f, 0.0f, 0.0f},
+ {-0.5f, -0.5f, 1.0f, 1.0f},
+ {0.5f, -0.5f, -1.0f, 1.0f},
+ {0.5f, 0.5f, -1.0f, -1.0f},
+ {-0.5f, 0.5f, 1.0f, -1.0f},
+};
+
+const BgcSrc_c Bgc_c::M_lin20[23] = {
+ // TODO
+ {0.0f, 0.0f, 0.0f, 0.0f},
+ {-0.25f, -0.25f, 0.0f, 0.0f},
+ {-0.5f, -0.5f, 1.0f, 1.0f},
+ {0.0f, -0.5f, -1.0f, 1.0f},
+ {0.0f, 0.0f, -1.0f, -1.0f},
+ {-0.5f, 0.0f, 1.0f, -1.0f},
+ {0.25f, -0.25f, 0.0f, 0.0f},
+ {0.0f, -0.5f, 1.0f, 1.0f},
+ {0.5f, -0.5f, -1.0f, 1.0f},
+ {0.5f, 0.0f, -1.0f, -1.0f},
+ {0.0f, 0.0f, 1.0f, -1.0f},
+ {0.25f, 0.25f, 0.0f, 0.0f},
+ {0.0f, 0.0f, 1.0f, 1.0f},
+ {0.5f, 0.0f, -1.0f, 1.0f},
+ {0.5f, 0.5f, -1.0f, -1.0f},
+ {0.0f, 0.5f, 1.0f, -1.0f},
+ {-0.25f, 0.25f, 0.0f, 0.0f},
+ {-0.5f, 0.0f, 1.0f, 1.0f},
+ {0.0f, 0.0f, -1.0f, 1.0f},
+ {0.0f, 0.5f, -1.0f, -1.0f},
+ {-0.5f, 0.5f, 1.0f, -1.0f},
+ {-0.75f, 0.25f, 0.0f, 0.0f},
+ {-0.75f, -0.25f, 0.0f, 0.0f},
+};
+
+cPhs_State Act_c::Mthd_Create() {
+ fopAcM_ct(this, Act_c);
- dBgS_ObjGndChk Bgc_c::M_gnd_work[23];
- dBgS_WtrChk Bgc_c::M_wrt_work;
- dBgS_ObjLinChk Bgc_c::M_wall_work[23];
-
- const BgcSrc_c Bgc_c::M_lin5[5] = {
- // TODO
- {0.0f, 0.0f, 0.0f, 0.0f},
- {-0.5f, -0.5f, 1.0f, 1.0f},
- {0.5f, -0.5f, -1.0f, 1.0f},
- {0.5f, 0.5f, -1.0f, -1.0f},
- {-0.5f, 0.5f, 1.0f, -1.0f},
- };
-
- const BgcSrc_c Bgc_c::M_lin20[23] = {
- // TODO
- {0.0f, 0.0f, 0.0f, 0.0f},
- {-0.25f, -0.25f, 0.0f, 0.0f},
- {-0.5f, -0.5f, 1.0f, 1.0f},
- {0.0f, -0.5f, -1.0f, 1.0f},
- {0.0f, 0.0f, -1.0f, -1.0f},
- {-0.5f, 0.0f, 1.0f, -1.0f},
- {0.25f, -0.25f, 0.0f, 0.0f},
- {0.0f, -0.5f, 1.0f, 1.0f},
- {0.5f, -0.5f, -1.0f, 1.0f},
- {0.5f, 0.0f, -1.0f, -1.0f},
- {0.0f, 0.0f, 1.0f, -1.0f},
- {0.25f, 0.25f, 0.0f, 0.0f},
- {0.0f, 0.0f, 1.0f, 1.0f},
- {0.5f, 0.0f, -1.0f, 1.0f},
- {0.5f, 0.5f, -1.0f, -1.0f},
- {0.0f, 0.5f, 1.0f, -1.0f},
- {-0.25f, 0.25f, 0.0f, 0.0f},
- {-0.5f, 0.0f, 1.0f, 1.0f},
- {0.0f, 0.0f, -1.0f, 1.0f},
- {0.0f, 0.5f, -1.0f, -1.0f},
- {-0.5f, 0.5f, 1.0f, -1.0f},
- {-0.75f, 0.25f, 0.0f, 0.0f},
- {-0.75f, -0.25f, 0.0f, 0.0f},
- };
-
- cPhs_State Act_c::Mthd_Create() {
- fopAcM_ct(this, Act_c);
-
- cPhs_State phase_state;
- mType = prm_get_type();
- phase_state = cPhs_ERROR_e;
- prmX_init();
- prmZ_init();
-
- mbShouldAppear = chk_appear();
- if (mbShouldAppear) {
- phase_state = dComIfG_resLoad(&mPhs, M_arcname[mType]);
- if (phase_state == cPhs_COMPLEATE_e) {
- u32 heapSize = attr()->mDZBHeapSize;
- path_init();
- phase_state = MoveBGCreate(M_arcname[mType], attr()->mDZBFileIndex, dBgS_MoveBGProc_Trans, heapSize);
- JUT_ASSERT(1998, (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e));
- }
- }
-
- return phase_state;
- }
-
- BOOL Act_c::Mthd_Delete() {
- BOOL result = MoveBGDelete();
- if (mbShouldAppear) {
- dComIfG_resDeleteDemo(&mPhs, M_arcname[mType]);
- }
- return result;
- }
+ cPhs_State phase_state;
+ mType = prm_get_type();
+ phase_state = cPhs_ERROR_e;
+ prmX_init();
+ prmZ_init();
- /* 000000EC-000001B0 .text __ct__Q212daObjMovebox5Bgc_cFv */
- Bgc_c::Bgc_c() {
- for (int i = 0; i < ARRAY_SIZE(mGroundY); i++) {
- mGroundY[i] = 0.0f;
- mWallPos[i] = cXyz::Zero;
+ mbShouldAppear = chk_appear();
+ if (mbShouldAppear) {
+ phase_state = dComIfG_resLoad(&mPhs, M_arcname[mType]);
+ if (phase_state == cPhs_COMPLEATE_e) {
+ u32 heapSize = attr()->mDZBHeapSize;
+ path_init();
+ phase_state = MoveBGCreate(M_arcname[mType], attr()->mDZBFileIndex, dBgS_MoveBGProc_Trans, heapSize);
+ JUT_ASSERT(1998, (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e));
}
- mMaxGroundIdx = -1;
- mWallIdx = -1;
- mNearestWallDist = FLOAT_MAX;
- mWaterY = 0.0f;
- mStateFlags = (State_e)0;
}
- /* 000001F0-000003A4 .text gnd_pos__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cif */
- void Bgc_c::gnd_pos(const Act_c* movebox, const BgcSrc_c* bgcSrc, int bgcSrcCount, f32 param_4) {
- f32 maxGroundY = -G_CM3D_F_INF;
-
- mDoMtx_stack_c::transS(movebox->current.pos);
- mDoMtx_stack_c::YrotM(movebox->home.angle.y);
- mMaxGroundIdx = -1;
-
- for (int i = 0; i < bgcSrcCount; i++, bgcSrc++) {
- cXyz offset(
- bgcSrc->m0C + bgcSrc->m04 * movebox->attr()->mScaleXZ,
- param_4,
- bgcSrc->m08 + bgcSrc->m00 * movebox->attr()->mScaleXZ
- );
- cXyz pos;
- mDoMtx_stack_c::multVec(&offset, &pos);
- M_gnd_work[i].SetPos(&pos);
- M_gnd_work[i].SetActorPid(movebox->base.base.mBsPcId);
- mGroundY[i] = dComIfG_Bgsp()->GroundCross(&M_gnd_work[i]);
- if (mGroundY[i] > maxGroundY) {
- fopAc_ac_c* groundActor = dComIfG_Bgsp()->GetActorPointer(M_gnd_work[i]);
- if (!(groundActor && fopAcM_GetName(groundActor) == fpcNm_Obj_Movebox_e && ((Act_c*)groundActor)->mMode == Act_c::MODE_AFLOAT)) {
- maxGroundY = mGroundY[i];
- mMaxGroundIdx = i;
- }
- }
- }
+ return phase_state;
+}
+
+BOOL Act_c::Mthd_Delete() {
+ BOOL result = MoveBGDelete();
+ if (mbShouldAppear) {
+ dComIfG_resDeleteDemo(&mPhs, M_arcname[mType]);
}
-
- /* 000003A4-00000474 .text wrt_pos__Q212daObjMovebox5Bgc_cFRC4cXyz */
- void Bgc_c::wrt_pos(const cXyz& pos) {
- cXyz groundPos(pos);
- f32 roofY = pos.y + 400.0f;
- groundPos.y -= 100.0f;
- M_wrt_work.Set(groundPos, roofY);
- if (dComIfG_Bgsp()->SplGrpChk(&M_wrt_work)) {
- mWaterY = M_wrt_work.GetHeight();
- cLib_onBit(mStateFlags, BgcState_ABOVE_WATER_e);
- if (mWaterY > pos.y) {
- cLib_onBit(mStateFlags, BgcState_IN_WATER_e);
- }
- }
+ return result;
+}
+
+/* 000000EC-000001B0 .text __ct__Q212daObjMovebox5Bgc_cFv */
+Bgc_c::Bgc_c() {
+ for (int i = 0; i < ARRAY_SIZE(mGroundY); i++) {
+ mGroundY[i] = 0.0f;
+ mWallPos[i] = cXyz::Zero;
}
+ mMaxGroundIdx = -1;
+ mWallIdx = -1;
+ mNearestWallDist = FLOAT_MAX;
+ mWaterY = 0.0f;
+ mStateFlags = (State_e)0;
+}
+
+/* 000001F0-000003A4 .text gnd_pos__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cif */
+void Bgc_c::gnd_pos(const Act_c* movebox, const BgcSrc_c* bgcSrc, int bgcSrcCount, f32 param_4) {
+ f32 maxGroundY = -G_CM3D_F_INF;
- /* 00000474-00000748 .text wall_pos__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cisf */
- void Bgc_c::wall_pos(const Act_c* movebox, const BgcSrc_c* bgcSrc, int bgcSrcCount, s16 param_4, f32 param_5) {
- s16 angle;
- cXyz startPos;
- cXyz endPos;
- cXyz temp_2c;
- cXyz temp_20;
-
- angle = movebox->home.angle.y + param_4;
- mWallIdx = -1;
- mNearestWallDist = FLOAT_MAX;
- mDoMtx_stack_c::YrotS((s16)angle);
- mDoMtx_stack_c::XrotM(0x4000);
- mDoMtx_stack_c::multVec(&cXyz::BaseY, &temp_20);
- temp_20 *= param_5 + movebox->attr()->mScaleXZ * 0.5f;
-
- for (int i = 0; i < bgcSrcCount; i++, bgcSrc++) {
- mDoMtx_stack_c::XrotS(0x4000);
- cXyz temp_14(bgcSrc->m0C, 0.0f, bgcSrc->m08);
- mDoMtx_stack_c::multVec(&temp_14, &temp_2c);
- mDoMtx_stack_c::YrotS((s16)angle);
- mDoMtx_stack_c::transM(temp_2c);
- mDoMtx_stack_c::scaleM(movebox->attr()->mScaleXZ, movebox->attr()->mScaleY, movebox->attr()->mScaleXZ);
- mDoMtx_stack_c::transM(0.0f, 0.5f, 0.0f);
- mDoMtx_stack_c::XrotM(0x4000);
- temp_14.set(bgcSrc->m04, 0.0f, bgcSrc->m00);
- mDoMtx_stack_c::multVec(&temp_14, &startPos);
- startPos += movebox->current.pos;
- endPos = startPos + temp_20;
- M_wall_work[i].Set(&startPos, &endPos, const_cast<Act_c*>(movebox));
- M_wall_work[i].SetActorPid(movebox->base.base.mBsPcId);
- if (dComIfG_Bgsp()->LineCross(&M_wall_work[i])) {
- mWallPos[i] = M_wall_work[i].GetCross();
- f32 dist_sq = startPos.abs2(mWallPos[i]);
- if (dist_sq < mNearestWallDist) {
- mNearestWallDist = dist_sq;
- mWallIdx = i;
- }
- } else {
- mWallPos[i] = cXyz::Zero;
- }
- }
- }
+ mDoMtx_stack_c::transS(movebox->current.pos);
+ mDoMtx_stack_c::YrotM(movebox->home.angle.y);
+ mMaxGroundIdx = -1;
- /* 00000748-000008E8 .text proc_vertical__Q212daObjMovebox5Bgc_cFPQ212daObjMovebox5Act_c */
- void Bgc_c::proc_vertical(Act_c* movebox) {
- State_e prevStateFlags = mStateFlags;
- mStateFlags = (State_e)0;
-
- gnd_pos(
- movebox,
- movebox->attr()->m9A ? M_lin20 : M_lin5,
- movebox->attr()->m9A ? ARRAY_SIZE(M_lin20)-2 : ARRAY_SIZE(M_lin5),
- 100.0f
+ for (int i = 0; i < bgcSrcCount; i++, bgcSrc++) {
+ cXyz offset(
+ bgcSrc->m0C + bgcSrc->m04 * movebox->attr()->mScaleXZ,
+ param_4,
+ bgcSrc->m08 + bgcSrc->m00 * movebox->attr()->mScaleXZ
);
-
- if (mMaxGroundIdx >= 0) {
- if (mGroundY[mMaxGroundIdx] > movebox->current.pos.y) {
- movebox->current.pos.y = mGroundY[mMaxGroundIdx];
- cLib_onBit(mStateFlags, BgcState_ON_GROUND_e);
- movebox->speed.y = 0.0f;
+ cXyz pos;
+ mDoMtx_stack_c::multVec(&offset, &pos);
+ M_gnd_work[i].SetPos(&pos);
+ M_gnd_work[i].SetActorPid(movebox->base.base.mBsPcId);
+ mGroundY[i] = dComIfG_Bgsp()->GroundCross(&M_gnd_work[i]);
+ if (mGroundY[i] > maxGroundY) {
+ fopAc_ac_c* groundActor = dComIfG_Bgsp()->GetActorPointer(M_gnd_work[i]);
+ if (!(groundActor && fopAcM_GetName(groundActor) == fpcNm_Obj_Movebox_e && ((Act_c*)groundActor)->mMode == Act_c::MODE_AFLOAT)) {
+ maxGroundY = mGroundY[i];
+ mMaxGroundIdx = i;
}
}
-
- wrt_pos(movebox->current.pos);
-
- if (cLib_checkBit(mStateFlags, BgcState_ABOVE_WATER_e) && mWaterY > movebox->current.pos.y) {
+ }
+}
+
+/* 000003A4-00000474 .text wrt_pos__Q212daObjMovebox5Bgc_cFRC4cXyz */
+void Bgc_c::wrt_pos(const cXyz& pos) {
+ cXyz groundPos(pos);
+ f32 roofY = pos.y + 400.0f;
+ groundPos.y -= 100.0f;
+ M_wrt_work.Set(groundPos, roofY);
+ if (dComIfG_Bgsp()->SplGrpChk(&M_wrt_work)) {
+ mWaterY = M_wrt_work.GetHeight();
+ cLib_onBit(mStateFlags, BgcState_ABOVE_WATER_e);
+ if (mWaterY > pos.y) {
cLib_onBit(mStateFlags, BgcState_IN_WATER_e);
}
- if (!cLib_checkBit(mStateFlags, BgcState_ON_GROUND_e) && cLib_checkBit(prevStateFlags, BgcState_ON_GROUND_e)) {
- cLib_onBit(mStateFlags, BgcState_JUST_LEFT_GROUND_e);
- movebox->speed.y = movebox->attr()->m20;
- }
- if (cLib_checkBit(mStateFlags, BgcState_ON_GROUND_e) && !cLib_checkBit(prevStateFlags, BgcState_ON_GROUND_e)) {
- cLib_onBit(mStateFlags, BgcState_JUST_HIT_GROUND_e);
- }
- if (cLib_checkBit(mStateFlags, BgcState_IN_WATER_e) && !cLib_checkBit(prevStateFlags, BgcState_IN_WATER_e)) {
- cLib_onBit(mStateFlags, BgcState_JUST_HIT_WATER_e);
- }
- if (cLib_checkBit(mStateFlags, BgcState_ON_GROUND_e) && mMaxGroundIdx >= 0) {
- dComIfG_Bgsp()->RideCallBack(M_gnd_work[mMaxGroundIdx], movebox);
- }
}
+}
+
+/* 00000474-00000748 .text wall_pos__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cisf */
+void Bgc_c::wall_pos(const Act_c* movebox, const BgcSrc_c* bgcSrc, int bgcSrcCount, s16 param_4, f32 param_5) {
+ s16 angle;
+ cXyz startPos;
+ cXyz endPos;
+ cXyz temp_2c;
+ cXyz temp_20;
- /* 000008E8-00000928 .text chk_wall_pre__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cis */
- bool Bgc_c::chk_wall_pre(const Act_c* movebox, const BgcSrc_c* bgcSrc, int bgcSrcCount, s16 param_4) {
- wall_pos(movebox, bgcSrc, bgcSrcCount, param_4, 74.0f);
- return mWallIdx >= 0;
- }
+ angle = movebox->home.angle.y + param_4;
+ mWallIdx = -1;
+ mNearestWallDist = FLOAT_MAX;
+ mDoMtx_stack_c::YrotS((s16)angle);
+ mDoMtx_stack_c::XrotM(0x4000);
+ mDoMtx_stack_c::multVec(&cXyz::BaseY, &temp_20);
+ temp_20 *= param_5 + movebox->attr()->mScaleXZ * 0.5f;
- /* 00000928-00000CCC .text chk_wall_touch__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cs */
- bool Bgc_c::chk_wall_touch(const Act_c* movebox, const BgcSrc_c* bgcSrc, s16 dirAngle) {
- static dBgS_ObjLinChk touch_work;
- cXyz startPos;
- cXyz endPos;
- cXyz offset;
- cXyz temp_20;
- cXyz direction;
-
- s16 angle = movebox->home.angle.y + dirAngle;
+ for (int i = 0; i < bgcSrcCount; i++, bgcSrc++) {
+ mDoMtx_stack_c::XrotS(0x4000);
+ cXyz temp_14(bgcSrc->m0C, 0.0f, bgcSrc->m08);
+ mDoMtx_stack_c::multVec(&temp_14, &temp_2c);
mDoMtx_stack_c::YrotS((s16)angle);
- mDoMtx_stack_c::XrotM(0x4000);
- offset.set(bgcSrc->m0C, 0.0f, bgcSrc->m08);
- mDoMtx_stack_c::multVec(&cXyz::BaseY, &direction);
- direction *= 10.0f + movebox->attr()->mScaleXZ * 0.5f;
-
- mDoMtx_stack_c::XrotM(0x4000);
- offset.set(bgcSrc->m0C, 0.0f, bgcSrc->m08);
- mDoMtx_stack_c::multVec(&offset, &temp_20);
- mDoMtx_stack_c::YrotS((s16)angle);
- mDoMtx_stack_c::transM(temp_20);
+ mDoMtx_stack_c::transM(temp_2c);
mDoMtx_stack_c::scaleM(movebox->attr()->mScaleXZ, movebox->attr()->mScaleY, movebox->attr()->mScaleXZ);
mDoMtx_stack_c::transM(0.0f, 0.5f, 0.0f);
mDoMtx_stack_c::XrotM(0x4000);
- offset.set(bgcSrc->m04, 0.0f, bgcSrc->m00);
- mDoMtx_stack_c::multVec(&offset, &startPos);
+ temp_14.set(bgcSrc->m04, 0.0f, bgcSrc->m00);
+ mDoMtx_stack_c::multVec(&temp_14, &startPos);
startPos += movebox->current.pos;
- endPos = startPos + direction;
-
- touch_work.SetActorPid(movebox->base.base.mBsPcId);
- touch_work.Set(&startPos, &endPos, const_cast<Act_c*>(movebox));
- return dComIfG_Bgsp()->LineCross(&touch_work);
- }
-
- /* 00001258-000012E0 .text chk_wall_touch2__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cis */
- bool Bgc_c::chk_wall_touch2(const Act_c* movebox, const BgcSrc_c* bgcSrc, int bgcSrcCount, s16 dirAngle) {
- bool touch = false;
- for (int i = 0; i < bgcSrcCount; i++) {
- const BgcSrc_c* currBgcSrc = &bgcSrc[i];
- if (chk_wall_touch(movebox, currBgcSrc, dirAngle)) {
- touch = true;
- break;
+ endPos = startPos + temp_20;
+ M_wall_work[i].Set(&startPos, &endPos, const_cast<Act_c*>(movebox));
+ M_wall_work[i].SetActorPid(movebox->base.base.mBsPcId);
+ if (dComIfG_Bgsp()->LineCross(&M_wall_work[i])) {
+ mWallPos[i] = M_wall_work[i].GetCross();
+ f32 dist_sq = startPos.abs2(mWallPos[i]);
+ if (dist_sq < mNearestWallDist) {
+ mNearestWallDist = dist_sq;
+ mWallIdx = i;
}
+ } else {
+ mWallPos[i] = cXyz::Zero;
}
- return touch;
}
+}
+
+/* 00000748-000008E8 .text proc_vertical__Q212daObjMovebox5Bgc_cFPQ212daObjMovebox5Act_c */
+void Bgc_c::proc_vertical(Act_c* movebox) {
+ State_e prevStateFlags = mStateFlags;
+ mStateFlags = (State_e)0;
- const char* const Act_c::M_arcname[13] = {
- "Kkiba_00",
- "Osiblk",
- "Osiblk",
- "MpwrB",
- "Kkiba_00",
- "Hbox2",
- "Hjump",
- "Hjump",
- "Kkiba_00",
- "Kkiba_00",
- "Mmirror",
- "Osiblk",
- "Ecube",
- };
+ gnd_pos(
+ movebox,
+ movebox->attr()->m9A ? M_lin20 : M_lin5,
+ movebox->attr()->m9A ? ARRAY_SIZE(M_lin20)-2 : ARRAY_SIZE(M_lin5),
+ 100.0f
+ );
- const dCcD_SrcCyl Act_c::M_cyl_src = {
- // dCcD_SrcGObjInf
- {
- /* Flags */ 0,
- /* SrcObjAt Type */ 0,
- /* SrcObjAt Atp */ 0,
- /* SrcObjAt SPrm */ 0,
- /* SrcObjTg Type */ AT_TYPE_BOMB,
- /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsOther_e,
- /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsGrpAll_e,
- /* 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,
- },
- // cM3dGCylS
- {{
- /* Center */ {0.0f, 0.0f, 0.0f},
- /* Radius */ 75.0f,
- /* Height */ 150.0f,
- }},
- };
+ if (mMaxGroundIdx >= 0) {
+ if (mGroundY[mMaxGroundIdx] > movebox->current.pos.y) {
+ movebox->current.pos.y = mGroundY[mMaxGroundIdx];
+ cLib_onBit(mStateFlags, BgcState_ON_GROUND_e);
+ movebox->speed.y = 0.0f;
+ }
+ }
- const Attr_c Act_c::M_attr[] = {
- // TYPE_BREAKABLE_WOODEN_CRATE
- // Arcname: Kkiba_00
- {
- /* m00 */ 4,
- /* m02 */ 4,
- /* m04 */ 20,
- /* m06 */ 4,
- /* m08 */ 4,
- /* m0A */ 20,
- /* m0C */ 75.0f,
- /* m10 */ 90.0f,
- /* m14 */ -3.0f,
- /* m18 */ 0.005f,
- /* m1C */ 0.001f,
- /* m20 */ 0.0f,
- /* mLandSmokeScale */ 1.8f,
- /* m28 */ 3.9f,
- /* m2C */ -0.39f,
- /* m30 */ -0.2f,
- /* m34 */ 0.02f,
- /* m38 */ 1000,
- /* m3C */ 0.04f,
- /* m40 */ 0.013f,
- /* m44 */ 0.15f,
- /* m48 */ 0.1f,
- /* m4C */ 0.1f,
- /* m50 */ 0.06f,
- /* m54 */ 0.075f,
- /* mModelFileIndex */ dRes_INDEX_KKIBA_00_BDL_KKIBA_00_e,
- /* mDZBFileIndex */ dRes_INDEX_KKIBA_00_DZB_KKIBA_00_e,
- /* mDZBHeapSize */ DEMO_SELECT(0x1620, 0x8A0),
- /* mScaleY */ 150.0f,
- /* m68 */ 150.0f,
- /* m6C */ 1.0f/150.0f,
- /* mScaleXZ */ 150.0f,
- /* m74 */ 1.0f/150.0f,
- /* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
- /* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
- /* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
- /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
- /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
- /* mCullMinX */ -90,
- /* mCullMinY */ -1,
- /* mCullMinZ */ -90,
- /* mCullMaxX */ 90,
- /* mCullMaxY */ 151,
- /* mCullMaxZ */ 90,
- /* mbUseBGTevType */ false,
- /* mbCastsShadow */ false,
- /* m9A */ false,
- },
- // TYPE_BLACK_BOX
- // Arcname: Osiblk
- {
- /* m00 */ 4,
- /* m02 */ 4,
- /* m04 */ 20,
- /* m06 */ 4,
- /* m08 */ 4,
- /* m0A */ 20,
- /* m0C */ 75.0f,
- /* m10 */ 90.0f,
- /* m14 */ -5.0f,
- /* m18 */ 0.005f,
- /* m1C */ 0.001f,
- /* m20 */ 0.0f,
- /* mLandSmokeScale */ 1.8f,
- /* m28 */ 4.5f,
- /* m2C */ -0.5f,
- /* m30 */ -0.2f,
- /* m34 */ 0.02f,
- /* m38 */ 1000,
- /* m3C */ 0.04f,
- /* m40 */ 0.013f,
- /* m44 */ 0.15f,
- /* m48 */ 0.1f,
- /* m4C */ 0.1f,
- /* m50 */ 0.06f,
- /* m54 */ 0.075f,
- /* mModelFileIndex */ dRes_INDEX_OSIBLK_BDL_OBM_OSIHIKIBLK1_e,
- /* mDZBFileIndex */ dRes_INDEX_OSIBLK_DZB_OBM_OSIHIKIBLK1_e,
- /* mDZBHeapSize */ DEMO_SELECT(0x1620, 0x8A0),
- /* mScaleY */ 150.0f,
- /* m68 */ 150.0f,
- /* m6C */ 1.0f/150.0f,
- /* mScaleXZ */ 150.0f,
- /* m74 */ 1.0f/150.0f,
- /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
- /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
- /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
- /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
- /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
- /* mCullMinX */ -90,
- /* mCullMinY */ -1,
- /* mCullMinZ */ -90,
- /* mCullMaxX */ 90,
- /* mCullMaxY */ 151,
- /* mCullMaxZ */ 90,
- /* mbUseBGTevType */ false,
- /* mbCastsShadow */ false,
- /* m9A */ false,
-
- },
- // TYPE_BLACK_BOX_WITH_STATUE
- // Arcname: Osiblk
- {
- /* m00 */ 4,
- /* m02 */ 4,
- /* m04 */ 20,
- /* m06 */ 4,
- /* m08 */ 4,
- /* m0A */ 20,
- /* m0C */ 75.0f,
- /* m10 */ 90.0f,
- /* m14 */ -5.0f,
- /* m18 */ 0.005f,
- /* m1C */ 0.001f,
- /* m20 */ 0.0f,
- /* mLandSmokeScale */ 1.8f,
- /* m28 */ 4.5f,
- /* m2C */ -0.5f,
- /* m30 */ -0.2f,
- /* m34 */ 0.02f,
- /* m38 */ 1000,
- /* m3C */ 0.04f,
- /* m40 */ 0.013f,
- /* m44 */ 0.15f,
- /* m48 */ 0.1f,
- /* m4C */ 0.1f,
- /* m50 */ 0.06f,
- /* m54 */ 0.075f,
- /* mModelFileIndex */ dRes_INDEX_OSIBLK_BDL_OBM_OSIHIKIBLK2_e,
- /* mDZBFileIndex */ dRes_INDEX_OSIBLK_DZB_OBM_OSIHIKIBLK2_e,
- /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0x1560),
- /* mScaleY */ 150.0f,
- /* m68 */ 300.0f,
- /* m6C */ 1.0f/300.0f,
- /* mScaleXZ */ 150.0f,
- /* m74 */ 1.0f/150.0f,
- /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
- /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
- /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
- /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
- /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
- /* mCullMinX */ -90,
- /* mCullMinY */ -1,
- /* mCullMinZ */ -90,
- /* mCullMaxX */ 90,
- /* mCullMaxY */ 295,
- /* mCullMaxZ */ 90,
- /* mbUseBGTevType */ false,
- /* mbCastsShadow */ false,
- /* m9A */ false,
- },
- // TYPE_BIG_BLACK_BOX
- // Arcname: MpwrB
- {
- /* m00 */ 4,
- /* m02 */ 4,
- /* m04 */ 20,
- /* m06 */ 4,
- /* m08 */ 4,
- /* m0A */ 20,
- /* m0C */ 75.0f,
- /* m10 */ 170.0f,
- /* m14 */ -5.0f,
- /* m18 */ 0.005f,
- /* m1C */ 0.001f,
- /* m20 */ 0.0f,
- /* mLandSmokeScale */ 3.6f,
- /* m28 */ 4.5f,
- /* m2C */ -0.5f,
- /* m30 */ -0.2f,
- /* m34 */ 0.02f,
- /* m38 */ 1000,
- /* m3C */ 0.04f,
- /* m40 */ 0.013f,
- /* m44 */ 0.15f,
- /* m48 */ 0.1f,
- /* m4C */ 0.1f,
- /* m50 */ 0.06f,
- /* m54 */ 0.075f,
- /* mModelFileIndex */ dRes_INDEX_MPWRB_BDL_MPWRB_e,
- /* mDZBFileIndex */ dRes_INDEX_MPWRB_DZB_MPWRB_e,
- /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0x8A0),
- /* mScaleY */ 300.0f,
- /* m68 */ 300.0f,
- /* m6C */ 1.0f/300.0f,
- /* mScaleXZ */ 300.0f,
- /* m74 */ 1.0f/300.0f,
- /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
- /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
- /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
- /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
- /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
- /* mCullMinX */ -180,
- /* mCullMinY */ -1,
- /* mCullMinZ */ -180,
- /* mCullMaxX */ 180,
- /* mCullMaxY */ 301,
- /* mCullMaxZ */ 180,
- /* mbUseBGTevType */ false,
- /* mbCastsShadow */ false,
- /* m9A */ true,
- },
- // TYPE_WOODEN_CRATE
- // Arcname: Kkiba_00
- {
- /* m00 */ 4,
- /* m02 */ 4,
- /* m04 */ 20,
- /* m06 */ 4,
- /* m08 */ 4,
- /* m0A */ 20,
- /* m0C */ 75.0f,
- /* m10 */ 90.0f,
- /* m14 */ -3.0f,
- /* m18 */ 0.005f,
- /* m1C */ 0.001f,
- /* m20 */ 0.0f,
- /* mLandSmokeScale */ 1.8f,
- /* m28 */ 3.9f,
- /* m2C */ -0.39f,
- /* m30 */ -0.2f,
- /* m34 */ 0.02f,
- /* m38 */ 1000,
- /* m3C */ 0.04f,
- /* m40 */ 0.013f,
- /* m44 */ 0.15f,
- /* m48 */ 0.1f,
- /* m4C */ 0.1f,
- /* m50 */ 0.06f,
- /* m54 */ 0.075f,
- /* mModelFileIndex */ dRes_INDEX_KKIBA_00_BDL_KKIBA_00_e,
- /* mDZBFileIndex */ dRes_INDEX_KKIBA_00_DZB_KKIBA_00_e,
- /* mDZBHeapSize */ 0x1620,
- /* mScaleY */ 150.0f,
- /* m68 */ 150.0f,
- /* m6C */ 1.0f/150.0f,
- /* mScaleXZ */ 150.0f,
- /* m74 */ 1.0f/150.0f,
- /* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
- /* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
- /* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
- /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
- /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
- /* mCullMinX */ -90,
- /* mCullMinY */ -1,
- /* mCullMinZ */ -90,
- /* mCullMaxX */ 90,
- /* mCullMaxY */ 151,
- /* mCullMaxZ */ 90,
- /* mbUseBGTevType */ false,
- /* mbCastsShadow */ false,
- /* m9A */ false,
- },
- // TYPE_GOLDEN_CRATE
- // Arcname: Hbox2
- {
- /* m00 */ 4,
- /* m02 */ 4,
- /* m04 */ 20,
- /* m06 */ 4,
- /* m08 */ 4,
- /* m0A */ 20,
- /* m0C */ 75.0f,
- /* m10 */ 90.0f,
- /* m14 */ -3.0f,
- /* m18 */ 0.005f,
- /* m1C */ 0.001f,
- /* m20 */ 0.0f,
- /* mLandSmokeScale */ 1.8f,
- /* m28 */ 3.9f,
- /* m2C */ -0.39f,
- /* m30 */ -0.2f,
- /* m34 */ 0.02f,
- /* m38 */ 1000,
- /* m3C */ 0.04f,
- /* m40 */ 0.013f,
- /* m44 */ 0.15f,
- /* m48 */ 0.1f,
- /* m4C */ 0.1f,
- /* m50 */ 0.06f,
- /* m54 */ 0.075f,
- /* mModelFileIndex */ dRes_INDEX_HBOX2_BDL_HBOX2_e,
- /* mDZBFileIndex */ dRes_INDEX_HBOX2_DZB_HBOX2_e,
- /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0x8A0),
- /* mScaleY */ 150.0f,
- /* m68 */ 150.0f,
- /* m6C */ 1.0f/150.0f,
- /* mScaleXZ */ 150.0f,
- /* m74 */ 1.0f/150.0f,
- /* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
- /* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
- /* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
- /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
- /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
- /* mCullMinX */ -90,
- /* mCullMinY */ -1,
- /* mCullMinZ */ -90,
- /* mCullMaxX */ 90,
- /* mCullMaxY */ 151,
- /* mCullMaxZ */ 90,
- /* mbUseBGTevType */ false,
- /* mbCastsShadow */ false,
- /* m9A */ false,
- },
- // TYPE_METAL_BOX
- // Arcname: Hjump
- {
- /* m00 */ 4,
- /* m02 */ 4,
- /* m04 */ 20,
- /* m06 */ 4,
- /* m08 */ 4,
- /* m0A */ 20,
- /* m0C */ 75.0f,
- /* m10 */ 90.0f,
- /* m14 */ -3.0f,
- /* m18 */ 0.005f,
- /* m1C */ 0.001f,
- /* m20 */ 0.0f,
- /* mLandSmokeScale */ 1.8f,
- /* m28 */ 3.9f,
- /* m2C */ -0.39f,
- /* m30 */ -0.2f,
- /* m34 */ 0.02f,
- /* m38 */ 1000,
- /* m3C */ 0.04f,
- /* m40 */ 0.013f,
- /* m44 */ 0.15f,
- /* m48 */ 0.1f,
- /* m4C */ 0.1f,
- /* m50 */ 0.06f,
- /* m54 */ 0.075f,
- /* mModelFileIndex */ dRes_INDEX_HJUMP_BDL_HBOX1_e,
- /* mDZBFileIndex */ dRes_INDEX_HJUMP_DZB_HBOX1_e,
- /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0x7E0),
- /* mScaleY */ 150.0f,
- /* m68 */ 150.0f,
- /* m6C */ 1.0f/150.0f,
- /* mScaleXZ */ 150.0f,
- /* m74 */ 1.0f/150.0f,
- /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
- /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
- /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
- /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
- /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
- /* mCullMinX */ -90,
- /* mCullMinY */ -1,
- /* mCullMinZ */ -90,
- /* mCullMaxX */ 90,
- /* mCullMaxY */ 151,
- /* mCullMaxZ */ 90,
- /* mbUseBGTevType */ false,
- /* mbCastsShadow */ false,
- /* m9A */ false,
- },
- // TYPE_METAL_BOX_WITH_SPRING
- // Arcname: Hjump
- {
- /* m00 */ 4,
- /* m02 */ 4,
- /* m04 */ 20,
- /* m06 */ 4,
- /* m08 */ 4,
- /* m0A */ 20,
- /* m0C */ 75.0f,
- /* m10 */ 90.0f,
- /* m14 */ -3.0f,
- /* m18 */ 0.005f,
- /* m1C */ 0.001f,
- /* m20 */ 0.0f,
- /* mLandSmokeScale */ 1.8f,
- /* m28 */ 3.9f,
- /* m2C */ -0.39f,
- /* m30 */ -0.2f,
- /* m34 */ 0.02f,
- /* m38 */ 1000,
- /* m3C */ 0.04f,
- /* m40 */ 0.013f,
- /* m44 */ 0.15f,
- /* m48 */ 0.1f,
- /* m4C */ 0.1f,
- /* m50 */ 0.06f,
- /* m54 */ 0.075f,
- /* mModelFileIndex */ -1,
- /* mDZBFileIndex */ dRes_INDEX_HJUMP_DZB_HJUMP1A_e,
- /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0x320),
- /* mScaleY */ 150.0f,
- /* m68 */ 300.0f,
- /* m6C */ 1.0f/300.0f,
- /* mScaleXZ */ 150.0f,
- /* m74 */ 1.0f/150.0f,
- /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
- /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
- /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
- /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
- /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
- /* mCullMinX */ -90,
- /* mCullMinY */ -1,
- /* mCullMinZ */ -90,
- /* mCullMaxX */ 90,
- /* mCullMaxY */ 200,
- /* mCullMaxZ */ 90,
- /* mbUseBGTevType */ false,
- /* mbCastsShadow */ false,
- /* m9A */ false,
- },
- // TYPE_WOODEN_CRATE_2
- // Arcname: Kkiba_00
- {
- /* m00 */ 4,
- /* m02 */ 4,
- /* m04 */ 20,
- /* m06 */ 4,
- /* m08 */ 4,
- /* m0A */ 20,
- /* m0C */ 75.0f,
- /* m10 */ 90.0f,
- /* m14 */ -3.0f,
- /* m18 */ 0.005f,
- /* m1C */ 0.001f,
- /* m20 */ 0.0f,
- /* mLandSmokeScale */ 1.8f,
- /* m28 */ 3.9f,
- /* m2C */ -0.39f,
- /* m30 */ -0.2f,
- /* m34 */ 0.02f,
- /* m38 */ 1000,
- /* m3C */ 0.04f,
- /* m40 */ 0.013f,
- /* m44 */ 0.15f,
- /* m48 */ 0.1f,
- /* m4C */ 0.1f,
- /* m50 */ 0.06f,
- /* m54 */ 0.075f,
- /* mModelFileIndex */ dRes_INDEX_KKIBA_00_BDL_KKIBA_00_e,
- /* mDZBFileIndex */ dRes_INDEX_KKIBA_00_DZB_KKIBA_00_e,
- /* mDZBHeapSize */ 0x1620,
- /* mScaleY */ 150.0f,
- /* m68 */ 150.0f,
- /* m6C */ 1.0f/150.0f,
- /* mScaleXZ */ 150.0f,
- /* m74 */ 1.0f/150.0f,
- /* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
- /* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
- /* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
- /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
- /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
- /* mCullMinX */ -90,
- /* mCullMinY */ -1,
- /* mCullMinZ */ -90,
- /* mCullMaxX */ 90,
- /* mCullMaxY */ 151,
- /* mCullMaxZ */ 90,
- /* mbUseBGTevType */ false,
- /* mbCastsShadow */ false,
- /* m9A */ false,
- },
- // TYPE_WOODEN_CRATE_3
- // Arcname: Kkiba_00
- {
- /* m00 */ 4,
- /* m02 */ 4,
- /* m04 */ 20,
- /* m06 */ 4,
- /* m08 */ 4,
- /* m0A */ 20,
- /* m0C */ 75.0f,
- /* m10 */ 90.0f,
- /* m14 */ -3.0f,
- /* m18 */ 0.005f,
- /* m1C */ 0.001f,
- /* m20 */ 0.0f,
- /* mLandSmokeScale */ 1.8f,
- /* m28 */ 3.9f,
- /* m2C */ -0.39f,
- /* m30 */ -0.2f,
- /* m34 */ 0.02f,
- /* m38 */ 1000,
- /* m3C */ 0.04f,
- /* m40 */ 0.013f,
- /* m44 */ 0.15f,
- /* m48 */ 0.1f,
- /* m4C */ 0.1f,
- /* m50 */ 0.06f,
- /* m54 */ 0.075f,
- /* mModelFileIndex */ dRes_INDEX_KKIBA_00_BDL_KKIBA_00_e,
- /* mDZBFileIndex */ dRes_INDEX_KKIBA_00_DZB_KKIBA_00_e,
- /* mDZBHeapSize */ 0x1620,
- /* mScaleY */ 150.0f,
- /* m68 */ 150.0f,
- /* m6C */ 1.0f/150.0f,
- /* mScaleXZ */ 150.0f,
- /* m74 */ 1.0f/150.0f,
- /* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
- /* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
- /* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
- /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
- /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
- /* mCullMinX */ -90,
- /* mCullMinY */ -1,
- /* mCullMinZ */ -90,
- /* mCullMaxX */ 90,
- /* mCullMaxY */ 151,
- /* mCullMaxZ */ 90,
- /* mbUseBGTevType */ false,
- /* mbCastsShadow */ false,
- /* m9A */ false,
- },
- // TYPE_MIRROR
- // Arcname: Mmirror
- {
- /* m00 */ 4,
- /* m02 */ 4,
- /* m04 */ 20,
- /* m06 */ 4,
- /* m08 */ 4,
- /* m0A */ 20,
- /* m0C */ 75.0f,
- /* m10 */ 170.0f,
- /* m14 */ -5.0f,
- /* m18 */ 0.005f,
- /* m1C */ 0.001f,
- /* m20 */ 0.0f,
- /* mLandSmokeScale */ 1.8f,
- /* m28 */ 4.5f,
- /* m2C */ -0.5f,
- /* m30 */ -0.2f,
- /* m34 */ 0.02f,
- /* m38 */ 1000,
- /* m3C */ 0.04f,
- /* m40 */ 0.013f,
- /* m44 */ 0.15f,
- /* m48 */ 0.1f,
- /* m4C */ 0.1f,
- /* m50 */ 0.06f,
- /* m54 */ 0.075f,
- /* mModelFileIndex */ -1,
- /* mDZBFileIndex */ dRes_INDEX_MMIRROR_DZB_MMRR_e,
- /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0xD40),
- /* mScaleY */ 300.0f,
- /* m68 */ 450.0f,
- /* m6C */ 1.0f/450.0f,
- /* mScaleXZ */ 300.0f,
- /* m74 */ 1.0f/300.0f,
- /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
- /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
- /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
- /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
- /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
- /* mCullMinX */ -150,
- /* mCullMinY */ -1,
- /* mCullMinZ */ -150,
- /* mCullMaxX */ 150,
- /* mCullMaxY */ 681,
- /* mCullMaxZ */ 150,
- /* mbUseBGTevType */ false,
- /* mbCastsShadow */ false,
- /* m9A */ true,
- },
- // TYPE_BLACK_BOX_WITH_MKIE
- // Arcname: Osiblk
- {
- /* m00 */ 4,
- /* m02 */ 4,
- /* m04 */ 20,
- /* m06 */ 4,
- /* m08 */ 4,
- /* m0A */ 20,
- /* m0C */ 75.0f,
- /* m10 */ 90.0f,
- /* m14 */ -5.0f,
- /* m18 */ 0.005f,
- /* m1C */ 0.001f,
- /* m20 */ 0.0f,
- /* mLandSmokeScale */ 1.8f,
- /* m28 */ 4.5f,
- /* m2C */ -0.5f,
- /* m30 */ -0.2f,
- /* m34 */ 0.02f,
- /* m38 */ 1000,
- /* m3C */ 0.04f,
- /* m40 */ 0.013f,
- /* m44 */ 0.15f,
- /* m48 */ 0.1f,
- /* m4C */ 0.1f,
- /* m50 */ 0.06f,
- /* m54 */ 0.075f,
- /* mModelFileIndex */ dRes_INDEX_OSIBLK_BDL_OBM_OSIHIKIBLK1_e,
- /* mDZBFileIndex */ dRes_INDEX_OSIBLK_DZB_OBM_OSIHIKIBLK1_e,
- /* mDZBHeapSize */ DEMO_SELECT(0x1620, 0x8A0),
- /* mScaleY */ 150.0f,
- /* m68 */ 350.0f,
- /* m6C */ 1.0f/350.0f,
- /* mScaleXZ */ 150.0f,
- /* m74 */ 1.0f/150.0f,
- /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
- /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
- /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
- /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
- /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
- /* mCullMinX */ -90,
- /* mCullMinY */ -1,
- /* mCullMinZ */ -90,
- /* mCullMaxX */ 90,
- /* mCullMaxY */ 151,
- /* mCullMaxZ */ 90,
- /* mbUseBGTevType */ false,
- /* mbCastsShadow */ false,
- /* m9A */ false,
- },
- // TYPE_MOSSY_BLACK_BOX
- // Arcname: Ecube
- {
- /* m00 */ 4,
- /* m02 */ 4,
- /* m04 */ 20,
- /* m06 */ 4,
- /* m08 */ 4,
- /* m0A */ 20,
- /* m0C */ 75.0f,
- /* m10 */ 90.0f,
- /* m14 */ -5.0f,
- /* m18 */ 0.005f,
- /* m1C */ 0.001f,
- /* m20 */ 0.0f,
- /* mLandSmokeScale */ 1.8f,
- /* m28 */ 4.5f,
- /* m2C */ -0.5f,
- /* m30 */ -0.2f,
- /* m34 */ 0.02f,
- /* m38 */ 1000,
- /* m3C */ 0.04f,
- /* m40 */ 0.013f,
- /* m44 */ 0.15f,
- /* m48 */ 0.1f,
- /* m4C */ 0.1f,
- /* m50 */ 0.06f,
- /* m54 */ 0.075f,
- /* mModelFileIndex */ dRes_INDEX_ECUBE_BDL_ECUBE_e,
- /* mDZBFileIndex */ dRes_INDEX_ECUBE_DZB_ECUBE_e,
- /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0x8A0),
- /* mScaleY */ 150.0f,
- /* m68 */ 150.0f,
- /* m6C */ 1.0f/150.0f,
- /* mScaleXZ */ 150.0f,
- /* m74 */ 1.0f/150.0f,
- /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
- /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
- /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
- /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
- /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
- /* mCullMinX */ -90,
- /* mCullMinY */ -1,
- /* mCullMinZ */ -90,
- /* mCullMaxX */ 90,
- /* mCullMaxY */ 151,
- /* mCullMaxZ */ 90,
- /* mbUseBGTevType */ true,
- /* mbCastsShadow */ true,
- /* m9A */ false,
- },
- };
+ wrt_pos(movebox->current.pos);
- void Act_c::mode_proc_call() {
- static ModeFunc mode_proc[] = {
- &Act_c::mode_wait,
- &Act_c::mode_walk,
- &Act_c::mode_afl,
- };
- (this->*mode_proc[mMode])();
+ if (cLib_checkBit(mStateFlags, BgcState_ABOVE_WATER_e) && mWaterY > movebox->current.pos.y) {
+ cLib_onBit(mStateFlags, BgcState_IN_WATER_e);
}
-
- /* 000012E0-00001308 .text prm_get_swSave1__Q212daObjMovebox5Act_cCFv */
- int Act_c::prm_get_swSave1() const {
- return prm_get_swSave();
+ if (!cLib_checkBit(mStateFlags, BgcState_ON_GROUND_e) && cLib_checkBit(prevStateFlags, BgcState_ON_GROUND_e)) {
+ cLib_onBit(mStateFlags, BgcState_JUST_LEFT_GROUND_e);
+ movebox->speed.y = movebox->attr()->m20;
+ }
+ if (cLib_checkBit(mStateFlags, BgcState_ON_GROUND_e) && !cLib_checkBit(prevStateFlags, BgcState_ON_GROUND_e)) {
+ cLib_onBit(mStateFlags, BgcState_JUST_HIT_GROUND_e);
+ }
+ if (cLib_checkBit(mStateFlags, BgcState_IN_WATER_e) && !cLib_checkBit(prevStateFlags, BgcState_IN_WATER_e)) {
+ cLib_onBit(mStateFlags, BgcState_JUST_HIT_WATER_e);
+ }
+ if (cLib_checkBit(mStateFlags, BgcState_ON_GROUND_e) && mMaxGroundIdx >= 0) {
+ dComIfG_Bgsp()->RideCallBack(M_gnd_work[mMaxGroundIdx], movebox);
}
+}
+
+/* 000008E8-00000928 .text chk_wall_pre__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cis */
+bool Bgc_c::chk_wall_pre(const Act_c* movebox, const BgcSrc_c* bgcSrc, int bgcSrcCount, s16 param_4) {
+ wall_pos(movebox, bgcSrc, bgcSrcCount, param_4, 74.0f);
+ return mWallIdx >= 0;
+}
+
+/* 00000928-00000CCC .text chk_wall_touch__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cs */
+bool Bgc_c::chk_wall_touch(const Act_c* movebox, const BgcSrc_c* bgcSrc, s16 dirAngle) {
+ static dBgS_ObjLinChk touch_work;
+ cXyz startPos;
+ cXyz endPos;
+ cXyz offset;
+ cXyz temp_20;
+ cXyz direction;
- /* 00001308-00001380 .text prmZ_init__Q212daObjMovebox5Act_cFv */
- void Act_c::prmZ_init() {
- if (mbPrmZInitialized) {
- return;
- }
- mbPrmZInitialized = true;
-
- int switchEnablesSpawn = prm_get_dmy();
- if (switchEnablesSpawn) {
- // The appearing/disappearing type of box does not take pathId or swSave2 params.
- mPrmZ = 0xFFFF;
- } else {
- mPrmZ = home.angle.z;
+ s16 angle = movebox->home.angle.y + dirAngle;
+ mDoMtx_stack_c::YrotS((s16)angle);
+ mDoMtx_stack_c::XrotM(0x4000);
+ offset.set(bgcSrc->m0C, 0.0f, bgcSrc->m08);
+ mDoMtx_stack_c::multVec(&cXyz::BaseY, &direction);
+ direction *= 10.0f + movebox->attr()->mScaleXZ * 0.5f;
+
+ mDoMtx_stack_c::XrotM(0x4000);
+ offset.set(bgcSrc->m0C, 0.0f, bgcSrc->m08);
+ mDoMtx_stack_c::multVec(&offset, &temp_20);
+ mDoMtx_stack_c::YrotS((s16)angle);
+ mDoMtx_stack_c::transM(temp_20);
+ mDoMtx_stack_c::scaleM(movebox->attr()->mScaleXZ, movebox->attr()->mScaleY, movebox->attr()->mScaleXZ);
+ mDoMtx_stack_c::transM(0.0f, 0.5f, 0.0f);
+ mDoMtx_stack_c::XrotM(0x4000);
+ offset.set(bgcSrc->m04, 0.0f, bgcSrc->m00);
+ mDoMtx_stack_c::multVec(&offset, &startPos);
+ startPos += movebox->current.pos;
+ endPos = startPos + direction;
+
+ touch_work.SetActorPid(movebox->base.base.mBsPcId);
+ touch_work.Set(&startPos, &endPos, const_cast<Act_c*>(movebox));
+ return dComIfG_Bgsp()->LineCross(&touch_work);
+}
+
+/* 00001258-000012E0 .text chk_wall_touch2__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cis */
+bool Bgc_c::chk_wall_touch2(const Act_c* movebox, const BgcSrc_c* bgcSrc, int bgcSrcCount, s16 dirAngle) {
+ bool touch = false;
+ for (int i = 0; i < bgcSrcCount; i++) {
+ const BgcSrc_c* currBgcSrc = &bgcSrc[i];
+ if (chk_wall_touch(movebox, currBgcSrc, dirAngle)) {
+ touch = true;
+ break;
}
-
- home.angle.z = 0;
- current.angle.z = 0;
- shape_angle.z = 0;
}
+ return touch;
+}
+
+const char* const Act_c::M_arcname[13] = {
+ "Kkiba_00",
+ "Osiblk",
+ "Osiblk",
+ "MpwrB",
+ "Kkiba_00",
+ "Hbox2",
+ "Hjump",
+ "Hjump",
+ "Kkiba_00",
+ "Kkiba_00",
+ "Mmirror",
+ "Osiblk",
+ "Ecube",
+};
+
+const dCcD_SrcCyl Act_c::M_cyl_src = {
+ // dCcD_SrcGObjInf
+ {
+ /* Flags */ 0,
+ /* SrcObjAt Type */ 0,
+ /* SrcObjAt Atp */ 0,
+ /* SrcObjAt SPrm */ 0,
+ /* SrcObjTg Type */ AT_TYPE_BOMB,
+ /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsOther_e,
+ /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsGrpAll_e,
+ /* 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,
+ },
+ // cM3dGCylS
+ {{
+ /* Center */ {0.0f, 0.0f, 0.0f},
+ /* Radius */ 75.0f,
+ /* Height */ 150.0f,
+ }},
+};
+
+const Attr_c Act_c::M_attr[] = {
+ // TYPE_BREAKABLE_WOODEN_CRATE
+ // Arcname: Kkiba_00
+ {
+ /* m00 */ 4,
+ /* m02 */ 4,
+ /* m04 */ 20,
+ /* m06 */ 4,
+ /* m08 */ 4,
+ /* m0A */ 20,
+ /* m0C */ 75.0f,
+ /* m10 */ 90.0f,
+ /* m14 */ -3.0f,
+ /* m18 */ 0.005f,
+ /* m1C */ 0.001f,
+ /* m20 */ 0.0f,
+ /* mLandSmokeScale */ 1.8f,
+ /* m28 */ 3.9f,
+ /* m2C */ -0.39f,
+ /* m30 */ -0.2f,
+ /* m34 */ 0.02f,
+ /* m38 */ 1000,
+ /* m3C */ 0.04f,
+ /* m40 */ 0.013f,
+ /* m44 */ 0.15f,
+ /* m48 */ 0.1f,
+ /* m4C */ 0.1f,
+ /* m50 */ 0.06f,
+ /* m54 */ 0.075f,
+ /* mModelFileIndex */ dRes_INDEX_KKIBA_00_BDL_KKIBA_00_e,
+ /* mDZBFileIndex */ dRes_INDEX_KKIBA_00_DZB_KKIBA_00_e,
+ /* mDZBHeapSize */ DEMO_SELECT(0x1620, 0x8A0),
+ /* mScaleY */ 150.0f,
+ /* m68 */ 150.0f,
+ /* m6C */ 1.0f/150.0f,
+ /* mScaleXZ */ 150.0f,
+ /* m74 */ 1.0f/150.0f,
+ /* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
+ /* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
+ /* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
+ /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
+ /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
+ /* mCullMinX */ -90,
+ /* mCullMinY */ -1,
+ /* mCullMinZ */ -90,
+ /* mCullMaxX */ 90,
+ /* mCullMaxY */ 151,
+ /* mCullMaxZ */ 90,
+ /* mbUseBGTevType */ false,
+ /* mbCastsShadow */ false,
+ /* m9A */ false,
+ },
+ // TYPE_BLACK_BOX
+ // Arcname: Osiblk
+ {
+ /* m00 */ 4,
+ /* m02 */ 4,
+ /* m04 */ 20,
+ /* m06 */ 4,
+ /* m08 */ 4,
+ /* m0A */ 20,
+ /* m0C */ 75.0f,
+ /* m10 */ 90.0f,
+ /* m14 */ -5.0f,
+ /* m18 */ 0.005f,
+ /* m1C */ 0.001f,
+ /* m20 */ 0.0f,
+ /* mLandSmokeScale */ 1.8f,
+ /* m28 */ 4.5f,
+ /* m2C */ -0.5f,
+ /* m30 */ -0.2f,
+ /* m34 */ 0.02f,
+ /* m38 */ 1000,
+ /* m3C */ 0.04f,
+ /* m40 */ 0.013f,
+ /* m44 */ 0.15f,
+ /* m48 */ 0.1f,
+ /* m4C */ 0.1f,
+ /* m50 */ 0.06f,
+ /* m54 */ 0.075f,
+ /* mModelFileIndex */ dRes_INDEX_OSIBLK_BDL_OBM_OSIHIKIBLK1_e,
+ /* mDZBFileIndex */ dRes_INDEX_OSIBLK_DZB_OBM_OSIHIKIBLK1_e,
+ /* mDZBHeapSize */ DEMO_SELECT(0x1620, 0x8A0),
+ /* mScaleY */ 150.0f,
+ /* m68 */ 150.0f,
+ /* m6C */ 1.0f/150.0f,
+ /* mScaleXZ */ 150.0f,
+ /* m74 */ 1.0f/150.0f,
+ /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
+ /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
+ /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
+ /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
+ /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
+ /* mCullMinX */ -90,
+ /* mCullMinY */ -1,
+ /* mCullMinZ */ -90,
+ /* mCullMaxX */ 90,
+ /* mCullMaxY */ 151,
+ /* mCullMaxZ */ 90,
+ /* mbUseBGTevType */ false,
+ /* mbCastsShadow */ false,
+ /* m9A */ false,
+
+ },
+ // TYPE_BLACK_BOX_WITH_STATUE
+ // Arcname: Osiblk
+ {
+ /* m00 */ 4,
+ /* m02 */ 4,
+ /* m04 */ 20,
+ /* m06 */ 4,
+ /* m08 */ 4,
+ /* m0A */ 20,
+ /* m0C */ 75.0f,
+ /* m10 */ 90.0f,
+ /* m14 */ -5.0f,
+ /* m18 */ 0.005f,
+ /* m1C */ 0.001f,
+ /* m20 */ 0.0f,
+ /* mLandSmokeScale */ 1.8f,
+ /* m28 */ 4.5f,
+ /* m2C */ -0.5f,
+ /* m30 */ -0.2f,
+ /* m34 */ 0.02f,
+ /* m38 */ 1000,
+ /* m3C */ 0.04f,
+ /* m40 */ 0.013f,
+ /* m44 */ 0.15f,
+ /* m48 */ 0.1f,
+ /* m4C */ 0.1f,
+ /* m50 */ 0.06f,
+ /* m54 */ 0.075f,
+ /* mModelFileIndex */ dRes_INDEX_OSIBLK_BDL_OBM_OSIHIKIBLK2_e,
+ /* mDZBFileIndex */ dRes_INDEX_OSIBLK_DZB_OBM_OSIHIKIBLK2_e,
+ /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0x1560),
+ /* mScaleY */ 150.0f,
+ /* m68 */ 300.0f,
+ /* m6C */ 1.0f/300.0f,
+ /* mScaleXZ */ 150.0f,
+ /* m74 */ 1.0f/150.0f,
+ /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
+ /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
+ /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
+ /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
+ /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
+ /* mCullMinX */ -90,
+ /* mCullMinY */ -1,
+ /* mCullMinZ */ -90,
+ /* mCullMaxX */ 90,
+ /* mCullMaxY */ 295,
+ /* mCullMaxZ */ 90,
+ /* mbUseBGTevType */ false,
+ /* mbCastsShadow */ false,
+ /* m9A */ false,
+ },
+ // TYPE_BIG_BLACK_BOX
+ // Arcname: MpwrB
+ {
+ /* m00 */ 4,
+ /* m02 */ 4,
+ /* m04 */ 20,
+ /* m06 */ 4,
+ /* m08 */ 4,
+ /* m0A */ 20,
+ /* m0C */ 75.0f,
+ /* m10 */ 170.0f,
+ /* m14 */ -5.0f,
+ /* m18 */ 0.005f,
+ /* m1C */ 0.001f,
+ /* m20 */ 0.0f,
+ /* mLandSmokeScale */ 3.6f,
+ /* m28 */ 4.5f,
+ /* m2C */ -0.5f,
+ /* m30 */ -0.2f,
+ /* m34 */ 0.02f,
+ /* m38 */ 1000,
+ /* m3C */ 0.04f,
+ /* m40 */ 0.013f,
+ /* m44 */ 0.15f,
+ /* m48 */ 0.1f,
+ /* m4C */ 0.1f,
+ /* m50 */ 0.06f,
+ /* m54 */ 0.075f,
+ /* mModelFileIndex */ dRes_INDEX_MPWRB_BDL_MPWRB_e,
+ /* mDZBFileIndex */ dRes_INDEX_MPWRB_DZB_MPWRB_e,
+ /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0x8A0),
+ /* mScaleY */ 300.0f,
+ /* m68 */ 300.0f,
+ /* m6C */ 1.0f/300.0f,
+ /* mScaleXZ */ 300.0f,
+ /* m74 */ 1.0f/300.0f,
+ /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
+ /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
+ /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
+ /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
+ /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
+ /* mCullMinX */ -180,
+ /* mCullMinY */ -1,
+ /* mCullMinZ */ -180,
+ /* mCullMaxX */ 180,
+ /* mCullMaxY */ 301,
+ /* mCullMaxZ */ 180,
+ /* mbUseBGTevType */ false,
+ /* mbCastsShadow */ false,
+ /* m9A */ true,
+ },
+ // TYPE_WOODEN_CRATE
+ // Arcname: Kkiba_00
+ {
+ /* m00 */ 4,
+ /* m02 */ 4,
+ /* m04 */ 20,
+ /* m06 */ 4,
+ /* m08 */ 4,
+ /* m0A */ 20,
+ /* m0C */ 75.0f,
+ /* m10 */ 90.0f,
+ /* m14 */ -3.0f,
+ /* m18 */ 0.005f,
+ /* m1C */ 0.001f,
+ /* m20 */ 0.0f,
+ /* mLandSmokeScale */ 1.8f,
+ /* m28 */ 3.9f,
+ /* m2C */ -0.39f,
+ /* m30 */ -0.2f,
+ /* m34 */ 0.02f,
+ /* m38 */ 1000,
+ /* m3C */ 0.04f,
+ /* m40 */ 0.013f,
+ /* m44 */ 0.15f,
+ /* m48 */ 0.1f,
+ /* m4C */ 0.1f,
+ /* m50 */ 0.06f,
+ /* m54 */ 0.075f,
+ /* mModelFileIndex */ dRes_INDEX_KKIBA_00_BDL_KKIBA_00_e,
+ /* mDZBFileIndex */ dRes_INDEX_KKIBA_00_DZB_KKIBA_00_e,
+ /* mDZBHeapSize */ 0x1620,
+ /* mScaleY */ 150.0f,
+ /* m68 */ 150.0f,
+ /* m6C */ 1.0f/150.0f,
+ /* mScaleXZ */ 150.0f,
+ /* m74 */ 1.0f/150.0f,
+ /* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
+ /* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
+ /* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
+ /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
+ /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
+ /* mCullMinX */ -90,
+ /* mCullMinY */ -1,
+ /* mCullMinZ */ -90,
+ /* mCullMaxX */ 90,
+ /* mCullMaxY */ 151,
+ /* mCullMaxZ */ 90,
+ /* mbUseBGTevType */ false,
+ /* mbCastsShadow */ false,
+ /* m9A */ false,
+ },
+ // TYPE_GOLDEN_CRATE
+ // Arcname: Hbox2
+ {
+ /* m00 */ 4,
+ /* m02 */ 4,
+ /* m04 */ 20,
+ /* m06 */ 4,
+ /* m08 */ 4,
+ /* m0A */ 20,
+ /* m0C */ 75.0f,
+ /* m10 */ 90.0f,
+ /* m14 */ -3.0f,
+ /* m18 */ 0.005f,
+ /* m1C */ 0.001f,
+ /* m20 */ 0.0f,
+ /* mLandSmokeScale */ 1.8f,
+ /* m28 */ 3.9f,
+ /* m2C */ -0.39f,
+ /* m30 */ -0.2f,
+ /* m34 */ 0.02f,
+ /* m38 */ 1000,
+ /* m3C */ 0.04f,
+ /* m40 */ 0.013f,
+ /* m44 */ 0.15f,
+ /* m48 */ 0.1f,
+ /* m4C */ 0.1f,
+ /* m50 */ 0.06f,
+ /* m54 */ 0.075f,
+ /* mModelFileIndex */ dRes_INDEX_HBOX2_BDL_HBOX2_e,
+ /* mDZBFileIndex */ dRes_INDEX_HBOX2_DZB_HBOX2_e,
+ /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0x8A0),
+ /* mScaleY */ 150.0f,
+ /* m68 */ 150.0f,
+ /* m6C */ 1.0f/150.0f,
+ /* mScaleXZ */ 150.0f,
+ /* m74 */ 1.0f/150.0f,
+ /* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
+ /* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
+ /* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
+ /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
+ /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
+ /* mCullMinX */ -90,
+ /* mCullMinY */ -1,
+ /* mCullMinZ */ -90,
+ /* mCullMaxX */ 90,
+ /* mCullMaxY */ 151,
+ /* mCullMaxZ */ 90,
+ /* mbUseBGTevType */ false,
+ /* mbCastsShadow */ false,
+ /* m9A */ false,
+ },
+ // TYPE_METAL_BOX
+ // Arcname: Hjump
+ {
+ /* m00 */ 4,
+ /* m02 */ 4,
+ /* m04 */ 20,
+ /* m06 */ 4,
+ /* m08 */ 4,
+ /* m0A */ 20,
+ /* m0C */ 75.0f,
+ /* m10 */ 90.0f,
+ /* m14 */ -3.0f,
+ /* m18 */ 0.005f,
+ /* m1C */ 0.001f,
+ /* m20 */ 0.0f,
+ /* mLandSmokeScale */ 1.8f,
+ /* m28 */ 3.9f,
+ /* m2C */ -0.39f,
+ /* m30 */ -0.2f,
+ /* m34 */ 0.02f,
+ /* m38 */ 1000,
+ /* m3C */ 0.04f,
+ /* m40 */ 0.013f,
+ /* m44 */ 0.15f,
+ /* m48 */ 0.1f,
+ /* m4C */ 0.1f,
+ /* m50 */ 0.06f,
+ /* m54 */ 0.075f,
+ /* mModelFileIndex */ dRes_INDEX_HJUMP_BDL_HBOX1_e,
+ /* mDZBFileIndex */ dRes_INDEX_HJUMP_DZB_HBOX1_e,
+ /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0x7E0),
+ /* mScaleY */ 150.0f,
+ /* m68 */ 150.0f,
+ /* m6C */ 1.0f/150.0f,
+ /* mScaleXZ */ 150.0f,
+ /* m74 */ 1.0f/150.0f,
+ /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
+ /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
+ /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
+ /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
+ /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
+ /* mCullMinX */ -90,
+ /* mCullMinY */ -1,
+ /* mCullMinZ */ -90,
+ /* mCullMaxX */ 90,
+ /* mCullMaxY */ 151,
+ /* mCullMaxZ */ 90,
+ /* mbUseBGTevType */ false,
+ /* mbCastsShadow */ false,
+ /* m9A */ false,
+ },
+ // TYPE_METAL_BOX_WITH_SPRING
+ // Arcname: Hjump
+ {
+ /* m00 */ 4,
+ /* m02 */ 4,
+ /* m04 */ 20,
+ /* m06 */ 4,
+ /* m08 */ 4,
+ /* m0A */ 20,
+ /* m0C */ 75.0f,
+ /* m10 */ 90.0f,
+ /* m14 */ -3.0f,
+ /* m18 */ 0.005f,
+ /* m1C */ 0.001f,
+ /* m20 */ 0.0f,
+ /* mLandSmokeScale */ 1.8f,
+ /* m28 */ 3.9f,
+ /* m2C */ -0.39f,
+ /* m30 */ -0.2f,
+ /* m34 */ 0.02f,
+ /* m38 */ 1000,
+ /* m3C */ 0.04f,
+ /* m40 */ 0.013f,
+ /* m44 */ 0.15f,
+ /* m48 */ 0.1f,
+ /* m4C */ 0.1f,
+ /* m50 */ 0.06f,
+ /* m54 */ 0.075f,
+ /* mModelFileIndex */ -1,
+ /* mDZBFileIndex */ dRes_INDEX_HJUMP_DZB_HJUMP1A_e,
+ /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0x320),
+ /* mScaleY */ 150.0f,
+ /* m68 */ 300.0f,
+ /* m6C */ 1.0f/300.0f,
+ /* mScaleXZ */ 150.0f,
+ /* m74 */ 1.0f/150.0f,
+ /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
+ /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
+ /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
+ /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
+ /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
+ /* mCullMinX */ -90,
+ /* mCullMinY */ -1,
+ /* mCullMinZ */ -90,
+ /* mCullMaxX */ 90,
+ /* mCullMaxY */ 200,
+ /* mCullMaxZ */ 90,
+ /* mbUseBGTevType */ false,
+ /* mbCastsShadow */ false,
+ /* m9A */ false,
+ },
+ // TYPE_WOODEN_CRATE_2
+ // Arcname: Kkiba_00
+ {
+ /* m00 */ 4,
+ /* m02 */ 4,
+ /* m04 */ 20,
+ /* m06 */ 4,
+ /* m08 */ 4,
+ /* m0A */ 20,
+ /* m0C */ 75.0f,
+ /* m10 */ 90.0f,
+ /* m14 */ -3.0f,
+ /* m18 */ 0.005f,
+ /* m1C */ 0.001f,
+ /* m20 */ 0.0f,
+ /* mLandSmokeScale */ 1.8f,
+ /* m28 */ 3.9f,
+ /* m2C */ -0.39f,
+ /* m30 */ -0.2f,
+ /* m34 */ 0.02f,
+ /* m38 */ 1000,
+ /* m3C */ 0.04f,
+ /* m40 */ 0.013f,
+ /* m44 */ 0.15f,
+ /* m48 */ 0.1f,
+ /* m4C */ 0.1f,
+ /* m50 */ 0.06f,
+ /* m54 */ 0.075f,
+ /* mModelFileIndex */ dRes_INDEX_KKIBA_00_BDL_KKIBA_00_e,
+ /* mDZBFileIndex */ dRes_INDEX_KKIBA_00_DZB_KKIBA_00_e,
+ /* mDZBHeapSize */ 0x1620,
+ /* mScaleY */ 150.0f,
+ /* m68 */ 150.0f,
+ /* m6C */ 1.0f/150.0f,
+ /* mScaleXZ */ 150.0f,
+ /* m74 */ 1.0f/150.0f,
+ /* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
+ /* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
+ /* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
+ /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
+ /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
+ /* mCullMinX */ -90,
+ /* mCullMinY */ -1,
+ /* mCullMinZ */ -90,
+ /* mCullMaxX */ 90,
+ /* mCullMaxY */ 151,
+ /* mCullMaxZ */ 90,
+ /* mbUseBGTevType */ false,
+ /* mbCastsShadow */ false,
+ /* m9A */ false,
+ },
+ // TYPE_WOODEN_CRATE_3
+ // Arcname: Kkiba_00
+ {
+ /* m00 */ 4,
+ /* m02 */ 4,
+ /* m04 */ 20,
+ /* m06 */ 4,
+ /* m08 */ 4,
+ /* m0A */ 20,
+ /* m0C */ 75.0f,
+ /* m10 */ 90.0f,
+ /* m14 */ -3.0f,
+ /* m18 */ 0.005f,
+ /* m1C */ 0.001f,
+ /* m20 */ 0.0f,
+ /* mLandSmokeScale */ 1.8f,
+ /* m28 */ 3.9f,
+ /* m2C */ -0.39f,
+ /* m30 */ -0.2f,
+ /* m34 */ 0.02f,
+ /* m38 */ 1000,
+ /* m3C */ 0.04f,
+ /* m40 */ 0.013f,
+ /* m44 */ 0.15f,
+ /* m48 */ 0.1f,
+ /* m4C */ 0.1f,
+ /* m50 */ 0.06f,
+ /* m54 */ 0.075f,
+ /* mModelFileIndex */ dRes_INDEX_KKIBA_00_BDL_KKIBA_00_e,
+ /* mDZBFileIndex */ dRes_INDEX_KKIBA_00_DZB_KKIBA_00_e,
+ /* mDZBHeapSize */ 0x1620,
+ /* mScaleY */ 150.0f,
+ /* m68 */ 150.0f,
+ /* m6C */ 1.0f/150.0f,
+ /* mScaleXZ */ 150.0f,
+ /* m74 */ 1.0f/150.0f,
+ /* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
+ /* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
+ /* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
+ /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
+ /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
+ /* mCullMinX */ -90,
+ /* mCullMinY */ -1,
+ /* mCullMinZ */ -90,
+ /* mCullMaxX */ 90,
+ /* mCullMaxY */ 151,
+ /* mCullMaxZ */ 90,
+ /* mbUseBGTevType */ false,
+ /* mbCastsShadow */ false,
+ /* m9A */ false,
+ },
+ // TYPE_MIRROR
+ // Arcname: Mmirror
+ {
+ /* m00 */ 4,
+ /* m02 */ 4,
+ /* m04 */ 20,
+ /* m06 */ 4,
+ /* m08 */ 4,
+ /* m0A */ 20,
+ /* m0C */ 75.0f,
+ /* m10 */ 170.0f,
+ /* m14 */ -5.0f,
+ /* m18 */ 0.005f,
+ /* m1C */ 0.001f,
+ /* m20 */ 0.0f,
+ /* mLandSmokeScale */ 1.8f,
+ /* m28 */ 4.5f,
+ /* m2C */ -0.5f,
+ /* m30 */ -0.2f,
+ /* m34 */ 0.02f,
+ /* m38 */ 1000,
+ /* m3C */ 0.04f,
+ /* m40 */ 0.013f,
+ /* m44 */ 0.15f,
+ /* m48 */ 0.1f,
+ /* m4C */ 0.1f,
+ /* m50 */ 0.06f,
+ /* m54 */ 0.075f,
+ /* mModelFileIndex */ -1,
+ /* mDZBFileIndex */ dRes_INDEX_MMIRROR_DZB_MMRR_e,
+ /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0xD40),
+ /* mScaleY */ 300.0f,
+ /* m68 */ 450.0f,
+ /* m6C */ 1.0f/450.0f,
+ /* mScaleXZ */ 300.0f,
+ /* m74 */ 1.0f/300.0f,
+ /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
+ /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
+ /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
+ /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
+ /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
+ /* mCullMinX */ -150,
+ /* mCullMinY */ -1,
+ /* mCullMinZ */ -150,
+ /* mCullMaxX */ 150,
+ /* mCullMaxY */ 681,
+ /* mCullMaxZ */ 150,
+ /* mbUseBGTevType */ false,
+ /* mbCastsShadow */ false,
+ /* m9A */ true,
+ },
+ // TYPE_BLACK_BOX_WITH_MKIE
+ // Arcname: Osiblk
+ {
+ /* m00 */ 4,
+ /* m02 */ 4,
+ /* m04 */ 20,
+ /* m06 */ 4,
+ /* m08 */ 4,
+ /* m0A */ 20,
+ /* m0C */ 75.0f,
+ /* m10 */ 90.0f,
+ /* m14 */ -5.0f,
+ /* m18 */ 0.005f,
+ /* m1C */ 0.001f,
+ /* m20 */ 0.0f,
+ /* mLandSmokeScale */ 1.8f,
+ /* m28 */ 4.5f,
+ /* m2C */ -0.5f,
+ /* m30 */ -0.2f,
+ /* m34 */ 0.02f,
+ /* m38 */ 1000,
+ /* m3C */ 0.04f,
+ /* m40 */ 0.013f,
+ /* m44 */ 0.15f,
+ /* m48 */ 0.1f,
+ /* m4C */ 0.1f,
+ /* m50 */ 0.06f,
+ /* m54 */ 0.075f,
+ /* mModelFileIndex */ dRes_INDEX_OSIBLK_BDL_OBM_OSIHIKIBLK1_e,
+ /* mDZBFileIndex */ dRes_INDEX_OSIBLK_DZB_OBM_OSIHIKIBLK1_e,
+ /* mDZBHeapSize */ DEMO_SELECT(0x1620, 0x8A0),
+ /* mScaleY */ 150.0f,
+ /* m68 */ 350.0f,
+ /* m6C */ 1.0f/350.0f,
+ /* mScaleXZ */ 150.0f,
+ /* m74 */ 1.0f/150.0f,
+ /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
+ /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
+ /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
+ /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
+ /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
+ /* mCullMinX */ -90,
+ /* mCullMinY */ -1,
+ /* mCullMinZ */ -90,
+ /* mCullMaxX */ 90,
+ /* mCullMaxY */ 151,
+ /* mCullMaxZ */ 90,
+ /* mbUseBGTevType */ false,
+ /* mbCastsShadow */ false,
+ /* m9A */ false,
+ },
+ // TYPE_MOSSY_BLACK_BOX
+ // Arcname: Ecube
+ {
+ /* m00 */ 4,
+ /* m02 */ 4,
+ /* m04 */ 20,
+ /* m06 */ 4,
+ /* m08 */ 4,
+ /* m0A */ 20,
+ /* m0C */ 75.0f,
+ /* m10 */ 90.0f,
+ /* m14 */ -5.0f,
+ /* m18 */ 0.005f,
+ /* m1C */ 0.001f,
+ /* m20 */ 0.0f,
+ /* mLandSmokeScale */ 1.8f,
+ /* m28 */ 4.5f,
+ /* m2C */ -0.5f,
+ /* m30 */ -0.2f,
+ /* m34 */ 0.02f,
+ /* m38 */ 1000,
+ /* m3C */ 0.04f,
+ /* m40 */ 0.013f,
+ /* m44 */ 0.15f,
+ /* m48 */ 0.1f,
+ /* m4C */ 0.1f,
+ /* m50 */ 0.06f,
+ /* m54 */ 0.075f,
+ /* mModelFileIndex */ dRes_INDEX_ECUBE_BDL_ECUBE_e,
+ /* mDZBFileIndex */ dRes_INDEX_ECUBE_DZB_ECUBE_e,
+ /* mDZBHeapSize */ DEMO_SELECT(0x8000, 0x8A0),
+ /* mScaleY */ 150.0f,
+ /* m68 */ 150.0f,
+ /* m6C */ 1.0f/150.0f,
+ /* mScaleXZ */ 150.0f,
+ /* m74 */ 1.0f/150.0f,
+ /* mMoveSE */ JA_SE_LK_MOVE_ROCK,
+ /* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
+ /* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
+ /* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
+ /* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
+ /* mCullMinX */ -90,
+ /* mCullMinY */ -1,
+ /* mCullMinZ */ -90,
+ /* mCullMaxX */ 90,
+ /* mCullMaxY */ 151,
+ /* mCullMaxZ */ 90,
+ /* mbUseBGTevType */ true,
+ /* mbCastsShadow */ true,
+ /* m9A */ false,
+ },
+};
+
+void Act_c::mode_proc_call() {
+ static ModeFunc mode_proc[] = {
+ &Act_c::mode_wait,
+ &Act_c::mode_walk,
+ &Act_c::mode_afl,
+ };
+ (this->*mode_proc[mMode])();
+}
+
+/* 000012E0-00001308 .text prm_get_swSave1__Q212daObjMovebox5Act_cCFv */
+int Act_c::prm_get_swSave1() const {
+ return prm_get_swSave();
+}
+
+/* 00001308-00001380 .text prmZ_init__Q212daObjMovebox5Act_cFv */
+void Act_c::prmZ_init() {
+ if (mbPrmZInitialized) {
+ return;
+ }
+ mbPrmZInitialized = true;
- /* 00001380-000013B0 .text prmX_init__Q212daObjMovebox5Act_cFv */
- void Act_c::prmX_init() {
- if (!mbPrmXInitialized) {
- mPrmX = home.angle.x;
- mbPrmXInitialized = true;
- }
-
- home.angle.x = 0;
- current.angle.x = 0;
- shape_angle.x = 0;
+ int switchEnablesSpawn = prm_get_dmy();
+ if (switchEnablesSpawn) {
+ // The appearing/disappearing type of box does not take pathId or swSave2 params.
+ mPrmZ = 0xFFFF;
+ } else {
+ mPrmZ = home.angle.z;
}
- /* 000013B0-000013C8 .text attr__Q212daObjMovebox5Act_cCFv */
- const Attr_c* Act_c::attr() const {
- return &M_attr[mType];
+ home.angle.z = 0;
+ current.angle.z = 0;
+ shape_angle.z = 0;
+}
+
+/* 00001380-000013B0 .text prmX_init__Q212daObjMovebox5Act_cFv */
+void Act_c::prmX_init() {
+ if (!mbPrmXInitialized) {
+ mPrmX = home.angle.x;
+ mbPrmXInitialized = true;
}
- /* 000013C8-00001674 .text set_mtx__Q212daObjMovebox5Act_cFv */
- void Act_c::set_mtx() {
- bool isFloating = mMode == MODE_AFLOAT;
- mDoMtx_stack_c::transS(current.pos);
- if (isFloating) {
- cXyz temp_40;
- Quaternion temp_30;
- temp_40.set(m614, 1.0f, m618);
- mDoMtx_stack_c::transM(0.0f, m624, 0.0f);
- daObj::quat_rotBaseY(&temp_30, temp_40);
- mDoMtx_stack_c::quatM(&temp_30);
- }
-
- mDoMtx_stack_c::ZXYrotM(shape_angle);
- if (isFloating) {
- mDoMtx_stack_c::transM(0.0f, -m624, 0.0f);
- }
-
- if (mpModel) {
- mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
- }
- cMtx_copy(mDoMtx_stack_c::get(), mMtx);
-
- if (mChildPID == fpcM_ERROR_PROCESS_ID_e) {
- return;
- }
- fopAc_ac_c* childActor;
- if (fopAcM_SearchByID(mChildPID, &childActor)) {
- if (!childActor) {
- return;
- }
- if (mType == TYPE_METAL_BOX_WITH_SPRING) {
- daObjJump::Act_c* jump = (daObjJump::Act_c*)childActor;
- if (jump->current.pos.abs2(current.pos) > SQUARE(0.01f)) {
- jump->setup(&current.pos);
- }
- } else if (mType == TYPE_MIRROR) {
- daObjMmrr::Act_c* mmrr = (daObjMmrr::Act_c*)childActor;
- if (mmrr->current.pos.abs2(current.pos) > SQUARE(0.01f)) {
- mmrr->setup(&current.pos);
- }
- } else if (mType == TYPE_BLACK_BOX_WITH_MKIE) {
- daObjMkie::Act_c* mkie = (daObjMkie::Act_c*)childActor;
- cXyz targetPos(current.pos.x, current.pos.y + 150.0f, current.pos.z);
- if (mkie->current.pos.abs2(targetPos) > SQUARE(0.01f)) {
- mkie->setup(&targetPos);
- }
- } else {
- cXyz buoyOffset(0.0f, attr()->m68 - 5.0f, 0.0f);
- cXyz buoyOffsetSR;
- cMtx_multVecSR(mDoMtx_stack_c::get(), &buoyOffset, &buoyOffsetSR);
- mDoMtx_stack_c::get()[0][3] += buoyOffsetSR.x;
- mDoMtx_stack_c::get()[1][3] += buoyOffsetSR.y;
- mDoMtx_stack_c::get()[2][3] += buoyOffsetSR.z;
- daObjBuoyflag::Act_c* buoyflag = (daObjBuoyflag::Act_c*)childActor;
- buoyflag->setup(mDoMtx_stack_c::get());
- }
- } else {
- mChildPID = fpcM_ERROR_PROCESS_ID_e;
- }
+ home.angle.x = 0;
+ current.angle.x = 0;
+ shape_angle.x = 0;
+}
+
+/* 000013B0-000013C8 .text attr__Q212daObjMovebox5Act_cCFv */
+const Attr_c* Act_c::attr() const {
+ return &M_attr[mType];
+}
+
+/* 000013C8-00001674 .text set_mtx__Q212daObjMovebox5Act_cFv */
+void Act_c::set_mtx() {
+ bool isFloating = mMode == MODE_AFLOAT;
+ mDoMtx_stack_c::transS(current.pos);
+ if (isFloating) {
+ cXyz temp_40;
+ Quaternion temp_30;
+ temp_40.set(m614, 1.0f, m618);
+ mDoMtx_stack_c::transM(0.0f, m624, 0.0f);
+ daObj::quat_rotBaseY(&temp_30, temp_40);
+ mDoMtx_stack_c::quatM(&temp_30);
}
- /* 00001674-000016B8 .text init_mtx__Q212daObjMovebox5Act_cFv */
- void Act_c::init_mtx() {
- if (mpModel) {
- mpModel->setBaseScale(scale);
- }
- set_mtx();
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
+ if (isFloating) {
+ mDoMtx_stack_c::transM(0.0f, -m624, 0.0f);
}
- /* 000016B8-00001830 .text path_init__Q212daObjMovebox5Act_cFv */
- void Act_c::path_init() {
- // Load the position the box was last left pushed to based on the path and switch(es).
- int pathId = prmZ_get_pathId();
- int swSave1 = prm_get_swSave1();
- if (pathId != 0xFF && swSave1 != 0xFF) {
- int swSave2 = prmZ_get_swSave2();
-
- bool isMoved1 = is_switch1();
-
- u32 isMoved2 = false;
- if (swSave2 == 0xFF) {
- isMoved2 = false;
- } else {
- isMoved2 = is_switch2() ? true : false;
- }
- // TODO: is this a fakematch? why the extra conversion to bool here?
- isMoved2 = isMoved2 ? true : false;
-
- int pntIdx = 0;
- if (isMoved1) {
- pntIdx += 1;
- }
- if (isMoved2) {
- pntIdx += 2;
- }
-
- mpPath = dPath_GetRoomPath(pathId, fopAcM_GetHomeRoomNo(this));
- dPnt* pnt = dPath_GetPnt(mpPath, pntIdx);
- home.pos = pnt->m_position;
- current.pos = pnt->m_position;
- }
+ if (mpModel) {
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
+ cMtx_copy(mDoMtx_stack_c::get(), mMtx);
- /* 00001830-00001A10 .text path_save__Q212daObjMovebox5Act_cFv */
- void Act_c::path_save() {
- // Determine how far along the path the box has been pushed and save the position to the switch(es).
- // Supports up to 4 possible path points.
- int pathId = prmZ_get_pathId();
- int swSave1 = prm_get_swSave1();
- if (pathId != 0xFF && swSave1 != 0xFF) {
- int swSave2 = prmZ_get_swSave2();
-
- int numPnts;
- if (swSave2 == 0xFF) {
- numPnts = 2;
- } else {
- numPnts = 4;
- }
- if (numPnts > mpPath->m_num) {
- numPnts = mpPath->m_num;
- }
-
- int pntIdx;
- for (pntIdx = 0; pntIdx < numPnts; pntIdx++) {
- cXyz pntPos = dPath_GetPnt(mpPath, pntIdx)->m_position;
- if (current.pos.abs2(pntPos) < SQUARE(3.0f)) {
- break;
- }
- }
- if (pntIdx >= numPnts) {
- return;
+ if (mChildPID == fpcM_ERROR_PROCESS_ID_e) {
+ return;
+ }
+ fopAc_ac_c* childActor;
+ if (fopAcM_SearchByID(mChildPID, &childActor)) {
+ if (!childActor) {
+ return;
+ }
+ if (mType == TYPE_METAL_BOX_WITH_SPRING) {
+ daObjJump::Act_c* jump = (daObjJump::Act_c*)childActor;
+ if (jump->current.pos.abs2(current.pos) > SQUARE(0.01f)) {
+ jump->setup(&current.pos);
}
-
- // Store the low bit of the 2-bit index in swSave1.
- if (pntIdx & 1) {
- on_switch1();
- } else {
- off_switch1();
+ } else if (mType == TYPE_MIRROR) {
+ daObjMmrr::Act_c* mmrr = (daObjMmrr::Act_c*)childActor;
+ if (mmrr->current.pos.abs2(current.pos) > SQUARE(0.01f)) {
+ mmrr->setup(&current.pos);
}
-
- if (swSave2 != 0xFF) {
- // Store the high bit of the 2-bit index in swSave2.
- if (pntIdx & 2) {
- on_switch2();
- } else {
- off_switch2();
- }
+ } else if (mType == TYPE_BLACK_BOX_WITH_MKIE) {
+ daObjMkie::Act_c* mkie = (daObjMkie::Act_c*)childActor;
+ cXyz targetPos(current.pos.x, current.pos.y + 150.0f, current.pos.z);
+ if (mkie->current.pos.abs2(targetPos) > SQUARE(0.01f)) {
+ mkie->setup(&targetPos);
}
- }
- }
-
- /* 00001A10-00001B00 .text CreateHeap__Q212daObjMovebox5Act_cFv */
- BOOL Act_c::CreateHeap() {
- BOOL success = TRUE;
- if (attr()->mModelFileIndex >= 0) {
- J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(M_arcname[mType], attr()->mModelFileIndex);
- JUT_ASSERT(1722, modelData != NULL);
-
- mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
- success = (mpModel != NULL);
} else {
- mpModel = NULL;
- }
- return success;
+ cXyz buoyOffset(0.0f, attr()->m68 - 5.0f, 0.0f);
+ cXyz buoyOffsetSR;
+ cMtx_multVecSR(mDoMtx_stack_c::get(), &buoyOffset, &buoyOffsetSR);
+ mDoMtx_stack_c::get()[0][3] += buoyOffsetSR.x;
+ mDoMtx_stack_c::get()[1][3] += buoyOffsetSR.y;
+ mDoMtx_stack_c::get()[2][3] += buoyOffsetSR.z;
+ daObjBuoyflag::Act_c* buoyflag = (daObjBuoyflag::Act_c*)childActor;
+ buoyflag->setup(mDoMtx_stack_c::get());
+ }
+ } else {
+ mChildPID = fpcM_ERROR_PROCESS_ID_e;
}
-
- /* 00001B00-00001C64 .text RideCallBack__Q212daObjMovebox5Act_cFP4dBgWP10fopAc_ac_cP10fopAc_ac_c */
- void Act_c::RideCallBack(dBgW*, fopAc_ac_c* actor1, fopAc_ac_c* actor2) {
- Act_c* movebox = (Act_c*)actor1;
- if (movebox->mMode != MODE_AFLOAT) {
- return;
- }
- const Attr_c* attr = movebox->attr();
- f32 f0 = movebox->attr()->m2C + movebox->attr()->m30;
- f32 deltaX = actor2->current.pos.x - actor1->current.pos.x;
- f32 deltaZ = actor2->current.pos.z - actor1->current.pos.z;
- f32 f3;
- f32 f4;
- if (fopAcM_GetProfName(actor2) == fpcNm_PLAYER_e) {
- f3 = movebox->attr()->m2C;
- f4 = movebox->attr()->m74 * movebox->attr()->m44;
+}
+
+/* 00001674-000016B8 .text init_mtx__Q212daObjMovebox5Act_cFv */
+void Act_c::init_mtx() {
+ if (mpModel) {
+ mpModel->setBaseScale(scale);
+ }
+ set_mtx();
+}
+
+/* 000016B8-00001830 .text path_init__Q212daObjMovebox5Act_cFv */
+void Act_c::path_init() {
+ // Load the position the box was last left pushed to based on the path and switch(es).
+ int pathId = prmZ_get_pathId();
+ int swSave1 = prm_get_swSave1();
+ if (pathId != 0xFF && swSave1 != 0xFF) {
+ int swSave2 = prmZ_get_swSave2();
+
+ bool isMoved1 = is_switch1();
+
+ u32 isMoved2 = false;
+ if (swSave2 == 0xFF) {
+ isMoved2 = false;
} else {
- f3 = movebox->attr()->m30;
- f4 = movebox->attr()->m74 * movebox->attr()->m48;
+ isMoved2 = is_switch2() ? true : false;
}
- f32 f6 = std::sqrtf(deltaX*deltaX + deltaZ*deltaZ);
- f6 = 1.0f - f6 * attr->m74;
- f6 = f6 * 0.9f + 0.1f;
- if (f6 < 0.0f) {
- f6 = 0.0f;
- }
- f3 *= f6;
- movebox->m608 += f3;
- if (movebox->m608 < f0) {
- movebox->m608 = f0;
- }
- movebox->m60C += f4 * deltaX;
- movebox->m610 += f4 * deltaZ;
- }
-
- /* 00001C64-00001DD4 .text PPCallBack__Q212daObjMovebox5Act_cFP10fopAc_ac_cP10fopAc_ac_csQ24dBgW13PushPullLabel */
- fopAc_ac_c* Act_c::PPCallBack(fopAc_ac_c* actor, fopAc_ac_c*, s16 angle, dBgW::PushPullLabel i_pp_label) {
- Act_c* i_this = (Act_c*)actor;
+ // TODO: is this a fakematch? why the extra conversion to bool here?
+ isMoved2 = isMoved2 ? true : false;
- dBgW::PushPullLabel pp_label = cLib_checkBit(i_pp_label, (dBgW::PushPullLabel)(dBgW::PPLABEL_PUSH | dBgW::PPLABEL_PULL));
- bool can_push = i_this->attr()->m9A ?
- (cLib_checkBit(i_pp_label, dBgW::PPLABEL_HEAVY) ? true : false) :
- true;
- if (pp_label && can_push) {
- s16 moveAng = cLib_checkBit(pp_label, dBgW::PPLABEL_PULL) ? angle - 0x8000 : angle;
- s16 angleDiff = moveAng - actor->home.angle.y;
- const int pp_field = dBgW::PPLABEL_PUSH | dBgW::PPLABEL_PULL;
- JUT_ASSERT(1813, pp_label != pp_field);
-
- i_this->mPPLabel = i_pp_label;
-
- int whichSide;
- if (angleDiff >= -0x2000 && angleDiff < 0x2000) {
- whichSide = 0;
- } else if (angleDiff >= 0x2000 && angleDiff < 0x6000) {
- whichSide = 1;
- } else if (angleDiff >= 0x6000 || angleDiff < -0x6000) {
- whichSide = 2;
- } else {
- whichSide = 3;
- }
-
- for (int i = 0; i < 4; i++) {
- if (i == whichSide) {
- i_this->mMomentCnt[i]++;
- } else {
- i_this->mMomentCnt[i] = 0;
- }
- }
-
- i_this->m64A = true;
+ int pntIdx = 0;
+ if (isMoved1) {
+ pntIdx += 1;
}
-
- return actor;
- }
-
- /* 00001DD4-00002214 .text Create__Q212daObjMovebox5Act_cFv */
- BOOL Act_c::Create() {
- m604 = 0;
- m608 = 0.0f;
- m60C = 0.0f;
- m610 = 0.0f;
- m614 = 0.0f;
- m618 = 0.0f;
- m61C = 0.0f;
- m620 = 0.0f;
- m624 = attr()->m68 * 0.5f;
- m628 = 0;
- m62C = 0;
- m630 = 0.0f;
- m634 = -1;
- mPPLabel = (dBgW::PushPullLabel)0;
- clr_moment_cnt();
- m644 = 0;
- m646 = 0;
- m648 = 0x14;
- m64A = false;
-
- mpBgW->SetRideCallback(RideCallBack);
- mpBgW->SetPushPullCallback(PPCallBack);
- mStts.Init(0xFF, 0xFF, this);
- mCyl.Set(M_cyl_src);
- mCyl.SetStts(&mStts);
- mCyl.SetTgVec((cXyz&)cXyz::Zero);
- mCyl.OnTgNoHitMark();
- mCyl.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
-
- fopAcM_SetMtx(this, mMtx);
- fopAcM_setCullSizeBox(this,
- attr()->mCullMinX, attr()->mCullMinY, attr()->mCullMinZ,
- attr()->mCullMaxX, attr()->mCullMaxY, attr()->mCullMaxZ
- );
-
- fopAcM_SetSpeedF(this, 0.0f);
- fopAcM_SetGravity(this, attr()->m14);
- fopAcM_posMoveF(this, NULL);
- mBgc.proc_vertical(this);
- cLib_offBit(mBgc.mStateFlags, static_cast<Bgc_c::State_e>(Bgc_c::BgcState_JUST_LEFT_GROUND_e | Bgc_c::BgcState_JUST_HIT_GROUND_e | Bgc_c::BgcState_JUST_HIT_WATER_e));
-
- m64F = true;
- mReverb = dComIfGp_getReverb(home.roomNo);
-
- mChildPID = fpcM_ERROR_PROCESS_ID_e;
- if (prm_get_buoy() == 0) {
- cXyz buoyPos(current.pos.x, current.pos.y + attr()->m68 - 5.0f, current.pos.z);
- mChildPID = daObjBuoyflag::Act_c::make_norm(fopAcM_GetID(this), &buoyPos, fopAcM_GetRoomNo(this), &shape_angle);
- } else if (mType == TYPE_METAL_BOX_WITH_SPRING) {
- u32 jumpParams = daObjJump::Act_c::prm_make_b();
- mChildPID = fopAcM_createChild(
- fpcNm_Obj_Jump_e, fopAcM_GetID(this),
- jumpParams, &current.pos,
- fopAcM_GetRoomNo(this), &shape_angle
- );
- } else if (mType == TYPE_MIRROR) {
- mChildPID = fopAcM_createChild(
- fpcNm_Obj_Mmrr_e, fopAcM_GetID(this),
- 0, &current.pos,
- fopAcM_GetRoomNo(this), &shape_angle
- );
- } else if (mType == TYPE_BLACK_BOX_WITH_MKIE) {
- cXyz mkiePos(current.pos.x, current.pos.y + 150.0f, current.pos.z);
- u32 mkieParams = daObjMkie::Act_c::prm_make(prmX_get_evId(), prmZ_get_swSave2_MkieB());
- mChildPID = fopAcM_createChild(
- fpcNm_Obj_Mkie_e, fopAcM_GetID(this),
- mkieParams, &mkiePos,
- fopAcM_GetRoomNo(this), &shape_angle
- );
+ if (isMoved2) {
+ pntIdx += 2;
}
- init_mtx();
- mbRollCrash = FALSE;
- mode_wait_init();
- return TRUE;
+ mpPath = dPath_GetRoomPath(pathId, fopAcM_GetHomeRoomNo(this));
+ dPnt* pnt = dPath_GetPnt(mpPath, pntIdx);
+ home.pos = pnt->m_position;
+ current.pos = pnt->m_position;
}
-
- /* 00002214-000024D4 .text afl_sway__Q212daObjMovebox5Act_cFv */
- void Act_c::afl_sway() {
- f32 f31 = m60C*m60C + m610*m610;
- f32 f30 = attr()->m4C*attr()->m4C;
-
- int bgcSrcCount;
- BgcSrc_c* bgcSrc;
- // fakematch? a cast here seems necessary to get the bgcSrc to temporarily be placed in r0 and then moved
- bgcSrc = const_cast<BgcSrc_c*>(attr()->m9A ? Bgc_c::M_lin20 : Bgc_c::M_lin5);
- bgcSrcCount = attr()->m9A ? ARRAY_SIZE(mBgc.M_lin20)-2 : ARRAY_SIZE(mBgc.M_lin5);
-
- bool touchedFrontBack = mBgc.chk_wall_touch2(this, bgcSrc, bgcSrcCount, M_dir_base[0]) ||
- mBgc.chk_wall_touch2(this, bgcSrc, bgcSrcCount, M_dir_base[2]);
-
- bool touchedLeftRight = mBgc.chk_wall_touch2(this, bgcSrc, bgcSrcCount, M_dir_base[1]) ||
- mBgc.chk_wall_touch2(this, bgcSrc, bgcSrcCount, M_dir_base[3]);
-
- if (f31 > f30) {
- f32 temp = attr()->m4C / std::sqrtf(f31);
- m60C *= temp;
- m610 *= temp;
+}
+
+/* 00001830-00001A10 .text path_save__Q212daObjMovebox5Act_cFv */
+void Act_c::path_save() {
+ // Determine how far along the path the box has been pushed and save the position to the switch(es).
+ // Supports up to 4 possible path points.
+ int pathId = prmZ_get_pathId();
+ int swSave1 = prm_get_swSave1();
+ if (pathId != 0xFF && swSave1 != 0xFF) {
+ int swSave2 = prmZ_get_swSave2();
+
+ int numPnts;
+ if (swSave2 == 0xFF) {
+ numPnts = 2;
+ } else {
+ numPnts = 4;
+ }
+ if (numPnts > mpPath->m_num) {
+ numPnts = mpPath->m_num;
}
- f32 temp2 = m614 - m60C;
- f32 temp1 = m618 - m610;
- f32 f1 = -temp2 * attr()->m50;
- f32 f5 = -temp1 * attr()->m50;
- f32 f0 = -m61C * attr()->m54;
- f32 f6 = -m620 * attr()->m54;
- m61C += f1 + f0;
- m620 += f5 + f6;
- m614 += m61C;
- m618 += m620;
-
- if (touchedLeftRight) {
- m614 = 0.0f;
+ int pntIdx;
+ for (pntIdx = 0; pntIdx < numPnts; pntIdx++) {
+ cXyz pntPos = dPath_GetPnt(mpPath, pntIdx)->m_position;
+ if (current.pos.abs2(pntPos) < SQUARE(3.0f)) {
+ break;
+ }
}
- if (touchedFrontBack) {
- m618 = 0.0f;
+ if (pntIdx >= numPnts) {
+ return;
}
- m60C = 0.0f;
- m610 = 0.0f;
- }
-
- /* 000024D4-00002668 .text check_to_walk__Q212daObjMovebox5Act_cFv */
- int Act_c::check_to_walk() {
- int r30 = -1;
- bool r29 = true;
+ // Store the low bit of the 2-bit index in swSave1.
+ if (pntIdx & 1) {
+ on_switch1();
+ } else {
+ off_switch1();
+ }
- if (m64A && cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_ON_GROUND_e) && (mType != TYPE_BLACK_BOX_WITH_MKIE || mChildPID == fpcM_ERROR_PROCESS_ID_e)) {
- BOOL temp = cLib_checkBit(mPPLabel, dBgW::PPLABEL_PULL);
- BOOL r3 = cLib_checkBit(mPPLabel, dBgW::PPLABEL_UNK4);
- s16 r0;
- if (temp) {
- if (r3) {
- r0 = attr()->m06;
- } else {
- r0 = attr()->m08;
- }
+ if (swSave2 != 0xFF) {
+ // Store the high bit of the 2-bit index in swSave2.
+ if (pntIdx & 2) {
+ on_switch2();
} else {
- if (r3) {
- r0 = attr()->m00;
- } else {
- r0 = attr()->m02;
- }
- }
-
- for (int i = 0; i < (int)ARRAY_SIZE(mMomentCnt); i++) {
- if (mMomentCnt[i] >= r0) {
- const BgcSrc_c* bgcSrc = attr()->m9A ? Bgc_c::M_lin20 : Bgc_c::M_lin5;
- int bgcSrcCount = attr()->m9A ? (mType == TYPE_MIRROR ? ARRAY_SIZE(mBgc.M_lin20) : ARRAY_SIZE(mBgc.M_lin20)-2) : ARRAY_SIZE(mBgc.M_lin5);
- if (!mBgc.chk_wall_pre(this, bgcSrc, bgcSrcCount, M_dir_base[i])) {
- r30 = i;
- }
- } else {
- r29 = false;
- }
+ off_switch2();
}
}
-
- if (r29) {
- clr_moment_cnt();
- }
- m64A = false;
- return r30;
}
-
- /* 00002668-0000268C .text clr_moment_cnt__Q212daObjMovebox5Act_cFv */
- void Act_c::clr_moment_cnt() {
- for (int i = 0; i < 4; i++) {
- mMomentCnt[i] = 0;
- }
+}
+
+/* 00001A10-00001B00 .text CreateHeap__Q212daObjMovebox5Act_cFv */
+BOOL Act_c::CreateHeap() {
+ BOOL success = TRUE;
+ if (attr()->mModelFileIndex >= 0) {
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(M_arcname[mType], attr()->mModelFileIndex);
+ JUT_ASSERT(1722, modelData != NULL);
+
+ mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
+ success = (mpModel != NULL);
+ } else {
+ mpModel = NULL;
}
-
- /* 0000268C-00002768 .text chk_appear__Q212daObjMovebox5Act_cCFv */
- bool Act_c::chk_appear() const {
- // Boxes that do not have a path to save their position instead use swSave1 to enable or disable spawning.
- int pathId = prmZ_get_pathId();
- int sw = prm_get_swSave1();
- if (pathId != 0xFF || sw == 0xFF) {
- return TRUE;
- }
-
- bool switchIsSet = is_switch1();
- bool switchEnablesSpawn = prm_get_dmy();
- bool shouldAppear = false;
- if ((!switchIsSet && !switchEnablesSpawn) || (switchIsSet && switchEnablesSpawn)) {
- shouldAppear = true;
- }
- return shouldAppear;
+ return success;
+}
+
+/* 00001B00-00001C64 .text RideCallBack__Q212daObjMovebox5Act_cFP4dBgWP10fopAc_ac_cP10fopAc_ac_c */
+void Act_c::RideCallBack(dBgW*, fopAc_ac_c* actor1, fopAc_ac_c* actor2) {
+ Act_c* movebox = (Act_c*)actor1;
+ if (movebox->mMode != MODE_AFLOAT) {
+ return;
}
-
- /* 00002768-0000290C .text eff_set_slip_smoke_pos__Q212daObjMovebox5Act_cFv */
- void Act_c::eff_set_slip_smoke_pos() {
- static cXyz base_pos[ARRAY_SIZE(mSmokeCbs)] = {
- cXyz(-0.5f, 0.0f, -0.5f),
- cXyz(0.5f, 0.0f, -0.5f)
- };
-
- s16 angle = home.angle.y + M_dir_base[m634];
-
- f32 scaleMag = attr()->mScaleXZ;
- mDoMtx_stack_c::transS(current.pos);
- mDoMtx_stack_c::YrotM(angle);
- mDoMtx_stack_c::transM(0.0f, 0.0f, 10.0f);
- mDoMtx_stack_c::scaleM(scaleMag, scaleMag, scaleMag);
-
- for (int i = 0; i < (int)ARRAY_SIZE(mSmokeCbs); i++) {
- mDoMtx_stack_c::multVec(&base_pos[i], &mSmokeCbs[i].field_0x20);
- mSmokeCbs[i].field_0x2C.set(0, angle, 0);
- }
+ const Attr_c* attr = movebox->attr();
+ f32 f0 = movebox->attr()->m2C + movebox->attr()->m30;
+ f32 deltaX = actor2->current.pos.x - actor1->current.pos.x;
+ f32 deltaZ = actor2->current.pos.z - actor1->current.pos.z;
+ f32 f3;
+ f32 f4;
+ if (fopAcM_GetProfName(actor2) == fpcNm_PLAYER_e) {
+ f3 = movebox->attr()->m2C;
+ f4 = movebox->attr()->m74 * movebox->attr()->m44;
+ } else {
+ f3 = movebox->attr()->m30;
+ f4 = movebox->attr()->m74 * movebox->attr()->m48;
}
+ f32 f6 = std::sqrtf(deltaX*deltaX + deltaZ*deltaZ);
+ f6 = 1.0f - f6 * attr->m74;
+ f6 = f6 * 0.9f + 0.1f;
+ if (f6 < 0.0f) {
+ f6 = 0.0f;
+ }
+ f3 *= f6;
+ movebox->m608 += f3;
+ if (movebox->m608 < f0) {
+ movebox->m608 = f0;
+ }
+ movebox->m60C += f4 * deltaX;
+ movebox->m610 += f4 * deltaZ;
+}
+
+/* 00001C64-00001DD4 .text PPCallBack__Q212daObjMovebox5Act_cFP10fopAc_ac_cP10fopAc_ac_csQ24dBgW13PushPullLabel */
+fopAc_ac_c* Act_c::PPCallBack(fopAc_ac_c* actor, fopAc_ac_c*, s16 angle, dBgW::PushPullLabel i_pp_label) {
+ Act_c* i_this = (Act_c*)actor;
- /* 0000290C-00002A14 .text eff_smoke_slip_start__Q212daObjMovebox5Act_cFv */
- void Act_c::eff_smoke_slip_start() {
- static cXyz scl(0.6f, 0.6f, 0.6f);
-
- eff_set_slip_smoke_pos();
+ dBgW::PushPullLabel pp_label = cLib_checkBit(i_pp_label, (dBgW::PushPullLabel)(dBgW::PPLABEL_PUSH | dBgW::PPLABEL_PULL));
+ bool can_push = i_this->attr()->m9A ?
+ (cLib_checkBit(i_pp_label, dBgW::PPLABEL_HEAVY) ? true : false) :
+ true;
+ if (pp_label && can_push) {
+ s16 moveAng = cLib_checkBit(pp_label, dBgW::PPLABEL_PULL) ? angle - 0x8000 : angle;
+ s16 angleDiff = moveAng - actor->home.angle.y;
+ const int pp_field = dBgW::PPLABEL_PUSH | dBgW::PPLABEL_PULL;
+ JUT_ASSERT(1813, pp_label != pp_field);
+
+ i_this->mPPLabel = i_pp_label;
+
+ int whichSide;
+ if (angleDiff >= -0x2000 && angleDiff < 0x2000) {
+ whichSide = 0;
+ } else if (angleDiff >= 0x2000 && angleDiff < 0x6000) {
+ whichSide = 1;
+ } else if (angleDiff >= 0x6000 || angleDiff < -0x6000) {
+ whichSide = 2;
+ } else {
+ whichSide = 3;
+ }
- for (int i = 0; i < (int)ARRAY_SIZE(mSmokeCbs); i++) {
- JPABaseEmitter* emitter = dComIfGp_particle_setToon(
- dPa_name::ID_AK_JT_ELEMENTSMOKE00, &mSmokeCbs[i].field_0x20, &mSmokeCbs[i].field_0x2C,
- &scl, 0xB9, &mSmokeCbs[i], fopAcM_GetRoomNo(this)
- );
- if (emitter) {
- emitter->setRate(2.0f);
- emitter->setDirectionalSpeed(15.0f);
- emitter->setSpread(0.15f);
- emitter->setLifeTime(30);
+ for (int i = 0; i < 4; i++) {
+ if (i == whichSide) {
+ i_this->mMomentCnt[i]++;
+ } else {
+ i_this->mMomentCnt[i] = 0;
}
}
+
+ i_this->m64A = true;
}
- /* 00002A14-00002A74 .text eff_smoke_slip_end__Q212daObjMovebox5Act_cFv */
- void Act_c::eff_smoke_slip_end() {
- for (int i = 0; i < (int)ARRAY_SIZE(mSmokeCbs); i++) {
- mSmokeCbs[i].remove();
- }
- }
+ return actor;
+}
+
+/* 00001DD4-00002214 .text Create__Q212daObjMovebox5Act_cFv */
+BOOL Act_c::Create() {
+ m604 = 0;
+ m608 = 0.0f;
+ m60C = 0.0f;
+ m610 = 0.0f;
+ m614 = 0.0f;
+ m618 = 0.0f;
+ m61C = 0.0f;
+ m620 = 0.0f;
+ m624 = attr()->m68 * 0.5f;
+ m628 = 0;
+ m62C = 0;
+ m630 = 0.0f;
+ m634 = -1;
+ mPPLabel = (dBgW::PushPullLabel)0;
+ clr_moment_cnt();
+ m644 = 0;
+ m646 = 0;
+ m648 = 0x14;
+ m64A = false;
- /* 00002A74-00002AD4 .text eff_smoke_slip_remove__Q212daObjMovebox5Act_cFv */
- void Act_c::eff_smoke_slip_remove() {
- for (int i = 0; i < (int)ARRAY_SIZE(mSmokeCbs); i++) {
- mSmokeCbs[i].remove();
- }
- }
+ mpBgW->SetRideCallback(RideCallBack);
+ mpBgW->SetPushPullCallback(PPCallBack);
+ mStts.Init(0xFF, 0xFF, this);
+ mCyl.Set(M_cyl_src);
+ mCyl.SetStts(&mStts);
+ mCyl.SetTgVec((cXyz&)cXyz::Zero);
+ mCyl.OnTgNoHitMark();
+ mCyl.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
- /* 00002AD4-00002B48 .text mode_wait_init__Q212daObjMovebox5Act_cFv */
- void Act_c::mode_wait_init() {
- fopAcM_SetSpeedF(this, 0.0f);
- fopAcM_SetGravity(this, attr()->m14);
- mpBgW->SetCrrFunc(dBgS_MoveBGProc_Trans);
- clr_moment_cnt();
- m634 = -1;
- mMode = MODE_WAIT;
+ fopAcM_SetMtx(this, mMtx);
+ fopAcM_setCullSizeBox(this,
+ attr()->mCullMinX, attr()->mCullMinY, attr()->mCullMinZ,
+ attr()->mCullMaxX, attr()->mCullMaxY, attr()->mCullMaxZ
+ );
+
+ fopAcM_SetSpeedF(this, 0.0f);
+ fopAcM_SetGravity(this, attr()->m14);
+ fopAcM_posMoveF(this, NULL);
+ mBgc.proc_vertical(this);
+ cLib_offBit(mBgc.mStateFlags, static_cast<Bgc_c::State_e>(Bgc_c::BgcState_JUST_LEFT_GROUND_e | Bgc_c::BgcState_JUST_HIT_GROUND_e | Bgc_c::BgcState_JUST_HIT_WATER_e));
+
+ m64F = true;
+ mReverb = dComIfGp_getReverb(home.roomNo);
+
+ mChildPID = fpcM_ERROR_PROCESS_ID_e;
+ if (prm_get_buoy() == 0) {
+ cXyz buoyPos(current.pos.x, current.pos.y + attr()->m68 - 5.0f, current.pos.z);
+ mChildPID = daObjBuoyflag::Act_c::make_norm(fopAcM_GetID(this), &buoyPos, fopAcM_GetRoomNo(this), &shape_angle);
+ } else if (mType == TYPE_METAL_BOX_WITH_SPRING) {
+ u32 jumpParams = daObjJump::Act_c::prm_make_b();
+ mChildPID = fopAcM_createChild(
+ fpcNm_Obj_Jump_e, fopAcM_GetID(this),
+ jumpParams, &current.pos,
+ fopAcM_GetRoomNo(this), &shape_angle
+ );
+ } else if (mType == TYPE_MIRROR) {
+ mChildPID = fopAcM_createChild(
+ fpcNm_Obj_Mmrr_e, fopAcM_GetID(this),
+ 0, &current.pos,
+ fopAcM_GetRoomNo(this), &shape_angle
+ );
+ } else if (mType == TYPE_BLACK_BOX_WITH_MKIE) {
+ cXyz mkiePos(current.pos.x, current.pos.y + 150.0f, current.pos.z);
+ u32 mkieParams = daObjMkie::Act_c::prm_make(prmX_get_evId(), prmZ_get_swSave2_MkieB());
+ mChildPID = fopAcM_createChild(
+ fpcNm_Obj_Mkie_e, fopAcM_GetID(this),
+ mkieParams, &mkiePos,
+ fopAcM_GetRoomNo(this), &shape_angle
+ );
}
- /* 00002B48-00002D84 .text mode_wait__Q212daObjMovebox5Act_cFv */
- void Act_c::mode_wait() {
- if (m646 > 0) {
- m646--;
- }
-
- int r31 = check_to_walk();
-
- if (!m64F && cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_ON_GROUND_e)) {
- m64F = true;
- path_save();
- }
-
- daObj::posMoveF_stream(this, NULL, &cXyz::Zero, attr()->m18, attr()->m1C);
-
- mDoMtx_stack_c::transS(home.pos);
- mDoMtx_stack_c::YrotM(home.angle.y);
- mDoMtx_stack_c::transM(m628 * attr()->m0C, 0.0f, m62C * attr()->m0C);
- cXyz pos;
- mDoMtx_stack_c::multVec(&cXyz::Zero, &pos);
- current.pos.x = pos.x;
- current.pos.z = pos.z;
-
- if (r31 != -1) {
- m634 = r31;
- eff_smoke_slip_start();
- daPy_getPlayerActorClass()->onPushPullKeep();
- mode_walk_init();
-
- if (cLib_checkBit(mPPLabel, dBgW::PPLABEL_PULL)) {
- m644 = attr()->m0A;
- m630 = (f32)0x8000 / attr()->m0A;
- } else {
- m644 = attr()->m04;
- m630 = (f32)0x8000 / attr()->m04;
- }
- }
+ init_mtx();
+ mbRollCrash = FALSE;
+ mode_wait_init();
+ return TRUE;
+}
+
+/* 00002214-000024D4 .text afl_sway__Q212daObjMovebox5Act_cFv */
+void Act_c::afl_sway() {
+ f32 f31 = m60C*m60C + m610*m610;
+ f32 f30 = attr()->m4C*attr()->m4C;
+
+ int bgcSrcCount;
+ BgcSrc_c* bgcSrc;
+ // fakematch? a cast here seems necessary to get the bgcSrc to temporarily be placed in r0 and then moved
+ bgcSrc = const_cast<BgcSrc_c*>(attr()->m9A ? Bgc_c::M_lin20 : Bgc_c::M_lin5);
+ bgcSrcCount = attr()->m9A ? ARRAY_SIZE(mBgc.M_lin20)-2 : ARRAY_SIZE(mBgc.M_lin5);
+
+ bool touchedFrontBack = mBgc.chk_wall_touch2(this, bgcSrc, bgcSrcCount, M_dir_base[0]) ||
+ mBgc.chk_wall_touch2(this, bgcSrc, bgcSrcCount, M_dir_base[2]);
+
+ bool touchedLeftRight = mBgc.chk_wall_touch2(this, bgcSrc, bgcSrcCount, M_dir_base[1]) ||
+ mBgc.chk_wall_touch2(this, bgcSrc, bgcSrcCount, M_dir_base[3]);
+
+ if (f31 > f30) {
+ f32 temp = attr()->m4C / std::sqrtf(f31);
+ m60C *= temp;
+ m610 *= temp;
}
- /* 00002D84-00002DA4 .text mode_walk_init__Q212daObjMovebox5Act_cFv */
- void Act_c::mode_walk_init() {
- fopAcM_SetSpeedF(this, 0.0f);
- m64F = false;
- mMode = MODE_WALK;
+ f32 temp2 = m614 - m60C;
+ f32 temp1 = m618 - m610;
+ f32 f1 = -temp2 * attr()->m50;
+ f32 f5 = -temp1 * attr()->m50;
+ f32 f0 = -m61C * attr()->m54;
+ f32 f6 = -m620 * attr()->m54;
+ m61C += f1 + f0;
+ m620 += f5 + f6;
+ m614 += m61C;
+ m618 += m620;
+
+ if (touchedLeftRight) {
+ m614 = 0.0f;
+ }
+ if (touchedFrontBack) {
+ m618 = 0.0f;
}
- /* 00002DA4-000031AC .text mode_walk__Q212daObjMovebox5Act_cFv */
- void Act_c::mode_walk() {
- static cXyz dir_vec[4] = {
- cXyz(0.0f, 0.0f, 1.0f),
- cXyz(1.0f, 0.0f, 0.0f),
- cXyz(0.0f, 0.0f, -1.0f),
- cXyz(-1.0f, 0.0f, 0.0f),
- };
-
- bool r28 = --m644 <= 0;
- f32 temp = (cM_scos(m644 * m630) + 1.0f) * 0.5f;
- mDoMtx_stack_c::transS(home.pos);
- mDoMtx_stack_c::YrotM(home.angle.y);
- mDoMtx_stack_c::transM(
- (m628 + temp * dir_vec[m634].x) * attr()->m0C,
- 0.0f,
- (m62C + temp * dir_vec[m634].z) * attr()->m0C
- );
- cXyz temp2;
- mDoMtx_stack_c::multVec(&cXyz::Zero, &temp2);
- current.pos.x = temp2.x;
- current.pos.z = temp2.z;
- eyePos = current.pos;
- sound_slip();
-
- if (r28) {
- const BgcSrc_c* bgcSrc = attr()->m9A ? Bgc_c::M_lin20 : Bgc_c::M_lin5;
- int bgcSrcCount = attr()->m9A ? (mType == TYPE_MIRROR ? ARRAY_SIZE(mBgc.M_lin20) : ARRAY_SIZE(mBgc.M_lin20)-2) : ARRAY_SIZE(mBgc.M_lin5);
- if (mBgc.chk_wall_pre(this, bgcSrc, bgcSrcCount, M_dir_base[m634])) {
- sound_limit();
+ m60C = 0.0f;
+ m610 = 0.0f;
+}
+
+/* 000024D4-00002668 .text check_to_walk__Q212daObjMovebox5Act_cFv */
+int Act_c::check_to_walk() {
+ int r30 = -1;
+ bool r29 = true;
+
+ if (m64A && cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_ON_GROUND_e) && (mType != TYPE_BLACK_BOX_WITH_MKIE || mChildPID == fpcM_ERROR_PROCESS_ID_e)) {
+ BOOL temp = cLib_checkBit(mPPLabel, dBgW::PPLABEL_PULL);
+ BOOL r3 = cLib_checkBit(mPPLabel, dBgW::PPLABEL_UNK4);
+ s16 r0;
+ if (temp) {
+ if (r3) {
+ r0 = attr()->m06;
+ } else {
+ r0 = attr()->m08;
}
- eff_smoke_slip_end();
} else {
- eff_set_slip_smoke_pos();
+ if (r3) {
+ r0 = attr()->m00;
+ } else {
+ r0 = attr()->m02;
+ }
}
- daObj::posMoveF_stream(this, NULL, &cXyz::Zero, attr()->m18, attr()->m1C);
- current.pos.x = temp2.x;
- current.pos.z = temp2.z;
-
- if (r28) {
- if (m634 == 0) {
- m62C++;
- } else if (m634 == 1) {
- m628++;
- } else if (m634 == 2) {
- m62C--;
- } else if (m634 == 3) {
- m628--;
+ for (int i = 0; i < (int)ARRAY_SIZE(mMomentCnt); i++) {
+ if (mMomentCnt[i] >= r0) {
+ const BgcSrc_c* bgcSrc = attr()->m9A ? Bgc_c::M_lin20 : Bgc_c::M_lin5;
+ int bgcSrcCount = attr()->m9A ? (mType == TYPE_MIRROR ? ARRAY_SIZE(mBgc.M_lin20) : ARRAY_SIZE(mBgc.M_lin20)-2) : ARRAY_SIZE(mBgc.M_lin5);
+ if (!mBgc.chk_wall_pre(this, bgcSrc, bgcSrcCount, M_dir_base[i])) {
+ r30 = i;
+ }
+ } else {
+ r29 = false;
}
- daPy_getPlayerActorClass()->offPushPullKeep();
- mode_wait_init();
}
}
- /* 000031AC-000031D4 .text mode_afl_init__Q212daObjMovebox5Act_cFv */
- void Act_c::mode_afl_init() {
- fopAcM_SetSpeedF(this, 0.0f);
- mpBgW->SetCrrFunc(dBgS_MoveBGProc_Typical);
- mMode = MODE_AFLOAT;
+ if (r29) {
+ clr_moment_cnt();
+ }
+ m64A = false;
+ return r30;
+}
+
+/* 00002668-0000268C .text clr_moment_cnt__Q212daObjMovebox5Act_cFv */
+void Act_c::clr_moment_cnt() {
+ for (int i = 0; i < 4; i++) {
+ mMomentCnt[i] = 0;
+ }
+}
+
+/* 0000268C-00002768 .text chk_appear__Q212daObjMovebox5Act_cCFv */
+bool Act_c::chk_appear() const {
+ // Boxes that do not have a path to save their position instead use swSave1 to enable or disable spawning.
+ int pathId = prmZ_get_pathId();
+ int sw = prm_get_swSave1();
+ if (pathId != 0xFF || sw == 0xFF) {
+ return TRUE;
}
- /* 000031D4-000033D8 .text mode_afl__Q212daObjMovebox5Act_cFv */
- void Act_c::mode_afl() {
- f32 f1 = current.pos.y - mBgc.mWaterY;
- f32 f0;
- if (f1 >= 0.0f) {
- f0 = 0.0f;
- } else {
- if (f1 <= -attr()->m68) {
- f0 = 1.0f;
- } else {
- f1 = -f1;
- f0 = f1 * attr()->m6C;
- }
- }
-
- s16 r3 = attr()->m38 * (1.0f + cM_rnd());
- m604 += r3;
- fopAcM_SetGravity(this, (f0 * attr()->m28) + attr()->m14 + attr()->m34 * cM_ssin(m604) + m608);
- m608 = 0.0f;
-
- afl_sway();
-
- f32 temp3 = 1.0f - f0;
- f32 temp1 = f0*attr()->m3C + temp3*attr()->m18;
- f32 temp2 = f0*attr()->m40 + temp3*attr()->m1C;
-
- m624 = mBgc.mWaterY - current.pos.y;
- if (m624 < 0.0f) {
- m624 = 0.0f;
- } else if (m624 > attr()->m68) {
- m624 = attr()->m68;
- }
-
- daObj::posMoveF_stream(this, NULL, &cXyz::Zero, temp1, temp2);
+ bool switchIsSet = is_switch1();
+ bool switchEnablesSpawn = prm_get_dmy();
+ bool shouldAppear = false;
+ if ((!switchIsSet && !switchEnablesSpawn) || (switchIsSet && switchEnablesSpawn)) {
+ shouldAppear = true;
}
+ return shouldAppear;
+}
+
+/* 00002768-0000290C .text eff_set_slip_smoke_pos__Q212daObjMovebox5Act_cFv */
+void Act_c::eff_set_slip_smoke_pos() {
+ static cXyz base_pos[ARRAY_SIZE(mSmokeCbs)] = {
+ cXyz(-0.5f, 0.0f, -0.5f),
+ cXyz(0.5f, 0.0f, -0.5f)
+ };
- /* 000033D8-00003450 .text make_item__Q212daObjMovebox5Act_cFv */
- void Act_c::make_item() {
- int itemTableNo = prm_get_itemNo();
- int itemBitNo = prm_get_itemSave();
- fopAcM_createItemFromTable(
- &current.pos, itemTableNo, itemBitNo,
- fopAcM_GetHomeRoomNo(this), daItemType_0_e,
- &current.angle, daItemAct_7_e
- );
+ s16 angle = home.angle.y + M_dir_base[m634];
+
+ f32 scaleMag = attr()->mScaleXZ;
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(angle);
+ mDoMtx_stack_c::transM(0.0f, 0.0f, 10.0f);
+ mDoMtx_stack_c::scaleM(scaleMag, scaleMag, scaleMag);
+
+ for (int i = 0; i < (int)ARRAY_SIZE(mSmokeCbs); i++) {
+ mDoMtx_stack_c::multVec(&base_pos[i], &mSmokeCbs[i].field_0x20);
+ mSmokeCbs[i].field_0x2C.set(0, angle, 0);
}
+}
+
+/* 0000290C-00002A14 .text eff_smoke_slip_start__Q212daObjMovebox5Act_cFv */
+void Act_c::eff_smoke_slip_start() {
+ static cXyz scl(0.6f, 0.6f, 0.6f);
- /* 00003450-00003570 .text eff_break__Q212daObjMovebox5Act_cFv */
- void Act_c::eff_break() {
- static cXyz particle_scale(2.0f, 2.0f, 1.0f);
- cXyz particlePos;
- particlePos.set(current.pos.x, current.pos.y + 75.0f, current.pos.z);
- JPABaseEmitter* emitter = dComIfGp_particle_set(
- dPa_name::ID_IT_JN_TR_HAHEN_B, &particlePos, NULL, NULL, 0xFF, NULL, -1,
- &tevStr.mColorK0, &tevStr.mColorK0, &particle_scale
+ eff_set_slip_smoke_pos();
+
+ for (int i = 0; i < (int)ARRAY_SIZE(mSmokeCbs); i++) {
+ JPABaseEmitter* emitter = dComIfGp_particle_setToon(
+ dPa_name::ID_AK_JT_ELEMENTSMOKE00, &mSmokeCbs[i].field_0x20, &mSmokeCbs[i].field_0x2C,
+ &scl, 0xB9, &mSmokeCbs[i], fopAcM_GetRoomNo(this)
);
if (emitter) {
+ emitter->setRate(2.0f);
+ emitter->setDirectionalSpeed(15.0f);
+ emitter->setSpread(0.15f);
emitter->setLifeTime(30);
- emitter->setAwayFromAxisSpeed(30.0f);
}
- daObjEff::Act_c::make_woodBox_smoke(&particlePos);
+ }
+}
+
+/* 00002A14-00002A74 .text eff_smoke_slip_end__Q212daObjMovebox5Act_cFv */
+void Act_c::eff_smoke_slip_end() {
+ for (int i = 0; i < (int)ARRAY_SIZE(mSmokeCbs); i++) {
+ mSmokeCbs[i].remove();
+ }
+}
+
+/* 00002A74-00002AD4 .text eff_smoke_slip_remove__Q212daObjMovebox5Act_cFv */
+void Act_c::eff_smoke_slip_remove() {
+ for (int i = 0; i < (int)ARRAY_SIZE(mSmokeCbs); i++) {
+ mSmokeCbs[i].remove();
+ }
+}
+
+/* 00002AD4-00002B48 .text mode_wait_init__Q212daObjMovebox5Act_cFv */
+void Act_c::mode_wait_init() {
+ fopAcM_SetSpeedF(this, 0.0f);
+ fopAcM_SetGravity(this, attr()->m14);
+ mpBgW->SetCrrFunc(dBgS_MoveBGProc_Trans);
+ clr_moment_cnt();
+ m634 = -1;
+ mMode = MODE_WAIT;
+}
+
+/* 00002B48-00002D84 .text mode_wait__Q212daObjMovebox5Act_cFv */
+void Act_c::mode_wait() {
+ if (m646 > 0) {
+ m646--;
}
- /* 00003570-00003808 .text sound_break__Q212daObjMovebox5Act_cFv */
- void Act_c::sound_break() {
- cXyz centerPos(current.pos.x, current.pos.y + 100.0f, current.pos.z);
- dBgS_ObjGndChk gndChk;
- gndChk.SetPos(&centerPos);
- gndChk.SetActorPid(base.base.mBsPcId);
- dComIfG_Bgsp()->GroundCross(&gndChk);
- int bgIndex = gndChk.GetBgIndex();
- s32 mtrlSndId = 0;
- if (bgIndex >= 0 && bgIndex < 0x100) {
- mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(gndChk);
- }
- fopAcM_seStart(this, JA_SE_OBJ_COL_SWC_WODCRL, mtrlSndId);
+ int r31 = check_to_walk();
+
+ if (!m64F && cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_ON_GROUND_e)) {
+ m64F = true;
+ path_save();
}
- /* 00003AE0-00003BA4 .text sound_slip__Q212daObjMovebox5Act_cFv */
- void Act_c::sound_slip() {
- s32 mtrlSndId = 0;
- if (mBgc.mMaxGroundIdx >= 0) {
- dBgS_ObjGndChk& gndChk = mBgc.M_gnd_work[mBgc.mMaxGroundIdx];
- if (gndChk.GetBgIndex() >= 0 && gndChk.GetBgIndex() < 0x100) {
- mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(gndChk);
- }
+ daObj::posMoveF_stream(this, NULL, &cXyz::Zero, attr()->m18, attr()->m1C);
+
+ mDoMtx_stack_c::transS(home.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::transM(m628 * attr()->m0C, 0.0f, m62C * attr()->m0C);
+ cXyz pos;
+ mDoMtx_stack_c::multVec(&cXyz::Zero, &pos);
+ current.pos.x = pos.x;
+ current.pos.z = pos.z;
+
+ if (r31 != -1) {
+ m634 = r31;
+ eff_smoke_slip_start();
+ daPy_getPlayerActorClass()->onPushPullKeep();
+ mode_walk_init();
+
+ if (cLib_checkBit(mPPLabel, dBgW::PPLABEL_PULL)) {
+ m644 = attr()->m0A;
+ m630 = (f32)0x8000 / attr()->m0A;
+ } else {
+ m644 = attr()->m04;
+ m630 = (f32)0x8000 / attr()->m04;
}
-
- mDoAud_seStart(attr()->mMoveSE, &eyePos, mtrlSndId, mReverb);
}
+}
+
+/* 00002D84-00002DA4 .text mode_walk_init__Q212daObjMovebox5Act_cFv */
+void Act_c::mode_walk_init() {
+ fopAcM_SetSpeedF(this, 0.0f);
+ m64F = false;
+ mMode = MODE_WALK;
+}
+
+/* 00002DA4-000031AC .text mode_walk__Q212daObjMovebox5Act_cFv */
+void Act_c::mode_walk() {
+ static cXyz dir_vec[4] = {
+ cXyz(0.0f, 0.0f, 1.0f),
+ cXyz(1.0f, 0.0f, 0.0f),
+ cXyz(0.0f, 0.0f, -1.0f),
+ cXyz(-1.0f, 0.0f, 0.0f),
+ };
- /* 00003BA4-00003C68 .text sound_limit__Q212daObjMovebox5Act_cFv */
- void Act_c::sound_limit() {
- s32 mtrlSndId = 0;
- if (mBgc.mWallIdx >= 0) {
- dBgS_ObjLinChk& linChk = mBgc.M_wall_work[mBgc.mWallIdx];
- if (linChk.GetBgIndex() >= 0 && linChk.GetBgIndex() < 0x100) {
- mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(linChk);
- }
+ bool r28 = --m644 <= 0;
+ f32 temp = (cM_scos(m644 * m630) + 1.0f) * 0.5f;
+ mDoMtx_stack_c::transS(home.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::transM(
+ (m628 + temp * dir_vec[m634].x) * attr()->m0C,
+ 0.0f,
+ (m62C + temp * dir_vec[m634].z) * attr()->m0C
+ );
+ cXyz temp2;
+ mDoMtx_stack_c::multVec(&cXyz::Zero, &temp2);
+ current.pos.x = temp2.x;
+ current.pos.z = temp2.z;
+ eyePos = current.pos;
+ sound_slip();
+
+ if (r28) {
+ const BgcSrc_c* bgcSrc = attr()->m9A ? Bgc_c::M_lin20 : Bgc_c::M_lin5;
+ int bgcSrcCount = attr()->m9A ? (mType == TYPE_MIRROR ? ARRAY_SIZE(mBgc.M_lin20) : ARRAY_SIZE(mBgc.M_lin20)-2) : ARRAY_SIZE(mBgc.M_lin5);
+ if (mBgc.chk_wall_pre(this, bgcSrc, bgcSrcCount, M_dir_base[m634])) {
+ sound_limit();
+ }
+ eff_smoke_slip_end();
+ } else {
+ eff_set_slip_smoke_pos();
+ }
+
+ daObj::posMoveF_stream(this, NULL, &cXyz::Zero, attr()->m18, attr()->m1C);
+ current.pos.x = temp2.x;
+ current.pos.z = temp2.z;
+
+ if (r28) {
+ if (m634 == 0) {
+ m62C++;
+ } else if (m634 == 1) {
+ m628++;
+ } else if (m634 == 2) {
+ m62C--;
+ } else if (m634 == 3) {
+ m628--;
+ }
+ daPy_getPlayerActorClass()->offPushPullKeep();
+ mode_wait_init();
+ }
+}
+
+/* 000031AC-000031D4 .text mode_afl_init__Q212daObjMovebox5Act_cFv */
+void Act_c::mode_afl_init() {
+ fopAcM_SetSpeedF(this, 0.0f);
+ mpBgW->SetCrrFunc(dBgS_MoveBGProc_Typical);
+ mMode = MODE_AFLOAT;
+}
+
+/* 000031D4-000033D8 .text mode_afl__Q212daObjMovebox5Act_cFv */
+void Act_c::mode_afl() {
+ f32 f1 = current.pos.y - mBgc.mWaterY;
+ f32 f0;
+ if (f1 >= 0.0f) {
+ f0 = 0.0f;
+ } else {
+ if (f1 <= -attr()->m68) {
+ f0 = 1.0f;
+ } else {
+ f1 = -f1;
+ f0 = f1 * attr()->m6C;
}
-
- mDoAud_seStart(attr()->mCantMoveSE, &eyePos, mtrlSndId, mReverb);
}
- /* 00003C68-00003D2C .text sound_land__Q212daObjMovebox5Act_cFv */
- void Act_c::sound_land() {
- s32 mtrlSndId = 0;
- if (mBgc.mMaxGroundIdx >= 0) {
- dBgS_ObjGndChk& gndChk = mBgc.M_gnd_work[mBgc.mMaxGroundIdx];
- if (gndChk.GetBgIndex() >= 0 && gndChk.GetBgIndex() < 0x100) {
- mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(gndChk);
- }
+ s16 r3 = attr()->m38 * (1.0f + cM_rnd());
+ m604 += r3;
+ fopAcM_SetGravity(this, (f0 * attr()->m28) + attr()->m14 + attr()->m34 * cM_ssin(m604) + m608);
+ m608 = 0.0f;
+
+ afl_sway();
+
+ f32 temp3 = 1.0f - f0;
+ f32 temp1 = f0*attr()->m3C + temp3*attr()->m18;
+ f32 temp2 = f0*attr()->m40 + temp3*attr()->m1C;
+
+ m624 = mBgc.mWaterY - current.pos.y;
+ if (m624 < 0.0f) {
+ m624 = 0.0f;
+ } else if (m624 > attr()->m68) {
+ m624 = attr()->m68;
+ }
+
+ daObj::posMoveF_stream(this, NULL, &cXyz::Zero, temp1, temp2);
+}
+
+/* 000033D8-00003450 .text make_item__Q212daObjMovebox5Act_cFv */
+void Act_c::make_item() {
+ int itemTableNo = prm_get_itemNo();
+ int itemBitNo = prm_get_itemSave();
+ fopAcM_createItemFromTable(
+ &current.pos, itemTableNo, itemBitNo,
+ fopAcM_GetHomeRoomNo(this), daItemType_0_e,
+ &current.angle, daItemAct_7_e
+ );
+}
+
+/* 00003450-00003570 .text eff_break__Q212daObjMovebox5Act_cFv */
+void Act_c::eff_break() {
+ static cXyz particle_scale(2.0f, 2.0f, 1.0f);
+ cXyz particlePos;
+ particlePos.set(current.pos.x, current.pos.y + 75.0f, current.pos.z);
+ JPABaseEmitter* emitter = dComIfGp_particle_set(
+ dPa_name::ID_IT_JN_TR_HAHEN_B, &particlePos, NULL, NULL, 0xFF, NULL, -1,
+ &tevStr.mColorK0, &tevStr.mColorK0, &particle_scale
+ );
+ if (emitter) {
+ emitter->setLifeTime(30);
+ emitter->setAwayFromAxisSpeed(30.0f);
+ }
+ daObjEff::Act_c::make_woodBox_smoke(&particlePos);
+}
+
+/* 00003570-00003808 .text sound_break__Q212daObjMovebox5Act_cFv */
+void Act_c::sound_break() {
+ cXyz centerPos(current.pos.x, current.pos.y + 100.0f, current.pos.z);
+ dBgS_ObjGndChk gndChk;
+ gndChk.SetPos(&centerPos);
+ gndChk.SetActorPid(base.base.mBsPcId);
+ dComIfG_Bgsp()->GroundCross(&gndChk);
+ int bgIndex = gndChk.GetBgIndex();
+ s32 mtrlSndId = 0;
+ if (bgIndex >= 0 && bgIndex < 0x100) {
+ mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(gndChk);
+ }
+ fopAcM_seStart(this, JA_SE_OBJ_COL_SWC_WODCRL, mtrlSndId);
+}
+
+/* 00003AE0-00003BA4 .text sound_slip__Q212daObjMovebox5Act_cFv */
+void Act_c::sound_slip() {
+ s32 mtrlSndId = 0;
+ if (mBgc.mMaxGroundIdx >= 0) {
+ dBgS_ObjGndChk& gndChk = mBgc.M_gnd_work[mBgc.mMaxGroundIdx];
+ if (gndChk.GetBgIndex() >= 0 && gndChk.GetBgIndex() < 0x100) {
+ mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(gndChk);
}
-
- mDoAud_seStart(attr()->mNormalFallSE, &eyePos, mtrlSndId, mReverb);
}
- /* 00003D2C-00003D80 .text vib_land__Q212daObjMovebox5Act_cFv */
- void Act_c::vib_land() {
- dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0f, 1.0f, 0.0f));
+ mDoAud_seStart(attr()->mMoveSE, &eyePos, mtrlSndId, mReverb);
+}
+
+/* 00003BA4-00003C68 .text sound_limit__Q212daObjMovebox5Act_cFv */
+void Act_c::sound_limit() {
+ s32 mtrlSndId = 0;
+ if (mBgc.mWallIdx >= 0) {
+ dBgS_ObjLinChk& linChk = mBgc.M_wall_work[mBgc.mWallIdx];
+ if (linChk.GetBgIndex() >= 0 && linChk.GetBgIndex() < 0x100) {
+ mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(linChk);
+ }
}
- /* 00003D80-00003E04 .text eff_land_smoke__Q212daObjMovebox5Act_cFv */
- void Act_c::eff_land_smoke() {
- daObjEff::Act_c::make_land_smoke(&current.pos, attr()->mLandSmokeScale);
+ mDoAud_seStart(attr()->mCantMoveSE, &eyePos, mtrlSndId, mReverb);
+}
+
+/* 00003C68-00003D2C .text sound_land__Q212daObjMovebox5Act_cFv */
+void Act_c::sound_land() {
+ s32 mtrlSndId = 0;
+ if (mBgc.mMaxGroundIdx >= 0) {
+ dBgS_ObjGndChk& gndChk = mBgc.M_gnd_work[mBgc.mMaxGroundIdx];
+ if (gndChk.GetBgIndex() >= 0 && gndChk.GetBgIndex() < 0x100) {
+ mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(gndChk);
+ }
}
- /* 00003E04-000040D0 .text Execute__Q212daObjMovebox5Act_cFPPA3_A4_f */
- BOOL Act_c::Execute(Mtx** pMtx) {
- if (mCyl.ChkTgHit() || mbRollCrash) {
- make_item();
- eff_break();
- sound_break();
- fopAcM_delete(this);
- } else {
- if (cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_JUST_HIT_WATER_e)) {
- mDoAud_seStart(attr()->mWaterFallSE, &eyePos, 0, mReverb);
- }
-
- if (mMode == MODE_WAIT) {
- if (cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_IN_WATER_e) && m646 == 0) {
- if (cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_ON_GROUND_e)) {
- if (attr()->m28 + attr()->m14 > 0.0f) {
- mode_afl_init();
- }
- } else {
+ mDoAud_seStart(attr()->mNormalFallSE, &eyePos, mtrlSndId, mReverb);
+}
+
+/* 00003D2C-00003D80 .text vib_land__Q212daObjMovebox5Act_cFv */
+void Act_c::vib_land() {
+ dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0f, 1.0f, 0.0f));
+}
+
+/* 00003D80-00003E04 .text eff_land_smoke__Q212daObjMovebox5Act_cFv */
+void Act_c::eff_land_smoke() {
+ daObjEff::Act_c::make_land_smoke(&current.pos, attr()->mLandSmokeScale);
+}
+
+/* 00003E04-000040D0 .text Execute__Q212daObjMovebox5Act_cFPPA3_A4_f */
+BOOL Act_c::Execute(Mtx** pMtx) {
+ if (mCyl.ChkTgHit() || mbRollCrash) {
+ make_item();
+ eff_break();
+ sound_break();
+ fopAcM_delete(this);
+ } else {
+ if (cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_JUST_HIT_WATER_e)) {
+ mDoAud_seStart(attr()->mWaterFallSE, &eyePos, 0, mReverb);
+ }
+
+ if (mMode == MODE_WAIT) {
+ if (cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_IN_WATER_e) && m646 == 0) {
+ if (cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_ON_GROUND_e)) {
+ if (attr()->m28 + attr()->m14 > 0.0f) {
mode_afl_init();
}
+ } else {
+ mode_afl_init();
}
- } else if (mMode == MODE_AFLOAT && cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_ON_GROUND_e)) {
- mode_wait_init();
- m646 = 20;
- }
-
- mode_proc_call();
- mBgc.proc_vertical(this);
- if (mBgc.mMaxGroundIdx >= 0) {
- tevStr.mRoomNo = current.roomNo;
- tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mBgc.M_gnd_work[mBgc.mMaxGroundIdx]);
- }
-
- if (m648 > 0) {
- m648--;
- } else {
- if (cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_JUST_HIT_GROUND_e)) {
- sound_land();
- vib_land();
- if (!cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_IN_WATER_e)) {
- eff_land_smoke();
- }
- }
- }
-
- set_mtx();
-
- if (mType == TYPE_BREAKABLE_WOODEN_CRATE || mType == TYPE_GOLDEN_CRATE) {
- mCyl.MoveCTg(current.pos);
- dComIfG_Ccsp()->Set(&mCyl);
}
+ } else if (mMode == MODE_AFLOAT && cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_ON_GROUND_e)) {
+ mode_wait_init();
+ m646 = 20;
}
- *pMtx = &mMtx;
- return TRUE;
- }
-
- /* 000040D0-00004254 .text Draw__Q212daObjMovebox5Act_cFv */
- BOOL Act_c::Draw() {
- if (mpModel) {
- g_env_light.settingTevStruct(
- !attr()->mbUseBGTevType ? TEV_TYPE_ACTOR : TEV_TYPE_BG0,
- &current.pos, &tevStr
- );
- g_env_light.setLightTevColorType(mpModel, &tevStr);
- dComIfGd_setListBG();
- mDoExt_modelUpdateDL(mpModel);
- dComIfGd_setList();
+ mode_proc_call();
+ mBgc.proc_vertical(this);
+ if (mBgc.mMaxGroundIdx >= 0) {
+ tevStr.mRoomNo = current.roomNo;
+ tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mBgc.M_gnd_work[mBgc.mMaxGroundIdx]);
}
- if (!attr()->mbCastsShadow && mBgc.mMaxGroundIdx >= 0) {
- int temp = mBgc.mMaxGroundIdx;
- f32 groundH = mBgc.mGroundY[temp];
- cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mBgc.M_gnd_work[temp]);
- cXyz* norm = triPla->GetNP();
- if (norm && groundH != -G_CM3D_F_INF) {
- dComIfGd_setSimpleShadow(&current.pos, groundH, attr()->m10, norm, shape_angle.y, 1.0f, NULL);
+ if (m648 > 0) {
+ m648--;
+ } else {
+ if (cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_JUST_HIT_GROUND_e)) {
+ sound_land();
+ vib_land();
+ if (!cLib_checkBit(mBgc.mStateFlags, Bgc_c::BgcState_IN_WATER_e)) {
+ eff_land_smoke();
+ }
}
}
- return TRUE;
+ set_mtx();
+
+ if (mType == TYPE_BREAKABLE_WOODEN_CRATE || mType == TYPE_GOLDEN_CRATE) {
+ mCyl.MoveCTg(current.pos);
+ dComIfG_Ccsp()->Set(&mCyl);
+ }
}
- /* 00004254-000042A0 .text Delete__Q212daObjMovebox5Act_cFv */
- BOOL Act_c::Delete() {
- eff_smoke_slip_remove();
- if (mpBgW) {
- mpBgW->mpRideCb = NULL;
- mpBgW->mpPushPullCb = NULL;
- }
- return TRUE;
+ *pMtx = &mMtx;
+ return TRUE;
+}
+
+/* 000040D0-00004254 .text Draw__Q212daObjMovebox5Act_cFv */
+BOOL Act_c::Draw() {
+ if (mpModel) {
+ g_env_light.settingTevStruct(
+ !attr()->mbUseBGTevType ? TEV_TYPE_ACTOR : TEV_TYPE_BG0,
+ &current.pos, &tevStr
+ );
+ g_env_light.setLightTevColorType(mpModel, &tevStr);
+ dComIfGd_setListBG();
+ mDoExt_modelUpdateDL(mpModel);
+ dComIfGd_setList();
}
- namespace {
- /* 000042A0-000044E0 .text Mthd_Create__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
- cPhs_State Mthd_Create(void* i_this) {
- return static_cast<Act_c*>(i_this)->Mthd_Create();
- }
-
- /* 000044E0-00004544 .text Mthd_Delete__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
- BOOL Mthd_Delete(void* i_this) {
- return static_cast<Act_c*>(i_this)->Mthd_Delete();
- }
-
- /* 00004544-00004564 .text Mthd_Execute__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
- BOOL Mthd_Execute(void* i_this) {
- return static_cast<Act_c*>(i_this)->MoveBGExecute();
- }
-
- /* 00004564-00004590 .text Mthd_Draw__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
- BOOL Mthd_Draw(void* i_this) {
- return static_cast<Act_c*>(i_this)->MoveBGDraw();
- }
-
- /* 00004590-000045BC .text Mthd_IsDelete__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
- BOOL Mthd_IsDelete(void* i_this) {
- return static_cast<Act_c*>(i_this)->MoveBGIsDelete();
+ if (!attr()->mbCastsShadow && mBgc.mMaxGroundIdx >= 0) {
+ int temp = mBgc.mMaxGroundIdx;
+ f32 groundH = mBgc.mGroundY[temp];
+ cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mBgc.M_gnd_work[temp]);
+ cXyz* norm = triPla->GetNP();
+ if (norm && groundH != -G_CM3D_F_INF) {
+ dComIfGd_setSimpleShadow(&current.pos, groundH, attr()->m10, norm, shape_angle.y, 1.0f, NULL);
}
-
- static actor_method_class Mthd_Table = {
- (process_method_func)Mthd_Create,
- (process_method_func)Mthd_Delete,
- (process_method_func)Mthd_Execute,
- (process_method_func)Mthd_IsDelete,
- (process_method_func)Mthd_Draw,
- };
- }; // namespace
+ }
+
+ return TRUE;
+}
+
+/* 00004254-000042A0 .text Delete__Q212daObjMovebox5Act_cFv */
+BOOL Act_c::Delete() {
+ eff_smoke_slip_remove();
+ if (mpBgW) {
+ mpBgW->mpRideCb = NULL;
+ mpBgW->mpPushPullCb = NULL;
+ }
+ return TRUE;
+}
+
+namespace {
+/* 000042A0-000044E0 .text Mthd_Create__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
+cPhs_State Mthd_Create(void* i_this) {
+ return static_cast<Act_c*>(i_this)->Mthd_Create();
+}
+
+/* 000044E0-00004544 .text Mthd_Delete__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
+BOOL Mthd_Delete(void* i_this) {
+ return static_cast<Act_c*>(i_this)->Mthd_Delete();
+}
+
+/* 00004544-00004564 .text Mthd_Execute__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
+BOOL Mthd_Execute(void* i_this) {
+ return static_cast<Act_c*>(i_this)->MoveBGExecute();
+}
+
+/* 00004564-00004590 .text Mthd_Draw__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
+BOOL Mthd_Draw(void* i_this) {
+ return static_cast<Act_c*>(i_this)->MoveBGDraw();
+}
+
+/* 00004590-000045BC .text Mthd_IsDelete__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
+BOOL Mthd_IsDelete(void* i_this) {
+ return static_cast<Act_c*>(i_this)->MoveBGIsDelete();
+}
+
+static actor_method_class Mthd_Table = {
+ (process_method_func)Mthd_Create,
+ (process_method_func)Mthd_Delete,
+ (process_method_func)Mthd_Execute,
+ (process_method_func)Mthd_IsDelete,
+ (process_method_func)Mthd_Draw,
+};
+}; // namespace
}; // namespace daObjMovebox
diff --git a/src/d/actor/d_a_obj_paper.cpp b/src/d/actor/d_a_obj_paper.cpp
index 80fb15ec..0fa35b73 100644
--- a/src/d/actor/d_a_obj_paper.cpp
+++ b/src/d/actor/d_a_obj_paper.cpp
@@ -21,340 +21,342 @@
#include "m_Do/m_Do_mtx.h"
namespace daObjPaper {
- namespace {
- struct Attr_c {
- /* 0x00 */ char* mResName;
- /* 0x04 */ s32 mHeapSize;
- /* 0x06 */ s16 mModelId;
- /* 0x08 */ s16 mEyeOffset;
- /* 0x0A */ s16 mAttentionOffset;
- /* 0x0C */ s16 mCullSphereRadius;
- /* 0x0E */ s16 mCullSphereYOffset;
- /* 0x10 */ s8 mAttentionDist1;
- /* 0x11 */ s8 mAttentionDist2;
- /* 0x12 */ u8 mTevType;
- /* 0x14 */ s16 mColCylinderRadius;
- /* 0x16 */ s16 mColCylinderHeight;
- };
-
- static const Attr_c L_attr[] = {
- {
- /* mResName */ "Opaper",
- /* mHeapSize */ 0x04C0,
- /* mModelId */ dRes_INDEX_OPAPER_BDL_OPAPER_e,
- /* mEyeOffset */ 0x00,
- /* mAttentionOffset */ 0x28,
- /* mCullSphereRadius */ 0x28,
- /* mCullSphereYOffset */ 0x00,
- /* mAttentionDist1 */ 0x1D,
- /* mAttentionDist2 */ 0x1E,
- /* mTevType */ 0x01,
- /* mColCylinderRadius */ 0x00,
- /* mColCylinderHeight */ 0x00,
- },
- {
- /* mResName */ "Ppos",
- /* mHeapSize */ DEMO_SELECT(0x1000, 0x04C0),
- /* mModelId */ dRes_INDEX_PPOS_BDL_PPOS_e,
- /* mEyeOffset */ 0x00,
- /* mAttentionOffset */ 0x32,
- /* mCullSphereRadius */ 0x3C,
- /* mCullSphereYOffset */ 0x00,
- /* mAttentionDist1 */ 0x1F,
- /* mAttentionDist2 */ 0x20,
- /* mTevType */ 0x00,
- /* mColCylinderRadius */ 0x00,
- /* mColCylinderHeight */ 0x00,
- },
- {
- /* mResName */ "Piwa",
- /* mHeapSize */ DEMO_SELECT(0x8000, 0x04C0),
- /* mModelId */ dRes_INDEX_PIWA_BDL_PIWA_e,
- /* mEyeOffset */ 0x3C,
- /* mAttentionOffset */ 0x82,
- /* mCullSphereRadius */ 0x50,
- /* mCullSphereYOffset */ 0x3C,
- /* mAttentionDist1 */ 0x1D,
- /* mAttentionDist2 */ 0x1E,
- /* mTevType */ 0x00,
- /* mColCylinderRadius */ 0x37,
- /* mColCylinderHeight */ 0x73,
- }
- };
- inline const Attr_c & attr(Type_e type) { return L_attr[type]; }
- }
+namespace {
+ struct Attr_c {
+ /* 0x00 */ char* mResName;
+ /* 0x04 */ s32 mHeapSize;
+ /* 0x06 */ s16 mModelId;
+ /* 0x08 */ s16 mEyeOffset;
+ /* 0x0A */ s16 mAttentionOffset;
+ /* 0x0C */ s16 mCullSphereRadius;
+ /* 0x0E */ s16 mCullSphereYOffset;
+ /* 0x10 */ s8 mAttentionDist1;
+ /* 0x11 */ s8 mAttentionDist2;
+ /* 0x12 */ u8 mTevType;
+ /* 0x14 */ s16 mColCylinderRadius;
+ /* 0x16 */ s16 mColCylinderHeight;
+ };
- const dCcD_SrcCyl Act_c::M_cyl_src = {
- // dCcD_SrcGObjInf
+ static const Attr_c L_attr[] = {
+ {
+ /* mResName */ "Opaper",
+ /* mHeapSize */ 0x04C0,
+ /* mModelId */ dRes_INDEX_OPAPER_BDL_OPAPER_e,
+ /* mEyeOffset */ 0x00,
+ /* mAttentionOffset */ 0x28,
+ /* mCullSphereRadius */ 0x28,
+ /* mCullSphereYOffset */ 0x00,
+ /* mAttentionDist1 */ 0x1D,
+ /* mAttentionDist2 */ 0x1E,
+ /* mTevType */ 0x01,
+ /* mColCylinderRadius */ 0x00,
+ /* mColCylinderHeight */ 0x00,
+ },
{
- /* Flags */ 0,
- /* SrcObjAt Type */ 0,
- /* SrcObjAt Atp */ 0,
- /* SrcObjAt SPrm */ 0,
- /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT),
- /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_GrpAll_e,
- /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsGrpAll_e,
- /* 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 */ dCcG_TgSPrm_Shield_e | dCcG_TgSPrm_NoConHit_e,
- /* SrcGObjCo SPrm */ 0,
+ /* mResName */ "Ppos",
+ /* mHeapSize */ DEMO_SELECT(0x1000, 0x04C0),
+ /* mModelId */ dRes_INDEX_PPOS_BDL_PPOS_e,
+ /* mEyeOffset */ 0x00,
+ /* mAttentionOffset */ 0x32,
+ /* mCullSphereRadius */ 0x3C,
+ /* mCullSphereYOffset */ 0x00,
+ /* mAttentionDist1 */ 0x1F,
+ /* mAttentionDist2 */ 0x20,
+ /* mTevType */ 0x00,
+ /* mColCylinderRadius */ 0x00,
+ /* mColCylinderHeight */ 0x00,
},
- // cM3dGCylS
- {{
- /* Center */ {0.0f, 0.0f, 0.0f},
- /* Radius */ 0.0f,
- /* Height */ 0.0f,
- }},
+ {
+ /* mResName */ "Piwa",
+ /* mHeapSize */ DEMO_SELECT(0x8000, 0x04C0),
+ /* mModelId */ dRes_INDEX_PIWA_BDL_PIWA_e,
+ /* mEyeOffset */ 0x3C,
+ /* mAttentionOffset */ 0x82,
+ /* mCullSphereRadius */ 0x50,
+ /* mCullSphereYOffset */ 0x3C,
+ /* mAttentionDist1 */ 0x1D,
+ /* mAttentionDist2 */ 0x1E,
+ /* mTevType */ 0x00,
+ /* mColCylinderRadius */ 0x37,
+ /* mColCylinderHeight */ 0x73,
+ }
};
- /* 00000078-0000009C .text solidHeapCB__Q210daObjPaper5Act_cFP10fopAc_ac_c */
- int Act_c::solidHeapCB(fopAc_ac_c* i_this) {
- return static_cast<Act_c*>(i_this)->create_heap();
- }
+ inline const Attr_c & attr(Type_e type) { return L_attr[type]; }
+}
- /* 0000009C-00000170 .text create_heap__Q210daObjPaper5Act_cFv */
- bool Act_c::create_heap() {
- J3DModelData* mdl_data;
- bool ret = false;
+const dCcD_SrcCyl Act_c::M_cyl_src = {
+ // dCcD_SrcGObjInf
+ {
+ /* Flags */ 0,
+ /* SrcObjAt Type */ 0,
+ /* SrcObjAt Atp */ 0,
+ /* SrcObjAt SPrm */ 0,
+ /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT),
+ /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_GrpAll_e,
+ /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsGrpAll_e,
+ /* 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 */ dCcG_TgSPrm_Shield_e | dCcG_TgSPrm_NoConHit_e,
+ /* SrcGObjCo SPrm */ 0,
+ },
+ // cM3dGCylS
+ {{
+ /* Center */ {0.0f, 0.0f, 0.0f},
+ /* Radius */ 0.0f,
+ /* Height */ 0.0f,
+ }},
+};
- mdl_data = (J3DModelData*)dComIfG_getObjectRes(attr(mType).mResName, attr(mType).mModelId);
+/* 00000078-0000009C .text solidHeapCB__Q210daObjPaper5Act_cFP10fopAc_ac_c */
+int Act_c::solidHeapCB(fopAc_ac_c* i_this) {
+ return static_cast<Act_c*>(i_this)->create_heap();
+}
- JUT_ASSERT(0x13E, mdl_data != NULL);
+/* 0000009C-00000170 .text create_heap__Q210daObjPaper5Act_cFv */
+bool Act_c::create_heap() {
+ J3DModelData* mdl_data;
+ bool ret = false;
- mpModel = mDoExt_J3DModel__create(mdl_data, 0x80000, 0x11000022);
- if (mpModel)
- ret = true;
+ mdl_data = (J3DModelData*)dComIfG_getObjectRes(attr(mType).mResName, attr(mType).mModelId);
- return ret;
- }
+ JUT_ASSERT(0x13E, mdl_data != NULL);
- /* 00000170-000004E0 .text _create__Q210daObjPaper5Act_cFv */
- cPhs_State Act_c::_create() {
- fopAcM_ct(this, Act_c);
+ mpModel = mDoExt_J3DModel__create(mdl_data, 0x80000, 0x11000022);
+ if (mpModel)
+ ret = true;
- mType = prm_get_type();
+ return ret;
+}
- cPhs_State result = dComIfG_resLoad(&mPhs, attr(mType).mResName);
+/* 00000170-000004E0 .text _create__Q210daObjPaper5Act_cFv */
+cPhs_State Act_c::_create() {
+ fopAcM_ct(this, Act_c);
- if (result == cPhs_COMPLEATE_e) {
- if (fopAcM_entrySolidHeap(this, solidHeapCB, attr(mType).mHeapSize)) {
- eyePos.y += attr(mType).mEyeOffset;
+ mType = prm_get_type();
- attention_info.position.y += attr(mType).mAttentionOffset;
- attention_info.distances[fopAc_Attn_TYPE_TALK_e] = attr(mType).mAttentionDist1;
- attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = attr(mType).mAttentionDist2;
- cLib_onBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e | fopAc_Attn_TALKFLAG_READ_e);
+ cPhs_State result = dComIfG_resLoad(&mPhs, attr(mType).mResName);
- mMsgId = fpcM_ERROR_PROCESS_ID_e;
+ if (result == cPhs_COMPLEATE_e) {
+ if (fopAcM_entrySolidHeap(this, solidHeapCB, attr(mType).mHeapSize)) {
+ eyePos.y += attr(mType).mEyeOffset;
- if (mType == Piwa_e) {
- fopAcM_SetStatusMap(this, 0x18);
- }
+ attention_info.position.y += attr(mType).mAttentionOffset;
+ attention_info.distances[fopAc_Attn_TYPE_TALK_e] = attr(mType).mAttentionDist1;
+ attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = attr(mType).mAttentionDist2;
+ cLib_onBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e | fopAc_Attn_TALKFLAG_READ_e);
- if (attr(mType).mColCylinderRadius != 0) {
- mbHasCc = true;
+ mMsgId = fpcM_ERROR_PROCESS_ID_e;
- mColStatus.Init(0xFF, 0xFF, this);
- mCylinderCol.Set(M_cyl_src);
+ if (mType == Piwa_e) {
+ fopAcM_SetStatusMap(this, 0x18);
+ }
- mCylinderCol.SetStts(&mColStatus);
+ if (attr(mType).mColCylinderRadius != 0) {
+ mbHasCc = true;
- mCylinderCol.SetR(attr(mType).mColCylinderRadius);
- mCylinderCol.SetH(attr(mType).mColCylinderHeight);
- } else {
- mbHasCc = false;
- }
+ mColStatus.Init(0xFF, 0xFF, this);
+ mCylinderCol.Set(M_cyl_src);
- fopAcM_setCullSizeSphere(this, 0.0f, attr(mType).mCullSphereYOffset, 0.0f, attr(mType).mCullSphereRadius);
- fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
+ mCylinderCol.SetStts(&mColStatus);
- init_mtx();
- mode_wait_init();
+ mCylinderCol.SetR(attr(mType).mColCylinderRadius);
+ mCylinderCol.SetH(attr(mType).mColCylinderHeight);
} else {
- result = cPhs_ERROR_e;
+ mbHasCc = false;
}
- }
-
- return result;
- }
- /* 000006F4-00000730 .text _delete__Q210daObjPaper5Act_cFv */
- bool daObjPaper::Act_c::_delete() {
- dComIfG_resDeleteDemo(&mPhs, attr(mType).mResName);
- return TRUE;
- }
-
- /* 00000730-00000748 .text mode_wait_init__Q210daObjPaper5Act_cFv */
- void daObjPaper::Act_c::mode_wait_init() {
- fopAcM_OnStatus(this, fopAcStts_NOCULLEXEC_e);
- mMode = ActMode_WAIT_e;
- }
+ fopAcM_setCullSizeSphere(this, 0.0f, attr(mType).mCullSphereYOffset, 0.0f, attr(mType).mCullSphereRadius);
+ fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
- /* 00000748-00000784 .text mode_wait__Q210daObjPaper5Act_cFv */
- void daObjPaper::Act_c::mode_wait() {
- if (eventInfo.mCommand == dEvtCmd_INTALK_e) {
- mode_talk0_init();
- }
- else {
- eventInfo.onCondition(dEvtCnd_CANTALK_e);
+ init_mtx();
+ mode_wait_init();
+ } else {
+ result = cPhs_ERROR_e;
}
}
- /* 00000784-000007A4 .text mode_talk0_init__Q210daObjPaper5Act_cFv */
- void daObjPaper::Act_c::mode_talk0_init() {
- fopAcM_OffStatus(this, fopAcStts_NOCULLEXEC_e);
- mMsgId = fpcM_ERROR_PROCESS_ID_e;
- mMode = ActMode_TALKBEGIN_e;
- }
+ return result;
+}
- /* 000007A4-00000820 .text mode_talk0__Q210daObjPaper5Act_cFv */
- void daObjPaper::Act_c::mode_talk0() {
- if (mMsgId == fpcM_ERROR_PROCESS_ID_e && dComIfGp_checkCameraAttentionStatus(dComIfGp_getPlayerCameraID(0), dCamAttnStts_00000004_e)) {
- mMsgId = fopMsgM_messageSet(prm_get_msgNo(), &eyePos);
+/* 000006F4-00000730 .text _delete__Q210daObjPaper5Act_cFv */
+bool daObjPaper::Act_c::_delete() {
+ dComIfG_resDeleteDemo(&mPhs, attr(mType).mResName);
+ return TRUE;
+}
- mode_talk1_init();
- }
- }
+/* 00000730-00000748 .text mode_wait_init__Q210daObjPaper5Act_cFv */
+void daObjPaper::Act_c::mode_wait_init() {
+ fopAcM_OnStatus(this, fopAcStts_NOCULLEXEC_e);
+ mMode = ActMode_WAIT_e;
+}
- /* 00000820-0000082C .text mode_talk1_init__Q210daObjPaper5Act_cFv */
- void daObjPaper::Act_c::mode_talk1_init() {
- mMode = ActMode_GETMSG_e;
+/* 00000748-00000784 .text mode_wait__Q210daObjPaper5Act_cFv */
+void daObjPaper::Act_c::mode_wait() {
+ if (eventInfo.mCommand == dEvtCmd_INTALK_e) {
+ mode_talk0_init();
}
-
- /* 0000082C-00000874 .text mode_talk1__Q210daObjPaper5Act_cFv */
- void daObjPaper::Act_c::mode_talk1() {
- mpMsg = fopMsgM_SearchByID(mMsgId);
- if (mpMsg) {
- mode_talk2_init();
- }
+ else {
+ eventInfo.onCondition(dEvtCnd_CANTALK_e);
}
+}
- /* 00000874-00000880 .text mode_talk2_init__Q210daObjPaper5Act_cFv */
- void daObjPaper::Act_c::mode_talk2_init() {
- mMode = ActMode_TALKWAIT_e;
- }
+/* 00000784-000007A4 .text mode_talk0_init__Q210daObjPaper5Act_cFv */
+void daObjPaper::Act_c::mode_talk0_init() {
+ fopAcM_OffStatus(this, fopAcStts_NOCULLEXEC_e);
+ mMsgId = fpcM_ERROR_PROCESS_ID_e;
+ mMode = ActMode_TALKBEGIN_e;
+}
- /* 00000880-000008DC .text mode_talk2__Q210daObjPaper5Act_cFv */
- void daObjPaper::Act_c::mode_talk2() {
- if (mpMsg->mStatus == fopMsgStts_BOX_CLOSED_e) {
- mpMsg->mStatus = fopMsgStts_MSG_DESTROYED_e;
- mpMsg = NULL;
- mMsgId = fpcM_ERROR_PROCESS_ID_e;
+/* 000007A4-00000820 .text mode_talk0__Q210daObjPaper5Act_cFv */
+void daObjPaper::Act_c::mode_talk0() {
+ if (mMsgId == fpcM_ERROR_PROCESS_ID_e && dComIfGp_checkCameraAttentionStatus(dComIfGp_getPlayerCameraID(0), dCamAttnStts_00000004_e)) {
+ mMsgId = fopMsgM_messageSet(prm_get_msgNo(), &eyePos);
- dComIfGp_event_reset();
- mode_wait_init();
- }
+ mode_talk1_init();
}
+}
- /* 000008DC-00000948 .text set_mtx__Q210daObjPaper5Act_cFv */
- void daObjPaper::Act_c::set_mtx() {
- mDoMtx_stack_c::transS(current.pos);
- mDoMtx_stack_c::ZXYrotM(shape_angle);
+/* 00000820-0000082C .text mode_talk1_init__Q210daObjPaper5Act_cFv */
+void daObjPaper::Act_c::mode_talk1_init() {
+ mMode = ActMode_GETMSG_e;
+}
- mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
+/* 0000082C-00000874 .text mode_talk1__Q210daObjPaper5Act_cFv */
+void daObjPaper::Act_c::mode_talk1() {
+ mpMsg = fopMsgM_SearchByID(mMsgId);
+ if (mpMsg) {
+ mode_talk2_init();
}
+}
+
+/* 00000874-00000880 .text mode_talk2_init__Q210daObjPaper5Act_cFv */
+void daObjPaper::Act_c::mode_talk2_init() {
+ mMode = ActMode_TALKWAIT_e;
+}
+
+/* 00000880-000008DC .text mode_talk2__Q210daObjPaper5Act_cFv */
+void daObjPaper::Act_c::mode_talk2() {
+ if (mpMsg->mStatus == fopMsgStts_BOX_CLOSED_e) {
+ mpMsg->mStatus = fopMsgStts_MSG_DESTROYED_e;
+ mpMsg = NULL;
+ mMsgId = fpcM_ERROR_PROCESS_ID_e;
- /* 00000948-00000984 .text init_mtx__Q210daObjPaper5Act_cFv */
- void daObjPaper::Act_c::init_mtx() {
- mpModel->setBaseScale(scale);
- set_mtx();
+ dComIfGp_event_reset();
+ mode_wait_init();
}
+}
- /* 00000984-00000A38 .text damage_cc_proc__Q210daObjPaper5Act_cFv */
- void daObjPaper::Act_c::damage_cc_proc() {
- u32 hitResult = mCylinderCol.ChkTgHit();
- if (hitResult) {
- daObj::HitSeStart(&eyePos, current.roomNo, &mCylinderCol, 0x0D);
- dKy_Sound_set(current.pos, 4, fopAcM_GetID(this), 100);
+/* 000008DC-00000948 .text set_mtx__Q210daObjPaper5Act_cFv */
+void daObjPaper::Act_c::set_mtx() {
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
- daObj::HitEff_hibana(this, &mCylinderCol);
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
+}
- mCylinderCol.ClrTgHit();
- }
+/* 00000948-00000984 .text init_mtx__Q210daObjPaper5Act_cFv */
+void daObjPaper::Act_c::init_mtx() {
+ mpModel->setBaseScale(scale);
+ set_mtx();
+}
+
+/* 00000984-00000A38 .text damage_cc_proc__Q210daObjPaper5Act_cFv */
+void daObjPaper::Act_c::damage_cc_proc() {
+ u32 hitResult = mCylinderCol.ChkTgHit();
+ if (hitResult) {
+ daObj::HitSeStart(&eyePos, current.roomNo, &mCylinderCol, 0x0D);
+ dKy_Sound_set(current.pos, 4, fopAcM_GetID(this), 100);
- mColStatus.Move();
+ daObj::HitEff_hibana(this, &mCylinderCol);
+
+ mCylinderCol.ClrTgHit();
}
- typedef void (Act_c::*daObjPaper_mode_t)(void);
+ mColStatus.Move();
+}
- /* 00000A38-00000B58 .text _execute__Q210daObjPaper5Act_cFv */
- bool daObjPaper::Act_c::_execute() {
- static const daObjPaper_mode_t mode_proc[] = {
- &Act_c::mode_wait,
- &Act_c::mode_talk0,
- &Act_c::mode_talk1,
- &Act_c::mode_talk2,
- };
+typedef void (Act_c::*daObjPaper_mode_t)(void);
- if (mbHasCc) {
- damage_cc_proc();
- }
+/* 00000A38-00000B58 .text _execute__Q210daObjPaper5Act_cFv */
+bool daObjPaper::Act_c::_execute() {
+ static const daObjPaper_mode_t mode_proc[] = {
+ &Act_c::mode_wait,
+ &Act_c::mode_talk0,
+ &Act_c::mode_talk1,
+ &Act_c::mode_talk2,
+ };
- (this->*mode_proc[mMode])();
+ if (mbHasCc) {
+ damage_cc_proc();
+ }
- set_mtx();
- if (mbHasCc) {
- mCylinderCol.SetC(current.pos);
- dComIfG_Ccsp()->Set(&mCylinderCol);
- }
+ (this->*mode_proc[mMode])();
- return true;
+ set_mtx();
+ if (mbHasCc) {
+ mCylinderCol.SetC(current.pos);
+ dComIfG_Ccsp()->Set(&mCylinderCol);
}
- /* 00000B58-00000BD4 .text _draw__Q210daObjPaper5Act_cFv */
- bool daObjPaper::Act_c::_draw() {
- g_env_light.settingTevStruct(attr(mType).mTevType == 0 ? TEV_TYPE_BG0 : TEV_TYPE_ACTOR, &current.pos, &tevStr);
- g_env_light.setLightTevColorType(mpModel, &tevStr);
+ return true;
+}
- mDoExt_modelUpdateDL(mpModel);
+/* 00000B58-00000BD4 .text _draw__Q210daObjPaper5Act_cFv */
+bool daObjPaper::Act_c::_draw() {
+ g_env_light.settingTevStruct(attr(mType).mTevType == 0 ? TEV_TYPE_BG0 : TEV_TYPE_ACTOR, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType(mpModel, &tevStr);
- return TRUE;
- }
+ mDoExt_modelUpdateDL(mpModel);
- namespace {
- /* 00000BD4-00000BF4 .text Mthd_Create__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */
- static cPhs_State Mthd_Create(void* i_this) {
- return static_cast<Act_c*>(i_this)->_create();
- }
+ return TRUE;
+}
- /* 00000BF4-00000C18 .text Mthd_Delete__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */
- static BOOL Mthd_Delete(void* i_this) {
- return static_cast<Act_c*>(i_this)->_delete();
- }
+namespace {
+/* 00000BD4-00000BF4 .text Mthd_Create__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */
+static cPhs_State Mthd_Create(void* i_this) {
+ return static_cast<Act_c*>(i_this)->_create();
+}
- /* 00000C18-00000C3C .text Mthd_Execute__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */
- static BOOL Mthd_Execute(void* i_this) {
- return static_cast<Act_c*>(i_this)->_execute();
- }
+/* 00000BF4-00000C18 .text Mthd_Delete__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */
+static BOOL Mthd_Delete(void* i_this) {
+ return static_cast<Act_c*>(i_this)->_delete();
+}
- /* 00000C3C-00000C60 .text Mthd_Draw__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */
- static BOOL Mthd_Draw(void* i_this) {
- return static_cast<Act_c*>(i_this)->_draw();
- }
+/* 00000C18-00000C3C .text Mthd_Execute__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */
+static BOOL Mthd_Execute(void* i_this) {
+ return static_cast<Act_c*>(i_this)->_execute();
+}
- /* 00000C60-00000C68 .text Mthd_IsDelete__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */
- static BOOL Mthd_IsDelete(void* i_this) {
- return TRUE;
- }
+/* 00000C3C-00000C60 .text Mthd_Draw__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */
+static BOOL Mthd_Draw(void* i_this) {
+ return static_cast<Act_c*>(i_this)->_draw();
+}
- static actor_method_class Mthd_Table = {
- (process_method_func)Mthd_Create,
- (process_method_func)Mthd_Delete,
- (process_method_func)Mthd_Execute,
- (process_method_func)Mthd_IsDelete,
- (process_method_func)Mthd_Draw,
- };
- }
+/* 00000C60-00000C68 .text Mthd_IsDelete__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */
+static BOOL Mthd_IsDelete(void* i_this) {
+ return TRUE;
}
+static actor_method_class Mthd_Table = {
+ (process_method_func)Mthd_Create,
+ (process_method_func)Mthd_Delete,
+ (process_method_func)Mthd_Execute,
+ (process_method_func)Mthd_IsDelete,
+ (process_method_func)Mthd_Draw,
+};
+}; // namespace
+
+}; // namespace daObjPaper
+
actor_process_profile_definition g_profile_Obj_Paper = {
/* Layer ID */ fpcLy_CURRENT_e,
/* List ID */ 0x0007,
diff --git a/src/d/actor/d_a_tag_waterlevel.cpp b/src/d/actor/d_a_tag_waterlevel.cpp
index 6e097c78..94fd7fb7 100644
--- a/src/d/actor/d_a_tag_waterlevel.cpp
+++ b/src/d/actor/d_a_tag_waterlevel.cpp
@@ -10,138 +10,140 @@
#include "SSystem/SComponent/c_lib.h"
namespace daTagWaterlevel {
- namespace {
- struct Attr_c {
- f32 field_0x00;
- f32 field_0x04;
- f32 field_0x08;
- f32 field_0x0c;
- };
-
- static const Attr_c L_attr = {
- 0.005f, 0.05f, 0.015f, 0.005f,
- };
-
- inline const Attr_c & attr() { return L_attr; }
- }
- /* 00000078-000001D4 .text _create__Q28daTagRet5Act_cFv */
- cPhs_State Act_c::_create() {
- fopAcM_ct(this, Act_c);
+namespace {
+ struct Attr_c {
+ f32 field_0x00;
+ f32 field_0x04;
+ f32 field_0x08;
+ f32 field_0x0c;
+ };
- if ((prm_get_sch() & dKy_get_schbit() & 0xFF)) {
- M_now = 1.0f;
- } else {
- M_now = 0.0f;
- }
+ static const Attr_c L_attr = {
+ 0.005f, 0.05f, 0.015f, 0.005f,
+ };
- field_0x290 = 0.0f;
- mAction = 0;
+ inline const Attr_c & attr() { return L_attr; }
+}
- return cPhs_COMPLEATE_e;
- }
+/* 00000078-000001D4 .text _create__Q28daTagRet5Act_cFv */
+cPhs_State Act_c::_create() {
+ fopAcM_ct(this, Act_c);
- /* 00000128-00000130 .text _delete__Q215daTagWaterlevel5Act_cFv */
- bool Act_c::_delete() {
- return true;
+ if ((prm_get_sch() & dKy_get_schbit() & 0xFF)) {
+ M_now = 1.0f;
+ } else {
+ M_now = 0.0f;
}
- /* 00000130-000001D8 .text bgm_proc__Q215daTagWaterlevel5Act_cFv */
- void Act_c::bgm_proc() {
- if (cLib_checkBit(get_state(), STATE_1)) {
- if (get_now() > 0.95f && mAction != 1) {
- mAction = 1;
- mDoAud_stWaterLevelUp();
- }
- } else {
- if (get_now() < 0.05f && mAction != 2) {
- mAction = 2;
- mDoAud_stWaterLevelDown();
- }
- }
- }
-
- /* 000001D8-00000364 .text _execute__Q215daTagWaterlevel5Act_cFv */
- bool Act_c::_execute() {
- f32 target;
- u8 prm_sch = prm_get_sch();
- u8 sch_bit = dKy_get_schbit();
- cLib_offBit(M_state, STATE_2);
-
- bool temp = prm_sch & sch_bit & 0xFF;
- if (temp) {
- target = 1.0f;
- if (!cLib_checkBit(get_state(), STATE_1)) {
- cLib_onBit(M_state, STATE_2);
- cLib_onBit(M_state, STATE_1);
- }
- } else {
- target = 0.0f;
- if (cLib_checkBit(get_state(), STATE_1)) {
- cLib_onBit(M_state, STATE_2);
- cLib_offBit(M_state, STATE_1);
- }
- }
-
- if (dComIfGp_event_runCheck() && dComIfGp_event_chkEventFlag(2)) {
- if (get_now() < 0.5f) {
- M_now = 0.0f;
- } else {
- M_now = 1.0f;
- }
- } else {
- if (std::fabsf(target - get_now()) < attr().field_0x0c) {
- M_now = target;
- field_0x290 = 0.0f;
- } else {
- field_0x290 += attr().field_0x00;
- if (field_0x290 > attr().field_0x08)
- field_0x290 = attr().field_0x08;
- if (field_0x290 < attr().field_0x0c)
- field_0x290 = attr().field_0x0c;
- cLib_addCalc(&M_now, target, attr().field_0x04, field_0x290, attr().field_0x0c);
- }
- }
+ field_0x290 = 0.0f;
+ mAction = 0;
- bgm_proc();
- return true;
- }
+ return cPhs_COMPLEATE_e;
+}
- /* 00000364-0000036C .text _draw__Q215daTagWaterlevel5Act_cFv */
- bool Act_c::_draw() {
- return true;
- }
+/* 00000128-00000130 .text _delete__Q215daTagWaterlevel5Act_cFv */
+bool Act_c::_delete() {
+ return true;
+}
- namespace {
- cPhs_State Mthd_Create(void* i_this) {
- return ((Act_c*)i_this)->_create();
+/* 00000130-000001D8 .text bgm_proc__Q215daTagWaterlevel5Act_cFv */
+void Act_c::bgm_proc() {
+ if (cLib_checkBit(get_state(), STATE_1)) {
+ if (get_now() > 0.95f && mAction != 1) {
+ mAction = 1;
+ mDoAud_stWaterLevelUp();
}
-
- BOOL Mthd_Delete(void* i_this) {
- return ((Act_c*)i_this)->_delete();
+ } else {
+ if (get_now() < 0.05f && mAction != 2) {
+ mAction = 2;
+ mDoAud_stWaterLevelDown();
}
-
- BOOL Mthd_Execute(void* i_this) {
- return ((Act_c*)i_this)->_execute();
+ }
+}
+
+/* 000001D8-00000364 .text _execute__Q215daTagWaterlevel5Act_cFv */
+bool Act_c::_execute() {
+ f32 target;
+ u8 prm_sch = prm_get_sch();
+ u8 sch_bit = dKy_get_schbit();
+ cLib_offBit(M_state, STATE_2);
+
+ bool temp = prm_sch & sch_bit & 0xFF;
+ if (temp) {
+ target = 1.0f;
+ if (!cLib_checkBit(get_state(), STATE_1)) {
+ cLib_onBit(M_state, STATE_2);
+ cLib_onBit(M_state, STATE_1);
}
-
- BOOL Mthd_Draw(void* i_this) {
- return ((Act_c*)i_this)->_draw();
+ } else {
+ target = 0.0f;
+ if (cLib_checkBit(get_state(), STATE_1)) {
+ cLib_onBit(M_state, STATE_2);
+ cLib_offBit(M_state, STATE_1);
}
+ }
- BOOL Mthd_IsDelete(void* i_this) {
- return TRUE;
+ if (dComIfGp_event_runCheck() && dComIfGp_event_chkEventFlag(2)) {
+ if (get_now() < 0.5f) {
+ M_now = 0.0f;
+ } else {
+ M_now = 1.0f;
+ }
+ } else {
+ if (std::fabsf(target - get_now()) < attr().field_0x0c) {
+ M_now = target;
+ field_0x290 = 0.0f;
+ } else {
+ field_0x290 += attr().field_0x00;
+ if (field_0x290 > attr().field_0x08)
+ field_0x290 = attr().field_0x08;
+ if (field_0x290 < attr().field_0x0c)
+ field_0x290 = attr().field_0x0c;
+ cLib_addCalc(&M_now, target, attr().field_0x04, field_0x290, attr().field_0x0c);
}
+ }
- static actor_method_class Mthd_Table = {
- (process_method_func)Mthd_Create,
- (process_method_func)Mthd_Delete,
- (process_method_func)Mthd_Execute,
- (process_method_func)Mthd_IsDelete,
- (process_method_func)Mthd_Draw,
- };
- };
+ bgm_proc();
+ return true;
+}
+
+/* 00000364-0000036C .text _draw__Q215daTagWaterlevel5Act_cFv */
+bool Act_c::_draw() {
+ return true;
+}
+
+namespace {
+cPhs_State Mthd_Create(void* i_this) {
+ return ((Act_c*)i_this)->_create();
+}
+
+BOOL Mthd_Delete(void* i_this) {
+ return ((Act_c*)i_this)->_delete();
+}
+
+BOOL Mthd_Execute(void* i_this) {
+ return ((Act_c*)i_this)->_execute();
+}
+
+BOOL Mthd_Draw(void* i_this) {
+ return ((Act_c*)i_this)->_draw();
+}
+
+BOOL Mthd_IsDelete(void* i_this) {
+ return TRUE;
+}
+
+static actor_method_class Mthd_Table = {
+ (process_method_func)Mthd_Create,
+ (process_method_func)Mthd_Delete,
+ (process_method_func)Mthd_Execute,
+ (process_method_func)Mthd_IsDelete,
+ (process_method_func)Mthd_Draw,
};
+}; // namespace
+
+}; // namespace daTagWaterlevel
actor_process_profile_definition g_profile_Tag_Waterlevel = {
/* Layer ID */ fpcLy_CURRENT_e,