/** * d_a_b_bq.cpp * Boss Baba (Diababa) */ #include "d/actor/d_a_b_bq.h" #include "d/d_com_inf_game.h" #include "d/actor/d_a_player.h" #include "d/d_s_play.h" #include "dol2asm.h" #include "f_op/f_op_msg_mng.h" #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_graphic.h" #include "d/actor/d_a_obj_ystone.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "SSystem/SComponent/c_math.h" #include "c/c_damagereaction.h" #include "cmath.h" class obj_fw_class : public fopAc_ac_c { public: /* 0x568 */ request_of_phase_process_class mPhase; /* 0x570 */ u8 field_0x570; /* 0x574 */ J3DModel* mpModel; /* 0x578 */ s16 field_0x578; /* 0x57A */ s16 mAction; /* 0x57C */ u8 field_0x57C[0x57E - 0x57C]; /* 0x57E */ s16 field_0x57e[2]; /* 0x584 */ f32 field_0x584; /* 0x588 */ f32 field_0x588; /* 0x58C */ f32 field_0x58c; /* 0x590 */ s16 field_0x590; /* 0x592 */ s16 field_0x592; /* 0x594 */ f32 field_0x594; /* 0x598 */ f32 field_0x598; /* 0x59C */ u8 field_0x59C[0x5A0 - 0x59C]; /* 0x5A0 */ s16 field_0x5a0; /* 0x5A2 */ s16 field_0x5a2; /* 0x5A4 */ s16 field_0x5a4; /* 0x5A8 */ cXyz field_0x5a8; /* 0x5B4 */ u8 field_0x5B4[0x5B8 - 0x5B4]; /* 0x5B8 */ Mtx mBgMtx; /* 0x5E8 */ dBgW* mpBgW; /* 0x5EC */ Z2SoundObjSimple mSound; /* 0x60C */ u8 field_0x60C[0x61C - 0x60C]; /* 0x61C */ u32 field_0x61c; /* 0x620 */ u8 field_0x620[0x624 - 0x620]; /* 0x624 */ u8 field_0x624; }; class e_mb_class : public fopEn_enemy_c { public: /* 0x5AC */ request_of_phase_process_class mPhase; /* 0x5B4 */ s16 mMode; /* 0x5B6 */ u8 field_0x5b6; /* 0x5B8 */ cXyz field_0x5b8; /* 0x5C4 */ u8 field_0x5C4[0x5C8 - 0x5C4]; /* 0x5C8 */ mDoExt_McaMorfSO* mpMorf; /* 0x5CC */ int mAnmID; /* 0x5D0 */ mDoExt_btpAnm* field_0x5d0; /* 0x5D4 */ s16 field_0x5d4; /* 0x5D8 */ f32 field_0x5d8; /* 0x5DC */ cXyz field_0x5dc; /* 0x5E8 */ Z2CreatureEnemy mSound; /* 0x68C */ s8 field_0x68c; /* 0x690 */ mDoExt_McaMorf* field_0x690; /* 0x694 */ mDoExt_McaMorf* field_0x694; /* 0x698 */ s16 field_0x698; /* 0x69A */ s16 mAction; /* 0x69C */ s16 field_0x69c[3]; /* 0x6A2 */ s16 field_0x6a2; /* 0x6A4 */ cXyz field_0x6a4; /* 0x6B0 */ u8 field_0x6b0; /* 0x6B4 */ mDoExt_3DlineMat1_c field_0x6b4; /* 0x6F0 */ f32 field_0x6f0; /* 0x6F4 */ dCcD_Stts mCcStts; /* 0x730 */ dCcD_Sph mCcSph; /* 0x868 */ dCcU_AtInfo mAtInfo; /* 0x88C */ u8 field_0x88C[0x8C8 - 0x88C]; /* 0x8C8 */ s8 field_0x8c8; /* 0x8C9 */ u8 field_0x8c9; }; enum daB_BQ_ANM { ANM_APPEAR = 7, ANM_ATTACK, ANM_ATTACK_A, ANM_ATTACK_B, ANM_ATTACK_C, ANM_BOMB_DAMAGE, ANM_CORE_DAMAGE, ANM_DAMAGE_WAIT, ANM_DEAD, ANM_LOOK_M, ANM_NO_DAMAGE, ANM_RETURN_01, ANM_RETURN_02, ANM_RUNAWAY, ANM_TEST_MOTION, ANM_TODOME, ANM_WAIT_01, }; enum daB_BQ_ACT { ACTION_STAY, ACTION_WAIT, ACTION_ATTACK, ACTION_DAMAGE, ACTION_END, }; enum daB_BQ_JNT { JNT_CENTER, JNT_BODY1, JNT_BODY2, JNT_HAND_RC1, JNT_HAND_RC2, JNT_HAND_RC3, JNT_HAND_RC4, JNT_HAND_LC1, JNT_HAND_LC2, JNT_HAND_LC3, JNT_HAND_LC4, JNT_HAND_LD1, JNT_HAND_LD2, JNT_HAND_LD3, JNT_HAND_LD4, JNT_HAND_RD1, JNT_HAND_RD2, JNT_HAND_RD3, JNT_HAND_RD4, JNT_TAIL1, JNT_TAIL2, JNT_HAND_LA1, JNT_HAND_LA2, JNT_HAND_LA3, JNT_HAND_LA4, JNT_HAND_LB1, JNT_HAND_LB2, JNT_HAND_LB3, JNT_HAND_LB4, JNT_HAND_L_LOC, JNT_HAND_RA1, JNT_HAND_RA2, JNT_HAND_RA3, JNT_HAND_RA4, JNT_HAND_RB1, JNT_HAND_RB2, JNT_HAND_RB3, JNT_HAND_RB4, JNT_HAND_R_LOC, JNT_NECK_1, JNT_NECK_2, JNT_NECK_3, JNT_NECK_4, JNT_NECK_5, JNT_NECK_6, JNT_NECK_7, JNT_B_LEAF, JNT_HEAD, JNT_CORE_1, JNT_CORE_2, JNT_CORE_3, JNT_CORE_4, JNT_CORE_5, JNT_CORE_6, JNT_JAW_T1, JNT_JAW_T2, JNT_JAW_T3, JNT_JAW_U1, JNT_JAW_UL1, JNT_JAW_UL2, JNT_JAW_UR1, JNT_JAW_UR2, JNT_LEAF_L1, JNT_LEAF_L2, JNT_LEAF_L3, JNT_LEAF_R1, JNT_LEAF_R2, JNT_LEAF_R3, JNT_LEAF_T1, JNT_LEAF_T2, JNT_LEAF_T3, JNT_LEAF_U1, JNT_LEAF_U2, JNT_LEAF_U3, JNT_SLEAF_TL1, JNT_SLEAF_TL2, JNT_SLEAF_TR1, JNT_SLEAF_TR2, JNT_SLEAF_UL1, JNT_SLEAF_UL2, JNT_SLEAF_UR1, JNT_SLEAF_UR2, }; /* 805BA874-805BA880 000000 000C+00 2/2 0/0 0/0 .data cNullVec__6Z2Calc */ SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; /* 805BA880-805BA894 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ #pragma push #pragma force_active on SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { 0x02000201, /* padding */ 0x40080000, 0x00000000, 0x3FE00000, 0x00000000, }; #pragma pop /* 805B356C-805B35A0 0000EC 0034+00 1/1 0/0 0/0 .text __ct__12daB_BQ_HIO_cFv */ daB_BQ_HIO_c::daB_BQ_HIO_c() { field_0x4 = -1; mModelSize = 1.0f; mChanceTime = 200; mWaterSprayTime = 150; } /* 805B35A0-805B364C 000120 00AC+00 6/6 0/0 0/0 .text anm_init__FP10b_bq_classifUcf */ static void anm_init(b_bq_class* i_this, int i_anmID, f32 i_morf, u8 i_mode, f32 i_speed) { J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes("B_bq", i_anmID); i_this->mpMorf->setAnm(pbck, i_mode, i_morf, i_speed, 0.0f, -1.0f); i_this->mAnmID = i_anmID; } /* 805B364C-805B37A4 0001CC 0158+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */ static int nodeCallBack(J3DJoint* i_joint, int param_1) { if (param_1 == 0) { int joint_no = i_joint->getJntNo(); J3DModel* model = j3dSys.getModel(); b_bq_class* a_this = (b_bq_class*)model->getUserArea(); if (a_this != NULL) { MTXCopy(model->getAnmMtx(joint_no), *calc_mtx); if (joint_no == JNT_NECK_5 || joint_no == JNT_NECK_6 || joint_no == JNT_NECK_7 || joint_no == JNT_HEAD) { cMtx_YrotM(*calc_mtx, a_this->mHeadRot); } if (joint_no == TREG_S(0)) { cMtx_XrotM(*calc_mtx, TREG_S(1)); cMtx_YrotM(*calc_mtx, TREG_S(2)); cMtx_ZrotM(*calc_mtx, TREG_S(3)); } else if (joint_no == TREG_S(4)) { cMtx_XrotM(*calc_mtx, TREG_S(5)); cMtx_YrotM(*calc_mtx, TREG_S(6)); cMtx_ZrotM(*calc_mtx, TREG_S(7)); } model->setAnmMtx(joint_no, *calc_mtx); MTXCopy(*calc_mtx, J3DSys::mCurrentMtx); } } return 1; } /* 805B37A4-805B3ABC 000324 0318+00 1/0 0/0 0/0 .text daB_BQ_Draw__FP10b_bq_class */ static int daB_BQ_Draw(b_bq_class* i_this) { if (i_this->mDisableDraw) { return 1; } J3DModel* model = i_this->mpMorf->getModel(); g_env_light.settingTevStruct(0, &i_this->current.pos, &i_this->tevStr); g_env_light.setLightTevColorType_MAJI(model, &i_this->tevStr); if (i_this->mpDeadBrk->getPlaySpeed() > 0.0f) { i_this->mpDeadBrk->entry(model->getModelData()); } if (i_this->mPlayTodomeBtk) { i_this->mpTodomeBtk->entry(model->getModelData()); } if (i_this->mSetDeadColor) { J3DModelData* modelData = model->getModelData(); for (u16 i = 0; i < modelData->getMaterialNum(); i++) { J3DMaterial* material = modelData->getMaterialNodePointer(i); material->getTevColor(0)->r = i_this->mDeadColor; material->getTevColor(0)->g = i_this->mDeadColor; material->getTevColor(0)->b = i_this->mDeadColor; } } i_this->mpMorf->entryDL(); if (i_this->field_0x5c8 != 0) { if (i_this->field_0x5c8 == 1) { g_env_light.setLightTevColorType_MAJI(i_this->mpEyeballModel, &i_this->tevStr); if (i_this->field_0x1178 > 0.0f) { i_this->mpEyeballModel->getModelData() ->getMaterialNodePointer(0) ->getTevColor(2) ->r = 255.0f - i_this->field_0x1178 * 195.0f; i_this->mpEyeballModel->getModelData() ->getMaterialNodePointer(0) ->getTevColor(2) ->g = 255.0f - i_this->field_0x1178 * 225.0f; i_this->mpEyeballModel->getModelData() ->getMaterialNodePointer(0) ->getTevColor(2) ->b = 255.0f - i_this->field_0x1178 * 255.0f; } mDoExt_modelUpdateDL(i_this->mpEyeballModel); } model->getModelData()->getMaterialNodePointer(2)->getShape()->hide(); } else { model->getModelData()->getMaterialNodePointer(2)->getShape()->show(); } if (i_this->mBlureRate > 2) { mDoGph_gInf_c::setBlureRate(i_this->mBlureRate); mDoGph_gInf_c::onBlure(); } else { mDoGph_gInf_c::offBlure(); } return 1; } /* 805B3ABC-805B3B0C 00063C 0050+00 1/1 0/0 0/0 .text s_fw_sub0__FPvPv */ static void* s_fw_sub0(void* i_actor, void* i_data) { if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_OBJ_FW) { static_cast(i_actor)->field_0x58c = 0.0f; } return NULL; } /* 805B3B0C-805B3C20 00068C 0114+00 1/1 0/0 0/0 .text s_fw_sub1__FPvPv */ static void* s_fw_sub1(void* i_actor, void* i_data) { fopAc_ac_c* data = (fopAc_ac_c*)i_data; if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_OBJ_FW) { obj_fw_class* fw = static_cast(i_actor); fw->field_0x567 = 1; s16 var_r30 = cM_atan2s(fw->current.pos.x - data->current.pos.x, fw->current.pos.z - data->current.pos.z); cMtx_YrotS(*calc_mtx, var_r30); cXyz sp4C(0.0f, 0.0f, TREG_F(7) + 1.0f); cXyz sp58; MtxPosition(&sp4C, &sp58); cLib_addCalc2(&fw->speed.x, sp58.x, 0.1f, 0.02f); cLib_addCalc2(&fw->speed.z, sp58.z, 0.1f, 0.02f); s16* angle_y = &fw->shape_angle.y; s16 temp_r0 = (s16)(fw->shape_angle.y - var_r30); if (temp_r0 > 0x4000 || temp_r0 < -0x4000) { var_r30 += 0x8000; } cLib_addCalcAngleS2(angle_y, var_r30, 0x20, 0x20); } return NULL; } /* 805BAD50-805BAD54 000008 0004+00 2/2 0/0 0/0 .bss None */ static u8 data_805BAD50; /* 805BAD60-805BAD70 000018 0010+00 5/5 0/0 0/0 .bss l_HIO */ static daB_BQ_HIO_c l_HIO; /* 805BAD70-805BAD74 000028 0004+00 2/2 0/0 0/0 .bss None */ static s8 data_805BAD70; /* 805B3C5C-805B3D60 0007DC 0104+00 1/1 0/0 0/0 .text s_fw_sub2__FPvPv */ static void* s_fw_sub2(void* i_actor, void* i_data) { fopAc_ac_c* data = (fopAc_ac_c*)i_data; if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_OBJ_FW) { obj_fw_class* fw = static_cast(i_actor); fw->field_0x567 = 2; s16 var_r30 = cM_atan2s(fw->current.pos.x - data->current.pos.x, fw->current.pos.z - data->current.pos.z); cMtx_YrotS(*calc_mtx, var_r30); cXyz sp4C(0.0f, 0.0f, TREG_F(8) + 20.0f); MtxPosition(&sp4C, &fw->speed); if (data_805BAD70 == 0) { fw->field_0x57e[0] = 5; } else if (data_805BAD70 == 1) { fw->field_0x57e[0] = 8; } else { fw->field_0x57e[0] = 15; } data_805BAD70++; } return NULL; } /* 805B3D60-805B3DAC 0008E0 004C+00 1/1 0/0 0/0 .text s_fw_del_sub__FPvPv */ static void* s_fw_del_sub(void* i_actor, void* i_data) { if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_OBJ_FW) { fopAcM_delete((fopAc_ac_c*)i_actor); } return NULL; } /* 805B3DAC-805B3E00 00092C 0054+00 2/2 0/0 0/0 .text s_bi_del_sub__FPvPv */ static void* s_bi_del_sub(void* i_actor, void* i_data) { if (fopAcM_IsActor(i_actor) && (fopAcM_GetName(i_actor) == PROC_E_BI || fopAcM_GetName(i_actor) == PROC_E_BI_LEAF)) { fopAcM_delete((fopAc_ac_c*)i_actor); } return NULL; } /* 805B3E00-805B4048 000980 0248+00 1/1 0/0 0/0 .text damage_check__FP10b_bq_class */ static void damage_check(b_bq_class* i_this) { dComIfGp_getPlayer(0); i_this->mCcCoStts.Move(); i_this->mCcStts.Move(); if (i_this->mAction != ACTION_DAMAGE) { if (i_this->mCcSph.ChkTgHit()) { i_this->mAtInfo.mpCollider = i_this->mCcSph.GetTgHitObj(); at_power_check(&i_this->mAtInfo); if (i_this->mAtInfo.mHitType == 2) { i_this->mAction = ACTION_DAMAGE; i_this->mMode = 0; i_this->field_0x6de = 30; i_this->mSound.startCreatureVoice(Z2SE_EN_BQ_V_BOMBDAMAGE, -1); i_this->field_0x11fc++; dComIfGs_onOneZoneSwitch(8, -1); return; } def_se_set(&i_this->mSound, i_this->mAtInfo.mpCollider, 0x2D, NULL); anm_init(i_this, ANM_NO_DAMAGE, 3.0f, J3DFrameCtrl::LOOP_ONCE_e, 1.0f); i_this->mSound.startCreatureVoice(Z2SE_EN_BQ_V_NODAMAGE, -1); i_this->field_0x6de = 10; } } else if (i_this->field_0x6de == 0 && i_this->mCcCoreSph.ChkTgHit()) { i_this->mAtInfo.mpCollider = i_this->mCcCoreSph.GetTgHitObj(); cc_at_check(i_this, &i_this->mAtInfo); OS_REPORT("//////////////B_BQ AP %d\n", i_this->mAtInfo.mAttackPower); OS_REPORT("//////////////B_BQ HP %d\n", i_this->health); if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_JUMP && daPy_getPlayerActorClass()->checkCutJumpCancelTurn()) { i_this->field_0x6de = 3; } else { i_this->field_0x6de = 6; } if (i_this->mAction == ACTION_DAMAGE) { if (i_this->health <= 0 || daPy_getPlayerActorClass()->getCutCount() >= 4) { i_this->mMode = 20; i_this->field_0x6de = 100; return; } i_this->mMode = 10; i_this->mSound.startCreatureVoice(Z2SE_EN_BQ_V_COREDAMAGE, -1); if (daPy_getPlayerActorClass()->getCutCount() != 0 && i_this->mTimers[0] < 30) { i_this->mTimers[0] = 30; } } } } /* 805B4048-805B44D4 000BC8 048C+00 1/1 0/0 0/0 .text b_bq_stay__FP10b_bq_class */ static s8 b_bq_stay(b_bq_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; int anm_frame = i_this->mpMorf->getFrame(); s8 rt = 0; switch (i_this->mMode) { case 0: anm_init(i_this, ANM_APPEAR, 1.0f, J3DFrameCtrl::LOOP_ONCE_e, 0.0f); i_this->mMode = 1; break; case 2: i_this->mTimers[0] = 150; int sw = (fopAcM_GetParam(a_this) >> 0x10) & 0xFF; dComIfGs_onSwitch(sw, fopAcM_GetRoomNo(a_this)); i_this->mMode = 3; OS_REPORT("//////////////B_BQ SYUTUGEN SET!!! !!\n"); dComIfGp_particle_set(0x82B0, &a_this->current.pos, NULL, NULL); dComIfGp_particle_set(0x82B1, &a_this->current.pos, NULL, NULL); mDoAud_seStart(Z2SE_EN_BQ_ABUKU, &a_this->current.pos, 0, 0); break; case 3: if (i_this->mTimers[0] == 100) { mDoAud_seStart(Z2SE_EN_BQ_JINARI, NULL, 0, 0); } if (i_this->mTimers[0] == 0) { anm_init(i_this, ANM_APPEAR, 1.0f, J3DFrameCtrl::LOOP_ONCE_e, 1.0f); i_this->mMode = 4; i_this->mDisableDraw = false; dComIfGp_particle_set(0x82B6, &a_this->current.pos, NULL, NULL); dComIfGp_particle_set(0x82B7, &a_this->current.pos, NULL, NULL); dComIfGp_particle_set(0x82B8, &a_this->current.pos, NULL, NULL); dComIfGp_particle_set(0x82B9, &a_this->current.pos, NULL, NULL); dComIfGp_particle_set(0x82F9, &a_this->current.pos, NULL, NULL); } break; case 4: rt = 1; if (i_this->mpMorf->checkFrame(45)) { i_this->mSound.startCreatureSound(Z2SE_EN_BQ_APPEAR, 0, -1); i_this->mSound.startCreatureVoice(Z2SE_EN_BQ_V_APPEAR, -1); } if (i_this->mpMorf->checkFrame(KREG_F(7) + 180)) { i_this->mSound.startCreatureVoice(Z2SE_EN_BQ_V_BARK, -1); } if (i_this->mpMorf->isStop()) { i_this->mAction = ACTION_WAIT; anm_init(i_this, ANM_WAIT_01, 1.0f, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f); i_this->mMode = 1; } break; } return rt; } /* 805B44D4-805B4614 001054 0140+00 1/1 0/0 0/0 .text b_bq_wait__FP10b_bq_class */ static void b_bq_wait(b_bq_class* i_this) { switch (i_this->mMode) { case 0: anm_init(i_this, ANM_WAIT_01, 10.0f, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f); i_this->mMode = 1; // fallthrough case 1: if (i_this->mTimers[0] == 0) { i_this->mTimers[0] = cM_rndF(80) + 50.0f; i_this->mSound.startCreatureVoice(Z2SE_EN_BQ_V_WAIT, -1); } #ifdef DEBUG if (mDoCPd_c::getTrigRight(PAD_1)) { i_this->mAction = ACTION_END; i_this->mMode = 0; i_this->mDemoMode = 50; } #endif break; } if (i_this->mAnmID == ANM_NO_DAMAGE && i_this->mpMorf->isStop()) { anm_init(i_this, ANM_WAIT_01, 10.0f, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f); } if (i_this->field_0x11fc != 0 && i_this->mTimers[2] == 1) { i_this->mAction = ACTION_ATTACK; i_this->mMode = 0; } } /* 805B4614-805B4D4C 001194 0738+00 2/1 0/0 0/0 .text b_bq_damage__FP10b_bq_class */ static void b_bq_damage(b_bq_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; s8 set_wait_action = false; switch (i_this->mMode) { case 0: anm_init(i_this, ANM_BOMB_DAMAGE, 3.0f, J3DFrameCtrl::LOOP_ONCE_e, 1.0f); i_this->mMode = 1; i_this->mTimers[0] = 1000; a_this->health = 50; i_this->field_0x1392 = 4; // fallthrough case 1: if (i_this->mpMorf->checkFrame(YREG_F(8) + 113)) { dComIfGp_getVibration().StartShock(YREG_S(2) + 5, 14, cXyz(0.0f, 1.0f, 0.0f)); dComIfGp_getVibration().StartShock(8, 31, cXyz(0.0f, 1.0f, 0.0f)); i_this->mSound.startCreatureSound(Z2SE_EN_BQ_DOWN, 0, -1); MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(YREG_S(1) + 50), *calc_mtx); cXyz sp2C(XREG_F(3) + 300.0f, XREG_F(4), XREG_F(5)); cXyz sp38; MtxPosition(&sp2C, &sp38); fopAcM_effSmokeSet1(&i_this->field_0x1220, &i_this->field_0x1224, &a_this->eyePos, NULL, TREG_F(11) + 5.0f, &a_this->tevStr, 1); if (i_this->mDamageBackCount >= 2) { i_this->onDownFlg(); a_this->health = 50; } Z2GetAudioMgr()->changeBgmStatus(2); } if (i_this->mpMorf->isStop()) { anm_init(i_this, ANM_DAMAGE_WAIT, 3.0f, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f); i_this->mMode = 2; i_this->mTimers[0] = l_HIO.mChanceTime; } break; case 2: if (i_this->mTimers[2] == 0) { i_this->mTimers[2] = cM_rndF(20) + 10.0f; i_this->mSound.startCreatureVoice(Z2SE_EN_BQ_V_DAMAGEWAIT, -1); } break; case 10: anm_init(i_this, ANM_CORE_DAMAGE, 2.0f, J3DFrameCtrl::LOOP_ONCE_e, 1.0f); i_this->mMode = 11; break; case 11: if (i_this->mpMorf->isStop()) { anm_init(i_this, ANM_DAMAGE_WAIT, JREG_F(15), J3DFrameCtrl::LOOP_REPEAT_e, 1.0f); i_this->mMode = 2; } break; case 20: i_this->mDamageBackCount++; if (i_this->mDamageBackCount >= 3 && (i_this->health <= 0 || daPy_getPlayerActorClass()->checkFastSwordCut())) { i_this->mAction = ACTION_END; i_this->mMode = 0; i_this->mDemoMode = 50; return; } anm_init(i_this, ANM_RETURN_01, 3.0f, J3DFrameCtrl::LOOP_ONCE_e, 1.0f); i_this->mMode = 21; i_this->mSound.startCreatureVoice(Z2SE_EN_BQ_V_DAMAGEBACK, -1); break; case 21: if (i_this->mpMorf->isStop()) { set_wait_action = true; } break; case 30: anm_init(i_this, ANM_RETURN_02, 5.0f, J3DFrameCtrl::LOOP_ONCE_e, 1.0f); i_this->mMode = 31; i_this->mSound.startCreatureVoice(Z2SE_EN_BQ_V_BACK, -1); break; case 31: if (i_this->mpMorf->isStop()) { set_wait_action = true; } break; case 40: i_this->mMode = 41; i_this->mTimers[0] = 45; // fallthrough case 41: if (i_this->mTimers[0] == 0) { i_this->mAction = ACTION_END; i_this->mMode = 0; i_this->mDemoMode = 50; return; } } if (i_this->mMode < 20 && i_this->mTimers[0] == 0) { i_this->mMode = 30; } if (set_wait_action) { i_this->mAction = ACTION_WAIT; i_this->mMode = 0; i_this->field_0x6fc = 10; i_this->field_0x6f6 = 0; i_this->mTimers[0] = 0; i_this->mTimers[2] = 80; Z2GetAudioMgr()->changeBgmStatus(1); } MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(YREG_S(0) + 53), mDoMtx_stack_c::get()); cXyz sp44; mDoMtx_stack_c::multVecZero(&sp44); cXyz sp50 = dComIfGp_getPlayer(0)->current.pos - sp44; s16 temp_r3 = cM_atan2s(sp50.x, sp50.z); cXyz sp5C; cMtx_YrotS(*calc_mtx, temp_r3); sp50.x = 0.0f; sp50.y = 0.0f; sp50.z = (BREG_F(12) + 60.0f) - 30.0f; MtxPosition(&sp50, &sp5C); sp5C += sp44; i_this->setDownPos(&sp5C); if (i_this->checkCutDownHitFlg()) { anm_init(i_this, ANM_TODOME, 2.0f, J3DFrameCtrl::LOOP_ONCE_e, 1.0f); i_this->mPlayTodomeBtk = true; i_this->mMode = 40; i_this->offCutDownHitFlg(); i_this->offDownFlg(); i_this->mSound.startCreatureVoice(Z2SE_EN_BQ_V_TODOME, -1); i_this->field_0x6de = 300; dComIfGp_particle_set(0x836C, &sp44, NULL, NULL); dComIfGp_particle_set(0x836D, &sp44, NULL, NULL); dComIfGp_particle_set(0x836E, &sp44, NULL, NULL); } } /* 805B4D4C-805B54E0 0018CC 0794+00 1/1 0/0 0/0 .text b_bq_attack__FP10b_bq_class */ static s8 b_bq_attack(b_bq_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; int anm_frame = i_this->mpMorf->getFrame(); s8 set_dokuhaki = false; s16 head_rot = cM_ssin(i_this->mTimers[0] * 1500) * (NREG_F(7) + 1200.0f); cXyz spCC; cXyz spD8; MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(JNT_HEAD), *calc_mtx); cMtx_ZrotM(*calc_mtx, head_rot); spCC.set(0.0f, 0.0f, 0.0f); MtxPosition(&spCC, &i_this->mMizuAtStartPos); spCC.set(XREG_F(3) + 2300.0f, XREG_F(4) + 500.0f, XREG_F(5)); MtxPosition(&spCC, &spD8); switch (i_this->mMode) { case 0: anm_init(i_this, ANM_ATTACK_A, 10.0f, J3DFrameCtrl::LOOP_ONCE_e, 1.0f); i_this->mMode = 1; if (cM_rndF(1.0f) < 0.5f) { i_this->field_0x138e = 0x500; i_this->field_0x1390 = -0x500; } else { i_this->field_0x138e = -0x500; i_this->field_0x1390 = 0x500; } break; case 1: if (anm_frame >= 54) { if (anm_frame == 54) { for (int i = 0; i < 16; i++) { i_this->field_0x12c8[i] = spD8; } i_this->mTimers[1] = 30; } set_dokuhaki = true; } if (i_this->mpMorf->isStop()) { anm_init(i_this, ANM_ATTACK_B, 2.0f, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f); i_this->mMode = 2; i_this->mTimers[0] = l_HIO.mWaterSprayTime; } break; case 2: set_dokuhaki = true; if (i_this->mTimers[0] == 0) { anm_init(i_this, ANM_ATTACK_B, 2.0f, J3DFrameCtrl::LOOP_ONCE_e, 1.0f); i_this->mMode = 3; } break; case 3: if (i_this->mpMorf->isStop()) { i_this->field_0x6de = 1; } break; } if (i_this->field_0x6de != 0) { i_this->mAction = ACTION_WAIT; i_this->mMode = 0; i_this->field_0x6fc = 10; i_this->field_0x138e = 0; } cXyz mizu_cc_center[4]; cXyz cc_center_offset(0.0f, 0.0f, 0.0f); if (set_dokuhaki) { i_this->mSound.startCreatureVoiceLevel(Z2SE_EN_BQ_V_DOKUHAKI, -1); for (int i = 0; i < 4; i++) { static u16 fireno[] = {0x82D6, 0x82D7, 0x82D8, 0x82DF}; i_this->mMizutamaEmtrIDs[i] = dComIfGp_particle_set( i_this->mMizutamaEmtrIDs[i], fireno[i], &a_this->current.pos, NULL, NULL); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->mMizutamaEmtrIDs[i]); if (emitter != NULL) { MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(JNT_HEAD), *calc_mtx); cMtx_ZrotM(*calc_mtx, head_rot); emitter->setGlobalRTMatrix(*calc_mtx); } } i_this->field_0x1388++; i_this->field_0x1388 &= 15; i_this->field_0x12c8[i_this->field_0x1388] = spD8; i_this->field_0x12bc = i_this->field_0x12c8[(i_this->field_0x1388 - (ZREG_S(4) + 8)) & 15]; i_this->field_0x684.startLevelSound(Z2SE_EN_BQ_DOKUHAKI, 0, -1); dBgS_LinChk lin_chk; lin_chk.Set(&i_this->mMizuAtStartPos, &i_this->field_0x12bc, a_this); if (dComIfG_Bgsp().LineCross(&lin_chk)) { spD8 = lin_chk.i_GetCross(); for (int i = 0; i < 2; i++) { static u16 fireno[] = {0x82D4, 0x82D5}; i_this->mSmokeEmtrIDs[i] = dComIfGp_particle_set(i_this->mSmokeEmtrIDs[i], fireno[i], &spD8, NULL, NULL); } i_this->field_0x1144 = spD8; if (i_this->field_0x1393 >= 10) { i_this->field_0x6a4.startLevelSound(Z2SE_EN_BQ_DOKUSMOKE, 0, -1); } else { i_this->field_0x1393++; } } spCC = i_this->mMizuAtStartPos - spD8; i_this->field_0x1138 = spD8 + ((spCC * (i_this->field_0x6c8 & 7)) * 0.05f); for (int i = 0; i < 4; i++) { mizu_cc_center[i] = spD8 + ((spCC * i) * 0.05f); } i_this->mColpatType = 5; } else { i_this->field_0x1393 = 0; cc_center_offset.x += -20000.0f; for (int i = 0; i < 4; i++) { mizu_cc_center[i].set(0.0f, 0.0f, 0.0f); } } for (int i = 0; i < 4; i++) { i_this->mCcMizuSph[i].SetC(mizu_cc_center[i] + cc_center_offset); i_this->mCcMizuSph[i].SetR(35.0f); dComIfG_Ccsp()->Set(&i_this->mCcMizuSph[i]); } return set_dokuhaki; } /* 805B54E0-805B559C 002060 00BC+00 1/1 0/0 0/0 .text b_bq_end__FP10b_bq_class */ static void b_bq_end(b_bq_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; switch (i_this->mMode) { case 0: i_this->mSound.startCreatureVoice(Z2SE_EN_BQ_V_DEAD, -1); anm_init(i_this, ANM_DEAD, 1.0f, J3DFrameCtrl::LOOP_ONCE_e, 1.0f); i_this->mpDeadBrk->setPlaySpeed(1.0f); i_this->mMode = 1; int sw = fopAcM_GetParam(a_this) >> 0x18; dComIfGs_onSwitch(sw, fopAcM_GetRoomNo(a_this)); // fallthrough case 1: break; } } /* 805B559C-805B58C8 00211C 032C+00 1/1 0/0 0/0 .text action__FP10b_bq_class */ static void action(b_bq_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; cXyz sp40; cXyz sp4C; i_this->mAngleToPlayer = fopAcM_searchPlayerAngleY(a_this); i_this->mDistToPlayer = fopAcM_searchPlayerDistance(a_this); damage_check(i_this); s8 set_head_angle = false; s8 boss_appeared = true; i_this->field_0x6fb = 0; s16 dokuhaki_set = false; s8 var_r27 = true; switch (i_this->mAction) { case ACTION_STAY: boss_appeared = b_bq_stay(i_this); i_this->field_0x6de = 10; break; case ACTION_WAIT: b_bq_wait(i_this); set_head_angle = true; break; case ACTION_ATTACK: dokuhaki_set = b_bq_attack(i_this); set_head_angle = true; i_this->field_0x6fb = 2; break; case ACTION_DAMAGE: b_bq_damage(i_this); set_head_angle = false; i_this->field_0x6fb = 1; break; case ACTION_END: b_bq_end(i_this); i_this->field_0x6fb = 1; if (i_this->field_0x1396) { var_r27 = false; } break; } if (dokuhaki_set && i_this->mTimers[1] == 0) { cLib_addCalcAngleS2(&i_this->field_0x138e, i_this->field_0x1390, 8, 0x30); } cLib_addCalcAngleS2(&i_this->field_0x138c, i_this->field_0x138e, 8, 200); s16 head_rot_target = 0; if (set_head_angle) { e_mb_class* monkey_bomb = (e_mb_class*)fopAcM_SearchByID(i_this->mMonkeyBombID); if (monkey_bomb != NULL && monkey_bomb->mAction == 2 && monkey_bomb->field_0x69c[2] == 0) { sp40 = monkey_bomb->current.pos - a_this->current.pos; head_rot_target = cM_atan2s(sp40.x, sp40.z) - a_this->shape_angle.y; head_rot_target /= 6; } else { head_rot_target = ((i_this->mAngleToPlayer + i_this->field_0x138c) - a_this->shape_angle.y) / 3; if (head_rot_target > 3500) { head_rot_target = 3500; } else if (head_rot_target < -3500) { head_rot_target = -3500; } } } cLib_addCalcAngleS2(&i_this->mHeadRot, head_rot_target, 8, i_this->field_0x6f6); cLib_addCalcAngleS2(&i_this->field_0x6f6, 0x100, 1, 1); if (boss_appeared && !i_this->mDisableDraw) { i_this->field_0x1180 = dComIfGp_particle_set(i_this->field_0x1180, 0x82B4, &a_this->current.pos, NULL, NULL); i_this->field_0x1184 = dComIfGp_particle_set(i_this->field_0x1184, 0x82B5, &a_this->current.pos, NULL, NULL); } if (var_r27) { daPy_getPlayerActorClass()->onBossRoomWait(); } } /* 805B58C8-805B6264 002448 099C+00 1/1 0/0 0/0 .text anm_se_set__FP10b_bq_class */ static void anm_se_set(b_bq_class* i_this) { int anm_frame = i_this->mpMorf->getFrame(); if (i_this->mAnmID == ANM_APPEAR) { if (anm_frame >= 175) { i_this->field_0x1188 = dComIfGp_particle_set(i_this->field_0x1188, 0x82BA, &i_this->current.pos, NULL, NULL); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->field_0x1188); if (emitter != NULL) { emitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(JNT_JAW_T3)); } } if (anm_frame >= 180) { i_this->field_0x118c = dComIfGp_particle_set(i_this->field_0x118c, 0x82B2, &i_this->current.pos, NULL, NULL); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->field_0x118c); if (emitter != NULL) { emitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(JNT_HEAD)); } i_this->field_0x1190 = dComIfGp_particle_set(i_this->field_0x1190, 0x82B3, &i_this->current.pos, NULL, NULL); emitter = dComIfGp_particle_getEmitter(i_this->field_0x1190); if (emitter != NULL) { emitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(JNT_HEAD)); } } } else if (i_this->mAnmID == ANM_RETURN_01) { i_this->field_0x1188 = dComIfGp_particle_set(i_this->field_0x1188, 0x8322, &i_this->current.pos, NULL, NULL); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->field_0x1188); if (emitter != NULL) { emitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(JNT_HEAD)); } i_this->field_0x118c = dComIfGp_particle_set(i_this->field_0x118c, 0x8323, &i_this->current.pos, NULL, NULL); emitter = dComIfGp_particle_getEmitter(i_this->field_0x118c); if (emitter != NULL) { emitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(JNT_HEAD)); } } else if (i_this->mAnmID == ANM_RETURN_02) { i_this->field_0x1188 = dComIfGp_particle_set(i_this->field_0x1188, 0x8324, &i_this->current.pos, NULL, NULL); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->field_0x1188); if (emitter != NULL) { emitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(JNT_HEAD)); } i_this->field_0x118c = dComIfGp_particle_set(i_this->field_0x118c, 0x8325, &i_this->current.pos, NULL, NULL); emitter = dComIfGp_particle_getEmitter(i_this->field_0x118c); if (emitter != NULL) { emitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(JNT_HEAD)); } } else if (i_this->mAnmID == ANM_BOMB_DAMAGE) { i_this->field_0x1188 = dComIfGp_particle_set(i_this->field_0x1188, 0x82FA, &i_this->current.pos, NULL, NULL); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->field_0x1188); if (emitter != NULL) { emitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(JNT_HEAD)); } i_this->field_0x118c = dComIfGp_particle_set(i_this->field_0x118c, 0x82FB, &i_this->current.pos, NULL, NULL); emitter = dComIfGp_particle_getEmitter(i_this->field_0x118c); if (emitter != NULL) { emitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(JNT_HEAD)); } i_this->field_0x1190 = dComIfGp_particle_set(i_this->field_0x1190, 0x82FC, &i_this->current.pos, NULL, NULL); emitter = dComIfGp_particle_getEmitter(i_this->field_0x1190); if (emitter != NULL) { emitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(JNT_HEAD)); } } else if (i_this->mAnmID == ANM_DEAD) { if (anm_frame == 1) { for (int i = 0; i < 19; i++) { static u16 g_e_i[] = {0x82FD, 0x82FE, 0x82FF, 0x8300, 0x8301, 0x8302, 0x8303, 0x8304, 0x8311, 0x8312, 0x8313, 0x8314, 0x8315, 0x8316, 0x8317, 0x8318, 0x8319, 0x831A, 0x831B}; dComIfGp_particle_set(g_e_i[i], &i_this->current.pos, &i_this->current.angle, NULL); } } for (int i = 0; i < 12; i++) { static u16 g_d_i[] = {0x8305, 0x830B, 0x8306, 0x830C, 0x8307, 0x830D, 0x8308, 0x830E, 0x8309, 0x830F, 0x830A, 0x8310}; i_this->field_0x11a8[i] = dComIfGp_particle_set(i_this->field_0x11a8[i], g_d_i[i], &i_this->current.pos, NULL, NULL); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->field_0x11a8[i]); if (emitter != NULL) { static int g_k_ji[] = {0x28, 0x28, 0x29, 0x29, 0x2A, 0x2A, 0x2B, 0x2B, 0x2C, 0x2C, 0x2D, 0x2D}; emitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(g_k_ji[i])); } } } else { f32 scale_target = 1.0f; if (i_this->mAnmID != ANM_WAIT_01) { scale_target = 0.0f; } cLib_addCalc2(&i_this->field_0x11d8, scale_target, 1.0f, 0.05f); for (int i = 0; i < 5; i++) { static u16 g_y_i[] = {0x8327, 0x8328, 0x8329, 0x832A, 0x8326}; i_this->field_0x1194[i] = dComIfGp_particle_set(i_this->field_0x1194[i], g_y_i[i], &i_this->current.pos, NULL, NULL); dComIfGp_particle_levelEmitterOnEventMove(i_this->field_0x1194[i]); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->field_0x1194[i]); if (emitter != NULL) { static int g_y_ji[] = {0x37, 0x38, 0x3B, 0x3D, 0x2F}; MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(g_y_ji[i]), *calc_mtx); MtxScale(i_this->field_0x11d8, i_this->field_0x11d8, i_this->field_0x11d8, 1); emitter->setGlobalRTMatrix(*calc_mtx); } } } if (i_this->mSetBossExplode) { i_this->mSetBossExplode = false; i_this->mSound.startCreatureSound(Z2SE_EN_BOSS_EXPLODE, 0, 0); for (int i = 0; i < 19; i++) { static u16 g_c_i[] = {0x83F0, 0x83F1, 0x83F2, 0x83F3, 0x83F4, 0x83F5, 0x83F6, 0x83F7, 0x83F8, 0x83F9, 0x83FA, 0x83FB, 0x83FC, 0x83FD, 0x83FE, 0x83FF, 0x8400, 0x8401, 0x8402}; JPABaseEmitter* emitter = dComIfGp_particle_set(g_c_i[i], &i_this->current.pos, NULL, NULL); if (emitter != NULL) { static int g_c_ji[] = {0x02, 0x30, 0x35, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x02, 0x30, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D}; MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(g_c_ji[i]), *calc_mtx); emitter->setGlobalRTMatrix(*calc_mtx); } } } } /* 805B6264-805B6348 002DE4 00E4+00 1/1 0/0 0/0 .text cam_3d_morf__FP10b_bq_classf */ static void cam_3d_morf(b_bq_class* i_this, f32 i_scale) { cLib_addCalc2(&i_this->mDemoCamCenter.x, i_this->mDemoCamCenterTarget.x, i_scale, i_this->field_0x1288.x * i_this->field_0x129c); cLib_addCalc2(&i_this->mDemoCamCenter.y, i_this->mDemoCamCenterTarget.y, i_scale, i_this->field_0x1288.y * i_this->field_0x129c); cLib_addCalc2(&i_this->mDemoCamCenter.z, i_this->mDemoCamCenterTarget.z, i_scale, i_this->field_0x1288.z * i_this->field_0x129c); cLib_addCalc2(&i_this->mDemoCamEye.x, i_this->mDemoCamEyeTarget.x, i_scale, i_this->field_0x127c.x * i_this->field_0x129c); cLib_addCalc2(&i_this->mDemoCamEye.y, i_this->mDemoCamEyeTarget.y, i_scale, i_this->field_0x127c.y * i_this->field_0x129c); cLib_addCalc2(&i_this->mDemoCamEye.z, i_this->mDemoCamEyeTarget.z, i_scale, i_this->field_0x127c.z * i_this->field_0x129c); } /* 805B6348-805B63EC 002EC8 00A4+00 2/2 0/0 0/0 .text fish_set__FP10b_bq_class */ static void fish_set(b_bq_class* i_this) { cXyz pos; for (int i = 0; i < 2; i++) { static struct { /* 0x0 */ u8 param; /* 0x4 */ f32 pos_x; /* 0x8 */ f32 pos_z; } lf_pos[] = { {0x14, -1000.0f, 100.0f}, {0x14, 1000.0f, 100.0f}, }; pos.x = lf_pos[i].pos_x; pos.y = -200.0f; pos.z = lf_pos[i].pos_z; fopAcM_create(PROC_NPC_LF, lf_pos[i].param, &pos, fopAcM_GetRoomNo(i_this), NULL, NULL, -1); } } /* 805B63EC-805B8A04 002F6C 2618+00 2/1 0/0 0/0 .text demo_camera__FP10b_bq_class */ static void demo_camera(b_bq_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); camera_class* camera0 = dComIfGp_getCamera(0); daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); fopAc_ac_c* tentacle = fopAcM_SearchByID(i_this->mTentacleIDs[i_this->field_0x123c]); e_mb_class* monkeybomb = (e_mb_class*)fopAcM_SearchByID(i_this->mMonkeyBombID); cXyz spF0; cXyz spFC; cXyz sp108; cXyz sp114; f32 var_f31 = 0.0f; s8 var_r28 = false; switch (i_this->mDemoMode) { case 1: i_this->mDemoModeTimer = 0; i_this->mDemoMode = 2; // fallthrough case 2: i_this->mDemoModeTimer++; if (i_this->mDemoModeTimer < 7) { return; } if (!a_this->eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(a_this, 2, 0xFFFF, 0); a_this->eventInfo.onCondition(2); return; } camera->mCamera.Stop(); i_this->mDemoMode = 3; i_this->mDemoModeTimer = 0; i_this->mDemoCamFovy = 55.0f; camera->mCamera.SetTrimSize(3); daPy_getPlayerActorClass()->changeOriginalDemo(); daPy_getPlayerActorClass()->changeDemoMode(12, 0, 0, 0); Z2GetAudioMgr()->bgmStop(30, 0); dComIfGs_onOneZoneSwitch(6, -1); // fallthrough case 3: if (dComIfG_play_c::getLayerNo(0) == 4) { i_this->mDemoModeTimer = 290; } if (i_this->mDemoModeTimer == 0) { i_this->field_0x1298 = ZREG_F(0) + 1000.0f; i_this->mDemoCamEye.x = tentacle->current.pos.x; i_this->mDemoCamEye.y = tentacle->current.pos.y + ZREG_F(2); i_this->mDemoCamEye.z = tentacle->current.pos.z + i_this->field_0x1298; i_this->mDemoCamCenter.x = tentacle->current.pos.x; i_this->mDemoCamCenter.y = tentacle->current.pos.y; i_this->mDemoCamCenter.z = tentacle->current.pos.z; } else { spFC = tentacle->current.pos; spFC.z += i_this->field_0x1298; cLib_addCalc2(&i_this->field_0x1298, 1500.0f, 0.05f, 5.0f); if (spFC.y < 300.0f) { spFC = i_this->mDemoCamEye; spFC.y = 300.0f; } cLib_addCalc2(&i_this->mDemoCamEye.x, spFC.x, 0.1f, 20.0f); cLib_addCalc2(&i_this->mDemoCamEye.y, spFC.y, 0.1f, 20.0f); cLib_addCalc2(&i_this->mDemoCamEye.z, spFC.z, 0.1f, 20.0f); spFC = tentacle->current.pos; if (spFC.y < 0.0f) { spFC = i_this->mDemoCamCenter; spFC.y = 0.0f; } cLib_addCalc2(&i_this->mDemoCamCenter.x, spFC.x, 0.1f, 50.0f); cLib_addCalc2(&i_this->mDemoCamCenter.y, spFC.y, 0.1f, 50.0f); cLib_addCalc2(&i_this->mDemoCamCenter.z, spFC.z, 0.1f, 50.0f); } if (i_this->mDemoModeTimer == 205) { i_this->mColpatType = 2; } var_r28 = 1; if (i_this->mDemoModeTimer != 290) { break; } i_this->mDemoMode = 4; i_this->mDemoModeTimer = 0; i_this->mDemoCamFovy = 30.0f; i_this->field_0x129c = 0.0f; i_this->mMode++; i_this->mDemoCamEyeTarget.x = KREG_F(0) + 400.0f; i_this->mDemoCamEyeTarget.y = KREG_F(1) + 1000.0f; i_this->mDemoCamEyeTarget.z = KREG_F(2) + 2200.0f; i_this->mDemoCamCenter = a_this->current.pos; spFC.set(173.0f, 0.0f, 1695.0f); daPy_getPlayerActorClass()->setPlayerPosAndAngle(&spFC, 0x8000, 0); // fallthrough case 4: if (i_this->mDemoModeTimer == 150) { fpcM_Search(s_bi_del_sub, i_this); } if (i_this->mDemoModeTimer == 270) { i_this->field_0x1394 = 20; } i_this->mDemoCamEye = a_this->current.pos; i_this->mDemoCamEye += i_this->mDemoCamEyeTarget; if (i_this->mDemoModeTimer >= 320) { cLib_addCalc2(&i_this->mDemoCamCenter.x, 300.0f - KREG_F(11), 0.1f, 13.0f); } if (i_this->mDemoModeTimer >= KREG_S(7) + 80) { cLib_addCalc2(&i_this->mDemoCamEyeTarget.x, KREG_F(15) + -100.0f, 0.05f, i_this->field_0x12a0 * 750.0f); cLib_addCalc2(&i_this->mDemoCamEyeTarget.y, KREG_F(16) + 100.0f, 0.05f, i_this->field_0x12a0 * 1350.0f); cLib_addCalc2(&i_this->field_0x12a0, 0.01f, 1.0f, 0.0005f); if (i_this->mDemoModeTimer >= 195) { cLib_addCalc2(&i_this->mDemoCamCenter.y, a_this->eyePos.y + 200.0f + NREG_F(8), 0.1f, 40.0f); } if (i_this->mDemoModeTimer > 200 && i_this->mDemoModeTimer < 280) { i_this->mBlureRateTarget = 180; } else { i_this->mBlureRateTarget = 0; } } if (i_this->mDemoModeTimer >= 20) { if (i_this->mDemoModeTimer == 20) { dComIfGp_getVibration().StartQuake(2, 1, cXyz(0.0f, 1.0f, 0.0f)); } if (i_this->mDemoModeTimer < 190) { fpcM_Search(s_fw_sub1, i_this); cLib_addCalc2(&i_this->field_0x12a8, 10.0f, 1.0f, 1.05f); } else if (i_this->mDemoModeTimer == 190) { dComIfGp_getVibration().StopQuake(31); i_this->field_0x12a8 = 30.0f; dComIfGp_getVibration().StartQuake(8, 1, cXyz(0.0f, 1.0f, 0.0f)); data_805BAD70 = 0; fpcM_Search(s_fw_sub2, i_this); i_this->field_0x6f9 = 4; daPy_getPlayerActorClass()->changeDemoMode(0x17, 1, 2, 0); i_this->mColpatType = 3; } if (i_this->mDemoModeTimer == 210) { dComIfGp_getVibration().StartQuake(6, 1, cXyz(0.0f, 1.0f, 0.0f)); } if (i_this->mDemoModeTimer == 230) { dComIfGp_getVibration().StartQuake(4, 1, cXyz(0.0f, 1.0f, 0.0f)); } if (i_this->mDemoModeTimer == 250) { dComIfGp_getVibration().StartQuake(2, 1, cXyz(0.0f, 1.0f, 0.0f)); } if (i_this->mDemoModeTimer == 260) { dComIfGp_getVibration().StopQuake(31); } if (i_this->mDemoModeTimer == 340) { dComIfGp_getVibration().StartQuake(3, 1, cXyz(0.0f, 1.0f, 0.0f)); } if (i_this->mDemoModeTimer == 390) { dComIfGp_getVibration().StopQuake(31); } cLib_addCalc2(&i_this->mDemoCamFovy, 55.0f, 0.05f, i_this->field_0x129c); cLib_addCalc2(&i_this->field_0x129c, 0.1f, 1.0f, 0.005f); } else { fpcM_Search(s_fw_sub0, i_this); } if (i_this->mDemoModeTimer == KREG_S(4) + 340) { player->changeDemoMode(0x22, 0, 0, 0); } if (i_this->mDemoModeTimer == 430) { i_this->mDemoMode = 100; Z2GetAudioMgr()->bgmStart(Z2BGM_BOSSBABA_2, 0, 0); i_this->field_0x1392 = 3; } break; case 10: if (!a_this->eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(a_this, 2, 0xFFFF, 0); a_this->eventInfo.onCondition(2); return; } camera->mCamera.Stop(); i_this->mDemoMode = 11; i_this->mDemoModeTimer = 0; i_this->mDemoCamFovy = 50.0f; camera->mCamera.SetTrimSize(3); daPy_getPlayerActorClass()->changeOriginalDemo(); i_this->mDemoCamEye = camera0->lookat.eye; i_this->mDemoCamCenter = camera0->lookat.center; dComIfGp_getEvent().startCheckSkipEdge(i_this); // fallthrough case 11: if (i_this->mDemoModeTimer == VREG_S(0) + 8) { daPy_getPlayerActorClass()->changeDemoMode(0x19, 0, 0, 0); } if (i_this->mDemoModeTimer < 50) { break; } if (i_this->mDemoModeTimer == 50) { i_this->mDemoCamFovy = 55.0f; i_this->mDemoCamCenter.set(58.0f, 355.0f, 1800.0f); i_this->field_0x1264 = i_this->mDemoCamCenter; i_this->mDemoCamEye.set(240.0f, 274.0f, 2075.0f); i_this->mDemoCamCenterTarget.set(411.0f, 355.0f, 1793.0f); i_this->mDemoCamEyeTarget.set(240.0f, 274.0f, 2075.0f); i_this->field_0x1288.x = std::fabsf(i_this->mDemoCamCenterTarget.x - i_this->mDemoCamCenter.x); i_this->field_0x1288.y = std::fabsf(i_this->mDemoCamCenterTarget.y - i_this->mDemoCamCenter.y); i_this->field_0x1288.z = std::fabsf(i_this->mDemoCamCenterTarget.z - i_this->mDemoCamCenter.z); } spFC.set(0.0f, 0.0f, 1700.0f); daPy_getPlayerActorClass()->setPlayerPosAndAngle(&spFC, 0x8000, 0); if (i_this->mDemoModeTimer > 70) { cam_3d_morf(i_this, 0.1f); cLib_addCalc2(&i_this->field_0x129c, 0.005f, 1.0f, 0.00015f); spF0 = i_this->mDemoCamCenterTarget - i_this->field_0x1264; f32 temp_f31 = spF0.abs(); spF0 = i_this->mDemoCamCenterTarget - i_this->mDemoCamCenter; f32 temp_f30 = spF0.abs(); var_f31 = temp_f31 * (BREG_F(19) + 0.1f) * cM_ssin((temp_f30 / temp_f31) * (f32)0x8000); } if (i_this->mDemoModeTimer != VREG_S(8) + 320) { break; } i_this->mDemoCamCenter.set(1444.0f, 121.0f, 1783.0f); i_this->mDemoCamEye.set(1685.0f, 95.0f, 2021.0f); i_this->mDemoCamCenterTarget.set(76.0f, 204.0f, 1782.0f); i_this->mDemoCamEyeTarget.set(-41.0f, 261.0f, 2095.0f); i_this->field_0x127c.x = std::fabsf(i_this->mDemoCamEyeTarget.x - i_this->mDemoCamEye.x); i_this->field_0x127c.y = std::fabsf(i_this->mDemoCamEyeTarget.y - i_this->mDemoCamEye.y); i_this->field_0x127c.z = std::fabsf(i_this->mDemoCamEyeTarget.z - i_this->mDemoCamEye.z); i_this->field_0x1288.x = std::fabsf(i_this->mDemoCamCenterTarget.x - i_this->mDemoCamCenter.x); i_this->field_0x1288.y = std::fabsf(i_this->mDemoCamCenterTarget.y - i_this->mDemoCamCenter.y); i_this->field_0x1288.z = std::fabsf(i_this->mDemoCamCenterTarget.z - i_this->mDemoCamCenter.z); i_this->field_0x129c = 0.0f; i_this->mDemoMode = 12; i_this->mDemoModeTimer = 0; // fallthrough case 12: if (i_this->mDemoModeTimer == 260) { i_this->field_0x6f9 = 2; } cam_3d_morf(i_this, 0.1f); cLib_addCalc2(&i_this->field_0x129c, 0.005f, 1.0f, 0.00015f); if (i_this->mDemoModeTimer == VREG_S(2) + 340) { i_this->mDemoCamCenter = tentacle->current.pos; i_this->mDemoCamCenter.y = 0.0f; i_this->mDemoCamEye.set(1394.0f, 313.0f, -300.0f); i_this->mDemoMode = 13; i_this->mDemoModeTimer = 0; i_this->field_0x129c = 0.0f; mDoAud_seStart(Z2SE_EN_BH_JINARI, NULL, 0, 0); Z2GetAudioMgr()->subBgmStart(Z2BGM_BOSSBABA_0); } break; case 13: if (i_this->mDemoModeTimer == 2) { dComIfGp_getVibration().StartQuake(1, 1, cXyz(0.0f, 1.0f, 0.0f)); } if (i_this->mDemoModeTimer == 30) { dComIfGp_getVibration().StartQuake(1, 1, cXyz(0.0f, 1.0f, 0.0f)); } if (i_this->mDemoModeTimer == 60) { dComIfGp_getVibration().StartQuake(2, 1, cXyz(0.0f, 1.0f, 0.0f)); } if (i_this->mDemoModeTimer == 111) { dComIfGp_getVibration().StopQuake(31); } if (i_this->mDemoModeTimer == 113) { dComIfGp_getVibration().StartQuake(6, 1, cXyz(0.0f, 1.0f, 0.0f)); } if (i_this->mDemoModeTimer == 150) { dComIfGp_getVibration().StopQuake(31); } if (i_this->mDemoModeTimer == VREG_S(2) + 100) { i_this->field_0x6f9 = 2; } if (i_this->mDemoModeTimer == VREG_S(4) + 53) { i_this->mColpatType = 15; } if (i_this->mDemoModeTimer >= VREG_S(3) + 110) { cLib_addCalc2(&i_this->mDemoCamCenter.x, tentacle->current.pos.x, 0.1f, VREG_S(5) + 20.0f); if (tentacle->current.pos.y + 100.0f > 0.0f) { cLib_addCalc2(&i_this->mDemoCamCenter.y, tentacle->current.pos.y + 100.0f, 0.8f, VREG_S(5) + 60.0f); } cLib_addCalc2(&i_this->mDemoCamCenter.z, tentacle->current.pos.z, 0.1f, VREG_S(5) + 20.0f); if (i_this->mDemoModeTimer == VREG_S(4) + 113) { i_this->field_0x6f9 = 2; i_this->mColpatType = 1; } if (i_this->mDemoModeTimer >= VREG_S(5) + 150) { cLib_addCalc2(&i_this->mDemoCamEye.y, VREG_S(6) + 1413.0f, 0.1f, i_this->field_0x129c * (VREG_S(7) + 40.0f)); cLib_addCalc2(&i_this->field_0x129c, 1.0f, 1.0f, 0.02f); if (i_this->mDemoModeTimer == VREG_S(6) + 200) { daPy_getPlayerActorClass()->changeDemoMode(0x17, 1, 2, 0); } } } if (i_this->mDemoModeTimer != VREG_S(7) + 280) { break; } i_this->mDemoCamCenter.set(0.0f, 430.0f, 524.0f); i_this->mDemoCamEye.set(0.0f, 240.0f, 1440.0f); i_this->mDemoCamCenterTarget.set(0.0f, 278.0f, 1252.0f); i_this->mDemoCamEyeTarget.set(0.0f, 86.0f, 2167.0f); i_this->field_0x127c.x = std::fabsf(i_this->mDemoCamEyeTarget.x - i_this->mDemoCamEye.x); i_this->field_0x127c.y = std::fabsf(i_this->mDemoCamEyeTarget.y - i_this->mDemoCamEye.y); i_this->field_0x127c.z = std::fabsf(i_this->mDemoCamEyeTarget.z - i_this->mDemoCamEye.z); i_this->field_0x1288.x = std::fabsf(i_this->mDemoCamCenterTarget.x - i_this->mDemoCamCenter.x); i_this->field_0x1288.y = std::fabsf(i_this->mDemoCamCenterTarget.y - i_this->mDemoCamCenter.y); i_this->field_0x1288.z = std::fabsf(i_this->mDemoCamCenterTarget.z - i_this->mDemoCamCenter.z); i_this->field_0x129c = 0.0f; i_this->mDemoMode = 14; i_this->mDemoModeTimer = 0; // fallthrough case 14: cam_3d_morf(i_this, 0.2f); cLib_addCalc2(&i_this->field_0x129c, 0.02f, 1.0f, 0.001f); if (i_this->mDemoModeTimer == 20) { fopMsgM_messageSetDemo(1151); // Twilit Parasite DIABABA } if (i_this->mDemoModeTimer == 130) { i_this->mDemoMode = 100; i_this->field_0x6f9 = 2; Z2GetAudioMgr()->bgmStart(Z2BGM_BOSSBABA_1, 0, 0); i_this->field_0x1392 = 2; } break; case 20: i_this->mDemoModeTimer = 0; i_this->mDemoMode = 21; // fallthrough case 21: i_this->mDemoModeTimer++; if (i_this->mDemoModeTimer < 7) { return; } if (!a_this->eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(a_this, 2, 0xFFFF, 0); a_this->eventInfo.onCondition(2); return; } camera->mCamera.Stop(); i_this->mDemoMode = 22; i_this->mDemoModeTimer = 0; i_this->mDemoCamFovy = 55.0f; camera->mCamera.SetTrimSize(3); daPy_getPlayerActorClass()->changeOriginalDemo(); dComIfGs_onOneZoneSwitch(5, -1); // fallthrough case 22: if (i_this->mDemoModeTimer == 0) { i_this->field_0x1298 = ZREG_F(0) + 1000.0f; i_this->mDemoCamEye.x = tentacle->current.pos.x; i_this->mDemoCamEye.y = tentacle->current.pos.y + ZREG_F(2); i_this->mDemoCamEye.z = tentacle->current.pos.z + i_this->field_0x1298; i_this->mDemoCamCenter.x = tentacle->current.pos.x; i_this->mDemoCamCenter.y = tentacle->current.pos.y + ZREG_F(1); i_this->mDemoCamCenter.z = tentacle->current.pos.z; } else { spFC = tentacle->current.pos; spFC.z += i_this->field_0x1298; cLib_addCalc2(&i_this->field_0x1298, 1500.0f, 0.05f, 5.0f); if (spFC.y < 300.0f) { spFC = i_this->mDemoCamEye; spFC.y = 300.0f; } cLib_addCalc2(&i_this->mDemoCamEye.x, spFC.x, 0.1f, 20.0f); cLib_addCalc2(&i_this->mDemoCamEye.y, spFC.y, 0.1f, 20.0f); cLib_addCalc2(&i_this->mDemoCamEye.z, spFC.z, 0.1f, 20.0f); spFC = tentacle->current.pos; if (spFC.y < 0.0f) { spFC = i_this->mDemoCamCenter; spFC.y = 0.0f; } cLib_addCalc2(&i_this->mDemoCamCenter.x, spFC.x, 0.1f, 50.0f); cLib_addCalc2(&i_this->mDemoCamCenter.y, spFC.y, 0.1f, 50.0f); cLib_addCalc2(&i_this->mDemoCamCenter.z, spFC.z, 0.1f, 50.0f); } var_r28 = true; if (i_this->mDemoModeTimer == 230) { i_this->mDemoMode = 100; } break; case 30: if (!monkeybomb->eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(monkeybomb, 2, 0xFFFF, 0); monkeybomb->eventInfo.onCondition(2); return; } camera->mCamera.Stop(); i_this->mDemoMode = 31; i_this->mDemoModeTimer = 0; i_this->mDemoCamFovy = 55.0f; camera->mCamera.SetTrimSize(3); daPy_getPlayerActorClass()->changeOriginalDemo(); daPy_getPlayerActorClass()->changeDemoMode(1, 1, 0, 0); Z2GetAudioMgr()->changeBgmStatus(1); dComIfGs_onOneZoneSwitch(7, -1); // fallthrough case 31: i_this->mDemoMode = 0x20; // fallthrough case 32: case 33: spFC.set(0.0f, 0.0f, 2200.0f); daPy_getPlayerActorClass()->setPlayerPosAndAngle(&spFC, 0x8000, 0); if (i_this->mDemoModeTimer == 0) { i_this->mDemoCamCenter = monkeybomb->current.pos; } i_this->mDemoCamEye.x = BREG_F(10) + -900.0f; i_this->mDemoCamEye.y = BREG_F(11) + 1000.0f; i_this->mDemoCamEye.z = BREG_F(12) + 1471.0f; MTXCopy(monkeybomb->mpMorf->getModel()->getAnmMtx(0x1C), mDoMtx_stack_c::get()); mDoMtx_stack_c::transM(JREG_F(17) + 60.0f, JREG_F(18) + -35.0f, JREG_F(19) + 15.0f); mDoMtx_stack_c::multVecZero(&sp114); cLib_addCalc2(&i_this->mDemoCamCenter.x, sp114.x, BREG_F(14) + 0.6f, 100.0f); cLib_addCalc2(&i_this->mDemoCamCenter.y, sp114.y + 50.0f + BREG_F(13), BREG_F(14) + 0.6f, 100.0f); cLib_addCalc2(&i_this->mDemoCamCenter.z, sp114.z, BREG_F(14) + 0.6f, 100.0f); if (i_this->mDemoMode != 33) { break; } i_this->mDemoMode = 34; i_this->mDemoCamCenter.set(-766.0f, 423.0f, 1593.0f); i_this->mDemoCamEye.set(71.0f, 114.0f, 2304.0f); i_this->mDemoCamCenterTarget.set(-2243.0f, 1340.0f, 977.0f); i_this->mDemoCamEyeTarget.set(-1226.0f, 980.0f, 1350.0f); i_this->field_0x127c.x = std::fabsf(i_this->mDemoCamEyeTarget.x - i_this->mDemoCamEye.x); i_this->field_0x127c.y = std::fabsf(i_this->mDemoCamEyeTarget.y - i_this->mDemoCamEye.y); i_this->field_0x127c.z = std::fabsf(i_this->mDemoCamEyeTarget.z - i_this->mDemoCamEye.z); i_this->field_0x1288.x = std::fabsf(i_this->mDemoCamCenterTarget.x - i_this->mDemoCamCenter.x); i_this->field_0x1288.y = std::fabsf(i_this->mDemoCamCenterTarget.y - i_this->mDemoCamCenter.y); i_this->field_0x1288.z = std::fabsf(i_this->mDemoCamCenterTarget.z - i_this->mDemoCamCenter.z); i_this->field_0x129c = 0.0f; i_this->mDemoMode = 34; i_this->mDemoModeTimer = 0; // fallthrough case 34: if (i_this->mDemoModeTimer > 40) { cam_3d_morf(i_this, 0.2f); cLib_addCalc2(&i_this->field_0x129c, 0.1f, 1.0f, 0.005f); if (i_this->mDemoModeTimer > JREG_S(7) + 133) { cLib_addCalc2(&i_this->mDemoCamFovy, 30.0f, 0.5f, 4.0f); } } if (i_this->mDemoModeTimer != 210) { break; } i_this->mDemoCamEye.set(-560.0f, 717.0f, 1948.0f); i_this->mDemoCamCenter = monkeybomb->current.pos; i_this->mDemoCamCenter.y += JREG_F(12) + 200.0f; i_this->mDemoMode = 35; i_this->mDemoModeTimer = 0; i_this->mDemoCamFovy = 55.0f; monkeybomb->mMode++; // fallthrough case 35: MTXCopy(monkeybomb->mpMorf->getModel()->getAnmMtx(0), mDoMtx_stack_c::get()); mDoMtx_stack_c::multVecZero(&sp114); cLib_addCalc2(&i_this->mDemoCamCenter.x, sp114.x, BREG_F(14) + 0.6f, 100.0f); cLib_addCalc2(&i_this->mDemoCamCenter.y, sp114.y + 200.0f + BREG_F(12), BREG_F(14) + 0.6f, 100.0f); cLib_addCalc2(&i_this->mDemoCamCenter.z, sp114.z, BREG_F(14) + 0.6f, 100.0f); if (i_this->mDemoModeTimer == 50) { i_this->mDemoMode = 100; } break; case 50: if (!a_this->eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(a_this, 2, 0xFFFF, 0); a_this->eventInfo.onCondition(2); return; } camera->mCamera.Stop(); i_this->mDemoMode = 51; i_this->mDemoModeTimer = 0; i_this->mDemoCamFovy = 55.0f; camera->mCamera.SetTrimSize(3); daPy_getPlayerActorClass()->changeOriginalDemo(); i_this->mDemoCamCenter = a_this->eyePos; i_this->mDemoCamEye.set(95.0f, 50.0f, 2800.0f); i_this->mDemoCamEyeTarget.set(72.0f, 52.0f, 2153.0f); i_this->field_0x127c.x = std::fabsf(i_this->mDemoCamEyeTarget.x - i_this->mDemoCamEye.x); i_this->field_0x127c.y = std::fabsf(i_this->mDemoCamEyeTarget.y - i_this->mDemoCamEye.y); i_this->field_0x127c.z = std::fabsf(i_this->mDemoCamEyeTarget.z - i_this->mDemoCamEye.z); i_this->field_0x1288.set(0.0f, 0.0f, 0.0f); i_this->field_0x129c = 0.0f; Z2GetAudioMgr()->bgmStop(30, 0); Z2GetAudioMgr()->bgmStreamPrepare(0x2000016); Z2GetAudioMgr()->bgmStreamPlay(); dComIfGs_BossLife_public_Set(0); e_mb_class* monkey_bomb = (e_mb_class*)fopAcM_SearchByID(i_this->mMonkeyBombID); monkey_bomb->mAction = 5; // fallthrough case 51: if (i_this->mDemoModeTimer == 24 || i_this->mDemoModeTimer == 64 || i_this->mDemoModeTimer == 95 || i_this->mDemoModeTimer == 122) { dComIfGp_getVibration().StartShock(4, 1, cXyz(0.0f, 1.0f, 0.0f)); } if (i_this->mDemoModeTimer == 140) { dComIfGp_getVibration().StartQuake(2, 1, cXyz(0.0f, 1.0f, 0.0f)); } if (i_this->mDemoModeTimer == 200) { dComIfGp_getVibration().StopQuake(31); } if (i_this->mDemoModeTimer < 200) { i_this->mBlureRateTarget = 180; } else { i_this->mBlureRateTarget = 0; } if (i_this->mDemoModeTimer == 260) { i_this->mColpatType = 4; } if (i_this->mDemoModeTimer >= TREG_S(5) + 380) { cam_3d_morf(i_this, 0.1f); cLib_addCalc2(&i_this->field_0x129c, 0.05f, 1.0f, 0.001f); } if (i_this->mDemoModeTimer == TREG_S(6) + 430) { i_this->field_0x5c8 = 1; i_this->field_0x5cc = a_this->eyePos; } if (i_this->mDemoModeTimer < 350) { spFC.set(BREG_F(5) + -150.0f, 0.0f, BREG_F(6) + 2288.0f); } else { spFC.set(BREG_F(5) + -30.0f, 0.0f, BREG_F(6) + 1938.0f); } daPy_getPlayerActorClass()->setPlayerPosAndAngle(&spFC, 0x8000, 0); if (i_this->field_0x5c8 != 0) { i_this->field_0x5cc.y += i_this->field_0x5d8; i_this->field_0x5d8 -= 5.0f; if (i_this->field_0x5cc.y <= BREG_F(10) + 25.0f) { i_this->field_0x5cc.y = BREG_F(10) + 25.0f; if (i_this->field_0x5d8 < -30.0f) { fopAcM_effSmokeSet1(&i_this->field_0x1220, &i_this->field_0x1224, &i_this->field_0x5cc, NULL, TREG_F(11) + 1.0f, &a_this->tevStr, 1); mDoAud_seStart(Z2SE_EN_BQ_EYE_LAND, NULL, 0, 0); i_this->field_0x5d8 = 15.0f; dComIfGp_getVibration().StartShock(6, 31, cXyz(0.0f, 1.0f, 0.0f)); } else { i_this->field_0x5d8 = 0.0f; } } else if (i_this->mDemoModeTimer >= TREG_S(6) + 435) { i_this->field_0x5cc.z += BREG_F(9) + 6.0f; } cLib_addCalcAngleS2(&i_this->field_0x5dc, -0x4000, 8, 0x300); MtxTrans(i_this->field_0x5cc.x, i_this->field_0x5cc.y, i_this->field_0x5cc.z, 0); cMtx_YrotM(*calc_mtx, a_this->shape_angle.y); cMtx_XrotM(*calc_mtx, i_this->field_0x5dc); i_this->mpEyeballModel->setBaseTRMtx(*calc_mtx); cLib_addCalc2(&i_this->mDemoCamCenter.x, i_this->field_0x5cc.x, 0.1f, 2.0f); cLib_addCalc2(&i_this->mDemoCamCenter.z, i_this->field_0x5cc.z, 0.1f, 2.0f); cLib_addCalc2(&i_this->mDemoCamCenter.y, i_this->field_0x5cc.y + 30.0f + BREG_F(14), BREG_F(19) + 0.3f, BREG_F(17) + 100.0f); if (i_this->mDemoModeTimer == 535) { i_this->field_0x5c8 = 2; for (int i = 0; i < 7; i++) { static u16 g_b_i[] = {0x831C, 0x831D, 0x831E, 0x831F, 0x8320, 0x8321, 0x8369}; dComIfGp_particle_set(g_b_i[i], &i_this->field_0x5cc, NULL, NULL); } mDoAud_seStart(Z2SE_EN_BQ_EYE_EXPLODE, &i_this->field_0x5cc, 0, 0); dComIfGp_getVibration().StartShock(5, 1, cXyz(0.0f, 1.0f, 0.0f)); cXyz sp120(1.0f, 1.0f, 1.0f); fopAcM_createItemForBoss(&i_this->field_0x5cc, fpcNm_ITEM_UTAWA_HEART, fopAcM_GetRoomNo(a_this), &a_this->shape_angle, &sp120, 0.0f, 0.0f, -1); fopAcM_delete(fopAcM_SearchByID(i_this->mTentacleIDs[0])); fopAcM_delete(fopAcM_SearchByID(i_this->mTentacleIDs[1])); } if (i_this->mDemoModeTimer == 535) { i_this->mDemoMode = 52; i_this->field_0x129c = 0.0f; i_this->mDemoModeTimer = 0; i_this->mDemoCamFovy = 55.0f; } if (i_this->mDemoModeTimer >= 480) { cLib_addCalc2(&i_this->field_0x1178, 1.0f, 1.0f, 0.03f); } } else { sp114 = a_this->eyePos; sp114.y += BREG_F(14) + 40.0f; if (sp114.y > BREG_F(12) + 1800.0f) { sp114.y = BREG_F(12) + 1800.0f; } else if (sp114.y < BREG_F(13) + 700.0f) { sp114.y = BREG_F(13) + 700.0f; } cLib_addCalc2(&i_this->mDemoCamCenter.x, sp114.x, 0.1f, BREG_F(17) + 30.0f); cLib_addCalc2(&i_this->mDemoCamCenter.y, sp114.y, 0.1f, BREG_F(17) + 30.0f); cLib_addCalc2(&i_this->mDemoCamCenter.z, sp114.z, 0.1f, BREG_F(17) + 30.0f); } break; case 52: if (i_this->mDemoModeTimer == 30) { i_this->field_0x1396 = 1; player->changeDemoMode(30, 1, 0, 0); } if (i_this->mDemoModeTimer == 140) { daPy_getPlayerActorClass()->changeDemoMode(1, 0, 0, 0); i_this->mColpatType = 7; i_this->mDemoCamCenter.set(92.0f, 500.0f, 2654.0f); i_this->mDemoCamEye.set(110.0f, 560.0f, 3090.0f); i_this->mDemoCamCenterTarget.set(939.0f, 434.0f, 2362.0f); i_this->mDemoCamEyeTarget.set(1214.0f, 350.0f, 2696.0f); i_this->field_0x127c.x = std::fabsf(i_this->mDemoCamEyeTarget.x - i_this->mDemoCamEye.x); i_this->field_0x127c.y = std::fabsf(i_this->mDemoCamEyeTarget.y - i_this->mDemoCamEye.y); i_this->field_0x127c.z = std::fabsf(i_this->mDemoCamEyeTarget.z - i_this->mDemoCamEye.z); i_this->field_0x1288.x = std::fabsf(i_this->mDemoCamCenterTarget.x - i_this->mDemoCamCenter.x); i_this->field_0x1288.y = std::fabsf(i_this->mDemoCamCenterTarget.y - i_this->mDemoCamCenter.y); i_this->field_0x1288.z = std::fabsf(i_this->mDemoCamCenterTarget.z - i_this->mDemoCamCenter.z); i_this->field_0x129c = 0.0f; } else if (i_this->mDemoModeTimer < 140) { if (i_this->mDemoModeTimer == 1) { i_this->mDemoCamCenterTarget.set(2.0f, 111.0f, 1689.0f); i_this->mDemoCamEyeTarget.set(23.0f, 108.0f, 2155.0f); i_this->field_0x127c.x = std::fabsf(i_this->mDemoCamEyeTarget.x - i_this->mDemoCamEye.x); i_this->field_0x127c.y = std::fabsf(i_this->mDemoCamEyeTarget.y - i_this->mDemoCamEye.y); i_this->field_0x127c.z = std::fabsf(i_this->mDemoCamEyeTarget.z - i_this->mDemoCamEye.z); i_this->field_0x1288.x = std::fabsf(i_this->mDemoCamCenterTarget.x - i_this->mDemoCamCenter.x); i_this->field_0x1288.y = std::fabsf(i_this->mDemoCamCenterTarget.y - i_this->mDemoCamCenter.y); i_this->field_0x1288.z = std::fabsf(i_this->mDemoCamCenterTarget.z - i_this->mDemoCamCenter.z); } cam_3d_morf(i_this, 0.1f); cLib_addCalc2(&i_this->field_0x129c, 0.02f, 1.0f, 0.0003f); } if (i_this->mDemoModeTimer >= 170) { cam_3d_morf(i_this, 0.05f); cLib_addCalc2(&i_this->field_0x129c, 0.007f, 1.0f, 0.00012f); if (i_this->mDemoModeTimer == 260) { i_this->mSetDeadColor = true; } if (i_this->mDemoModeTimer == 410) { i_this->mSetBossExplode = true; } if (i_this->mDemoModeTimer == 412) { i_this->mDisableDraw = true; } if (i_this->mDemoModeTimer >= 415) { cLib_addCalc2(&i_this->mDemoCamFovy, 70.0f, 0.05f, 0.1f); } if (i_this->mDemoModeTimer == 532) { i_this->mDemoMode = 53; i_this->mDemoModeTimer = 0; i_this->mDemoCamFovy = 55.0f; i_this->mDemoCamCenter.set(1072.0f, 1121.0f, -379.0f); i_this->mDemoCamEye.set(1320.0f, 1293.0f, -701.0f); i_this->mDemoCamCenterTarget.set(758.0f, 853.0f, 332.0f); i_this->mDemoCamEyeTarget.set(953.0f, 997.0f, -36.0f); i_this->field_0x127c.x = std::fabsf(i_this->mDemoCamEyeTarget.x - i_this->mDemoCamEye.x); i_this->field_0x127c.y = std::fabsf(i_this->mDemoCamEyeTarget.y - i_this->mDemoCamEye.y); i_this->field_0x127c.z = std::fabsf(i_this->mDemoCamEyeTarget.z - i_this->mDemoCamEye.z); i_this->field_0x1288.x = std::fabsf(i_this->mDemoCamCenterTarget.x - i_this->mDemoCamCenter.x); i_this->field_0x1288.y = std::fabsf(i_this->mDemoCamCenterTarget.y - i_this->mDemoCamCenter.y); i_this->field_0x1288.z = std::fabsf(i_this->mDemoCamCenterTarget.z - i_this->mDemoCamCenter.z); cXyz pos(0.0f, 0.0f, 0.0f); for (int i = 0; i < 5; i++) { static u16 g_e_i[] = {0x83EB, 0x83EC, 0x83ED, 0x83EE, 0x83EF}; dComIfGp_particle_set(g_e_i[i], &pos, NULL, NULL); } i_this->mSound.startCreatureSound(Z2SE_EN_BOSS_CONVERGE, 0, 0); } } break; case 53: if (i_this->mDemoModeTimer >= 100) { cam_3d_morf(i_this, 0.2f); cLib_addCalc2(&i_this->field_0x129c, 0.15f, 1.0f, 0.002f); } if (i_this->mDemoModeTimer == 100) { cMtx_YrotS(*calc_mtx, player->shape_angle.y); spF0.set(0.0f, JREG_F(8) + 300.0f, JREG_F(9) + 100.0f); MtxPosition(&spF0, &spFC); spFC += player->current.pos; OS_REPORT("///YSTONE POS %d,%d,%d\n", (int)spFC.x, (int)spFC.y, (int)spFC.z); fopAcM_create(PROC_OBJ_YSTONE, 0, &spFC, fopAcM_GetRoomNo(a_this), NULL, NULL, -1); } if (i_this->mDemoModeTimer == 120) { i_this->field_0x1151 = 1; obj_ystone_class* ystone = (obj_ystone_class*)fopAcM_SearchByName(PROC_OBJ_YSTONE); if (ystone != NULL) { ystone->field_0x59b = 0; } } if (i_this->mDemoModeTimer == 180) { i_this->mDemoMode = 54; i_this->mDemoModeTimer = 0; spFC.set(121.0f, 0.0f, 2486.0f); daPy_getPlayerActorClass()->setPlayerPosAndAngle(&spFC, 0x8000, 0); i_this->field_0x1298 = JREG_F(8) + 300.0f; } break; case 54: i_this->mDemoCamCenter.set(118.0f, 240.0f, 2349.0f); i_this->mDemoCamEye.set(116.0f, 100.0f, 2766.0f); cMtx_YrotS(*calc_mtx, player->shape_angle.y); spF0.set(0.0f, i_this->field_0x1298, JREG_F(9) + 100.0f); MtxPosition(&spF0, &spFC); spFC += player->current.pos; cLib_addCalc2(&i_this->field_0x1298, 210.0f, 0.05f, 0.5f); obj_ystone_class* ystone = (obj_ystone_class*)fopAcM_SearchByName(PROC_OBJ_YSTONE); if (ystone != NULL) { ystone->setCurrentPos(spFC); } if (i_this->mDemoModeTimer == 10) { cXyz pos(-234.0f, 0.0f, 2191.0f); csXyz angle(0, 0, 0); fopAcM_createWarpHole(&pos, &angle, fopAcM_GetRoomNo(a_this), 0, 1, 0xFF); } if (i_this->mDemoModeTimer == 110) { i_this->mDemoMode = 100; i_this->field_0x1151 = 1; dComIfGs_onStageBossEnemy(); int sw = (fopAcM_GetParam(a_this) >> 0x10) & 0xFF; dComIfGs_offSwitch(sw, fopAcM_GetRoomNo(a_this)); fish_set(i_this); } } if (i_this->mDemoMode >= 11 && i_this->mDemoMode < 20) { if (dComIfGp_getEvent().checkSkipEdge()) { cDmr_SkipInfo = 20; Z2GetAudioMgr()->subBgmStop(); OS_REPORT("//////////////B_BQ SKIP 11\n"); int sw = (fopAcM_GetParam(a_this) >> 8) & 0xFF; dComIfGs_onSwitch(sw, fopAcM_GetRoomNo(a_this)); dStage_changeScene(1, 0.0f, 0, fopAcM_GetRoomNo(a_this), 0, -1); i_this->mDemoMode = 1000; dComIfGp_event_reset(); return; } } if (i_this->mDemoMode == 100) { camera->mCamera.Reset(i_this->mDemoCamCenter, i_this->mDemoCamEye); camera->mCamera.Start(); camera->mCamera.SetTrimSize(0); dComIfGp_event_reset(); daPy_getPlayerActorClass()->cancelOriginalDemo(); i_this->mDemoMode = 0; OS_REPORT("//////////////B_BQ SKIP 12\n"); } if (i_this->mDemoMode != 0) { s16 bank = i_this->field_0x12a8 * cM_scos(i_this->mDemoModeTimer * 0x2C00) * 7.5f; cXyz center(i_this->mDemoCamCenter); center.y += var_f31; cXyz eye(i_this->mDemoCamEye); if (var_r28) { dBgS_LinChk lin_chk; lin_chk.Set(¢er, &eye, a_this); if (dComIfG_Bgsp().LineCross(&lin_chk)) { eye = lin_chk.i_GetCross(); } } camera->mCamera.Set(center, eye, bank, i_this->mDemoCamFovy); cLib_addCalc0(&i_this->field_0x12a8, 1.0f, 1.0f); i_this->mDemoModeTimer++; } if (i_this->mSetDeadColor) { cLib_addCalc2(&i_this->mDeadColor, -20.0f, 1.0f, 0.16667f); } } /* 805B8A24-805B92F0 0055A4 08CC+00 2/1 0/0 0/0 .text daB_BQ_Execute__FP10b_bq_class */ static int daB_BQ_Execute(b_bq_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; if (cDmrNowMidnaTalk()) { return 1; } fopAc_ac_c* player = (fopAc_ac_c*)dComIfGp_getPlayer(0); cXyz sp44; cXyz sp50; if (i_this->mDemoMode == 1000) { return 1; } if (cDmr_SkipInfo != 0) { cDmr_SkipInfo--; } i_this->field_0x6c8++; for (int i = 0; i < 5; i++) { if (i_this->mTimers[i] != 0) { i_this->mTimers[i]--; } } if (i_this->field_0x6de != 0) { i_this->field_0x6de--; } if (i_this->field_0x6fc != 0) { i_this->field_0x6fc--; } if (i_this->field_0x6fe != 0) { i_this->field_0x6fe--; } action(i_this); mDoMtx_stack_c::transS(a_this->current.pos.x, a_this->current.pos.y, a_this->current.pos.z); mDoMtx_stack_c::YrotM(a_this->shape_angle.y); mDoMtx_stack_c::scaleM(l_HIO.mModelSize, l_HIO.mModelSize, l_HIO.mModelSize); J3DModel* model = i_this->mpMorf->getModel(); model->setBaseTRMtx(mDoMtx_stack_c::get()); i_this->mpMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this))); if (i_this->mpDeadBrk->getPlaySpeed() > 0.0f) { i_this->mpDeadBrk->play(); } if (i_this->mPlayTodomeBtk) { i_this->mpTodomeBtk->play(); } i_this->mpMorf->modelCalc(); anm_se_set(i_this); cXyz sp5C(-20000.0f, -40000.0f, 30000.0f); MTXCopy(model->getAnmMtx(YREG_S(0) + 0x35), *calc_mtx); if (i_this->mAction == ACTION_END) { sp44.set(XREG_F(3), XREG_F(4), XREG_F(5)); } else { sp44.set(XREG_F(3) + 30.0f, XREG_F(4), XREG_F(5)); } MtxPosition(&sp44, &a_this->eyePos); a_this->attention_info.position = a_this->eyePos; a_this->attention_info.position.y += XREG_F(6) + 70.0f; cXyz sp68(0.0f, 0.0f, 0.0f); if (i_this->mAction == ACTION_END) { sp68.y += 10000.0f; } if (i_this->mAction >= ACTION_DAMAGE) { i_this->mCcCoreSph.SetR(YREG_F(15) + 55.0f); sp50 = a_this->eyePos; i_this->mCcCoreSph.SetC(sp50 + sp68); MTXCopy(model->getAnmMtx(YREG_S(2) + JNT_CORE_3), *calc_mtx); sp44.set(YREG_F(3) + -250.0f, YREG_F(4), YREG_F(5)); MtxPosition(&sp44, &sp50); i_this->mCcSph.SetC(sp50 + sp68); i_this->mCcSph.SetR(YREG_F(14) + 350.0f); } else { MTXCopy(model->getAnmMtx(YREG_S(1) + JNT_CORE_3), *calc_mtx); sp44.set((XREG_F(3) + 300.0f) - 70.0f, XREG_F(4) + 50.0f, XREG_F(5)); MtxPosition(&sp44, &a_this->eyePos); a_this->attention_info.position = a_this->eyePos; a_this->attention_info.position.y += XREG_F(6) + 250.0f; sp44.set(YREG_F(3), YREG_F(4), YREG_F(5)); MtxPosition(&sp44, &sp50); i_this->mCcSph.SetC(sp50 + sp68); if (i_this->mDistToPlayer > 1000.0f && dComIfGp_checkPlayerStatus0(0, 0x80000)) { i_this->mCcSph.SetR(YREG_F(12) + 300.0f); } else { i_this->mCcSph.SetR(YREG_F(13) + 150.0f + 50.0f); } sp50.set(20000.0f, -20000.0f, 10000.0f); i_this->mCcCoreSph.SetC(sp50); } dComIfG_Ccsp()->Set(&i_this->mCcSph); dComIfG_Ccsp()->Set(&i_this->mCcCoreSph); sp50 = a_this->eyePos; if (daPy_getPlayerActorClass()->getCutType() != 0x27 && i_this->mAction >= ACTION_DAMAGE) { sp50.y = player->current.pos.y + 70.0f + KREG_F(7); } else { sp50.x -= 20000.0f; } i_this->mCcCoreCoSph.SetC(sp50 + sp68); dComIfG_Ccsp()->Set(&i_this->mCcCoreCoSph); MTXCopy(model->getAnmMtx(JNT_BODY2), *calc_mtx); sp44.set(0.0f, 0.0f, 0.0f); MtxPosition(&sp44, &sp50); i_this->mCcBodyCoSph.SetC(sp50 + sp68); i_this->mCcBodyCoSph.SetR(TREG_F(17) + 520.0f); dComIfG_Ccsp()->Set(&i_this->mCcBodyCoSph); demo_camera(i_this); cLib_addCalcAngleS2(&i_this->mBlureRate, i_this->mBlureRateTarget, 1, 8); f32 blend_target = 0.0f; f32 blend_step = 0.1f; if (i_this->mColpatType == 0) { dKy_custom_colset(0, 1, i_this->mColpatBlend); } else if (i_this->mColpatType == 1) { dKy_custom_colset(0, 1, i_this->mColpatBlend); blend_target = 1.0f; blend_step = 0.2f; } else if (i_this->mColpatType == 15) { dKy_custom_colset(0, 1, i_this->mColpatBlend); blend_target = 0.5f; blend_step = 0.0125f; } else if (i_this->mColpatType == 2) { dKy_custom_colset(2, 1, i_this->mColpatBlend); blend_step = 0.008f; } else if (i_this->mColpatType == 3) { dKy_custom_colset(2, 3, i_this->mColpatBlend); blend_target = 1.0f; } else if (i_this->mColpatType == 4) { dKy_custom_colset(4, 3, i_this->mColpatBlend); blend_step = 0.005f; } else if (i_this->mColpatType == 5) { dKy_custom_colset(5, 3, i_this->mColpatBlend); blend_step = 0.05f; i_this->mColpatType = 6; } else if (i_this->mColpatType == 6) { dKy_custom_colset(5, 3, i_this->mColpatBlend); blend_target = 1.0f; blend_step = 0.05f; } else if (i_this->mColpatType == 7) { dKy_custom_colset(4, 6, i_this->mColpatBlend); blend_target = 1.0f; blend_step = 0.0025f; } cLib_addCalc2(&i_this->mColpatBlend, blend_target, 1.0f, blend_step); i_this->field_0x684.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this))); i_this->field_0x6a4.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this))); if (i_this->field_0x1394 != 0) { i_this->field_0x1394--; if (i_this->field_0x1394 == 20) { fpcM_Search(s_bi_del_sub, i_this); } if (i_this->field_0x1394 == 10) { fpcM_Search(s_fw_del_sub, i_this); } else if (i_this->field_0x1394 == 0) { fopAcM_createChild(PROC_E_BI, fopAcM_GetID(a_this), 0xFFFFFF35, &a_this->current.pos, fopAcM_GetRoomNo(a_this), NULL, NULL, -1, NULL); } } for (int i = 0; i < 4; i++) { static u16 takino[] = {0x8359, 0x835A, 0x835B, 0x835C}; static u16 takino2[] = {0x842D, 0x842E, 0x842F, 0x8430}; if (i_this->field_0x1151) { i_this->field_0x1228[i] = dComIfGp_particle_set(i_this->field_0x1228[i], takino[i], &a_this->home.pos, NULL, NULL); } else { i_this->field_0x1228[i] = dComIfGp_particle_set(i_this->field_0x1228[i], takino2[i], &a_this->home.pos, NULL, NULL); } } if (i_this->field_0x1151) { fopAcM_OffStatus(a_this, 0); a_this->attention_info.flags = 0; } return 1; } /* 805B92F0-805B92F8 005E70 0008+00 1/0 0/0 0/0 .text daB_BQ_IsDelete__FP10b_bq_class */ static int daB_BQ_IsDelete(b_bq_class* i_this) { return 1; } /* 805B92F8-805B9370 005E78 0078+00 1/0 0/0 0/0 .text daB_BQ_Delete__FP10b_bq_class */ static int daB_BQ_Delete(b_bq_class* i_this) { dComIfG_resDelete(&i_this->mPhase, "B_bq"); if (i_this->mInitHIO) { data_805BAD50 = 0; } if (i_this->heap != NULL) { i_this->mpMorf->stopZelAnime(); i_this->field_0x684.deleteObject(); i_this->field_0x6a4.deleteObject(); } return 1; } /* 805B9370-805B9654 005EF0 02E4+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ static int useHeapInit(fopAc_ac_c* i_this) { b_bq_class* a_this = (b_bq_class*)i_this; a_this->mpMorf = new mDoExt_McaMorfSO((J3DModelData*)dComIfG_getObjectRes("B_bq", 0x1D), NULL, NULL, NULL, J3DFrameCtrl::LOOP_REPEAT_e, 0.6f, 0, -1, &a_this->mSound, 0, 0x11000284); if (a_this->mpMorf == NULL || a_this->mpMorf->getModel() == NULL) { return false; } J3DModel* model = a_this->mpMorf->getModel(); model->setUserArea((u32)a_this); for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) { model->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack); } a_this->mpDeadBrk = new mDoExt_brkAnm(); if (a_this->mpDeadBrk == NULL) { return false; } if (!a_this->mpDeadBrk->init(a_this->mpMorf->getModel()->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_bq", 0x20), TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1)) { return false; } a_this->mpDeadBrk->setPlaySpeed(0.0f); a_this->mpTodomeBtk = new mDoExt_btkAnm(); if (a_this->mpTodomeBtk == NULL) { return false; } if (!a_this->mpTodomeBtk->init(a_this->mpMorf->getModel()->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_bq", 0x23), TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1)) { return false; } J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("B_bq", 0x1A); JUT_ASSERT(modelData != 0); a_this->mpEyeballModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); if (a_this->mpEyeballModel == NULL) { return false; } a_this->field_0x684.init(&a_this->field_0x1138, 1); a_this->field_0x6a4.init(&a_this->field_0x1144, 1); return true; } /* 805B969C-805B9B3C 00621C 04A0+00 1/0 0/0 0/0 .text daB_BQ_Create__FP10fopAc_ac_c */ static int daB_BQ_Create(fopAc_ac_c* i_this) { b_bq_class* a_this = (b_bq_class*)i_this; fopAcM_SetupActor(a_this, b_bq_class); int phase_state = dComIfG_resLoad(&a_this->mPhase, "B_bq"); if (phase_state == cPhs_COMPLEATE_e) { if (dComIfGs_isStageBossEnemy()) { // "After B_BQ defeated, so don't re-set\n" OS_REPORT("B_BQ やられ後なので再セットしません\n"); cXyz pos(-234.0f, 0.0f, 2191.0f); csXyz angle(0, 0, 0); fopAcM_createWarpHole(&pos, &angle, fopAcM_GetRoomNo(i_this), 0, 0, 0xFF); if (!dComIfGs_isStageLife()) { cXyz scale(1.0f, 1.0f, 1.0f); pos.set(60.0f, 0.0f, 1778.0f); fopAcM_createItemForBoss(&pos, fpcNm_ITEM_UTAWA_HEART, fopAcM_GetRoomNo(i_this), &i_this->shape_angle, &scale, 0.0f, 0.0f, -1); } g_env_light.mColpatWeather = 6; g_env_light.wether_pat0 = 6; g_env_light.wether_pat1 = 6; fish_set(a_this); return cPhs_ERROR_e; } dComIfGs_offSwitch((fopAcM_GetParam(i_this) >> 0x10) & 0xFF, fopAcM_GetRoomNo(i_this)); OS_REPORT("B_BQ PARAM %x\n" fopAcM_GetParam(i_this)); OS_REPORT("B_BQ//////////////B_BQ SET 1 !!\n"); if (!fopAcM_entrySolidHeap(i_this, useHeapInit, 0x6FA0)) { OS_REPORT("//////////////B_BQ SET NON !!\n"); return cPhs_ERROR_e; } OS_REPORT("B_BQ//////////////B_BQ SET 2 !!\n"); if (!data_805BAD50) { a_this->mInitHIO = 1; data_805BAD50 = true; l_HIO.field_0x4 = -1; } a_this->attention_info.flags = 4; a_this->attention_info.distances[fopAc_attn_BATTLE_e] = 0x16; static dCcD_SrcSph cc_sph_src = { { {0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdff, 0x3}, 0x75}}, // mObj {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt {dCcD_SE_HARD_BODY, 0x0, 0x0, 0x0, 0x2}, // mGObjTg {0x0}, // mGObjCo }, // mObjInf { {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph } // mSphAttr }; a_this->mCcStts.Init(100, 0, i_this); a_this->mCcSph.Set(cc_sph_src); a_this->mCcSph.SetStts(&a_this->mCcStts); a_this->mCcSph.OnTgNoHitMark(); static dCcD_SrcSph core_sph_src = { { {0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdff, 0x3}, 0x0}}, // mObj {dCcD_SE_NONE, 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 }; a_this->mCcCoreSph.Set(core_sph_src); a_this->mCcCoreSph.SetStts(&a_this->mCcStts); static dCcD_SrcSph core_co_sph_src = { { {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x75}}, // mObj {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg {0x0}, // mGObjCo }, // mObjInf { {{0.0f, 0.0f, 0.0f}, 60.0f} // mSph } // mSphAttr }; a_this->mCcCoStts.Init(0xFF, 0, i_this); a_this->mCcCoreCoSph.Set(core_co_sph_src); a_this->mCcCoreCoSph.SetStts(&a_this->mCcCoStts); static dCcD_SrcSph body_co_sph_src = { { {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x75}}, // mObj {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg {0x0}, // mGObjCo }, // mObjInf { {{0.0f, 0.0f, 0.0f}, 60.0f} // mSph } // mSphAttr }; a_this->mCcBodyCoSph.Set(body_co_sph_src); a_this->mCcBodyCoSph.SetStts(&a_this->mCcCoStts); a_this->mSound.init(&i_this->eyePos, &i_this->eyePos, 3, 1); a_this->mAtInfo.mpSound = &a_this->mSound; static dCcD_SrcSph mizu_sph_src = { { {0x0, {{AT_TYPE_CSTATUE_SWING, 0x2, 0xd}, {0x0, 0x0}, 0x0}}, // mObj {dCcD_SE_SOFT_BODY, 0x0, 0xd, 0x0, 0x0}, // mGObjAt {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg {0x0}, // mGObjCo }, // mObjInf { {{0.0f, 0.0f, 0.0f}, 35.0f} // mSph } // mSphAttr }; for (int i = 0; i < 4; i++) { a_this->mCcMizuSph[i].Set(mizu_sph_src); a_this->mCcMizuSph[i].SetStts(&a_this->mCcStts); } u32 params = fopAcM_GetParam(i_this) & 0xFFFFFF00; cXyz offset; cXyz tentacle_pos; cMtx_YrotS(*calc_mtx, i_this->shape_angle.y); offset.x = TREG_F(8) + 700.0f; offset.y = 0.0f; offset.z = TREG_F(9) + 100.0f; for (int i = 0; i < 2; i++) { MtxPosition(&offset, &tentacle_pos); tentacle_pos += i_this->current.pos; a_this->mTentacleIDs[i] = fopAcM_createChild(PROC_B_BH, fopAcM_GetID(i_this), params | i, &tentacle_pos, fopAcM_GetRoomNo(i_this), NULL, NULL, -1, NULL); offset.x *= -1.0f; } a_this->mMonkeyBombID = fopAcM_createChild(PROC_E_MB, fopAcM_GetID(i_this), 0xFFFFFFFF, &i_this->current.pos, fopAcM_GetRoomNo(i_this), NULL, NULL, -1, NULL); if (dComIfG_play_c::getLayerNo(0) == 4) { a_this->mDemoMode = 1; } a_this->field_0x6ec = 2; OS_REPORT("//////////////B_BQ SKIP INFO %d\n", cDmr_SkipInfo); if (cDmr_SkipInfo == 0) { a_this->mDemoMode = 10; a_this->mAction = ACTION_STAY; a_this->mDisableDraw = true; } else { a_this->mAction = ACTION_STAY; Z2GetAudioMgr()->bgmStart(Z2BGM_BOSSBABA_1, 0, 0); a_this->field_0x1392 = 2; a_this->mDisableDraw = true; a_this->mColpatType = 1; a_this->mColpatBlend = 1.0f; } a_this->field_0x6fa = cM_rndF(2.99f) + 2.0f; a_this->mDamageBackCount = 1; daB_BQ_Execute(a_this); } return phase_state; } /* 805B9B3C-805B9D74 0066BC 0238+00 1/1 0/0 0/0 .text __ct__10b_bq_classFv */ b_bq_class::b_bq_class() {} /* 805BACAC-805BACCC -00001 0020+00 1/0 0/0 0/0 .data l_daB_BQ_Method */ static actor_method_class l_daB_BQ_Method = { (process_method_func)daB_BQ_Create, (process_method_func)daB_BQ_Delete, (process_method_func)daB_BQ_Execute, (process_method_func)daB_BQ_IsDelete, (process_method_func)daB_BQ_Draw, }; /* 805BACCC-805BACFC -00001 0030+00 0/0 0/0 1/0 .data g_profile_B_BQ */ extern actor_process_profile_definition g_profile_B_BQ = { fpcLy_CURRENT_e, 7, fpcPi_CURRENT_e, PROC_B_BQ, &g_fpcLf_Method.base, sizeof(b_bq_class), 0, 0, &g_fopAc_Method.base, 212, &l_daB_BQ_Method, 0x44000, fopAc_ENEMY_e, fopAc_CULLBOX_CUSTOM_e, };