diff options
| author | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2026-07-24 11:30:45 -0400 |
|---|---|---|
| committer | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2026-07-24 11:30:45 -0400 |
| commit | 26d9efe3b63ac38960f8b0c5afe461c4b96b0eb5 (patch) | |
| tree | 17f955bd88dc9dde838385680ade851a94412aa3 /src | |
| parent | 7efaae45c77dd3ce555e73970ae9182ec2dd4e76 (diff) | |
Unindent some namespaces
Diffstat (limited to 'src')
| -rw-r--r-- | src/d/actor/d_a_bomb2.cpp | 2152 | ||||
| -rw-r--r-- | src/d/actor/d_a_obj_akabe.cpp | 306 | ||||
| -rw-r--r-- | src/d/actor/d_a_obj_movebox.cpp | 3514 | ||||
| -rw-r--r-- | src/d/actor/d_a_obj_paper.cpp | 534 | ||||
| -rw-r--r-- | src/d/actor/d_a_tag_waterlevel.cpp | 230 |
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, ¤t.pos, rotation, &scale); - dComIfGp_particle_setBombSmoke(dPa_name::ID_IT_JT_BMEX_SMOKE01, ¤t.pos, NULL, &scale); - dComIfGp_particle_setBombSmoke(dPa_name::ID_IT_JT_BMEX_SMOKE02, ¤t.pos, NULL, &scale); - dComIfGp_particle_setToonP1(dPa_name::ID_IT_JT_BMEX_HAHEN, ¤t.pos, NULL, &scale); - } +void Act_c::eff_explode_normal(const csXyz* rotation) { + dComIfGp_particle_setP1(dPa_name::ID_IT_JN_BMEX_SENKO, ¤t.pos, rotation, &scale); + dComIfGp_particle_setBombSmoke(dPa_name::ID_IT_JT_BMEX_SMOKE01, ¤t.pos, NULL, &scale); + dComIfGp_particle_setBombSmoke(dPa_name::ID_IT_JT_BMEX_SMOKE02, ¤t.pos, NULL, &scale); + dComIfGp_particle_setToonP1(dPa_name::ID_IT_JT_BMEX_HAHEN, ¤t.pos, NULL, &scale); +} - void Act_c::eff_explode_water() { - if(!field_0x743) { - fopKyM_createWpillar(¤t.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(¤t.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(¤t.pos, &field_0x528); - } - - void Act_c::mode_sink() { - f32 temp; - bool temp2 = fopAcM_getWaterY(¤t.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(¤t.pos, &field_0x528); +} - (this->*mode_proc[mState])(); - set_real_shadow_flag(); +void Act_c::mode_sink() { + f32 temp; + bool temp2 = fopAcM_getWaterY(¤t.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(¤t.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, ¤t.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(¤t.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, ¤t.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(¤t.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(¤t.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(¤t.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(¤t.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, ¤t.pos, - fopAcM_GetRoomNo(this), &shape_angle - ); - } else if (mType == TYPE_MIRROR) { - mChildPID = fopAcM_createChild( - fpcNm_Obj_Mmrr_e, fopAcM_GetID(this), - 0, ¤t.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, ¤t.pos, + fopAcM_GetRoomNo(this), &shape_angle + ); + } else if (mType == TYPE_MIRROR) { + mChildPID = fopAcM_createChild( + fpcNm_Obj_Mmrr_e, fopAcM_GetID(this), + 0, ¤t.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( - ¤t.pos, itemTableNo, itemBitNo, - fopAcM_GetHomeRoomNo(this), daItemType_0_e, - ¤t.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(¢erPos); - 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( + ¤t.pos, itemTableNo, itemBitNo, + fopAcM_GetHomeRoomNo(this), daItemType_0_e, + ¤t.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(¢erPos); + 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(¤t.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(¤t.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, - ¤t.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(¤t.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, + ¤t.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(¤t.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, ¤t.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, ¤t.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, |
