/** * @file d_a_b_yo.cpp * @brief Actor - Blizzeta (Boss) * */ #include "d/actor/d_a_b_yo.h" #include "SSystem/SComponent/c_math.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "m_Do/m_Do_graphic.h" #include "f_op/f_op_msg.h" #include "f_op/f_op_msg_mng.h" #include "c/c_damagereaction.h" #include "d/actor/d_a_b_yo_ice.h" #include "d/actor/d_a_e_fz.h" #include "d/actor/d_a_mirror.h" #include "d/actor/d_a_player.h" #include "d/actor/d_a_obj_ystone.h" #include "d/d_bg_w.h" #include "d/d_com_inf_game.h" #include "d/d_s_play.h" /* 80639F38-80639F3C 000008 0001+03 1/1 0/0 0/0 .bss @1109 */ static u8 lit_1109[1 + 3 /* padding */]; /* 80639F3C-80639F40 00000C 0001+03 0/0 0/0 0/0 .bss @1107 */ #pragma push #pragma force_active on static u8 lit_1107[1 + 3 /* padding */]; #pragma pop /* 80639F40-80639F44 000010 0001+03 0/0 0/0 0/0 .bss @1105 */ #pragma push #pragma force_active on static u8 lit_1105[1 + 3 /* padding */]; #pragma pop /* 80639F44-80639F48 000014 0001+03 0/0 0/0 0/0 .bss @1104 */ #pragma push #pragma force_active on static u8 lit_1104[1 + 3 /* padding */]; #pragma pop /* 80639F48-80639F4C 000018 0001+03 0/0 0/0 0/0 .bss @1099 */ #pragma push #pragma force_active on static u8 lit_1099[1 + 3 /* padding */]; #pragma pop /* 80639F4C-80639F50 00001C 0001+03 0/0 0/0 0/0 .bss @1097 */ #pragma push #pragma force_active on static u8 lit_1097[1 + 3 /* padding */]; #pragma pop /* 80639F50-80639F54 000020 0001+03 0/0 0/0 0/0 .bss @1095 */ #pragma push #pragma force_active on static u8 lit_1095[1 + 3 /* padding */]; #pragma pop /* 80639F54-80639F58 000024 0001+03 0/0 0/0 0/0 .bss @1094 */ #pragma push #pragma force_active on static u8 lit_1094[1 + 3 /* padding */]; #pragma pop /* 80639F58-80639F5C 000028 0001+03 0/0 0/0 0/0 .bss @1057 */ #pragma push #pragma force_active on static u8 lit_1057[1 + 3 /* padding */]; #pragma pop /* 80639F5C-80639F60 00002C 0001+03 0/0 0/0 0/0 .bss @1055 */ #pragma push #pragma force_active on static u8 lit_1055[1 + 3 /* padding */]; #pragma pop /* 80639F60-80639F64 000030 0001+03 0/0 0/0 0/0 .bss @1053 */ #pragma push #pragma force_active on static u8 lit_1053[1 + 3 /* padding */]; #pragma pop /* 80639F64-80639F68 000034 0001+03 0/0 0/0 0/0 .bss @1052 */ #pragma push #pragma force_active on static u8 lit_1052[1 + 3 /* padding */]; #pragma pop /* 80639F68-80639F6C 000038 0001+03 0/0 0/0 0/0 .bss @1014 */ #pragma push #pragma force_active on static u8 lit_1014[1 + 3 /* padding */]; #pragma pop /* 80639F6C-80639F70 00003C 0001+03 0/0 0/0 0/0 .bss @1012 */ #pragma push #pragma force_active on static u8 lit_1012[1 + 3 /* padding */]; #pragma pop /* 80639F70-80639F74 000040 0001+03 0/0 0/0 0/0 .bss @1010 */ #pragma push #pragma force_active on static u8 lit_1010[1 + 3 /* padding */]; #pragma pop /* 80639F74-80639F78 -00001 0004+00 2/2 0/0 0/0 .bss None */ /* 80639F74 0001+00 data_80639F74 @1009 */ /* 80639F75 0003+00 data_80639F75 None */ static u8 struct_80639F74; static bool hioInit; /* 80639F84-80639FE0 000054 005C+00 12/13 0/0 0/0 .bss l_HIO */ static daB_YO_HIO_c l_HIO; /* 80639A60-80639A6C 000000 000C+00 4/4 0/0 0/0 .data cNullVec__6Z2Calc */ static u8 cNullVec__6Z2Calc[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; /* 80639A6C-80639A80 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ static u32 lit_1787[1 + 4 /* padding */] = { 0x02000201, /* padding */ 0x40080000, 0x00000000, 0x3FE00000, 0x00000000, }; namespace { /* 80639A80-80639AC4 000020 0044+00 0/1 0/0 0/0 .data cc_yo_src__22@unnamed@d_a_b_yo_cpp@ */ static dCcD_SrcCyl cc_yo_src = { { {0x0, {{0x100000, 0x4, 0xD}, {0x0, 0x0}, 0x75}}, // mObj {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt {dCcD_SE_NONE, 0x2, 0x0, 0x0, 0x0}, // mGObjTg {0x0}, // mGObjCo }, // mObjInf { {0.0f, 0.0f, 0.0f}, // mCenter 40.0f, // mRadius 40.0f // mHeight } // mCyl }; /* 80639AC4-80639B04 000064 0040+00 0/1 0/0 0/0 .data cc_yo_tg_src__22@unnamed@d_a_b_yo_cpp@ */ static dCcD_SrcSph cc_yo_tg_src = { { {0x0, {{0x100, 0x4, 0x11}, {0xD8BBFDFF, 0x43}, 0x45}}, // mObj {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt {dCcD_SE_NONE, 0x2, 0x0, 0x0, 0x203}, // mGObjTg {0x0}, // mGObjCo }, // mObjInf { {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph } // mSphAttr }; /* 80639B04-80639B44 0000A4 0040+00 0/1 0/0 0/0 .data cc_yo_iron_src__22@unnamed@d_a_b_yo_cpp@ */ static dCcD_SrcSph cc_yo_iron_src = { { {0x0, {{0x0, 0x0, 0x0}, {0x400000, 0x3}, 0x0}}, // mObj {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x102}, // mGObjTg {0x0}, // mGObjCo }, // mObjInf { {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph } // mSphAttr }; } // namespace /* 80639B44-80639B60 0000E4 001B+01 1/1 0/0 0/0 .data yo_material_draw */ static bool yo_material_draw[27] = { true, true, true, true, false, false, true, true, true, false, true, true, true, true, false, false, true, true, false, false, true, true, false, true, false, false, true, }; /* 80639B60-80639BAC 000100 004C+00 0/1 0/0 0/0 .data yo_demo_bck_idx */ static int yo_demo_bck_idx[19] = { 0x07, // ykw_b_angry 0x08, // ykw_b_angry_wait 0x0D, // ykw_b_float 0x11, // ykw_b_talka 0x12, // ykw_b_talkb 0x13, // ykw_b_to_talkb 0x14, // ykw_b_waita 0x15, // ykw_b_waitb 0x19, // ykw_b_walk 0x0F, // ykw_b_scream 0x10, // ykw_b_scream_wait 0x17, // ykw_b_waitc2 0x16, // ykw_b_waitc 0x0E, // ykw_b_floatb 0x18, // ykw_b_waitd 0x0A, // ykw_b_downa 0x0B, // ykw_b_downb 0x0C, // ykw_b_downc 0x09, // ykw_b_down }; /* 80639BAC-80639BF8 00014C 004C+00 0/1 0/0 0/0 .data yo_demo_btk_idx */ static int yo_demo_btk_idx[19] = { 0x2A, // ykw_b_angry 0xFF, // 0x2C, // ykw_b_float 0x2F, // ykw_b_talka 0x30, // ykw_b_talkb 0x31, // ykw_b_to_talkb 0x32, // ykw_b_waita 0x33, // ykw_b_waitb 0x34, // ykw_b_walk 0x2D, // ykw_b_scream 0x2E, // ykw_b_scream_wait 0x34, // ykw_b_walk 0x34, // ykw_b_walk 0x34, // ykw_b_walk 0x34, // ykw_b_walk 0x2B, // ykw_b_down 0x2B, // ykw_b_down 0x2B, // ykw_b_down 0x32, // ykw_b_waita }; /* 80639BF8-80639C44 000198 004C+00 0/1 0/0 0/0 .data yo_demo_btp_idx */ static int yo_demo_btp_idx[19] = { 0x38, // ykw_b_angry 0x39, // ykw_b_facea 0x39, // ykw_b_facea 0x3C, // ykw_b_talka 0x3D, // ykw_b_talkb 0x3E, // ykw_b_to_talkb 0x3A, // ykw_b_faceb 0x39, // ykw_b_facea 0x3A, // ykw_b_faceb 0x39, // ykw_b_facea 0x39, // ykw_b_facea 0x39, // ykw_b_facea 0x39, // ykw_b_facea 0x39, // ykw_b_facea 0x39, // ykw_b_facea 0x39, // ykw_b_facea 0x39, // ykw_b_facea 0x39, // ykw_b_facea 0x3A, // ykw_b_faceb }; /* 8062F46C-8062F51C 0000EC 00B0+00 1/1 0/0 0/0 .text __ct__12daB_YO_HIO_cFv */ daB_YO_HIO_c::daB_YO_HIO_c() { field_0x4 = -1; mScale[0] = 7.0f; mScale[1] = 6.0f; mScale[2] = 5.0f; mScale[3] = 4.0f; mScale[4] = 3.0f; mScale[5] = 2.0f; mScale[6] = 1.5f; mScale[7] = 1.0f; mFreezardNum = 20.0f; mReboundSpeedRatio = 2.5f; mChaseSpeed = 6.0f; mReboundSpeedMax = 7.0f; field_0x3c = false; mMaxFallSpeed = -100.0f; mAttackTimer = 60.0f; mFreezardRadius = 0.0f; mGatherTimer = 0.0f; field_0x4c = 3000.0f; field_0x50 = 5.0f; field_0x54 = false; field_0x58 = 5.0f; } /* 8062F51C-8062FB90 00019C 0674+00 1/1 0/0 0/0 .text draw__8daB_YO_cFv */ int daB_YO_c::draw() { cXyz pos(0.0f, 0.0f, 0.0f); g_env_light.settingTevStruct(0x10, &pos, &tevStr); dComIfGd_setListBG(); J3DModel* model; for (int i = 0; i < 2; i++) { if (mRoomAlpha[i] == 0.0f) { continue; } model = mpRoomModel[i]; g_env_light.setLightTevColorType_MAJI(model, &tevStr); J3DModelData* model_data = model->getModelData(); for (u16 j = 0; j < model_data->getMaterialNum(); j++) { J3DMaterial* material = model_data->getMaterialNodePointer(j); material->getTevColor(0)->a = (u8)mRoomAlpha[i]; if (i == 0) { if (mRoomAlpha[i] == 255.0f) { material->setMaterialMode(1); material->setZCompLoc(1); material->getZMode()->setUpdateEnable(1); material->getZMode()->setFunc(3); material->getZMode()->setCompareEnable(1); material->getBlend()->setType(0); } else { material->setMaterialMode(4); material->setZCompLoc(1); material->getZMode()->setUpdateEnable(0); material->getZMode()->setFunc(3); material->getZMode()->setCompareEnable(1); material->getBlend()->setType(1); } } } mDoExt_modelUpdateDL(model); } if (mpFurnitureModel != NULL) { g_env_light.setLightTevColorType_MAJI(mpFurnitureModel, &tevStr); mDoExt_modelUpdateDL(mpFurnitureModel); } dComIfGd_setList(); if (mIsInactive == 1) { return 1; } if (field_0xfb5 == 2) { return 1; } g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); int phase; if (mModelNo == 7) { phase = 2; } else if (mModelNo < 4) { phase = 0; } else { phase = 1; } if (field_0xfb5 != 3) { J3DModel* model = mpModel[phase]; g_env_light.setLightTevColorType_MAJI(model, &tevStr); if (mModelNo != 7) { mpBtkAnm->entry(model->getModelData()); } if (phase == 2) { J3DModelData* model_data = model->getModelData(); int iVar3 = mLastPhaseDamage; if (iVar3 > 2) { iVar3 = 2; } for (u16 j = 0; j < model_data->getMaterialNum(); j++) { J3DMaterial* material = model_data->getMaterialNodePointer(j); if (yo_material_draw[iVar3 * 9 + j]) { material->getShape()->show(); } else { material->getShape()->hide(); } } } fopAcM_setEffectMtx(this, model->getModelData()); mDoExt_modelUpdateDL(model); daMirror_c::entry(model); } if (phase == 2 || field_0xfb5 == 3) { J3DModel* model; if (!mReverted) { model = mpYetaMorf->getModel(); g_env_light.setLightTevColorType_MAJI(model, &tevStr); mpYetaBtpAnm->entry(model->getModelData()); mpYetaBtkAnm->entry(model->getModelData()); mpYetaBrkAnm->entry(model->getModelData()); if (field_0xfd1) { mpYetaWhiteBrkAnm->entry(model->getModelData()); } fopAcM_setEffectMtx(this, model->getModelData()); mpYetaMorf->entryDL(); daMirror_c::entry(model); } else { model = mpYetaRevertedMorf->getModel(); g_env_light.setLightTevColorType_MAJI(model, &tevStr); fopAcM_setEffectMtx(this, model->getModelData()); mpYetaRevertedMorf->entryDL(); } cXyz pos; pos.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, &pos, 3500.0f, 0.0f, current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); } if (mBlureRate != 0.0f) { mDoGph_gInf_c::setBlureRate(mBlureRate); mDoGph_gInf_c::onBlure(); } else { mDoGph_gInf_c::offBlure(); } return 1; } /* 8062FBCC-8062FBEC 00084C 0020+00 1/0 0/0 0/0 .text daB_YO_Draw__FP8daB_YO_c */ static int daB_YO_Draw(daB_YO_c* i_this) { return i_this->draw(); } /* 8062FBEC-8062FC08 00086C 001C+00 0/0 0/0 4/4 .text onIceBreak__8daB_YO_cFUs */ void daB_YO_c::onIceBreak(u16 param_0) { mIceBreak |= (1 << param_0); } /* 8062FC08-8062FE0C 000888 0204+00 4/4 0/0 0/0 .text setBck__8daB_YO_cFiUcff */ void daB_YO_c::setBck(int i_anm, u8 i_attr, f32 i_morf, f32 i_rate) { J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes("B_YO", yo_demo_bck_idx[i_anm]); mpYetaMorf->setAnm(bck, i_attr, i_morf, i_rate, 0.0f, -1.0f); J3DModelData* model_data = mpYetaMorf->getModel()->getModelData(); mpYetaBtkAnm->remove(model_data); int btk_idx = yo_demo_btk_idx[i_anm]; if (btk_idx != 0xff) { field_0xfcd = true; J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_YO", btk_idx); mpYetaBtkAnm->init(model_data, btk, TRUE, i_attr, i_rate, 0, -1); } else { field_0xfcd = false; } mpYetaBtpAnm->remove(model_data); J3DAnmTexPattern* btp = (J3DAnmTexPattern*)dComIfG_getObjectRes("B_YO", yo_demo_btp_idx[i_anm]); mpYetaBtpAnm->init(model_data, btp, TRUE, i_attr, i_rate, 0, -1); int brk_idx; if (i_anm == ANM_ANGRY) { field_0xfcc = true; brk_idx = 0x25; } else if (i_anm == ANM_ANGRY_WAIT) { brk_idx = 0x26; } else if (field_0xfcc) { brk_idx = 0x24; } else { brk_idx = 0x25; } J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_YO", brk_idx); mpYetaBrkAnm->init(model_data, brk, TRUE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1); } /* 8062FE0C-8062FE18 000A8C 000C+00 11/11 0/0 0/0 .text setActionMode__8daB_YO_cFii */ void daB_YO_c::setActionMode(int i_action, int i_mode) { mAction = i_action; mMode = i_mode; } /* 8062FE18-806300F4 000A98 02DC+00 1/1 0/0 0/0 .text damage_check__8daB_YO_cFv */ void daB_YO_c::damage_check() { mCcStts.Move(); mCcIronStts.Move(); if (mAction == ACT_CHASE && mAtCyl.ChkAtHit() && fopAcM_GetName(mAtCyl.GetAtHitObj()->GetAc()) == PROC_ALINK) { reflectFreeMove(); mActionTimer2 = 90; } if (mIFrameTimer == 0) { mAtInfo.mpCollider = NULL; if (mTgSph[0].ChkTgHit()) { mAtInfo.mpCollider = mTgSph[0].GetTgHitObj(); } else if (mTgSph[1].ChkTgHit()) { mAtInfo.mpCollider = mTgSph[1].GetTgHitObj(); } else if (mTgSph[2].ChkTgHit()) { mAtInfo.mpCollider = mTgSph[2].GetTgHitObj(); } if (mAtInfo.mpCollider != NULL) { if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_UNK)) { mIFrameTimer = 20; } else { mIFrameTimer = 10; } if (mAtInfo.mAttackPower <= 1) { mIFrameTimer = 10; } if (mAction == ACT_CHASE) { def_se_set(&mCreatureSound, mAtInfo.mpCollider, 0x2A, this); } } } if (mIFrameIronTimer == 0) { mAtInfo.mpCollider = NULL; if (mTgIronSph[0].ChkTgHit()) { mAtInfo.mpCollider = mTgIronSph[0].GetTgHitObj(); } else if (mTgIronSph[1].ChkTgHit()) { mAtInfo.mpCollider = mTgIronSph[1].GetTgHitObj(); } else if (mTgIronSph[2].ChkTgHit()) { mAtInfo.mpCollider = mTgIronSph[2].GetTgHitObj(); } if (mAtInfo.mpCollider != NULL) { cc_at_check(this, &mAtInfo); health = 100; mIFrameIronTimer = 20; if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_IRON_BALL)) { if (mAction == ACT_CHASE) { mChillKey = 0; if (mTgIronSph[0].ChkTgShield()) { dScnPly_c::setPauseTimer(0); } else if (mModelNo >= 6) { setActionMode(ACT_SERIOUS_DEMO, 0); } else { dComIfGs_onOneZoneSwitch(6, fopAcM_GetRoomNo(this)); setActionMode(ACT_CHASE, 1); } } else if (!mTgIronSph[0].ChkTgShield()) { dComIfGs_onOneZoneSwitch(8, fopAcM_GetRoomNo(this)); mLastPhaseDamage++; if (mLastPhaseDamage >= 3) { mLastPhaseDamage = 3; setIcicleOperate(10); setActionMode(ACT_DEATH, 0); } else { setIcicleOperate(9); setActionMode(ACT_DAMAGE, 0); } } } } } } /* 806300F4-8063022C 000D74 0138+00 1/1 0/0 0/0 .text setBreakFrizad__8daB_YO_cFv */ void daB_YO_c::setBreakFrizad() { cXyz pos; csXyz angle; if (mModelNo >= 3) { angle.set(0, shape_angle.y + cM_rndFX(4000.0f), 0); pos.set(current.pos.x + cM_rndF(50.0f), current.pos.y + (cM_rndF(100.0f) + 100.0f), current.pos.z + cM_rndF(50.0f)); fopAcM_createChild(PROC_E_FZ, fopAcM_GetID(this), mFreezardNo << 8 | 3, &pos, fopAcM_GetRoomNo(this), &angle, NULL, -1, NULL); } } /* 8063022C-806302B4 000EAC 0088+00 6/6 0/0 0/0 .text setIcicleOperate__8daB_YO_cFi */ void daB_YO_c::setIcicleOperate(int i_operate) { for (int i = 0; i < 10; i++) { if (mIcicleID[i] != -1) { daB_YOI_c* icicle; fopAcM_SearchByID(mIcicleID[i], (fopAc_ac_c**)&icicle); if (icicle != NULL) { icicle->setOperate(i_operate); } else { mIcicleID[i] = -1; } } } } /* 806302B4-80630330 000F34 007C+00 2/2 0/0 0/0 .text setIcicleSubNumber__8daB_YO_cFv */ void daB_YO_c::setIcicleSubNumber() { int sub_number = 0; for (int i = 0; i < 10; i++) { if (mIcicleID[i] != -1) { daB_YOI_c* icicle; fopAcM_SearchByID(mIcicleID[i], (fopAc_ac_c**)&icicle); if (icicle != NULL) { icicle->setSubNumber(sub_number); sub_number++; } } } } /* 80630330-8063040C 000FB0 00DC+00 1/1 0/0 0/0 .text setWindowBreakEffect__8daB_YO_cFi */ void daB_YO_c::setWindowBreakEffect(int param_0) { static s16 yo_window_angle[6] = {0xC000, 0xE000, 0x6000, 0x2000, 0x4000, 0x0000}; static u16 madoware_effect_id[4] = {0x87C1, 0x87C2, 0x87C3, 0x87C4}; csXyz angle(0, yo_window_angle[param_0], 0); cXyz pos(0.0f, 0.0f, 0.0f); for (int i = 0; i < 4; i++) { dComIfGp_particle_set(madoware_effect_id[i], &pos, &tevStr, &angle, NULL); } } /* 8063040C-806305B8 00108C 01AC+00 1/1 0/0 0/0 .text setHensinEffect__8daB_YO_cFv */ void daB_YO_c::setHensinEffect() { static u16 hensin_effect_id[4] = {0x87B1, 0x87B2, 0x87B3, 0x87B4}; cXyz scale(mHensinScale, mHensinScale, mHensinScale); cXyz pos; mDoMtx_stack_c::copy(mpYetaMorf->getModel()->getAnmMtx(2)); mDoMtx_stack_c::multVecZero(&pos); pos.z += (mHensinScale - 1.0f) * 10.0f; for (int i = 0; i < 4; i++) { mHensinKey[i] = dComIfGp_particle_set(mHensinKey[i], hensin_effect_id[i], &pos, &tevStr, &shape_angle, NULL, 0xff, NULL, -1, NULL, NULL, NULL); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mHensinKey[i]); if (emitter != NULL) { scale.set(mHensinScale, mHensinScale, mHensinScale); if (i == 0) { scale = scale * 2.0f; } emitter->setGlobalScale(JGeometry::TVec3(scale)); } } } /* 806305B8-806306F0 001238 0138+00 2/2 0/0 0/0 .text setLandingEffect__8daB_YO_cFf */ void daB_YO_c::setLandingEffect(f32 i_scale) { static u16 l_landing_effect_id[6] = {0x86DC, 0x86DD, 0x86DE, 0x86DF, 0x86E0, 0x86E1}; cXyz pos = current.pos; if (mModelNo == 7) { pos.y -= 230.0f; } cXyz scale(i_scale, i_scale, i_scale); for (int i = 0; i < 6; i++) { dComIfGp_particle_set(l_landing_effect_id[i], &pos, &tevStr, &shape_angle, &scale); } pos.set(0.0f, 0.0f, 0.0f); dComIfGp_particle_set(0x86E2, &pos, &tevStr, &shape_angle, NULL); } /* 806306F0-8063089C 001370 01AC+00 4/4 0/0 0/0 .text setBreakIceEffect__8daB_YO_cFv */ void daB_YO_c::setBreakIceEffect() { static u16 break_ice_effect_id[12] = { 0x86B4, 0x86B5, 0x879C, 0x879F, 0x87A0, 0x87A1, 0x87A3, 0x87A4, 0x87A5, 0x87A7, 0x87A8, 0x87A9, }; cXyz scale; cXyz pos = current.pos; int idx; if (mModelNo == 7) { pos.y -= 230.0f; scale.set(1.0f, 1.0f, 1.0f); idx = mLastPhaseDamage * 3; mCreatureSound.startCreatureSound(Z2SE_EN_YO_BREAK3, 0, -1); } else { scale.set(l_HIO.mScale[mModelNo], l_HIO.mScale[mModelNo], l_HIO.mScale[mModelNo]); idx = 0; if (mModelNo < 4) { mCreatureSound.startCreatureSound(Z2SE_EN_YO_BREAK1, 0, -1); } else { mCreatureSound.startCreatureSound(Z2SE_EN_YO_BREAK2, 0, -1); } } for (int i = 0; i < 3; i++) { dComIfGp_particle_set(break_ice_effect_id[idx + i], &pos, &tevStr, &shape_angle, &scale); } } /* 8063089C-80630A9C 00151C 0200+00 3/3 0/0 0/0 .text setWallHitEffect__8daB_YO_cFv */ void daB_YO_c::setWallHitEffect() { static u16 wall_hit_effect_id[6] = { 0x879D, 0x879E, 0x879D, 0x879E, 0x87AA, 0x87AB, }; cXyz scale; cXyz pos = current.pos; if (mModelNo == 7) { pos.y -= 230.0f; scale.set(1.0f, 1.0f, 1.0f); int idx = (mLastPhaseDamage - 1) * 2; mCreatureSound.startCreatureSound(Z2SE_EN_YO_HIT_WALL, 0, -1); for (int i = 0; i < 2; i++) { dComIfGp_particle_set(wall_hit_effect_id[idx + i], &pos, &tevStr, &shape_angle, &scale); } } else { scale.set(l_HIO.mScale[mModelNo], l_HIO.mScale[mModelNo], l_HIO.mScale[mModelNo]); if (mModelNo < 4) { mCreatureSound.startCreatureSound(Z2SE_EN_YO_BOUND1, 0, -1); } else { mCreatureSound.startCreatureSound(Z2SE_EN_YO_BOUND2, 0, -1); } dComIfGp_particle_set(0x87BF, &pos, &tevStr, &shape_angle, &scale); } } /* 80630A9C-80630BF0 00171C 0154+00 3/3 0/0 0/0 .text setChillEffect__8daB_YO_cFv */ void daB_YO_c::setChillEffect() { static u16 chill_effect_id[4] = {0x86DA, 0x87A2, 0x87A6, 0x87AC}; cXyz scale; cXyz pos = current.pos; int idx; if (mModelNo == 7) { pos.y -= 230.0f; scale.set(1.0f, 1.0f, 1.0f); idx = mLastPhaseDamage + 1; } else { scale.set(l_HIO.mScale[mModelNo], l_HIO.mScale[mModelNo], l_HIO.mScale[mModelNo]); idx = 0; } mChillKey = dComIfGp_particle_set(mChillKey, chill_effect_id[idx], &pos, &tevStr, &shape_angle, &scale, 0xff, NULL, -1, NULL, NULL, NULL); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mChillKey); if (emitter != NULL) { emitter->setGlobalScale(JGeometry::TVec3(scale)); } } /* 80630BF0-80630CA0 001870 00B0+00 1/1 0/0 0/0 .text setApperEffect__8daB_YO_cFv */ void daB_YO_c::setApperEffect() { cXyz pos = current.pos; pos.y -= 230.0f; mAppearKey = dComIfGp_particle_set(mAppearKey, 0x87AD, &pos, &tevStr, &shape_angle, NULL, 0xff, NULL, -1, NULL, NULL, NULL); } /* 80630CA0-80630D6C 001920 00CC+00 1/1 0/0 0/0 .text setApperEffect2__8daB_YO_cFv */ void daB_YO_c::setApperEffect2() { static u16 apper_effect_id[2] = {0x87AE, 0x87AF}; cXyz pos = current.pos; pos.y -= 230.0f; for (int i = 0; i < 2; i++) { dComIfGp_particle_set(apper_effect_id[i], &pos, &tevStr, &shape_angle, NULL); } } /* 80630D6C-80630DD8 0019EC 006C+00 1/1 0/0 0/0 .text s_frizad_delete__FPvPv */ static void* s_frizad_delete(void* param_0, void* param_1) { if (fopAcM_IsActor(param_0) && !fpcM_IsCreating(fopAcM_GetID(param_0)) && fopAcM_GetName(param_0) == PROC_E_FZ) { static_cast(param_0)->demoDelete(); } return NULL; } /* 80630DD8-80630E3C 001A58 0064+00 1/1 0/0 0/0 .text demo_skip__8daB_YO_cFi */ void daB_YO_c::demo_skip(int param_0) { cDmr_SkipInfo = 1; dStage_changeScene(0, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); Z2GetAudioMgr()->subBgmStop(); } /* 80630E3C-80630E70 001ABC 0034+00 1/1 0/0 0/0 .text DemoSkipCallBack__8daB_YO_cFPvi */ int daB_YO_c::DemoSkipCallBack(void* i_this, int param_1) { if (i_this != NULL) { static_cast(i_this)->demo_skip(param_1); return 1; } return 0; } /* 80630E70-80630EAC 001AF0 003C+00 1/1 0/0 0/0 .text setYoMessage__8daB_YO_cFi */ void daB_YO_c::setYoMessage(int i_msgIdx) { mMsgIdx = i_msgIdx; mMsgPcID = fopMsgM_messageSet(i_msgIdx, 1000); } /* 80630EAC-80630F28 001B2C 007C+00 1/1 0/0 0/0 .text doYoMessage__8daB_YO_cFv */ int daB_YO_c::doYoMessage() { if (mpMsg != NULL) { if (mpMsg->mode == 0xE) { mpMsg->mode = 0x10; } else if (mpMsg->mode == 0x12) { mpMsg->mode = 0x13; mMsgPcID = 0xFFFFFFFF; return 1; } } else { mpMsg = fopMsgM_SearchByID(mMsgPcID); } return 0; } /* 80630F28-80632598 001BA8 1670+00 2/1 0/0 0/0 .text executeOpening__8daB_YO_cFv */ void daB_YO_c::executeOpening() { camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); cXyz cam_pos, player_pos, ystone_pos; daPy_py_c* player = daPy_getPlayerActorClass(); obj_ystone_class* ystone; f32 dVar12; switch (mMode) { case 0: if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); eventInfo.onCondition(dEvtCnd_CANDEMO_e); return; } Z2GetAudioMgr()->seStart(Z2SE_EN_YO_DEMO_OP1, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); fopAcM_OffStatus(this, 0x4000); field_0xfb5 = 3; setBck(ANM_WAIT_A, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); mMode = 1; gravity = 0.0f; current.pos.set(100.0f, 0.0f, 1000.0f); speed.y = 0.0f; camera->mCamera.Stop(); camera->mCamera.SetTrimSize(3); mCamCenter = current.pos; mCamCenter.y = 180.0f; mCamEye.set(0.0f, 250.0f, 1450.0f); mCamFovY = 68.0f; current.angle.y = -0x1000; shape_angle.y = -0x1000; setYoMessage(0x234E); ystone_pos.set(0.0f, 0.0f, 3000.0f); mYstoneID = fopAcM_create(PROC_OBJ_YSTONE, 5, &ystone_pos, fopAcM_GetRoomNo(this), NULL, NULL, 0xff); Z2GetAudioMgr()->subBgmStart(Z2BGM_BOSS_SNOWWOMAN_D1); mAcch.CrrPos(dComIfG_Bgsp()); break; case 1: mCamCenter = current.pos; mCamCenter.y = 180.0f; mCamEye.set(0.0f, 250.0f, 1450.0f); if (doYoMessage() == 1) { setBck(ANM_WALK, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); mMode = 2; mActionTimer = 90; mActionTimer2 = 300; } break; case 2: if (mActionTimer == 30) { player->changeOriginalDemo(); player->changeDemoMoveAngle(0x8000); player_pos.set(-30.0f, 0.0f, -1550.0f); player->changeDemoPos0(&player_pos); player->changeDemoMode(2, 0, 0, 0); } if (mActionTimer == 1) { player_pos.set(-30.0f, 2.0f, -700.0f); player->setPlayerPosAndAngle(&player_pos, 0x8000, 0); } if (mActionTimer == 0) { current.pos.set(100.0f, 0.0f, -1250.0f); mCamEye.set(-30.0f, 260.0f, -1574.0f); mMode = 3; mActionTimer2 = 183; mActionTimer = 75; cam_pos.set(50.0f, 0.0f, -1650.0f); field_0xf80 = cLib_targetAngleY(¤t.pos, &cam_pos); } // fallthrough case 3: if (mActionTimer != 0) { mCamCenter = current.pos; mCamCenter.y = 180.0f; } else { cam_pos.set(120.0f, 120.0f, -2032.0f); cLib_chasePos(&mCamCenter, cam_pos, 4.0f); } dVar12 = 3.0f; cLib_chaseF(&speedF, 3.0f, 0.5f); cam_pos.set(50.0f, 0.0f, -1650.0f); cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(¤t.pos, &cam_pos), 0x20, 0x200, 0x40); shape_angle.y = current.angle.y; if (cam_pos.abs(current.pos) < dVar12) { current.pos = cam_pos; speedF = 0.0f; shape_angle.y = field_0xf80; player->changeDemoMode(20, 0, 0, 0); setBck(ANM_WAIT_A, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f); mMode = 4; } break; case 4: cam_pos.set(120.0f, 120.0f, -2032.0f); cLib_chasePos(&mCamCenter, cam_pos, 4.0f); if (mActionTimer2 == 0) { mMode = 5; mActionTimer = 30; mActionTimer2 = 150; } break; case 5: cam_pos.set(120.0f, 120.0f, -2032.0f); cLib_chasePos(&mCamCenter, cam_pos, 4.0f); if (mActionTimer == 0) { mMode = 6; setYoMessage(0x234F); mActionTimer = 30; } break; case 6: if (mActionTimer == 0) { cLib_chaseF(&mCamFovY, 45.0f, 0.1f); } cam_pos.set(120.0f, 120.0f, -2032.0f); cLib_chasePos(&mCamCenter, cam_pos, 4.0f); if (mActionTimer2 == 0) { player->changeDemoMode(1, 0, 0, 0); } if (doYoMessage() == 1) { mMode = 7; if (mActionTimer2 > 30) { mActionTimer = mActionTimer2; } else { mActionTimer = 30; } } break; case 7: cLib_chaseF(&mCamFovY, 45.0f, 0.1f); cam_pos.set(120.0f, 120.0f, -2032.0f); cLib_chasePos(&mCamCenter, cam_pos, 4.0f); if (mActionTimer2 == 0) { player->changeDemoMode(1, 0, 0, 0); } if (mActionTimer == 15) { setBck(ANM_TALK_A, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f); } if (mActionTimer == 0) { setYoMessage(0x2350); mMode = 8; mActionTimer = 60; } break; case 8: cLib_chaseF(&mCamFovY, 45.0f, 0.1f); if (mActionTimer == 0) { player->changeDemoMode(60, 0, 0, 0); } cLib_chaseF(&mCamFovY, 45.0f, 0.1f); cam_pos.set(120.0f, 120.0f, -2032.0f); cLib_chasePos(&mCamCenter, cam_pos, 4.0f); if (doYoMessage() == 1) { mMode = 9; mActionTimer = 30; player->changeDemoMode(1, 0, 0, 0); } break; case 9: cLib_chaseF(&mCamFovY, 45.0f, 0.1f); cam_pos.set(120.0f, 120.0f, -2032.0f); cLib_chasePos(&mCamCenter, cam_pos, 4.0f); if (mActionTimer == 0) { setYoMessage(0x2351); mMode = 10; } break; case 10: if (doYoMessage() == 1) { mActionTimer = 150; setBck(ANM_TO_TALK_B, J3DFrameCtrl::EMode_NONE, 15.0f, 1.0f); mMode = 11; mActionTimer2 = 10; mColorMode = 1; mColBlend = 0.0f; } break; case 11: if (mpYetaMorf->isStop()) { setBck(ANM_TALK_B, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); mMode = 12; setYoMessage(0x235F); } if (mActionTimer2 == 1) { player->changeDemoMode(1, 0, 0, 0); } break; case 12: if (doYoMessage() == 1) { mActionTimer = 150; cam_pos.set(51.0f, 207.0f, -2082.0f); mCamCenterSpeed = cam_pos.abs(mCamCenter) / 120.0f; cam_pos.set(51.0f, 207.0f, -1562.0f); mCamEyeSpeed = cam_pos.abs(mCamEye) / 120.0f; mMode = 13; } break; case 13: cam_pos.set(51.0f, 207.0f, -2082.0f); cLib_chasePos(&mCamCenter, cam_pos, mCamCenterSpeed); cam_pos.set(51.0f, 207.0f, -1562.0f); cLib_chasePos(&mCamEye, cam_pos, mCamEyeSpeed); if (mActionTimer == 0) { setBck(ANM_ANGRY, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); mMode = 15; player->changeDemoMode(1, 0, 0, 0); } break; case 15: cam_pos.set(51.0f, 207.0f, -2082.0f); cLib_chasePos(&mCamCenter, cam_pos, mCamCenterSpeed); cam_pos.set(51.0f, 207.0f, -1562.0f); cLib_chasePos(&mCamEye, cam_pos, mCamEyeSpeed); if (mpYetaMorf->checkFrame(20.0f)) { dComIfGp_getVibration().StartQuake(4, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); mQuakeTimer = 30; } if (mpYetaMorf->checkFrame(29.0f)) { mColorMode = 2; mColBlend = 1.0f; } if (mpYetaMorf->isStop()) { mMode = 16; setYoMessage(0x2352); setBck(ANM_ANGRY_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); } break; case 16: if (doYoMessage() == 1) { mActionTimer = 30; mMode = 17; mActionTimer = 30; } break; case 17: if (mActionTimer == 0) { mColorMode = 3; mColBlend = 1.0f; setBck(ANM_WAIT_B, J3DFrameCtrl::EMode_LOOP, 16.0f, 1.0f); shape_angle.y = 0; current.angle.y = 0; mMode = 20; mCamCenter.set(1339.0f, 2992.0f, 196.0f); mCamEye.set(1172.0f, 3086.0f, 582.0f); mCamFovY = 68.0f; mActionTimer = 60; mHensinScale = 1.0f; Z2GetAudioMgr()->seStart(Z2SE_EN_YO_DEMO_OP2, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); } break; case 20: if (mActionTimer == 50) { setWindowBreakEffect(0); } if (mActionTimer == 30) { setWindowBreakEffect(1); } if (mActionTimer == 0) { daMirror_c::remove(); mMode = 21; mCamCenter.set(-700.0f, 2992.0f, 1046.0f); mCamEye.set(-333.0f, 3086.0f, 1251.0f), mActionTimer = 60; setWindowBreakEffect(5); } break; case 21: if (mActionTimer == 55) { setWindowBreakEffect(4); } if (mActionTimer == 45) { setWindowBreakEffect(2); } if (mActionTimer == 30) { setWindowBreakEffect(3); } if (mActionTimer == 0) { dComIfGs_onSwitch(mSwNo, fopAcM_GetRoomNo(this)); mMode = 22; setBck(ANM_FLOAT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); current.pos.set(0.0f, 0.0f, -500.0f); mCamEye.set(0.0f, 50.0f, 500.0f); mCamCenter.set(0.0f, 500.0f, 400.0f); mActionTimer = 230; player_pos.set(-200.0f, 2.0f, 200.0f); player->setPlayerPosAndAngle(&player_pos, 0x8000, 0); fopAcM_SearchByID(mYstoneID, (fopAc_ac_c**)&ystone); if (ystone != NULL) { mYstonePos.set(0.0f, 250.0f, -1700.0f); ystone->setCurrentPos(mYstonePos); ystone->setScale(1.0f); ystone->setShapeAngle(csXyz(0, 0x8000, 0)); } } break; case 22: fopAcM_SearchByID(mYstoneID, (fopAc_ac_c**)&ystone); if (ystone != NULL) { if (mActionTimer < 210) { ystone_pos.set(current.pos.x, current.pos.y + 300.0f, current.pos.z - 100.0f); cLib_addCalcPos2(&mYstonePos, ystone_pos, 0.05f, 30.0f); ystone->setCurrentPos(mYstonePos); ystone->setScale(1.0f); ystone->setShapeAngle(csXyz(0, 0x8000, 0)); } else if (mActionTimer & 2) { mYstonePos.y += 3.0f; } else { mYstonePos.y -= 3.0f; } } if (mActionTimer < 180) { setHensinEffect(); } if (mActionTimer == 160) { player->changeDemoMode(23, 0, 0, 0); } cam_pos = current.pos; cam_pos.y += 300.0f; cLib_addCalcPos2(&mCamCenter, cam_pos, 0.1f, 10.0f); if (mActionTimer == 15) { setWindowBreakEffect(0); setWindowBreakEffect(1); setWindowBreakEffect(2); setWindowBreakEffect(3); setWindowBreakEffect(4); setWindowBreakEffect(5); } if (mActionTimer == 0) { mMode = 23; mActionTimer = 310; field_0xf80 = 0x4000; field_0xf64 = 0.0f; mYstoneScale = 1.0f; } break; case 23: if (mActionTimer > 90) { cLib_chaseF(&mHensinScale, 9.0f, 0.034f); cLib_chaseF(&mCamEye.z, 1500.0f, 4.0f); setHensinEffect(); } else if (mActionTimer < 60) { field_0xf80 += 0x3000; cLib_chaseF(&field_0xf64, 10.0f, 0.5f); current.pos.y += 10.0f; current.pos.x = field_0xf64 * cM_ssin(field_0xf80); } fopAcM_SearchByID(mYstoneID, (fopAc_ac_c**)&ystone); if (ystone != NULL) { ystone_pos.set(current.pos.x, current.pos.y + 300.0f, current.pos.z - 100.0f); ystone->setCurrentPos(ystone_pos); ystone->setScale(mYstoneScale); ystone->setShapeAngle(csXyz(0, 0x8000, 0)); } cam_pos.set(0.0f, current.pos.y + 1000.0f, current.pos.z); cLib_addCalcPos2(&mCamCenter, cam_pos, 0.1f, 10.0f); if (current.pos.y < 1000.0f) { cLib_chaseF(&speed.y, 10.0f, 0.2f); } else { cLib_chaseF(&speed.y, 0.0f, 0.2f); } if (mActionTimer <= 210) { if (mActionTimer == 210) { field_0xfd1 = true; mpYetaWhiteBrkAnm->setPlaySpeed(1.0f); } cLib_chaseF(&mYstoneScale, 0.0f, 0.01f); } if (mActionTimer <= 130) { if (mActionTimer == 130) { field_0xfb5 = 0; mScale = 0.8f; field_0xfd1 = false; mpYetaWhiteBrkAnm->remove(mpYetaMorf->getModel()->getModelData()); } cLib_chaseF(&mScale, 1.0f, 0.005f); } if (mActionTimer == 0) { current.pos.x = 0.0f; maxFallSpeed = -200.0f; speed.y = -200.0f; mMode = 24; player_pos.set(-200.0f, 2.0f, 580.0f); player->setPlayerPosAndAngle(&player_pos, 0, 0); mActionTimer2 = 0; fopAcM_SearchByID(mYstoneID, (fopAc_ac_c**)&ystone); if (ystone != NULL) { ystone_pos.set(0.0f, 0.0f, 3000.0f); ystone->setCurrentPos(ystone_pos); ystone->setScale(1.0f); ystone->setShapeAngle(csXyz(0, 0x8000, 0)); } } break; case 24: cLib_chaseF(&speed.y, -200.0f, 5.0f); cam_pos = current.pos; cLib_addCalcPos2(&mCamCenter, cam_pos, 1.0f, 170.0f); if (mActionTimer2 == 0 && current.pos.y < 300.0f) { mActionTimer2 = 31; player->changeDemoMode(40, 0, 0, 0); } if (mAcch.ChkGroundHit()) { mRoomType = 1; mColorMode = 4; mColBlend = 0.0f; if (mpRoomNormalBgW != NULL) { dComIfG_Bgsp().Release(mpRoomNormalBgW); } if (mpRoomArenaBgW != NULL) { dComIfG_Bgsp().Regist(mpRoomArenaBgW, this); } mMode = 25; dComIfGp_getVibration().StartQuake(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); mQuakeTimer = 30; setLandingEffect(7.0f); Z2GetAudioMgr()->seStart(Z2SE_EN_YO_VIBE_ROOM, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); mActionTimer = 60; mpFurnitureModel = NULL; } break; case 25: cLib_chaseF(&mCamEye.y, 20.0f, 1.0f); if (mActionTimer2 != 0) { if (mActionTimer2 == 11) { player->changeDemoMoveAngle(0x8000); player->changeDemoMode(5, 0, 0, 0); } else if (mActionTimer2 == 1) { player->changeDemoMode(34, 0, 0, 0); } } if (mActionTimer > 57) { cam_pos = current.pos; cLib_addCalcPos2(&mCamCenter, cam_pos, 1.0f, 170.0f); } else { cam_pos = current.pos; cam_pos.y += 600.0f; cLib_addCalcPos2(&mCamCenter, cam_pos, 0.1f, 20.0f); } if (mActionTimer == 0) { fopMsgM_messageSetDemo(0x483); mActionTimer = 150; mMode = 27; } break; case 27: cam_pos = current.pos; cam_pos.y += 1300.0f; cLib_addCalcPos2(&mCamCenter, cam_pos, 0.1f, 7.0f); if (mActionTimer == 0) { mCamCenter.set(-200.0f, 170.0f, 1050.0f); mCamEye.set(-200.0f, 120.0f, 1350.0f); camera->mCamera.Reset(mCamCenter, mCamEye); camera->mCamera.Start(); camera->mCamera.SetTrimSize(0); dComIfGp_event_reset(); field_0xfb5 = 0; setActionMode(ACT_CHASE, 0); Z2GetAudioMgr()->bgmStart(Z2BGM_BOSS_SNOWWOMAN_0, 0, 0); return; } break; } camera->mCamera.Set(mCamCenter, mCamEye, mCamFovY, 0); dComIfGp_getEvent().onSkipFade(); dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 0); } /* 80639D0C-80639D2C 0002AC 0020+00 1/1 0/0 0/0 .data yo_max_bound_speed */ static f32 yo_max_bound_speed[8] = {10.0f, 12.0f, 15.0f, 18.0f, 21.0f, 24.0f, 27.0f, 30.0f}; /* 80632598-80632660 003218 00C8+00 1/1 0/0 0/0 .text reflectFreeMove__8daB_YO_cFv */ void daB_YO_c::reflectFreeMove() { if (cM_rnd() < 0.5f) { mAngleSpeed = 0x200; } else { mAngleSpeed = -0x200; } mFreeMoveMode = 1; current.angle.y = fopAcM_searchPlayerAngleY(this) + cM_rndFX(8000.0f) + 0x8000; speedF = 8.0f; } /* 80632660-8063290C 0032E0 02AC+00 4/4 0/0 0/0 .text calcFreeMove__8daB_YO_cFf */ void daB_YO_c::calcFreeMove(f32 param_0) { cLib_chaseF(&speedF, param_0, 0.05f); switch (mFreeMoveMode) { case 0: cLib_chaseAngleS(&mAngleSpeed, 0x100, 8); cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 0x20, mAngleSpeed, 8); break; case 1: if (cLib_chaseAngleS(&mAngleSpeed, 0, 8)) { mAngleSpeed = 0x10; mFreeMoveMode = 0; } else { shape_angle.y += mAngleSpeed; } break; case 2: cLib_chaseAngleS(&mAngleSpeed, 0x800, 0x40); shape_angle.y += mAngleSpeed; break; case 3: if (cLib_chaseAngleS(&mAngleSpeed, 0x200, 0x40)) { mFreeMoveMode = 1; } else { shape_angle.y += mAngleSpeed; } break; } if (mAcch.ChkWallHit()) { dComIfGp_getVibration().StartShock(8 - mModelNo, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); speedF *= (l_HIO.mReboundSpeedRatio + cM_rndF(0.5f)); if (speedF > yo_max_bound_speed[mModelNo] + 3.0f * l_HIO.mReboundSpeedMax) { speedF = yo_max_bound_speed[mModelNo] + 3.0f * l_HIO.mReboundSpeedMax; } if (mFreeMoveMode != 2) { if (mFreeMoveMode == 0) { if (cM_rnd() < 0.5f) { mAngleSpeed = 0x200; } else { mAngleSpeed = -0x200; } } else if (mDamageTimer == 0) { if (mAngleSpeed > 0) { mAngleSpeed = 0x200; } else { mAngleSpeed = -0x200; } } else { if (mAngleSpeed > 0) { mAngleSpeed += 0x200; if (mAngleSpeed > 0x600) { mAngleSpeed = 0x600; } } else { mAngleSpeed -= 0x200; if (mAngleSpeed < -0x600) { mAngleSpeed = -0x600; } } } mFreeMoveMode = 1; } mWallAngle = mAcchCir.GetWallAngleY(); setReflectAngle(); } } /* 8063290C-806329CC 00358C 00C0+00 2/2 0/0 0/0 .text setReflectAngle__8daB_YO_cFv */ void daB_YO_c::setReflectAngle() { current.angle.y += (s16)cM_rndFX(4000.0f); s16 angle_diff = current.angle.y - mWallAngle; if (abs(angle_diff) > 0x4800) { current.angle.y = mWallAngle * 2 - (current.angle.y + 0x8000); } else if (angle_diff > 0x3800) { current.angle.y = mWallAngle + 0x3800; } else if (angle_diff < -0x3800) { current.angle.y = mWallAngle - 0x3800; } } /* 80639D2C-80639D48 0002CC 001C+00 0/1 0/0 0/0 .data yo_damage_speed */ static f32 yo_damage_speed[7] = {12.0f, 14.0f, 16.0f, 18.0f, 20.0f, 22.0f, 24.0f}; /* 80639D48-80639D68 0002E8 0020+00 0/1 0/0 0/0 .data yo_chase_speed */ static f32 yo_chase_speed[8] = {3.0f, 4.0f, 5.f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f}; /* 80639D68-80639D84 000308 001C+00 0/1 0/0 0/0 .data yo_damage_timer */ static int yo_damage_timer[7] = {90, 100, 110, 120, 130, 140, 150}; /* 806329CC-806331CC 00364C 0800+00 1/1 0/0 0/0 .text executeChase__8daB_YO_cFv */ void daB_YO_c::executeChase() { mAttentionTimer = 5; if (dComIfGp_checkPlayerStatus0(0, 0x400)) { mTgIronSph[0].OnTgShield(); mTgIronSph[1].OnTgShield(); mTgIronSph[2].OnTgShield(); } else { mTgIronSph[0].OffTgShield(); mTgIronSph[1].OffTgShield(); mTgIronSph[2].OffTgShield(); } switch (mMode) { case 1: setBreakIceEffect(); mModelNo++; if (mModelNo == 4) { fopAcM_SetMtx(this, mpModel[1]->getBaseTRMtx()); mpBtkAnm->remove(mpModel[0]->getModelData()); J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_YO", 0x35); mpBtkAnm->init(mpModel[1]->getModelData(), btk, FALSE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1); } else if (mModelNo == 6) { mpBtkAnm->setFrame(2.0f); } mAcchCir.SetWall(20.0f, 140.0f * l_HIO.mScale[mModelNo]); mFreezardRadius = 130.0f * l_HIO.mScale[mModelNo] + l_HIO.mFreezardRadius; if (cM_rnd() < 0.5f) { mAngleSpeed = 0x600; } else { mAngleSpeed = -0x600; } mFreeMoveMode = 1; current.angle.y = fopAcM_searchPlayerAngleY(this) + cM_rndFX(8000.0f) + 0x8000; speedF = yo_damage_speed[mModelNo] * 1.5f; mDamageTimer = yo_damage_timer[mModelNo]; mActionTimer = yo_damage_timer[mModelNo] + 30; if (mModelNo > 4) { mFreezardAttack = 3; mFreezardTimer = 10; mFreeMoveMode = 3; } // fallthrough case 0: mAtCyl.SetAtMtrl(dCcD_MTRL_NONE); mAtCyl.SetAtSpl(dCcG_At_Spl_UNK_D); mMode = 2; // fallthrough case 2: if (mModelNo < 4) { mCreatureSound.startCreatureSoundLevel(Z2SE_EN_YO_MOVE1, 0, -1); } else { mCreatureSound.startCreatureSoundLevel(Z2SE_EN_YO_MOVE2, 0, -1); } if (mAcch.ChkWallHit()) { setWallHitEffect(); } if (mFreezardAttack == 1 || mFreezardAttack == 2) { if (current.pos.absXZ() < 1200.0f) { cLib_addCalcAngleS(¤t.angle.y, fopAcM_searchPlayerAngleY(this), 0x10, 0x80, 0x10); if (speedF < 30.0f) { cLib_chaseF(&speedF, 10.0f, 0.5f); } else { cLib_chaseF(&speedF, 10.0f, 1.0f); } calcFreeMove(0.0f); } else { cLib_addCalcAngleS(¤t.angle.y, cM_atan2s(-current.pos.x, -current.pos.z), 0x10, 0x40, 8); calcFreeMove(30.0f); if (mAcch.ChkWallHit()) { current.angle.y = cM_atan2s(-current.pos.x, -current.pos.z) + cM_rndF(0x1000); } } } else { if (mActionTimer == 0) { if (mActionTimer2 == 0) { cLib_addCalcAngleS(¤t.angle.y, fopAcM_searchPlayerAngleY(this), 0x20, 0x40, 4); } else { cLib_addCalcAngleS(¤t.angle.y, fopAcM_searchPlayerAngleY(this) + 0x8000, 0x20, 0x40, 4); } } if (mActionTimer < 30) { calcFreeMove(l_HIO.mChaseSpeed + yo_chase_speed[mModelNo]); } else { calcFreeMove(yo_damage_speed[mModelNo]); } } if (mModelNo >= 4) { switch (mFreezardAttack) { case 0: if (mFreezardTimer == 0) { field_0xfae = 0; mFreezardNo = 0; mIceAngleSpeed = 0; mIceAngle = 0; mFreezardAttack = 1; } break; case 1: cLib_chaseAngleS(&mIceAngleSpeed, 0x100, 1); mIceAngle += mIceAngleSpeed; if (speedF <= 30.0f) { if (field_0xfae != 0) { field_0xfae -= 1; } else { field_0xfae = 1; setBreakFrizad(); mFreezardNo++; if (mFreezardNo >= l_HIO.mFreezardNum) { mFreezardAttack = 2; mFreezardTimer = 45; mFreeMoveMode = 2; mFreezardNo = 0; } } } break; case 2: cLib_chaseAngleS(&mIceAngleSpeed, 0x400, 0x20); mIceAngle += mIceAngleSpeed; if (mFreezardTimer == 0) { mFreezardAttack = 3; mFreezardTimer = 10; mFreeMoveMode = 3; current.angle.y = fopAcM_searchPlayerAngleY(this); } break; case 3: if (mFreezardTimer == 0) { mFreezardAttack = 0; mFreezardTimer = 150; speedF = 20.0f; } break; } } } } /* 806331CC-80633EDC 003E4C 0D10+00 1/1 0/0 0/0 .text executeSeriousDemo__8daB_YO_cFv */ void daB_YO_c::executeSeriousDemo() { camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); cXyz pos; switch (mMode) { case 0: if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); eventInfo.onCondition(dEvtCnd_CANDEMO_e); return; } dComIfGs_onOneZoneSwitch(7, fopAcM_GetRoomNo(this)); Z2GetAudioMgr()->bgmStop(0x1e, 0); mAtCyl.OffAtSetBit(); mFreeMoveMode = 0; mMode = 100; gravity = 0.0f; speed.y = 0.0f; camera->mCamera.Stop(); camera->mCamera.SetTrimSize(3); pos.set(300.0f, 2.0f, 700.0f); daPy_getPlayerActorClass() ->setPlayerPosAndAngle(&pos, fopAcM_searchPlayerAngleY(this) + 0x8000, 0); mMode = 100; mCamCenter.set(0.0f, 250.0f, 0.0f); mCamEye.set(0.0f, 150.0f, 500.0f); mCamFovY = 68.0f; setBreakIceEffect(); Z2GetAudioMgr()->seStart(Z2SE_EN_YO_DEMO_MID, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); fpcM_Search(s_frizad_delete, this); field_0xfb5 = 1; setBck(ANM_WAIT_C2, J3DFrameCtrl::EMode_LOOP, 0.0f, 1.0f); mColorMode = 5; mColBlend = 0.0f; return; case 100: speedF = 60.0f; current.pos.set(0.0f, 0.0f, 0.0f); shape_angle.y = 0; current.angle.y = 0x8000; mMode = 1; // fallthrough case 1: fpcM_Search(s_frizad_delete, this); mCamCenter = current.pos; mCamCenter.y += 250.0f; pos.set(0.0f, 150.0f, -1400.0f); cLib_addCalcPos2(&mCamEye, pos, 0.5f, 30.0f); mCreatureSound.startCreatureSoundLevel(Z2SE_EN_YO_MOVE2, 0, -1); if (mAcch.ChkWallHit()) { setChillEffect(); dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); setBreakIceEffect(); mMode = 2; speedF = 0.0f; field_0xfb5 = 3; mActionTimer = 60; current.pos.y = 60.0f; } break; case 2: //! @bug presumably should be == instead of != if (mActionTimer != 0) { setChillEffect(); mActionTimer = 130; mMode = 3; pos.set(0.0f, 200.0f, current.pos.z); mCamCenterSpeed = pos.abs(mCamCenter) / 30.0f; pos.set(0.0f, 200.0f, -1270.0f); mCamEyeSpeed = pos.abs(mCamEye) / 30.0f; } break; case 3: if (mActionTimer < 70) { pos.set(0.0f, 200.0f, current.pos.z); cLib_addCalcPos2(&mCamCenter, pos, 0.5f, mCamCenterSpeed); pos.set(0.0f, 200.0f, -1270.0f); cLib_addCalcPos2(&mCamEye, pos, 0.5f, mCamEyeSpeed); } if (mActionTimer == 0) { shape_angle.y = 0; current.angle.y = 0; setBck(ANM_FLOAT_B, J3DFrameCtrl::EMode_LOOP, 15.0f, 1.0f); mActionTimer = 90; mMode = 5; mCamCenterSpeed = 3.0f; } break; case 5: if (mActionTimer < 80) { if (mActionTimer < 60) { cLib_chaseF(&mCamCenterSpeed, 0.0f, 0.1f); } pos.set(current.pos.x, current.pos.y + 300.0f, current.pos.z); cLib_addCalcPos2(&mCamCenter, pos, 0.5f, mCamCenterSpeed); cLib_chaseF(&speed.y, 5.0f, 0.1f); } if (mActionTimer == 0) { current.pos.set(0.0f, 200.0f, -1200.0f); mCamCenter = current.pos; mCamCenter.y += 120.0f; mCamEye.set(0.0f, 450.0f, -730.0f); mCamFovY = 44.0f; mActionTimer = 120; mMode = 10; shape_angle.y = 0; current.angle.y = 0; } break; case 10: pos.set(current.pos.x, current.pos.y + 120.0f, current.pos.z); cLib_addCalcPos2(&mCamCenter, pos, 0.5f, 5.0f); if (speed.y != 0.0f) { if (current.pos.y < 300.0f) { cLib_chaseF(&speed.y, 5.0f, 0.2f); } else { if (cLib_chaseF(&speed.y, 0.0f, 0.2f)) { setBck(ANM_WAIT_C, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f); } } } if (mActionTimer == 0) { setBck(ANM_SCREAM, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); mMode = 11; } break; case 11: if (mpYetaMorf->checkFrame(20.0f)) { dComIfGp_getVibration().StartQuake(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); mQuakeTimer = 70; mActionTimer = 120; speed.y = 0.0f; mMode = 12; mIceRange = 500.0f; mIceCenterPos = current.pos; mIceCenterPos.y -= 100.0f; mIceAngle = 0; for (int i = 0; i < 10; i++) { mIcicleID[i] = fopAcM_createChild(PROC_B_YOI, fopAcM_GetID(this), i, ¤t.pos, fopAcM_GetRoomNo(this), &shape_angle, NULL, -1, NULL); } mModelNo++; if (mModelNo == 7) { fopAcM_SetMtx(this, mpModel[2]->getBaseTRMtx()); mpBtkAnm->remove(mpModel[1]->getModelData()); } mAcchCir.SetWall(20.0f, 140.0f * l_HIO.mScale[mModelNo]); mFreezardRadius = 130.0f * l_HIO.mScale[mModelNo] + l_HIO.mFreezardRadius; } break; case 12: mActionTimer = 120; if (mpYetaMorf->isStop()) { setBck(ANM_SCREAM_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); mMode = 17; } // fallthrough case 17: pos.set(current.pos.x, current.pos.y + 220.0f, current.pos.z); cLib_addCalcPos2(&mCamCenter, pos, 0.5f, 2.0f); pos.set(0.0f, 420.0f, -270.0f); cLib_addCalcPos2(&mCamEye, pos, 0.5f, 5.0f); cLib_chaseF(&mCamFovY, 68.0f, 0.2f); mIceCenterPos = current.pos; mIceCenterPos.y -= 100.0f; setApperEffect(); if (mActionTimer == 0) { setApperEffect2(); dComIfGp_getVibration().StartShock(6, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); mMode = 18; field_0xfb5 = 0; current.pos.y -= 350.0f; mIceCenterPos.y = current.pos.y - 30.0f; mActionTimer = 90; setBck(ANM_WAIT_D, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); } break; case 18: mCreatureSound.startCreatureSoundLevel(Z2SE_EN_YO_MOVE_FLY, 0, -1); mIceCenterPos = current.pos; mIceCenterPos.y = current.pos.y - 30.0f; if (current.pos.y < 1500.0f) { cLib_chaseF(&speed.y, 10.0f, 0.3f); } else { cLib_chaseF(&speed.y, -10.0f, 0.3f); } if (mActionTimer == 0) { mColorMode = 6; mColBlend = 0.0f; setIcicleOperate(3); setActionMode(ACT_JUMP, 0); Z2GetAudioMgr()->bgmStart(Z2BGM_BOSS_SNOWWOMAN_1, 0, 0); camera->mCamera.Reset(mCamCenter, mCamEye); camera->mCamera.Start(); camera->mCamera.SetTrimSize(0); dComIfGp_event_reset(); } break; } camera->mCamera.Set(mCamCenter, mCamEye, mCamFovY, 0); } /* 80633EDC-80633F50 004B5C 0074+00 1/1 0/0 0/0 .text checkIcecleRevival__8daB_YO_cFv */ u8 daB_YO_c::checkIcecleRevival() { int ret = 0; if (mIceBreak == 0x3ff && field_0xfb2 != 0) { field_0xfb2--; if (field_0xfb2 == 0) { if ((field_0xfb1 & field_0xfb3) == 0) { field_0xfb1 |= field_0xfb3; field_0xfb1 |= field_0xfb3; return 2; } mIceBreak = 0; ret = 1; } } return ret; } /* 80633F50-80634040 004BD0 00F0+00 1/1 0/0 0/0 .text createIcecleRevival__8daB_YO_cFUc */ void daB_YO_c::createIcecleRevival(u8 param_0) { if (param_0 == 2) { setActionMode(ACT_DEMO_REVIVAL, 0); } else { for (int i = 0; i < 10; i++) { daB_YOI_c* icicle = NULL; if (mIcicleID[i] != -1) { fopAcM_SearchByID(mIcicleID[i], (fopAc_ac_c**)&icicle); } if (icicle == NULL) { if (param_0 != 0) { mIcicleID[i] = fopAcM_createChild(PROC_B_YOI, fopAcM_GetID(this), i | 0x10000, ¤t.pos, fopAcM_GetRoomNo(this), &shape_angle, NULL, -1, NULL); } } else { icicle->setOperate(4); } } } } /* 80634040-80634548 004CC0 0508+00 1/1 0/0 0/0 .text executeJump__8daB_YO_cFv */ void daB_YO_c::executeJump() { mIceAngle += mIceAngleSpeed; mCreatureSound.startCreatureSoundLevel(Z2SE_EN_YO_MOVE_FLY, 0, -1); switch (mMode) { case 0: mTgIronSph[0].OffTgShield(); mTgIronSph[1].OffTgShield(); mTgIronSph[2].OffTgShield(); mMode = 1; gravity = 0.0f; field_0xfae = 0; dComIfGs_onSaveDunSwitch(0x14); // fallthrough case 1: cLib_chaseAngleS(&mIceAngleSpeed, 0x400, 0x10); cLib_chaseF(&speed.y, 10.0f, 0.5f); cLib_chaseF(&speedF, 0.0f, 0.1f); if (mAcch.ChkWallHit()) { mWallAngle = mAcchCir.GetWallAngleY(); setReflectAngle(); speedF *= 0.5f; } cLib_chaseAngleS(&mAngleSpeed, 0, 8); if (current.pos.y > 1000.0f) { mTgIronSph[0].OnTgShield(); mTgIronSph[1].OnTgShield(); mTgIronSph[2].OnTgShield(); mMode = 2; mFreeMoveMode = 0; mActionTimer = 180; mAngleSpeed = 0; field_0xfb4 = checkIcecleRevival(); if (field_0xfb4 == 1) { mCreatureSound.startCreatureVoice(Z2SE_EN_YO_V_ICICLE, -1); } } mIceCenterPos = current.pos; break; case 2: cLib_addCalcAngleS(¤t.angle.y, fopAcM_searchPlayerAngleY(this), 0x20, 0x40, 4); calcFreeMove(20.0f); if (mActionTimer < 150.0f) { setIcicleSubNumber(); cLib_chaseAngleS(&mIceAngleSpeed, 0x400, 0x10); daPy_py_c* player = daPy_getPlayerActorClass(); cXyz pos; pos.set(player->current.pos.x, 1500.0f, player->current.pos.z); cLib_chaseF(&mIceCenterSpeed, 100.0f, 1.0f); cLib_chasePos(&mIceCenterPos, pos, mIceCenterSpeed); if (current.pos.y > 1500.0f) { cLib_chaseF(&speed.y, 0.0f, 1.0f); } else { cLib_chaseF(&speed.y, 10.0f, 0.5f); } cLib_chaseF(&mIceRange, 150.0f, 3.0f); if (mActionTimer == 0) { if (mIceCenterPos.absXZ(pos) < 300.0f) { setActionMode(ACT_ATTACK_ICE, 0); return; } } } else { cLib_chaseAngleS(&mIceAngleSpeed, 0x400, 8); mIceCenterPos = current.pos; mIceCenterSpeed = 0.0f; if (field_0xfae == 0) { if (current.pos.y < 1500.0f) { cLib_chaseF(&speed.y, 10.0f, 0.3f); } else { field_0xfae = 1; } } else { if (current.pos.y < 1500.0f) { cLib_chaseF(&speed.y, 10.0f, 0.3f); } else { cLib_chaseF(&speed.y, -10.0f, 0.3f); } } } if (mActionTimer == 150) { createIcecleRevival(field_0xfb4); field_0xfb4 = 0; } break; } } /* 80634548-8063476C 0051C8 0224+00 1/1 0/0 0/0 .text executeAttackIce__8daB_YO_cFv */ void daB_YO_c::executeAttackIce() { mCreatureSound.startCreatureSoundLevel(Z2SE_EN_YO_MOVE_FLY, 0, -1); mIceAngle += mIceAngleSpeed; cXyz player_pos = daPy_getPlayerActorClass()->current.pos; if (current.pos.y < 1200.0f) { cLib_chaseF(&speed.y, 5.0f, 0.5f); } else { cLib_chaseF(&speed.y, -5.0f, 0.5f); } switch (mMode) { case 0: mTgIronSph[0].OnTgShield(); mTgIronSph[1].OnTgShield(); mTgIronSph[2].OnTgShield(); mIceStatus = 0; setIcicleOperate(0); mMode = 1; // fallthrough case 1: setIcicleSubNumber(); cLib_chaseAngleS(&mIceAngleSpeed, 0, 8); cLib_addCalcAngleS(¤t.angle.y, fopAcM_searchPlayerAngleY(this), 0x20, 0x40, 4); calcFreeMove(20.0f); daPy_py_c* player = daPy_getPlayerActorClass(); cXyz pos; pos.set(player->current.pos.x, 1500.0f, player->current.pos.z); cLib_chaseF(&mIceCenterSpeed, 100.0f, 1.0f); cLib_chasePos(&mIceCenterPos, pos, mIceCenterSpeed); cLib_addCalcAngleS(¤t.angle.y, fopAcM_searchPlayerAngleY(this), 0x20, 0x40, 4); cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 0x10, mAngleSpeed, 0x10); if ((mIceStatus | mIceBreak) == 0x3ff) { setActionMode(ACT_ATTACK_YOSE, 0); setIcicleOperate(5); } break; } } /* 8063476C-80634CEC 0053EC 0580+00 1/1 0/0 0/0 .text executeAttackYose__8daB_YO_cFv */ void daB_YO_c::executeAttackYose() { mCreatureSound.startCreatureSoundLevel(Z2SE_EN_YO_MOVE_FLY, 0, -1); cXyz player_pos = daPy_getPlayerActorClass()->current.pos; cXyz ice_pos = player_pos; reviseIceCenterPos(&ice_pos); switch (mMode) { case 0: mIceStatus = 0; mMode = 1; mIceRange = 750.0f; speedF = 0.0f; mActionTimer = 90; mIceCenterSpeed = 0.0f; break; case 1: mIceCenterPos = ice_pos; if (mActionTimer != 0) { cLib_addCalcAngleS(¤t.angle.y, fopAcM_searchPlayerAngleY(this), 0x20, 0x40, 4); calcFreeMove(20.0f); } else { cLib_chaseF(&speedF, 0.0f, 0.5f); mIceCenterPos.y = current.pos.y; cLib_chaseF(&mIceCenterSpeed, 30.0f, 1.0f); cLib_chasePosXZ(¤t.pos, mIceCenterPos, mIceCenterSpeed); } if (current.pos.y < 1200.0f) { cLib_chaseF(&speed.y, 5.0f, 0.5f); } else { cLib_chaseF(&speed.y, -5.0f, 0.5f); } if ((mIceStatus | mIceBreak) == 0x3ff) { mActionTimer = 30; mMode = 2; } break; case 2: mIceCenterPos = ice_pos; cLib_chaseF(&speedF, 0.0f, 0.5f); mIceCenterPos.y = current.pos.y; cLib_chaseF(&unk_F58, 1.0f, 0.02f); cLib_chaseF(&mIceCenterSpeed, 30.0f, 1.0f); cLib_chasePosXZ(&ice_pos, mIceCenterPos, mIceCenterSpeed); if (current.pos.y < 1200.0f) { cLib_chaseF(&speed.y, 5.0f, 0.5f); } else { cLib_chaseF(&speed.y, -5.0f, 0.5f); } if (mActionTimer == 0) { setIcicleOperate(6); mIceStatus = 0; mActionTimer = (int)l_HIO.mGatherTimer + 30; mIceCenterSpeed = 0.0f; mMode = 3; } break; case 3: if ((mIceStatus | mIceBreak) != 0x3ff) { mIceCenterPos = ice_pos; s16 angle = daPy_getPlayerActorClass()->current.angle.y; f32 speed = daPy_getPlayerActorClass()->getSpeedF() * 7.0f; mIceCenterPos.x += speed * cM_ssin(angle); mIceCenterPos.z += speed * cM_scos(angle); if (mActionTimer <= l_HIO.mGatherTimer) { mIceRange = 500.0f; } } else { if (mActionTimer < 30) { dComIfGs_offSaveDunSwitch(0x14); dComIfGs_onSaveDunSwitch(0x16); } } cLib_chaseF(&unk_F58, 1.0f, 0.02f); cLib_chaseF(&speedF, 0.0f, 0.5f); cLib_chaseF(&speed.y, 0.0f, 0.5f); cLib_chaseF(¤t.pos.y, 1200.0f, 5.0f); mIceCenterPos.y = current.pos.y; cLib_chaseF(&mIceCenterSpeed, 50.0f, 1.0f); cLib_chasePosXZ(¤t.pos, mIceCenterPos, mIceCenterSpeed); if (player_pos.absXZ(mIceCenterPos) > mIceRange + 100.0f) { setActionMode(ACT_ATTACK_BODY, 0); } if (mActionTimer == 0) { setActionMode(ACT_ATTACK_BODY, 0); } } } /* 80634CEC-80634E04 00596C 0118+00 1/1 0/0 0/0 .text checkDamageWithIceBreak__8daB_YO_cFv */ void daB_YO_c::checkDamageWithIceBreak() { s16 player_angle = fopAcM_searchPlayerAngleY(this); if (mAtCyl.ChkAtHit() && fopAcM_GetName(mAtCyl.GetAtHitObj()->GetAc()) == PROC_ALINK) { for (int i = 0; i < 10; i++) { s16 angle_diff = mIceAngle + 0x1999 * i - player_angle; if (abs(angle_diff) < 0xccc && mIcicleID[i] != -1) { daB_YOI_c* icicle; fopAcM_SearchByID(mIcicleID[i], (fopAc_ac_c**)&icicle); if (icicle != NULL) { icicle->setOperate(7); } } } daPy_getPlayerActorClass()->setThrowDamage(player_angle, 35.0f, 30.0f, 4, 0, 0); mCamLockOnTimer = 60; } } /* 80634E04-806352C8 005A84 04C4+00 2/1 0/0 0/0 .text executeAttackBody__8daB_YO_cFv */ void daB_YO_c::executeAttackBody() { mIceCenterPos.y = current.pos.y; switch (mMode) { case 0: mIceRange = 500.0f; mTgIronSph[0].OnTgShield(); mTgIronSph[1].OnTgShield(); mTgIronSph[2].OnTgShield(); mAtCyl.SetAtMtrl(dCcD_MTRL_NONE); mAtCyl.SetAtSpl(dCcG_At_Spl_UNK_D); mAtCyl.OnAtSetBit(); mAtCyl.SetAtAtp(4); mAtCyl.OnAtNoTgHitInfSet(); mActionTimer = 30; mMode = 10; // fallthrough case 10: mCreatureSound.startCreatureSoundLevel(Z2SE_EN_YO_FALL, 0, -1); cLib_chaseF(&mIceCenterSpeed, 50.0f, 1.0f); cLib_chasePosXZ(¤t.pos, mIceCenterPos, mIceCenterSpeed); cLib_chaseAngleS(&mAngleSpeed, 0xc00, 0x100); shape_angle.y += mAngleSpeed; cLib_chaseF(&speed.y, 30.0f, 0.5f); if (mActionTimer == 0) { speedF = 0.0f; gravity = -10.0f; mMode = 1; } break; case 1: mCreatureSound.startCreatureSoundLevel(Z2SE_EN_YO_FALL, 0, -1); cLib_chaseAngleS(&mAngleSpeed, 0xc00, 0x100); shape_angle.y += mAngleSpeed; checkDamageWithIceBreak(); if (mAcch.ChkGroundHit()) { unk_F58 = 0.0f; mAngleSpeed = 0; field_0xfac = true; speed.y = 0.0f; speed.y = 0.0f; mMode = 2; mActionTimer = 30; dComIfGp_getVibration().StartQuake(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); mQuakeTimer = 30; setIcicleOperate(1); setLandingEffect(2.0f); Z2GetAudioMgr()->seStart(Z2SE_EN_YO_VIBE_ROOM, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); mCreatureSound.startCreatureSound(Z2SE_EN_YO_LAND, 0, -1); dComIfGs_offSaveDunSwitch(0x16); } break; case 2: checkDamageWithIceBreak(); mMode = 3; // fallthrough case 3: mAttentionTimer = 10; if (mActionTimer == 0) { mTgIronSph[0].OffTgShield(); mTgIronSph[1].OffTgShield(); mTgIronSph[2].OffTgShield(); mAtCyl.SetAtSpl(dCcG_At_Spl_UNK_0); mAtCyl.SetAtMtrl(dCcD_MTRL_ICE); mAtCyl.OffAtSetBit(); mAtCyl.OffAtNoTgHitInfSet(); mMode = 4; mActionTimer = l_HIO.mAttackTimer; gravity = 0.0f; field_0xf64 = 0.0f; } break; case 4: mCreatureSound.startCreatureSoundLevel(Z2SE_EN_YO_VIBRATE, 0, -1); mAttentionTimer = 10; current.pos.y += 0.5f; field_0xf68 += 0x2800; field_0xf6a += 0x2000; cLib_chaseF(&field_0xf64, 1000.0f, 3.0f); shape_angle.x = field_0xf64 * cM_ssin(field_0xf68); shape_angle.z = field_0xf64 * cM_ssin(field_0xf6a); if (mActionTimer == 0) { mCreatureSound.startCreatureSound(Z2SE_EN_YO_PULLOUT, 0, -1); shape_angle.x = shape_angle.z = 0; setIcicleOperate(2); setActionMode(ACT_JUMP, 0); speed.y = 50.0f; mAttentionTimer = 10; if (mIceBreak == 0x3ff && field_0xfb2 == 0) { field_0xfb3 = 2; field_0xfb2 = 2; } } break; } } /* 806352C8-80635798 005F48 04D0+00 1/1 0/0 0/0 .text executeDemoRevival__8daB_YO_cFv */ void daB_YO_c::executeDemoRevival() { camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); switch (mMode) { case 0: if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); eventInfo.onCondition(dEvtCnd_CANDEMO_e); return; } mMode = 1; mIceAngleSpeed = 0x200; mActionTimer = 50; speedF = 0.0f; speed.y = 5.0f; shape_angle.y = 0; for (int i = 0; i < 10; i++) { if (mIceBreak & (1 << i)) { field_0xf80 = i * 0x1999; break; } } mIceAngle = 0x8000 - field_0xf80; camera->mCamera.Stop(); camera->mCamera.SetTrimSize(3); current.pos.set(0.0f, 700.0f, 0.0f); mCamCenter = current.pos; mCamCenter.y = 1500.0f; mCamEye.set(0.0f, 1000.0f, 1200.0f); mCamFovY = 60.0f; setIcicleOperate(8); // fallthrough case 1: if (mActionTimer == 0) { cLib_chaseAngleS(&mIceAngleSpeed, 0, 0x10); } if (current.pos.y > 1150.0f && cLib_chaseF(&speed.y, 0.0f, 0.5f)) { mMode = 2; mActionTimer = 30; mCreatureSound.startCreatureVoice(Z2SE_EN_YO_V_ICICLE, -1); } break; case 2: cLib_chaseF(&speed.y, 0.0f, 0.5f); cLib_chaseF(&mIceRange, 400.0f, 1.0f); if (mActionTimer == 0) { mIceRange = 500.0f; mIceBreak = 0; field_0xfb0 = 0; for (int i = 0; i < 10; i++) { daB_YOI_c* icicle = NULL; if (mIcicleID[i] != -1) { fopAcM_SearchByID(mIcicleID[i], (fopAc_ac_c**)&icicle); } if (icicle == NULL) { mIcicleID[i] = fopAcM_createChild(PROC_B_YOI, fopAcM_GetID(this), i | 0x20000, ¤t.pos, fopAcM_GetRoomNo(this), &shape_angle, NULL, -1, NULL); } else { fopAcM_OnStatus(icicle, 0x4000); } field_0xfb0++; } mMode = 3; mActionTimer = 60; } break; case 3: cLib_chaseAngleS(&mIceAngleSpeed, 0x400, 0x10); cLib_chaseF(&speed.y, -5.0f, 0.5f); cLib_addCalcAngleS(¤t.angle.y, fopAcM_searchPlayerAngleY(this), 0x20, 0x40, 4); if (mActionTimer == 0) { mActionTimer = cM_rndF(60.0f) + 160.0f; for (int i = 0; i < 10; i++) { daB_YOI_c* icicle; if (mIcicleID[i] != -1) { fopAcM_SearchByID(mIcicleID[i], (fopAc_ac_c**)&icicle); if (icicle != NULL) { fopAcM_OffStatus(icicle, 0x4000); } } } setActionMode(ACT_JUMP, 2); camera->mCamera.Reset(mCamCenter, mCamEye); camera->mCamera.Start(); camera->mCamera.SetTrimSize(0); dComIfGp_event_reset(); return; } break; } mIceAngle += mIceAngleSpeed; mIceCenterPos = current.pos; mIceCenterPos.y += 100.0f; mIceCenterSpeed = 0.0f; camera->mCamera.Set(mCamCenter, mCamEye, mCamFovY, 0); } /* 80635798-80635ABC 006418 0324+00 1/1 0/0 0/0 .text executeDamage__8daB_YO_cFv */ void daB_YO_c::executeDamage() { mIceAngle += mIceAngleSpeed; mIceCenterPos = current.pos; mCamLockOnTimer = 15; switch (mMode) { case 0: mTgIronSph[0].OffTgShield(); mTgIronSph[1].OffTgShield(); mTgIronSph[2].OffTgShield(); mMode = 1; gravity = 0.0f; mAttentionTimer = 0; speed.y = 15.0f; speedF = 80.0f; mAngleSpeed = 0x600; current.angle.y = fopAcM_searchPlayerAngleY(this) + cM_rndFX(8000.0f) + 0x8000; setBreakIceEffect(); if (mLastPhaseDamage == 2) { Z2GetAudioMgr()->changeBgmStatus(1); } // fallthrough case 1: cLib_chaseAngleS(&mIceAngleSpeed, 0x400, 0x10); cLib_chaseF(&speed.y, 10.0f, 0.5f); if (current.pos.y < 900.0f) { cLib_chaseF(&speed.y, 15.0f, 0.5f); } else { cLib_chaseF(&speed.y, 0.0f, 0.5f); } cLib_chaseAngleS(&mAngleSpeed, 0, 8); if (mAcch.ChkWallHit()) { mCreatureSound.startCreatureSound(Z2SE_EN_YO_VIBE_ROOM, 0, -1); dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); mAngleSpeed = 0; mMode = 2; mActionTimer = 30; speed.y = 0.0f; speedF = 0.0f; setWallHitEffect(); } break; case 2: if (mActionTimer == 0) { mMode = 3; mActionTimer = 60; } break; case 3: if (current.pos.y < 1500.0f) { cLib_chaseF(&speed.y, 10.0f, 0.3f); } else { cLib_chaseF(&speed.y, -10.0f, 0.3f); } cLib_chaseF(&speedF, 20.0f, 0.5f); if (mActionTimer == 0 && mIceBreak == 0x3ff) { mTgIronSph[0].OnTgShield(); mTgIronSph[1].OnTgShield(); mTgIronSph[2].OnTgShield(); setActionMode(ACT_JUMP, 0); field_0xfb3 = 1; field_0xfb2 = 1; } break; } } /* 80635ABC-80636E9C 00673C 13E0+00 1/1 0/0 0/0 .text executeDeath__8daB_YO_cFv */ void daB_YO_c::executeDeath() { daPy_py_c* player = daPy_getPlayerActorClass(); camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); cXyz pos1; cXyz pos2 = current.pos; pos2.y += 300.0f; obj_ystone_class* ystone; fopAcM_SearchByID(mYstoneID, (fopAc_ac_c**)&ystone); switch (mMode) { case 0: setChillEffect(); if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); eventInfo.onCondition(dEvtCnd_CANDEMO_e); return; } fopAcM_OnStatus(this, 0x4000); gravity = 0.0f; speed.y = 0.0f; camera->mCamera.Stop(); camera->mCamera.SetTrimSize(3); current.pos.set(0.0f, 0.0f, 500.0f); setBreakIceEffect(); pos1.set(-300.0f, 2.0f, 700.0f); player->setPlayerPosAndAngle(&pos1, fopAcM_searchPlayerAngleY(this) + 0x8000, 0); shape_angle.y = 0; current.angle.y = 0x8000; speed.y = 30.0f; speedF = 80.0f; mCamCenter = current.pos; mCamCenter.y += 300.0f; mCamEye.set(-300.0f, 500.0f, -1000.0f); mCamFovY = 68.0f; mMode = 1; dComIfGs_onStageBossEnemy(); dComIfGs_onSwitch(mSwNo2, fopAcM_GetRoomNo(this)); Z2GetAudioMgr()->bgmStop(0x1e, 0); Z2GetAudioMgr()->bgmStreamPrepare(0x2000059); Z2GetAudioMgr()->bgmStreamPlay(); Z2GetAudioMgr()->seStart(Z2SE_EN_YO_DEMO_END, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); player->changeOriginalDemo(); player->changeDemoMode(12, 0, 0, 0); break; case 1: setChillEffect(); mCamCenter = pos2; if (mCamCenter.z < mCamEye.z) { mMode = 2; } break; case 2: mCamCenter = pos2; if (mAcch.ChkWallHit()) { current.pos.x = 0.0f; mCreatureSound.startCreatureSound(Z2SE_EN_YO_VIBE_ROOM, 0, -1); dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); speed.y = 0.0f; speedF = 0.0f; mMode = 3; mActionTimer = 30; setBck(ANM_DOWN_A, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); setBreakIceEffect(); setWallHitEffect(); } break; case 3: mCamCenter = pos2; pos1.set(0.0f, 800.0f, -650.0f); cLib_addCalcPos2(&mCamEye, pos1, 0.3f, 20.0f); mDoMtx_stack_c::copy(mpYetaMorf->getModel()->getAnmMtx(4)); mDoMtx_stack_c::multVecZero(&pos1); pos1.y -= 200.0f; cLib_addCalcPos2(&mCamCenter, pos1, 0.1f, 3.0f); if (mActionTimer == 0) { mpYetaMorf->setPlaySpeed(1.0f); mMode = 99; mActionTimer = 35; } break; case 99: mDoMtx_stack_c::copy(mpYetaMorf->getModel()->getAnmMtx(4)); mDoMtx_stack_c::multVecZero(&pos1); pos1.y -= 200.0f; cLib_addCalcPos2(&mCamCenter, pos1, 0.1f, 3.0f); if (mpYetaMorf->isStop()) { setBck(ANM_DOWN_C, J3DFrameCtrl::EMode_NONE, 15.0f, 1.0f); mMode = 110; mBlureRate = 0.0f; } // fallthrough case 100: mDoMtx_stack_c::copy(mpYetaMorf->getModel()->getAnmMtx(4)); mDoMtx_stack_c::multVecZero(&pos1); pos1.y -= 200.0f; cLib_addCalcPos2(&mCamCenter, pos1, 0.1f, 3.0f); if (mActionTimer == 0) { mMode = 101; mActionTimer = 300; field_0xf80 = 0; mAngleSpeed = 0x400; speed.y = 0.0f; current.angle.y = 0; field_0xfae = 0; mActionTimer = 30; mIceCenterSpeed = 1.0f; } break; case 101: cLib_chaseF(&mIceCenterSpeed, 0.5f, 0.05f); mpYetaMorf->setPlaySpeed(mIceCenterSpeed); mDoMtx_stack_c::copy(mpYetaMorf->getModel()->getAnmMtx(4)); mDoMtx_stack_c::multVecZero(&pos1); cLib_addCalcPos2(&mCamCenter, pos1, 0.1f, 30.0f); pos1.set(0.0f, 1230.0f, -1400.0f); cLib_addCalcPos2(&mCamEye, pos1, 0.1f, 60.0f); if (mActionTimer == 0) { setBck(ANM_DOWN_C, J3DFrameCtrl::EMode_NONE, 15.0f, 1.0f); mMode = 110; mBlureRate = 0.0f; } break; case 105: mDoMtx_stack_c::copy(mpYetaMorf->getModel()->getAnmMtx(4)); mDoMtx_stack_c::multVecZero(&pos1); if (mActionTimer >= 30) { pos1.y -= 200.0f; cLib_addCalcPos2(&mCamCenter, pos1, 0.1f, 3.0f); } else { cLib_addCalcPos2(&mCamCenter, pos1, 0.1f, 30.0f); pos1.set(0.0f, 830.0f, -1100.0f); cLib_addCalcPos2(&mCamEye, pos1, 0.1f, 60.0f); } if (mActionTimer == 100 || mActionTimer == 70) { if (mActionTimer == 100) { field_0xfae = 12; } else { field_0xfae = 18; } } else if (field_0xfae != 0) { field_0xfae--; cLib_chaseF(&speed.y, -5.0f, 3.0f); if (field_0xfae == 17 || field_0xfae == 13 || field_0xfae == 9 || field_0xfae == 5) { speed.y = 3.0f; } if (field_0xfae == 16 || field_0xfae == 12 || field_0xfae == 8 || field_0xfae == 4) { speed.y = 0.0f; } mIceCenterSpeed = 1.0f; mpYetaMorf->setPlaySpeed(1.0f); } else { cLib_chaseF(&speed.y, 0.0f, 1.0f); cLib_chaseF(&mIceCenterSpeed, 0.5f, 0.05f); mpYetaMorf->setPlaySpeed(mIceCenterSpeed); } if (mActionTimer == 0) { setBck(ANM_DOWN_C, J3DFrameCtrl::EMode_NONE, 15.0f, 1.0f); mMode = 110; mBlureRate = 0.0f; } break; case 110: mDoMtx_stack_c::copy(mpYetaMorf->getModel()->getAnmMtx(4)); mDoMtx_stack_c::multVecZero(&pos1); cLib_addCalcPos2(&mCamCenter, pos1, 0.1f, 30.0f); pos1.set(0.0f, 1230.0f, -1400.0f); cLib_addCalcPos2(&mCamEye, pos1, 0.1f, 30.0f); cLib_chaseF(&speed.y, 0.0f, 0.1f); if (mpYetaMorf->getFrame() < 100.0f) { cLib_addCalc2(&mBlureRate, 180.0f, 0.1f, 8.0f); } else { cLib_addCalc2(&mBlureRate, 0.0f, 0.1f, 5.0f); } if (mpYetaMorf->checkFrame(18.0f)) { dComIfGp_getVibration().StartQuake(4, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); mQuakeTimer = 50; } if (mpYetaMorf->checkFrame(158.0f)) { dComIfGp_getVibration().StartQuake(6, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); mQuakeTimer = 40; } if (mpYetaMorf->isStop()) { cLib_chaseF(&speed.y, -100.0f, 1.0f); mMode = 5; mActionTimer = 30; mCamCenterSpeed = 30.0f; mBlureRate = 0.0f; } break; case 5: cLib_chaseF(&speed.y, -100.0f, 1.0f); cLib_chaseF(&mCamCenterSpeed, 0.0f, 1.7f); mDoMtx_stack_c::copy(mpYetaMorf->getModel()->getAnmMtx(4)); mDoMtx_stack_c::multVecZero(&pos1); cLib_chaseF(&mCamCenter.y, pos1.y, mCamCenterSpeed); if (mActionTimer == 0) { mMode = 6; current.pos.set(0.0f, 1000.0f, -900.0f); pos2.y = 1540.0f; mCamCenter = pos2; mCamEye.set(0.0f, 100.0f, -100.0f); speed.y = -30.0f; pos1.set(150.0f, 2.0f, -400.0f); player->setPlayerPosAndAngle(&pos1, 0x8000, 0); player->changeDemoMode(23, 0, 0, 0); } break; case 6: mCamCenter.y = current.pos.y + 540.0f; cLib_chaseF(&speed.y, -100.0f, 10.0f); if (mAcch.ChkGroundHit()) { dComIfGp_getVibration().StartQuake(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); mQuakeTimer = 30; speed.y = 0.0f; speedF = 0.0f; setBreakIceEffect(); mMode = 7; field_0xfb5 = 3; mColorMode = 7; mColBlend = 0.0f; mReverted = true; shape_angle.y = -0x4000; current.pos.y = -500.0f; speed.y = 0.0f; gravity = 0.0f; mMode = 8; mActionTimer = 60; } break; case 7: cLib_chaseF(&mCamCenter.y, 200.0f, 100.0f); cLib_chaseF(&mIceCenterSpeed, -100.0f, 5.0f); current.pos.y += mIceCenterSpeed; if (current.pos.y < 0.0f) { dComIfGp_getVibration().StartShock(4, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); mMode = 8; mIceCenterSpeed = 0.0f; current.pos.y = 0.0f; mActionTimer = 60; } break; case 8: if (mActionTimer == 30) { mRoomType = 0; if (mpRoomNormalBgW != NULL) { dComIfG_Bgsp().Regist(mpRoomNormalBgW, this); } if (mpRoomArenaBgW != NULL) { dComIfG_Bgsp().Release(mpRoomArenaBgW); } } if (mActionTimer == 0) { mCamCenter.set(0.0f, 200.0f, -300.0f); mCamEyeAngle = 0x2800; mCamEyeRange = 800.0f; mCamEye.set(mCamEyeRange * cM_ssin(mCamEyeAngle), 200.0f, mCamEyeRange * cM_scos(mCamEyeAngle) - 300.0f); mCamFovY = 60.0f; mMode = 9; mActionTimer = 90; pos1.set(0.0f, 2.0f, 0.0f); player->setPlayerPosAndAngle(&pos1, 0x8000, 0); mIceCenterSpeed = 0.0f; return; } break; case 9: current.pos.y = 0.0f; mMode = 10; // fallthrough case 10: if (mRoomAlpha[0] >= 250.0f) { mRoomAlpha[0] = 250.0f; } if (mRoomAlpha[1] < 10.0f) { mRoomAlpha[1] = 0.0f; } if (mActionTimer == 0) { mMode = 11; mActionTimer = 240; if (ystone != NULL) { mYstonePos.set(0.0f, 500.0f, -300.0f); ystone->setCurrentPos(mYstonePos); ystone->setShapeAngle(csXyz(0, 0x2000, 0)); ystone->setMirrorMode(0); } player->changeDemoMode(1, 0, 0, 0); mAngleSpeed = 0; } break; case 11: if (mRoomAlpha[0] >= 250.0f) { mRoomAlpha[0] = 250.0f; } if (mRoomAlpha[1] < 10.0f) { mRoomAlpha[1] = 0.0f; } if (mActionTimer == 210) { if (ystone != NULL) { dComIfGp_event_setTalkPartner(ystone); } player->changeDemoMode(47, 3, 0, 0); } if (mActionTimer < 40) { if (ystone != NULL) { cLib_addCalc2(&mYstonePos.y, 180.0f, 0.1f, 1.0f); ystone->setCurrentPos(mYstonePos); } } else if (mActionTimer < 210) { cLib_chaseAngleS(&mAngleSpeed, 0x60, 8); cLib_addCalcAngleS2(&mCamEyeAngle, 0x3c00, 8, mAngleSpeed); cLib_addCalc2(&mCamEyeRange, 600.0f, 0.1f, 3.0f); cLib_addCalc2(&mCamCenter.y, 350.0f, 0.1f, 3.0f); cLib_addCalc2(&mCamEye.y, 0.0f, 0.1f, 3.0f); mCamEye.x = mCamEyeRange * cM_ssin(mCamEyeAngle); mCamEye.z = mCamEyeRange * cM_scos(mCamEyeAngle) - 300.0f; } if (mActionTimer == 0) { mCamEye.set(0.0f, 150.0f, 200.0f); mCamCenter.set(0.0f, 300.0f, -100.0f); mYstonePos.set(0.0f, 450.0f, -100.0f); mCamFovY = 68.0f; mMode = 13; mActionTimer = 120; if (ystone != NULL) { ystone->setCurrentPos(mYstonePos); dComIfGp_event_setTalkPartner(ystone); } player->changeDemoMode(47, 3, 0, 0); pos1.set(-550.0f, 0.0f, -250.0f); csXyz angle; angle.set(0, 0, 0); mWarpHoleID = fopAcM_createWarpHole(&pos1, &angle, fopAcM_GetRoomNo(this), 1, 1, 0xff); mRoomAlpha[0] = 255.0f; mRoomAlpha[1] = 0.0f; } break; case 13: cLib_addCalc2(&mCamCenter.y, 180.0f, 0.1f, 0.5f); cLib_addCalc2(&mYstonePos.y, 180.0f, 0.1f, 1.5f); if (ystone != NULL) { ystone->setCurrentPos(mYstonePos); } if (mActionTimer < 10 && fopAcM_SearchByID(mWarpHoleID) == NULL) { mActionTimer = 10; } if (mActionTimer == 0) { daPy_getPlayerActorClass()->cancelOriginalDemo(); camera->mCamera.Start(); camera->mCamera.SetTrimSize(0); dComIfGp_event_reset(); mMode = 14; return; } break; case 14: if (!strcmp(dComIfGp_getEventManager().getRunEventName(), "BOSSCLEAR05")) { mMode = 15; } return; case 15: if (strcmp(dComIfGp_getEventManager().getRunEventName(), "BOSSCLEAR05")) { unk_FD2 = true; mMode = 16; } return; case 16: return; } camera->mCamera.Set(mCamCenter, mCamEye, mCamFovY, 0); } /* 80636E9C-80637048 007B1C 01AC+00 2/2 0/0 0/0 .text reviseIceCenterPos__8daB_YO_cFP4cXyz */ void daB_YO_c::reviseIceCenterPos(cXyz* param_0) { f32 fVar1 = mIceRange; if (fVar1 > 500.0f) { fVar1 = 500.0f; } fVar1 = 1800.0f - (fVar1 + 100.0f); if (param_0->absXZ() > fVar1) { s16 angle = cM_atan2s(param_0->x, param_0->z); param_0->x = fVar1 * cM_ssin(angle); param_0->z = fVar1 * cM_scos(angle); } } /* 80637048-806374BC 007CC8 0474+00 1/1 0/0 0/0 .text calcPlayerBufPos__8daB_YO_cFv */ void daB_YO_c::calcPlayerBufPos() { cXyz player_pos = daPy_getPlayerActorClass()->current.pos; int dir = 0; cXyz buf_pos; mPlayerXBuf[0] = player_pos.x; mPlayerZBuf[0] = player_pos.z; unk_D88[0] += 0x200; s16 target_angle = (s16)cLib_targetAngleY(&player_pos, &mOldPlayerPos); cLib_addCalcAngleS(&mPlayerAngle, target_angle, 8, 0x200, 0x10); if (mOldPlayerPos.absXZ(player_pos) >= 10.0f) { mOldPlayerPos = player_pos; } for (int i = 1; i < 200; i++) { if (dir == 0) { unk_D88[i] = unk_D88[i - 1] + 0x200; s16 angle = mPlayerAngle; mPlayerXBuf[i] = mPlayerXBuf[i - 1] + 25.0f * cM_ssin(angle); mPlayerZBuf[i] = mPlayerZBuf[i - 1] + 25.0f * cM_scos(angle); buf_pos.set(mPlayerXBuf[i], 0.0f, mPlayerZBuf[i]); if (buf_pos.absXZ() > 1500.0f) { s16 center_angle2 = cM_atan2s(mPlayerXBuf[i], mPlayerZBuf[i]); s16 center_angle1 = cM_atan2s(mPlayerXBuf[i - 1], mPlayerZBuf[i - 1]); if ((s16)(center_angle2 - center_angle1) < 0) { dir = 1; } else { dir = -1; } } } if (dir != 0) { s16 center_angle; if (dir < 0) { center_angle = cM_atan2s(mPlayerXBuf[i - 1], mPlayerZBuf[i - 1]) - 0x1000; } else { center_angle = cM_atan2s(mPlayerXBuf[i - 1], mPlayerZBuf[i - 1]) + 0x1000; } mPlayerXBuf[i] = 1500.0f * cM_ssin(center_angle); mPlayerZBuf[i] = 1500.0f * cM_scos(center_angle); s16 angle = cM_atan2s(mPlayerXBuf[i - 1] - mPlayerXBuf[i], mPlayerZBuf[i - 1] - mPlayerZBuf[i]); mPlayerXBuf[i] = mPlayerXBuf[i - 1] + 25.0f * cM_ssin(angle); mPlayerZBuf[i] = mPlayerZBuf[i - 1] + 25.0f * cM_scos(angle); } } } /* 806374BC-80637990 00813C 04D4+00 3/1 0/0 0/0 .text action__8daB_YO_cFv */ void daB_YO_c::action() { damage_check(); if (mAction != ACT_OPENING) { if (mAction == ACT_DEATH) { maxFallSpeed = -55.0f; } else { maxFallSpeed = l_HIO.mMaxFallSpeed; } } if (field_0xfb5 == 0 && mAction != ACT_DEATH) { setChillEffect(); } if (mRoomType == 1) { cXyz pos(0.0f, 0.0f, 0.0f); mParticleKey = dComIfGp_particle_set(mParticleKey, 0x87B0, &pos, &tevStr); } attention_info.flags = 0; if (mAttentionTimer != 0) { attention_info.flags = 4; } BOOL bVar1 = TRUE; switch (mAction) { case ACT_OPENING: executeOpening(); bVar1 = FALSE; break; case ACT_CHASE: executeChase(); break; case ACT_SERIOUS_DEMO: executeSeriousDemo(); break; case ACT_JUMP: executeJump(); break; case ACT_ATTACK_ICE: executeAttackIce(); break; case ACT_ATTACK_YOSE: executeAttackYose(); break; case ACT_ATTACK_BODY: executeAttackBody(); break; case ACT_DEMO_REVIVAL: executeDemoRevival(); break; case ACT_DAMAGE: executeDamage(); break; case ACT_DEATH: executeDeath(); break; } if (bVar1) { daPy_getPlayerActorClass()->onBossRoomWait(); } reviseIceCenterPos(&mIceCenterPos); if (mModelNo >= 5) { if (dComIfGs_isSaveDunSwitch(0x14) || dComIfGs_isSaveDunSwitch(0x16)) { dComIfGs_offSaveDunSwitch(0x15); } else if (dComIfGs_isSaveDunSwitch(0x15)) { dComIfGs_onSaveDunSwitch(0x15); } } if (mRoomType == 0) { cLib_chaseF(&mRoomAlpha[0], 255.0f, 2.7f); if (mRoomAlpha[0] > 128.0f) { cLib_chaseF(&mRoomAlpha[1], 0.0f, 5.4f); } } else { cLib_chaseF(&mRoomAlpha[0], 0.0f, 4.0f); if (mRoomAlpha[0] < 128.0f) { cLib_chaseF(&mRoomAlpha[1], 255.0f, 8.0f); } } switch (mColorMode) { case 0: mColBlend = 1.0f; dKy_custom_colset(0, 0, mColBlend); break; case 1: cLib_chaseF(&mColBlend, 1.0f, 0.008f); dKy_custom_colset(0, 4, mColBlend); break; case 2: cLib_chaseF(&mColBlend, 1.0f, 1.0f); dKy_custom_colset(4, 5, mColBlend); break; case 3: cLib_chaseF(&mColBlend, 1.0f, 1.0f); dKy_custom_colset(5, 1, mColBlend); break; case 4: cLib_chaseF(&mColBlend, 1.0f, 0.015f); dKy_custom_colset(1, 2, mColBlend); break; case 5: cLib_chaseF(&mColBlend, 1.0f, 0.015f); dKy_custom_colset(2, 1, mColBlend); break; case 6: cLib_chaseF(&mColBlend, 1.0f, 0.015f); dKy_custom_colset(1, 3, mColBlend); break; case 7: cLib_chaseF(&mColBlend, 1.0f, 0.01f); dKy_custom_colset(3, 0, mColBlend); break; } calcPlayerBufPos(); fopAcM_posMoveF(this, NULL); if (field_0xfb5 != 3) { mAcch.CrrPos(dComIfG_Bgsp()); } mpYetaMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); mpYetaRevertedMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); if (field_0xfcd) { mpYetaBtkAnm->play(); } mpYetaBtpAnm->play(); if (field_0xfcc) { mpYetaBrkAnm->play(); } if (field_0xfd1) { mpYetaWhiteBrkAnm->play(); } if (mpRoomNormalBgW != NULL) { mpRoomNormalBgW->Move(); } if (mpRoomArenaBgW != NULL) { mpRoomArenaBgW->Move(); } } /* 80637990-80637B30 008610 01A0+00 1/1 0/0 0/0 .text mtx_set__8daB_YO_cFv */ void daB_YO_c::mtx_set() { mpRoomModel[0]->setBaseTRMtx(mBgMtx); mpRoomModel[1]->setBaseTRMtx(mBgMtx); if (mpFurnitureModel != NULL) { mpFurnitureModel->setBaseTRMtx(mBgMtx); } mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::ZXYrotM(shape_angle); if (field_0xfb5 == 3) { mpYetaMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); mpYetaMorf->modelCalc(); if (mReverted) { mpYetaRevertedMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); mpYetaRevertedMorf->modelCalc(); } } else { f32 scale = l_HIO.mScale[mModelNo] * mScale; mDoMtx_stack_c::scaleM(scale, scale, scale); if (mModelNo == 7) { mDoMtx_stack_c::transM(0.0f, -230.0f, 0.0f); mpModel[2]->setBaseTRMtx(mDoMtx_stack_c::get()); mDoMtx_stack_c::transM(0.0f, 580.0f, 0.0f); mpYetaMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); mpYetaMorf->modelCalc(); } else if (mModelNo < 4) { mpModel[0]->setBaseTRMtx(mDoMtx_stack_c::get()); } else { mpModel[1]->setBaseTRMtx(mDoMtx_stack_c::get()); } } } /* 80639DF8-80639E14 000398 001C+00 0/1 0/0 0/0 .data yo_att_pos_y */ static f32 yo_att_pos_y[7] = {1300.0f, 950.0f, 700.0f, 450.0f, 850.0f, 470.0f, 300.0f}; /* 80637B30-80637E10 0087B0 02E0+00 1/1 0/0 0/0 .text cc_set__8daB_YO_cFv */ void daB_YO_c::cc_set() { static f32 yo_at_sph_radius[8] = {658.0f, 600.0f, 550.0f, 440.0f, 300.0f, 200.0f, 150.0f, 280.0f}; static f32 yo_sph_pos_addy[3] = {320.0f, 190.0f, 100.0f}; static f32 yo_sph_pos_radius[3] = {55.0f, 100.0f, 125.0f}; static f32 yo_sph_pos_addy2[3] = {250.0f, 400.0f, 550.0f}; if (field_0xfb5 == 3) { return; } f32 scale = l_HIO.mScale[mModelNo]; mDoMtx_stack_c::transS(current.pos); if (mModelNo == 7) { mDoMtx_stack_c::transM(0.0f, 300.0f, 0.0f); mDoMtx_stack_c::multVecZero(&eyePos); attention_info.position = eyePos; attention_info.position.y += 150.0f; } else { mDoMtx_stack_c::transM(0.0f, 200.0f, 0.0f); mDoMtx_stack_c::multVecZero(&eyePos); attention_info.position = eyePos; attention_info.position.y += yo_att_pos_y[mModelNo]; } if (field_0xfac) { mModelNo = 2; scale = 4.0f; } mAtCyl.SetC(current.pos); if (mModelNo == 7) { mAtCyl.SetH(750.0f); } else { mAtCyl.SetH(scale * 250.0f); } if (field_0xfac) { mAtCyl.SetR(350.0f); } else { mAtCyl.SetR(yo_at_sph_radius[mModelNo]); } dComIfG_Ccsp()->Set(&mAtCyl); for (int i = 0; i < 3; i++) { cXyz pos = current.pos; f32 radius; if (mModelNo == 7) { pos.y += yo_sph_pos_addy2[i]; radius = 270.0f; } else { pos.y += scale * yo_sph_pos_addy[i]; radius = scale * yo_sph_pos_radius[i]; } mTgSph[i].SetC(pos); mTgSph[i].SetR(radius); dComIfG_Ccsp()->Set(&mTgSph[i]); mTgIronSph[i].SetC(pos); mTgIronSph[i].SetR(radius); dComIfG_Ccsp()->Set(&mTgIronSph[i]); } if (field_0xfac) { mModelNo = 7; field_0xfac = false; } } /* 80637E10-80637FA0 008A90 0190+00 1/1 0/0 0/0 .text execute__8daB_YO_cFv */ int daB_YO_c::execute() { if (mIsInactive == 1) { mpRoomModel[mRoomType]->setBaseTRMtx(mBgMtx); if (mpRoomNormalBgW != NULL) { mpRoomNormalBgW->Move(); } return 1; } if (mActionTimer != 0) { mActionTimer--; } if (mActionTimer2 != 0) { mActionTimer2--; } if (mDamageTimer != 0) { mDamageTimer--; } if (mFreezardTimer != 0) { mFreezardTimer--; } if (mIFrameTimer != 0) { mIFrameTimer--; } if (mIFrameIronTimer != 0) { mIFrameIronTimer--; } if (mQuakeTimer != 0) { mQuakeTimer--; if (mQuakeTimer == 0) { dComIfGp_getVibration().StopQuake(0x1f); } } if (mAttentionTimer != 0) { mAttentionTimer--; } if (mCamLockOnTimer != 0) { dCam_getBody()->ForceLockOn(this); mCamLockOnTimer--; if (mCamLockOnTimer == 0 && dCam_getBody()->GetForceLockOnActor() == this) { dCam_getBody()->ForceLockOff(this); } } action(); mtx_set(); cc_set(); return 1; } /* 80637FA0-80637FC0 008C20 0020+00 2/1 0/0 0/0 .text daB_YO_Execute__FP8daB_YO_c */ static int daB_YO_Execute(daB_YO_c* i_this) { return i_this->execute(); } /* 80637FC0-80637FC8 008C40 0008+00 1/0 0/0 0/0 .text daB_YO_IsDelete__FP8daB_YO_c */ static int daB_YO_IsDelete(daB_YO_c* i_this) { return 1; } /* 80637FC8-806380D8 008C48 0110+00 1/1 0/0 0/0 .text _delete__8daB_YO_cFv */ int daB_YO_c::_delete() { dComIfG_resDelete(&mPhase2, "L5_R50"); if (mpRoomNormalBgW != NULL) { dComIfG_Bgsp().Release(mpRoomNormalBgW); } if (heap != NULL) { mCreatureSound.deleteObject(); } if (mIsInactive2 == 1) { return 1; } dComIfG_resDelete(&mPhase1, "B_YO"); dComIfG_resDelete(&mPhase3, "ykW"); dComIfG_resDelete(&mPhase4, "ykW1"); dComIfG_resDelete(&mPhase5, "E_FZ"); if (mHIOInit) { hioInit = false; } if (mpRoomArenaBgW != NULL) { dComIfG_Bgsp().Release(mpRoomArenaBgW); } return 1; } /* 806380D8-806380F8 008D58 0020+00 1/0 0/0 0/0 .text daB_YO_Delete__FP8daB_YO_c */ static int daB_YO_Delete(daB_YO_c* i_this) { return i_this->_delete(); } /* 806380F8-80638838 008D78 0740+00 1/1 0/0 0/0 .text CreateHeap__8daB_YO_cFv */ int daB_YO_c::CreateHeap() { J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes("B_YO", 0x1d); mpModel[0] = mDoExt_J3DModel__create(model_data, 0, 0x11000284); if (mpModel[0] == NULL) { return 0; } model_data = (J3DModelData*)dComIfG_getObjectRes("B_YO", 0x1e); mpModel[1] = mDoExt_J3DModel__create(model_data, 0, 0x11000284); if (mpModel[1] == NULL) { return 0; } model_data = (J3DModelData*)dComIfG_getObjectRes("B_YO", 0x1f); mpModel[2] = mDoExt_J3DModel__create(model_data, 0, 0x11000284); if (mpModel[2] == NULL) { return 0; } model_data = (J3DModelData*)dComIfG_getObjectRes("B_YO", 0x1c); mpYetaMorf = new mDoExt_McaMorfSO( model_data, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("B_YO", 0x14), J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, &mCreatureSound, 0, 0x11020284 ); if (mpYetaMorf == NULL || mpYetaMorf->getModel() == NULL) { return 0; } mpBtkAnm = new mDoExt_btkAnm(); if (mpBtkAnm == NULL) { return 0; } J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_YO", 0x35); if (!mpBtkAnm->init(mpModel[0]->getModelData(), btk, FALSE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1)) { return 0; } model_data = mpYetaMorf->getModel()->getModelData(); mpYetaBtkAnm = new mDoExt_btkAnm(); if (mpYetaBtkAnm == NULL) { return 0; } btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_YO", 0x32); if (!mpYetaBtkAnm->init(model_data, btk, TRUE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1)) { return 0; } mpYetaBtpAnm = new mDoExt_btpAnm(); if (mpYetaBtpAnm == NULL) { return 5; } J3DAnmTexPattern* btp = (J3DAnmTexPattern*)dComIfG_getObjectRes("B_YO", 0x3f); if (!mpYetaBtpAnm->init(model_data, btp, TRUE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1)) { return 5; } mpYetaBrkAnm = new mDoExt_brkAnm(); if (mpYetaBrkAnm == NULL) { return 0; } J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_YO", 0x24); if (!mpYetaBrkAnm->init(model_data, brk, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1)) { return 0; } mpYetaWhiteBrkAnm = new mDoExt_brkAnm(); if (mpYetaWhiteBrkAnm == NULL) { return 0; } brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_YO", 0x27); if (!mpYetaWhiteBrkAnm->init(model_data, brk, TRUE, J3DFrameCtrl::EMode_NONE, 0.0f, 0, -1)) { return 0; } mpRoomNormalBgW = new dBgW(); if (mpRoomNormalBgW == NULL) { return 0; } cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes("L5_R50", 9); if (mpRoomNormalBgW->Set(dzb, 0, &mBgMtx) == 1) { return 0; } mpRoomNormalBgW->SetCrrFunc(dBgS_MoveBGProc_Typical); model_data = (J3DModelData*)dComIfG_getObjectRes("L5_R50", 4); mpRoomModel[0] = mDoExt_J3DModel__create(model_data, 0, 0x31000084); if (mpRoomModel[0] == NULL) { return 0; } mpRoomArenaBgW = new dBgW(); if (mpRoomArenaBgW == NULL) { return 0; } dzb = (cBgD_t*)dComIfG_getObjectRes("L5_R50", 0xa); if (mpRoomArenaBgW->Set(dzb, 0, &mBgMtx) == 1) { return 0; } mpRoomArenaBgW->SetCrrFunc(dBgS_MoveBGProc_Typical); model_data = (J3DModelData*)dComIfG_getObjectRes("L5_R50", 5); mpRoomModel[1] = mDoExt_J3DModel__create(model_data, 0, 0x31000084); if (mpRoomModel[1] == NULL) { return 0; } model_data = (J3DModelData*)dComIfG_getObjectRes("L5_R50", 6); mpFurnitureModel = mDoExt_J3DModel__create(model_data, 0, 0x11000084); if (mpFurnitureModel == NULL) { return 0; } model_data = (J3DModelData*)dComIfG_getObjectRes("ykW", 0xb); mpYetaRevertedMorf = new mDoExt_McaMorfSO( model_data, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("ykW1", 0x1a), J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, &mCreatureSound, 0, 0x11000084 ); if (mpYetaRevertedMorf == NULL || mpYetaRevertedMorf->getModel() == NULL) { return 0; } return 1; } /* 80638880-806388A0 009500 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ static int useHeapInit(fopAc_ac_c* i_this) { return static_cast(i_this)->CreateHeap(); } /* 806388A0-806389A0 009520 0100+00 1/1 0/0 0/0 .text CreateHeap2__8daB_YO_cFv */ int daB_YO_c::CreateHeap2() { mpRoomNormalBgW = new dBgW(); if (mpRoomNormalBgW == NULL) { return 0; } cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes("L5_R50", 9); if (mpRoomNormalBgW->Set(dzb, 0, &mBgMtx) == 1) { return 0; } mpRoomNormalBgW->SetCrrFunc(dBgS_MoveBGProc_Typical); J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes("L5_R50", 4); mpRoomModel[0] = mDoExt_J3DModel__create(model_data, 0, 0x31000084); if (mpRoomModel[0] == NULL) { return 0; } return 1; } /* 806389A0-806389C0 009620 0020+00 1/1 0/0 0/0 .text useHeapInit2__FP10fopAc_ac_c */ static int useHeapInit2(fopAc_ac_c* i_this) { return static_cast(i_this)->CreateHeap2(); } /* 806389C0-80639214 009640 0854+00 1/1 0/0 0/0 .text create__8daB_YO_cFv */ cPhs__Step daB_YO_c::create() { fopAcM_SetupActor(this, daB_YO_c); cPhs__Step step; mSwNo = fopAcM_GetParam(this) & 0xff; mSwNo2 = (fopAcM_GetParam(this) >> 8) & 0xff; mIsInactive = (fopAcM_GetParam(this) >> 0x10) & 0xff; if (mIsInactive != 1) { mIsInactive = 0; } if (dComIfGs_isStageBossEnemy()) { mIsInactive = 1; } mIsInactive2 = mIsInactive; if (mIsInactive == 1) { step = (cPhs__Step)dComIfG_resLoad(&mPhase2, "L5_R50"); if (step == cPhs_COMPLEATE_e) { if (!daMirror_c::remove()) { return cPhs_INIT_e; } if (!fopAcM_entrySolidHeap(this, useHeapInit2, 0x2200)) { return cPhs_ERROR_e; } if (mpRoomNormalBgW != NULL && dComIfG_Bgsp().Regist(mpRoomNormalBgW, this)) { return cPhs_ERROR_e; } cXyz pos(-550.0f, 0.0f, -250.0f); csXyz angle(0, 0, 0); fopAcM_createWarpHole(&pos, &angle, fopAcM_GetRoomNo(this), 1, 0, 0xff); mRoomType = 0; mRoomAlpha[0] = 255.0f; mRoomAlpha[1] = 0.0f; mColorMode = 0; mColBlend = 1.0f; mDoMtx_stack_c::transS(0.0f, 0.0f, 0.0f); MTXCopy(mDoMtx_stack_c::get(), mBgMtx); daB_YO_Execute(this); } return step; } else { if ((step = (cPhs__Step)dComIfG_resLoad(&mPhase1, "B_YO"), step == cPhs_COMPLEATE_e) && (step = (cPhs__Step)dComIfG_resLoad(&mPhase2, "L5_R50"), step == cPhs_COMPLEATE_e) && (step = (cPhs__Step)dComIfG_resLoad(&mPhase3, "ykW"), step == cPhs_COMPLEATE_e) && (step = (cPhs__Step)dComIfG_resLoad(&mPhase4, "ykW1"), step == cPhs_COMPLEATE_e) && (step = (cPhs__Step)dComIfG_resLoad(&mPhase5, "E_FZ"), step == cPhs_COMPLEATE_e)) { if (cDmr_SkipInfo != 0 && !daMirror_c::remove()) { return cPhs_INIT_e; } if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x1bee0)) { return cPhs_ERROR_e; } if (!hioInit) { hioInit = true; mHIOInit = true; l_HIO.field_0x4 = -1; } attention_info.flags = 0; attention_info.distances[fopAc_attn_BATTLE_e] = 60; fopAcM_SetMtx(this, mpModel[0]->getBaseTRMtx()); fopAcM_SetMin(this, -200.0f, -200.0f, -200.0f); fopAcM_SetMax(this, 200.0f, 200.0f, 200.0f); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL); mAcchCir.SetWall(20.0f, l_HIO.mScale[mModelNo] * 140.0f); if (mpRoomNormalBgW != NULL && dComIfG_Bgsp().Regist(mpRoomNormalBgW, this)) { return cPhs_ERROR_e; } if (mpRoomArenaBgW != NULL && dComIfG_Bgsp().Regist(mpRoomArenaBgW, this)) { return cPhs_ERROR_e; } mDoMtx_stack_c::transS(0.0f, 0.0f, 0.0f); MTXCopy(mDoMtx_stack_c::get(), mBgMtx); health = 80; field_0x560 = 80; mCcStts.Init(0xff, 0, this); mCcIronStts.Init(0xff, 0, this); mAtCyl.Set(cc_yo_src); mAtCyl.SetStts(&mCcStts); for (int i = 0; i < 3; i++) { mTgSph[i].Set(cc_yo_tg_src); mTgSph[i].SetStts(&mCcStts); mTgIronSph[i].Set(cc_yo_iron_src); mTgIronSph[i].SetStts(&mCcIronStts); } mCreatureSound.init(¤t.pos, &eyePos, 3, 1); mCreatureSound.setEnemyName("B_yo"); mAtInfo.mpSound = &mCreatureSound; mAtInfo.mPowerType = 1; gravity = -5.0f; mIceRange = 500.0f; dComIfGs_offSaveDunSwitch(0x14); dComIfGs_offSaveDunSwitch(0x16); mpBtkAnm->setFrame(1.0f); mAcch.OffSameActorChk(); if (cDmr_SkipInfo != 0) { mScale = 1.0f; setBck(ANM_ANGRY, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); cDmr_SkipInfo = 0; field_0xfb5 = 0; setActionMode(ACT_CHASE, 0); Z2GetAudioMgr()->bgmStart(Z2BGM_BOSS_SNOWWOMAN_0, 0, 0); if (!dComIfGs_isSwitch(mSwNo, fopAcM_GetRoomNo(this))) { dComIfGs_onSwitch(mSwNo, fopAcM_GetRoomNo(this)); } cXyz pos(0.0f, 0.0f, 3000.0f); mYstoneID = fopAcM_create(PROC_OBJ_YSTONE, 5, &pos, fopAcM_GetRoomNo(this), NULL, NULL, 0xff); mRoomType = 1; mRoomAlpha[0] = 0.0f; mRoomAlpha[1] = 255.0f; if (mpRoomNormalBgW != NULL) { dComIfG_Bgsp().Release(mpRoomNormalBgW); } mpFurnitureModel = NULL; mColorMode = 4; mColBlend = 1.0f; g_env_light.mColpatWeather = 2; g_env_light.wether_pat0 = 2; g_env_light.wether_pat1 = 2; fopAcM_OffStatus(this, 0x4000); } else { mRoomType = 0; mRoomAlpha[0] = 255.0f; mRoomAlpha[1] = 0.0f; if (mpRoomArenaBgW != NULL) { dComIfG_Bgsp().Release(mpRoomArenaBgW); } mColorMode = 0; mColBlend = 1.0f; field_0xfb5 = 3; setActionMode(ACT_OPENING, 0); } onWolfNoLock(); daB_YO_Execute(this); } return step; } } /* 8063957C-8063959C 00A1FC 0020+00 1/0 0/0 0/0 .text daB_YO_Create__FP8daB_YO_c */ static cPhs__Step daB_YO_Create(daB_YO_c* i_this) { return i_this->create(); } namespace { /* 80639FEC-80639FF8 0000BC 000C+00 0/1 0/0 0/0 .bss m_common_pos__22@unnamed@d_a_b_yo_cpp@ */ static cXyz m_common_pos; /* 80639FF8-80639FFC 0000C8 0004+00 0/0 0/0 0/0 .bss m_common_count__22@unnamed@d_a_b_yo_cpp@ */ static u32 m_common_count; } // namespace /* 80639FFC-8063A000 0000CC 0004+00 0/0 0/0 0/0 .bss * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ #pragma push #pragma force_active on static u8 data_80639FFC[4]; #pragma pop /* 8063A000-8063A004 0000D0 0004+00 0/0 0/0 0/0 .bss * sInstance__35JASGlobalInstance<14JASAudioThread> */ #pragma push #pragma force_active on static u8 data_8063A000[4]; #pragma pop /* 8063A004-8063A008 0000D4 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ #pragma push #pragma force_active on static u8 data_8063A004[4]; #pragma pop /* 8063A008-8063A00C 0000D8 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ #pragma push #pragma force_active on static u8 data_8063A008[4]; #pragma pop /* 8063A00C-8063A010 0000DC 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> */ #pragma push #pragma force_active on static u8 data_8063A00C[4]; #pragma pop /* 8063A010-8063A014 0000E0 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> */ #pragma push #pragma force_active on static u8 data_8063A010[4]; #pragma pop /* 8063A014-8063A018 0000E4 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> */ #pragma push #pragma force_active on static u8 data_8063A014[4]; #pragma pop /* 8063A018-8063A01C 0000E8 0004+00 0/0 0/0 0/0 .bss * sInstance__36JASGlobalInstance<15JAISoundStarter> */ #pragma push #pragma force_active on static u8 data_8063A018[4]; #pragma pop /* 8063A01C-8063A020 0000EC 0004+00 0/0 0/0 0/0 .bss * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ #pragma push #pragma force_active on static u8 data_8063A01C[4]; #pragma pop /* 8063A020-8063A024 0000F0 0004+00 0/0 0/0 0/0 .bss * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ #pragma push #pragma force_active on static u8 data_8063A020[4]; #pragma pop /* 8063A024-8063A028 0000F4 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ #pragma push #pragma force_active on static u8 data_8063A024[4]; #pragma pop /* 8063A028-8063A02C 0000F8 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ #pragma push #pragma force_active on static u8 data_8063A028[4]; #pragma pop /* 8063A02C-8063A030 0000FC 0004+00 0/0 0/0 0/0 .bss * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ #pragma push #pragma force_active on static u8 data_8063A02C[4]; #pragma pop /* 8063A030-8063A034 000100 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> */ #pragma push #pragma force_active on static u8 data_8063A030[4]; #pragma pop /* 8063A034-8063A038 000104 0004+00 0/0 0/0 0/0 .bss * sInstance__33JASGlobalInstance<12JAISoundInfo> */ #pragma push #pragma force_active on static u8 data_8063A034[4]; #pragma pop /* 8063A038-8063A03C 000108 0004+00 0/0 0/0 0/0 .bss * sInstance__34JASGlobalInstance<13JAUSoundTable> */ #pragma push #pragma force_active on static u8 data_8063A038[4]; #pragma pop /* 8063A03C-8063A040 00010C 0004+00 0/0 0/0 0/0 .bss * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ #pragma push #pragma force_active on static u8 data_8063A03C[4]; #pragma pop /* 8063A040-8063A044 000110 0004+00 0/0 0/0 0/0 .bss * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ #pragma push #pragma force_active on static u8 data_8063A040[4]; #pragma pop /* 8063A044-8063A048 000114 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> */ #pragma push #pragma force_active on static u8 data_8063A044[4]; #pragma pop /* 8063A048-8063A04C 000118 0004+00 0/0 0/0 0/0 .bss * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ #pragma push #pragma force_active on static u8 data_8063A048[4]; #pragma pop /* 8063A04C-8063A050 00011C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> */ #pragma push #pragma force_active on static u8 data_8063A04C[4]; #pragma pop /* 8063A050-8063A054 000120 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> */ #pragma push #pragma force_active on static u8 data_8063A050[4]; #pragma pop /* 8063A054-8063A058 000124 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> */ #pragma push #pragma force_active on static u8 data_8063A054[4]; #pragma pop /* 8063A058-8063A05C 000128 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> */ #pragma push #pragma force_active on static u8 data_8063A058[4]; #pragma pop /* 8063A05C-8063A060 00012C 0004+00 0/0 0/0 0/0 .bss * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ #pragma push #pragma force_active on static u8 data_8063A05C[4]; #pragma pop /* 80639E58-80639E78 -00001 0020+00 1/0 0/0 0/0 .data l_daB_YO_Method */ static actor_method_class l_daB_YO_Method = { (process_method_func)daB_YO_Create, (process_method_func)daB_YO_Delete, (process_method_func)daB_YO_Execute, (process_method_func)daB_YO_IsDelete, (process_method_func)daB_YO_Draw, }; /* 80639E78-80639EA8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_B_YO */ extern actor_process_profile_definition g_profile_B_YO = { fpcLy_CURRENT_e, // mLayerID 7, // mListID fpcPi_CURRENT_e, // mListPrio PROC_B_YO, // mProcName &g_fpcLf_Method.base, // sub_method sizeof(daB_YO_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method 223, // mPriority &l_daB_YO_Method, // sub_method 0x00044000, // mStatus fopAc_ENEMY_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType };