mirror of https://github.com/zeldaret/tp.git
2666 lines
87 KiB
C++
2666 lines
87 KiB
C++
/**
|
|
* @file d_a_e_dt.cpp
|
|
*
|
|
*/
|
|
|
|
#include "d/dolzel_rel.h"
|
|
|
|
#include "d/actor/d_a_e_dt.h"
|
|
#include "JSystem/J3DGraphBase/J3DMaterial.h"
|
|
#include "SSystem/SComponent/c_math.h"
|
|
#include "Z2AudioLib/Z2Instances.h"
|
|
#include "c/c_damagereaction.h"
|
|
#include "d/actor/d_a_e_ot.h"
|
|
#include "d/actor/d_a_obj_amiShutter.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/d_camera.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_bomb.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "f_op/f_op_camera_mng.h"
|
|
#include "m_Do/m_Do_graphic.h"
|
|
#include "m_Do/m_Do_lib.h"
|
|
|
|
class daE_DT_HIO_c {
|
|
public:
|
|
/* 806AD90C */ daE_DT_HIO_c();
|
|
/* 806B5BDC */ virtual ~daE_DT_HIO_c() {}
|
|
|
|
/* 0x04 */ s8 field_0x4;
|
|
/* 0x08 */ f32 mScale;
|
|
/* 0x0C */ f32 mWalkSpeed;
|
|
/* 0x10 */ f32 field_0x10;
|
|
/* 0x14 */ f32 field_0x14;
|
|
/* 0x18 */ f32 field_0x18;
|
|
/* 0x1C */ f32 mStunTimer;
|
|
/* 0x20 */ f32 mPressTimer;
|
|
/* 0x24 */ f32 mMaxFallSpeed;
|
|
/* 0x28 */ f32 field_0x28;
|
|
/* 0x2C */ f32 field_0x2c;
|
|
};
|
|
|
|
enum Action {
|
|
/* 0x0 */ ACT_WAIT,
|
|
/* 0x1 */ ACT_CRY,
|
|
/* 0x2 */ ACT_SHAKE,
|
|
/* 0x3 */ ACT_WALK,
|
|
/* 0x4 */ ACT_JUMP,
|
|
/* 0x5 */ ACT_DOWN,
|
|
/* 0x6 */ ACT_SEARCH,
|
|
/* 0x7 */ ACT_DAMAGE,
|
|
/* 0x8 */ ACT_BOMB_DAMAGE,
|
|
/* 0x9 */ ACT_DEATH,
|
|
/* 0xA */ ACT_OPENING,
|
|
};
|
|
|
|
enum Animation {
|
|
/* 0x04 */ ANM_CROAK = 4,
|
|
/* 0x05 */ ANM_CROAK_DAMAGE,
|
|
/* 0x06 */ ANM_DEAD,
|
|
/* 0x07 */ ANM_DOWN_DAMAGE,
|
|
/* 0x08 */ ANM_DOWN_DAMAGE_2,
|
|
/* 0x09 */ ANM_DOWN_RETURN,
|
|
/* 0x0A */ ANM_DOWN_RETURN_2,
|
|
/* 0x0B */ ANM_DOWN_WAIT,
|
|
/* 0x0C */ ANM_JUMP_END,
|
|
/* 0x0D */ ANM_JUMP_START,
|
|
/* 0x0E */ ANM_JUMP_TOP,
|
|
/* 0x0F */ ANM_KYORO_2,
|
|
/* 0x10 */ ANM_OP_DEMO,
|
|
/* 0x11 */ ANM_OP_DEMO_FALL,
|
|
/* 0x12 */ ANM_OP_DEMO_SWING,
|
|
/* 0x13 */ ANM_OP_DEMO_WAIT,
|
|
/* 0x14 */ ANM_SMALL_DAMAGE,
|
|
/* 0x15 */ ANM_STEP,
|
|
/* 0x16 */ ANM_SWING,
|
|
/* 0x17 */ ANM_WAIT_01,
|
|
/* 0x18 */ ANM_WALK_01,
|
|
/* 0x19 */ ANM_WALK_02,
|
|
};
|
|
|
|
enum Joint {
|
|
/* 0x00 */ JNT_WORLD_ROOT,
|
|
/* 0x01 */ JNT_BACKBONE_1,
|
|
/* 0x02 */ JNT_BACKBONE_2,
|
|
/* 0x03 */ JNT_ARM_L1,
|
|
/* 0x04 */ JNT_ARM_L2,
|
|
/* 0x05 */ JNT_HAND_L,
|
|
/* 0x06 */ JNT_FINGER_L,
|
|
/* 0x07 */ JNT_ARM_R1,
|
|
/* 0x08 */ JNT_ARM_R2,
|
|
/* 0x09 */ JNT_HAND_R,
|
|
/* 0x0A */ JNT_FINGER_R,
|
|
/* 0x0B */ JNT_HEAD,
|
|
/* 0x0C */ JNT_ANTENNA_L1,
|
|
/* 0x0D */ JNT_ANTENNA_L2,
|
|
/* 0x0E */ JNT_ANTENNA_L3,
|
|
/* 0x0F */ JNT_ANTENNA_L4,
|
|
/* 0x10 */ JNT_ANTENNA_L5,
|
|
/* 0x11 */ JNT_ANTENNA_R1,
|
|
/* 0x12 */ JNT_ANTENNA_R2,
|
|
/* 0x13 */ JNT_ANTENNA_R3,
|
|
/* 0x14 */ JNT_ANTENNA_R4,
|
|
/* 0x15 */ JNT_ANTENNA_R5,
|
|
/* 0x16 */ JNT_CHEEK,
|
|
/* 0x17 */ JNT_CHIN_1,
|
|
/* 0x18 */ JNT_CHIN_2,
|
|
/* 0x19 */ JNT_THROAT_1,
|
|
/* 0x1A */ JNT_TONGUE_1,
|
|
/* 0x1B */ JNT_TONGUE_2,
|
|
/* 0x1C */ JNT_TONGUE_3,
|
|
/* 0x1D */ JNT_TONGUE_4,
|
|
/* 0x1E */ JNT_TONGUE_5,
|
|
/* 0x1F */ JNT_BELLY_1,
|
|
/* 0x20 */ JNT_WAIST,
|
|
/* 0x21 */ JNT_LEG_L1,
|
|
/* 0x22 */ JNT_LEG_L2,
|
|
/* 0x23 */ JNT_FOOT_L1,
|
|
/* 0x24 */ JNT_FOOT_L2,
|
|
/* 0x25 */ JNT_LEG_R1,
|
|
/* 0x26 */ JNT_LEG_R2,
|
|
/* 0x27 */ JNT_FOOT_R1,
|
|
/* 0x28 */ JNT_FOOT_R2,
|
|
/* 0x29 */ JNT_TAIL_1,
|
|
/* 0x2A */ JNT_TAIL_2,
|
|
};
|
|
|
|
/* 806B5EEC-806B5F14 000000 0028+00 1/1 0/0 0/0 .data eDt_ShakeFrame__6E_DT_n */
|
|
f32 E_DT_n::eDt_ShakeFrame[10] = {
|
|
20.0f, 22.0f, 24.0f, 26.0f, 28.0f, 30.0f, 32.0f, 34.0f, 36.0f, 38.0f,
|
|
};
|
|
|
|
/* 806B5F14-806B5F3C 000028 0028+00 1/1 0/0 0/0 .data eDt_ShakeFrameDemo__6E_DT_n */
|
|
f32 E_DT_n::eDt_ShakeFrameDemo[10] = {
|
|
310.0f, 312.0f, 314.0f, 316.0f, 318.0f, 320.0f, 322.0f, 324.0f, 326.0f, 328.0f,
|
|
};
|
|
|
|
/* 806B5F3C-806B5F7C 000050 0040+00 1/1 0/0 0/0 .data cc_dt_body_src__6E_DT_n */
|
|
dCcD_SrcSph E_DT_n::cc_dt_body_src = {
|
|
{
|
|
{0x0, {{AT_TYPE_CSTATUE_SWING, 0x1, 0x0}, {0xd8fbfdff, 0x43}, 0x75}}, // mObj
|
|
{dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x5}, // mGObjTg
|
|
{0x0}, // mGObjCo
|
|
}, // mObjInf
|
|
{
|
|
{{0.0f, 0.0f, 0.0f}, 40.0f} // mSph
|
|
} // mSphAttr
|
|
};
|
|
|
|
/* 806B5F7C-806B5FBC 000090 0040+00 1/1 0/0 0/0 .data cc_dt_tongue_src__6E_DT_n */
|
|
dCcD_SrcSph E_DT_n::cc_dt_tongue_src = {
|
|
{
|
|
{0x0, {{AT_TYPE_CSTATUE_SWING, 0x1, 0x0}, {0xd8fbfdff, 0x43}, 0x75}}, // mObj
|
|
{dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg
|
|
{0x0}, // mGObjCo
|
|
}, // mObjInf
|
|
{
|
|
{{0.0f, 0.0f, 0.0f}, 40.0f} // mSph
|
|
} // mSphAttr
|
|
};
|
|
|
|
/* 806B629C-806B62A0 -00001 0004+00 2/2 0/0 0/0 .bss None */
|
|
/* 806B629D 0003+00 data_806B629D None */
|
|
static bool hioInit;
|
|
|
|
/* 806B62AC-806B62DC 000054 0030+00 7/8 0/0 0/0 .bss l_HIO */
|
|
static daE_DT_HIO_c l_HIO;
|
|
|
|
/* 806AD90C-806AD97C 0000EC 0070+00 1/1 0/0 0/0 .text __ct__12daE_DT_HIO_cFv */
|
|
daE_DT_HIO_c::daE_DT_HIO_c() {
|
|
field_0x4 = -1;
|
|
mScale = 1.5f;
|
|
mWalkSpeed = 8.0f;
|
|
field_0x10 = 170.0f;
|
|
field_0x14 = 1536.0f;
|
|
field_0x2c = 25.0f;
|
|
field_0x18 = 3.0f;
|
|
mStunTimer = 300.0f;
|
|
mPressTimer = 120.0f;
|
|
mMaxFallSpeed = -55.0f;
|
|
field_0x28 = 105.0f;
|
|
}
|
|
|
|
/* 806AD97C-806ADBA0 00015C 0224+00 2/1 0/0 0/0 .text ctrlJoint__8daE_DT_cFP8J3DJointP8J3DModel */
|
|
int daE_DT_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
|
|
u16 jnt_no = i_joint->getJntNo();
|
|
mDoMtx_stack_c::copy(i_model->getAnmMtx(jnt_no));
|
|
f32 scl = field_0x748 * cM_ssin(field_0x74c) + 1.0f;
|
|
s16 ang1 = field_0x74e * cM_ssin(field_0x750);
|
|
s16 ang2 = field_0x752 * cM_ssin(field_0x754);
|
|
|
|
switch (jnt_no) {
|
|
case JNT_BACKBONE_1:
|
|
mDoMtx_stack_c::scaleM(1.0f, scl, 1.0f);
|
|
mDoMtx_stack_c::scaleM(1.0f, 1.0f, scl);
|
|
break;
|
|
case JNT_BACKBONE_2:
|
|
mDoMtx_stack_c::scaleM(1.0f, 1.0f / scl, 1.0f);
|
|
mDoMtx_stack_c::scaleM(1.0f, 1.0f, 1.0f / scl);
|
|
break;
|
|
case JNT_LEG_L1:
|
|
mDoMtx_stack_c::YrotM(ang1);
|
|
break;
|
|
case JNT_LEG_L2:
|
|
mDoMtx_stack_c::YrotM(-ang1);
|
|
break;
|
|
case JNT_LEG_R1:
|
|
mDoMtx_stack_c::YrotM(ang2);
|
|
break;
|
|
case JNT_LEG_R2:
|
|
mDoMtx_stack_c::YrotM(-ang2);
|
|
break;
|
|
case JNT_TONGUE_4:
|
|
mDoMtx_stack_c::ZrotM(field_0x734);
|
|
break;
|
|
case JNT_HEAD:
|
|
mDoMtx_stack_c::YrotM(field_0x744);
|
|
mDoMtx_stack_c::ZrotM(field_0x742);
|
|
break;
|
|
}
|
|
|
|
i_model->setAnmMtx(jnt_no, mDoMtx_stack_c::get());
|
|
MTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
|
|
return 1;
|
|
}
|
|
|
|
/* 806ADBA0-806ADBEC 000380 004C+00 1/1 0/0 0/0 .text JointCallBack__8daE_DT_cFP8J3DJointi */
|
|
int daE_DT_c::JointCallBack(J3DJoint* i_joint, int param_1) {
|
|
if (param_1 == 0) {
|
|
J3DModel* model = j3dSys.getModel();
|
|
daE_DT_c* _this = (daE_DT_c*)model->getUserArea();
|
|
if (_this != NULL) {
|
|
_this->ctrlJoint(i_joint, model);
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* 806ADBEC-806ADD30 0003CC 0144+00 1/1 0/0 0/0 .text
|
|
* ctrlJointTuba__8daE_DT_cFP8J3DJointP8J3DModel */
|
|
int daE_DT_c::ctrlJointTuba(J3DJoint* i_joint, J3DModel* i_model) {
|
|
u16 jnt_no = i_joint->getJntNo();
|
|
mDoMtx_stack_c::copy(i_model->getAnmMtx(jnt_no));
|
|
|
|
switch (jnt_no) {
|
|
case 0:
|
|
break;
|
|
|
|
case 1:
|
|
mDoMtx_stack_c::YrotM(mSpitAngle[1].x - mSpitAngle[0].x);
|
|
mDoMtx_stack_c::ZrotM(mSpitAngle[1].z);
|
|
mDoMtx_stack_c::scaleM(mSpitScaleX, 1.0f / mSpitScale[0], 1.0f / mSpitScale[0]);
|
|
mDoMtx_stack_c::scaleM(mSpitScaleX, mSpitScale[1], mSpitScale[1]);
|
|
break;
|
|
|
|
case 2:
|
|
mDoMtx_stack_c::YrotM(mSpitAngle[2].x - mSpitAngle[1].x);
|
|
mDoMtx_stack_c::scaleM(1.0f, 1.0f / mSpitScale[1], 1.0f / mSpitScale[1]);
|
|
mDoMtx_stack_c::scaleM(1.0f, mSpitScale[2], mSpitScale[2]);
|
|
break;
|
|
}
|
|
|
|
i_model->setAnmMtx(jnt_no, mDoMtx_stack_c::get());
|
|
MTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
|
|
return 1;
|
|
}
|
|
|
|
/* 806ADD30-806ADD7C 000510 004C+00 1/1 0/0 0/0 .text JointCallBackTuba__8daE_DT_cFP8J3DJointi */
|
|
int daE_DT_c::JointCallBackTuba(J3DJoint* i_joint, int param_1) {
|
|
if (param_1 == 0) {
|
|
J3DModel* model = j3dSys.getModel();
|
|
daE_DT_c* _this = (daE_DT_c*)model->getUserArea();
|
|
if (_this != NULL) {
|
|
_this->ctrlJointTuba(i_joint, model);
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* 806ADD7C-806AE56C 00055C 07F0+00 1/1 0/0 0/0 .text draw__8daE_DT_cFv */
|
|
int daE_DT_c::draw() {
|
|
g_env_light.settingTevStruct(0, ¤t.pos, &tevStr);
|
|
|
|
if (mChestMode != 0) {
|
|
g_env_light.setLightTevColorType_MAJI(mpSpitModel, &tevStr);
|
|
J3DModelData* model_data = mpSpitModel->getModelData();
|
|
J3DMaterial* material0 = model_data->getMaterialNodePointer(0);
|
|
material0->getTevColor(1)->r = 24.0f - mSpitFade[0] * 18.0f;
|
|
material0->getTevColor(1)->g = 8.0f - mSpitFade[0] * 6.0f;
|
|
material0->getTevColor(2)->r = 8.0f - mSpitFade[0] * 6.0f;
|
|
material0->getTevColor(2)->g = 24.0f - mSpitFade[0] * 18.0f;
|
|
material0->getTevKColor(3)->a = mSpitFade[0] * 255.0f;
|
|
J3DMaterial* material1 = model_data->getMaterialNodePointer(1);
|
|
material1->getTevColor(1)->r = 16.0f - mSpitFade[0] * 10.0f;
|
|
material1->getTevColor(1)->g = 8.0f - mSpitFade[0] * 8.0f;
|
|
material1->getTevColor(2)->r = 16.0f - mSpitFade[0] * 12.0f;
|
|
material1->getTevColor(2)->g = 24.0f - mSpitFade[0] * 16.0f;
|
|
if (mSpitFade[0] == 1.0f) {
|
|
material1->setMaterialMode(1);
|
|
material1->setZCompLoc(GX_TRUE);
|
|
material1->getZMode()->setUpdateEnable(GX_TRUE);
|
|
material1->getBlend()->setType(0);
|
|
} else {
|
|
material1->getZMode()->setUpdateEnable(GX_FALSE);
|
|
material1->setZCompLoc(GX_FALSE);
|
|
material1->setMaterialMode(4);
|
|
material1->getBlend()->setType(1);
|
|
}
|
|
material1->getTevKColor(3)->a = mSpitFade[0] * 255.0f;
|
|
fopAcM_setEffectMtx(this, model_data);
|
|
mDoExt_modelUpdateDL(mpSpitModel);
|
|
|
|
g_env_light.setLightTevColorType_MAJI(mpSpitBModel, &tevStr);
|
|
model_data = mpSpitBModel->getModelData();
|
|
for (u16 i = 0; i < model_data->getMaterialNum(); i++) {
|
|
J3DMaterial* material = model_data->getMaterialNodePointer(i);
|
|
material->getTevColor(0)->r = mSpitFade[i + 1] * -20.0f;
|
|
material->getTevColor(0)->g = mSpitFade[i + 1] * -30.0f;
|
|
material->getTevColor(0)->b = mSpitFade[i + 1] * -10.0f;
|
|
material->getTevKColor(3)->a = mSpitFade[i + 1] * 255.0f;
|
|
}
|
|
fopAcM_setEffectMtx(this, model_data);
|
|
mDoExt_modelUpdateDL(mpSpitBModel);
|
|
}
|
|
|
|
if (mDead == 2) {
|
|
return 1;
|
|
}
|
|
|
|
J3DModel* model = mpMorf->getModel();
|
|
g_env_light.setLightTevColorType_MAJI(model, &tevStr);
|
|
if (field_0x72c) {
|
|
J3DModelData* model_data = model->getModelData();
|
|
for (u16 i = 0; i < model_data->getMaterialNum(); i++) {
|
|
J3DMaterial* material = model_data->getMaterialNodePointer(i);
|
|
material->getTevColor(0)->r = field_0x72c;
|
|
material->getTevColor(0)->g = field_0x72c;
|
|
material->getTevColor(0)->b = field_0x72c;
|
|
}
|
|
}
|
|
fopAcM_setEffectMtx(this, model->getModelData());
|
|
mpMorf->entryDL();
|
|
|
|
cXyz pos;
|
|
pos.set(current.pos.x, current.pos.y + 100.0f, current.pos.z);
|
|
tevStr.mLightPosWorld = current.pos;
|
|
tevStr.mLightPosWorld.y += 1000.0f;
|
|
f32 tmp = 2000.0f - current.pos.y;
|
|
if (tmp < 0.0f) {
|
|
tmp = 0.0f;
|
|
}
|
|
tevStr.field_0x344 = l_HIO.field_0x18 * tmp / 2000.0f;
|
|
if (tevStr.field_0x344 >= 1.0f) {
|
|
tevStr.field_0x344 = 1.0f;
|
|
}
|
|
mShadowKey = dComIfGd_setShadow(mShadowKey, 0, model, &pos, 4000.0f, 0.0f, current.pos.y,
|
|
mAcch.GetGroundH(), mAcch.m_gnd, &tevStr, 0, 1.0f,
|
|
dDlst_shadowControl_c::getSimpleTex());
|
|
|
|
cXyz unused = current.pos;
|
|
unused.y += 100.0f;
|
|
|
|
if (mChestMode != 0) {
|
|
g_env_light.settingTevStruct(0x10, &mChestPos, &tevStr);
|
|
g_env_light.setLightTevColorType_MAJI(mpChestModel, &tevStr);
|
|
mDoExt_modelUpdateDL(mpChestModel);
|
|
}
|
|
|
|
if (mBlurMode == 1) {
|
|
mDoGph_gInf_c::setBlureRate(mBlurRate);
|
|
mDoGph_gInf_c::onBlure();
|
|
} else if (mBlurMode == 2) {
|
|
mDoGph_gInf_c::offBlure();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 806AE5A8-806AE5C8 000D88 0020+00 1/0 0/0 0/0 .text daE_DT_Draw__FP8daE_DT_c */
|
|
static int daE_DT_Draw(daE_DT_c* i_this) {
|
|
return i_this->draw();
|
|
}
|
|
|
|
/* 806AE5C8-806AE618 000DA8 0050+00 1/1 0/0 0/0 .text demo_skip__8daE_DT_cFi */
|
|
void daE_DT_c::demo_skip(int param_0) {
|
|
cDmr_SkipInfo = 1;
|
|
dStage_changeScene(2, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1);
|
|
}
|
|
|
|
/* 806AE618-806AE64C 000DF8 0034+00 1/1 0/0 0/0 .text DemoSkipCallBack__8daE_DT_cFPvi */
|
|
int daE_DT_c::DemoSkipCallBack(void* i_this, int param_1) {
|
|
if (i_this != NULL) {
|
|
static_cast<daE_DT_c*>(i_this)->demo_skip(param_1);
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/* 806AE64C-806AE6F0 000E2C 00A4+00 11/11 0/0 0/0 .text setBck__8daE_DT_cFiUcff */
|
|
void daE_DT_c::setBck(int i_anm, u8 i_attr, f32 i_morf, f32 i_rate) {
|
|
J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes("E_DT", i_anm);
|
|
mpMorf->setAnm(bck, i_attr, i_morf, i_rate, 0.0f, -1.0f);
|
|
}
|
|
|
|
/* 806AE6F0-806AE74C 000ED0 005C+00 5/5 0/0 0/0 .text checkBck__8daE_DT_cFi */
|
|
bool daE_DT_c::checkBck(int i_anm) {
|
|
J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes("E_DT", i_anm);
|
|
return mpMorf->getAnm() == bck;
|
|
}
|
|
|
|
/* 806AE74C-806AE758 000F2C 000C+00 12/12 0/0 0/0 .text setActionMode__8daE_DT_cFii */
|
|
void daE_DT_c::setActionMode(int i_action, int i_mode) {
|
|
mAction = i_action;
|
|
mMode = i_mode;
|
|
}
|
|
|
|
/* 806AE758-806AEB48 000F38 03F0+00 1/1 0/0 0/0 .text damage_check__8daE_DT_cFv */
|
|
void daE_DT_c::damage_check() {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
|
|
if (mBodyDamageTimer == 0 && (mBodyCcSph[0].ChkTgHit() || mBodyCcSph[1].ChkTgHit())) {
|
|
field_0x748 = -0.3f;
|
|
field_0x74c = 0;
|
|
mBodyDamageTimer = 10;
|
|
mSound.startCreatureSound(Z2SE_EN_DT_SMALL_DAMAGE, 0, -1);
|
|
}
|
|
|
|
cXyz pos;
|
|
|
|
if (mLegLDamageTimer == 0 && mLegCcSph[0].ChkTgHit()) {
|
|
field_0x74e = 0x600;
|
|
field_0x750 = 0;
|
|
mLegLDamageTimer = 10;
|
|
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_LEG_L1));
|
|
mDoMtx_stack_c::transM(130.0f, 0.0f, 0.0f);
|
|
mDoMtx_stack_c::multVecZero(&pos);
|
|
mDoAud_seStart(Z2SE_EN_DT_NODAMAGE_FOOT, &pos, 0, 0);
|
|
}
|
|
|
|
if (mLegRDamageTimer == 0 && mLegCcSph[1].ChkTgHit()) {
|
|
field_0x752 = 0x600;
|
|
field_0x754 = 0;
|
|
mLegRDamageTimer = 10;
|
|
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_LEG_R1));
|
|
mDoMtx_stack_c::transM(130.0f, 0.0f, 0.0f);
|
|
mDoMtx_stack_c::multVecZero(&pos);
|
|
mDoAud_seStart(Z2SE_EN_DT_NODAMAGE_FOOT, &pos, 0, 0);
|
|
}
|
|
|
|
if (checkCutDownHitFlg()) {
|
|
offCutDownHitFlg();
|
|
health = 0;
|
|
setActionMode(ACT_DEATH, 0);
|
|
} else if (mDamageTimer == 0) {
|
|
mCcStts.Move();
|
|
if (mTongueCcSph[0].ChkTgHit()) {
|
|
mAtInfo.mpCollider = mTongueCcSph[0].GetTgHitObj();
|
|
dCc_GetAc(mAtInfo.mpCollider->GetAc());
|
|
cc_at_check(this, &mAtInfo);
|
|
if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_UNK)) {
|
|
mDamageTimer = 20;
|
|
} else {
|
|
mDamageTimer = 10;
|
|
}
|
|
if (mAtInfo.mAttackPower <= 1) {
|
|
mDamageTimer = 10;
|
|
}
|
|
mTongueCcSph[0].ClrTgHit();
|
|
|
|
BOOL bVar1 = false;
|
|
if (player->getSwordAtUpTime() != 0 || player->getCutCount() >= 4
|
|
|| mAtInfo.mpCollider->GetAtAtp() >= 4)
|
|
{
|
|
bVar1 = true;
|
|
} else if (static_cast<dCcD_GObjInf*>(mAtInfo.mpCollider)->GetAtSpl() == 1) {
|
|
field_0x774++;
|
|
if (field_0x774 >= 2) {
|
|
bVar1 = true;
|
|
}
|
|
}
|
|
|
|
if (player->getCutType() == daPy_py_c::CUT_TYPE_JUMP
|
|
&& player->checkCutJumpCancelTurn())
|
|
{
|
|
mDamageTimer = 3;
|
|
setActionMode(ACT_DAMAGE, 0);
|
|
} else if (bVar1) {
|
|
field_0x774 = 0;
|
|
setActionMode(ACT_DOWN, 2);
|
|
} else {
|
|
setActionMode(ACT_DAMAGE, 0);
|
|
}
|
|
if (health <= 0) {
|
|
setActionMode(ACT_DEATH, 2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 806AEB48-806AEBD4 001328 008C+00 1/1 0/0 0/0 .text setStabPos__8daE_DT_cFv */
|
|
void daE_DT_c::setStabPos() {
|
|
cXyz pos;
|
|
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_TONGUE_5));
|
|
mDoMtx_stack_c::transM(10.0f, 0.0f, 0.0f);
|
|
mDoMtx_stack_c::multVecZero(&pos);
|
|
setDownPos(&pos);
|
|
}
|
|
|
|
/* 806AEBD4-806AED4C 0013B4 0178+00 1/1 0/0 0/0 .text checkBeforeBg__8daE_DT_cFf */
|
|
bool daE_DT_c::checkBeforeBg(f32 i_dist) {
|
|
dBgS_LinChk lin_chk;
|
|
cM3dGPla plane;
|
|
cXyz start, end;
|
|
start = current.pos;
|
|
start.y += 100.0f;
|
|
end = start;
|
|
end.x += i_dist * cM_ssin(shape_angle.y);
|
|
end.z += i_dist * cM_scos(shape_angle.y);
|
|
lin_chk.Set(&start, &end, this);
|
|
if (dComIfG_Bgsp().LineCross(&lin_chk)) {
|
|
dComIfG_Bgsp().GetTriPla(lin_chk, &plane);
|
|
if ((s16)(cM_atan2s(plane.mNormal.x, plane.mNormal.z) - shape_angle.y) > 0) {
|
|
mTargetAngleY = shape_angle.y + 0x2000;
|
|
} else {
|
|
mTargetAngleY = shape_angle.y - 0x2000;
|
|
}
|
|
return TRUE;
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
/* 806AED94-806AEEFC 001574 0168+00 1/1 0/0 0/0 .text checkTongueBg__8daE_DT_cFv */
|
|
void daE_DT_c::checkTongueBg() {
|
|
if (mAction != ACT_DOWN && mAction != ACT_DAMAGE && mAction != ACT_JUMP) {
|
|
cLib_chaseAngleS(&field_0x734, 0, 0x200);
|
|
return;
|
|
}
|
|
|
|
cXyz start, end;
|
|
J3DModel* model = mpMorf->getModel();
|
|
mDoMtx_stack_c::copy(model->getAnmMtx(JNT_TONGUE_4));
|
|
mDoMtx_stack_c::multVecZero(&start);
|
|
mDoMtx_stack_c::copy(model->getAnmMtx(JNT_TONGUE_5));
|
|
mDoMtx_stack_c::transM(15.0f, -10.0f, 0.0f);
|
|
mDoMtx_stack_c::multVecZero(&end);
|
|
dBgS_LinChk lin_chk;
|
|
end.y = start.y;
|
|
lin_chk.Set(&start, &end, this);
|
|
if (dComIfG_Bgsp().LineCross(&lin_chk)) {
|
|
cLib_chaseAngleS(&field_0x734, 15000, 0x400);
|
|
field_0x730 = 0;
|
|
} else if (mAction != ACT_DOWN) {
|
|
cLib_chaseAngleS(&field_0x734, 0, 0x200);
|
|
}
|
|
}
|
|
|
|
/* 806AEEFC-806AEFE8 0016DC 00EC+00 1/1 0/0 0/0 .text checkWaterSurface__8daE_DT_cFv */
|
|
void daE_DT_c::checkWaterSurface() {
|
|
dBgS_ObjGndChk_Spl wtr_chk;
|
|
Vec pos;
|
|
pos = current.pos;
|
|
pos.y += 300.0f;
|
|
wtr_chk.SetPos(&pos);
|
|
f32 surface = dComIfG_Bgsp().GroundCross(&wtr_chk);
|
|
if (surface != -1.0e9f) {
|
|
mWaterSurface = surface;
|
|
if (current.pos.y < mWaterSurface) {
|
|
if (checkBck(ANM_DOWN_WAIT) || checkBck(ANM_DOWN_DAMAGE_2)) {
|
|
setHamonEffect(1);
|
|
} else {
|
|
setHamonEffect(0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 806AEFE8-806AF09C 0017C8 00B4+00 3/3 0/0 0/0 .text setSmallWaterEffect__8daE_DT_cFv */
|
|
void daE_DT_c::setSmallWaterEffect() {
|
|
cXyz scl(mScale, mScale, mScale);
|
|
static u16 w_eff_id[5] = {0x8572, 0x8573, 0x8574, 0x8575, 0x8576};
|
|
for (int i = 0; i < 5; i++) {
|
|
dComIfGp_particle_set(w_eff_id[i], ¤t.pos, &tevStr, &shape_angle, &scl);
|
|
}
|
|
}
|
|
|
|
/* 806AF09C-806AF150 00187C 00B4+00 2/2 0/0 0/0 .text setLargeWaterEffect__8daE_DT_cFv */
|
|
void daE_DT_c::setLargeWaterEffect() {
|
|
cXyz scl(mScale, mScale, mScale);
|
|
static u16 w_eff_id[5] = {0x856d, 0x856e, 0x856f, 0x8570, 0x8571};
|
|
for (int i = 0; i < 5; i++) {
|
|
dComIfGp_particle_set(w_eff_id[i], ¤t.pos, &tevStr, &shape_angle, &scl);
|
|
}
|
|
}
|
|
|
|
/* 806AF150-806AF240 001930 00F0+00 1/1 0/0 0/0 .text setHamonEffect__8daE_DT_cFi */
|
|
void daE_DT_c::setHamonEffect(int param_0) {
|
|
if (param_0 >= 2) {
|
|
return;
|
|
}
|
|
cXyz scl(mScale, mScale, mScale);
|
|
cXyz pos(current.pos.x, mWaterSurface, current.pos.z);
|
|
static u16 w_eff_id[4] = {0x8563, 0x8564, 0x8561, 0x8562};
|
|
for (int i = 0; i < 2; i++) {
|
|
mRippleKey[i] = dComIfGp_particle_set(mRippleKey[i], w_eff_id[(param_0 << 1) + i], &pos,
|
|
&tevStr, &shape_angle, &scl, 0xff, NULL, -1,
|
|
NULL, NULL, NULL);
|
|
}
|
|
}
|
|
|
|
/* 806AF240-806AF2F4 001A20 00B4+00 1/1 0/0 0/0 .text setJumpEffect__8daE_DT_cFv */
|
|
void daE_DT_c::setJumpEffect() {
|
|
cXyz scl(mScale, mScale, mScale);
|
|
static u16 w_eff_id[5] = {0x8565, 0x8566, 0x8567, 0x8568, 0x8569};
|
|
for (int i = 0; i < 5; i++) {
|
|
dComIfGp_particle_set(w_eff_id[i], ¤t.pos, &tevStr, &shape_angle, &scl);
|
|
}
|
|
}
|
|
|
|
/* 806AF2F4-806AF3D0 001AD4 00DC+00 1/1 0/0 0/0 .text setJumpSizukuEffect__8daE_DT_cFv */
|
|
void daE_DT_c::setJumpSizukuEffect() {
|
|
mParticleKey[0] = dComIfGp_particle_set(mParticleKey[0], 0x856a, ¤t.pos, &tevStr,
|
|
&shape_angle, NULL, 0xff, NULL, -1, NULL, NULL, NULL);
|
|
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleKey[0]);
|
|
if (emitter != NULL) {
|
|
emitter->setGlobalSRTMatrix(mpMorf->getModel()->getAnmMtx(JNT_BACKBONE_2));
|
|
}
|
|
}
|
|
|
|
/* 806AF3D0-806AF460 001BB0 0090+00 2/2 0/0 0/0 .text setDamageShibukiEffect__8daE_DT_cFi
|
|
*/
|
|
void daE_DT_c::setDamageShibukiEffect(int param_0) {
|
|
cXyz scl(mScale, mScale, mScale);
|
|
static u16 w_eff_id[2] = {0x855d, 0x855f};
|
|
dComIfGp_particle_set(w_eff_id[param_0], ¤t.pos, &tevStr, &shape_angle, &scl);
|
|
}
|
|
|
|
/* 806AF460-806AF548 001C40 00E8+00 2/2 0/0 0/0 .text setDamageYodareEffect__8daE_DT_cFi
|
|
*/
|
|
void daE_DT_c::setDamageYodareEffect(int param_0) {
|
|
static u16 w_eff_id[2] = {0x855e, 0x8560};
|
|
mParticleKey[0] = dComIfGp_particle_set(mParticleKey[0], w_eff_id[param_0], ¤t.pos,
|
|
&tevStr, &shape_angle, NULL, 0xff, NULL, -1,
|
|
NULL, NULL, NULL);
|
|
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleKey[0]);
|
|
if (emitter != NULL) {
|
|
emitter->setGlobalSRTMatrix(mpMorf->getModel()->getAnmMtx(JNT_CHEEK));
|
|
}
|
|
}
|
|
|
|
/* 806AF548-806AF5CC 001D28 0084+00 2/2 0/0 0/0 .text setSwingEffect__8daE_DT_cFv */
|
|
void daE_DT_c::setSwingEffect() {
|
|
cXyz scl(mScale, mScale, mScale);
|
|
dComIfGp_particle_set(0x856c, ¤t.pos, &tevStr, &shape_angle, &scl);
|
|
}
|
|
|
|
/* 806AF5CC-806AF740 001DAC 0174+00 1/1 0/0 0/0 .text setStepEffect__8daE_DT_cFv */
|
|
void daE_DT_c::setStepEffect() {
|
|
cXyz scl(mScale, mScale, mScale);
|
|
if (!checkBck(ANM_STEP)) {
|
|
return;
|
|
}
|
|
if (mpMorf->checkFrame(0.0f)) {
|
|
dComIfGp_particle_set(0x856b, ¤t.pos, &tevStr, &shape_angle, &scl);
|
|
}
|
|
if (mpMorf->checkFrame(29.0f)) {
|
|
mSound.startCreatureSound(Z2SE_EN_DT_STEP, 0, -1);
|
|
mSound.startCreatureSound(Z2SE_EN_DT_FOOTNOTE_L, 0, -1);
|
|
}
|
|
if (mpMorf->checkFrame(59.0f)) {
|
|
mSound.startCreatureSound(Z2SE_EN_DT_FOOTNOTE_R, 0, -1);
|
|
}
|
|
}
|
|
|
|
/* 806AF740-806AF848 001F20 0108+00 1/1 0/0 0/0 .text setBombEffect__8daE_DT_cFv */
|
|
void daE_DT_c::setBombEffect() {
|
|
static u16 w_eff_id[4] = {0x8552, 0x8553, 0x8554, 0x8555};
|
|
for (int i = 0; i < 4; i++) {
|
|
mParticleKey[i] = dComIfGp_particle_set(mParticleKey[i], w_eff_id[i], ¤t.pos,
|
|
&tevStr, &shape_angle, NULL, 0xff, NULL, -1,
|
|
NULL, NULL, NULL);
|
|
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleKey[i]);
|
|
if (emitter != NULL) {
|
|
emitter->setGlobalSRTMatrix(mpMorf->getModel()->getAnmMtx(JNT_CHEEK));
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 806AF848-806AF924 002028 00DC+00 1/1 0/0 0/0 .text setBombSmokeEffect__8daE_DT_cFv */
|
|
void daE_DT_c::setBombSmokeEffect() {
|
|
mSmokeKey = dComIfGp_particle_set(mSmokeKey, 0x8556, ¤t.pos, &tevStr, &shape_angle,
|
|
NULL, 0xff, NULL, -1, NULL, NULL, NULL);
|
|
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mSmokeKey);
|
|
if (emitter != NULL) {
|
|
emitter->setGlobalSRTMatrix(mpMorf->getModel()->getAnmMtx(JNT_CHEEK));
|
|
}
|
|
}
|
|
|
|
/* 806AF924-806AF9D8 002104 00B4+00 1/1 0/0 0/0 .text setDeadShibukiEffect__8daE_DT_cFv
|
|
*/
|
|
void daE_DT_c::setDeadShibukiEffect() {
|
|
cXyz scl(mScale, mScale, mScale);
|
|
static u16 w_eff_id[2] = {0x8557, 0x8558};
|
|
for (int i = 0; i < 2; i++) {
|
|
dComIfGp_particle_set(w_eff_id[i], ¤t.pos, &tevStr, &shape_angle, &scl);
|
|
}
|
|
}
|
|
|
|
/* 806AF9D8-806AFAE0 0021B8 0108+00 1/1 0/0 0/0 .text setDeadYodareEffect__8daE_DT_cFv */
|
|
void daE_DT_c::setDeadYodareEffect() {
|
|
static u16 w_eff_id[4] = {0x8559, 0x855a, 0x855b, 0x855c};
|
|
for (int i = 0; i < 4; i++) {
|
|
mParticleKey[i] = dComIfGp_particle_set(mParticleKey[i], w_eff_id[i], ¤t.pos,
|
|
&tevStr, &shape_angle, NULL, 0xff, NULL, -1,
|
|
NULL, NULL, NULL);
|
|
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleKey[i]);
|
|
if (emitter != NULL) {
|
|
emitter->setGlobalSRTMatrix(mpMorf->getModel()->getAnmMtx(JNT_CHEEK));
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 806AFAE0-806AFBBC 0022C0 00DC+00 1/1 0/0 0/0 .text setBoxTubaEffect__8daE_DT_cFv */
|
|
void daE_DT_c::setBoxTubaEffect() {
|
|
mSpitKey = dComIfGp_particle_set(mSpitKey, 0x8598, ¤t.pos, &tevStr, &shape_angle,
|
|
NULL, 0xff, NULL, -1, NULL, NULL, NULL);
|
|
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mSpitKey);
|
|
if (emitter != NULL) {
|
|
emitter->setGlobalSRTMatrix(mpMorf->getModel()->getAnmMtx(JNT_CHEEK));
|
|
}
|
|
}
|
|
|
|
/* 806AFBBC-806AFC98 00239C 00DC+00 1/1 0/0 0/0 .text setBoxTubaLandEffect__8daE_DT_cFv
|
|
*/
|
|
void daE_DT_c::setBoxTubaLandEffect() {
|
|
cXyz pos;
|
|
mDoMtx_stack_c::copy(mpSpitModel->getAnmMtx(0));
|
|
mDoMtx_stack_c::multVecZero(&pos);
|
|
static u16 w_eff_id[2] = {0x8599, 0x859a};
|
|
for (int i = 0; i < 2; i++) {
|
|
dComIfGp_particle_set(w_eff_id[i], &pos, &tevStr, NULL, NULL);
|
|
}
|
|
}
|
|
|
|
/* 806B62DC-806B62E0 000084 0004+00 2/2 0/0 0/0 .bss mDt_OtamaNum__6E_DT_n */
|
|
int E_DT_n::mDt_OtamaNum;
|
|
|
|
/* 806B62E0-806B6330 000088 0050+00 3/3 0/0 0/0 .bss mDt_OtamaNo__6E_DT_n */
|
|
int E_DT_n::mDt_OtamaNo[20];
|
|
|
|
/* 806AFC98-806AFD30 002478 0098+00 1/1 0/0 0/0 .text s_otama_todo__FPvPv */
|
|
static void* s_otama_todo(void* i_proc, void* i_this) {
|
|
if (fopAcM_IsActor(i_proc) && !fpcM_IsCreating(fopAcM_GetID(i_proc))
|
|
&& fopAcM_GetName(i_proc) == PROC_E_OT)
|
|
{
|
|
daE_OT_c* otama = static_cast<daE_OT_c*>(i_proc);
|
|
E_DT_n::mDt_OtamaNum++;
|
|
if (otama->getChildNo() < 20) {
|
|
E_DT_n::mDt_OtamaNo[otama->getChildNo()] = 1;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 806AFD30-806AFD94 002510 0064+00 3/3 0/0 0/0 .text getNumberOfOtama__8daE_DT_cFv */
|
|
int daE_DT_c::getNumberOfOtama() {
|
|
E_DT_n::mDt_OtamaNum = 0;
|
|
for (int i = 0; i < 20; i++) {
|
|
E_DT_n::mDt_OtamaNo[i] = 0;
|
|
}
|
|
fpcM_Search(s_otama_todo, this);
|
|
return E_DT_n::mDt_OtamaNum;
|
|
}
|
|
|
|
/* 806B6330-806B6334 0000D8 0004+00 3/3 0/0 0/0 .bss m_fall_no__6E_DT_n */
|
|
int E_DT_n::m_fall_no;
|
|
|
|
/* 806AFD94-806AFE24 002574 0090+00 3/3 0/0 0/0 .text s_fall_otama__FPvPv */
|
|
static void* s_fall_otama(void* i_proc, void* i_this) {
|
|
if (fopAcM_IsActor(i_proc) && !fpcM_IsCreating(fopAcM_GetID(i_proc))
|
|
&& fopAcM_GetName(i_proc) == PROC_E_OT)
|
|
{
|
|
daE_OT_c* otama = static_cast<daE_OT_c*>(i_proc);
|
|
if (E_DT_n::m_fall_no == otama->getChildNo()
|
|
&& otama->getActionMode() == daE_OT_c::ACT_EGG)
|
|
{
|
|
return i_proc;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 806AFE24-806AFEAC 002604 0088+00 2/2 0/0 0/0 .text setStayOtamaFall__8daE_DT_cFv */
|
|
void daE_DT_c::setStayOtamaFall() {
|
|
for (int i = field_0x704 * 2; i < (field_0x704 + 1) * 2; i++) {
|
|
E_DT_n::m_fall_no = 19 - i;
|
|
daE_OT_c* otama = (daE_OT_c*)fpcM_Search(s_fall_otama, this);
|
|
if (otama != NULL) {
|
|
otama->setShakeEgg();
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 806AFEAC-806AFF1C 00268C 0070+00 1/1 0/0 0/0 .text setStayOtamaDelete__8daE_DT_cFv */
|
|
void daE_DT_c::setStayOtamaDelete() {
|
|
for (int i = 0; i < 20; i++) {
|
|
E_DT_n::m_fall_no = i;
|
|
daE_OT_c* otama = (daE_OT_c*)fpcM_Search(s_fall_otama, this);
|
|
if (otama != NULL) {
|
|
otama->setDeleteEgg();
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 806AFF1C-806AFF8C 0026FC 0070+00 1/1 0/0 0/0 .text s_demo_otama__FPvPv */
|
|
static void* s_demo_otama(void* i_proc, void* i_this) {
|
|
if (fopAcM_IsActor(i_proc) && !fpcM_IsCreating(fopAcM_GetID(i_proc))
|
|
&& fopAcM_GetName(i_proc) == PROC_E_OT)
|
|
{
|
|
daE_OT_c* otama = static_cast<daE_OT_c*>(i_proc);
|
|
fopAcM_OffStatus(otama, 0x8000);
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 806B6340-806B634C 0000E8 000C+00 2/3 0/0 0/0 .bss m_tongue_pos__6E_DT_n */
|
|
cXyz E_DT_n::m_tongue_pos;
|
|
|
|
/* 806AFF8C-806B0114 00276C 0188+00 1/1 0/0 0/0 .text s_bomb_search__FPvPv */
|
|
static void* s_bomb_search(void* i_proc, void* i_this) {
|
|
if (fopAcM_IsActor(i_proc) && !fpcM_IsCreating(fopAcM_GetID(i_proc))) {
|
|
fopAc_ac_c* actor = static_cast<fopAc_ac_c*>(i_proc);
|
|
if (dBomb_c::checkBombActor(actor) && !fopAcM_checkCarryNow(actor)
|
|
&& fopAcM_GetPosition_p(actor)->abs(E_DT_n::m_tongue_pos) < 200.0f)
|
|
{
|
|
return actor;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 806B0114-806B01B4 0028F4 00A0+00 1/1 0/0 0/0 .text checkBombEat__8daE_DT_cFv */
|
|
bool daE_DT_c::checkBombEat() {
|
|
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_TONGUE_3));
|
|
mDoMtx_stack_c::multVecZero(&E_DT_n::m_tongue_pos);
|
|
dBomb_c* bomb = (dBomb_c*)fpcM_Search(s_bomb_search, this);
|
|
if (bomb != NULL) {
|
|
bomb->deleteBombAndEffect();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/* 806B01B4-806B0200 002994 004C+00 1/1 0/0 0/0 .text isShutterOpen__8daE_DT_cFv */
|
|
bool daE_DT_c::isShutterOpen() {
|
|
daAmiShutter_c* shutter;
|
|
fopAcM_SearchByName(PROC_Obj_AmiShutter, (fopAc_ac_c**)&shutter);
|
|
if (shutter != NULL && shutter->isShutterOpen()) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/* 806B0200-806B0368 0029E0 0168+00 1/1 0/0 0/0 .text executeWait__8daE_DT_cFv */
|
|
void daE_DT_c::executeWait() {
|
|
switch (mMode) {
|
|
case 0:
|
|
mTimer = 0;
|
|
// fallthrough
|
|
|
|
case 1:
|
|
if (checkBck(ANM_KYORO_2) && (mpMorf->checkFrame(0.0f) || mpMorf->checkFrame(45.0f))) {
|
|
mSound.startCreatureVoice(Z2SE_EN_DT_V_KYORO, -1);
|
|
}
|
|
if (mTimer == 0) {
|
|
setBck(ANM_WAIT_01, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
mMode = 2;
|
|
mTimer = (u8)(150.0f + cM_rndFX(30.0f));
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (mTimer == 0) {
|
|
setBck(ANM_KYORO_2, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
mMode = 1;
|
|
mTimer = 180;
|
|
}
|
|
break;
|
|
}
|
|
|
|
setActionMode(ACT_CRY, 0);
|
|
}
|
|
|
|
/* 806B0368-806B063C 002B48 02D4+00 1/5 0/0 0/0 .text executeCry__8daE_DT_cFv */
|
|
void daE_DT_c::executeCry() {
|
|
switch (mMode) {
|
|
case 0:
|
|
if (checkBeforeBg(1200.0f)) {
|
|
mMode = 1;
|
|
mTimer = 30;
|
|
setBck(ANM_STEP, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f);
|
|
if ((s16)(shape_angle.y - fopAcM_searchPlayerAngleY(this)) < 0) {
|
|
mTargetAngleY = shape_angle.y + 0x4000;
|
|
} else {
|
|
mTargetAngleY = shape_angle.y - 0x4000;
|
|
}
|
|
} else {
|
|
setBck(ANM_CROAK, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
field_0x704 = 0;
|
|
mMode = 2;
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
cLib_chaseAngleS(&shape_angle.y, mTargetAngleY, 0x200);
|
|
if (mTimer == 0) {
|
|
if (checkBeforeBg(1200.0f)) {
|
|
mTimer = 30;
|
|
} else {
|
|
setBck(ANM_CROAK, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
field_0x704 = 0;
|
|
mMode = 2;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (mpMorf->checkFrame(27.0f)) {
|
|
mSound.startCreatureVoice(Z2SE_EN_DT_V_CROAK, -1);
|
|
}
|
|
if (35.0f <= mpMorf->getFrame() && mpMorf->getFrame() < 70.0f) {
|
|
mEyePosMode = 2;
|
|
if (checkBombEat()) {
|
|
setActionMode(ACT_BOMB_DAMAGE, 0);
|
|
return;
|
|
}
|
|
}
|
|
if (mpMorf->checkFrame(30.0f)) {
|
|
mSound.startCreatureSound(Z2SE_EN_DT_SPAWN, 0, -1);
|
|
getNumberOfOtama();
|
|
for (int i = 0; i < 20; i++) {
|
|
if (E_DT_n::mDt_OtamaNo[i] == 0) {
|
|
fopAcM_create(PROC_E_OT, i, ¤t.pos, fopAcM_GetRoomNo(this),
|
|
&shape_angle, NULL, 0xff);
|
|
}
|
|
}
|
|
}
|
|
if (mpMorf->isStop()) {
|
|
setActionMode(ACT_SHAKE, 0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 806B063C-806B07C4 002E1C 0188+00 1/1 0/0 0/0 .text executeShake__8daE_DT_cFv */
|
|
void daE_DT_c::executeShake() {
|
|
switch (mMode) {
|
|
case 0:
|
|
setBck(ANM_WAIT_01, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
mTimer = 30;
|
|
mMode = 1;
|
|
break;
|
|
|
|
case 1:
|
|
if (mTimer == 0) {
|
|
setSwingEffect();
|
|
setBck(ANM_SWING, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
mMode = 2;
|
|
field_0x704 = 0;
|
|
mTimer = 60;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (mpMorf->checkFrame(12.0f)) {
|
|
mSound.startCreatureSound(Z2SE_EN_DT_SWING, 0, -1);
|
|
}
|
|
if (field_0x704 < 10) {
|
|
if (60 - mTimer == E_DT_n::eDt_ShakeFrame[field_0x704]) {
|
|
setStayOtamaFall();
|
|
field_0x704++;
|
|
}
|
|
}
|
|
if (mTimer == 0) {
|
|
setActionMode(ACT_WALK, 0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 806B07C4-806B0E9C 002FA4 06D8+00 2/1 0/0 0/0 .text executeWalk__8daE_DT_cFv */
|
|
void daE_DT_c::executeWalk() {
|
|
cXyz offset;
|
|
|
|
if (mMode >= 5 && (mBodyCcSph[0].ChkTgHit() || mBodyCcSph[1].ChkTgHit()
|
|
|| mLegCcSph[0].ChkTgHit() || mLegCcSph[1].ChkTgHit()))
|
|
{
|
|
mMode = 7;
|
|
setBck(ANM_SMALL_DAMAGE, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
mSound.startCreatureSound(Z2SE_EN_DT_SMALL_DAMAGE, 0, -1);
|
|
}
|
|
|
|
switch (mMode) {
|
|
case 0:
|
|
setBck(ANM_WAIT_01, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
mTimer = 30;
|
|
mMode = 1;
|
|
mWalkTimer = 1200;
|
|
// fallthrough
|
|
|
|
case 1:
|
|
if (mTimer == 0) {
|
|
setBck(ANM_STEP, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f);
|
|
offset.set(0.0f, 0.0f, 1500.0f);
|
|
s16 angle = cM_rndFX(0x2000) + fopAcM_searchPlayerAngleY(this) + 0x8000;
|
|
cLib_offsetPos(&mTargetPos, &home.pos, angle, &offset);
|
|
mTargetAngleY = cLib_targetAngleY(¤t.pos, &mTargetPos);
|
|
mMode = 2;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (cLib_chaseAngleS(&shape_angle.y, mTargetAngleY, 0x100)) {
|
|
current.angle.y = shape_angle.y;
|
|
mTimer = 300;
|
|
setBck(ANM_WALK_01, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f);
|
|
mMode = 3;
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
if (mpMorf->checkFrame(0.0f) || mpMorf->checkFrame(45.0f)) {
|
|
mSound.startCreatureSound(Z2SE_EN_DT_WALK, 0, -1);
|
|
}
|
|
if (mpMorf->checkFrame(23.0f)) {
|
|
mSound.startCreatureSound(Z2SE_EN_DT_FOOTNOTE_L, 0, -1);
|
|
}
|
|
if (mpMorf->checkFrame(65.0f)) {
|
|
mSound.startCreatureSound(Z2SE_EN_DT_FOOTNOTE_R, 0, -1);
|
|
}
|
|
cLib_chaseF(&speedF, l_HIO.mWalkSpeed, 1.0f);
|
|
if (mTimer == 0 || mTargetPos.absXZ(current.pos) < 300.0f) {
|
|
setBck(ANM_STEP, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f);
|
|
mTargetAngleY = cLib_targetAngleY(¤t.pos, &home.pos);
|
|
mMode = 4;
|
|
speedF = 0.0f;
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
if (cLib_chaseAngleS(&shape_angle.y, mTargetAngleY, 0x100)) {
|
|
current.angle.y = shape_angle.y;
|
|
setBck(ANM_WAIT_01, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f);
|
|
mMode = 5;
|
|
field_0x704 = 0;
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
if (abs((s16)(shape_angle.y - fopAcM_searchPlayerAngleY(this))) < 0x3000) {
|
|
field_0x73e = fopAcM_searchPlayerAngleX(this);
|
|
field_0x740 = fopAcM_searchPlayerAngleY(this) - shape_angle.y;
|
|
field_0x704 = 0;
|
|
} else {
|
|
field_0x704++;
|
|
if (field_0x704 >= 150) {
|
|
mMode = 6;
|
|
setBck(ANM_KYORO_2, J3DFrameCtrl::EMode_NONE, 10.0f, 1.0f);
|
|
mSound.startCreatureVoice(Z2SE_EN_DT_V_KYORO, -1);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 6:
|
|
if (mpMorf->checkFrame(45.0f)) {
|
|
mSound.startCreatureVoice(Z2SE_EN_DT_V_KYORO, -1);
|
|
}
|
|
if (mpMorf->isStop()) {
|
|
setBck(ANM_WAIT_01, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f);
|
|
mMode = 5;
|
|
field_0x704 = 0;
|
|
}
|
|
break;
|
|
|
|
case 7:
|
|
if (mpMorf->isStop()) {
|
|
setBck(ANM_WAIT_01, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
mMode = 5;
|
|
field_0x704 = 0;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (getNumberOfOtama() < 1 || (getNumberOfOtama() < 20 && mWalkTimer == 0)) {
|
|
setActionMode(ACT_JUMP, 0);
|
|
}
|
|
}
|
|
|
|
/* 806B0E9C-806B177C 00367C 08E0+00 2/1 0/0 0/0 .text executeJump__8daE_DT_cFv */
|
|
void daE_DT_c::executeJump() {
|
|
s16 player_angle = fopAcM_searchPlayerAngleY(this);
|
|
cXyz pos, offset, press_pos;
|
|
offset.set(0.0f, 0.0f, 160.0f);
|
|
cLib_offsetPos(&pos, ¤t.pos, shape_angle.y, &offset);
|
|
if (!mLinkPressed) {
|
|
mTongueCcSph[0].OnCoSetBit();
|
|
mTongueCcSph[1].OnCoSetBit();
|
|
}
|
|
cXyz player_offset;
|
|
cXyz player_pos = daPy_getPlayerActorClass()->current.pos;
|
|
s16 angle_to_player = (s16)cLib_targetAngleY(&pos, &player_pos);
|
|
s16 press_angle;
|
|
mDoMtx_stack_c::YrotS(daPy_getPlayerActorClass()->current.angle.y);
|
|
player_offset.set(0.0f, 0.0f, daPy_getPlayerActorClass()->getSpeedF() * 20.0f);
|
|
mDoMtx_stack_c::multVec(&player_offset, &player_offset);
|
|
|
|
switch (mMode) {
|
|
case 0:
|
|
setBck(ANM_STEP, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f);
|
|
speed.y = 0.0f;
|
|
speedF = 0.0f;
|
|
gravity = -5.0f;
|
|
mMode = 1;
|
|
mDemoMode = 0;
|
|
field_0x736 = l_HIO.field_0x14;
|
|
break;
|
|
|
|
case 1:
|
|
cLib_addCalcAngleS(&shape_angle.y, player_angle, 0x10, 0x100, 0x100);
|
|
if (abs((s16)(player_angle - shape_angle.y)) < 0x1000
|
|
|| fopAcM_searchPlayerDistance(this) < 700.0f)
|
|
{
|
|
mMode = 2;
|
|
setBck(ANM_JUMP_START, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
mSound.startCreatureVoice(Z2SE_EN_DT_V_JUMP, -1);
|
|
setJumpEffect();
|
|
if (!field_0x783) {
|
|
mDemoMode = 1;
|
|
}
|
|
current.angle.y = shape_angle.y;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
setJumpSizukuEffect();
|
|
if (mpMorf->checkFrame(87.0f)) {
|
|
mSound.startCreatureSound(Z2SE_EN_DT_JUMP, 0, -1);
|
|
}
|
|
if (mpMorf->isStop()) {
|
|
speedF = 30.0f;
|
|
speed.y = 150.0f;
|
|
mMode = 3;
|
|
mTimer = 60;
|
|
current.angle.y = cLib_targetAngleY(¤t.pos, &player_pos);
|
|
setBck(ANM_JUMP_TOP, J3DFrameCtrl::EMode_NONE, 20.0f, 1.0f);
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
setJumpSizukuEffect();
|
|
Z2GetAudioMgr()->changeSubBgmStatus(2);
|
|
if (speed.y <= 0.0f) {
|
|
cLib_chaseF(¤t.pos.x, player_pos.x + player_offset.x, 70.0f);
|
|
cLib_chaseF(¤t.pos.z, player_pos.z + player_offset.z, 70.0f);
|
|
speedF = 0.0f;
|
|
gravity = 0.0f;
|
|
speed.y = 0.0f;
|
|
if (dComIfGp_checkPlayerStatus0(0, 0x2000) || mTimer == 0) {
|
|
mMode = 4;
|
|
maxFallSpeed = -50.0f;
|
|
gravity = -5.0f;
|
|
mTimer = 30;
|
|
field_0x704 = 0;
|
|
}
|
|
}
|
|
if (current.pos.y > 2000.0f) {
|
|
cLib_chaseF(¤t.pos.x, player_pos.x + player_offset.x, 70.0f);
|
|
cLib_chaseF(¤t.pos.z, player_pos.z + player_offset.z, 70.0f);
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
mSound.startCreatureSoundLevel(Z2SE_EN_DT_FALLING, 0, -1);
|
|
mFlyingAttack = true;
|
|
if (!dComIfGp_checkPlayerStatus0(0, 0x2000)) {
|
|
current.pos.x = player_pos.x + player_offset.x;
|
|
current.pos.z = player_pos.z + player_offset.z;
|
|
}
|
|
maxFallSpeed = l_HIO.mMaxFallSpeed;
|
|
gravity = -5.0f;
|
|
mMode = 5;
|
|
field_0x704 = 0;
|
|
mTimer = 10;
|
|
shape_angle.y = cLib_targetAngleY(¤t.pos, &home.pos) + cM_rndFX(0x1000);
|
|
break;
|
|
|
|
case 5:
|
|
mSound.startCreatureSoundLevel(Z2SE_EN_DT_FALLING, 0, -1);
|
|
// fallthrough
|
|
|
|
case 6:
|
|
mFlyingAttack = true;
|
|
|
|
switch (field_0x704) {
|
|
case 0:
|
|
if (mBodyCcSph[0].ChkCoHit()) {
|
|
if (fopAcM_GetName(dCc_GetAc(mBodyCcSph[0].GetCoHitObj()->GetAc())) == PROC_ALINK)
|
|
{
|
|
field_0x704 = 2;
|
|
mLinkPressed = true;
|
|
}
|
|
}
|
|
if (mBodyCcSph[1].ChkCoHit()) {
|
|
if (fopAcM_GetName(dCc_GetAc(mBodyCcSph[1].GetCoHitObj()->GetAc())) == PROC_ALINK)
|
|
{
|
|
field_0x704 = 2;
|
|
mLinkPressed = true;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (mLinkPressed == true) {
|
|
s16 angle_diff = shape_angle.y - angle_to_player;
|
|
if (abs(angle_diff) < 0x2000) {
|
|
if (angle_diff < 0) {
|
|
angle_to_player += 0x2000;
|
|
} else {
|
|
angle_to_player += -0x2000;
|
|
}
|
|
}
|
|
offset.set(0.0f, 0.0f, 470.0f);
|
|
cLib_offsetPos(&press_pos, &pos, angle_to_player, &offset);
|
|
press_angle = angle_to_player;
|
|
} else {
|
|
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_TONGUE_3));
|
|
mDoMtx_stack_c::multVecZero(&press_pos);
|
|
if (cM_rnd() < 0.5f) {
|
|
press_angle = shape_angle.y + 0x4000;
|
|
} else {
|
|
press_angle = shape_angle.y - 0x4000;
|
|
}
|
|
}
|
|
press_pos.y = mAcch.GetGroundH();
|
|
daPy_getPlayerActorClass()->onPressedDamage(press_pos, press_angle);
|
|
daPy_py_c::setPlayerDamage(4, 1);
|
|
field_0x704 = 3;
|
|
Z2GetAudioMgr()->changeSubBgmStatus(1);
|
|
break;
|
|
|
|
case 3:
|
|
mDemoMode = 3;
|
|
field_0x704 = 4;
|
|
break;
|
|
}
|
|
|
|
if (mMode == 5) {
|
|
if (mAcch.ChkGroundHit()) {
|
|
setLargeWaterEffect();
|
|
mFlyingAttackLand = true;
|
|
dComIfGp_getVibration().StartQuake(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f));
|
|
mQuakeTimer = 30;
|
|
setBck(ANM_JUMP_END, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
mMode = 6;
|
|
mSound.startCreatureSound(Z2SE_EN_DT_SPLASH, 0, -1);
|
|
}
|
|
} else if (mpMorf->getFrame() >= 5.0f) {
|
|
if (field_0x704 == 1 || field_0x704 >= 4) {
|
|
mMode = 7;
|
|
} else if (field_0x704 == 0) {
|
|
field_0x704 = 1;
|
|
Z2GetAudioMgr()->changeSubBgmStatus(3);
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 7:
|
|
if (mpMorf->isStop()) {
|
|
setActionMode(ACT_DOWN, 0);
|
|
}
|
|
break;
|
|
}
|
|
|
|
f32 tmp = 2000.0f - current.pos.y;
|
|
if (tmp < 0.0f) {
|
|
tmp = 0.0f;
|
|
}
|
|
if (speed.y < 0.0f) {
|
|
if (tmp > 2000.0f) {
|
|
tmp = 2000.0f;
|
|
}
|
|
mScale = tmp / 2000.0f * 1.2f + 0.3f;
|
|
} else {
|
|
if (tmp > 2000.0f) {
|
|
tmp = 2000.0f;
|
|
}
|
|
mScale = tmp / 2000.0f + 0.5f;
|
|
}
|
|
}
|
|
|
|
/* 806B177C-806B1B60 003F5C 03E4+00 1/1 0/0 0/0 .text executeDown__8daE_DT_cFv */
|
|
void daE_DT_c::executeDown() {
|
|
switch (mMode) {
|
|
case 0:
|
|
if (mLinkPressed) {
|
|
mTimer = l_HIO.mPressTimer;
|
|
} else {
|
|
mTimer = l_HIO.mStunTimer;
|
|
}
|
|
field_0x774 = 0;
|
|
// fallthrough
|
|
|
|
case 1:
|
|
setBck(ANM_DOWN_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
speed.y = 0.0f;
|
|
speedF = 0.0f;
|
|
mMode = 3;
|
|
if (mHitCounter >= 2) {
|
|
onDownFlg();
|
|
setStabPos();
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
setDamageShibukiEffect(1);
|
|
setDamageYodareEffect(1);
|
|
Z2GetAudioMgr()->changeSubBgmStatus(1);
|
|
mTimer = 0;
|
|
mSound.startCreatureVoice(Z2SE_EN_DT_V_DOWN_DAMAGE2, -1);
|
|
setBck(ANM_DOWN_DAMAGE_2, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
speed.y = 0.0f;
|
|
speedF = 0.0f;
|
|
mMode = 4;
|
|
mEyePosMode = 1;
|
|
mHitCounter++;
|
|
if (mHitCounter >= 3) {
|
|
setActionMode(ACT_DEATH, 2);
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
if (checkBck(ANM_DOWN_WAIT) && mpMorf->checkFrame(56.0f)) {
|
|
mSound.startCreatureVoice(Z2SE_EN_DT_V_DOWN_WAIT, -1);
|
|
}
|
|
if (mTimer == 0) {
|
|
offDownFlg();
|
|
if (mLinkPressed) {
|
|
daPy_getPlayerActorClass()->offPressedDamage();
|
|
mDemoMode = 6;
|
|
mLinkPressed = false;
|
|
} else {
|
|
Z2GetAudioMgr()->changeSubBgmStatus(1);
|
|
}
|
|
setBck(ANM_DOWN_RETURN_2, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
mSound.startCreatureVoice(Z2SE_EN_DT_V_RETURN, -1);
|
|
mMode = 5;
|
|
} else {
|
|
if (mHitCounter >= 2) {
|
|
setStabPos();
|
|
}
|
|
if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_DOWN) {
|
|
mCcStts.ClrCcMove();
|
|
mTimer = 30;
|
|
} else if (!mLinkPressed) {
|
|
mTongueCcSph[0].OnTgSetBit();
|
|
mTongueCcSph[0].OnCoSetBit();
|
|
mTongueCcSph[1].OnCoSetBit();
|
|
}
|
|
mEyePosMode = 1;
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
setDamageYodareEffect(1);
|
|
if (mpMorf->checkFrame(50.0f)) {
|
|
mSound.startCreatureSound(Z2SE_CM_BODYFALL_ASASE_L, 0, -1);
|
|
setSmallWaterEffect();
|
|
}
|
|
// fallthrough
|
|
|
|
case 5:
|
|
if (mpMorf->isStop()) {
|
|
setActionMode(ACT_SEARCH, 0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 806B1B60-806B1BEC 004340 008C+00 1/1 0/0 0/0 .text executeSearch__8daE_DT_cFv */
|
|
void daE_DT_c::executeSearch() {
|
|
switch (mMode) {
|
|
case 0:
|
|
setBck(ANM_WAIT_01, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
mTimer = 30;
|
|
mMode = 1;
|
|
break;
|
|
|
|
case 1:
|
|
if (mTimer == 0) {
|
|
setActionMode(ACT_WAIT, 0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 806B1BEC-806B1D48 0043CC 015C+00 1/1 0/0 0/0 .text executeDamage__8daE_DT_cFv */
|
|
void daE_DT_c::executeDamage() {
|
|
if (mTimer != 0) {
|
|
if (!mLinkPressed) {
|
|
mTongueCcSph[0].OnTgSetBit();
|
|
mTongueCcSph[0].OnCoSetBit();
|
|
mTongueCcSph[1].OnCoSetBit();
|
|
}
|
|
mEyePosMode = 1;
|
|
}
|
|
|
|
switch (mMode) {
|
|
case 0:
|
|
setDamageShibukiEffect(0);
|
|
setDamageYodareEffect(0);
|
|
if (mTimer > 120) {
|
|
mTimer = 120;
|
|
}
|
|
mSound.startCreatureVoice(Z2SE_EN_DT_V_DOWN_DAMAGE, -1);
|
|
setBck(ANM_DOWN_DAMAGE, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
mMode = 1;
|
|
break;
|
|
|
|
case 1:
|
|
setDamageYodareEffect(0);
|
|
if (mpMorf->isStop()) {
|
|
setActionMode(ACT_DOWN, 1);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 806B1D48-806B1F78 004528 0230+00 1/1 0/0 0/0 .text executeBombDamage__8daE_DT_cFv */
|
|
void daE_DT_c::executeBombDamage() {
|
|
mTongueCcSph[0].OnCoSetBit();
|
|
mTongueCcSph[1].OnCoSetBit();
|
|
|
|
switch (mMode) {
|
|
case 0:
|
|
setBombEffect();
|
|
setBombSmokeEffect();
|
|
mSound.startCreatureVoice(Z2SE_EN_DT_CROAK_DAMAGE, -1);
|
|
setBck(ANM_CROAK_DAMAGE, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
mMode = 1;
|
|
break;
|
|
|
|
case 1:
|
|
setBombEffect();
|
|
setBombSmokeEffect();
|
|
if (mpMorf->checkFrame(119.0f)) {
|
|
mSound.startCreatureSound(Z2SE_EN_DT_CROAK_BOMB, 0, -1);
|
|
setStayOtamaDelete();
|
|
}
|
|
if (mpMorf->checkFrame(135.0f)) {
|
|
mSound.startCreatureSound(Z2SE_EN_DT_SPLASH, 0, -1);
|
|
setSmallWaterEffect();
|
|
}
|
|
if (mpMorf->getFrame() >= 150.0f) {
|
|
if (mpMorf->checkFrame(150.0f)) {
|
|
Z2GetAudioMgr()->changeSubBgmStatus(3);
|
|
}
|
|
mTimer = l_HIO.mStunTimer;
|
|
mEyePosMode = 1;
|
|
mTongueCcSph[0].OnTgSetBit();
|
|
mTongueCcSph[0].OnCoSetBit();
|
|
mTongueCcSph[1].OnCoSetBit();
|
|
}
|
|
if (mpMorf->isStop()) {
|
|
setActionMode(ACT_DOWN, 0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 806B1F78-806B28E4 004758 096C+00 2/1 0/0 0/0 .text executeDeath__8daE_DT_cFv */
|
|
void daE_DT_c::executeDeath() {
|
|
cXyz player_pos(0.0f, 0.0f, 450.0f);
|
|
camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0));
|
|
cXyz offset, disappear_pos;
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
|
|
switch (mMode) {
|
|
case 0:
|
|
mSound.startCreatureVoice(Z2SE_EN_DT_V_TODOME, -1);
|
|
attention_info.flags = 0;
|
|
setBck(ANM_DOWN_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
mTimer = 30;
|
|
mMode = 1;
|
|
mDead = 1;
|
|
field_0x781 = true;
|
|
speed.y = 0.0f;
|
|
gravity = 0.0f;
|
|
break;
|
|
|
|
case 1:
|
|
if (player->getCutType() == daPy_py_c::CUT_TYPE_DOWN) {
|
|
mTimer = 10;
|
|
}
|
|
if (mTimer == 0) {
|
|
mMode = 2;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (!eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderPotentialEvent(this, 2, 0xffff, 0);
|
|
eventInfo.onCondition(dEvtCnd_CANDEMO_e);
|
|
} else {
|
|
setDeadShibukiEffect();
|
|
setDeadYodareEffect();
|
|
camera->mCamera.Stop();
|
|
mMode = 3;
|
|
mDead = 1;
|
|
current.pos.set(0.0f, 0.0f, -1000.0f);
|
|
current.angle.y = 0;
|
|
shape_angle.y = 0;
|
|
shape_angle.z = 0;
|
|
shape_angle.x = 0;
|
|
player->changeOriginalDemo();
|
|
player->setPlayerPosAndAngle(&player_pos, 0x8000, 0);
|
|
player->changeDemoMode(4, 1, 0, 0);
|
|
mCamEye.set(150.0f, 100.0f, 800.0f);
|
|
mCamCenter = eyePos;
|
|
mCamFovy = 55.0f;
|
|
camera->mCamera.SetTrimSize(3);
|
|
attention_info.flags = 0;
|
|
setBck(ANM_DEAD, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
mSound.startCreatureVoice(Z2SE_EN_DT_V_DEAD, -1);
|
|
mMode = 3;
|
|
mTimer = 300;
|
|
Z2GetAudioMgr()->subBgmStop();
|
|
Z2GetAudioMgr()->muteSceneBgm(0, 0.0f);
|
|
dComIfGs_onStageMiddleBoss();
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
player->setPlayerPosAndAngle(&player_pos, 0x8000, 0);
|
|
setBoxTubaEffect();
|
|
if (mpMorf->checkFrame(70.0f) || mpMorf->checkFrame(110.0f) || mpMorf->checkFrame(125.0f)) {
|
|
setDeadShibukiEffect();
|
|
}
|
|
if (mpMorf->checkFrame(212.0f)) {
|
|
mSound.startCreatureSound(Z2SE_CM_BODYFALL_ASASE_L, 0, -1);
|
|
setSmallWaterEffect();
|
|
}
|
|
setDeadYodareEffect();
|
|
if (mpMorf->checkFrame(176.0f)) {
|
|
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_TONGUE_3));
|
|
mDoMtx_stack_c::multVecZero(&mChestPos);
|
|
mChestSpeed.y = 50.0f;
|
|
mChestSpeed.z = 26.2f;
|
|
mChestMode = 1;
|
|
s16 ang_x = 0x4000 - cM_atan2s(mChestSpeed.y, mChestSpeed.absXZ());
|
|
mSpitAngle[2].x = ang_x;
|
|
mSpitAngle[1].x = ang_x;
|
|
mSpitAngle[0].x = ang_x;
|
|
player->changeDemoMode(23, 1, 0, 0);
|
|
}
|
|
|
|
if (mpMorf->getFrame() < 30.0f) {
|
|
cLib_addCalc2(&mBlurRate, 180.0f, 1.0f, 8.0f);
|
|
mBlurMode = 1;
|
|
} else if (mBlurRate) {
|
|
cLib_addCalc2(&mBlurRate, 0.0f, 1.0f, 1.0f);
|
|
if (!mBlurRate) {
|
|
mBlurMode = 2;
|
|
}
|
|
} else {
|
|
mBlurMode = 0;
|
|
}
|
|
|
|
if (mTimer < 120) {
|
|
cLib_chasePos(&mCamEye, cXyz(200.0f, 100.0f, 700.0f), 5.0f);
|
|
cLib_chaseF(&field_0x6e4, 0.3f, 0.03f);
|
|
mCamCenter = eyePos * field_0x6e4 + mChestPos * (1.0f - field_0x6e4);
|
|
} else {
|
|
field_0x6e4 = 1.0f;
|
|
if (mTimer < 270) {
|
|
cLib_chasePos(&mCamEye, cXyz(200.0f, 100.0f, 600.0f), 5.0f);
|
|
}
|
|
mCamCenter = eyePos;
|
|
}
|
|
camera->mCamera.Set(mCamCenter, mCamEye, mCamFovy, 0);
|
|
|
|
if (mpMorf->getFrame() > 176.0f) {
|
|
cLib_addCalc2(&field_0x72c, -50.0f, 1.0f, 0.5f);
|
|
}
|
|
if (mpMorf->isStop()) {
|
|
mTimer = 20;
|
|
mMode = 4;
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
mEyePosMode = 3;
|
|
cLib_addCalc2(&field_0x72c, -50.0f, 1.0f, 0.5f);
|
|
if (mTimer == 0) {
|
|
offset.set(0.0f, 0.0f, 160.0f);
|
|
cLib_offsetPos(&disappear_pos, ¤t.pos, shape_angle.y, &offset);
|
|
fopAcM_createDisappear(this, &disappear_pos, 40, 0, 0xff);
|
|
mDead = 2;
|
|
mTimer = 10;
|
|
mMode = 5;
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
mEyePosMode = 3;
|
|
if (mTimer == 0) {
|
|
mTimer = 120;
|
|
mMode = 6;
|
|
}
|
|
break;
|
|
|
|
case 6:
|
|
mEyePosMode = 3;
|
|
cLib_addCalcPos2(&mCamCenter, cXyz(0.0f, 100.0f, 0.0f), 0.1f, 5.0f);
|
|
camera->mCamera.Set(mCamCenter, mCamEye, mCamFovy, 0);
|
|
if (mTimer == 0) {
|
|
camera->mCamera.Reset(mCamCenter, mCamEye, mCamFovy, 0);
|
|
camera->mCamera.Start();
|
|
camera->mCamera.SetTrimSize(0);
|
|
dComIfGp_event_reset();
|
|
Z2GetAudioMgr()->unMuteSceneBgm(45);
|
|
fopAcM_delete(this);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 806B28E4-806B29D4 0050C4 00F0+00 1/1 0/0 0/0 .text pointInSight__8daE_DT_cFP4cXyz */
|
|
bool daE_DT_c::pointInSight(cXyz* i_point) {
|
|
cXyz proj;
|
|
u32 idx = fopCamM_GetParam(dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)));
|
|
scissor_class* scissor = dComIfGp_getWindow(dComIfGp_getCameraWinID(idx))->getScissor();
|
|
f32 width = scissor->width;
|
|
f32 height = scissor->height;
|
|
mDoLib_project(i_point, &proj);
|
|
if (proj.x > 0.0f && proj.x < width && proj.y > 30.0f && -30.0f < height) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/* 806B29D4-806B3B08 0051B4 1134+00 2/1 0/0 0/0 .text executeOpening__8daE_DT_cFv */
|
|
void daE_DT_c::executeOpening() {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
dCamera_c* camera = dCam_getBody();
|
|
cXyz vec1;
|
|
cXyz vec2 = eyePos;
|
|
vec2.y -= 100.0f;
|
|
int i;
|
|
BOOL in_sight, create_otama, bVar1;
|
|
fopAc_ac_c* otama;
|
|
|
|
switch (mMode) {
|
|
case 0:
|
|
mMode = 1;
|
|
setBck(ANM_OP_DEMO_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
attention_info.flags = 0;
|
|
if (getNumberOfOtama() == 0) {
|
|
for (i = 0; i < 20; i++) {
|
|
fopAcM_create(PROC_E_OT, i | 0xff030000, ¤t.pos, fopAcM_GetRoomNo(this),
|
|
&shape_angle, NULL, 0xff);
|
|
}
|
|
}
|
|
// fallthrough
|
|
|
|
case 1:
|
|
case 2:
|
|
vec1.set(0.0f, 0.0f, 0.0f);
|
|
shape_angle.y = cLib_targetAngleY(&player->current.pos, &vec1);
|
|
shape_angle.x = -0x4000;
|
|
mDoMtx_stack_c::transS(0.0f, 4000.0f, 0.0f);
|
|
mDoMtx_stack_c::YrotM(shape_angle.y);
|
|
mDoMtx_stack_c::transM(0.0f, 0.0f, -100.0f);
|
|
mDoMtx_stack_c::multVecZero(¤t.pos);
|
|
field_0x781 = true;
|
|
if (isShutterOpen()) {
|
|
field_0x714 = 690;
|
|
return;
|
|
}
|
|
|
|
in_sight = pointInSight(¤t.pos);
|
|
bVar1 = FALSE;
|
|
if (dCam_getBody()->Mode() == 4 || dCam_getBody()->Mode() == 7
|
|
|| dCam_getBody()->Mode() == 8 || dComIfGp_checkPlayerStatus0(0, 0x200000))
|
|
{
|
|
bVar1 = TRUE;
|
|
}
|
|
|
|
if (!bVar1) {
|
|
field_0x704 = 0;
|
|
if (mMode == 1) {
|
|
if (mTimer == 0) {
|
|
setBck(ANM_OP_DEMO_SWING, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
mMode = 2;
|
|
field_0x775 = cM_rndF(2.9f);
|
|
}
|
|
} else {
|
|
create_otama = FALSE;
|
|
if (mpMorf->checkFrame(14.0f)) {
|
|
create_otama = TRUE;
|
|
}
|
|
else if (mpMorf->checkFrame(19.0f)) {
|
|
if (field_0x775 >= 1) {
|
|
create_otama = TRUE;
|
|
}
|
|
}
|
|
else if (mpMorf->checkFrame(24.0f)) {
|
|
if (field_0x775 >= 2) {
|
|
create_otama = TRUE;
|
|
}
|
|
}
|
|
if (create_otama) {
|
|
vec1.set(0.0f, 2000.0f, 0.0f);
|
|
fopAcM_create(PROC_E_OT, 0xff01ffff, &vec1, fopAcM_GetRoomNo(this),
|
|
&shape_angle, NULL, 0xff);
|
|
}
|
|
if (mpMorf->isStop() && getNumberOfOtama() <= 20) {
|
|
setBck(ANM_OP_DEMO_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
mMode = 1;
|
|
mTimer = 300.0f + cM_rndFX(60.0f);
|
|
}
|
|
}
|
|
} else {
|
|
if (field_0x704 != 0) {
|
|
setBck(ANM_OP_DEMO_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
field_0x704++;
|
|
}
|
|
if (in_sight) {
|
|
camera->Stop();
|
|
mCamEye = camera->Eye();
|
|
mCamCenter = camera->Center();
|
|
mCamFovy = camera->Fovy();
|
|
mCamBank = camera->Bank();
|
|
player->onPlayerNoDraw();
|
|
camera->SetTrimSize(3);
|
|
setBck(ANM_OP_DEMO_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
mMode = 3;
|
|
Z2GetAudioMgr()->subBgmStart(Z2BGM_DEKUTOAD_D01);
|
|
dComIfGs_onOneZoneSwitch(3, fopAcM_GetRoomNo(this));
|
|
}
|
|
}
|
|
return;
|
|
|
|
case 3:
|
|
if (!eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderPotentialEvent(this, 2, 0xffff, 0);
|
|
eventInfo.onCondition(dEvtCnd_CANDEMO_e);
|
|
} else {
|
|
mMode = 4;
|
|
mTimer = 60;
|
|
mSound.startCreatureVoice(Z2SE_EN_DT_V_OPDEMO, -1);
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
cLib_chasePos(&mCamCenter, vec2, 5.0f);
|
|
if (mTimer == 0) {
|
|
mMode = 5;
|
|
setBck(ANM_OP_DEMO_SWING, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
mTimer = 60;
|
|
field_0x704 = 0;
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
cLib_chasePos(&mCamCenter, vec2, 5.0f);
|
|
if (checkBck(ANM_OP_DEMO_SWING) && (mpMorf->checkFrame(10.0f) || mpMorf->checkFrame(15.0f)
|
|
|| mpMorf->checkFrame(20.0f))) {
|
|
E_DT_n::m_fall_no = mpMorf->getFrame() - 10.0f;
|
|
daE_OT_c* otama = (daE_OT_c*)fpcM_Search(s_fall_otama, this);
|
|
if (otama != NULL) {
|
|
otama->setFallEgg();
|
|
mDemoOtama[field_0x704] = otama;
|
|
field_0x704++;
|
|
}
|
|
}
|
|
|
|
if (mpMorf->isStop()) {
|
|
setBck(ANM_OP_DEMO_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
}
|
|
|
|
if (mTimer == 0) {
|
|
mMode = 6;
|
|
mTimer = 60;
|
|
field_0x6e8 = -300.0f;
|
|
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_TONGUE_1));
|
|
mDoMtx_stack_c::multVecZero(&vec2);
|
|
vec2.y += field_0x6e8;
|
|
mCamCenter = vec2;
|
|
mDoMtx_stack_c::YrotS(shape_angle.y + 0x7c00);
|
|
mDoMtx_stack_c::transM(0.0f, 3000.0f, 1700.0f);
|
|
mDoMtx_stack_c::multVecZero(&mCamEye);
|
|
mCamFovy = 55.0f;
|
|
mCamBank = 0;
|
|
}
|
|
break;
|
|
|
|
case 6:
|
|
cLib_chaseF(&field_0x6e8, 0.0f, 3.0f);
|
|
mDoMtx_stack_c::YrotS(shape_angle.y + 0x6000);
|
|
mDoMtx_stack_c::transM(0.0f, 3400.0f, 1400.0f);
|
|
mDoMtx_stack_c::multVecZero(&vec1);
|
|
cLib_chasePos(&mCamEye, vec1, 8.0f);
|
|
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_TONGUE_1));
|
|
mDoMtx_stack_c::multVecZero(&vec2);
|
|
vec2.y += field_0x6e8;
|
|
cLib_chasePos(&mCamCenter, vec2, 50.0f);
|
|
|
|
if (mTimer == 0) {
|
|
setBck(ANM_OP_DEMO_FALL, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
mMode = 7;
|
|
}
|
|
break;
|
|
|
|
case 7:
|
|
cLib_chaseF(&field_0x6e8, 0.0f, 3.0f);
|
|
mDoMtx_stack_c::YrotS(shape_angle.y + 0x6000);
|
|
mDoMtx_stack_c::transM(0.0f, 3400.0f, 1400.0f);
|
|
mDoMtx_stack_c::multVecZero(&vec1);
|
|
cLib_chasePos(&mCamEye, vec1, 8.0f);
|
|
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_TONGUE_1));
|
|
mDoMtx_stack_c::multVecZero(&vec2);
|
|
vec2.y += field_0x6e8;
|
|
cLib_chasePos(&mCamCenter, vec2, 50.0f);
|
|
|
|
if (mpMorf->checkFrame(143.0f)) {
|
|
mMode = 8;
|
|
current.angle.y = shape_angle.y - 0x8000;
|
|
gravity = -5.0f;
|
|
maxFallSpeed = -100.0f;
|
|
mTimer = 40;
|
|
field_0x6e8 = 20.0f;
|
|
}
|
|
break;
|
|
|
|
case 8:
|
|
mDoMtx_stack_c::YrotS(shape_angle.y + 0x6000);
|
|
mDoMtx_stack_c::transM(0.0f, 3000.0f, 1700.0f);
|
|
mDoMtx_stack_c::multVecZero(&vec1);
|
|
cLib_chasePos(&mCamEye, vec1, 30.0f);
|
|
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_HEAD));
|
|
mDoMtx_stack_c::multVecZero(&vec2);
|
|
cLib_chasePos(&mCamCenter, vec2, field_0x6e8);
|
|
|
|
if (mpMorf->isStop()) {
|
|
setBck(ANM_JUMP_TOP, J3DFrameCtrl::EMode_NONE, 20.0f, 1.0f);
|
|
}
|
|
cLib_chaseF(&speedF, 0.0f, 1.0f);
|
|
if (mTimer < 15) {
|
|
cLib_chaseF(&field_0x6e8, 0.0f, 3.0f);
|
|
}
|
|
|
|
if (mTimer == 0) {
|
|
mMode = 10;
|
|
field_0x781 = false;
|
|
speedF = 0.0f;
|
|
speed.y = 0.0f;
|
|
maxFallSpeed = -100.0f;
|
|
current.pos.set(0.0f, 2000.0f, 0.0f);
|
|
shape_angle.y = 0;
|
|
shape_angle.x = 0;
|
|
vec1.set(0.0f, 0.0f, 1400.0f);
|
|
player->offPlayerNoDraw();
|
|
player->setPlayerPosAndAngle(&vec1, shape_angle.y + 0x8000, 0);
|
|
mCamCenter.set(0.0f, 3112.0f, 243.0f);
|
|
mCamEye.set(-150.0f, 150.0f, 1600.0f);
|
|
mCamFovy = 115.0f;
|
|
mDemoJump = true;
|
|
}
|
|
break;
|
|
|
|
case 10:
|
|
mSound.startCreatureSoundLevel(Z2SE_EN_DT_FALLING, 0, -1);
|
|
mDemoJump = false;
|
|
mCamCenter = vec2;
|
|
cLib_chaseF(&mCamFovy, 70.0f, 1.0f);
|
|
|
|
if (mAcch.ChkGroundHit()) {
|
|
setLargeWaterEffect();
|
|
mMode = 11;
|
|
setBck(ANM_OP_DEMO, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f);
|
|
dComIfGp_getVibration().StartQuake(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f));
|
|
mQuakeTimer = 30;
|
|
mSound.startCreatureSound(Z2SE_EN_DT_SPLASH, 0, -1);
|
|
player->changeOriginalDemo();
|
|
player->changeDemoMode(34, 1, 0, 0);
|
|
mTimer = 90;
|
|
}
|
|
break;
|
|
|
|
case 11:
|
|
cLib_chasePos(&mCamCenter, vec2, 100.0f);
|
|
vec1.set(-100.0f, 50.0f, 1550.0f);
|
|
cLib_chasePos(&mCamEye, vec1, 100.0f);
|
|
cLib_chaseF(&mCamFovy, 70.0f, 1.5f);
|
|
if (mTimer == 1) {
|
|
player->changeDemoMode(23, 1, 0, 0);
|
|
}
|
|
|
|
if (mpMorf->checkFrame(130.0f)) {
|
|
getNumberOfOtama();
|
|
for (int i = 0; i < 20; i++) {
|
|
if (E_DT_n::mDt_OtamaNo[i] == 0) {
|
|
mDemoID = fopAcM_create(PROC_E_OT, i | 0xff030000, ¤t.pos,
|
|
fopAcM_GetRoomNo(this), &shape_angle, NULL, 0xff);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (mpMorf->checkFrame(200.0f)) {
|
|
mMode = 20;
|
|
mCamCenter.set(100.0f, 300.0f, 350.0f);
|
|
mCamEye.set(800.0f, 800.0f, -500.0f);
|
|
mCamFovy = 70.0f;
|
|
field_0x704 = 0;
|
|
}
|
|
break;
|
|
|
|
case 20:
|
|
if (field_0x704 < 10 && mpMorf->checkFrame(E_DT_n::eDt_ShakeFrameDemo[field_0x704])) {
|
|
setStayOtamaFall();
|
|
field_0x704++;
|
|
}
|
|
|
|
if (mpMorf->checkFrame(290.0f)) {
|
|
setSwingEffect();
|
|
}
|
|
|
|
if (mpMorf->checkFrame(330.0f)) {
|
|
mMode = 30;
|
|
if (mDemoID != -1) {
|
|
fopAcM_SearchByID(mDemoID, &otama);
|
|
if (otama != NULL) {
|
|
vec1 = otama->current.pos;
|
|
vec1.y += 100.0f;
|
|
mCamCenter = vec1;
|
|
mCamEye.set(1000.0f, 300.0f, 1700.0f);
|
|
mCamFovy = 40.0f;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 30:
|
|
cLib_chaseF(&mCamFovy, 20.0f, 1.0f);
|
|
if (mDemoID != -1) {
|
|
fopAcM_SearchByID(mDemoID, &otama);
|
|
if (otama != NULL) {
|
|
vec1 = otama->current.pos;
|
|
vec1.y += 100.0f;
|
|
cLib_chasePos(&mCamCenter, vec1, 50.0f);
|
|
}
|
|
}
|
|
|
|
if (mpMorf->isStop()) {
|
|
setBck(ANM_WAIT_01, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f);
|
|
mMode = 32;
|
|
mTimer = 45;
|
|
player->changeOriginalDemo();
|
|
player->changeDemoMode(34, 0, 0, 0);
|
|
}
|
|
break;
|
|
|
|
case 32:
|
|
cLib_chaseF(&mCamFovy, 20.0f, 1.0f);
|
|
if (mDemoID != -1) {
|
|
fopAcM_SearchByID(mDemoID, &otama);
|
|
if (otama != NULL) {
|
|
vec1 = otama->current.pos;
|
|
vec1.y += 100.0f;
|
|
cLib_chasePos(&mCamCenter, vec1, 50.0f);
|
|
}
|
|
}
|
|
|
|
if (mTimer == 0) {
|
|
setActionMode(ACT_WALK, 0);
|
|
maxFallSpeed = l_HIO.mMaxFallSpeed;
|
|
camera->Reset(mCamCenter, mCamEye);
|
|
camera->Start();
|
|
camera->SetTrimSize(0);
|
|
dComIfGp_event_reset();
|
|
attention_info.flags = fopAc_AttnFlag_BATTLE_e;
|
|
Z2GetAudioMgr()->subBgmStart(Z2BGM_DEKUTOAD);
|
|
fpcM_Search(s_demo_otama, this);
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
|
|
camera->Set(mCamCenter, mCamEye, mCamFovy, mCamBank);
|
|
dComIfGp_getEvent().onSkipFade();
|
|
dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 0);
|
|
}
|
|
|
|
/* 806B3B08-806B40D8 0062E8 05D0+00 1/1 0/0 0/0 .text calcCamera__8daE_DT_cFv */
|
|
void daE_DT_c::calcCamera() {
|
|
dBgS_LinChk lin_chk;
|
|
cXyz start, end, offset_pos, offset;
|
|
cXyz player_pos = daPy_getPlayerActorClass()->current.pos;
|
|
camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0));
|
|
cXyz cam_center, vec, cam_eye;
|
|
s16 angle;
|
|
|
|
switch (mDemoMode) {
|
|
case 0:
|
|
break;
|
|
|
|
case 1:
|
|
case 2:
|
|
mDoMtx_stack_c::YrotS(fopAcM_searchPlayerAngleY(this));
|
|
vec.set(0.0f, 100.0f, 400.0f);
|
|
mDoMtx_stack_c::multVec(&vec, &cam_eye);
|
|
cam_eye += player_pos;
|
|
lin_chk.Set(&eyePos, &cam_eye, this);
|
|
if (dComIfG_Bgsp().LineCross(&lin_chk)) {
|
|
eyePos.x *= 0.5f;
|
|
eyePos.z *= 0.5f;
|
|
mDoMtx_stack_c::YrotS(fopAcM_searchPlayerAngleY(this));
|
|
vec.set(0.0f, 150.0f, 100.0f);
|
|
mDoMtx_stack_c::multVec(&vec, &cam_eye);
|
|
cam_eye += player_pos;
|
|
}
|
|
|
|
if (mDemoMode == 1) {
|
|
camera->mCamera.Stop();
|
|
mDemoTimer = l_HIO.field_0x28;
|
|
mCamEye = cam_eye;
|
|
mCamCenter = eyePos;
|
|
mDemoMode = 2;
|
|
daPy_getPlayerActorClass()->onForceSubjectCancel();
|
|
return;
|
|
}
|
|
|
|
cLib_chasePos(&mCamEye, cam_eye, 50.0f);
|
|
cLib_chasePos(&mCamCenter, eyePos, 40.0f);
|
|
if (mDemoTimer != 0) {
|
|
camera->mCamera.U2((s16)cLib_targetAngleY(&mCamEye, &mCamCenter));
|
|
camera->mCamera.Set(mCamCenter, mCamEye);
|
|
} else {
|
|
mDoMtx_stack_c::YrotS(fopAcM_searchPlayerAngleY(this));
|
|
vec.set(0.0f, 150.0f, -500.0f);
|
|
mDoMtx_stack_c::multVec(&vec, &mCamCenter);
|
|
mCamCenter += player_pos;
|
|
camera->mCamera.Reset(mCamCenter, mCamEye);
|
|
camera->mCamera.Start();
|
|
mDemoMode = 0;
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
camera->mCamera.Stop();
|
|
mDemoMode = 4;
|
|
break;
|
|
|
|
case 4:
|
|
field_0x73a = 0;
|
|
offset.set(0.0f, 0.0f, 160.0f);
|
|
cLib_offsetPos(&offset_pos, ¤t.pos, shape_angle.y, &offset);
|
|
angle = (s16)cLib_targetAngleY(&offset_pos, &player_pos);
|
|
mDoMtx_stack_c::YrotS(angle);
|
|
vec.set(200.0f, 1200.0f, 600.0f);
|
|
mDoMtx_stack_c::multVec(&vec, &end);
|
|
end += player_pos;
|
|
mDoMtx_stack_c::YrotS(angle);
|
|
vec.set(0.0f, 0.0f, 100.0f);
|
|
mDoMtx_stack_c::multVec(&vec, &start);
|
|
start += offset_pos;
|
|
lin_chk.Set(&start, &end, this);
|
|
if (dComIfG_Bgsp().LineCross(&lin_chk)) {
|
|
field_0x73a = 0x8000;
|
|
}
|
|
mDemoMode = 5;
|
|
// fallthrough
|
|
|
|
case 5:
|
|
offset.set(0.0f, 0.0f, 160.0f);
|
|
cLib_offsetPos(&offset_pos, ¤t.pos, shape_angle.y, &offset);
|
|
angle = field_0x73a + cLib_targetAngleY(&offset_pos, &player_pos);
|
|
mDoMtx_stack_c::YrotS(angle);
|
|
vec.set(200.0f, 1200.0f, 600.0f);
|
|
mDoMtx_stack_c::multVec(&vec, &cam_eye);
|
|
cam_eye += player_pos;
|
|
mDoMtx_stack_c::YrotS(angle);
|
|
vec.set(0.0f, 0.0f, 100.0f);
|
|
mDoMtx_stack_c::multVec(&vec, &cam_center);
|
|
cam_center += offset_pos;
|
|
camera->mCamera.Set(cam_center, cam_eye, 50.0f, 0);
|
|
break;
|
|
|
|
case 6:
|
|
camera->mCamera.Start();
|
|
mDemoMode = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 806B40D8-806B4724 0068B8 064C+00 1/1 0/0 0/0 .text calcBoxAndTuba__8daE_DT_cFv */
|
|
void daE_DT_c::calcBoxAndTuba() {
|
|
if (mChestMode == 0) {
|
|
return;
|
|
}
|
|
|
|
mChestSpeed.y += -5.0f;
|
|
if (mChestSpeed.y < -80.0f) {
|
|
mChestSpeed.y = -80.0f;
|
|
}
|
|
mChestPos += mChestSpeed;
|
|
if (mChestPos.y <= 0.0f) {
|
|
mChestPos.y = 0.0f;
|
|
}
|
|
|
|
switch (mChestMode) {
|
|
case 1:
|
|
mChestAngle.x += 0x400;
|
|
if (mChestPos.y <= 0.0f) {
|
|
mChestAngle.x = -0x2000;
|
|
mChestSpeed.x = 1.2f;
|
|
mChestSpeed.y = 30.0f;
|
|
mChestSpeed.z = 9.0f;
|
|
mChestMode = 2;
|
|
setBoxTubaLandEffect();
|
|
mDoAud_seStart(Z2SE_CM_BODYFALL_ASASE_M, &mChestPos, 0, 0);
|
|
} else {
|
|
s16 angle = 0x4000 - cM_atan2s(mChestSpeed.y, mChestSpeed.absXZ());
|
|
cLib_addCalcAngleS(&mSpitAngle[0].x, angle, 8, 0x1000, 0x100);
|
|
cLib_addCalcAngleS(&mSpitAngle[1].x, mSpitAngle[0].x, 8, 0x1000, 0x100);
|
|
cLib_addCalcAngleS(&mSpitAngle[2].x, mSpitAngle[1].x, 8, 0x1000, 0x100);
|
|
mSpitAngle[0].y = mSpitAngle[1].y = mSpitAngle[2].y = 0;
|
|
field_0x6dc += 0x800;
|
|
mSpitAngle[0].z = cM_ssin(field_0x6dc) * 0x800;
|
|
mSpitAngle[1].z = cM_ssin(field_0x6dc + 0x4000) * 0x1000;
|
|
mSpitAngle[2].z = cM_ssin(field_0x6dc + 0x8000) * 0x1800;
|
|
field_0x6de += 0x1000;
|
|
mSpitScale[0] = cM_ssin(field_0x6de) * 0.2f + 1.0f;
|
|
mSpitScale[1] = cM_ssin(field_0x6de + 0x4000) * 0.1f + 1.0f;
|
|
mSpitScale[2] = cM_ssin(field_0x6de + 0x8000) * 0.05f + 1.0f;
|
|
mSpitScaleX = 1.0f;
|
|
mSpitOffset = 80.0f;
|
|
mSpitFade[0] = 1.0f;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
cLib_chaseAngleS(&mChestAngle.x, 0, 0x400);
|
|
if (mChestSpeed.y < 0.0f && mChestPos.y <= 0.0f) {
|
|
mChestAngle.x = 0;
|
|
mChestSpeed.set(0.0f, 0.0f, 0.0f);
|
|
mChestPos.set(0.0f, 0.0f, 0.0f);
|
|
if (mSwBit != 0xff && !dComIfGs_isSwitch(mSwBit, fopAcM_GetRoomNo(this))) {
|
|
dComIfGs_onSwitch(mSwBit, fopAcM_GetRoomNo(this));
|
|
}
|
|
mChestMode = 3;
|
|
mSpitTimer = 50;
|
|
}
|
|
cLib_addCalcAngleS(&mSpitAngle[0].x, 0, 0x10, 0x2000, 0x80);
|
|
cLib_addCalcAngleS(&mSpitAngle[1].x, mSpitAngle[0].x, 0x10, 0x2000, 0x80);
|
|
cLib_addCalcAngleS(&mSpitAngle[2].x, mSpitAngle[1].x, 0x10, 0x2000, 0x80);
|
|
cLib_chaseF(&mSpitScale[0], 2.0f, 0.0f);
|
|
cLib_chaseF(&mSpitScale[1], 3.0f, 0.02f);
|
|
cLib_chaseF(&mSpitScale[2], 1.0f, 0.02f);
|
|
cLib_chaseF(&mSpitOffset, 100.0f, 1.0f);
|
|
break;
|
|
|
|
case 3:
|
|
case 4:
|
|
cLib_addCalcAngleS(&mSpitAngle[0].x, 0, 0x10, 0x2000, 0x80);
|
|
cLib_addCalcAngleS(&mSpitAngle[1].x, mSpitAngle[0].x, 0x10, 0x2000, 0x80);
|
|
cLib_addCalcAngleS(&mSpitAngle[2].x, mSpitAngle[1].x, 0x10, 0x2000, 0x80);
|
|
cLib_chaseF(&mSpitScale[0], 5.0f, 0.01f);
|
|
cLib_chaseF(&mSpitScale[1], 5.0f, 0.02f);
|
|
cLib_chaseF(&mSpitScale[2], 1.0f, 0.02f);
|
|
cLib_chaseF(&mSpitOffset, -100.0f, 1.0f);
|
|
if (mChestMode == 3) {
|
|
if (mSpitTimer == 30) {
|
|
mSpitFade[1] = mSpitFade[2] = mSpitFade[3] = 1.0f;
|
|
}
|
|
if (mSpitTimer == 0) {
|
|
mChestMode = 4;
|
|
mSpitTimer = 100;
|
|
}
|
|
} else {
|
|
if (mSpitTimer < 70) {
|
|
cLib_chaseF(&mSpitFade[0], 0.0f, 0.01f);
|
|
if (mSpitTimer < 30) {
|
|
cLib_chaseF(&mSpitFade[2], 0.0f, 0.02f);
|
|
if (mSpitTimer < 15) {
|
|
cLib_chaseF(&mSpitFade[1], 0.0f, 0.02f);
|
|
if (mSpitTimer == 0) {
|
|
cLib_chaseF(&mSpitFade[3], 0.0f, 0.02f);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 806B4724-806B49F0 006F04 02CC+00 2/1 0/0 0/0 .text action__8daE_DT_cFv */
|
|
void daE_DT_c::action() {
|
|
mBodyCcSph[1].OnTgShield();
|
|
if (mLinkPressed) {
|
|
mBodyCcSph[0].OffCoSetBit();
|
|
mBodyCcSph[1].OffCoSetBit();
|
|
mLegCcSph[0].OffCoSetBit();
|
|
mLegCcSph[1].OffCoSetBit();
|
|
} else {
|
|
mBodyCcSph[0].OnCoSetBit();
|
|
mBodyCcSph[1].OnCoSetBit();
|
|
mLegCcSph[0].OnCoSetBit();
|
|
mLegCcSph[1].OnCoSetBit();
|
|
}
|
|
mTongueCcSph[0].OffCoSetBit();
|
|
mTongueCcSph[0].OffTgSetBit();
|
|
mTongueCcSph[1].OffCoSetBit();
|
|
mTongueCcSph[1].OffTgSetBit();
|
|
|
|
mEyePosMode = 0;
|
|
mFlyingAttack = false;
|
|
mFlyingAttackLand = false;
|
|
field_0x73e = 0;
|
|
field_0x740 = 0;
|
|
|
|
checkWaterSurface();
|
|
damage_check();
|
|
|
|
cLib_chaseF(&field_0x748, 0.0f, 0.02f);
|
|
field_0x74c += 0x2000;
|
|
cLib_chaseAngleS(&field_0x74e, 0, 0x40);
|
|
field_0x750 += 0x2000;
|
|
cLib_chaseAngleS(&field_0x752, 0, 0x40);
|
|
field_0x754 += 0x2000;
|
|
|
|
BOOL boss_room_wait = true;
|
|
switch (mAction) {
|
|
case ACT_WAIT:
|
|
executeWait();
|
|
break;
|
|
case ACT_CRY:
|
|
executeCry();
|
|
break;
|
|
case ACT_SHAKE:
|
|
executeShake();
|
|
break;
|
|
case ACT_WALK:
|
|
executeWalk();
|
|
break;
|
|
case ACT_JUMP:
|
|
executeJump();
|
|
break;
|
|
case ACT_DOWN:
|
|
mBodyCcSph[1].OffTgShield();
|
|
executeDown();
|
|
break;
|
|
case ACT_SEARCH:
|
|
executeSearch();
|
|
break;
|
|
case ACT_DAMAGE:
|
|
mBodyCcSph[1].OffTgShield();
|
|
executeDamage();
|
|
break;
|
|
case ACT_BOMB_DAMAGE:
|
|
executeBombDamage();
|
|
break;
|
|
case ACT_DEATH:
|
|
executeDeath();
|
|
break;
|
|
case ACT_OPENING:
|
|
executeOpening();
|
|
boss_room_wait = false;
|
|
}
|
|
|
|
if (boss_room_wait) {
|
|
daPy_getPlayerActorClass()->onBossRoomWait();
|
|
}
|
|
|
|
calcCamera();
|
|
setStepEffect();
|
|
fopAcM_posMoveF(this, NULL);
|
|
if (!field_0x781) {
|
|
mAcch.CrrPos(dComIfG_Bgsp());
|
|
}
|
|
mpMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
|
|
calcBoxAndTuba();
|
|
checkTongueBg();
|
|
cLib_chaseAngleS(&field_0x742, field_0x73e, 0x100);
|
|
cLib_chaseAngleS(&field_0x744, field_0x740, 0x100);
|
|
}
|
|
|
|
/* 806B49F0-806B4B24 0071D0 0134+00 1/1 0/0 0/0 .text mtx_set__8daE_DT_cFv */
|
|
void daE_DT_c::mtx_set() {
|
|
cXyz spit_pos;
|
|
|
|
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
|
|
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
|
mDoMtx_stack_c::transM(0.0f, 0.0f, -100.0f);
|
|
mDoMtx_stack_c::scaleM(mScale, mScale, mScale);
|
|
mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mpMorf->modelCalc();
|
|
|
|
mDoMtx_stack_c::transS(mChestPos);
|
|
mDoMtx_stack_c::ZXYrotM(mChestAngle);
|
|
mpChestModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mpSpitBModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mDoMtx_stack_c::transM(0.0f, mSpitOffset, 0.0f);
|
|
mDoMtx_stack_c::multVecZero(&spit_pos);
|
|
|
|
mDoMtx_stack_c::transS(spit_pos);
|
|
mDoMtx_stack_c::ZXYrotM(mSpitAngle[0]);
|
|
mDoMtx_stack_c::scaleM(mSpitScale[0], 1.0f, mSpitScale[0]);
|
|
mpSpitModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
|
|
/* 806B4B24-806B4FD8 007304 04B4+00 1/1 0/0 0/0 .text cc_set__8daE_DT_cFv */
|
|
void daE_DT_c::cc_set() {
|
|
cXyz center;
|
|
J3DModel* model = mpMorf->getModel();
|
|
|
|
switch (mEyePosMode) {
|
|
case 0:
|
|
mDoMtx_stack_c::copy(model->getAnmMtx(JNT_HEAD));
|
|
mDoMtx_stack_c::transM(0.0f, 100.0f, 0.0f);
|
|
mDoMtx_stack_c::multVecZero(&eyePos);
|
|
break;
|
|
|
|
case 1:
|
|
mDoMtx_stack_c::copy(model->getAnmMtx(JNT_TONGUE_4));
|
|
mDoMtx_stack_c::transM(30.0f, 0.0f, 0.0f);
|
|
mDoMtx_stack_c::multVecZero(&eyePos);
|
|
break;
|
|
|
|
case 2:
|
|
mDoMtx_stack_c::copy(model->getAnmMtx(JNT_TONGUE_3));
|
|
mDoMtx_stack_c::multVecZero(&eyePos);
|
|
break;
|
|
|
|
case 3:
|
|
eyePos = mChestPos;
|
|
break;
|
|
}
|
|
|
|
attention_info.position = eyePos;
|
|
attention_info.position.y += 70.0f;
|
|
|
|
mDoMtx_stack_c::copy(model->getAnmMtx(JNT_BACKBONE_1));
|
|
mDoMtx_stack_c::transM(110.0f, -100.0f, 0.0f);
|
|
if (mAction == ACT_DOWN || (mAction == ACT_JUMP && mMode >= 7)) {
|
|
if (!mLinkPressed) {
|
|
mBodyCcSph[0].SetR(510.0f);
|
|
} else {
|
|
mBodyCcSph[0].SetR(360.0f);
|
|
}
|
|
} else {
|
|
mBodyCcSph[0].SetR(400.0f);
|
|
}
|
|
mDoMtx_stack_c::multVecZero(¢er);
|
|
mBodyCcSph[0].SetC(center);
|
|
dComIfG_Ccsp()->Set(&mBodyCcSph[0]);
|
|
|
|
mDoMtx_stack_c::copy(model->getAnmMtx(JNT_BACKBONE_1));
|
|
mDoMtx_stack_c::transM(110.0f, -100.0f, 0.0f);
|
|
if (mAction == ACT_DOWN || (mAction == ACT_JUMP && mMode >= 7)) {
|
|
if (!mLinkPressed) {
|
|
mDoMtx_stack_c::transM(300.0f, -50.0f, 0.0f);
|
|
mBodyCcSph[1].SetR(350.0f);
|
|
} else {
|
|
mDoMtx_stack_c::transM(300.0f, -30.0f, 0.0f);
|
|
mBodyCcSph[1].SetR(370.0f);
|
|
}
|
|
} else {
|
|
mDoMtx_stack_c::transM(220.0f, -20.0f, 0.0f);
|
|
mBodyCcSph[1].SetR(350.0f);
|
|
}
|
|
mDoMtx_stack_c::multVecZero(¢er);
|
|
mBodyCcSph[1].SetC(center);
|
|
dComIfG_Ccsp()->Set(&mBodyCcSph[1]);
|
|
|
|
mDoMtx_stack_c::copy(model->getAnmMtx(JNT_TONGUE_4));
|
|
mDoMtx_stack_c::transM(30.0f, 0.0f, 0.0f);
|
|
mDoMtx_stack_c::multVecZero(¢er);
|
|
mTongueCcSph[0].SetC(center);
|
|
mTongueCcSph[0].SetR(70.0f);
|
|
dComIfG_Ccsp()->Set(&mTongueCcSph[0]);
|
|
|
|
mDoMtx_stack_c::copy(model->getAnmMtx(JNT_TONGUE_4));
|
|
mDoMtx_stack_c::transM(-30.0f, 0.0f, 0.0f);
|
|
mDoMtx_stack_c::multVecZero(¢er);
|
|
mTongueCcSph[1].SetC(center);
|
|
mTongueCcSph[1].SetR(70.0f);
|
|
dComIfG_Ccsp()->Set(&mTongueCcSph[1]);
|
|
|
|
mDoMtx_stack_c::copy(model->getAnmMtx(JNT_LEG_L1));
|
|
mDoMtx_stack_c::transM(130.0f, 0.0f, 0.0f);
|
|
mDoMtx_stack_c::multVecZero(¢er);
|
|
mLegCcSph[0].SetC(center);
|
|
mLegCcSph[0].SetR(100.0f);
|
|
dComIfG_Ccsp()->Set(&mLegCcSph[0]);
|
|
|
|
mDoMtx_stack_c::copy(model->getAnmMtx(JNT_LEG_R1));
|
|
mDoMtx_stack_c::transM(130.0f, 0.0f, 0.0f);
|
|
mDoMtx_stack_c::multVecZero(¢er);
|
|
mLegCcSph[1].SetC(center);
|
|
mLegCcSph[1].SetR(100.0f);
|
|
dComIfG_Ccsp()->Set(&mLegCcSph[1]);
|
|
}
|
|
|
|
/* 806B4FD8-806B5130 0077B8 0158+00 1/1 0/0 0/0 .text execute__8daE_DT_cFv */
|
|
int daE_DT_c::execute() {
|
|
if (mTimer != 0) {
|
|
mTimer--;
|
|
}
|
|
if (mWalkTimer != 0) {
|
|
mWalkTimer--;
|
|
}
|
|
if (mDamageTimer != 0) {
|
|
mDamageTimer--;
|
|
}
|
|
if (mDemoTimer != 0) {
|
|
mDemoTimer--;
|
|
}
|
|
if (mQuakeTimer != 0) {
|
|
mQuakeTimer--;
|
|
if (mQuakeTimer == 0) {
|
|
dComIfGp_getVibration().StopQuake(0x1f);
|
|
}
|
|
}
|
|
if (mBodyDamageTimer != 0) {
|
|
mBodyDamageTimer--;
|
|
}
|
|
if (mLegLDamageTimer != 0) {
|
|
mLegLDamageTimer--;
|
|
}
|
|
if (mLegRDamageTimer != 0) {
|
|
mLegRDamageTimer--;
|
|
}
|
|
if (mSpitTimer != 0) {
|
|
mSpitTimer--;
|
|
}
|
|
if (field_0x714 != 0) {
|
|
field_0x714--;
|
|
} else if (!dComIfGs_isOneZoneSwitch(2, fopAcM_GetRoomNo(this))) {
|
|
dComIfGs_onOneZoneSwitch(2, fopAcM_GetRoomNo(this));
|
|
}
|
|
|
|
action();
|
|
mtx_set();
|
|
cc_set();
|
|
return 1;
|
|
}
|
|
|
|
/* 806B5130-806B5150 007910 0020+00 2/1 0/0 0/0 .text daE_DT_Execute__FP8daE_DT_c */
|
|
static int daE_DT_Execute(daE_DT_c* i_this) {
|
|
return i_this->execute();
|
|
}
|
|
|
|
/* 806B5150-806B5158 007930 0008+00 1/0 0/0 0/0 .text daE_DT_IsDelete__FP8daE_DT_c */
|
|
static int daE_DT_IsDelete(daE_DT_c* i_this) {
|
|
return 1;
|
|
}
|
|
|
|
/* 806B5158-806B51F4 007938 009C+00 1/1 0/0 0/0 .text _delete__8daE_DT_cFv */
|
|
int daE_DT_c::_delete() {
|
|
dComIfG_resDelete(&mPhase[0], "E_DT");
|
|
dComIfG_resDelete(&mPhase[1], "Dalways");
|
|
dComIfG_resDelete(&mPhase[2], "E_OT");
|
|
if (mHIOInit) {
|
|
hioInit = false;
|
|
}
|
|
if (heap != NULL) {
|
|
mSound.deleteObject();
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* 806B51F4-806B5214 0079D4 0020+00 1/0 0/0 0/0 .text daE_DT_Delete__FP8daE_DT_c */
|
|
static int daE_DT_Delete(daE_DT_c* i_this) {
|
|
return i_this->_delete();
|
|
}
|
|
|
|
/* 806B5214-806B5440 0079F4 022C+00 1/1 0/0 0/0 .text CreateHeap__8daE_DT_cFv */
|
|
int daE_DT_c::CreateHeap() {
|
|
J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes("E_DT", 28);
|
|
mpMorf = new mDoExt_McaMorfSO(model_data, NULL, NULL,
|
|
(J3DAnmTransform*)dComIfG_getObjectRes("E_DT", 23),
|
|
J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1,
|
|
&mSound, 0, 0x11000084);
|
|
if (mpMorf == NULL || mpMorf->getModel() == NULL) {
|
|
return 0;
|
|
}
|
|
J3DModel* model = mpMorf->getModel();
|
|
model->setUserArea((uintptr_t)this);
|
|
for (u16 i = 1; i < model->getModelData()->getJointNum(); i++) {
|
|
model->getModelData()->getJointNodePointer(i)->setCallBack(JointCallBack);
|
|
}
|
|
|
|
model_data = (J3DModelData*)dComIfG_getObjectRes("Dalways", "BoxB.bmd");
|
|
mpChestModel = mDoExt_J3DModel__create(model_data, 0x80000, 0x11000084);
|
|
if (mpChestModel == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
model_data = (J3DModelData*)dComIfG_getObjectRes("E_DT", 29);
|
|
mpSpitModel = mDoExt_J3DModel__create(model_data, 0, 0x11000084);
|
|
if (mpSpitModel == NULL) {
|
|
return 0;
|
|
}
|
|
mpSpitModel->setUserArea((uintptr_t)this);
|
|
for (u16 i = 1; i < mpSpitModel->getModelData()->getJointNum(); i++) {
|
|
mpSpitModel->getModelData()->getJointNodePointer(i)->setCallBack(JointCallBackTuba);
|
|
}
|
|
|
|
model_data = (J3DModelData*)dComIfG_getObjectRes("E_DT", 30);
|
|
mpSpitBModel = mDoExt_J3DModel__create(model_data, 0, 0x11000084);
|
|
if (mpSpitBModel == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 806B5440-806B5460 007C20 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */
|
|
static int useHeapInit(fopAc_ac_c* i_this) {
|
|
return static_cast<daE_DT_c*>(i_this)->CreateHeap();
|
|
}
|
|
|
|
/* 806B5460-806B592C 007C40 04CC+00 1/1 0/0 0/0 .text create__8daE_DT_cFv */
|
|
cPhs__Step daE_DT_c::create() {
|
|
fopAcM_SetupActor(this, daE_DT_c);
|
|
|
|
cPhs__Step step = (cPhs__Step)dComIfG_resLoad(&mPhase[0], "E_DT");
|
|
if (step != cPhs_COMPLEATE_e) {
|
|
return step;
|
|
}
|
|
step = (cPhs__Step)dComIfG_resLoad(&mPhase[1], "Dalways");
|
|
if (step != cPhs_COMPLEATE_e) {
|
|
return step;
|
|
}
|
|
step = (cPhs__Step)dComIfG_resLoad(&mPhase[2], "E_OT");
|
|
if (step != cPhs_COMPLEATE_e) {
|
|
return step;
|
|
}
|
|
|
|
mSwBit = fopAcM_GetParam(this) & 0xff;
|
|
if (dComIfGs_isSwitch(mSwBit, fopAcM_GetRoomNo(this))) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
if (dComIfGs_isStageMiddleBoss()) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
if (!fopAcM_entrySolidHeap(this, useHeapInit, 0xa840)) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
if (!hioInit) {
|
|
hioInit = true;
|
|
mHIOInit = true;
|
|
l_HIO.field_0x4 = -1;
|
|
}
|
|
|
|
attention_info.flags = fopAc_AttnFlag_BATTLE_e;
|
|
fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
|
|
fopAcM_SetMin(this, -700.0f, -200.0f, -700.0f);
|
|
fopAcM_SetMax(this, 700.0f, 500.0f, 700.0f);
|
|
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir,
|
|
fopAcM_GetSpeed_p(this), NULL, NULL);
|
|
mAcchCir.SetWall(50.0f, 500.0f);
|
|
health = 400;
|
|
field_0x560 = 400;
|
|
|
|
mCcStts.Init(0xff, 0, this);
|
|
mBodyCcSph[0].Set(E_DT_n::cc_dt_body_src);
|
|
mBodyCcSph[0].SetStts(&mCcStts);
|
|
mBodyCcSph[1].Set(E_DT_n::cc_dt_body_src);
|
|
mBodyCcSph[1].SetStts(&mCcStts);
|
|
mLegCcSph[0].Set(E_DT_n::cc_dt_body_src);
|
|
mLegCcSph[0].SetStts(&mCcStts);
|
|
mLegCcSph[1].Set(E_DT_n::cc_dt_body_src);
|
|
mLegCcSph[1].SetStts(&mCcStts);
|
|
mTongueCcSph[0].Set(E_DT_n::cc_dt_tongue_src);
|
|
mTongueCcSph[0].SetStts(&mCcStts);
|
|
mTongueCcSph[1].Set(E_DT_n::cc_dt_tongue_src);
|
|
mTongueCcSph[1].SetStts(&mCcStts);
|
|
|
|
attention_info.distances[fopAc_attn_BATTLE_e] = 4;
|
|
mSound.init(¤t.pos, &eyePos, 3, 1);
|
|
mAtInfo.mpSound = &mSound;
|
|
mAtInfo.mPowerType = 1;
|
|
gravity = 0.0f;
|
|
maxFallSpeed = l_HIO.mMaxFallSpeed;
|
|
mScale = l_HIO.mScale;
|
|
|
|
if (daPy_getPlayerActorClass()->current.pos.y < -800.0f) {
|
|
cDmr_SkipInfo = 0;
|
|
}
|
|
if (daPy_getPlayerActorClass()->current.pos.z > 3000.0f) {
|
|
cDmr_SkipInfo = 0;
|
|
}
|
|
|
|
if (cDmr_SkipInfo != 0) {
|
|
cDmr_SkipInfo = 0;
|
|
gravity = -5.0f;
|
|
setActionMode(ACT_WAIT, 0);
|
|
maxFallSpeed = l_HIO.mMaxFallSpeed;
|
|
attention_info.flags = fopAc_AttnFlag_BATTLE_e;
|
|
current.pos.set(0.0f, 0.0f, -500.0f);
|
|
shape_angle.y = cLib_targetAngleY(¤t.pos, &daPy_getPlayerActorClass()->current.pos);
|
|
Z2GetAudioMgr()->subBgmStart(Z2BGM_DEKUTOAD);
|
|
dComIfGs_onOneZoneSwitch(3, fopAcM_GetRoomNo(this));
|
|
} else {
|
|
setActionMode(ACT_OPENING, 0);
|
|
field_0x714 = 600;
|
|
}
|
|
|
|
daE_DT_Execute(this);
|
|
return step;
|
|
}
|
|
|
|
/* 806B5BBC-806B5BDC 00839C 0020+00 1/0 0/0 0/0 .text daE_DT_Create__FP8daE_DT_c */
|
|
static cPhs__Step daE_DT_Create(daE_DT_c* i_this) {
|
|
return i_this->create();
|
|
}
|
|
|
|
/* 806B61B0-806B61D0 -00001 0020+00 1/0 0/0 0/0 .data l_daE_DT_Method */
|
|
static actor_method_class l_daE_DT_Method = {
|
|
(process_method_func)daE_DT_Create,
|
|
(process_method_func)daE_DT_Delete,
|
|
(process_method_func)daE_DT_Execute,
|
|
(process_method_func)daE_DT_IsDelete,
|
|
(process_method_func)daE_DT_Draw,
|
|
};
|
|
|
|
/* 806B61D0-806B6200 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_DT */
|
|
extern actor_process_profile_definition g_profile_E_DT = {
|
|
fpcLy_CURRENT_e, // mLayerID
|
|
7, // mListID
|
|
fpcPi_CURRENT_e, // mListPrio
|
|
PROC_E_DT, // mProcName
|
|
&g_fpcLf_Method.base, // sub_method
|
|
sizeof(daE_DT_c), // mSize
|
|
0, // mSizeOther
|
|
0, // mParameters
|
|
&g_fopAc_Method.base, // sub_method
|
|
202, // mPriority
|
|
&l_daE_DT_Method, // sub_method
|
|
0x00040000, // mStatus
|
|
fopAc_ENEMY_e, // mActorType
|
|
fopAc_CULLBOX_CUSTOM_e, // cullType
|
|
};
|
|
|
|
AUDIO_INSTANCES
|