diff --git a/config/ShieldD/rels/d_a_b_mgnD/symbols.txt b/config/ShieldD/rels/d_a_b_mgnD/symbols.txt index 1938ea706c9..7e6108ced9a 100644 --- a/config/ShieldD/rels/d_a_b_mgnD/symbols.txt +++ b/config/ShieldD/rels/d_a_b_mgnD/symbols.txt @@ -295,5 +295,5 @@ lbl_139_data_440 = .data:0x00000440; // type:object size:0x24 @123083 = .data:0x0000066C; // type:object size:0x11 scope:local data:string @123084 = .data:0x00000694; // type:object size:0xD scope:local data:string lbl_139_data_6A1 = .data:0x000006A1; // type:object size:0x93 -lbl_139_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte +l_initHIO = .bss:0x00000000; // type:object size:0x1 scope:local align:1 data:byte l_HIO = .bss:0x00000004; // type:object size:0x24 scope:global data:byte diff --git a/include/d/actor/d_a_b_mgn.h b/include/d/actor/d_a_b_mgn.h index 2727b6977e6..30956f6b06b 100644 --- a/include/d/actor/d_a_b_mgn.h +++ b/include/d/actor/d_a_b_mgn.h @@ -14,7 +14,7 @@ * * @details Hyrule Castle dungeon boss. * - */ +*/ class daB_MGN_c : public fopEn_enemy_c { public: @@ -89,8 +89,8 @@ public: /* 8060EAE0 */ int CreateHeap(); /* 8060F0D0 */ int create(); - bool isDown() { return field_0xb01 != 0; } - bool isAppear() { return field_0xb05 != 0; } + bool isDown() { return mDownFlag != 0; } + bool isAppear() { return mAppearFlag != 0; } private: /* 0x05AC */ request_of_phase_process_class mMgnPhase; @@ -111,18 +111,18 @@ private: /* 0x0A84 */ cXyz field_0xa84; /* 0x0A90 */ s16 field_0xa90; /* 0x0A92 */ s16 field_0xa92; - /* 0x0A94 */ u32 field_0xa94; + /* 0x0A94 */ u32 mShadowKey; /* 0x0A98 */ u16 mDamageInvulnerabilityTimer; /* 0x0A9C */ int field_0xa9c; /* 0x0AA0 */ int field_0xaa0; - /* 0x0AA4 */ int field_0xaa4; + /* 0x0AA4 */ int mBloodEffTimer; /* 0x0AA8 */ int field_0xaa8; /* 0x0AAC */ int field_0xaac; /* 0x0AB0 */ cXyz mNextGdgatePos; /* 0x0ABC */ cXyz mDemoCamEye; /* 0x0AC8 */ cXyz mDemoCamCenter; /* 0x0AD4 */ f32 mDemoCamFovy; - /* 0x0AD4 */ f32 field_0xad8; + /* 0x0AD4 */ f32 mDemoCamEyeStep; /* 0x0ADC */ f32 field_0xadc; /* 0x0AE0 */ s16 field_0xae0; /* 0x0AE2 */ s16 field_0xae2; @@ -134,34 +134,33 @@ private: /* 0x0AF8 */ u8 mKankyoColMode; /* 0x0AF9 */ u8 mActionMode; /* 0x0AFA */ u8 mMoveMode; - /* 0x0AFB */ u8 field_0xafb; - /* 0x0AFC */ u8 field_0xafc; + /* 0x0AFB */ u8 mSwBit; + /* 0x0AFC */ u8 mLeftRightFlag; /* 0x0AFD */ u8 field_0xafd; /* 0x0AFE */ u8 field_0xafe; /* 0x0AFF */ u8 field_0xaff; /* 0x0B00 */ u8 field_0xb00; - /* 0x0B01 */ u8 field_0xb01; + /* 0x0B01 */ u8 mDownFlag; /* 0x0B02 */ u8 mGdgateNum; /* 0x0B03 */ u8 field_0xb03; /* 0x0B04 */ u8 field_0xb04; - /* 0x0B05 */ u8 field_0xb05; + /* 0x0B05 */ u8 mAppearFlag; /* 0x0B06 */ u8 field_0xb06; /* 0x0B07 */ u8 field_0xb07; /* 0x0B06 */ u8 field_0xb08; - /* 0x0B09 */ u8 field_0xb09; - /* 0x0B0A */ u8 field_0xb0a; + /* 0x0B09 */ u8 mHeadLightEffFlag; + /* 0x0B0A */ u8 mHeadHitEffTimer; /* 0x0B0B */ u8 field_0xb0b; /* 0x0B0C */ u8 field_0xb0c; - /* 0x0B10 */ int field_0xb10; + /* 0x0B10 */ int mGdgateStatusIdx; /* 0x0B14 */ s16 field_0xb14; /* 0x0B16 */ s16 field_0xb16; /* 0x0B18 */ s16 field_0xb18; - /* 0x0B1A */ u8 field_0xb1a; /* 0x0B1C */ dBgS_AcchCir mAcchCir; /* 0x0B5C */ dBgS_ObjAcch mAcch; /* 0x0D34 */ dCcD_Stts mCcStts; /* 0x0D70 */ dCcD_Sph mBodyCcSph[15]; - /* 0x1FB8 */ u32 field_0x1fb8; + /* 0x1FB8 */ u32 mTgType; /* 0x1FBC */ dCcD_Sph mAtSph; /* 0x20F4 */ dCcD_Sph field_0x20f4[2]; /* 0x2364 */ dCcD_Sph field_0x2364[2]; @@ -177,7 +176,7 @@ private: /* 0x2654 */ mDoExt_btkAnm* mpGdgateBtk[4]; /* 0x2664 */ cXyz mGdgatePos[4]; /* 0x2670 */ u8 field_0x2694[0x26a4 - 0x2694]; - /* 0x26A4 */ u32 field_0x26a4[4]; + /* 0x26A4 */ u32 mGdgateStartEffID[4]; /* 0x26B4 */ u8 field_0x26b4[4]; /* 0x26B8 */ u8 mGdgateStatus[4]; /* 0x26BC */ u8 mGdgateType[4]; diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 84f34c80c36..b99dbdecb30 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -1174,7 +1174,7 @@ public: // static void onWolfEnemyCatch(fopAc_ac_c* i_actorP) { onWolfEnemyBiteAll(i_actorP,8);} bool checkWolfEnemyCatchOwn(fopAc_ac_c* i_actorP) { return checkWolfEnemyBiteAllOwn(i_actorP); } - bool checkWolfEnemyHangBiteOwn(fopAc_ac_c* i_actorP) const { return checkWolfEnemyBiteAllOwn(i_actorP); } + bool checkWolfEnemyHangBiteOwn(const fopAc_ac_c* i_actorP) const { return checkWolfEnemyBiteAllOwn(i_actorP); } bool checkWolfEnemyLeftThrow() const { return checkNoResetFlg2(FLG2_WOLF_ENEMY_LEFT_THROW); } void onWolfLightDropGet() { diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index aff17d28265..f48ea19acf9 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -311,13 +311,13 @@ public: bool checkWolfNoLock() const { return mFlags & fopEn_flag_WolfNoLock; } bool checkHeadLockFlg() const { return mFlags & fopEn_flag_HeadLock; } - bool checkWolfBiteDamage() const { return mFlags & fopEn_flag_WolfBiteDamage; } + BOOL checkWolfBiteDamage() const { return mFlags & fopEn_flag_WolfBiteDamage; } bool checkWolfDownPullFlg() const { return mFlags & fopEn_flag_WolfDownPull; } bool checkDownFlg() { return mFlags & fopEn_flag_Down; } bool checkCutDownHitFlg() const { return mFlags & fopEn_flag_CutDownHit; } bool checkWolfDownStartFlg() const { return mFlags & fopEn_flag_WolfDownStart; } bool checkDeadFlg() const { return mFlags & fopEn_flag_Dead; } - bool checkThrowMode(u8 param_1) const { return mThrowMode & param_1; } + BOOL checkThrowMode(u8 param_1) const { return mThrowMode & param_1; } u32* getMidnaBindID(int i_idx) { return mMidnaBindID + i_idx; } u8 getMidnaBindMode() { return mMidnaBindMode; } @@ -332,13 +332,25 @@ public: void onDownFlg() { mFlags |= fopEn_flag_Down; } void onHeadLockFlg() { mFlags |= fopEn_flag_HeadLock; } + #if DEBUG + void offWolfBiteDamage() { mFlags &= (u16)~fopEn_flag_WolfBiteDamage; } + #else void offWolfBiteDamage() { mFlags &= ~fopEn_flag_WolfBiteDamage; } + #endif void offCutDownHitFlg() { mFlags &= ~fopEn_flag_CutDownHit; } void offWolfDownPullFlg() { mFlags &= ~fopEn_flag_WolfDownPull; } void offDownFlg() { mFlags &= ~(fopEn_flag_WolfDownPull | fopEn_flag_WolfDownStart | fopEn_flag_CutDownHit | fopEn_flag_Down); } + #if DEBUG + void offWolfNoLock() { mFlags &= (u16)~fopEn_flag_WolfNoLock; } + #else void offWolfNoLock() { mFlags &= ~fopEn_flag_WolfNoLock; } + #endif void offHeadLockFlg() { mFlags &= ~fopEn_flag_HeadLock; } - void offThrowMode(u8 throwMode) { mThrowMode &= ~throwMode; } + #if DEBUG + void offThrowMode(u8 throwMode) { mThrowMode &= (u8)~throwMode; } + #else + void offThrowMode(u8 throwMode) { mThrowMode &= ~(throwMode & 0xFF); } + #endif void setMidnaBindMode(u8 i_bindMode) { mMidnaBindMode = i_bindMode; } void setMidnaBindID(u8 i_idx, u32 i_bindID) { mMidnaBindID[i_idx] = i_bindID; } diff --git a/src/d/actor/d_a_b_mgn.cpp b/src/d/actor/d_a_b_mgn.cpp index e986c4bff40..9004ced4078 100644 --- a/src/d/actor/d_a_b_mgn.cpp +++ b/src/d/actor/d_a_b_mgn.cpp @@ -13,23 +13,6 @@ #include "m_Do/m_Do_graphic.h" #include "f_op/f_op_actor_enemy.h" -class daB_MGN_HIO_c : public JORReflexible { -public: - /* 8060572C */ daB_MGN_HIO_c(); - /* 8060F8D0 */ virtual ~daB_MGN_HIO_c() {} - - void genMessage(JORMContext*); - - /* 0x04 */ s8 no; - /* 0x08 */ f32 base_size; - /* 0x0C */ f32 dash_speed; - /* 0x10 */ f32 turn_speed; - /* 0x14 */ f32 dash_anim; - /* 0x18 */ f32 jewel_R; - /* 0x1C */ f32 jewel_G; - /* 0x20 */ f32 jewel_B; -}; - enum B_MGN_RES_FILE_ID { /* BCK */ /* 0x06 */ BCK_MGN_APPROACH = 6, @@ -184,6 +167,48 @@ enum Joint { /* 0x4B */ JNT_TAIL4, }; +class daB_MGN_HIO_c : public JORReflexible { +public: + /* 8060572C */ daB_MGN_HIO_c(); + /* 8060F8D0 */ virtual ~daB_MGN_HIO_c() {} + + void genMessage(JORMContext*); + + /* 0x04 */ s8 no; + /* 0x08 */ f32 base_size; + /* 0x0C */ f32 dash_speed; + /* 0x10 */ f32 turn_speed; + /* 0x14 */ f32 dash_anim; + /* 0x18 */ f32 jewel_R; + /* 0x1C */ f32 jewel_G; + /* 0x20 */ f32 jewel_B; +}; + +/* 8060572C-8060577C 0000EC 0050+00 1/1 0/0 0/0 .text __ct__13daB_MGN_HIO_cFv */ +daB_MGN_HIO_c::daB_MGN_HIO_c() { + no = -1; + base_size = 1.2f; + dash_speed = 50.0f; + turn_speed = 70.0f; + dash_anim = 1.0f; + jewel_R = 100.0f; + jewel_G = 100.0f; + jewel_B = 100.0f; +} + +#if DEBUG +void daB_MGN_HIO_c::genMessage(JORMContext* ctx) { + ctx->genLabel(" 豚ガノン", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("基本サイズ", &base_size, 0.0f, 5.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("ダッシュ速度", &dash_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("旋回速度", &turn_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("ダッシュアニメ", &dash_anim, 0.0f, 10.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("宝石R", &jewel_R, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("宝石G", &jewel_G, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("宝石B", &jewel_B, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); +} +#endif + namespace { /* 806100CC-8061010C 000038 0040+00 0/1 0/0 0/0 .data cc_sph_src__23@unnamed@d_a_b_mgn_cpp@ */ static dCcD_SrcSph cc_sph_src = { @@ -230,30 +255,19 @@ static u8 body_front_sph[15] = { }; } // namespace -/* 8060572C-8060577C 0000EC 0050+00 1/1 0/0 0/0 .text __ct__13daB_MGN_HIO_cFv */ -daB_MGN_HIO_c::daB_MGN_HIO_c() { - no = -1; - base_size = 1.2f; - dash_speed = 50.0f; - turn_speed = 70.0f; - dash_anim = 1.0f; - jewel_R = 100.0f; - jewel_G = 100.0f; - jewel_B = 100.0f; -} - /* 8060577C-8060584C 00013C 00D0+00 1/1 0/0 0/0 .text ctrlJoint__9daB_MGN_cFP8J3DJointP8J3DModel */ int daB_MGN_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { - int jntNo = i_joint->getJntNo(); - mDoMtx_stack_c::copy(i_model->getAnmMtx(jntNo)); + u16 jntNo = i_joint->getJntNo(); + int jointNo = jntNo; + mDoMtx_stack_c::copy(i_model->getAnmMtx(jointNo)); - if (jntNo == JNT_BACKBONE1) { + if (jointNo == JNT_BACKBONE1) { mDoMtx_stack_c::YrotM(shape_angle.y - field_0xb16); - } else if (jntNo == JNT_NECK) { + } else if (jointNo == JNT_NECK) { mDoMtx_stack_c::YrotM(field_0xb16 - field_0xb14); } - i_model->setAnmMtx(jntNo, mDoMtx_stack_c::get()); + i_model->setAnmMtx(jointNo, mDoMtx_stack_c::get()); cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); return 1; } @@ -313,7 +327,7 @@ int daB_MGN_c::draw() { gnd_height = mAcch.GetGroundH(); } - field_0xa94 = dComIfGd_setShadow(field_0xa94, 0, model, &sp18, 3000.0f, 0.0f, current.pos.y, + mShadowKey = dComIfGd_setShadow(mShadowKey, 0, model, &sp18, 3000.0f, 0.0f, current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); @@ -484,10 +498,10 @@ void daB_MGN_c::setBodySlideEffect() { for (int i = 0; i < 2; i++) { if (i == 0) { - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x3f)); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_WAIST)); mDoMtx_stack_c::multVecZero(&effpos); } else { - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(2)); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_BACKBONE2)); mDoMtx_stack_c::transM(150.0f, 0.0f, 0.0f); mDoMtx_stack_c::multVecZero(&effpos); } @@ -507,7 +521,7 @@ void daB_MGN_c::setOpeningEffect() { dBgS_GndChk gndchk; cXyz effpos; - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x34)); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HANDR)); mDoMtx_stack_c::multVecZero(&effpos); effpos.y += 100.0f; @@ -518,7 +532,7 @@ void daB_MGN_c::setOpeningEffect() { fopAcM_effSmokeSet1(&field_0x25f8[0], &field_0x2608[0], &effpos, NULL, 15.0f, &tevStr, 1); } - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x25)); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HANDL)); mDoMtx_stack_c::multVecZero(&effpos); effpos.y += 100.0f; gndchk.SetPos(&effpos); @@ -535,8 +549,6 @@ void daB_MGN_c::setStepEffect() { cXyz effpos; for (int i = 0; i < 2; i++) { - J3DModel* model = mpMgnModelMorf->getModel(); - static int foot_jnt[2] = {JNT_HANDR, JNT_HANDL}; mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(foot_jnt[i])); mDoMtx_stack_c::multVecZero(&effpos); @@ -559,11 +571,10 @@ void daB_MGN_c::setFallAttackEffect() { for (int i = 0; i < 2; i++) { if (i == 0) { - J3DModel* model = mpMgnModelMorf->getModel(); - mDoMtx_stack_c::copy(model->getAnmMtx(0x3F)); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_WAIST)); mDoMtx_stack_c::multVecZero(&effpos); } else { - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(2)); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_BACKBONE2)); mDoMtx_stack_c::transM(150.0f, 0.0f, 0.0f); mDoMtx_stack_c::multVecZero(&effpos); } @@ -581,31 +592,31 @@ void daB_MGN_c::setFallAttackEffect() { /* 80606A10-80606AEC 0013D0 00DC+00 1/1 0/0 0/0 .text setHeadLightEffect__9daB_MGN_cFv */ void daB_MGN_c::setHeadLightEffect() { - mHeadLightEmitterID = dComIfGp_particle_set(mHeadLightEmitterID, 0x8C1F, ¤t.pos, &tevStr, &shape_angle, + mHeadLightEmitterID = dComIfGp_particle_set(mHeadLightEmitterID, dPa_RM(ID_ZI_S_MGN_HEADCORE_A), ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mHeadLightEmitterID); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(mpMgnModelMorf->getModel()->getAnmMtx(27)); + emitter->setGlobalSRTMatrix(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HEAD)); } } /* 80606AEC-80606C6C 0014AC 0180+00 1/1 0/0 0/0 .text setHeadHitEffect__9daB_MGN_cFv */ void daB_MGN_c::setHeadHitEffect() { - mHeadHitEmitterID = dComIfGp_particle_set(mHeadHitEmitterID, 0x8C1D, ¤t.pos, &tevStr, &shape_angle, + mHeadHitEmitterID = dComIfGp_particle_set(mHeadHitEmitterID, dPa_RM(ID_ZI_S_MGN_HEADCOREHIT_A), ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mHeadHitEmitterID); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(mpMgnModelMorf->getModel()->getAnmMtx(0x1b)); + emitter->setGlobalSRTMatrix(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HEAD)); } - mHeadHitEmitter2ID = dComIfGp_particle_set(mHeadHitEmitter2ID, 0x8C1E, ¤t.pos, &tevStr, &shape_angle, + mHeadHitEmitter2ID = dComIfGp_particle_set(mHeadHitEmitter2ID, dPa_RM(ID_ZI_S_MGN_HEADCOREHIT_B), ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); emitter = dComIfGp_particle_getEmitter(mHeadHitEmitter2ID); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(mpMgnModelMorf->getModel()->getAnmMtx(0x1b)); + emitter->setGlobalSRTMatrix(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HEAD)); } } @@ -654,41 +665,47 @@ void daB_MGN_c::calcHideSmokeEffect() { case 1: mGdgateStatus[i] = 2; - mpGdgateModelMorf[i]->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_mgne", 6), 0, 0.0f, - anm_speed, 0.0f, -1.0f); + mpGdgateModelMorf[i]->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_mgne", BCK_EF_GDGATE_START), + J3DFrameCtrl::EMode_NONE, 0.0f, anm_speed, 0.0f, -1.0f); mpGdgateStartBrk[i]->remove(modelData); - mpGdgateStartBrk[i]->init(modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgne", 13), - 1, 0, anm_speed, 0, -1); + mpGdgateStartBrk[i]->init(modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgne", BRK_EF_GDGATE_START), + 1, J3DFrameCtrl::EMode_NONE, anm_speed, 0, -1); mpGdgateBtk[i]->remove(modelData); mpGdgateBtk[i]->init(mpMgnModelMorf->getModel()->getModelData(), - (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgne", 16), 1, 2, - anm_speed, 0, -1); + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgne", BTK_EF_GDGATE), + 1, J3DFrameCtrl::EMode_LOOP, anm_speed, 0, -1); mpGdgateAppearBrk[i]->remove(modelData); - mpGdgateAppearBrk[i]->init(modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgne", 12), - 1, 0, 0.0f, 0, -1); + mpGdgateAppearBrk[i]->init(modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgne", BRK_EF_GDGATE_APPEAR), + 1, J3DFrameCtrl::EMode_NONE, 0.0f, 0, -1); field_0x26b4[i] = 1; + // fallthrough case 2: cLib_addCalcAngleS(&mGdgateAngle[i], cLib_targetAngleY(&mGdgatePos[i], &daPy_getPlayerActorClass()->current.pos), 0x10, 0x100, 0x20); - field_0x26a4[i] = dComIfGp_particle_set(field_0x26a4[i], 0x8A15, &mGdgatePos[i], &tevStr, + mGdgateStartEffID[i] = dComIfGp_particle_set(mGdgateStartEffID[i], dPa_RM(ID_ZI_S_GDG_START_A), &mGdgatePos[i], &tevStr, &eff_rot, &eff_size, 0xFF, NULL, -1, NULL, NULL, NULL); break; + case 7: - dComIfGp_particle_set(0x8A14, &mGdgatePos[i], &tevStr, &eff_rot, &eff_size); + dComIfGp_particle_set(dPa_RM(ID_ZI_S_GDG_APPEAR_A), &mGdgatePos[i], &tevStr, &eff_rot, &eff_size); + // fallthrough case 3: mGdgateStatus[i] = 4; mpGdgateStartBrk[i]->remove(modelData); - mpGdgateStartBrk[i]->init(modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgne", 13), 1, 0, -1.0f, 0, -1); + mpGdgateStartBrk[i]->init(modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgne", BRK_EF_GDGATE_START), + 1, J3DFrameCtrl::EMode_NONE, -1.0f, 0, -1); field_0x26b4[i] = 1; + // fallthrough case 4: if (mpGdgateStartBrk[i]->isStop()) { mGdgateStatus[i] = 0; field_0x26b4[i] = 0; } break; + case 5: mGdgateStatus[i] = 6; mpGdgateAppearBrk[i]->setPlaySpeed(anm_speed); @@ -737,7 +754,7 @@ void daB_MGN_c::drawHideSmokeEffect() { /* 8060729C-80607498 001C5C 01FC+00 5/5 0/0 0/0 .text setBloodEffect__9daB_MGN_cFv */ void daB_MGN_c::setBloodEffect() { - if (field_0xaa4 == 0) { + if (mBloodEffTimer == 0) { for (int i = 0; i < 20; i++) { if (mBloodEffMode[i] == 0) { mBloodEffMode[i] = 1; @@ -751,9 +768,9 @@ void daB_MGN_c::setBloodEffect() { } if (cM_rnd() < 0.3f) { - field_0xaa4 = (int)(var_f31 * (cM_rndF(3.0f) + 3.0f)); + mBloodEffTimer = (int)(var_f31 * (cM_rndF(3.0f) + 3.0f)); } else { - field_0xaa4 = (int)(var_f31 * (cM_rndFX(10.0f) + 15.0f)); + mBloodEffTimer = (int)(var_f31 * (cM_rndFX(10.0f) + 15.0f)); } } } @@ -764,8 +781,9 @@ void daB_MGN_c::calcBloodMove() { switch (mBloodEffMode[i]) { case 0: break; + case 1: { - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(1)); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_BACKBONE1)); mDoMtx_stack_c::transM(cM_rndFX(10.0f) + 200.0f, cM_rndFX(10.0f) + -150.0f, cM_rndFX(10.0f)); mDoMtx_stack_c::multVecZero(&mBloodEffPos[i]); @@ -777,6 +795,7 @@ void daB_MGN_c::calcBloodMove() { f32 temp_f31 = cM_rnd() + 0.5f; field_0x8f0[i] = temp_f31; mBloodEffSize[i].set(temp_f31, temp_f31, temp_f31); + // fallthrough } case 2: if (field_0x710[i].y > -60.0f) { @@ -791,6 +810,7 @@ void daB_MGN_c::calcBloodMove() { mBloodEffMode[i] = 3; } break; + case 3: if (mBloodEffSize[i].y > field_0x8f0[i] * 0.2f) { mBloodEffSize[i].y *= 0.6f; @@ -808,6 +828,7 @@ void daB_MGN_c::calcBloodMove() { mBloodEffMode[i] = 4; } break; + case 4: mBloodEffSize[i].y *= 0.7f; mBloodEffSize[i].x *= 1.01f; @@ -882,11 +903,12 @@ void daB_MGN_c::setActionMode(int i_action, int i_mode) { } /* 80607A80-80607B50 002440 00D0+00 2/2 0/0 0/0 .text setExitMode__9daB_MGN_cFi */ -void daB_MGN_c::setExitMode(BOOL param_1) { +void daB_MGN_c::setExitMode(BOOL i_exitMode) { mpMgnBtk->init(mpMgnModelMorf->getModel()->getModelData(), - (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", 61), 1, 0, 1.4f, 0, -1); + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", BTK_MGN_EXIT), + 1, J3DFrameCtrl::EMode_NONE, 1.4f, 0, -1); - if (!param_1) { + if (!i_exitMode) { setActionMode(ACTION_DASH_e, 4); } else { setActionMode(ACTION_CIRCLE_e, 4); @@ -898,17 +920,17 @@ void daB_MGN_c::setExitMode(BOOL param_1) { /* 80607B50-80607B80 002510 0030+00 1/1 0/0 0/0 .text onBodyShield__9daB_MGN_cFv */ void daB_MGN_c::onBodyShield() { - field_0x1fb8 = 0xDCFBFDFD; + mTgType = 0xDCFBFDFD; for (int i = 0; i < 15; i++) { - mBodyCcSph[i].SetTgType(field_0x1fb8); + mBodyCcSph[i].SetTgType(mTgType); } } /* 80607B80-80607BB0 002540 0030+00 1/1 0/0 0/0 .text offBodyShield__9daB_MGN_cFv */ void daB_MGN_c::offBodyShield() { - field_0x1fb8 = 0xFBFDFD; + mTgType = 0xFBFDFD; for (int i = 0; i < 15; i++) { - mBodyCcSph[i].SetTgType(field_0x1fb8); + mBodyCcSph[i].SetTgType(mTgType); } } @@ -934,7 +956,7 @@ void daB_MGN_c::offBodySlideAt() { bool daB_MGN_c::checkHitSlideAt() { for (int i = 0; i < 15; i++) { if (mBodyCcSph[i].ChkAtHit() && !mBodyCcSph[i].ChkAtShieldHit()) { - if (fopAcM_GetName(mBodyCcSph[i].GetAtHitObj()->GetAc()) == PROC_ALINK) { + if (fopAcM_GetName(dCc_GetAc(mBodyCcSph[i].GetAtHitObj()->GetAc())) == PROC_ALINK) { return true; } } @@ -961,7 +983,7 @@ void daB_MGN_c::offBodyFallAt() { /* 80607D08-80607D44 0026C8 003C+00 4/4 0/0 0/0 .text onBodyCo__9daB_MGN_cFv */ void daB_MGN_c::onBodyCo() { - field_0xb05 = 1; + mAppearFlag = 1; for (int i = 0; i < 15; i++) { mBodyCcSph[i].OnCoSetBit(); @@ -971,7 +993,7 @@ void daB_MGN_c::onBodyCo() { /* 80607D44-80607D7C 002704 0038+00 4/4 0/0 0/0 .text offBodyCo__9daB_MGN_cFv */ void daB_MGN_c::offBodyCo() { - field_0xb05 = 0; + mAppearFlag = 0; for (int i = 0; i < 15; i++) { mBodyCcSph[i].OffCoSetBit(); @@ -1002,9 +1024,9 @@ cXyz daB_MGN_c::getNearHitPos(cXyz* param_1) { cXyz sp14, sp8; f32 var_f31 = 1000.0f; for (int i = 0; i < 6; i++) { - int var_r28 = i % 3 + field_0xafc * 3; + int var_r28 = i % 3 + mLeftRightFlag * 3; - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(1)); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_BACKBONE1)); mDoMtx_stack_c::transM(sp38[var_r28]); mDoMtx_stack_c::multVecZero(&sp8); @@ -1031,11 +1053,11 @@ void daB_MGN_c::damage_check() { if (field_0xafd == 0 && field_0xaff >= 4) { for (int i = 0; i < 15; i++) { - mBodyCcSph[i].SetTgType(field_0x1fb8 & 0xFFBFDFDF); + mBodyCcSph[i].SetTgType(mTgType & 0xFFBFDFDF); } } else { for (int i = 0; i < 15; i++) { - mBodyCcSph[i].SetTgType(field_0x1fb8); + mBodyCcSph[i].SetTgType(mTgType); } } @@ -1051,8 +1073,8 @@ void daB_MGN_c::damage_check() { field_0x20f4[0].OffTgNoHitMark(); field_0x20f4[1].OffTgNoHitMark(); } else { - field_0x20f4[0].SetTgType(0xdc000000); - field_0x20f4[1].SetTgType(0xdc000000); + field_0x20f4[0].SetTgType(0xDC000000); + field_0x20f4[1].SetTgType(0xDC000000); field_0x20f4[0].OnTgNoHitMark(); field_0x20f4[1].OnTgNoHitMark(); } @@ -1081,7 +1103,7 @@ void daB_MGN_c::damage_check() { } if (mAtInfo.mAttackPower <= 1) { - mDamageInvulnerabilityTimer = KREG_S(8) + 10; + mDamageInvulnerabilityTimer = (u8)(KREG_S(8) + 10); } s16 prev_hp = health; @@ -1089,7 +1111,7 @@ void daB_MGN_c::damage_check() { if (field_0xafd == 0) { mSound.startCreatureVoice(Z2SE_EN_MGN_V_KOROBU, -1); - field_0xb0a = 100; + mHeadHitEffTimer = 100; JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mHeadLightEmitterID); if (emitter != NULL) { @@ -1120,7 +1142,7 @@ void daB_MGN_c::damage_check() { } csXyz effrot(0, cLib_targetAngleY(&sp24, &player->current.pos), 0); - dComIfGp_particle_set(0x8C22, &sp24, &tevStr, &effrot, 0); + dComIfGp_particle_set(dPa_RM(ID_ZI_S_MGN_BODYCOREHIT_A), &sp24, &tevStr, &effrot, 0); } if (field_0xb08 == 0) { @@ -1208,11 +1230,12 @@ void daB_MGN_c::executeCircle() { field_0xaa8 = 30; mMoveMode = 1; } + // fallthrough case 0: if (checkBck(BCK_MGN_APPROACH)) { - setBck(BCK_MGN_DASH, 2, 0.0f, l_HIO.dash_anim); + setBck(BCK_MGN_DASH, J3DFrameCtrl::EMode_LOOP, 0.0f, l_HIO.dash_anim); } else if (!checkBck(BCK_MGN_DOWNR_DAMAGE) && !checkBck(BCK_MGN_DOWNL_DAMAGE)) { - setBck(BCK_MGN_DASH, 2, 3.0f, l_HIO.dash_anim); + setBck(BCK_MGN_DASH, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.dash_anim); } field_0xa90 = var_r27; @@ -1223,7 +1246,7 @@ void daB_MGN_c::executeCircle() { } field_0xa90 += field_0xa92; - mMoveMode += 2; + mMoveMode += (u8)2; field_0xa9c = cM_rndFX(50.0f) + 200.0f; mAtSph.OnAtSetBit(); @@ -1231,13 +1254,15 @@ void daB_MGN_c::executeCircle() { speedF = l_HIO.turn_speed; attention_info.flags = 0; + // fallthrough case 2: case 3: setDashSmokeEffect(); setBloodEffect(); + // fallthrough case 4: if (mpMgnModelMorf->isStop() && (checkBck(BCK_MGN_DOWNR_DAMAGE) || checkBck(BCK_MGN_DOWNL_DAMAGE))) { - setBck(BCK_MGN_DASH, 2, 3.0f, 1.0f); + setBck(BCK_MGN_DASH, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); } if (abs((s16)(field_0xa90 - var_r27)) < 0x800) { @@ -1261,9 +1286,9 @@ void daB_MGN_c::executeCircle() { mAtSph.OffAtSetBit(); if (field_0xa92 > 0) { - setBck(BCK_MGN_SIDESLIPR, 2, 3.0f, 1.0f); + setBck(BCK_MGN_SIDESLIPR, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); } else { - setBck(BCK_MGN_SIDESLIPL, 2, 3.0f, 1.0f); + setBck(BCK_MGN_SIDESLIPL, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); } } } else if (mMoveMode == 3) { @@ -1277,9 +1302,9 @@ void daB_MGN_c::executeCircle() { cXyz pos; mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(shape_angle.y); - mDoMtx_stack_c::transM(0.0f, 0.0f, 1000.0f); + mDoMtx_stack_c::transM(0.0f, 0.0f, nREG_F(10) + 1000.0f); mDoMtx_stack_c::multVecZero(&pos); - dComIfGp_particle_set(0x8c1c, &pos, &tevStr, &shape_angle, 0); + dComIfGp_particle_set(dPa_RM(ID_ZI_S_MGN_EXIT_A), &pos, &tevStr, &shape_angle, 0); mSound.startCreatureSound(Z2SE_EN_MGN_WARP, 0, -1); } @@ -1289,6 +1314,7 @@ void daB_MGN_c::executeCircle() { } } break; + case 5: setSlideSmokeEffect(); setBloodEffect(); @@ -1307,11 +1333,12 @@ void daB_MGN_c::executeCircle() { cLib_chaseF(&speedF, 0.0f, 1.5f); if (!speedF) { - setBck(BCK_MGN_WAIT, 2, 30.0f, 1.0f); + setBck(BCK_MGN_WAIT, J3DFrameCtrl::EMode_LOOP, 30.0f, 1.0f); field_0xa9c = 30; mMoveMode = 6; } break; + case 6: setBloodEffect(); @@ -1358,35 +1385,36 @@ void daB_MGN_c::executeDash() { field_0xa90 = angle; if (field_0xaff >= 5) { - field_0xb10 = setHideSmokeEffect(&mNextGdgatePos, 0); + mGdgateStatusIdx = setHideSmokeEffect(&mNextGdgatePos, 0); field_0xafd = 0; attention_info.flags = 0; mMoveMode = 12; field_0xa9c = 20; - setBck(BCK_MGN_WAIT, 2, 3.0f, 1.0f); + setBck(BCK_MGN_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); } else { speedF = 0.0f; if (((cM_rnd() < 0.3f && mGdgateNum >= 3) || mGdgateNum >= 10) && player_pos.absXZ(mNextGdgatePos) > 2000.0f) { - field_0xb10 = setHideSmokeEffect(&mNextGdgatePos, 0); + mGdgateStatusIdx = setHideSmokeEffect(&mNextGdgatePos, 0); field_0xafd = 0; attention_info.flags = 0; mMoveMode = 12; field_0xa9c = 60; - setBck(BCK_MGN_WAIT, 2, 3.0f, 1.0f); + setBck(BCK_MGN_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); shape_angle.y = fopAcM_searchPlayerAngleY(this); current.angle.y = shape_angle.y; } else { mGdgateNum++; - field_0xb10 = setHideSmokeEffect(&mNextGdgatePos, 0); + mGdgateStatusIdx = setHideSmokeEffect(&mNextGdgatePos, 0); field_0xa9c = cM_rndF(15.0f) + 30.0f; mMoveMode = 20; } } break; } + case 12: if (field_0xa9c == 0) { if (field_0xaff >= 5) { @@ -1395,21 +1423,22 @@ void daB_MGN_c::executeDash() { field_0xa9c = 30; } - if (field_0xb10 != -1) { - mGdgateStatus[field_0xb10] = 5; + if (mGdgateStatusIdx != -1) { + mGdgateStatus[mGdgateStatusIdx] = 5; } mMoveMode = 13; } break; + case 13: if (field_0xa9c == 0) { onBodyCo(); mMoveMode = 2; mpMgnBtk->init(mpMgnModelMorf->getModel()->getModelData(), - (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", 0x3c), 1, 0, 1.4f, - 0, -1); + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", BTK_MGN_ENTER), + 1, J3DFrameCtrl::EMode_NONE, 1.4f, 0, -1); mAcch.ClrWallHit(); field_0xaac = 20; @@ -1417,9 +1446,9 @@ void daB_MGN_c::executeDash() { mJewelColorMode = 1; speedF = speed.y = gravity = 0.0f; - if (field_0xb10 != -1) { - current.angle.y = shape_angle.y = mGdgateAngle[field_0xb10]; - mGdgateStatus[field_0xb10] = 7; + if (mGdgateStatusIdx != -1) { + current.angle.y = shape_angle.y = mGdgateAngle[mGdgateStatusIdx]; + mGdgateStatus[mGdgateStatusIdx] = 7; } current.pos.set((mNextGdgatePos.x - cM_ssin(shape_angle.y) * 1000.0f), mNextGdgatePos.y, @@ -1429,23 +1458,26 @@ void daB_MGN_c::executeDash() { field_0xb16 = field_0xb14 = shape_angle.y; } break; + case 20: - if (field_0xb10 != -1) { - current.angle.y = shape_angle.y = mGdgateAngle[field_0xb10]; + if (mGdgateStatusIdx != -1) { + current.angle.y = shape_angle.y = mGdgateAngle[mGdgateStatusIdx]; } if (field_0xa9c == 0) { - if (field_0xb10 != -1) { - mGdgateStatus[field_0xb10] = 3; + if (mGdgateStatusIdx != -1) { + mGdgateStatus[mGdgateStatusIdx] = 3; } mMoveMode = 11; } break; + case 0: mSound.startCreatureVoice(Z2SE_EN_MGN_V_GROWL, -1); - setBck(BCK_MGN_APPROACH, 0, 3.0f, 1.0f); + setBck(BCK_MGN_APPROACH, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); mMoveMode = 1; mJewelColorMode = 2; + // fallthrough case 1: attention_info.flags = 0; if (player_sp14->checkNowWolf()) { @@ -1458,15 +1490,16 @@ void daB_MGN_c::executeDash() { field_0xaac = 0; } break; + case 2: if (field_0xaac == 0) { gravity = -5.0f; } if (checkBck(BCK_MGN_APPROACH)) { - setBck(BCK_MGN_DASH, 2, 0.0f, l_HIO.dash_anim); + setBck(BCK_MGN_DASH, J3DFrameCtrl::EMode_LOOP, 0.0f, l_HIO.dash_anim); } else { - setBck(BCK_MGN_DASH, 2, 3.0f, l_HIO.dash_anim); + setBck(BCK_MGN_DASH, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.dash_anim); } mMoveMode = 3; @@ -1487,15 +1520,14 @@ void daB_MGN_c::executeDash() { if (daPy_getPlayerActorClass()->checkNowWolf()) { if (field_0xb0c < 3) { field_0xb0c++; - } else { - if (!dComIfGs_isOneZoneSwitch(9, fopAcM_GetRoomNo(this))) { - dComIfGs_onOneZoneSwitch(9, fopAcM_GetRoomNo(this)); - } + } else if (!dComIfGs_isOneZoneSwitch(9, fopAcM_GetRoomNo(this))) { + dComIfGs_onOneZoneSwitch(9, fopAcM_GetRoomNo(this)); } } } + // fallthrough case 3: - field_0xb09 = 1; + mHeadLightEffFlag = 1; attention_info.flags = 0; if (player_sp14->checkNowWolf()) { @@ -1578,6 +1610,7 @@ void daB_MGN_c::executeDash() { } } break; + case 4: cLib_chaseF(&field_0xae8, 0.0f, 0.05f); @@ -1588,7 +1621,7 @@ void daB_MGN_c::executeDash() { mDoMtx_stack_c::transM(0.0f, 0.0f, 1000.0f + nREG_F(10)); mDoMtx_stack_c::multVecZero(&sp30); - dComIfGp_particle_set(0x8c1c, &sp30, &tevStr, &shape_angle, 0); + dComIfGp_particle_set(dPa_RM(ID_ZI_S_MGN_EXIT_A), &sp30, &tevStr, &shape_angle, 0); mSound.startCreatureSound(Z2SE_EN_MGN_WARP, 0, -1); } @@ -1605,14 +1638,16 @@ void daB_MGN_c::executeDash() { } } break; + case 5: - setBck(BCK_MGN_DASH, 2, 3.0f, l_HIO.dash_anim); + setBck(BCK_MGN_DASH, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.dash_anim); mMoveMode = 6; field_0x20f4[0].OnTgSetBit(); mAtSph.OnAtSetBit(); mAtSph.SetAtAtp(2); current.angle.y = shape_angle.y; speedF = l_HIO.dash_speed; + // fallthrough case 6: { if (mpMgnBtk->isStop()) { setBloodEffect(); @@ -1636,6 +1671,7 @@ void daB_MGN_c::executeDash() { } break; } + case 8: case 9: case 14: @@ -1651,13 +1687,13 @@ void daB_MGN_c::executeDash() { /* 80609D70-8060A670 004730 0900+00 2/1 0/0 0/0 .text executeThrown__9daB_MGN_cFv */ void daB_MGN_c::executeThrown() { - cXyz sp4C; daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz target; mDoMtx_stack_c::transS(player->current.pos); mDoMtx_stack_c::YrotM(player->shape_angle.y); mDoMtx_stack_c::transM(0.0f, 0.0f, 787.0f); - mDoMtx_stack_c::multVecZero(&sp4C); + mDoMtx_stack_c::multVecZero(&target); switch (mMoveMode) { case 0: @@ -1665,20 +1701,21 @@ void daB_MGN_c::executeThrown() { dComIfGs_onOneZoneSwitch(2, fopAcM_GetRoomNo(this)); } - setBck(BCK_MGN_MDCATCHST, 0, 3.0f, 1.0f); + setBck(BCK_MGN_MDCATCHST, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); speedF = 0.0f; mMoveMode = 2; gravity = 0.0f; field_0xb03 = 0; - field_0xb01 = 1; + mDownFlag = 1; dComIfGs_onOneZoneSwitch(11, fopAcM_GetRoomNo(this)); attention_info.flags = 0; - dComIfGp_getVibration().StartQuake(6, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartQuake(VIBMODE_S_POWER6, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); mSound.startCreatureSound(Z2SE_EN_MGN_MIDNA_CATCHED, 0, -1); + // fallthrough case 2: mSound.startCreatureVoiceLevel(Z2SE_EN_MGN_V_MIDNA_CATCHED, -1); @@ -1686,75 +1723,77 @@ void daB_MGN_c::executeThrown() { setBodySlideEffect(); - cLib_chasePos(¤t.pos, sp4C, 100.0f); + cLib_chasePos(¤t.pos, target, 100.0f); if (mpMgnModelMorf->isStop()) { - setBck(BCK_MGN_MDCATCHED, 2, 3.0f, 1.0f); + setBck(BCK_MGN_MDCATCHED, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); mMoveMode = 3; field_0xa9c = 30; } break; + case 3: mSound.startCreatureVoiceLevel(Z2SE_EN_MGN_V_MIDNA_CATCHED, -1); dComIfGp_set3DStatusForce(0x13, 5, 0); - cLib_chasePos(¤t.pos, sp4C, 100.0f); + cLib_chasePos(¤t.pos, target, 100.0f); shape_angle.y = fopAcM_searchPlayerAngleY(this); if (field_0xa9c == 0) { - dComIfGp_getVibration().StopQuake(0x1f); + dComIfGp_getVibration().StopQuake(0x1F); } if (checkThrowMode(0x10)) { - dComIfGp_getVibration().StopQuake(0x1f); + dComIfGp_getVibration().StopQuake(0x1F); offThrowMode(0x10); - setBck(BCK_MGN_MDTHROWRST, 0, 3.0f, 1.0f); + setBck(BCK_MGN_MDTHROWRST, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); - field_0xafc = 1; + mLeftRightFlag = 1; mMoveMode = 5; field_0xafd = 1; } else if (checkThrowMode(8)) { - dComIfGp_getVibration().StopQuake(0x1f); + dComIfGp_getVibration().StopQuake(0x1F); offThrowMode(8); - setBck(BCK_MGN_MDTHROWLST, 0, 3.0f, 1.0f); + setBck(BCK_MGN_MDTHROWLST, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); - field_0xafc = 0; + mLeftRightFlag = 0; mMoveMode = 5; field_0xafd = 1; } else if (checkThrowMode(4)) { dComIfGs_offOneZoneSwitch(11, fopAcM_GetRoomNo(this)); - dComIfGp_getVibration().StopQuake(0x1f); + dComIfGp_getVibration().StopQuake(0x1F); offThrowMode(4); mSound.startCreatureVoice(Z2SE_EN_MGN_V_MIDNA_RELEASE, -1); - setBck(BCK_MGN_BLOW, 0, 3.0f, 1.0f); + setBck(BCK_MGN_BLOW, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); mMoveMode = 10; speedF = 0.0f; } break; + case 5: mSound.startCreatureVoiceLevel(Z2SE_EN_MGN_V_MIDNA_CATCHED, -1); - cLib_chasePos(¤t.pos, sp4C, 100.0f); + cLib_chasePos(¤t.pos, target, 100.0f); shape_angle.y = fopAcM_searchPlayerAngleY(this); if (mpMgnModelMorf->isStop()) { gravity = -5.0f; - if (field_0xafc == 0) { - setBck(BCK_MGN_MDTHROWLED, 0, 3.0f, 1.0f); + if (mLeftRightFlag == 0) { + setBck(BCK_MGN_MDTHROWLED, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); current.angle.y = shape_angle.y + -0x2800; field_0xa90 = shape_angle.y + -0x1000; field_0xa92 = 0x200; } else { - setBck(BCK_MGN_MDTHROWRED, 0, 3.0f, 1.0f); + setBck(BCK_MGN_MDTHROWRED, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); current.angle.y = shape_angle.y + 0x2800; @@ -1766,9 +1805,10 @@ void daB_MGN_c::executeThrown() { mMoveMode = 8; } break; + case 8: if (mpMgnModelMorf->checkFrame(5.0f)) { - if (field_0xafc == 0) { + if (mLeftRightFlag == 0) { field_0xa92 = 0x200; } else { field_0xa92 = -0x200; @@ -1789,7 +1829,7 @@ void daB_MGN_c::executeThrown() { shape_angle.y += field_0xa92; if (mpMgnModelMorf->checkFrame(16.0f) || mpMgnModelMorf->checkFrame(26.0f)) { - dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); mSound.startCreatureSound(Z2SE_EN_MGN_FOOTNOTE, 0, -1); } @@ -1797,18 +1837,19 @@ void daB_MGN_c::executeThrown() { cLib_chaseF(&speedF, 0.0f, 4.0f); if (mpMgnModelMorf->isStop()) { - dComIfGp_getVibration().StartQuake(3, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartQuake(VIBMODE_Q_POWER3, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); - if (field_0xafc == 0) { - setBck(BCK_MGN_DOWNR_LOOP, 2, 3.0f, 1.0f); + if (mLeftRightFlag == 0) { + setBck(BCK_MGN_DOWNR_LOOP, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); } else { - setBck(BCK_MGN_DOWNL_LOOP, 2, 3.0f, 1.0f); + setBck(BCK_MGN_DOWNL_LOOP, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); } dComIfGs_offOneZoneSwitch(11, fopAcM_GetRoomNo(this)); mMoveMode = 9; } break; + case 9: setBodySlideEffect(); @@ -1824,31 +1865,32 @@ void daB_MGN_c::executeThrown() { offBodySlideAt(); setActionMode(ACTION_DOWN_e, 5); - dComIfGp_getVibration().StopQuake(0x1f); + dComIfGp_getVibration().StopQuake(0x1F); field_0x20f4[0].OnTgSetBit(); field_0x20f4[1].OnTgSetBit(); - field_0xaa0 = 150; + field_0xaa0 = nREG_S(5) + 150; field_0xb08 = 0; attention_info.flags = fopAc_AttnFlag_BATTLE_e; } break; + case 10: - s16 sp8; + s16 angle; if (cM_rnd() < 0.5f) { - sp8 = shape_angle.y + 0x2000; + angle = shape_angle.y + 0x2000; } else { - sp8 = shape_angle.y + -0x2000; + angle = shape_angle.y + -0x2000; } - player = daPy_getPlayerActorClass(); - player->setThrowDamage(sp8, 50.0f, 40.0f, 1, 0, 0); + daPy_getPlayerActorClass()->setThrowDamage(angle, 50.0f, 40.0f, 1, 0, 0); mMoveMode = 11; dCam_getBody()->ForceLockOn(this); attention_info.flags = fopAc_AttnFlag_BATTLE_e; + // fallthrough case 11: if (mpMgnModelMorf->isStop()) { attention_info.flags = 0; @@ -1859,6 +1901,7 @@ void daB_MGN_c::executeThrown() { setActionMode(ACTION_DASH_e, 5); } + break; } } @@ -1867,14 +1910,14 @@ void daB_MGN_c::setDownEnd() { field_0x20f4[0].OffTgSetBit(); field_0x20f4[1].OffTgSetBit(); - field_0xb01 = 0; + mDownFlag = 0; attention_info.flags = 0; - if (field_0xafc == 0) { - setBck(BCK_MGN_DOWNR_UPB, 0, 3.0f, 1.0f); + if (mLeftRightFlag == 0) { + setBck(BCK_MGN_DOWNR_UPB, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); current.angle.y = shape_angle.y + -0x4000; } else { - setBck(BCK_MGN_DOWNL_UPB, 0, 3.0f, 1.0f); + setBck(BCK_MGN_DOWNL_UPB, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); current.angle.y = shape_angle.y + 0x4000; } @@ -1890,18 +1933,19 @@ void daB_MGN_c::executeDown() { field_0x20f4[0].OffTgSetBit(); mAtSph.OffAtSetBit(); field_0xafd = 1; - field_0xafc = mMoveMode; + mLeftRightFlag = mMoveMode; - if (field_0xafc == 0) { - setBck(BCK_MGN_DOWNR, 0, 3.0f, 1.0f); + if (mLeftRightFlag == 0) { + setBck(BCK_MGN_DOWNR, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); } else { - setBck(BCK_MGN_DOWNL, 0, 3.0f, 1.0f); + setBck(BCK_MGN_DOWNL, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); } - field_0xb01 = 1; + mDownFlag = 1; mMoveMode = 2; onBodySlideAt(); field_0xb03 = 0; + // fallthrough case 2: if (field_0xb03 == 0 && checkHitSlideAt()) { field_0xb03 = 1; @@ -1914,22 +1958,23 @@ void daB_MGN_c::executeDown() { } if (mpMgnModelMorf->checkFrame(13.0f) || mpMgnModelMorf->checkFrame(19.0f)) { - dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); mSound.startCreatureSound(Z2SE_EN_MGN_FOOTNOTE, 0, -1); } if (mpMgnModelMorf->isStop()) { - dComIfGp_getVibration().StartQuake(3, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartQuake(VIBMODE_Q_POWER3, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); - if (field_0xafc == 0) { - setBck(BCK_MGN_DOWNR_LOOP, 2, 3.0f, 1.0f); + if (mLeftRightFlag == 0) { + setBck(BCK_MGN_DOWNR_LOOP, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); } else { - setBck(BCK_MGN_DOWNL_LOOP, 2, 3.0f, 1.0f); + setBck(BCK_MGN_DOWNL_LOOP, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); } mMoveMode = 3; } break; + case 3: if (field_0xb03 == 0 && checkHitSlideAt()) { field_0xb03 = 1; @@ -1951,9 +1996,9 @@ void daB_MGN_c::executeDown() { if (speedF < 5.0f) { if (field_0xb03 == 0) { - field_0xaa0 = 120; + field_0xaa0 = nREG_S(5) + 120; } else { - field_0xaa0 = 120; + field_0xaa0 = nREG_S(5) + 120; } field_0xb08 = 0; @@ -1962,27 +2007,28 @@ void daB_MGN_c::executeDown() { field_0x20f4[1].OnTgSetBit(); offBodySlideAt(); - dComIfGp_getVibration().StopQuake(0x1f); + dComIfGp_getVibration().StopQuake(0x1F); } if (!speedF) { mMoveMode = 5; } break; + case 5: - if (field_0xafc == 0) { - setBck(BCK_MGN_DOWNR_WAIT, 2, 10.0f, 1.0f); + if (mLeftRightFlag == 0) { + setBck(BCK_MGN_DOWNR_WAIT, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f); } else { - setBck(BCK_MGN_DOWNL_WAIT, 2, 10.0f, 1.0f); + setBck(BCK_MGN_DOWNL_WAIT, J3DFrameCtrl::EMode_LOOP, 10.0f, 1.0f); } mMoveMode = 6; + // fallthrough case 6: - if (daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_WOLF_JUMP && - field_0xaa0 == 0) - { + if (daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_WOLF_JUMP && field_0xaa0 == 0) { setDownEnd(); } break; + case 7: if (mpMgnModelMorf->getFrame() < 42.0f) { cLib_chaseF(&speedF, 20.0f, 2.0f); @@ -1997,10 +2043,11 @@ void daB_MGN_c::executeDown() { if (mpMgnModelMorf->isStop()) { mSound.startCreatureVoice(Z2SE_EN_MGN_V_GROWL, -1); - setBck(BCK_MGN_APPROACH, 0, 3.0f, 1.0f); + setBck(BCK_MGN_APPROACH, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); mMoveMode = 8; } break; + case 8: setBloodEffect(); @@ -2012,12 +2059,14 @@ void daB_MGN_c::executeDown() { field_0xaff = 2; } break; + case 2: case 3: if (health < 300) { field_0xaff = 4; } break; + case 4: if (health < 200) { field_0xaff = 5; @@ -2032,6 +2081,8 @@ void daB_MGN_c::executeDown() { /* 8060ACB8-8060B028 005678 0370+00 1/1 0/0 0/0 .text executeDownDamage__9daB_MGN_cFv */ void daB_MGN_c::executeDownDamage() { + daPy_py_c* player = daPy_getPlayerActorClass(); + switch (mMoveMode) { case 0: speedF = 0.0f; @@ -2043,11 +2094,11 @@ void daB_MGN_c::executeDownDamage() { if (field_0xb06 != 0) { field_0xb07 = 0; - if (field_0xafc == 0) { - setBck(BCK_MGN_DOWNR_UPA, 0, 3.0f, 1.0f); + if (mLeftRightFlag == 0) { + setBck(BCK_MGN_DOWNR_UPA, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); current.angle.y = shape_angle.y + -0x4000; } else { - setBck(BCK_MGN_DOWNL_UPA, 0, 3.0f, 1.0f); + setBck(BCK_MGN_DOWNL_UPA, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); current.angle.y = shape_angle.y + 0x4000; } @@ -2060,7 +2111,7 @@ void daB_MGN_c::executeDownDamage() { field_0x20f4[0].OffTgSetBit(); field_0x20f4[1].OffTgSetBit(); - field_0xb01 = 0; + mDownFlag = 0; attention_info.flags = 0; field_0xaff += field_0xb06; @@ -2069,10 +2120,10 @@ void daB_MGN_c::executeDownDamage() { return; } } else { - if (field_0xafc == 0) { - setBck(BCK_MGN_DOWNR_DAMAGE, 0, 3.0f, 1.0f); + if (mLeftRightFlag == 0) { + setBck(BCK_MGN_DOWNR_DAMAGE, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); } else { - setBck(BCK_MGN_DOWNL_DAMAGE, 0, 3.0f, 1.0f); + setBck(BCK_MGN_DOWNL_DAMAGE, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); } mMoveMode = 1; @@ -2080,13 +2131,14 @@ void daB_MGN_c::executeDownDamage() { if (field_0xaa0 == 0) { field_0x20f4[0].OffTgSetBit(); field_0x20f4[1].OffTgSetBit(); - field_0xb01 = 0; + mDownFlag = 0; attention_info.flags = 0; } } mSound.startCreatureVoice(Z2SE_EN_MGN_V_DAMAGE, -1); break; + case 1: if (mpMgnModelMorf->isStop()) { if (field_0xaa0 == 0) { @@ -2096,6 +2148,7 @@ void daB_MGN_c::executeDownDamage() { } } break; + case 2: if (mpMgnModelMorf->getFrame() >= 26.0f) { cLib_chaseF(&speedF, 0.0f, 2.0f); @@ -2117,12 +2170,14 @@ void daB_MGN_c::executeDownDamage() { field_0xaff = 2; } break; + case 2: case 3: if (health < 300) { field_0xaff = 4; } break; + case 4: if (health < 200) { field_0xaff = 5; @@ -2134,38 +2189,38 @@ void daB_MGN_c::executeDownDamage() { } } -/* 8060B028-8060B430 0059E8 0408+00 1/1 0/0 0/0 .text executeDownBiteDamage__9daB_MGN_cFv - */ +/* 8060B028-8060B430 0059E8 0408+00 1/1 0/0 0/0 .text executeDownBiteDamage__9daB_MGN_cFv */ void daB_MGN_c::executeDownBiteDamage() { daPy_py_c* player = daPy_getPlayerActorClass(); switch (mMoveMode) { case 0: mSound.startCreatureVoice(Z2SE_EN_MGN_V_DAMAGE, -1); - mSound.startCollisionSE(Z2SE_HIT_WOLFBITE, 0x1f); + mSound.startCollisionSE(Z2SE_HIT_WOLFBITE, 0x1F); - if (field_0xafc == 0) { - setBck(BCK_MGN_DOWNR_DAMAGE, 0, 3.0f, 1.0f); + if (mLeftRightFlag == 0) { + setBck(BCK_MGN_DOWNR_DAMAGE, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); } else { - setBck(BCK_MGN_DOWNL_DAMAGE, 0, 3.0f, 1.0f); + setBck(BCK_MGN_DOWNL_DAMAGE, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); } mMoveMode = 1; field_0xb00 = 0; - dComIfGp_getVibration().StartShock(VIBMODE_S_POWER3, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER3, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); offBodyCo(); + // fallthrough case 1: - s16 var_r27; - if (field_0xafc == 0) { - var_r27 = shape_angle.y + -0x4000; + s16 angle; + if (mLeftRightFlag == 0) { + angle = shape_angle.y + -0x4000; } else { - var_r27 = shape_angle.y + 0x4000; + angle = shape_angle.y + 0x4000; } - player->setWolfEnemyHangBiteAngle(var_r27); + player->setWolfEnemyHangBiteAngle(angle); if (checkWolfBiteDamage()) { - dComIfGp_getVibration().StartShock(VIBMODE_S_POWER3, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER3, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); offWolfBiteDamage(); field_0xb00++; @@ -2176,11 +2231,11 @@ void daB_MGN_c::executeDownBiteDamage() { mSound.startCollisionSE(Z2SE_HIT_WOLFBITE, 0x20); onBodyCo(); - if (field_0xafc == 0) { - setBck(BCK_MGN_DOWNR_UPA, 0, 3.0f, 1.0f); + if (mLeftRightFlag == 0) { + setBck(BCK_MGN_DOWNR_UPA, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); current.angle.y = shape_angle.y + -0x4000; } else { - setBck(BCK_MGN_DOWNL_UPA, 0, 3.0f, 1.0f); + setBck(BCK_MGN_DOWNL_UPA, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); current.angle.y = shape_angle.y + 0x4000; } @@ -2189,7 +2244,7 @@ void daB_MGN_c::executeDownBiteDamage() { speedF = 40.0f; field_0x20f4[0].OffTgSetBit(); field_0x20f4[1].OffTgSetBit(); - field_0xb01 = 0; + mDownFlag = 0; attention_info.flags = 0; field_0xaff++; @@ -2200,18 +2255,18 @@ void daB_MGN_c::executeDownBiteDamage() { setActionMode(ACTION_DOWN_DAMAGE_e, 2); } } else { - if (field_0xafc == 0) { - setBck(BCK_MGN_DOWNR_DAMAGE, 0, 3.0f, 1.0f); + if (mLeftRightFlag == 0) { + setBck(BCK_MGN_DOWNR_DAMAGE, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); } else { - setBck(BCK_MGN_DOWNL_DAMAGE, 0, 3.0f, 1.0f); + setBck(BCK_MGN_DOWNL_DAMAGE, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); } - mSound.startCollisionSE(Z2SE_HIT_WOLFBITE, 0x1e); + mSound.startCollisionSE(Z2SE_HIT_WOLFBITE, 0x1E); mSound.startCreatureVoice(Z2SE_EN_MGN_V_DAMAGE, -1); } } - if (player->checkWolfEnemyBiteAllOwn(this)) { + if (player->checkWolfEnemyHangBiteOwn(this)) { if (!mpMgnModelMorf->isStop()) { return; } @@ -2221,6 +2276,7 @@ void daB_MGN_c::executeDownBiteDamage() { player->offWolfEnemyHangBite(); offWolfBiteDamage(); setDownEnd(); + break; } } @@ -2240,12 +2296,13 @@ void daB_MGN_c::executeWarp() { field_0xa9c = 90; } else { field_0xafe = 1; - field_0xa9c = 0; + field_0xa9c = nREG_S(7); } attention_info.flags = 0; mMoveMode = 2; offBodyCo(); + // fallthrough case 2: if (field_0xa9c == 0) { if (field_0xafe == 0) { @@ -2288,14 +2345,12 @@ void daB_MGN_c::executeFall() { eff_pos.z = -3300.0f; } - field_0xb10 = setHideSmokeEffect(&eff_pos, 1); + mGdgateStatusIdx = setHideSmokeEffect(&eff_pos, 1); field_0xae8 = 0.0f; gravity = 0.0f; - speedF = 0.0f; - speed.y = 0.0f; - current.pos = eff_pos; - old.pos = current.pos; + speed.y = speedF = 0.0f; + old.pos = current.pos = eff_pos; shape_angle.y = current.angle.y = fopAcM_searchPlayerAngleY(this); field_0xb16 = field_0xb14 = shape_angle.y; @@ -2303,11 +2358,12 @@ void daB_MGN_c::executeFall() { mMoveMode = 1; field_0xa9c = 60; - setBck(BCK_MGN_DROP_POSE, 2, 3.0f, 1.0f); + setBck(BCK_MGN_DROP_POSE, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); mpMgnBtk->init(mpMgnModelMorf->getModel()->getModelData(), - (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", 0x3a), 1, 0, 0.0f, 0, - -1); + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", BTK_MGN_DROP), + 1, J3DFrameCtrl::EMode_NONE, 0.0f, 0, -1); + // fallthrough } case 1: cLib_chaseF(&field_0xae8, 1.0f, 0.02f); @@ -2323,18 +2379,20 @@ void daB_MGN_c::executeFall() { dComIfGs_onOneZoneSwitch(10, fopAcM_GetRoomNo(this)); - if (field_0xb10 != -1) { - mGdgateStatus[field_0xb10] = 7; + if (mGdgateStatusIdx != -1) { + mGdgateStatus[mGdgateStatusIdx] = 7; } - } else if (field_0xa9c == 30 && field_0xb10 != -1) { - mGdgateStatus[field_0xb10] = 5; + } else if (field_0xa9c == 30 && mGdgateStatusIdx != -1) { + mGdgateStatus[mGdgateStatusIdx] = 5; } break; + case 4: if (current.pos.y < 1000.0f) { - setBck(BCK_MGN_DROP, 0, 10.0f, 0.0f); + setBck(BCK_MGN_DROP, J3DFrameCtrl::EMode_NONE, 10.0f, 0.0f); mMoveMode = 5; } + // fallthrough case 5: if (mAcch.ChkGroundHit()) { dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); @@ -2347,18 +2405,17 @@ void daB_MGN_c::executeFall() { if (field_0xaff >= 4) { mMoveMode = 15; + } else if (abs((int)(s16)(shape_angle.y - fopAcM_searchPlayerAngleY(this))) < 0x2000) { + mMoveMode = 6; } else { - if (abs((int)(s16)(shape_angle.y - fopAcM_searchPlayerAngleY(this))) < 0x2000) { - mMoveMode = 6; - } else { - mMoveMode = 7; - } + mMoveMode = 7; } field_0xa9c = 5; setFallAttackEffect(); } break; + case 6: if (field_0xa9c == 0) { offBodyFallAt(); @@ -2370,9 +2427,10 @@ void daB_MGN_c::executeFall() { if (mpMgnModelMorf->isStop()) { mMoveMode = 10; mSound.startCreatureVoice(Z2SE_EN_MGN_V_GROWL, -1); - setBck(BCK_MGN_BACKJUMP, 0, 3.0f, 1.0f); + setBck(BCK_MGN_BACKJUMP, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); } break; + case 7: if (field_0xa9c == 0) { offBodyFallAt(); @@ -2381,9 +2439,10 @@ void daB_MGN_c::executeFall() { if (mpMgnModelMorf->isStop()) { mMoveMode = 8; mSound.startCreatureVoice(Z2SE_EN_MGN_V_TURN, -1); - setBck(BCK_MGN_STEP, 0, 3.0f, 1.0f); + setBck(BCK_MGN_STEP, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); } break; + case 8: if (mpMgnModelMorf->checkFrame(12.0f)) { onBodySlideAt(); @@ -2401,18 +2460,17 @@ void daB_MGN_c::executeFall() { if (mpMgnModelMorf->getFrame() >= 12.0f && mpMgnModelMorf->getFrame() < 43.0f) { cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 0x10, 0x400, 0x80); current.angle.y = shape_angle.y; - } else { - if (mpMgnModelMorf->getFrame() >= 43.0f) { - setStepEffect(); - } + } else if (mpMgnModelMorf->getFrame() >= 43.0f) { + setStepEffect(); } if (mpMgnModelMorf->isStop()) { mMoveMode = 10; mSound.startCreatureVoice(Z2SE_EN_MGN_V_GROWL, -1); - setBck(BCK_MGN_BACKJUMP, 0, 3.0f, 1.0f); + setBck(BCK_MGN_BACKJUMP, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); } break; + case 10: cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 0x10, 0x400, 0x80); @@ -2424,6 +2482,7 @@ void daB_MGN_c::executeFall() { mMoveMode = 11; } break; + case 11: if (mpMgnModelMorf->checkFrame(34.0f)) { mpMgnModelMorf->setPlaySpeed(0.0f); @@ -2432,23 +2491,25 @@ void daB_MGN_c::executeFall() { if (mAcch.ChkGroundHit()) { speedF = 0.0f; - dComIfGp_getVibration().StartShock(VIBMODE_S_POWER4, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER4, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); mpMgnModelMorf->setPlaySpeed(1.0f); mMoveMode = 12; } break; + case 12: setBackJumpEffect(); cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 0x10, 0x400, 0x80); if (mpMgnModelMorf->isStop()) { - setBck(BCK_MGN_WAIT, 2, 3.0f, 1.0f); + setBck(BCK_MGN_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); field_0xa9c = 30; mMoveMode = 13; mJewelColorMode = 2; } break; + case 13: attention_info.flags = 0; @@ -2465,6 +2526,7 @@ void daB_MGN_c::executeFall() { mJewelColorMode = 2; } break; + case 15: if (field_0xa9c == 0) { offBodyFallAt(); @@ -2481,6 +2543,7 @@ void daB_MGN_c::executeFall() { /* 8060BE6C-8060C034 00682C 01C8+00 1/1 0/0 0/0 .text demo_skip__9daB_MGN_cFi */ void daB_MGN_c::demo_skip(int param_1) { camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + daPy_py_c* player = daPy_getPlayerActorClass(); mBlurRate = 0.0f; dComIfGp_getVibration().StopQuake(0x1f); @@ -2526,8 +2589,8 @@ void daB_MGN_c::executeOpening() { J3DModelData* modelData = mpMgnModelMorf->getModel()->getModelData(); cXyz spB8(-7.0f, 0.0f, -1045.0f); - cXyz spAC; - cXyz spA0(100.0f, 0.0f, -2190.0f); + cXyz work; + cXyz pos(100.0f, 0.0f, -2190.0f); cXyz sp94(0.0f, 220.0f, -1390.0f); switch (mMoveMode) { @@ -2536,16 +2599,16 @@ void daB_MGN_c::executeOpening() { if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 4); - eventInfo.onCondition(2); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); return; } fopAcM_OffStatus(this, 0x4000); player->changeOriginalDemo(); - player->setPlayerPosAndAngle(&spA0, 0, 0); + player->setPlayerPosAndAngle(&pos, 0, 0); player->changeDemoMoveAngle(0); - player->changeDemoPos0(&spA0); + player->changeDemoPos0(&pos); player->changeDemoMode(4, 1, 0, 0); current.pos = spB8; @@ -2553,12 +2616,12 @@ void daB_MGN_c::executeOpening() { shape_angle.y = current.angle.y = -0x8000; field_0xb16 = field_0xb14 = shape_angle.y; - setBck(BCK_MGN_OP, 0, 3.0f, 1.0f); + setBck(BCK_MGN_OP, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); mpMgnCoreBrk->remove(modelData); - mpMgnCoreBrk->init(modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgn", 0x36), 1, 0, - 1.0f, 0, -1); + mpMgnCoreBrk->init(modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgn", BRK_MGN_OP_DEMO), 1, + J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1); mMoveMode = 1; @@ -2573,7 +2636,7 @@ void daB_MGN_c::executeOpening() { mDemoCamEye.set(-114.0f, 150.0f, 2690.0f); mDemoCamFovy = 40.0f; - field_0xad8 = 170.0f; + mDemoCamEyeStep = 170.0f; onBodyCo(); @@ -2583,9 +2646,9 @@ void daB_MGN_c::executeOpening() { cXyz sp88(current.pos); sp88.y = 0.0f; - dComIfGp_particle_set(0x8c32, &sp88, &shape_angle, NULL); - dComIfGp_particle_set(0x8c33, &sp88, &shape_angle, NULL); - dComIfGp_particle_set(0x8c34, &sp88, &shape_angle, NULL); + dComIfGp_particle_set(dPa_RM(ID_ZF_S_D27_02_13JYAKI00YAMI), &sp88, &shape_angle, NULL); + dComIfGp_particle_set(dPa_RM(ID_ZF_S_D27_02_13JYAKI01YAMI), &sp88, &shape_angle, NULL); + dComIfGp_particle_set(dPa_RM(ID_ZF_S_D27_02_13JYAKI02YAMI), &sp88, &shape_angle, NULL); Z2GetAudioMgr()->bgmStreamPrepare(0x2000062); Z2GetAudioMgr()->bgmStreamPlay(); @@ -2594,27 +2657,28 @@ void daB_MGN_c::executeOpening() { case 1: cLib_addCalc2(&field_0xadc, 0.0f, 0.1f, 5.0f); cLib_addCalcAngleS2(&field_0xae2, 0x50, 8, 8); - cLib_addCalcAngleS2(&field_0xae0, -0x7c80, 0x20, field_0xae2); + cLib_addCalcAngleS2(&field_0xae0, -0x7C80, 0x20, field_0xae2); mDemoCamEye = sp94; mDemoCamEye.x += cM_ssin(field_0xae0) * 1100.0f; mDemoCamEye.z += cM_scos(field_0xae0) * 1100.0f; - cLib_chaseF(&field_0xad8, 170.0f, 1.0f); + cLib_chaseF(&mDemoCamEyeStep, 170.0f, 1.0f); - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x1b)); - mDoMtx_stack_c::multVecZero(&spAC); - spAC.y += field_0xad8; - spAC.z -= field_0xadc; + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HEAD)); + mDoMtx_stack_c::multVecZero(&work); + work.y += mDemoCamEyeStep; + work.z -= field_0xadc; - cLib_addCalcPos2(&mDemoCamCenter, spAC, 0.1f, 10.0f); + cLib_addCalcPos2(&mDemoCamCenter, work, 0.1f, 10.0f); if (mpMgnModelMorf->checkFrame(175.0f)) { mMoveMode = 2; - player->setPlayerPosAndAngle(&spA0, 0, 0); + player->setPlayerPosAndAngle(&pos, 0, 0); player->changeDemoMode(0x17, 1, 0, 0); } break; + case 2: cLib_addCalc2(&field_0xadc, 0.0f, 0.1f, 10.0f); cLib_addCalcAngleS2(&field_0xae2, 0x60, 8, 8); @@ -2630,46 +2694,47 @@ void daB_MGN_c::executeOpening() { cLib_addCalc2(&mBlurRate, 0.0f, 0.1f, 5.0f); } - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x1b)); - mDoMtx_stack_c::multVecZero(&spAC); - spAC.y *= 0.8f; - spAC.z -= field_0xadc; + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HEAD)); + mDoMtx_stack_c::multVecZero(&work); + work.y *= 0.8f; + work.z -= field_0xadc; - cLib_addCalcPos2(&mDemoCamCenter, spAC, 0.5f, 50.0f); + cLib_addCalcPos2(&mDemoCamCenter, work, 0.5f, 50.0f); if (mpMgnModelMorf->checkFrame(280.0f)) { mMoveMode = 3; field_0xadc = 0.0f; } break; + case 3: cLib_addCalc2(&mBlurRate, 0.0f, 0.1f, 5.0f); if (mpMgnModelMorf->getFrame() >= 305.0f) { setOpeningEffect(); } - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x1b)); - mDoMtx_stack_c::multVecZero(&spAC); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HEAD)); + mDoMtx_stack_c::multVecZero(&work); if (mpMgnModelMorf->getFrame() < 305.0f) { - spAC.y *= 0.7f; + work.y *= 0.7f; } if (mpMgnModelMorf->getFrame() > 290.0f) { cLib_addCalc2(&field_0xadc, 100.0f, 0.1f, 10.0f); - spAC.x += field_0xadc; + work.x += field_0xadc; } - cLib_addCalcPos2(&mDemoCamCenter, spAC, 0.5f, 100.0f); - if (mpMgnModelMorf->checkFrame(365.0f)) { + cLib_addCalcPos2(&mDemoCamCenter, work, 0.5f, 100.0f); + if (mpMgnModelMorf->checkFrame(nREG_F(0) + 365.0f)) { fopMsgM_messageSetDemo(0x491); } if (mpMgnModelMorf->checkFrame(305.0f)) { - dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); mSound.startCreatureSound(Z2SE_EN_MGN_FOOTNOTE, 0, -1); } else if (mpMgnModelMorf->checkFrame(360.0f)) { - dComIfGp_getVibration().StartQuake(4, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartQuake(VIBMODE_Q_POWER4, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); if (!daPy_getPlayerActorClass()->checkNowWolf()) { player->changeDemoMode(0x22, 1, 0, 0); @@ -2688,21 +2753,22 @@ void daB_MGN_c::executeOpening() { if (mpMgnModelMorf->isStop()) { mSound.startCreatureVoice(Z2SE_EN_MGN_V_GROWL, -1); - setBck(BCK_MGN_BACKJUMP, 0, 3.0f, 1.0f); + setBck(BCK_MGN_BACKJUMP, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); mMoveMode = 5; } if (mpMgnCoreBrk->isStop()) { mpMgnCoreBrk->remove(modelData); - mpMgnCoreBrk->init(modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgn", 0x33), 1, - 2, 1.0f, 0, -1); + mpMgnCoreBrk->init(modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgn", BRK_MGN_CORE), 1, + J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1); } break; + case 5: - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x1b)); - mDoMtx_stack_c::multVecZero(&spAC); - spAC.x += 100.0f; - cLib_addCalcPos2(&mDemoCamCenter, spAC, 0.5f, 200.0f); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HEAD)); + mDoMtx_stack_c::multVecZero(&work); + work.x += 100.0f; + cLib_addCalcPos2(&mDemoCamCenter, work, 0.5f, 200.0f); if (mpMgnModelMorf->checkFrame(19.0f)) { gravity = -5.0f; @@ -2712,14 +2778,15 @@ void daB_MGN_c::executeOpening() { current.angle.y = shape_angle.y + 0x8000; } break; + case 6: - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x1b)); - mDoMtx_stack_c::multVecZero(&spAC); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HEAD)); + mDoMtx_stack_c::multVecZero(&work); if (mpMgnModelMorf->checkFrame(25.0f)) { - cLib_addCalcPos2(&mDemoCamCenter, spAC, 0.5f, 50.0f); + cLib_addCalcPos2(&mDemoCamCenter, work, 0.5f, 50.0f); } else { - cLib_addCalcPos2(&mDemoCamCenter, spAC, 0.5f, 200.0f); + cLib_addCalcPos2(&mDemoCamCenter, work, 0.5f, 200.0f); } if (mpMgnModelMorf->checkFrame(34.0f)) { @@ -2728,60 +2795,64 @@ void daB_MGN_c::executeOpening() { if (mAcch.ChkGroundHit()) { speedF = 0.0f; - dComIfGp_getVibration().StartShock(4, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER4, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); mpMgnModelMorf->setPlaySpeed(1.0f); mMoveMode = 7; } break; + case 7: setBackJumpEffect(); - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x1b)); - mDoMtx_stack_c::multVecZero(&spAC); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HEAD)); + mDoMtx_stack_c::multVecZero(&work); - cLib_addCalcPos2(&mDemoCamCenter, spAC, 0.5f, 200.0f); + cLib_addCalcPos2(&mDemoCamCenter, work, 0.5f, 200.0f); if (mpMgnModelMorf->isStop()) { - setBck(BCK_MGN_WAIT, 2, 3.0f, 1.0f); + setBck(BCK_MGN_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); field_0xa9c = 30; mMoveMode = 8; } break; - case 8: - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x1b)); - mDoMtx_stack_c::multVecZero(&spAC); - cLib_addCalcPos2(&mDemoCamCenter, spAC, 0.5f, 200.0f); + case 8: + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HEAD)); + mDoMtx_stack_c::multVecZero(&work); + + cLib_addCalcPos2(&mDemoCamCenter, work, 0.5f, 200.0f); if (field_0xa9c == 0) { - setBck(BCK_MGN_WAIT2, 0, 3.0f, 1.0f); + setBck(BCK_MGN_WAIT2, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); mMoveMode = 10; - field_0xad8 = 0.0f; + mDemoCamEyeStep = 0.0f; } break; + case 10: - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x1b)); - mDoMtx_stack_c::multVecZero(&spAC); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HEAD)); + mDoMtx_stack_c::multVecZero(&work); - cLib_addCalcPos2(&mDemoCamCenter, spAC, 0.5f, 200.0f); - cLib_chaseF(&field_0xad8, 5.0f, 1.0f); + cLib_addCalcPos2(&mDemoCamCenter, work, 0.5f, 200.0f); + cLib_chaseF(&mDemoCamEyeStep, 5.0f, 1.0f); - spAC.set(0.0f, 100.0f, -2590.0f); - cLib_addCalcPos2(&mDemoCamEye, spAC, 0.1f, field_0xad8); + work.set(0.0f, 100.0f, -2590.0f); + cLib_addCalcPos2(&mDemoCamEye, work, 0.1f, mDemoCamEyeStep); if (mpMgnModelMorf->isStop()) { - setBck(BCK_MGN_WAIT, 2, 3.0f, 1.0f); + setBck(BCK_MGN_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); field_0xa9c = 30; mMoveMode = 11; } break; - case 11: - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x1b)); - mDoMtx_stack_c::multVecZero(&spAC); - cLib_addCalcPos2(&mDemoCamCenter, spAC, 0.5f, 200.0f); - cLib_chaseF(&field_0xad8, 5.0f, 1.0f); - spAC.set(0.0f, 100.0f, -2590.0f); - cLib_addCalcPos2(&mDemoCamEye, spAC, 0.1f, field_0xad8); + case 11: + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_HEAD)); + mDoMtx_stack_c::multVecZero(&work); + + cLib_addCalcPos2(&mDemoCamCenter, work, 0.5f, 200.0f); + cLib_chaseF(&mDemoCamEyeStep, 5.0f, 1.0f); + work.set(0.0f, 100.0f, -2590.0f); + cLib_addCalcPos2(&mDemoCamEye, work, 0.1f, mDemoCamEyeStep); if (field_0xa9c == 0) { setActionMode(ACTION_DASH_e, 0); @@ -2817,27 +2888,28 @@ void daB_MGN_c::executeDeath() { case 0: { if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); - eventInfo.onCondition(2); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); return; } - Z2GetAudioMgr()->bgmStop(0x1e, 0); + Z2GetAudioMgr()->bgmStop(0x1E, 0); - if (field_0xafb != 0xff) { - dComIfGs_onSwitch(field_0xafb, fopAcM_GetRoomNo(this)); + if (mSwBit != 0xFF) { + dComIfGs_onSwitch(mSwBit, fopAcM_GetRoomNo(this)); } mKankyoColMode = 2; mKankyoBlend = 0.0f; - setBck(BCK_MGN_END_DEMO, 0, 3.0f, 1.0f); + setBck(BCK_MGN_END_DEMO, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); J3DModelData* model = mpMgnModelMorf->getModel()->getModelData(); mpMgnCoreBrk->remove(model); mpMgnCoreBrk->init(model, - (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgn", 0x35), 1, 0, 1.0f, 0, -1); + (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgn", BRK_MGN_END_DEMO), 1, + J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1); mpMgnBtk->init(model, - (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", 0x3b), 1, 0, 1.0f, 0, - -1); + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", BTK_MGN_END_DEMO), 1, + J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1); mMoveMode = 1; @@ -2845,12 +2917,11 @@ void daB_MGN_c::executeDeath() { camera->mCamera.SetTrimSize(3); speedF = 0.0f; - field_0xae0 = 0x4800; + field_0xae0 = sp8 - 0x2000; field_0xae2 = 0; field_0xadc = 1000.0f; - mDemoCamEye.set(field_0xadc * cM_ssin(field_0xae0), 70.0f, - field_0xadc * cM_scos(field_0xae0)); + mDemoCamEye.set(field_0xadc * cM_ssin(field_0xae0), 70.0f, field_0xadc * cM_scos(field_0xae0)); mDemoCamEye += sp48; mDemoCamCenter.set(0.0f, 300.0f, -500.0f); mDemoCamCenter += sp48; @@ -2863,18 +2934,17 @@ void daB_MGN_c::executeDeath() { player->changeOriginalDemo(); player->changeDemoMode(4, 1, 0, 0); - mSound.startCreatureVoice(Z2SE_EN_MGN_DEMO_END, -1); return; } case 1: current.pos = sp48; - current.angle.y = 0x6800; - shape_angle.y = 0x6800; + shape_angle.y = current.angle.y = sp8; field_0xb16 = field_0xb14 = shape_angle.y; mMoveMode = 2; + // fallthrough case 2: if (mpMgnModelMorf->getFrame() < 230.0f) { cLib_addCalc2(&mBlurRate, 180.0f, 0.1f, 2.0f); @@ -2882,32 +2952,32 @@ void daB_MGN_c::executeDeath() { cLib_addCalc2(&mBlurRate, 0.0f, 0.1f, 2.0f); } - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x19)); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_NECK)); mDoMtx_stack_c::multVecZero(&sp60); cLib_addCalcPos2(&mDemoCamCenter, sp60, 0.1f, 50.0f); if (field_0xa9c == 0) { cLib_addCalcAngleS2(&field_0xae2, 0x40, 8, 8); - cLib_addCalcAngleS2(&field_0xae0, 0x6e00, 0x20, field_0xae2); + cLib_addCalcAngleS2(&field_0xae0, sp8 + 0x600, 0x20, field_0xae2); cLib_addCalc2(&field_0xadc, 500.0f, 0.1f, 7.0f); } - mDemoCamEye.set(field_0xadc * cM_ssin(field_0xae0), 70.0f, - field_0xadc * cM_scos(field_0xae0)); + mDemoCamEye.set(field_0xadc * cM_ssin(field_0xae0), 70.0f, field_0xadc * cM_scos(field_0xae0)); mDemoCamEye += sp48; if (mpMgnModelMorf->checkFrame(303.0f)) { mMoveMode = 3; - field_0xad8 = 0.0f; + mDemoCamEyeStep = 0.0f; } break; + case 3: if (mpMgnModelMorf->getFrame() >= 333.0f) { setFallAttackEffect(); } if (mpMgnModelMorf->checkFrame(333.0f)) { - dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); if (!daPy_py_c::checkNowWolf()) { player->changeDemoMode(0x22, 0, 0, 0); @@ -2915,24 +2985,24 @@ void daB_MGN_c::executeDeath() { } if (mpMgnModelMorf->checkFrame(350.0f)) { - dComIfGp_getVibration().StartShock(4, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER4, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); } mDoMtx_stack_c::transS(sp48); - mDoMtx_stack_c::YrotM(0x6800); + mDoMtx_stack_c::YrotM(sp8); mDoMtx_stack_c::transM(320.0f, 0.0f, 1000.0f); mDoMtx_stack_c::multVecZero(&sp54); player->setPlayerPosAndAngle(&sp54, fopAcM_searchPlayerAngleY(this) + -0x8000, 0); mDoMtx_stack_c::transS(sp48); - mDoMtx_stack_c::YrotM(0x6800); + mDoMtx_stack_c::YrotM(sp8); mDoMtx_stack_c::transM(320.0f, 70.0f, 1280.0f); mDoMtx_stack_c::multVecZero(&sp60); - cLib_addCalc2(&field_0xad8, 50.0f, 0.1f, 5.0f); - cLib_addCalcPos2(&mDemoCamEye, sp60, 0.1f, field_0xad8); + cLib_addCalc2(&mDemoCamEyeStep, 50.0f, 0.1f, 5.0f); + cLib_addCalcPos2(&mDemoCamEye, sp60, 0.1f, mDemoCamEyeStep); - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(0x19)); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_NECK)); mDoMtx_stack_c::multVecZero(&sp60); cLib_addCalcPos2(&mDemoCamCenter, sp60, 0.1f, 30.0f); @@ -2946,19 +3016,22 @@ void daB_MGN_c::executeDeath() { } } break; + case 4: if (field_0xa9c == 0) { mMoveMode = 100; dStage_changeScene(2, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); } break; + case 5: if (field_0xa9c == 0) { - player->changeDemoMode(0x3a, 0, 0, 0); + player->changeDemoMode(0x3A, 0, 0, 0); mMoveMode = 4; field_0xa9c = 100; } break; + case 100: return; } @@ -2976,25 +3049,26 @@ void daB_MGN_c::executeJump() { mAtSph.OffAtSetBit(); field_0x20f4[0].OffTgSetBit(); - setBck(BCK_MGN_DASH_JUMP, 0, 5.0f, 1.0f); + setBck(BCK_MGN_DASH_JUMP, J3DFrameCtrl::EMode_NONE, 5.0f, 1.0f); mpMgnBtk->init(mpMgnModelMorf->getModel()->getModelData(), - (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", 0x39), 1, 0, 1.1f, 0, - -1); - mpMgnBtk->setFrame(5.0f); + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", BTK_MGN_DASH_JUMP), 1, + J3DFrameCtrl::EMode_NONE, nREG_F(7) + 1.1f, 0, -1); + mpMgnBtk->setFrame(nREG_F(8) + 5.0f); mMoveMode = 1; + // fallthrough case 1: cLib_chaseF(&field_0xae8, 0.0f, 0.05f); if (mpMgnModelMorf->isStop()) { - speed.y = 80.0f; + speed.y = nREG_F(6) + 80.0f; speedF = 10.0f; } if (mpMgnBtk->checkFrame(10.0f)) { cXyz pos(current.pos); pos.y += 1000.0f + nREG_F(11); - dComIfGp_particle_set(0x8C1B, &pos, &tevStr, &shape_angle, 0); + dComIfGp_particle_set(dPa_RM(ID_ZI_S_MGN_DASHJUMP_A), &pos, &tevStr, &shape_angle, 0); mSound.startCreatureSound(Z2SE_EN_MGN_WARP, 0, -1); } @@ -3029,16 +3103,20 @@ void daB_MGN_c::checkStartJump() { } daPy_py_c* player = daPy_getPlayerActorClass(); - if (player->getIronBallCenterPos() != NULL && + if ( + player->getIronBallCenterPos() != NULL && !dComIfGp_checkPlayerStatus0(0, 0x400) && - player->getIronBallCenterPos()->absXZ(current.pos) < 1500.0f && - abs((s16)(current.angle.y - cLib_targetAngleY(¤t.pos, player->getIronBallCenterPos()))) < 0x2000) - { - if (field_0xb0b < 2) { - field_0xb0b++; - } + player->getIronBallCenterPos()->absXZ(current.pos) < nREG_F(8) + 1500.0f + ) { + s16 targetAngleY = cLib_targetAngleY(¤t.pos, player->getIronBallCenterPos()); + if (abs((s16)(current.angle.y - targetAngleY)) < 0x2000) { + if (field_0xb0b < 2) { + field_0xb0b++; + } - setActionMode(ACTION_JUMP_e, 0); + setActionMode(ACTION_JUMP_e, 0); + return; + } } } } @@ -3052,33 +3130,43 @@ void daB_MGN_c::action() { case ACTION_OPENING_e: executeOpening(); break; + case ACTION_CIRCLE_e: executeCircle(); break; + case ACTION_DASH_e: executeDash(); break; + case ACTION_THROWN_e: executeThrown(); break; + case ACTION_DOWN_e: executeDown(); break; + case ACTION_DOWN_DAMAGE_e: executeDownDamage(); break; + case ACTION_DOWN_BITE_DAMAGE_e: executeDownBiteDamage(); break; + case ACTION_WARP_e: executeWarp(); break; + case ACTION_FALL_e: executeFall(); break; + case ACTION_DEATH_e: executeDeath(); break; + case ACTION_JUMP_e: executeJump(); } @@ -3097,17 +3185,19 @@ void daB_MGN_c::action() { mKankyoBlend = 1.0f; dKy_custom_colset(1, 1, mKankyoBlend); break; + case 1: - cLib_chaseF(&mKankyoBlend, 1.0f, 0.005f); + cLib_chaseF(&mKankyoBlend, 1.0f, nREG_F(1) + 0.005f); dKy_custom_colset(1, 0, mKankyoBlend); break; + case 2: - cLib_chaseF(&mKankyoBlend, 1.0f, 0.01f); + cLib_chaseF(&mKankyoBlend, 1.0f, nREG_F(2) + 0.01f); dKy_custom_colset(0, 2, mKankyoBlend); break; } - if (mpMgnBtk->getBtkAnm() != (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", 0x3d) || !mpMgnBtk->getFrame()) + if (mpMgnBtk->getBtkAnm() != (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", BTK_MGN_EXIT) || !mpMgnBtk->getFrame()) { Z2GetAudioMgr()->changeBgmStatus(0); } else { @@ -3122,9 +3212,9 @@ void daB_MGN_c::action() { cLib_chaseF(&mJewelColorStrength, 0.0f, 0.1f); } - if (field_0xb01 != 0) { + if (mDownFlag != 0) { cXyz pos; - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(1)); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_BACKBONE1)); mDoMtx_stack_c::transM(180.0f, -170.0f, 0.0f); mDoMtx_stack_c::multVecZero(&pos); setDownPos(&pos); @@ -3150,6 +3240,7 @@ void daB_MGN_c::action() { /* 8060E158-8060E1D0 008B18 0078+00 1/1 0/0 0/0 .text mtx_set__9daB_MGN_cFv */ void daB_MGN_c::mtx_set() { + cXyz work; J3DModel* model = mpMgnModelMorf->getModel(); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::ZXYrotM(shape_angle); @@ -3167,15 +3258,17 @@ void daB_MGN_c::cc_set() { }; static u32 const cc_set_jnt[15] = { - 1, 2, 0x25, 0x34, 0x23, 0x32, 0x41, 0x43, 0x45, 0x47, 0x49, 0x4A, 0x4B, 0x4B, 0x1B, + JNT_BACKBONE1, JNT_BACKBONE2, JNT_HANDL, JNT_HANDR, JNT_ARML2, JNT_ARMR2, + JNT_LEGL2, JNT_FOOTL, JNT_LEGR2, JNT_FOOTR, JNT_TAIL2, JNT_TAIL3, + JNT_TAIL4, JNT_TAIL4, JNT_HEAD, }; J3DModel* model = mpMgnModelMorf->getModel(); if (field_0xafd == 0) { - mDoMtx_stack_c::copy(model->getAnmMtx(0x1b)); + mDoMtx_stack_c::copy(model->getAnmMtx(JNT_HEAD)); mDoMtx_stack_c::transM(100.0f, 0.0f, 0.0f); } else { - mDoMtx_stack_c::copy(model->getAnmMtx(1)); + mDoMtx_stack_c::copy(model->getAnmMtx(JNT_BACKBONE1)); mDoMtx_stack_c::transM(200.0f, -150.0f, 0.0f); } @@ -3183,79 +3276,82 @@ void daB_MGN_c::cc_set() { attention_info.position = eyePos; attention_info.position.y += 70.0f; - cXyz sp24; - cXyz sp18; + cXyz work; + cXyz work2; cXyz player_pos(daPy_getPlayerActorClass()->current.pos); for (int i = 0; i < 15; i++) { mDoMtx_stack_c::copy(model->getAnmMtx(cc_set_jnt[i])); - if (i == 1) { + if (i == JNT_BACKBONE1) { mDoMtx_stack_c::transM(150.0f, 0.0f, 0.0f); } - if (i == 13) { + if (i == JNT_HAIRDL1) { mDoMtx_stack_c::transM(80.0f, 20.0f, 0.0f); } - mDoMtx_stack_c::multVecZero(&sp24); + mDoMtx_stack_c::multVecZero(&work); - mBodyCcSph[i].SetC(sp24); + mBodyCcSph[i].SetC(work); mBodyCcSph[i].SetR(cc_set_radius[i]); dComIfG_Ccsp()->Set(&mBodyCcSph[i]); } + f32 width; if (field_0xafd == 0) { - mDoMtx_stack_c::copy(model->getAnmMtx(0x1b)); + width = 150.0f; + mDoMtx_stack_c::copy(model->getAnmMtx(JNT_HEAD)); mDoMtx_stack_c::transM(30.0f, 0.0f, 0.0f); - mDoMtx_stack_c::multVecZero(&sp24); + mDoMtx_stack_c::multVecZero(&work); - field_0x20f4[0].SetC(sp24); - field_0x20f4[0].SetR(150.0f); + field_0x20f4[0].SetC(work); + field_0x20f4[0].SetR(width); dComIfG_Ccsp()->Set(field_0x20f4); - field_0x2364[0].SetC(sp24); - field_0x2364[0].SetR(150.0f); + field_0x2364[0].SetC(work); + field_0x2364[0].SetR(width); dComIfG_Ccsp()->Set(field_0x2364); } else { - mDoMtx_stack_c::copy(model->getAnmMtx(2)); + width = 100.0f; + mDoMtx_stack_c::copy(model->getAnmMtx(JNT_BACKBONE2)); mDoMtx_stack_c::transM(100.0f, -200.0f, 0.0f); - mDoMtx_stack_c::multVecZero(&sp24); + mDoMtx_stack_c::multVecZero(&work); - mDoMtx_stack_c::copy(model->getAnmMtx(1)); + mDoMtx_stack_c::copy(model->getAnmMtx(JNT_BACKBONE1)); mDoMtx_stack_c::transM(200.0f, -150.0f, 0.0f); - mDoMtx_stack_c::multVecZero(&sp18); + mDoMtx_stack_c::multVecZero(&work2); - field_0xa84 = sp24; + field_0xa84 = work; - if (sp24.absXZ(player_pos) < 400.0f || sp18.absXZ(player_pos) < 400.0f) { + if (work.absXZ(player_pos) < 400.0f || work2.absXZ(player_pos) < 400.0f) { offBodyShield(); } else { onBodyShield(); } - field_0x20f4[0].SetC(sp24); - field_0x20f4[0].SetR(100.0f); + field_0x20f4[0].SetC(work); + field_0x20f4[0].SetR(width); dComIfG_Ccsp()->Set(field_0x20f4); - field_0x2364[0].SetC(sp24); - field_0x2364[0].SetR(100.0f); + field_0x2364[0].SetC(work); + field_0x2364[0].SetR(width); dComIfG_Ccsp()->Set(field_0x2364); - field_0x20f4[1].SetC(sp18); - field_0x20f4[1].SetR(100.0f); + field_0x20f4[1].SetC(work2); + field_0x20f4[1].SetR(width); dComIfG_Ccsp()->Set(&field_0x20f4[1]); - field_0x2364[1].SetC(sp18); - field_0x2364[1].SetR(100.0f); + field_0x2364[1].SetC(work2); + field_0x2364[1].SetR(width); dComIfG_Ccsp()->Set(&field_0x2364[1]); } - mDoMtx_stack_c::copy(model->getAnmMtx(0x1b)); + mDoMtx_stack_c::copy(model->getAnmMtx(JNT_HEAD)); mDoMtx_stack_c::transM(-100.0f, 0.0f, 0.0f); - mDoMtx_stack_c::multVecZero(&sp24); + mDoMtx_stack_c::multVecZero(&work); - mAtSph.SetC(sp24); + mAtSph.SetC(work); mAtSph.SetR(300.0f); dComIfG_Ccsp()->Set(&mAtSph); } @@ -3265,18 +3361,23 @@ int daB_MGN_c::execute() { if (field_0xa9c != 0) { field_0xa9c--; } + if (mDamageInvulnerabilityTimer != 0) { mDamageInvulnerabilityTimer--; } + if (field_0xaa0 != 0) { field_0xaa0--; } - if (field_0xaa4 != 0) { - field_0xaa4--; + + if (mBloodEffTimer != 0) { + mBloodEffTimer--; } + if (field_0xaa8 != 0) { field_0xaa8--; } + if (field_0xaac != 0) { field_0xaac--; } @@ -3287,13 +3388,13 @@ int daB_MGN_c::execute() { calcBloodMove(); calcHideSmokeEffect(); - if (field_0xb09) { + if (mHeadLightEffFlag) { setHeadLightEffect(); - field_0xb09 = 0; + mHeadLightEffFlag = 0; } - if (field_0xb0a) { - field_0xb0a--; + if (mHeadHitEffTimer) { + mHeadHitEffTimer--; setHeadHitEffect(); } @@ -3307,7 +3408,7 @@ int daB_MGN_c::execute() { } cXyz effpos; - mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(1)); + mDoMtx_stack_c::copy(mpMgnModelMorf->getModel()->getAnmMtx(JNT_BACKBONE1)); mDoMtx_stack_c::transM(200.0f, -150.0f, 0.0f); mDoMtx_stack_c::multVecZero(&effpos); @@ -3333,6 +3434,7 @@ int daB_MGN_c::_delete() { if (mInitHIO) { l_initHIO = FALSE; + mDoHIO_DELETE_CHILD(l_HIO.no); } if (heap != NULL) { @@ -3344,16 +3446,21 @@ int daB_MGN_c::_delete() { /* 8060EAC0-8060EAE0 009480 0020+00 1/0 0/0 0/0 .text daB_MGN_Delete__FP9daB_MGN_c */ static int daB_MGN_Delete(daB_MGN_c* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); return i_this->_delete(); } +#if DEBUG +char* const unused = "Delete -> B_MGN(id=%d)\n"; +#endif + /* 8060EAE0-8060F068 0094A0 0588+00 1/1 0/0 0/0 .text CreateHeap__9daB_MGN_cFv */ int daB_MGN_c::CreateHeap() { J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("B_mgn", BMDR_MGN); JUT_ASSERT(4010, modelData != NULL); mpMgnModelMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, - (J3DAnmTransform*)dComIfG_getObjectRes("B_mgn", BCK_MGN_WAIT), 2, - 1.0f, 0, -1, &mSound, 0x80000, 0x11000284); + (J3DAnmTransform*)dComIfG_getObjectRes("B_mgn", BCK_MGN_WAIT),2, + 1.0f, 0, -1, &mSound, J3DMdlFlag_DifferedDLBuffer, 0x11000284); if (mpMgnModelMorf == NULL || mpMgnModelMorf->getModel() == NULL) { return 0; } @@ -3362,7 +3469,7 @@ int daB_MGN_c::CreateHeap() { model->setUserArea((uintptr_t)this); for (u16 i = 1; i < model->getModelData()->getJointNum(); i++) { - if (i == 1 || i == 25) { + if (i == JNT_BACKBONE1 || i == JNT_NECK) { model->getModelData()->getJointNodePointer(i)->setCallBack(JointCallBack); } } @@ -3373,7 +3480,7 @@ int daB_MGN_c::CreateHeap() { } if (!mpMgnCoreBrk->init(modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgn", BRK_MGN_CORE), - 1, 2, 0.0f, 0, -1)) + 1, J3DFrameCtrl::EMode_LOOP, 0.0f, 0, -1)) { return 0; } @@ -3384,8 +3491,8 @@ int daB_MGN_c::CreateHeap() { } if (!mpMgnBtk->init(mpMgnModelMorf->getModel()->getModelData(), - (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", BTK_MGN_EXIT), 1, 0, - 0.0f, 0, -1)) + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", BTK_MGN_EXIT), + 1, J3DFrameCtrl::EMode_NONE, 0.0f, 0, -1)) { return 0; } @@ -3394,7 +3501,7 @@ int daB_MGN_c::CreateHeap() { JUT_ASSERT(4068, modelData != NULL); for (int i = 0; i < 20; i++) { - mpMgnTaiekiModel[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + mpMgnTaiekiModel[i] = mDoExt_J3DModel__create(modelData, J3DMdlFlag_DifferedDLBuffer, 0x11000084); if (mpMgnTaiekiModel[i] == NULL) { return 0; } @@ -3406,7 +3513,7 @@ int daB_MGN_c::CreateHeap() { for (int i = 0; i < 4; i++) { mpGdgateModelMorf[i] = new mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("B_mgne", BCK_EF_GDGATE_START), - 0, 0.0f, 0, -1, &mSound, 0x80000, 0x11000284); + 0, 0.0f, 0, -1, &mSound, J3DMdlFlag_DifferedDLBuffer, 0x11000284); if (mpGdgateModelMorf[i] == NULL || mpGdgateModelMorf[i]->getModel() == NULL) { return 0; } @@ -3417,8 +3524,8 @@ int daB_MGN_c::CreateHeap() { } if (!mpGdgateStartBrk[i]->init(modelData, - (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgne", BRK_EF_GDGATE_START), 1, 0, - 1.0f, 0, -1)) + (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgne", BRK_EF_GDGATE_START), + 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1)) { return 0; } @@ -3429,8 +3536,8 @@ int daB_MGN_c::CreateHeap() { } if (!mpGdgateAppearBrk[i]->init(modelData, - (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgne", BRK_EF_GDGATE_APPEAR), 1, 0, - 1.0f, 0, -1)) + (J3DAnmTevRegKey*)dComIfG_getObjectRes("B_mgne", BRK_EF_GDGATE_APPEAR), + 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1)) { return 0; } @@ -3442,7 +3549,7 @@ int daB_MGN_c::CreateHeap() { if (!mpGdgateBtk[i]->init(mpMgnModelMorf->getModel()->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgne", BTK_EF_GDGATE), - 1, 2, 1.0f, 0, -1)) + 1, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1)) { return 0; } @@ -3461,7 +3568,7 @@ static int useHeapInit(fopAc_ac_c* a_this) { int daB_MGN_c::create() { fopAcM_ct(this, daB_MGN_c); - field_0xafb = fopAcM_GetParam(this); + mSwBit = fopAcM_GetParam(this); int phase_state = dComIfG_resLoad(&mMgnPhase, "B_mgn"); if (phase_state == cPhs_COMPLEATE_e) { @@ -3477,31 +3584,29 @@ int daB_MGN_c::create() { if (!l_initHIO) { l_initHIO = TRUE; mInitHIO = TRUE; - l_HIO.no = 0xFF; + l_HIO.no = mDoHIO_CREATE_CHILD("豚ガノン", &l_HIO); } attention_info.flags = 0; - attention_info.distances[2] = 22; - attention_info.distances[4] = 40; + attention_info.distances[fopAc_attn_BATTLE_e] = 22; + attention_info.distances[fopAc_attn_CARRY_e] = 40; - J3DModel* model = mpMgnModelMorf->getModel(); - fopAcM_SetMtx(this, model->getBaseTRMtx()); + fopAcM_SetMtx(this, mpMgnModelMorf->getModel()->getBaseTRMtx()); fopAcM_SetMin(this, -1000.0f, -1000.0f, -1000.0f); fopAcM_SetMax(this, 1000.0f, 1000.0f, 1000.0f); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL); mAcchCir.SetWall(150.0f, 600.0f); - health = 700; - field_0x560 = 700; - mCcStts.Init(0xff, 0, this); + field_0x560 = health = 700; + mCcStts.Init(0xFF, 0, this); for (int i = 0; i < 15; i++) { mBodyCcSph[i].Set(cc_sph_src); mBodyCcSph[i].SetStts(&mCcStts); } - field_0x1fb8 = 0xdcfbfdfd; + mTgType = 0xDCFBFDFD; mAtSph.Set(at_sph_src); mAtSph.SetStts(&mCcStts); @@ -3513,7 +3618,7 @@ int daB_MGN_c::create() { field_0x2364[i].Set(tg_sph_src); field_0x2364[i].SetStts(&mCcStts); - field_0x2364[i].SetTgType(0xd8bbdddd); + field_0x2364[i].SetTgType(0xD8BBDDDD); field_0x2364[i].OnTgShield(); field_0x2364[i].SetTgHitMark(CcG_Tg_UNK_MARK_2); }