From a7d280711e32159c7f85a9f81453f688721addda Mon Sep 17 00:00:00 2001 From: Niklas Bauer Date: Fri, 9 May 2025 07:52:22 +0900 Subject: [PATCH] d_a_b_tn Equivalent (func order) (#2428) * d_a_b_tn fmt * d_a_b_tn first pass * d_a_b_tn second pass * d_a_b_tn minor cleanup * d_a_b_tn equivalent * d_a_b_tn cleanup --------- Co-authored-by: YunataSavior --- configure.py | 2 +- include/d/actor/d_a_b_tn.h | 206 +- src/d/actor/d_a_b_tn.cpp | 6849 ++++++++++++++++++------------------ 3 files changed, 3519 insertions(+), 3538 deletions(-) diff --git a/configure.py b/configure.py index e207dcd7cea..d7094ae184b 100755 --- a/configure.py +++ b/configure.py @@ -1615,7 +1615,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_b_ob"), ActorRel(NonMatching, "d_a_b_oh"), ActorRel(MatchingFor("GZ2E01"), "d_a_b_oh2"), - ActorRel(NonMatching, "d_a_b_tn"), + ActorRel(Equivalent, "d_a_b_tn"), # weak func order ActorRel(Equivalent, "d_a_b_yo"), # weak func order ActorRel(Equivalent, "d_a_b_yo_ice"), # weak func order ActorRel(MatchingFor("GZ2E01"), "d_a_b_zant"), diff --git a/include/d/actor/d_a_b_tn.h b/include/d/actor/d_a_b_tn.h index fa32d8600cb..f7a898dae5e 100644 --- a/include/d/actor/d_a_b_tn.h +++ b/include/d/actor/d_a_b_tn.h @@ -1,9 +1,9 @@ #ifndef D_A_B_TN_H #define D_A_B_TN_H +#include "f_op/f_op_actor.h" #include "d/d_bg_s_acch.h" #include "d/d_cc_uty.h" -#include "f_op/f_op_actor_mng.h" #include "d/d_cc_d.h" /** @@ -14,8 +14,61 @@ * @details Temple of Time dungeon mini-boss. * */ + class daB_TN_c : public fopEn_enemy_c { public: + enum daB_TN_ACTION1 { + /* 0x0 */ ACT_ROOMDEMO, + /* 0x1 */ ACT_OPENING, + /* 0x2 */ ACT_WAITH, + /* 0x3 */ ACT_CHASEH, + /* 0x4 */ ACT_ATTACKH, + /* 0x5 */ ACT_ATTACKSHIELDH, + /* 0x6 */ ACT_GUARDH, + /* 0x7 */ ACT_DAMAGEH, + /* 0x8 */ ACT_CHANGEDEMO, + /* 0x9 */ ACT_CHASEL, + /* 0xA */ ACT_ATTACKL, + /* 0xB */ ACT_ATTACKSHIELDL, + /* 0xC */ ACT_GUARDL, + /* 0xD */ ACT_DAMAGEL, + /* 0xE */ ACT_ENDING, + /* 0xF */ ACT_YOROKE, + }; + + enum daB_TN_ACTION2 { + /* 0x0 */ ACTION2_0_e, + /* 0x1 */ ACTION2_1_e, + /* 0x2 */ ACTION2_2_e, + /* 0x3 */ ACTION2_3_e, + /* 0x4 */ ACTION2_4_e, + /* 0x5 */ ACTION2_5_e, + /* 0x6 */ ACTION2_6_e, + /* 0x7 */ ACTION2_7_e, + /* 0x8 */ ACTION2_8_e, + /* 0x9 */ ACTION2_9_e, + /* 0xA */ ACTION2_10_e, + /* 0xB */ ACTION2_11_e, + /* 0xC */ ACTION2_12_e, + /* 0xD */ ACTION2_13_e, + /* 0xE */ ACTION2_14_e, + /* 0xF */ ACTION2_15_e, + /* 0x10 */ ACTION2_16_e, + /* 0x11 */ ACTION2_17_e, + + /* 0x14 */ ACTION2_20_e = 0x14, + /* 0x40 */ ACTION2_70_e = 0x40, + /* 0x46 */ ACTION2_76_e = 0x46, + /* 0x64 */ ACTION2_100_e = 100, + /* 0x65 */ ACTION2_101_e, + /* 0x66 */ ACTION2_102_e, + /* 0x67 */ ACTION2_103_e, + /* 0x68 */ ACTION2_104_e, + /* 0x69 */ ACTION2_105_e, + /* 0x6A */ ACTION2_106_e, + /* 0x6B */ ACTION2_107_e, + }; + /* 8061EC58 */ int ctrlJoint(J3DJoint*, J3DModel*); /* 8061ED10 */ static int JointCallBack(J3DJoint*, int); /* 8061ED5C */ void calcNeckAngle(); @@ -80,14 +133,14 @@ public: /* 8062D2F0 */ daB_TN_c() {}; private: - /* 0x05AC */ request_of_phase_process_class mPhase1; - /* 0x05B4 */ request_of_phase_process_class mPhase2; - /* 0x05BC */ J3DModel* mModels[16]; + /* 0x05AC */ request_of_phase_process_class mPhaseReq1; + /* 0x05B4 */ request_of_phase_process_class mPhaseReq2; + /* 0x05BC */ J3DModel* mpModels[16]; /* 0x05FC */ mDoExt_McaMorfSO* mpModelMorf1; /* 0x0600 */ mDoExt_McaMorfSO* mpModelMorf2; - /* 0x0604 */ mDoExt_brkAnm* mBrkAnms[16]; - /* 0x0644 */ mDoExt_brkAnm* mBrkAnm; - /* 0x0648 */ J3DModel* field_0x648; + /* 0x0604 */ mDoExt_brkAnm* mpBrkAnms[16]; + /* 0x0644 */ mDoExt_brkAnm* mpBrkAnm; + /* 0x0648 */ J3DModel* mpModel; /* 0x064C */ Z2CreatureEnemy mSound; /* 0x06F0 */ int mActionMode1; /* 0x06F4 */ int mActionMode2; @@ -98,85 +151,78 @@ private: /* 0x0710 */ cXyz mCamCenter; /* 0x071C */ f32 mCamFovY; /* 0x0720 */ s16 field_0x720; - /* 0x0722 */ u8 field_0x722[0x724 - 0x722]; /* 0x0724 */ f32 field_0x724; - /* 0x0728 */ f32 field_0x728; - /* 0x072C */ Mtx field_0x72c; - /* 0x075C */ cXyz field_0x75c[16]; - /* 0x081C */ cXyz field_0x81c[16]; + /* 0x0728 */ f32 mMaterialColor; + /* 0x072C */ Mtx mNewTRMtx; + /* 0x075C */ cXyz mPositions[16]; + /* 0x081C */ cXyz mPositionsCopy[16]; /* 0x08DC */ cXyz field_0x8dc[16]; /* 0x099C */ csXyz field_0x99c[16]; - /* 0x09FC */ u16 field_0x9fc[16]; + /* 0x09FC */ u16 mStates[16]; /* 0x0A1C */ u16 field_0xa1c[16]; /* 0x0A3C */ s16 field_0xa3c[16]; /* 0x0A5C */ s16 field_0xa5c; - /* 0x0A5E */ u8 field_0xa5e[0xa60 - 0xa5e]; - /* 0x0A60 */ int field_0xa60; + /* 0x0A60 */ int mTimer9; /* 0x0A64 */ s16 field_0xa64; - /* 0x0A66 */ u8 field_0xa66[0xa68 - 0xa66]; - /* 0x0A68 */ s16 field_0xa68; - /* 0x0A6A */ u8 field_0xa6a[0xa6c - 0xa6a]; - /* 0x0A6C */ int field_0xa6c; - /* 0x0A70 */ int field_0xa70; - /* 0x0A74 */ int field_0xa74; - /* 0x0A78 */ int field_0xa78; - /* 0x0A7C */ int field_0xa7c; - /* 0x0A80 */ int field_0xa80; - /* 0x0A84 */ int field_0xa84; - /* 0x0A88 */ int field_0xa88; + /* 0x0A66 */ s16 field_0xa66; + /* 0x0A68 */ s16 mInvincibilityTimer; + /* 0x0A6C */ int mTimer1; + /* 0x0A70 */ int mTimer3; + /* 0x0A74 */ int mTimer6; + /* 0x0A78 */ int mNextBreakPart; + /* 0x0A7C */ int mTimer4; + /* 0x0A80 */ int mTimer5; + /* 0x0A84 */ int mTimer7; + /* 0x0A88 */ int mVibrationTimer; /* 0x0A8C */ int mWalkDir; - /* 0x0A90 */ u8 field_0xa90; - /* 0x0A91 */ u8 field_0xa91; - /* 0x0A92 */ u8 field_0xa92; - /* 0x0A93 */ u8 field_0xa93; - /* 0x0A94 */ u8 field_0xa94; - /* 0x0A95 */ u8 field_0xa95; - /* 0x0A96 */ s16 field_0xa96; - /* 0x0A98 */ s16 field_0xa98; - /* 0x0A9A */ u8 field_0xa9a; - /* 0x0A9B */ u8 field_0xa9b; + /* 0x0A90 */ u8 mUpdateModelTimer; + /* 0x0A91 */ bool field_0xa91; + /* 0x0A92 */ u8 mNextActionMode2; + /* 0x0A93 */ bool mUpdateNeckAngle; + /* 0x0A94 */ bool mUpdateWaistAngle; + /* 0x0A96 */ s16 mNeckAngle; + /* 0x0A98 */ s16 mWaistAngle; + /* 0x0A9A */ bool field_0xa9a; + /* 0x0A9B */ u8 mActionMode2Copy; /* 0x0A9C */ u8 field_0xa9c; /* 0x0A9D */ u8 field_0xa9d; - /* 0x0A9E */ u8 field_0xa9e; - /* 0x0A9F */ u8 field_0xa9f; - /* 0x0AA0 */ u8 field_0xaa0; - /* 0x0AA1 */ u8 field_0xaa1; + /* 0x0A9E */ bool mDisappear; + /* 0x0A9F */ bool mCutFlag; + /* 0x0AA0 */ bool mSphCSmallFlag; + /* 0x0AA1 */ bool mChkCoHitOK; /* 0x0AA2 */ u8 field_0xaa2; - /* 0x0AA3 */ u8 field_0xaa3; - /* 0x0AA4 */ u8 field_0xaa4; - /* 0x0AA5 */ u8 field_0xaa5; - /* 0x0AA6 */ u8 field_0xaa6; - /* 0x0AA7 */ u8 field_0xaa7; - /* 0x0AA8 */ u8 field_0xaa8; - /* 0x0AA9 */ u8 field_0xaa9; - /* 0x0AAA */ u8 field_0xaaa; - /* 0x0AAB */ u8 field_0xaab; - /* 0x0AAC */ u8 field_0xaac; - /* 0x0AAD */ u8 field_0xaad; - /* 0x0AAE */ u8 field_0xaae; - /* 0x0AAF */ u8 field_0xaaf; + /* 0x0AA3 */ u8 mBrkAnmFrame; + /* 0x0AA4 */ u8 mSwitchNo; + /* 0x0AA5 */ u8 mType; + /* 0x0AA6 */ u8 mType2; + /* 0x0AA7 */ u8 mTimer10; + /* 0x0AA8 */ bool field_0xaa8; + /* 0x0AA9 */ u8 mTimer12; + /* 0x0AAA */ u8 mTimer13; + /* 0x0AAB */ u8 mCutJumpStatus; + /* 0x0AAC */ bool mInactive; + /* 0x0AAD */ bool mStayNo2Flag; + /* 0x0AAE */ u8 mBlendStatus; /* 0x0AB0 */ f32 mBlend; - /* 0x0AB4 */ char* field_0xab4; + /* 0x0AB4 */ char* mArcName; /* 0x0AB8 */ dBgS_AcchCir mAcchCir; /* 0x0AF8 */ dBgS_ObjAcch mAcch; - /* 0x0CD0 */ u8 field_0xcd0[0x10d0 - 0xcd0]; - /* 0x10D0 */ dBgS_Acch field_0x10d0[16]; - /* 0x2E50 */ cXyz field_0x2e50; - /* 0x2E5C */ u8 field_0x2e5c[0x2e6c - 0x2e5c]; - /* 0x2E6C */ dCcD_GStts mGStts; - /* 0x2E8C */ dCcD_Stts field_0x2e8c; - /* 0x2EC8 */ dCcD_Sph field_0x2ec8[3]; - /* 0x3270 */ dCcD_Sph field_0x3270[3]; - /* 0x3618 */ dCcD_Sph field_0x3618; + /* 0x0CD0 */ dBgS_AcchCir mAcchCirArr[16]; + /* 0x10D0 */ dBgS_ObjAcch mAcchArr[16]; + /* 0x2E50 */ dCcD_Stts mStts1; + /* 0x2E8C */ dCcD_Stts mStts2; + /* 0x2EC8 */ dCcD_Sph mSphA[3]; + /* 0x3270 */ dCcD_Sph mSphB[3]; + /* 0x3618 */ dCcD_Sph mSphC; /* 0x3750 */ dCcD_Sph mSwordSphs[4]; /* 0x3C30 */ dCcD_Cps mCps; - /* 0x3D74 */ dCcD_Sph field_0x3d74; - /* 0x3EAC */ cXyz field_0x3eac; + /* 0x3D74 */ dCcD_Sph mSphD; + /* 0x3EAC */ cXyz mCpsPos; /* 0x3EB8 */ dCcU_AtInfo mAtInfo; - /* 0x3EDC */ dCcD_Stts field_0x3edc[16]; - /* 0x429C */ dCcD_Sph field_0x429c[16]; - /* 0x561C */ u32 field_0x561c[4]; - /* 0x562C */ u8 field_0x562c; + /* 0x3EDC */ dCcD_Stts mSttsArr[16]; + /* 0x429C */ dCcD_Sph mSphArr[16]; + /* 0x561C */ u32 mParticleKeys[4]; + /* 0x562C */ u8 mHioInit; }; STATIC_ASSERT(sizeof(daB_TN_c) == 0x5630); @@ -186,19 +232,19 @@ public: /* 8061EBEC */ daB_TN_HIO_c(); /* 8062D98C */ virtual ~daB_TN_HIO_c() {}; - /* 0x04 */ s8 field_0x4; + /* 0x04 */ s8 mUnk1; /* 0x08 */ f32 mScale; - /* 0x0C */ f32 field_0xc; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1c; - /* 0x20 */ f32 field_0x20; + /* 0x0C */ f32 mKColorA; + /* 0x10 */ f32 mTimer3Wolf; + /* 0x14 */ f32 mTimer3HumanType0; + /* 0x18 */ f32 mTimer3HumanType1; + /* 0x1C */ f32 mTimer3NormalType0; + /* 0x20 */ f32 mTimer3NormalType1; /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - - + /* 0x28 */ f32 mTimer1Action1; + /* 0x2C */ f32 mTimer1Action2; }; +STATIC_ASSERT(sizeof(daB_TN_HIO_c) == 0x30); + #endif /* D_A_B_TN_H */ diff --git a/src/d/actor/d_a_b_tn.cpp b/src/d/actor/d_a_b_tn.cpp index 36cf2222da9..014d6153150 100644 --- a/src/d/actor/d_a_b_tn.cpp +++ b/src/d/actor/d_a_b_tn.cpp @@ -1,125 +1,158 @@ /** * @file d_a_b_tn.cpp - * -*/ + * + */ #include "d/actor/d_a_b_tn.h" +#include +#include "Z2AudioLib/Z2Instances.h" #include "d/actor/d_a_boomerang.h" #include "d/actor/d_a_nbomb.h" -#include "d/d_cc_uty.h" -#include "dol2asm.h" -#include "Z2AudioLib/Z2Instances.h" -#include "d/d_camera.h" -#include + UNK_REL_DATA; + #include "f_op/f_op_actor_enemy.h" +/* 8062E93C-8062E97C 000038 0040+00 0/1 0/0 0/0 .data cc_tt_src__22@unnamed@d_a_b_tn_cpp@ + */ namespace { - /* 8062E93C-8062E97C 000038 0040+00 0/1 0/0 0/0 .data cc_tt_src__22@unnamed@d_a_b_tn_cpp@ */ - static u8 cc_tt_src[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xD8, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x75, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, - }; +static dCcD_SrcSph cc_tt_src = { + { + {0, {{AT_TYPE_CSTATUE_SWING, 0, 0}, {0xD8000012, 0x43}, 0x75}}, + {dCcD_SE_METAL, 0, 0, 0, {0}}, + {dCcD_SE_NONE, 0, 0, 0, {6}}, + {0}, + }, + {{ + {0.0f, 0.0f, 0.0f}, + 40.0f, + }}, +}; - /* 8062E97C-8062E9BC 000078 0040+00 0/1 0/0 0/0 .data cc_tt_src2__22@unnamed@d_a_b_tn_cpp@ */ - static u8 cc_tt_src2[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFB, 0xFD, 0xED, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, - }; +/* 8062E97C-8062E9BC 000078 0040+00 0/1 0/0 0/0 .data cc_tt_src2__22@unnamed@d_a_b_tn_cpp@ */ +static dCcD_SrcSph cc_tt_src2 = { + { + {0, {{AT_TYPE_CSTATUE_SWING, 0, 0}, {0x00FBFDED, 0x43}, 0x0}}, + {dCcD_SE_METAL, 0, 0, 0, {0}}, + {dCcD_SE_NONE, 0, 0, 0, {7}}, + {0}, + }, + {{ + {0.0f, 0.0f, 0.0f}, + 40.0f, + }}, +}; - /* 8062E9BC-8062E9FC 0000B8 0040+00 0/1 0/0 0/0 .data cc_bomb_src__22@unnamed@d_a_b_tn_cpp@ */ - static u8 cc_bomb_src[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x45, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, - }; +/* 8062E9BC-8062E9FC 0000B8 0040+00 0/1 0/0 0/0 .data cc_bomb_src__22@unnamed@d_a_b_tn_cpp@ */ +static dCcD_SrcSph cc_bomb_src = { + { + {0, {{AT_TYPE_CSTATUE_SWING, 0, 0}, {0x00000000, 0x00}, 0x145}}, + {dCcD_SE_NONE, 0, 0, 0, {0}}, + {dCcD_SE_NONE, 0, 0, 0, {0}}, + {0}, + }, + {{ + {0.0f, 0.0f, 0.0f}, + 40.0f, + }}, +}; - /* 8062E9FC-8062EA3C 0000F8 0040+00 0/1 0/0 0/0 .data cc_tt_at_src__22@unnamed@d_a_b_tn_cpp@ */ - static u8 cc_tt_at_src[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x09, 0x00, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, - }; +/* 8062E9FC-8062EA3C 0000F8 0040+00 0/1 0/0 0/0 .data cc_tt_at_src__22@unnamed@d_a_b_tn_cpp@ */ +static dCcD_SrcSph cc_tt_at_src = { + { + {0, {{AT_TYPE_CSTATUE_SWING, 0, 0x5}, {0xD8FBFDFF, 0x00}, 0x15}}, + {dCcD_SE_METAL, 0, 9, 0, {0}}, + {dCcD_SE_NONE, 0, 0, 0, {2}}, + {0}, + }, + {{ + {0.0f, 0.0f, 0.0f}, + 40.0f, + }}, +}; - /* 8062EA3C-8062EA88 000138 004C+00 0/1 0/0 0/0 .data cc_tt_at_cps_src__22@unnamed@d_a_b_tn_cpp@ */ - static u8 cc_tt_at_cps_src[76] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x09, 0x00, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, - }; +/* 8062EA3C-8062EA88 000138 004C+00 0/1 0/0 0/0 .data cc_tt_at_cps_src__22@unnamed@d_a_b_tn_cpp@ */ +static dCcD_SrcCps cc_tt_at_cps_src = { + { + {0, {{AT_TYPE_CSTATUE_SWING, 0, 5}, {0xD8FBFDFF, 0x00}, 0x75}}, + {dCcD_SE_METAL, 0, 9, 0, {0}}, + {dCcD_SE_NONE, 0, 0, 0, {2}}, + {0}, + }, + {{ + {0.0f, 0.0f, 0.0f}, + {0.0f, 0.0f, 0.0f}, + 20.0f, + }}, +}; - /* 8062EA88-8062EAC8 000184 0040+00 0/1 0/0 0/0 .data cc_tt_tate_src__22@unnamed@d_a_b_tn_cpp@ */ - static u8 cc_tt_tate_src[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x75, 0x09, 0x00, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, - }; +/* 8062EA88-8062EAC8 000184 0040+00 0/1 0/0 0/0 .data cc_tt_tate_src__22@unnamed@d_a_b_tn_cpp@ */ +static dCcD_SrcSph cc_tt_tate_src = { + { + {0, {{AT_TYPE_CSTATUE_SWING, 0, 4}, {0xD8FBFDFF, 0x43}, 0x75}}, + {dCcD_SE_METAL, 0, 9, 0, {0}}, + {dCcD_SE_NONE, 2, 0, 0, {0x0303}}, + {0}, + }, + {{ + {0.0f, 0.0f, 0.0f}, + 40.0f, + }}, +}; - /* 8062EAC8-8062EB08 0001C4 0040+00 0/1 0/0 0/0 .data cc_part_src__22@unnamed@d_a_b_tn_cpp@ */ - static u8 cc_part_src[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, - }; +/* 8062EAC8-8062EB08 0001C4 0040+00 0/1 0/0 0/0 .data cc_part_src__22@unnamed@d_a_b_tn_cpp@ */ +static dCcD_SrcSph cc_part_src = { + { + {0, {{AT_TYPE_CSTATUE_SWING, 0, 0}, {0x00000002, 0x00}, 0x75}}, + {dCcD_SE_METAL, 0, 0, 0, {0}}, + {dCcD_SE_NONE, 0, 0, 0, {6}}, + {0}, + }, + {{ + {0.0f, 0.0f, 0.0f}, + 40.0f, + }}, +}; - /* 8062EB08-8062EB18 000204 0010+00 0/1 0/0 0/0 .data tn_model_brk_idx__22@unnamed@d_a_b_tn_cpp@ */ - static s8 tn_model_brk_idx[16] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x01, 0x01, 0x02, 0xFF, 0xFF, 0xFF, - }; +/* 8062EB08-8062EB18 000204 0010+00 0/1 0/0 0/0 .data tn_model_brk_idx__22@unnamed@d_a_b_tn_cpp@ */ +static s8 tn_model_brk_idx[16] = { + 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 2, -1, -1, -1, +}; - /* 8062EB18-8062EB28 000214 0010+00 0/1 0/0 0/0 .data tn_model_brk_idx2__22@unnamed@d_a_b_tn_cpp@ */ - static s8 tn_model_brk_idx2[16] = { - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, - 0x01, 0x00, 0x00, 0x02, 0xFF, 0xFF, 0xFF, - }; +/* 8062EB18-8062EB28 000214 0010+00 0/1 0/0 0/0 .data tn_model_brk_idx2__22@unnamed@d_a_b_tn_cpp@ */ +static s8 tn_model_brk_idx2[16] = { + 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 2, -1, -1, -1, +}; - /* 8062EB28-8062EBA8 000224 0080+00 0/1 0/0 0/0 .data tn_part_model_id__22@unnamed@d_a_b_tn_cpp@ */ - static int tn_part_model_id[32] = { - 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 19, - 18, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 18, - 17, 21, 20, - }; +/* 8062EB28-8062EBA8 000224 0080+00 0/1 0/0 0/0 .data tn_part_model_id__22@unnamed@d_a_b_tn_cpp@ */ +static int tn_part_model_id[32] = { + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 18, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 17, 21, 20, +}; - /* 8062EBA8-8062EBE8 0002A4 0040+00 2/2 0/0 0/0 .data tn_part_joint__22@unnamed@d_a_b_tn_cpp@ */ - static int tn_part_joint[16] = { - 8, 14, 3, 3, 5, 5, 11, 17, 26, - 25, 27, 28, 9, 27, 27, 27 - }; - - /* 8062EBE8-8062EC28 0002E4 0040+00 1/2 0/0 0/0 .data ground_y_part__22@unnamed@d_a_b_tn_cpp@ */ - static float ground_y_part[16] = { - 15.0f, 15.0f, 0.0f, 0.0f, 23.0f, 12.0f, 25.0f, 25.0f, - -5.0f, 5.0f, 8.0f, 5.0f, 12.0f, 7.0f, 0.0f, 0.0f, - }; -} +/* 8062EBA8-8062EBE8 0002A4 0040+00 2/2 0/0 0/0 .data tn_part_joint__22@unnamed@d_a_b_tn_cpp@ */ +static int tn_part_joint[16] = {8, 14, 3, 3, 5, 5, 11, 17, 26, 25, 27, 28, 9, 27, 27, 27}; +/* 8062EBE8-8062EC28 0002E4 0040+00 1/2 0/0 0/0 .data ground_y_part__22@unnamed@d_a_b_tn_cpp@ */ +static f32 ground_y_part[16] = { + 15.0f, 15.0f, 0.0f, 0.0f, 23.0f, 12.0f, 25.0f, 25.0f, + -5.0f, 5.0f, 8.0f, 5.0f, 12.0f, 7.0f, 0.0f, 0.0f, +}; +} // namespace /* 8061EBEC-8061EC58 0000EC 006C+00 1/1 0/0 0/0 .text __ct__12daB_TN_HIO_cFv */ daB_TN_HIO_c::daB_TN_HIO_c() { - field_0x4 = -1; + mUnk1 = -1; mScale = 1.3f; - field_0xc = 40.0f; - field_0x1c = 150.0f; - field_0x20 = 250.0f; - field_0x14 = 210.0f; - field_0x18 = 350.0f; - field_0x10 = 120.0f; + mKColorA = 40.0f; + mTimer3NormalType0 = 150.0f; + mTimer3NormalType1 = 250.0f; + mTimer3HumanType0 = 210.0f; + mTimer3HumanType1 = 350.0f; + mTimer3Wolf = 120.0f; field_0x24 = 360.0f; - field_0x28 = 0.0f; - field_0x2c = 0.0f; + mTimer1Action1 = 0.0f; + mTimer1Action2 = 0.0f; } /* 8061EC58-8061ED10 000158 00B8+00 1/1 0/0 0/0 .text ctrlJoint__8daB_TN_cFP8J3DJointP8J3DModel */ @@ -128,9 +161,9 @@ int daB_TN_c::ctrlJoint(J3DJoint* i_joint, J3DModel* model) { mDoMtx_stack_c::copy(model->getAnmMtx(mJntNo)); if (mJntNo == 5) { - mDoMtx_stack_c::XrotM(field_0xa96); + mDoMtx_stack_c::XrotM(mNeckAngle); } else if (mJntNo == 1) { - mDoMtx_stack_c::XrotM(field_0xa98); + mDoMtx_stack_c::XrotM(mWaistAngle); } model->setAnmMtx(mJntNo, mDoMtx_stack_c::get()); @@ -139,11 +172,11 @@ int daB_TN_c::ctrlJoint(J3DJoint* i_joint, J3DModel* model) { } /* 8061ED10-8061ED5C 000210 004C+00 1/1 0/0 0/0 .text JointCallBack__8daB_TN_cFP8J3DJointi */ -int daB_TN_c::JointCallBack(J3DJoint* i_joint, int param_2) { - if (param_2 == 0) { +int daB_TN_c::JointCallBack(J3DJoint* i_joint, int i_data) { + if (i_data == 0) { J3DModel* model = j3dSys.getModel(); daB_TN_c* mUserArea = (daB_TN_c*)model->getUserArea(); - if (mUserArea) { + if (mUserArea != NULL) { mUserArea->ctrlJoint(i_joint, model); } } @@ -156,7 +189,7 @@ void daB_TN_c::calcNeckAngle() { csXyz acStack_18; s16 sVar1 = 0; - if (field_0xa93) { + if (mUpdateNeckAngle) { mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(5)); mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &acStack_18); @@ -170,7 +203,7 @@ void daB_TN_c::calcNeckAngle() { } } - cLib_addCalcAngleS2(&field_0xa96, sVar1, 4, 0x1000); + cLib_addCalcAngleS2(&mNeckAngle, sVar1, 4, 0x1000); } /* 8061EE14-8061EEC8 000314 00B4+00 1/1 0/0 0/0 .text calcWaistAngle__8daB_TN_cFv */ @@ -178,7 +211,7 @@ void daB_TN_c::calcWaistAngle() { csXyz acStack_18; s16 sVar1 = 0; - if (field_0xa94) { + if (mUpdateWaistAngle) { mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(1)); mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &acStack_18); @@ -192,13 +225,14 @@ void daB_TN_c::calcWaistAngle() { } } - cLib_addCalcAngleS2(&field_0xa98, sVar1, 4, 0x1000); + cLib_addCalcAngleS2(&mWaistAngle, sVar1, 4, 0x1000); } -UNK_REL_BSS +/* .bss None */ +UNK_REL_BSS; /* 8062F01D 0003+00 data_8062F01D None */ -static u8 struct_8062F01C; +static u8 s_hioinit; /* 8062F02C-8062F05C 000054 0030+00 9/11 0/0 0/0 .bss l_HIO */ static daB_TN_HIO_c l_HIO; @@ -206,63 +240,65 @@ static daB_TN_HIO_c l_HIO; /* 8061EEC8-8061F1E0 0003C8 0318+00 1/1 0/0 0/0 .text draw__8daB_TN_cFv */ int daB_TN_c::draw() { J3DModel* model = mpModelMorf2->getModel(); - if (field_0xa9e != 0 || field_0xaac != 0) { + if (mDisappear || mInactive) { return 1; } g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); g_env_light.setLightTevColorType_MAJI(model, &tevStr); J3DModelData* modelData = model->getModelData(); - if (field_0xaa5 == 1) { - mBrkAnm->entry(modelData); + if (mType == 1) { + mpBrkAnm->entry(modelData); } - if (field_0x728) { + if (mMaterialColor) { for (u16 i = 0; i < modelData->getMaterialNum(); i++) { J3DMaterial* mMatNodePtr = modelData->getMaterialNodePointer(i); - J3DGXColorS10* mColor = mMatNodePtr->getTevColor(0); - mColor->r = field_0x728; + J3DGXColorS10* mColor; mColor = mMatNodePtr->getTevColor(0); - mColor->g = field_0x728; + mColor->r = mMaterialColor; mColor = mMatNodePtr->getTevColor(0); - mColor->b = field_0x728; + mColor->g = mMaterialColor; + mColor = mMatNodePtr->getTevColor(0); + mColor->b = mMaterialColor; } } mpModelMorf2->entryDL(); cXyz sp48(current.pos.x, current.pos.y + 100.0f, current.pos.z); - mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, &sp48, 1000.0f, 0.0f, - current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, &sp48, 1000.0f, 0.0f, current.pos.y, + mAcch.GetGroundH(), mAcch.m_gnd, &tevStr, 0, 1.0f, + dDlst_shadowControl_c::getSimpleTex()); for (int i = 0; i < 16; i++) { - if (field_0x9fc[i] != 7) { + if (mStates[i] != 7) { if (i == 15) { model = mpModelMorf1->getModel(); g_env_light.setLightTevColorType_MAJI(model, &tevStr); mpModelMorf1->entryDL(); } else { - model = mModels[i]; + model = mpModels[i]; g_env_light.setLightTevColorType_MAJI(model, &tevStr); - - if (field_0xaa5 == 1 && mBrkAnms[i]) { + + if (mType == 1 && mpBrkAnms[i]) { modelData = model->getModelData(); - mBrkAnms[i]->entry(modelData); + mpBrkAnms[i]->entry(modelData); } mDoExt_modelUpdateDL(model); } - if (field_0x9fc[i] == 0) { + if (mStates[i] == 0) { dComIfGd_addRealShadow(mShadowKey, model); } } } - if (field_0xa90 != 0) { - g_env_light.setLightTevColorType_MAJI(field_0x648, &tevStr); - modelData = field_0x648->getModelData(); + if (mUpdateModelTimer != 0) { + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + modelData = mpModel->getModelData(); J3DGXColor* mKColor = modelData->getMaterialNodePointer(0)->getTevKColor(3); - mKColor->a = l_HIO.field_0xc; - mDoExt_modelUpdateDL(field_0x648); + mKColor->a = l_HIO.mKColorA; + mDoExt_modelUpdateDL(mpModel); } return 1; @@ -274,34 +310,34 @@ static int daB_TN_Draw(daB_TN_c* i_this) { } /* 8061F200-8061F31C 000700 011C+00 3/3 0/0 0/0 .text setBreakPart__8daB_TN_cFi */ -void daB_TN_c::setBreakPart(int param_1) { +void daB_TN_c::setBreakPart(int i_idx) { static int break_part_no[13] = { 6, 11, 8, 1, 10, 0, 9, 7, 4, 5, 12, 2, 3, }; - if (param_1 >= 12) { - param_1 = 13; + if (i_idx >= 12) { + i_idx = 13; } int iVar1 = 0; for (int i = 0; i < 13; i++) { - if (field_0x9fc[break_part_no[i]] != 0) { + if (mStates[break_part_no[i]] != 0) { iVar1++; } } - iVar1 = param_1 - iVar1; + iVar1 = i_idx - iVar1; if (iVar1 != 0) { for (int i = 0; i <= 12; i++) { - if (field_0x9fc[break_part_no[i]] == 0) { - field_0x9fc[break_part_no[i]] = 2; + if (mStates[break_part_no[i]] == 0) { + mStates[break_part_no[i]] = 2; mSound.startCreatureSound(Z2SE_EN_TN_BRK_ARMOR, 0, -1); - if (field_0xaa5 == 1 && break_part_no[i] == 4) { - field_0xa78++; + if (mType == 1 && break_part_no[i] == 4) { + mNextBreakPart++; iVar1++; } - + iVar1--; if (iVar1 == 0) { @@ -313,33 +349,33 @@ void daB_TN_c::setBreakPart(int param_1) { } /* 8061F31C-8061F3D0 00081C 00B4+00 1/1 0/0 0/0 .text setBreakHeadPart__8daB_TN_cFi */ -void daB_TN_c::setBreakHeadPart(int param_1) { +void daB_TN_c::setBreakHeadPart(int i_idx) { static int break_part_no2[13] = { 4, 5, 7, 6, 11, 8, 1, 10, 0, 9, 12, 2, 3, }; - if (param_1 >= 12) { - param_1 = 13; + if (i_idx >= 12) { + i_idx = 13; } int iVar1 = 0; for (int i = 0; i < 13; i++) { - if (field_0x9fc[break_part_no2[i]] != 0) { + if (mStates[break_part_no2[i]] != 0) { iVar1++; } } - iVar1 = param_1 - iVar1; + iVar1 = i_idx - iVar1; if (iVar1 != 0) { for (int i = 0; i <= 12; i++) { - if (field_0x9fc[break_part_no2[i]] == 0) { - field_0x9fc[break_part_no2[i]] = 2; + if (mStates[break_part_no2[i]] == 0) { + mStates[break_part_no2[i]] = 2; if (break_part_no2[i] == 4) { - field_0xa78++; + mNextBreakPart++; iVar1++; } - + iVar1--; if (iVar1 == 0) { @@ -351,539 +387,391 @@ void daB_TN_c::setBreakHeadPart(int param_1) { } /* 8061F3D0-8061F520 0008D0 0150+00 4/4 0/0 0/0 .text setPartLandEffect__8daB_TN_cFii */ -void daB_TN_c::setPartLandEffect(int param_1, int param_2) { +void daB_TN_c::setPartLandEffect(int i_idx, int i_data) { static int break_part_vib[16] = { - 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 3, 2, 0xFF, 2, + 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 3, 2, 0xFF, 2, }; - if (param_2 == 0) { + if (i_data == 0) { csXyz cStack_30(0, 0, 0); cXyz sp1c(l_HIO.mScale, l_HIO.mScale, l_HIO.mScale); - dComIfGp_particle_setPolyColor(0x87ea, mAcch.m_gnd, &field_0x75c[param_1], - &tevStr, &cStack_30, &sp1c, 0, NULL, -1, NULL); - dComIfGp_particle_set(0x880b, &field_0x75c[param_1], &tevStr, &cStack_30, &sp1c); + dComIfGp_particle_setPolyColor(0x87ea, mAcch.m_gnd, &mPositions[i_idx], &tevStr, &cStack_30, + &sp1c, 0, NULL, -1, NULL); + dComIfGp_particle_set(0x880b, &mPositions[i_idx], &tevStr, &cStack_30, &sp1c); } - int mVibMode = break_part_vib[param_1]; + int mVibMode = break_part_vib[i_idx]; if (mVibMode != 0xff) { dComIfGp_getVibration().StartShock(mVibMode, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); } } -/* 8062F05C-8062F068 000084 000C+00 0/1 0/0 0/0 .bss @3949 */ -#pragma push -#pragma force_active on -static u8 lit_3949[12]; -#pragma pop - -/* 8062F068-8062F074 000090 000C+00 0/1 0/0 0/0 .bss @3950 */ -#pragma push -#pragma force_active on -static u8 lit_3950[12]; -#pragma pop - -/* 8062F074-8062F080 00009C 000C+00 0/1 0/0 0/0 .bss @3951 */ -#pragma push -#pragma force_active on -static u8 lit_3951[12]; -#pragma pop - -/* 8062F080-8062F08C 0000A8 000C+00 0/1 0/0 0/0 .bss @3952 */ -#pragma push -#pragma force_active on -static u8 lit_3952[12]; -#pragma pop - -/* 8062F08C-8062F098 0000B4 000C+00 0/1 0/0 0/0 .bss @3953 */ -#pragma push -#pragma force_active on -static u8 lit_3953[12]; -#pragma pop - -/* 8062F098-8062F0A4 0000C0 000C+00 0/1 0/0 0/0 .bss @3954 */ -#pragma push -#pragma force_active on -static u8 lit_3954[12]; -#pragma pop - -/* 8062F0A4-8062F0B0 0000CC 000C+00 0/1 0/0 0/0 .bss @3955 */ -#pragma push -#pragma force_active on -static u8 lit_3955[12]; -#pragma pop - -/* 8062F0B0-8062F0BC 0000D8 000C+00 0/1 0/0 0/0 .bss @3956 */ -#pragma push -#pragma force_active on -static u8 lit_3956[12]; -#pragma pop - -/* 8062F0BC-8062F0C8 0000E4 000C+00 0/1 0/0 0/0 .bss @3957 */ -#pragma push -#pragma force_active on -static u8 lit_3957[12]; -#pragma pop - -/* 8062F0C8-8062F0D4 0000F0 000C+00 0/1 0/0 0/0 .bss @3958 */ -#pragma push -#pragma force_active on -static u8 lit_3958[12]; -#pragma pop - -/* 8062F0D4-8062F0E0 0000FC 000C+00 0/1 0/0 0/0 .bss @3959 */ -#pragma push -#pragma force_active on -static u8 lit_3959[12]; -#pragma pop - -/* 8062F0E0-8062F0EC 000108 000C+00 0/1 0/0 0/0 .bss @3960 */ -#pragma push -#pragma force_active on -static u8 lit_3960[12]; -#pragma pop - -/* 8062F0EC-8062F0F8 000114 000C+00 0/1 0/0 0/0 .bss @3961 */ -#pragma push -#pragma force_active on -static u8 lit_3961[12]; -#pragma pop - -/* 8062F0F8-8062F104 000120 000C+00 0/1 0/0 0/0 .bss @3962 */ -#pragma push -#pragma force_active on -static u8 lit_3962[12]; -#pragma pop - -/* 8062F104-8062F110 00012C 000C+00 0/1 0/0 0/0 .bss @3963 */ -#pragma push -#pragma force_active on -static u8 lit_3963[12]; -#pragma pop - -/* 8062F110-8062F11C 000138 000C+00 0/1 0/0 0/0 .bss @3964 */ -#pragma push -#pragma force_active on -static u8 lit_3964[12]; -#pragma pop - +/* 8062F11C-8062F1DC 000144 00C0+00 1/2 0/0 0/0 .bss offset_part__22@unnamed@d_a_b_tn_cpp@ */ namespace { - /* 8062F11C-8062F1DC 000144 00C0+00 1/2 0/0 0/0 .bss offset_part__22@unnamed@d_a_b_tn_cpp@ */ - static cXyz offset_part[16]; -} - -/* 8062F1DC-8062F1E8 000204 000C+00 0/1 0/0 0/0 .bss @3965 */ -#pragma push -#pragma force_active on -static u8 lit_3965[12]; -#pragma pop - -/* 8062F1E8-8062F1F4 000210 000C+00 0/1 0/0 0/0 .bss @3966 */ -#pragma push -#pragma force_active on -static u8 lit_3966[12]; -#pragma pop - -/* 8062F1F4-8062F200 00021C 000C+00 0/1 0/0 0/0 .bss @3967 */ -#pragma push -#pragma force_active on -static u8 lit_3967[12]; -#pragma pop - -/* 8062F200-8062F20C 000228 000C+00 0/1 0/0 0/0 .bss @3968 */ -#pragma push -#pragma force_active on -static u8 lit_3968[12]; -#pragma pop - -/* 8062F20C-8062F218 000234 000C+00 0/1 0/0 0/0 .bss @3969 */ -#pragma push -#pragma force_active on -static u8 lit_3969[12]; -#pragma pop - -/* 8062F218-8062F224 000240 000C+00 0/1 0/0 0/0 .bss @3970 */ -#pragma push -#pragma force_active on -static u8 lit_3970[12]; -#pragma pop - -/* 8062F224-8062F230 00024C 000C+00 0/1 0/0 0/0 .bss @3971 */ -#pragma push -#pragma force_active on -static u8 lit_3971[12]; -#pragma pop - -/* 8062F230-8062F23C 000258 000C+00 0/1 0/0 0/0 .bss @3972 */ -#pragma push -#pragma force_active on -static u8 lit_3972[12]; -#pragma pop - -/* 8062F23C-8062F248 000264 000C+00 0/1 0/0 0/0 .bss @3973 */ -#pragma push -#pragma force_active on -static u8 lit_3973[12]; -#pragma pop - -/* 8062F248-8062F254 000270 000C+00 0/1 0/0 0/0 .bss @3974 */ -#pragma push -#pragma force_active on -static u8 lit_3974[12]; -#pragma pop - -/* 8062F254-8062F260 00027C 000C+00 0/1 0/0 0/0 .bss @3975 */ -#pragma push -#pragma force_active on -static u8 lit_3975[12]; -#pragma pop - -/* 8062F260-8062F26C 000288 000C+00 0/1 0/0 0/0 .bss @3976 */ -#pragma push -#pragma force_active on -static u8 lit_3976[12]; -#pragma pop - -/* 8062F26C-8062F278 000294 000C+00 0/1 0/0 0/0 .bss @3977 */ -#pragma push -#pragma force_active on -static u8 lit_3977[12]; -#pragma pop - -/* 8062F278-8062F284 0002A0 000C+00 0/1 0/0 0/0 .bss @3978 */ -#pragma push -#pragma force_active on -static u8 lit_3978[12]; -#pragma pop - -/* 8062F284-8062F290 0002AC 000C+00 0/1 0/0 0/0 .bss @3979 */ -#pragma push -#pragma force_active on -static u8 lit_3979[12]; -#pragma pop - -/* 8062F290-8062F29C 0002B8 000C+00 0/1 0/0 0/0 .bss @3980 */ -#pragma push -#pragma force_active on -static u8 lit_3980[12]; -#pragma pop +static cXyz offset_part[16] = { + cXyz(-20.0f, 0.0f, 0.0f), cXyz(-20.0f, 0.0f, 0.0f), cXyz(0.0f, 0.0f, 0.0f), + cXyz(0.0f, 0.0f, 0.0f), cXyz(-20.0f, 20.0f, 0.0f), cXyz(-12.0f, 20.0f, 0.0f), + cXyz(-17.0f, 0.0f, 0.0f), cXyz(-17.0f, 0.0f, 0.0f), cXyz(0.0f, 35.0f, 0.0f), + cXyz(0.0f, 15.0f, 0.0f), cXyz(0.0f, 30.0f, 0.0f), cXyz(0.0f, -30.0f, 0.0f), + cXyz(-20.0f, 0.0f, 0.0f), cXyz(-40.0f, 0.0f, -70.0f), cXyz(-15.0f, 50.0f, 30.0f), + cXyz(-12.0f, 8.0f, 0.0f), +}; +} // namespace +/* 8062F29C-8062F2FC 0002C4 0060+00 4/5 0/0 0/0 .bss ground_angle_part__22@unnamed@d_a_b_tn_cpp@ */ namespace { - /* 8062F29C-8062F2FC 0002C4 0060+00 4/5 0/0 0/0 .bss ground_angle_part__22@unnamed@d_a_b_tn_cpp@ */ - static csXyz ground_angle_part[16]; -} +static csXyz ground_angle_part[16] = { + csXyz(0x0000, 0x0000, 0x0000), csXyz(0x0000, 0x0000, 0x0000), csXyz(0x0000, 0x0000, 0x0000), + csXyz(0x0000, 0x0000, -0x8000), csXyz(0x4000, 0x0000, -0x093e), csXyz(0x0000, 0x0000, 0x5c00), + csXyz(0x0000, 0x0000, 0x0400), csXyz(-0x8000, 0x0000, -0x0400), csXyz(0x0000, 0x0000, 0x3c00), + csXyz(0x0000, 0x0000, 0x4000), csXyz(0x0000, 0x0000, 0x36b0), csXyz(0x0000, 0x0000, 0x4800), + csXyz(-0x02cc, 0x0000, 0x1000), csXyz(-0x800, 0x0000, -0x0980), csXyz(0x0000, 0x0000, 0x3c8c), + csXyz(-0x04e9, -0x1800, 0x3d2a), +}; +} // namespace /* 8061F520-8061F9F4 000A20 04D4+00 1/1 0/0 0/0 .text calcShieldMove__8daB_TN_cFv */ void daB_TN_c::calcShieldMove() { s16 sVar2; int iVar1; - - switch (field_0x9fc[12]) { - case 2: - mDoMtx_stack_c::copy(mModels[12]->getBaseTRMtx()); - mDoMtx_stack_c::multVecZero(&field_0x75c[12]); - field_0x81c[12] = field_0x75c[12]; - mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &field_0x99c[12]); - sVar2 = shape_angle.y + 0x4000; - field_0xa5c = 0x1800; - field_0x8dc[12].set((cM_rndF(5.0f) + 10.0f) * cM_ssin(sVar2), cM_rndF(7.0f) + 35.0f, (cM_rndF(5.0f) + 10.0f) * cM_scos(sVar2)); - field_0x9fc[12] = 3; - break; + switch (mStates[12]) { + case 2: + mDoMtx_stack_c::copy(mpModels[12]->getBaseTRMtx()); + mDoMtx_stack_c::multVecZero(&mPositions[12]); + mPositionsCopy[12] = mPositions[12]; + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &field_0x99c[12]); - case 3: - field_0x10d0[12].SetGroundUpY(ground_y_part[12] + 55.0f); - cLib_chaseF(&field_0x8dc[12].y, -70.0f, 5.0f); - cLib_chaseAngleS(&field_0x99c[12].x, ground_angle_part[12].x, 0x400); - cLib_chaseAngleS(&field_0x99c[12].z, field_0xa5c + ground_angle_part[12].z, 0x800); + sVar2 = shape_angle.y + 0x4000; + field_0xa5c = 0x1800; + field_0x8dc[12].set((cM_rndF(5.0f) + 10.0f) * cM_ssin(sVar2), cM_rndF(7.0f) + 35.0f, + (cM_rndF(5.0f) + 10.0f) * cM_scos(sVar2)); + mStates[12] = 3; + break; - if (field_0x10d0[12].ChkGroundHit()) { - Z2GetAudioMgr()->seStart(Z2SE_EN_TN_SHIELD_BND, &field_0x75c[12], 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); - s16 sVar1 = cM_rndFX(32768.0f); - field_0x8dc[12].set((cM_rndF(2.0f) + 5.0f) * cM_ssin(sVar1), cM_rndF(5.0f) + 18.0f, (cM_rndF(2.0f) + 5.0f) * cM_scos(sVar1)); - field_0x9fc[12] = 4; - setPartLandEffect(12, 0); + case 3: + mAcchArr[12].SetGroundUpY(ground_y_part[12] + 55.0f); + cLib_chaseF(&field_0x8dc[12].y, -70.0f, 5.0f); + cLib_chaseAngleS(&field_0x99c[12].x, ground_angle_part[12].x, 0x400); + cLib_chaseAngleS(&field_0x99c[12].z, field_0xa5c + ground_angle_part[12].z, 0x800); + + if (mAcchArr[12].ChkGroundHit()) { + Z2GetAudioMgr()->seStart(Z2SE_EN_TN_SHIELD_BND, &mPositions[12], 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); + s16 sVar1 = cM_rndFX(32768.0f); + field_0x8dc[12].set((cM_rndF(2.0f) + 5.0f) * cM_ssin(sVar1), cM_rndF(5.0f) + 18.0f, + (cM_rndF(2.0f) + 5.0f) * cM_scos(sVar1)); + mStates[12] = 4; + setPartLandEffect(12, 0); + } + break; + + case 4: + case 5: + mAcchArr[12].SetGroundUpY(ground_y_part[12] + cM_ssin(field_0xa5c) * 60.0f); + cLib_chaseAngleS(&field_0x99c[12].x, ground_angle_part[12].x, 0x400); + cLib_chaseAngleS(&field_0x99c[12].z, ground_angle_part[12].z, 0x400); + cLib_chaseAngleS(&field_0xa5c, 0, 0x60); + field_0xa3c[12] += 0x1800; + field_0x99c[12].x += (int)(field_0xa5c * cM_ssin(field_0xa3c[12])); + field_0x99c[12].z += (int)(field_0xa5c * cM_scos(field_0xa3c[12])); + cLib_chaseF(&field_0x8dc[12].y, -70.0f, 5.0f); + + if (mStates[12] == 4 && mAcchArr[12].ChkGroundHit()) { + if (mType == 0) { + mStates[12] = 5; + field_0xa3c[12] = 0; + field_0x8dc[12].set(0.0f, 0.0f, 0.0f); + setPartLandEffect(12, 1); + } else { + fopAcM_createDisappear(this, &mPositions[12], 5, 0, 0xff); + mStates[12] = 7; } - break; + } + break; - case 4: - case 5: - field_0x10d0[12].SetGroundUpY(ground_y_part[12] + cM_ssin(field_0xa5c) * 60.0f); - cLib_chaseAngleS(&field_0x99c[12].x, ground_angle_part[12].x, 0x400); - cLib_chaseAngleS(&field_0x99c[12].z, ground_angle_part[12].z, 0x400); - cLib_chaseAngleS(&field_0xa5c, 0, 0x60); - field_0xa3c[12] += 0x1800; - field_0x99c[12].x += (int)(field_0xa5c * cM_ssin(field_0xa3c[12])); - field_0x99c[12].z += (int)(field_0xa5c * cM_scos(field_0xa3c[12])); - cLib_chaseF(&field_0x8dc[12].y, -70.0f, 5.0f); - - if (field_0x9fc[12] == 4 && field_0x10d0[12].ChkGroundHit()) { - if (field_0xaa5 == 0) { - field_0x9fc[12] = 5; - field_0xa3c[12] = 0; - field_0x8dc[12].set(0.0f, 0.0f, 0.0f); - setPartLandEffect(12, 1); - } else { - fopAcM_createDisappear(this, &field_0x75c[12], 5, 0, 0xff); - field_0x9fc[12] = 7; - } - } - break; - - case 6: - sVar2 = shape_angle.y + 0x4000; - field_0x8dc[12].set((cM_rndF(2.0f) + 5.0f) * cM_ssin(sVar2), cM_rndF(5.0f) + 18.0f, (cM_rndF(2.0f) + 5.0f) * cM_scos(sVar2)); - field_0x9fc[12] = 4; - field_0xa5c = 0x1800; - break; + case 6: + sVar2 = shape_angle.y + 0x4000; + field_0x8dc[12].set((cM_rndF(2.0f) + 5.0f) * cM_ssin(sVar2), cM_rndF(5.0f) + 18.0f, + (cM_rndF(2.0f) + 5.0f) * cM_scos(sVar2)); + mStates[12] = 4; + field_0xa5c = 0x1800; + break; } } /* 8061F9F4-8061FD7C 000EF4 0388+00 1/1 0/0 0/0 .text calcSwordMoveA__8daB_TN_cFv */ void daB_TN_c::calcSwordMoveA() { - // NONMATCHING - switch (field_0x9fc[13]) { - case 2: - mDoMtx_stack_c::copy(mModels[13]->getBaseTRMtx()); - mDoMtx_stack_c::multVecZero(&field_0x75c[13]); - field_0x81c[13] = field_0x75c[13]; - mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &field_0x99c[13]); + int idx = 13; + switch (mStates[idx]) { + case 0: + case 1: { + break; + } - if (field_0xaa5 == 0) { - field_0x8dc[13].set(0.0f, 0.0f, 70.0f); + case 2: { + mDoMtx_stack_c::copy(mpModels[idx]->getBaseTRMtx()); + mDoMtx_stack_c::multVecZero(&mPositions[idx]); + mPositionsCopy[idx] = mPositions[idx]; + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &field_0x99c[idx]); + + if (mType == 0) { + field_0x8dc[idx].set(0.0f, 0.0f, 70.0f); + } else { + cXyz sp20 = daPy_getPlayerActorClass()->current.pos; + sp20.y += 200.0f; + s16 sVar5 = cLib_targetAngleY(&mPositions[idx], &sp20); + s16 sVar6 = cLib_targetAngleX(&mPositions[idx], &sp20); + f32 fVar1 = fabsf(cM_scos(sVar6) * 80.0f); + field_0x8dc[idx].set(fVar1 * cM_ssin(sVar5), cM_ssin(sVar6) * 80.0f, + fVar1 * cM_scos(sVar5)); + } + + mStates[idx] = 3; + break; + } + + case 3: { + Z2GetAudioMgr()->seStartLevel(Z2SE_EN_TN_WEAPON_FLY, &mPositions[idx], 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); + + cLib_chaseF(&field_0x8dc[idx].y, -70.0f, 0.3f); + cLib_chaseAngleS(&field_0x99c[idx].x, ground_angle_part[idx].x, 0x800); + field_0x99c[idx].y -= 0x1800; + cLib_chaseAngleS(&field_0x99c[idx].z, ground_angle_part[idx].z, 0x800); + + if (mAcchArr[idx].ChkGroundHit() || mAcchArr[idx].ChkWallHit()) { + Z2GetAudioMgr()->seStart(Z2SE_EN_TN_WEAPON_STOP, &mPositions[idx], 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); + setPartLandEffect(idx, 0); + + if (mType == 1) { + field_0x99c[idx].y = 0x1800; + fopAcM_createDisappear(this, &mPositions[idx], 3, 0, 0xff); + mStates[idx] = 7; } else { - cXyz sp20 = daPy_getPlayerActorClass()->current.pos; - sp20.y += 200.0f; - s16 sVar5 = cLib_targetAngleY(&field_0x75c[13], &sp20); - s16 sVar6 = cLib_targetAngleX(&field_0x75c[13], &sp20); - f32 fVar1 = abs(cM_scos(sVar6) * 80.0f); - field_0x8dc[13].set(fVar1 * cM_ssin(sVar5), cM_ssin(sVar6) * 80.0f, fVar1 * cM_scos(sVar5)); + field_0x8dc[idx].set(0.0f, 18.0f, 25.0f); + mStates[idx] = 4; } + } - field_0x9fc[13] = 3; - break; + break; + } - case 3: - Z2GetAudioMgr()->seStartLevel(Z2SE_EN_TN_WEAPON_FLY, &field_0x75c[13], 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + case 4: { + cLib_chaseF(&field_0x8dc[idx].y, -70.0f, 5.0f); + cLib_chaseAngleS(&field_0x99c[idx].x, ground_angle_part[idx].x, 0x800); + field_0x99c[idx].y -= 0x1000; + cLib_chaseAngleS(&field_0x99c[idx].z, ground_angle_part[idx].z, 0x800); - cLib_chaseF(&field_0x8dc[13].y, -70.0f, 0.3f); - cLib_chaseAngleS(&field_0x99c[13].x, ground_angle_part[13].x, 0x800); - field_0x99c[13].y += -0x1800; - cLib_chaseAngleS(&field_0x99c[13].z, ground_angle_part[13].z, 0x800); + if (mAcchArr[idx].ChkGroundHit() || mAcchArr[idx].ChkWallHit()) { + field_0x99c[idx] = ground_angle_part[idx]; + field_0x8dc[idx].set(0.0f, 0.0f, 0.0f); + field_0xa3c[idx] = -0x1800; + setPartLandEffect(idx, 1); + mStates[idx] = 7; + } - if (field_0x10d0[13].ChkGroundHit() || field_0x10d0[13].ChkWallHit()) { - Z2GetAudioMgr()->seStart(Z2SE_EN_TN_WEAPON_STOP, &field_0x75c[13], 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); - setPartLandEffect(13, 0); + break; + } - if (field_0xaa5 == 1) { - field_0x99c[13].y = 0x1800; - fopAcM_createDisappear(this, &field_0x75c[13], 3, 0, 0xff); - field_0x9fc[13] = 7; - } else { - field_0x8dc[13].set(0.0f, 18.0f, 25.0f); - field_0x9fc[13] = 4; - } - } - break; - - case 6: - case 7: - cLib_chaseF(&field_0x8dc[13].y, -70.0f, 5.0f); - cLib_chaseAngleS(&field_0x99c[13].x, ground_angle_part[13].x, 0x800); - field_0x99c[13].y += -0x1000; - cLib_chaseAngleS(&field_0x99c[13].z, ground_angle_part[13].z, 0x800); - - if (field_0x10d0[13].ChkGroundHit() || field_0x10d0[13].ChkWallHit()) { - field_0x99c[13] = ground_angle_part[13]; - field_0x8dc[13].set(0.0f, 0.0f, 0.0f); - field_0xa3c[13] = -0x1800; - setPartLandEffect(13, 1); - field_0x9fc[13] = 7; - } + case 5: + case 6: + case 7: { + return; + } } } /* 8061FD7C-8061FFE0 00127C 0264+00 1/1 0/0 0/0 .text calcSwordMoveB__8daB_TN_cFv */ void daB_TN_c::calcSwordMoveB() { - // NONMATCHING - switch (field_0x9fc[15]) { - case 2: - mDoMtx_stack_c::copy(mpModelMorf1->getModel()->getBaseTRMtx()); - mDoMtx_stack_c::multVecZero(&field_0x75c[15]); - field_0x81c[15] = field_0x75c[15]; - mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &field_0x99c[15]); - field_0x8dc[15].set(0.0f, 0.0f, 10.0f); - field_0x9fc[15] = 3; - // fallthrough + switch (mStates[15]) { + case 2: + mDoMtx_stack_c::copy(mpModelMorf1->getModel()->getBaseTRMtx()); + mDoMtx_stack_c::multVecZero(&mPositions[15]); + mPositionsCopy[15] = mPositions[15]; + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &field_0x99c[15]); + field_0x8dc[15].set(0.0f, 0.0f, 10.0f); + mStates[15] = 3; + // [[fallthrough]] - case 3: - case 4: - cLib_chaseAngleS(&field_0x99c[15].x, ground_angle_part[15].x, 16); - cLib_chaseAngleS(&field_0x99c[15].y, ground_angle_part[15].y, 16); - cLib_chaseAngleS(&field_0x99c[15].z, ground_angle_part[15].z, 16); - cLib_chaseF(&field_0x8dc[15].y, -70.0f, 5.0f); + case 3: + case 4: + cLib_chaseAngleS(&field_0x99c[15].x, ground_angle_part[15].x, 16); + cLib_chaseAngleS(&field_0x99c[15].y, ground_angle_part[15].y, 16); + cLib_chaseAngleS(&field_0x99c[15].z, ground_angle_part[15].z, 16); + cLib_chaseF(&field_0x8dc[15].y, -70.0f, 5.0f); - if (field_0x10d0[15].ChkGroundHit()) { - Z2GetAudioMgr()->seStart(Z2SE_EN_TN_SWD_DROP, &field_0x75c[15], 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + if (mAcchArr[15].ChkGroundHit()) { + cXyz* pos; + Z2GetAudioMgr()->seStart(Z2SE_EN_TN_SWD_DROP, (pos = &mPositions[15]), 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); - if (field_0x9fc[15] == 3) { - field_0x8dc[15].set(0.0f, 10.0f, 10.0f); - field_0x9fc[15] = 4; - setPartLandEffect(15, 0); - } else if (field_0xaa5 == 0) { - field_0x8dc[15].set(0.0f, 0.0f, 7.0f); - field_0x99c[15] = ground_angle_part[15]; - field_0x9fc[15] = 5; - } else { - fopAcM_createDisappear(this, &field_0x75c[15], 3, 0, 0xff); - field_0x9fc[15] = 7; - } + if (mStates[15] == 3) { + field_0x8dc[15].set(0.0f, 10.0f, 10.0f); + mStates[15] = 4; + setPartLandEffect(15, 0); + } else if (mType == 0) { + field_0x8dc[15].set(0.0f, 0.0f, 7.0f); + field_0x99c[15] = ground_angle_part[15]; + mStates[15] = 5; + } else { + fopAcM_createDisappear(this, pos, 3, 0, 0xff); + mStates[15] = 7; } - break; + } + return; - case 5: - cLib_chaseF(&field_0x8dc[15].y, -70.0f, 5.0f); - cLib_chaseF(&field_0x8dc[15].z, 0.0f, 0.3f); - field_0x99c[15].set(ground_angle_part[15].x, ground_angle_part[15].y, ground_angle_part[15].z); - break; - - case 8: - break; + case 5: + cLib_chaseF(&field_0x8dc[15].y, -70.0f, 5.0f); + cLib_chaseF(&field_0x8dc[15].z, 0.0f, 0.3f); + field_0x99c[15].set(ground_angle_part[15].x, ground_angle_part[15].y, + ground_angle_part[15].z); + break; + + case 6: + case 7: + return; } } /* 8061FFE0-8062070C 0014E0 072C+00 2/1 0/0 0/0 .text calcOtherPartMove__8daB_TN_cFi */ -void daB_TN_c::calcOtherPartMove(int param_1) { - // NONMATCHING +void daB_TN_c::calcOtherPartMove(int i_idx) { cXyz sp7c; - s16 sVar1, sVar4; + s16 sVar1; - switch (field_0x9fc[param_1]) { - case 0: - if (param_1 != 14) { - setArmorBreakEffect(param_1); - } - // fallthrough + switch (mStates[i_idx]) { + case 0: + case 1: { + break; + } - case 2: - mDoMtx_stack_c::copy(mModels[param_1]->getBaseTRMtx()); - mDoMtx_stack_c::multVecZero(&field_0x75c[param_1]); - field_0x81c[param_1] = field_0x75c[param_1]; - mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &field_0x99c[param_1]); + case 2: { + if (i_idx != 14) { + setArmorBreakEffect(i_idx); + } + mDoMtx_stack_c::copy(mpModels[i_idx]->getBaseTRMtx()); + mDoMtx_stack_c::multVecZero(&mPositions[i_idx]); + mPositionsCopy[i_idx] = mPositions[i_idx]; + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &field_0x99c[i_idx]); - sp7c = daPy_getPlayerActorClass()->current.pos; + sp7c = daPy_getPlayerActorClass()->current.pos; - if (param_1 == 14) { - sVar1 = shape_angle.y + 0x4000; - } else if (param_1 == 2) { - sVar1 = shape_angle.y + -0x4000; - } else if (param_1 == 3) { - sVar1 = shape_angle.y + 0x2000; + if (i_idx == 14) { + sVar1 = shape_angle.y + 0x4000; + } else if (i_idx == 2) { + sVar1 = shape_angle.y + -0x4000; + } else if (i_idx == 3) { + sVar1 = shape_angle.y + 0x2000; + } else { + sVar1 = cLib_targetAngleY(&mPositions[i_idx], &sp7c); + if (cM_rnd() < 0.5f) { + sVar1 = sVar1 + 0x2000 + cM_rndFX(4096.0f); } else { - s16 sVar2 = cLib_targetAngleY(&field_0x75c[param_1], &sp7c); - if (cM_rnd() < 0.5f) { - f32 fVar1 = cM_rndFX(4096.0f); - sVar1 = sVar2 + 0x2000 + fVar1; - } else { - f32 fVar2 = cM_rndFX(4096.0f); - sVar1 = sVar2 - 0x2000 + fVar2; - } + sVar1 = sVar1 - 0x2000 + cM_rndFX(4096.0f); } + } - field_0x8dc[param_1].set((cM_rndF(5.0f) + 10.0f) * cM_ssin(sVar1), cM_rndF(7.0f) + 35.0f, (cM_rndF(5.0f) + 10.0f) * cM_scos(sVar1)); - field_0x9fc[param_1] = 3; - break; - - case 3: - cLib_chaseF(&field_0x8dc[param_1].y, -70.0f, 5.0f); + field_0x8dc[i_idx].set((cM_rndF(5.0f) + 10.0f) * cM_ssin(sVar1), cM_rndF(7.0f) + 35.0f, + (cM_rndF(5.0f) + 10.0f) * cM_scos(sVar1)); + mStates[i_idx] = 3; + break; + } - if (param_1 == 14) { - if ( field_0x8dc[param_1].y > 0.0f) { - field_0x99c[param_1].y += 0x800; - field_0x99c[param_1].z += 0x800; - } else { - cLib_chaseAngleS(&field_0x99c[param_1].x, ground_angle_part[param_1].x, 0x800); - cLib_chaseAngleS(&field_0x99c[param_1].z, ground_angle_part[param_1].z, 0x800); - } - } else if (field_0x8dc[param_1].y > 0.0f) { - field_0x99c[param_1].y += 0x1000; - field_0x99c[param_1].z += 0x1000; + case 3: + cLib_chaseF(&field_0x8dc[i_idx].y, -70.0f, 5.0f); + + if (i_idx == 14) { + if (field_0x8dc[i_idx].y > 0.0f) { + field_0x99c[i_idx].y += 0x800; + field_0x99c[i_idx].z += 0x800; } else { - cLib_chaseAngleS(&field_0x99c[param_1].x, ground_angle_part[param_1].x, 0x400); - cLib_chaseAngleS(&field_0x99c[param_1].z, ground_angle_part[param_1].z, 0x400); + cLib_chaseAngleS(&field_0x99c[i_idx].x, ground_angle_part[i_idx].x, 0x800); + cLib_chaseAngleS(&field_0x99c[i_idx].z, ground_angle_part[i_idx].z, 0x800); + } + } else if (field_0x8dc[i_idx].y > 0.0f) { + field_0x99c[i_idx].y += 0x1000; + field_0x99c[i_idx].z += 0x1000; + } else { + cLib_chaseAngleS(&field_0x99c[i_idx].x, ground_angle_part[i_idx].x, 0x400); + cLib_chaseAngleS(&field_0x99c[i_idx].z, ground_angle_part[i_idx].z, 0x400); + } + + if ((mType != 1 || i_idx != 5) && mAcchArr[i_idx].ChkGroundHit()) { + if (i_idx == 14) { + Z2GetAudioMgr()->seStart(Z2SE_EN_TN_SAYA_BND_1, &mPositions[i_idx], 0, 0, 1.0f, + 1.0f, -1.0f, -1.0f, 0); + } else { + Z2GetAudioMgr()->seStart(Z2SE_EN_TN_ARMOR_BND, &mPositions[i_idx], 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); } - if ((field_0xaa5 != 1 || param_1 != 5) && field_0x10d0[param_1].ChkGroundHit()) { - if (param_1 == 14) { - Z2GetAudioMgr()->seStart(Z2SE_EN_TN_SAYA_BND_1, &field_0x75c[0], 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); - } else { - Z2GetAudioMgr()->seStart(Z2SE_EN_TN_ARMOR_BND, &field_0x75c[param_1], 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + sVar1 = cM_rndFX(32768.0f); + field_0x8dc[i_idx].set((cM_rndF(2.0f) + 5.0f) * cM_ssin(sVar1), cM_rndF(5.0f) + 18.0f, + (cM_rndF(2.0f) + 5.0f) * cM_scos(sVar1)); + mStates[i_idx] = 4; + setPartLandEffect(i_idx, 0); + } + break; + + case 4: + cLib_chaseF(&field_0x8dc[i_idx].y, -70.0f, 5.0f); + cLib_chaseAngleS(&field_0x99c[i_idx].x, ground_angle_part[i_idx].x, 0x800); + field_0x99c[i_idx].y += 0x400; + cLib_chaseAngleS(&field_0x99c[i_idx].z, ground_angle_part[i_idx].z, 0x800); + + if (mAcchArr[i_idx].ChkGroundHit()) { + if (mType == 0) { + if (i_idx == 14) { + Z2GetAudioMgr()->seStart(Z2SE_EN_TN_SAYA_BND_2, &mPositions[i_idx], 0, 0, 1.0f, + 1.0f, -1.0f, -1.0f, 0); } - s16 sVar3 = cM_rndFX(32768.0f); - field_0x8dc[param_1].set((cM_rndF(2.0f) + 5.0f) * cM_ssin(sVar3), cM_rndF(5.0f) + 18.0f, (cM_rndF(2.0f) + 5.0f) * cM_scos(sVar3)); - field_0x9fc[param_1] = 4; - setPartLandEffect(param_1, 0); - } - break; - - case 4: - cLib_chaseF(&field_0x8dc[param_1].y, -70.0f, 5.0f); - cLib_chaseAngleS(&field_0x99c[param_1].x, ground_angle_part[param_1].x, 0x800); - field_0x99c[param_1].y += 0x400; - cLib_chaseAngleS(&field_0x99c[param_1].z, ground_angle_part[param_1].z, 0x800); - - if (field_0x10d0[param_1].ChkGroundHit()) { - if (field_0xaa5 == 0) { - if (param_1 == 14) { - Z2GetAudioMgr()->seStart(Z2SE_EN_TN_SAYA_BND_2, &field_0x75c[0], 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); - } - - field_0x9fc[param_1] = 5; - field_0x99c[param_1].x = ground_angle_part[param_1].x; - field_0x99c[param_1].z = ground_angle_part[param_1].z; - field_0x9fc[param_1 + 0x20] = 0x400; - setPartLandEffect(param_1, 1); - } else { - fopAcM_createDisappear(this, &field_0x75c[param_1], 3, 0, 0xff); - field_0x9fc[param_1] = 7; - if (field_0xaa5 == 1 && param_1 == 4) { - field_0x9fc[5] = 7; - } + mStates[i_idx] = 5; + field_0x99c[i_idx].x = ground_angle_part[i_idx].x; + field_0x99c[i_idx].z = ground_angle_part[i_idx].z; + field_0xa3c[i_idx] = 0x400; + setPartLandEffect(i_idx, 1); + } else { + fopAcM_createDisappear(this, &mPositions[i_idx], 3, 0, 0xff); + mStates[i_idx] = 7; + if (mType == 1 && i_idx == 4) { + mStates[5] = 7; } } - break; - - case 5: - cLib_chaseF(&field_0x8dc[param_1].y, -70.0f, 5.0f); - cLib_chaseF(&field_0x8dc[param_1].x, 0.0f, 2.0f); - cLib_chaseF(&field_0x8dc[param_1].z, 0.0f, 2.0f); - cLib_chaseAngleS(&field_0xa3c[param_1], 0, 0x40); - field_0x99c[param_1].y += field_0xa3c[param_1]; - break; - - case 6: - sVar4 = shape_angle.y + cM_rndFX(16384.0f); - field_0x8dc[param_1].set((cM_rndF(5.0f) + 50.0f) * cM_ssin(sVar4), 0.0f, (cM_rndF(5.0f) + 50.0f) * cM_scos(sVar4)); - field_0x9fc[param_1 + 0x20] = 0x800; - field_0x9fc[param_1] = 5; - break; + } + break; - case 7: - break; + case 5: + cLib_chaseF(&field_0x8dc[i_idx].y, -70.0f, 5.0f); + cLib_chaseF(&field_0x8dc[i_idx].x, 0.0f, 2.0f); + cLib_chaseF(&field_0x8dc[i_idx].z, 0.0f, 2.0f); + cLib_chaseAngleS(&field_0xa3c[i_idx], 0, 0x40); + field_0x99c[i_idx].y += field_0xa3c[i_idx]; + break; + + case 6: + sVar1 = shape_angle.y + cM_rndFX(16384.0f); + field_0x8dc[i_idx].set((cM_rndF(5.0f) + 50.0f) * cM_ssin(sVar1), 0.0f, + (cM_rndF(5.0f) + 50.0f) * cM_scos(sVar1)); + field_0xa3c[i_idx] = 0x800; + mStates[i_idx] = 5; + break; + + case 7: { + break; + } } } /* 8062070C-806208C8 001C0C 01BC+00 1/1 0/0 0/0 .text calcPartMove__8daB_TN_cFv */ void daB_TN_c::calcPartMove() { - // NONMATCHING for (int i = 0; i < 16; i++) { - u16 uVar1 = field_0xa1c[i]; - if (uVar1 != 0) { - uVar1 = uVar1 - 1; + if (field_0xa1c[i] != 0) { + field_0xa1c[i]--; } - field_0x81c[i] = field_0x75c[i]; + mPositionsCopy[i] = mPositions[i]; if (i == 12) { calcShieldMove(); @@ -895,42 +783,42 @@ void daB_TN_c::calcPartMove() { calcOtherPartMove(i); } - field_0x75c[i] += *field_0x3edc[i].GetCCMoveP(); + mPositions[i] += *mSttsArr[i].GetCCMoveP(); - if (field_0x9fc[i] == 3 || field_0x9fc[i] == 4 || field_0x9fc[i] == 5) { - field_0x8dc[i] += field_0x81c[i]; - field_0x10d0[i].CrrPos(dComIfG_Bgsp()); + if (mStates[i] == 3 || mStates[i] == 4 || mStates[i] == 5) { + mPositions[i] += field_0x8dc[i]; + mAcchArr[i].CrrPos(dComIfG_Bgsp()); - if (field_0xaa1 != 0 && field_0x429c[i].ChkCoHit()) { - cCcD_Obj* mCoHitObj = field_0x429c[i].GetCoHitObj(); + if (mChkCoHitOK && mSphArr[i].ChkCoHit()) { + cCcD_Obj* mCoHitObj = mSphArr[i].GetCoHitObj(); daB_TN_c* i_this = (daB_TN_c*)dCc_GetAc(mCoHitObj->GetAc()); - if ((i_this == this && mCoHitObj->GetAtAtp()) && field_0xa1c[i] == 0) { - field_0x9fc[i] = 6; - field_0xa1c[i] = 0x1e; + if (i_this == this && mCoHitObj->GetAtAtp() && field_0xa1c[i] == 0) { + mStates[i] = 6; + field_0xa1c[i] = 30; } - field_0x429c[i].ClrCoHit(); - } + mSphArr[i].ClrCoHit(); + } } } } /* 806208C8-8062096C 001DC8 00A4+00 18/18 0/0 0/0 .text setBck__8daB_TN_cFiUcff */ -void daB_TN_c::setBck(int param_1, u8 param_2, f32 param_3, f32 param_4) { - mpModelMorf2->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_tn", param_1), - param_2, param_3, param_4, 0.0f, -1.0f); +void daB_TN_c::setBck(int i_index, u8 i_attr, f32 i_morf, f32 i_rate) { + mpModelMorf2->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_tn", i_index), i_attr, i_morf, + i_rate, 0.0f, -1.0f); } /* 8062096C-806209C8 001E6C 005C+00 3/3 0/0 0/0 .text checkBck__8daB_TN_cFi */ -int daB_TN_c::checkBck(int param_1) { - return mpModelMorf2->getAnm() == dComIfG_getObjectRes("B_tn", param_1); +int daB_TN_c::checkBck(int i_index) { + return mpModelMorf2->getAnm() == dComIfG_getObjectRes("B_tn", i_index); } /* 806209C8-806209E0 001EC8 0018+00 22/22 0/0 0/0 .text setActionMode__8daB_TN_cFii */ -void daB_TN_c::setActionMode(int param_1, int param_2) { +void daB_TN_c::setActionMode(int i_mode1, int i_mode2) { offHeadLockFlg(); - mActionMode1 = param_1; - mActionMode2 = param_2; + mActionMode1 = i_mode1; + mActionMode2 = i_mode2; } /* 806209E0-80620AE4 001EE0 0104+00 11/11 0/0 0/0 .text setSwordAtBit__8daB_TN_cFi */ @@ -940,7 +828,7 @@ void daB_TN_c::setSwordAtBit(int param_1) { mSwordSphs[i].OffAtSetBit(); mSwordSphs[i].ClrAtHit(); } - + mCps.OffAtSetBit(); mCps.ClrAtHit(); } else { @@ -966,118 +854,115 @@ void daB_TN_c::setSwordAtBit(int param_1) { void daB_TN_c::setSwordAtBreak(int param_1) { if (param_1 == 0) { for (int i = 0; i < 4; i++) { - mSwordSphs[i].SetAtSpl((dCcG_At_Spl)1); + mSwordSphs[i].SetAtSpl((dCcG_At_Spl)0x1); } - mCps.SetAtSpl((dCcG_At_Spl)1); + mCps.SetAtSpl((dCcG_At_Spl)0x1); } else { for (int i = 0; i < 4; i++) { - mSwordSphs[i].SetAtSpl((dCcG_At_Spl)10); + mSwordSphs[i].SetAtSpl((dCcG_At_Spl)0xA); } - mCps.SetAtSpl((dCcG_At_Spl)10); - field_0xa9a = 0; + mCps.SetAtSpl((dCcG_At_Spl)0xA); + field_0xa9a = false; } } /* 80620B4C-80620E90 00204C 0344+00 1/1 0/0 0/0 .text setBodyShield__8daB_TN_cFv */ void daB_TN_c::setBodyShield() { - // NONMATCHING - int bVar3 = true; - int bVar2; - daPy_py_c* player = daPy_getPlayerActorClass(); - switch (mActionMode1) { - case 0: - case 1: + daPy_py_c* player; + bool check = true; + + player = (daPy_py_c*)daPy_getPlayerActorClass(); + if (mActionMode1 <= 1) { + for (int i = 0; i < 3; i++) { + mSphA[i].OnTgShield(); + } + + mSphC.OnTgShield(); + mSphC.OnTgSetBit(); + + } else if (mActionMode1 < 8) { + if (!(daPy_py_c::checkNowWolf() || player->getCutType() == daPy_py_c::CUT_TYPE_TWIRL) && + player->getCutCount() >= 4) + { + mCutFlag = true; + } else { + mCutFlag = false; + } + + if (!field_0xa91 || abs((s16)(fopAcM_searchPlayerAngleY(this) - shape_angle.y)) > 0x3000) { + check = false; + } + + int iVar3 = false; + if (player->getCutType() == daPy_py_c::CUT_TYPE_HEAD_JUMP || + player->getCutType() == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B || + player->getCutType() == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A || mTimer12 != 0) + { + check = false; + iVar3 = true; + } + + if (mNextBreakPart >= 11) { + check = false; + mTimer10 = 0; + } + + if (!(check || daPy_py_c::checkNowWolf() || mTimer10 != 0)) { for (int i = 0; i < 3; i++) { - field_0x2ec8[i].OnTgShield(); + mSphA[i].OffTgShield(); } - - field_0x3618.OnTgShield(); - field_0x3618.OnTgSetBit(); - return; - - case 2: - case 3: - case 4: - case 5: - case 6: - if ((daPy_py_c::checkNowWolf() || player->getCutType() == daPy_py_c::CUT_TYPE_TWIRL) || player->getCutCount() < 4) { - field_0xa9f = 0; - } else { - field_0xa9f = 1; - } - - if (field_0xa91 != 0) { - if (abs(fopAcM_searchPlayerAngleY(this) - shape_angle.y) < 0x3001) { - break; - } - } - - bVar3 = false; - // break; - bVar2 = false; - if ((player->getCutType() == daPy_py_c::CUT_TYPE_HEAD_JUMP || player->getCutType() == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B) || - (player->getCutType() == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A || field_0xaa9 != 0)) { - bVar3 = false; - bVar2 = true; - } - - if (field_0xa78 > 10) { - bVar3 = false; - field_0xaa7 = 0; - } - - if ((bVar3 || daPy_py_c::checkNowWolf()) || field_0xaa7 != 0) { - for (int i = 0; i < 3; i++) { - field_0x2ec8[i].OnTgShield(); - } - } else { - for (int i = 0; i < 3; i++) { - field_0x2ec8[i].OffTgShield(); - } - } - - if ((mActionMode1 == 7 || field_0xa78 > 10) && field_0xaa7 == 0) { - bVar2 = true; - } - - if (bVar2) { - field_0x3618.OffTgShield(); - field_0x3618.OffTgSetBit(); - } else { - field_0x3618.OnTgShield(); - field_0x3618.OnTgSetBit(); - } - break; - - default: - field_0xa9f = 0; - - if (((daPy_py_c::checkNowWolf() || player->getCutType() == daPy_py_c::CUT_TYPE_TWIRL) || player->getCutType() == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B) || - (player->getCutType() == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A || player->getCutCount() < 4)) { - if ((player->getCutType() == daPy_py_c::CUT_TYPE_TURN_RIGHT || player->getCutType() == daPy_py_c::CUT_TYPE_TURN_LEFT) && field_0xaaa == 0) { - field_0xa9f = 1; - } - } else { - field_0xa9f = 1; - } - - bVar3 = false; - if (player->getCutType() != daPy_py_c::CUT_TYPE_HEAD_JUMP && ((field_0xa91 == 1 && field_0xa9f != 0) || (field_0xaa7 != 0 || daPy_py_c::checkNowWolf()))) { - bVar3 = true; - } - - if (bVar3) { - for (int i = 0; i < 3; i++) { - field_0x2ec8[i].OnTgShield(); - } - return; - } - + } else { for (int i = 0; i < 3; i++) { - field_0x2ec8[i].OffTgShield(); + mSphA[i].OnTgShield(); + } + } + + if ((mActionMode1 == ACT_DAMAGEH || mNextBreakPart >= 11) && mTimer10 == 0) { + iVar3 = true; + } + + if (iVar3) { + mSphC.OffTgShield(); + mSphC.OffTgSetBit(); + } else { + mSphC.OnTgShield(); + mSphC.OnTgSetBit(); + } + + } else { + mCutFlag = false; + + if (!(daPy_py_c::checkNowWolf() || player->getCutType() == daPy_py_c::CUT_TYPE_TWIRL || + player->getCutType() == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B || + player->getCutType() == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A || + player->getCutCount() < 4)) + { + mCutFlag = true; + } else if ((player->getCutType() == daPy_py_c::CUT_TYPE_TURN_RIGHT || + player->getCutType() == daPy_py_c::CUT_TYPE_TURN_LEFT) && + mTimer13 == 0) + { + mCutFlag = true; + } + + int chck = false; + if (player->getCutType() != daPy_py_c::CUT_TYPE_HEAD_JUMP && + ((field_0xa91 == true && mCutFlag) || mTimer10 != 0 || daPy_py_c::checkNowWolf())) + { + chck = true; + } + + if (chck) { + for (int i = 0; i < 3; i++) { + mSphA[i].OnTgShield(); } return; + } + + for (int i = 0; i < 3; i++) { + mSphA[i].OffTgShield(); + } } } @@ -1087,21 +972,22 @@ static daB_TN_c* m_attack_tn; /* 8062F300-8062F304 000328 0004+00 1/2 0/0 0/0 .bss m_attack_timer */ static int m_attack_timer; -/* 80620E90-80620FA0 002390 0110+00 4/4 0/0 0/0 .text checkNormalAttackAble__8daB_TN_cFv */ +/* 80620E90-80620FA0 002390 0110+00 4/4 0/0 0/0 .text checkNormalAttackAble__8daB_TN_cFv + */ bool daB_TN_c::checkNormalAttackAble() { - if (field_0xaa5 == 1) { + if (mType == 1) { if (daPy_getPlayerActorClass()->getCutCount() != 0) { - field_0xa70 = cM_rndF(60.0f) + 30.0f; + mTimer3 = cM_rndF(60.0f) + 30.0f; return 0; } if (m_attack_tn && m_attack_tn != this) { - field_0xa70 = cM_rndF(60.0f) + 30.0f; + mTimer3 = cM_rndF(60.0f) + 30.0f; return 0; } if (m_attack_timer != 0) { - field_0xa70 = cM_rndF(60.0f) + 30.0f; + mTimer3 = cM_rndF(60.0f) + 30.0f; return 0; } @@ -1113,7 +999,6 @@ bool daB_TN_c::checkNormalAttackAble() { /* 80620FA0-80621070 0024A0 00D0+00 4/3 0/0 0/0 .text getCutType__8daB_TN_cFv */ u32 daB_TN_c::getCutType() { - // NONMATCHING u32 rv = 0; if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_NORMAL_SWORD)) { @@ -1127,48 +1012,46 @@ u32 daB_TN_c::getCutType() { } switch (daPy_getPlayerActorClass()->getCutType()) { - default: - if (field_0xaaa == 0) { - return 32; - } - - break; + case 0x0: + if (mTimer13 == 0) { + return 32; + } - case daPy_py_c::CUT_TYPE_NM_VERTICAL: - case daPy_py_c::CUT_TYPE_NM_RIGHT: - case daPy_py_c::CUT_TYPE_FINISH_LEFT: - case daPy_py_c::CUT_TYPE_FINISH_VERTICAL: - case daPy_py_c::CUT_TYPE_DASH_UNK_26: - return rv | 32; - - case daPy_py_c::CUT_TYPE_NM_STAB: - case daPy_py_c::CUT_TYPE_FINISH_STAB: - return rv | 16; + return rv | 32; - case daPy_py_c::CUT_TYPE_NM_LEFT: - case daPy_py_c::CUT_TYPE_DASH_UNK_25: - return rv | 34; - - case daPy_py_c::CUT_TYPE_TURN_RIGHT: - case daPy_py_c::CUT_TYPE_TURN_LEFT: - return rv | 18; - - case daPy_py_c::CUT_TYPE_JUMP: - case daPy_py_c::CUT_TYPE_LARGE_JUMP: - return rv | 2; + case daPy_py_c::CUT_TYPE_NM_VERTICAL: + case daPy_py_c::CUT_TYPE_NM_RIGHT: + case daPy_py_c::CUT_TYPE_FINISH_LEFT: + case daPy_py_c::CUT_TYPE_FINISH_VERTICAL: + case daPy_py_c::CUT_TYPE_DASH_UNK_26: + return rv | 32; - case daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT: - case daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT: - return rv | 33; + case daPy_py_c::CUT_TYPE_NM_STAB: + case daPy_py_c::CUT_TYPE_FINISH_STAB: + return rv | 16; - case daPy_py_c::CUT_TYPE_TWIRL: - return rv | 1; + case daPy_py_c::CUT_TYPE_NM_LEFT: + case daPy_py_c::CUT_TYPE_DASH_UNK_25: + return rv | 34; - case daPy_py_c::CUT_TYPE_COMBO_STAB: - return rv | 3; + case daPy_py_c::CUT_TYPE_TURN_RIGHT: + case daPy_py_c::CUT_TYPE_TURN_LEFT: + return rv | 18; + + case daPy_py_c::CUT_TYPE_JUMP: + case daPy_py_c::CUT_TYPE_LARGE_JUMP: + return rv | 2; + + case daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT: + case daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT: + return rv | 33; + + case daPy_py_c::CUT_TYPE_TWIRL: + return rv | 1; + + default: + return rv | 3; } - - return rv | 32; } /* 80621070-8062138C 002570 031C+00 1/1 0/0 0/0 .text setDamage__8daB_TN_cFP8dCcD_Sphi */ @@ -1177,82 +1060,78 @@ void daB_TN_c::setDamage(dCcD_Sph* i_sph, int param_2) { health = 100; cc_at_check(this, &mAtInfo); - if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_UNK) != 0) { - field_0xa68 = 20; + if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_UNK)) { + mInvincibilityTimer = 20; + } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_BOMB)) { + mInvincibilityTimer = 20; } else { - if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_BOMB) != 0) { - field_0xa68 = 20; - } else { - field_0xa68 = 10; - } + mInvincibilityTimer = 10; } if (mAtInfo.mAttackPower <= 1) { - field_0xa68 = 10; + mInvincibilityTimer = 10; } dComIfGp_setHitMark(1, this, i_sph->GetTgHitPosP(), NULL, NULL, 0); - if (field_0xa7c != 0) { - field_0xa92 ^= 1; + if (mTimer4 != 0) { + mNextActionMode2 ^= 1; } else { u8 uVar4 = 0; - if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_NORMAL_SWORD) != 0) { + if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_NORMAL_SWORD)) { uVar4 = getCutType() & -1; } if ((uVar4 & 3) != 0) { if (abs((s16)(fopAcM_searchPlayerAngleY(this) - shape_angle.y)) > 0x4000) { if ((uVar4 & 1) != 0) { - uVar5 = 1; + uVar5 = ACTION2_1_e; } else { - uVar5 = 0; + uVar5 = ACTION2_0_e; } } else if ((uVar4 & 1) != 0) { - uVar5 = 0; + uVar5 = ACTION2_0_e; } else { - uVar5 = 1; + uVar5 = ACTION2_1_e; } + } else if (cM_rnd() < 0.5f) { + uVar5 = ACTION2_0_e; } else { - if (cM_rnd() < 0.5f) { - uVar5 = 0; - } else { - uVar5 = 1; - } + uVar5 = ACTION2_1_e; } - field_0xa92 = uVar5; + mNextActionMode2 = uVar5; } - field_0xa7c = 30; + mTimer4 = 30; int iVar1 = mActionMode1; if (iVar1 < 8) { - if (iVar1 != 7 && field_0xa80 == 0) { - field_0xa80 = 70; + if (iVar1 != ACT_DAMAGEH && mTimer5 == 0) { + mTimer5 = 70; } - field_0xa78 += param_2; - setActionMode(7, field_0xa92); + mNextBreakPart += param_2; + setActionMode(ACT_DAMAGEH, mNextActionMode2); } else { - if (iVar1 != 13 && field_0xa80 == 0) { - field_0xa80 = 90; + if (iVar1 != ACT_DAMAGEL && mTimer5 == 0) { + mTimer5 = 90; if (field_0x6fc > field_0x700 - 50.0f) { field_0x6fc -= 20; } } - if ((field_0x6fc > field_0x700 - 50.0f) && field_0xa9f != 0) { + if (field_0x6fc > field_0x700 - 50.0f && mCutFlag) { field_0x6fc += 50; } else { field_0x6fc += 100 - health; } if (field_0x6fc >= field_0x700) { - setActionMode(14, 0); + setActionMode(ACT_ENDING, ACTION2_0_e); dComIfGp_setHitMark(3, this, i_sph->GetTgHitPosP(), NULL, NULL, 0); } else { - setActionMode(13, field_0xa92); + setActionMode(ACT_DAMAGEL, mNextActionMode2); } } } @@ -1265,12 +1144,11 @@ void daB_TN_c::setShieldEffect(dCcD_Sph* i_sph) { /* 806213FC-806223A0 0028FC 0FA4+00 1/1 0/0 0/0 .text damage_check__8daB_TN_cFv */ void daB_TN_c::damage_check() { - // NONMATCHING - mGStts.Move(); + mStts1.Move(); for (int i = 0; i < 4; i++) { if (mSwordSphs[i].ChkAtHit()) { - field_0xa9a = 1; + field_0xa9a = true; if (mSwordSphs[i].ChkAtShieldHit() && mSwordSphs[i].GetAtSpl() == 10) { setSwordAtBit(0); m_attack_tn = this; @@ -1280,265 +1158,294 @@ void daB_TN_c::damage_check() { } if (mCps.ChkAtHit()) { - field_0xa9a = 1; + field_0xa9a = true; if (mCps.ChkAtShieldHit() && mCps.GetAtSpl() == 10) { setSwordAtBit(0); m_attack_tn = this; } } - if (field_0x3618.ChkAtHit() && !field_0x3618.ChkAtShieldHit()) { - field_0xa9a = 1; + if (mSphC.ChkAtHit() && !mSphC.ChkAtShieldHit()) { + field_0xa9a = true; mSound.startCreatureSound(Z2SE_EN_TN_ATK_NO_DMG, 0, -1); - field_0x3618.ClrAtHit(); + mSphC.ClrAtHit(); m_attack_tn = this; } - if (field_0xa68 != 0) { + if (mInvincibilityTimer != 0) { return; } - if (mActionMode1 == 8) { + if (mActionMode1 == ACT_CHANGEDEMO) { return; } - if (mActionMode1 == 14) { + if (mActionMode1 == ACT_ENDING) { return; } dCcD_Sph dStack_160; - + if (mActionMode1 <= 1) { mAtInfo.mpCollider = NULL; - if (field_0x3618.ChkTgHit()) { - mAtInfo.mpCollider = field_0x3618.GetTgHitObj(); - dStack_160 = field_0x3618; + if (mSphC.ChkTgHit()) { + mAtInfo.mpCollider = mSphC.GetTgHitObj(); + dStack_160 = mSphC; } for (int i = 0; i < 3; i++) { - if (field_0x2ec8[i].ChkTgHit()) { - mAtInfo.mpCollider = field_0x2ec8[i].GetTgHitObj(); - dStack_160 = field_0x2ec8[i]; + if (mSphA[i].ChkTgHit()) { + mAtInfo.mpCollider = mSphA[i].GetTgHitObj(); + dStack_160 = mSphA[i]; break; } } - - for (int i = 0; i < 3; i++) { - if (field_0x3270[i].ChkTgHit()) { - mAtInfo.mpCollider = field_0x3270[i].GetTgHitObj(); - dStack_160 = field_0x3270[i]; + if (mSphB[i].ChkTgHit()) { + mAtInfo.mpCollider = mSphB[i].GetTgHitObj(); + dStack_160 = mSphB[i]; break; } } - if (mAtInfo.mpCollider) { + if (mAtInfo.mpCollider != NULL) { setShieldEffect(&dStack_160); - setActionMode(1, 2); + setActionMode(ACT_OPENING, ACTION2_2_e); - if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_BOOMERANG) || mAtInfo.mpCollider->ChkAtType(AT_TYPE_40) || mAtInfo.mpCollider->ChkAtType(AT_TYPE_HOOKSHOT)) { - field_0xa60 = 15; + if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_BOOMERANG) || + mAtInfo.mpCollider->ChkAtType(AT_TYPE_40) || + mAtInfo.mpCollider->ChkAtType(AT_TYPE_HOOKSHOT)) + { + mTimer9 = 15; } - - return; } - int mCutType = daPy_getPlayerActorClass()->getCutType(); - if (mActionMode1 < 8 && field_0x3618.ChkTgHit()) { - if (field_0x3618.GetTgHitObj()->ChkAtType(18) && mCutType != 5 && mCutType != 31 && mCutType != 26) { - def_se_set(&mSound, field_0x3618.GetTgHitObj(), 42, this); - field_0xaa8 = 0; - if (field_0x3618.GetTgHitObj()->ChkAtType(AT_TYPE_SHIELD_ATTACK)) { - if (mActionMode1 != 6) { - return; - } + return; + } - if (mActionMode1 == 6 && field_0xaa8 != 0) { - return; - } - - field_0xaa8 = 1; - } - - setActionMode(6, 0); + int cut_type = daPy_getPlayerActorClass()->getCutType(); + if (mActionMode1 < 8 && mSphC.ChkTgHit() && mSphC.GetTgHitObj()->ChkAtType(18) && + cut_type != daPy_py_c::CUT_TYPE_HEAD_JUMP && + cut_type != daPy_py_c::CUT_TYPE_MORTAL_DRAW_B && + cut_type != daPy_py_c::CUT_TYPE_MORTAL_DRAW_A) + { + def_se_set(&mSound, mSphC.GetTgHitObj(), 42, this); + field_0xaa8 = false; + if (mSphC.GetTgHitObj()->ChkAtType(AT_TYPE_SHIELD_ATTACK)) { + if (mActionMode1 != ACT_GUARDH) { return; } - } - mAtInfo.mpCollider = NULL; - for (int i = 0; i < 3; i++) { - if (field_0x2ec8[i].ChkTgHit()) { - mAtInfo.mpCollider = field_0x2ec8[i].GetTgHitObj(); - dStack_160 = field_0x2ec8[i]; - break; + if (mActionMode1 == ACT_GUARDH && field_0xaa8) { + return; } + + field_0xaa8 = true; } - if (mActionMode1 < 8) { - if ((mCutType == 37 || mCutType == 38) || mAtInfo.mpCollider->ChkAtType(AT_TYPE_UNK)) { + setActionMode(ACT_GUARDH, ACTION2_0_e); + return; + } + + mAtInfo.mpCollider = NULL; + for (int i = 0; i < 3; i++) { + if (mSphA[i].ChkTgHit()) { + mAtInfo.mpCollider = mSphA[i].GetTgHitObj(); + dStack_160 = mSphA[i]; + break; + } + } + + if (mAtInfo.mpCollider != NULL) { + if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) { + return; + } else if (mActionMode1 < 8) { + if (cut_type == daPy_py_c::CUT_TYPE_DASH_UNK_25 || + cut_type == daPy_py_c::CUT_TYPE_DASH_UNK_26 || + mAtInfo.mpCollider->ChkAtType(AT_TYPE_UNK)) + { setShieldEffect(&dStack_160); - field_0xa60 = 15; + mTimer9 = 15; return; } if (dStack_160.ChkTgShield()) { if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_SHIELD_ATTACK)) { - if (mActionMode1 == 6 && field_0xaa8 != 0) { + if (mActionMode1 == ACT_GUARDH && field_0xaa8) { return; } - field_0xaa8 = 1; + field_0xaa8 = true; def_se_set(&mSound, dStack_160.GetTgHitObj(), 42, this); } else { - field_0xaa8 = 0; + field_0xaa8 = false; setShieldEffect(&dStack_160); } - setActionMode(6, 0); + setActionMode(ACT_GUARDH, ACTION2_0_e); + return; + + } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_SHIELD_ATTACK)) { + setShieldEffect(&dStack_160); + mTimer9 = 0x14; return; } - if (mCutType == 5 || mCutType == 31 || mCutType == 26) { - field_0xaa9 = 60; + if (cut_type == daPy_py_c::CUT_TYPE_HEAD_JUMP || + cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B || + cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A) + { + mTimer12 = 60; } } else { if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_SHIELD_ATTACK)) { - field_0xaa8 = 1; + field_0xaa8 = true; def_se_set(&mSound, dStack_160.GetTgHitObj(), 42, this); - setActionMode(12, 0); + setActionMode(ACT_GUARDL, ACTION2_0_e); return; } - if (field_0xa91 != 0) { - if (field_0xa9f != 0 || (getCutType() & 4) != 0) { + if (field_0xa91) { + if (mCutFlag || (getCutType() & 4) != 0) { setShieldEffect(&dStack_160); - if (field_0xa9f != 0) { - setActionMode(12, 11); + if (mCutFlag) { + setActionMode(ACT_GUARDL, ACTION2_11_e); } else { - setActionMode(15, 0); + setActionMode(ACT_YOROKE, ACTION2_0_e); } return; } - if (field_0xaa7 == 0) { - if (abs((s16)(fopAcM_searchPlayerAngleY(this) - shape_angle.y)) >= 0x3000 || mCutType == 37 && mCutType == 38) { - field_0xaa8 = 0; - setShieldEffect(&dStack_160); - setActionMode(12, 0); - return; - } - - setDamage(&dStack_160, 1); + if (mTimer10 != 0 || + abs((s16)(fopAcM_searchPlayerAngleY(this) - shape_angle.y)) < 0x3000 || + cut_type == daPy_py_c::CUT_TYPE_DASH_UNK_25 || + cut_type == daPy_py_c::CUT_TYPE_DASH_UNK_26) + { + field_0xaa8 = false; + setShieldEffect(&dStack_160); + setActionMode(ACT_GUARDL, ACTION2_0_e); return; } } } - - mAtInfo.mpCollider = NULL; - for (int i = 0; i < 3; i++) { - if (field_0x3270[i].ChkTgHit()) { - mAtInfo.mpCollider = field_0x3270[i].GetTgHitObj(); - dStack_160 = field_0x3270[i]; - break; - } - } + setDamage(&dStack_160, 1); + return; + } - bool bVar1 = abs((s16)(fopAcM_searchPlayerAngleY(this) - shape_angle.y)) > 0x3000; - if (mActionMode1 < 8) { - if (!dStack_160.ChkTgShield() || field_0xa78 >= 11) { - bVar1 = true; - } - } else if (field_0xa91 == 0) { + mAtInfo.mpCollider = NULL; + for (int i = 0; i < 3; i++) { + if (mSphB[i].ChkTgHit()) { + mAtInfo.mpCollider = mSphB[i].GetTgHitObj(); + dStack_160 = mSphB[i]; + break; + } + } + + int bVar1 = false; + if (abs((s16)(fopAcM_searchPlayerAngleY(this) - shape_angle.y)) > 0x3000) { + bVar1 = true; + }; + + if (mActionMode1 < 8) { + if (!dStack_160.ChkTgShield() || mNextBreakPart >= 11) { bVar1 = true; } + } else if (!field_0xa91) { + bVar1 = true; + } - if (mActionMode1 < 8 && field_0x3618.ChkTgHit()) { - mAtInfo.mpCollider = field_0x3618.GetTgHitObj(); - dStack_160 = field_0x3618; - bVar1 = false; - } + if (mActionMode1 < 8 && mSphC.ChkTgHit()) { + mAtInfo.mpCollider = mSphC.GetTgHitObj(); + dStack_160 = mSphC; + bVar1 = false; + } - if (mAtInfo.mpCollider) { - field_0xaa8 = 0; - if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_BOOMERANG) || mAtInfo.mpCollider->ChkAtType(AT_TYPE_40)) { - if (mActionMode1 < 8) { - field_0xa60 = 15; + if (mAtInfo.mpCollider) { + field_0xaa8 = false; + if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_BOOMERANG) || + mAtInfo.mpCollider->ChkAtType(AT_TYPE_40)) + { + if (mActionMode1 < 8) { + mTimer9 = 15; + } else { + setActionMode(ACT_GUARDL, ACTION2_10_e); + } + } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_BOMB)) { + if (mActionMode1 < 8) { + if (mNextBreakPart >= 11 || + abs((s16)(cLib_targetAngleY( + ¤t.pos, + &dCc_GetAc(mAtInfo.mpCollider->GetAc())->current.pos) - + shape_angle.y)) > 0x4000) + { + setDamage(&dStack_160, 2); } else { - setActionMode(12, 10); + setActionMode(ACT_GUARDH, ACTION2_0_e); } - } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_BOMB)) { - if (mActionMode1 < 8 && field_0xa78 < 11) { - if (abs(cLib_targetAngleY(¤t.pos, &dCc_GetAc(mAtInfo.mpCollider->GetAc())->current.pos) - shape_angle.y) > 0x4000) { - setDamage(&dStack_160, 2); - } else { - setActionMode(6, 0); - } - } else if (abs(cLib_targetAngleY(¤t.pos, &dCc_GetAc(mAtInfo.mpCollider->GetAc())->current.pos) - shape_angle.y) > 0x4000) { - setDamage(&dStack_160, 2); + } else if (abs((s16)(cLib_targetAngleY( + ¤t.pos, + &dCc_GetAc(mAtInfo.mpCollider->GetAc())->current.pos) - + shape_angle.y)) > 0x4000) + { + setDamage(&dStack_160, 2); + } + } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_SPINNER)) { + setShieldEffect(&dStack_160); + if (mActionMode1 < 8) { + setActionMode(ACT_GUARDH, ACTION2_0_e); + } else { + setActionMode(ACT_GUARDL, ACTION2_10_e); + } + } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_HOOKSHOT)) { + if (mActionMode1 < 8) { + mTimer9 = 15; + setShieldEffect(&dStack_160); + } else if (!bVar1 || mTimer10 != 0) { + setShieldEffect(&dStack_160); + setActionMode(ACT_GUARDL, ACTION2_0_e); + } else { + health = 100; + cc_at_check(this, &mAtInfo); + mNextActionMode2 = ACTION2_0_e; + if (cM_rnd() < 0.5f) { + mNextActionMode2 = ACTION2_1_e; } - } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_SPINNER)) { + + if (mActionMode1 != ACT_DAMAGEL && mTimer5 == 0) { + mTimer5 = 90; + } + + setActionMode(ACT_DAMAGEL, mNextActionMode2); + } + } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_IRON_BALL)) { + if (!bVar1) { setShieldEffect(&dStack_160); if (mActionMode1 < 8) { - setActionMode(6, 0); + setActionMode(ACT_GUARDH, ACTION2_0_e); } else { - setActionMode(12, 10); - } - } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_HOOKSHOT)) { - if (mActionMode1 < 8) { - field_0xa60 = 15; - setShieldEffect(&dStack_160); - } else if (!bVar1 || field_0xaa7 != 0) { - setShieldEffect(&dStack_160); - setActionMode(12, 0); - } else { - health = 100; - cc_at_check(this, &mAtInfo); - field_0xa92 = 0; - if (cM_rnd() < 0.5f) { - field_0xa92 = 1; - } - - if (mActionMode1 != 13 && field_0xa80 == 0) { - field_0xa80 = 90; - } - - setActionMode(13, field_0xa92); - } - } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_IRON_BALL)) { - if (!bVar1) { - setShieldEffect(&dStack_160); - if (mActionMode1 < 8) { - setActionMode(6, 0); - } else { - setActionMode(12, 10); - } - } else { - setDamage(&dStack_160, 2); - } - } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_ARROW)) { - if (mActionMode1 < 8) { - setShieldEffect(&dStack_160); - } else if (bVar1 && field_0xaa7 == 0) { - setShieldEffect(&dStack_160); - setActionMode(12, 0); - } else { - setDamage(&dStack_160, 1); + setActionMode(ACT_GUARDL, ACTION2_10_e); } + } else { + setDamage(&dStack_160, 2); + } + } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_ARROW)) { + if (mActionMode1 < 8) { + setShieldEffect(&dStack_160); + } else if (bVar1 == 0 || mTimer10 != 0) { + setShieldEffect(&dStack_160); + setActionMode(ACT_GUARDL, ACTION2_0_e); + } else { + setDamage(&dStack_160, 1); } } - - if (mCutType == 20) { - return; - } - } } /* 806227D0-80622B60 003CD0 0390+00 4/4 0/0 0/0 .text checkMoveArea__8daB_TN_cFv */ int daB_TN_c::checkMoveArea() { - if (field_0xaa5 != 0) { + if (mType != 0) { return 0; } @@ -1564,34 +1471,34 @@ bool daB_TN_c::checkMoveAngle() { } /* 80622BE0-80622CE4 0040E0 0104+00 1/1 0/0 0/0 .text setAttackBlurEffect__8daB_TN_cFi */ -void daB_TN_c::setAttackBlurEffect(int param_1) { - // NONMATCHING +void daB_TN_c::setAttackBlurEffect(int i_data) { static u16 blur_effect_id_5997[4] = { - 0x87DA, 0x87DB, 0x87DC, 0x87DD, + 0x87DA, + 0x87DB, + 0x87DC, + 0x87DD, }; - if (param_1 != 0) { + if (i_data != 0) { for (int i = 0; i < 4; i++) { - field_0x561c[i] = dComIfGp_particle_set(field_0x561c[i], blur_effect_id_5997[i], ¤t.pos, &tevStr); + mParticleKeys[i] = dComIfGp_particle_set(mParticleKeys[i], blur_effect_id_5997[i], + ¤t.pos, &tevStr); - JPABaseEmitter* mBaseEmitter = dComIfGp_particle_getEmitter(field_0x561c[i]); + JPABaseEmitter* mBaseEmitter = dComIfGp_particle_getEmitter(mParticleKeys[i]); if (mBaseEmitter) { - mBaseEmitter->setGlobalSRTMatrix(mModels[13]->getBaseTRMtx()); + mBaseEmitter->setGlobalSRTMatrix(mpModels[13]->getBaseTRMtx()); } } } } /* 80622CE4-80622DF4 0041E4 0110+00 1/1 0/0 0/0 .text setArmorBreakEffect__8daB_TN_cFi */ -void daB_TN_c::setArmorBreakEffect(int param_1) { - // NONMATCHING - static u16 blur_effect_id_6035[3] = { - 0x87DE, 0x87DF, 0x87E0 - }; +void daB_TN_c::setArmorBreakEffect(int i_idx) { + static u16 blur_effect_id_6035[3] = {0x87DE, 0x87DF, 0x87E0}; cXyz sp24(l_HIO.mScale, l_HIO.mScale, l_HIO.mScale); cXyz sp30; - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(tn_part_joint[param_1])); + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(tn_part_joint[i_idx])); mDoMtx_stack_c::multVecZero(&sp30); for (int i = 0; i < 3; i++) { @@ -1602,8 +1509,11 @@ void daB_TN_c::setArmorBreakEffect(int param_1) { /* 80622DF4-80622ec8 0042F4 0170+00 1/1 0/0 0/0 .text s_obj_sub__FPvPv */ static void* s_obj_sub(void* i_actor, void* i_data) { if (fopAcM_IsActor(i_actor)) { - if (!fpcM_IsCreating(fopAcM_GetID(i_actor)) && fopAcM_checkCarryNow((fopAc_ac_c*)i_actor) == 0) { - f32 mActorDistance = fopAcM_searchActorDistanceXZ((fopAc_ac_c*)i_actor, (fopAc_ac_c*)i_data); + if (!fpcM_IsCreating(fopAcM_GetID(i_actor)) && + fopAcM_checkCarryNow((fopAc_ac_c*)i_actor) == 0) + { + f32 mActorDistance = + fopAcM_searchActorDistanceXZ((fopAc_ac_c*)i_actor, (fopAc_ac_c*)i_data); if (mActorDistance < 300.0f && fopAcM_GetSpeed((fopAc_ac_c*)i_actor).y) { if (fopAcM_GetName(i_actor) == PROC_Obj_Carry) { return i_actor; @@ -1625,9 +1535,13 @@ static void* s_obj_sub(void* i_actor, void* i_data) { } } - if ((mActorDistance < 700.0f && fopAcM_GetName(i_actor) == PROC_ARROW) && fopAcM_GetSpeedF((fopAc_ac_c*)i_actor)) { + if ((mActorDistance < 700.0f && fopAcM_GetName(i_actor) == PROC_ARROW) && + fopAcM_GetSpeedF((fopAc_ac_c*)i_actor)) + { s16 mAngleY = ((fopAc_ac_c*)i_actor)->current.angle.y; - if (abs((s16)(mAngleY - fopAcM_searchActorAngleY((fopAc_ac_c*)i_actor, (fopAc_ac_c*)i_data))) < 0x2000) { + if (abs((s16)(mAngleY - fopAcM_searchActorAngleY((fopAc_ac_c*)i_actor, + (fopAc_ac_c*)i_data))) < 0x2000) + { return i_actor; } } @@ -1649,13 +1563,13 @@ void daB_TN_c::demo_skip(int param_1) { cameraClass->mCamera.Start(); cameraClass->mCamera.SetTrimSize(0); dComIfGp_event_reset(); - + Z2GetAudioMgr()->bgmStreamStop(0x1e); Z2GetAudioMgr()->subBgmStart(Z2BGM_TN_MBOSS); - setActionMode(2, 0); - field_0xa93 = 1; - field_0xaae = 2; + setActionMode(ACT_WAITH, ACTION2_0_e); + mUpdateNeckAngle = true; + mBlendStatus = 2; mBlend = 1.0f; } else if (param_1 == 1) { mCamCenter.set(0.0f, -239.0f, 1874.0f); @@ -1668,14 +1582,14 @@ void daB_TN_c::demo_skip(int param_1) { cameraClass->mCamera.SetTrimSize(0); dComIfGp_event_reset(); - setActionMode(1, 0); + setActionMode(ACT_OPENING, ACTION2_0_e); } } /* 8062318C-806231C0 00468C 0034+00 2/2 0/0 0/0 .text DemoSkipCallBack__8daB_TN_cFPvi */ -int daB_TN_c::DemoSkipCallBack(void* i_this, int param_2) { +int daB_TN_c::DemoSkipCallBack(void* i_this, int param_1) { if (i_this) { - static_cast(i_this)->demo_skip(param_2); + ((daB_TN_c*)i_this)->demo_skip(param_1); return 1; } @@ -1684,7 +1598,6 @@ int daB_TN_c::DemoSkipCallBack(void* i_this, int param_2) { /* 806231C0-80623920 0046C0 0760+00 2/1 0/0 0/0 .text executeRoomDemo__8daB_TN_cFv */ void daB_TN_c::executeRoomDemo() { - // NONMATCHING daPy_py_c* player = daPy_getPlayerActorClass(); camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); cXyz sp24 = player->current.pos; @@ -1693,139 +1606,139 @@ void daB_TN_c::executeRoomDemo() { fopAcM_searchPlayerDistance(this); switch (mActionMode2) { - case 0: - if (!eventInfo.checkCommandDemoAccrpt()) { - fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); - eventInfo.onCondition(2); - return; + case ACTION2_0_e: + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); + eventInfo.onCondition(2); + return; + } + + mBlendStatus = 0; + fopAcM_OffStatus(this, 0x4000); + + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); + + mCamCenter = dCam_getBody()->Center(); + mCamEye = dCam_getBody()->Eye(); + + mCamFovY = dCam_getBody()->Fovy(); + mActionMode2 = ACTION2_2_e; + mTimer1 = 30; + break; + + case ACTION2_2_e: + if (mTimer1 == 0) { + if (!daPy_py_c::checkNowWolf()) { + mTimer1 = 70; + } else { + mTimer1 = 30; } - field_0xaae = 0; - fopAcM_OffStatus(this, 0x4000); - - camera->mCamera.Stop(); - camera->mCamera.SetTrimSize(3); - - mCamCenter = dCam_getBody()->Center(); - mCamEye = dCam_getBody()->Eye(); + player->changeOriginalDemo(); + player->changeDemoMoveAngle(-0x8000); + sp24.set(0.0f, -350.0f, 1850.0f); + player->changeDemoPos0(&sp24); + player->changeDemoMode(2, 0, 0, 0); + mActionMode2 = ACTION2_3_e; + } + break; - mCamFovY = dCam_getBody()->Fovy(); - mActionMode2 = 2; - field_0xa6c = 30; - break; + case ACTION2_3_e: + cLib_addCalcPos2(&mCamCenter, sp24, 0.1f, 1.0f); - case 2: - if (field_0xa6c == 0) { - if (!daPy_py_c::checkNowWolf()) { - field_0xa6c = 70; - } else { - field_0xa6c = 30; - } + if (mTimer1 == 0) { + player->changeDemoMoveAngle(-0x8000); - player->changeOriginalDemo(); - player->changeDemoMoveAngle(-0x8000); - sp24.set(0.0f, -350.0f, 1850.0f); - player->changeDemoPos0(&sp24); - player->changeDemoMode(2, 0, 0, 0); - mActionMode2 = 3; + if (!daPy_py_c::checkNowWolf()) { + sp24.set(0.0f, -350.0f, 1923.0f); + } else { + sp24.set(0.0f, -350.0f, 2173.0f); } - break; - - case 3: - cLib_addCalcPos2(&mCamCenter, sp24, 0.1f, 1.0f); - if (field_0xa6c == 0) { - player->changeDemoMoveAngle(-0x8000); + player->changeDemoPos0(&sp24); + player->changeDemoMode(2, 0, 0, 0); + sp24.z += 500.0f; + player->setPlayerPosAndAngle(&sp24, -0x8000, 0); - if (!daPy_py_c::checkNowWolf()) { - sp24.set(0.0f, -350.0f, 2173.0f); - } else { - sp24.set(0.0f, -350.0f, 1923.0f); - } - - player->changeDemoPos0(&sp24); - player->changeDemoMode(2, 0, 0, 0); - sp24.z += 500.0f; - player->setPlayerPosAndAngle(&sp24, -0x8000, 0); - - field_0xa6c = 30; - mActionMode2 = 10; - field_0x720 = -0x7000; - mCamEye.x = cM_ssin(field_0x720) * 400.0f; - mCamEye.y = -170.0f; - mCamEye.z = cM_scos(field_0x720) * 400.0f + 1900.0f; - mCamCenter.set(sp24.x, sp24.y + 150.0f, sp24.z); - return; - } - break; - - case 10: - case 11: - sp30.set(sp24.x, sp24.y + 150.0f, sp24.z); - cLib_addCalcPos2(&mCamCenter, sp30, 0.5f, 10.0f); - cLib_addCalcAngleS2(&field_0x720, -0x4000, 16, 32); - cLib_addCalc2(&mCamEye.y, -250.0f, 16.0f, 0.5f); + mTimer1 = 30; + mActionMode2 = ACTION2_10_e; + field_0x720 = -0x7000; mCamEye.x = cM_ssin(field_0x720) * 400.0f; + mCamEye.y = -170.0f; mCamEye.z = cM_scos(field_0x720) * 400.0f + 1900.0f; + mCamCenter.set(sp24.x, sp24.y + 150.0f, sp24.z); + return; + } + break; - if (field_0xa6c == 0) { - if (mActionMode2 == 10) { - player->changeDemoMode(20, 0, 0, 0); - field_0xa6c = 120; - mActionMode2 = 11; - } else if (mActionMode2 == 11) { - if (!daPy_py_c::checkNowWolf()) { - player->changeDemoMode(47, 2, 0, 0); - } + case ACTION2_10_e: + case ACTION2_11_e: + sp30.set(sp24.x, sp24.y + 150.0f, sp24.z); + cLib_addCalcPos2(&mCamCenter, sp30, 0.5f, 10.0f); + cLib_addCalcAngleS2(&field_0x720, -0x4000, 16, 32); + cLib_addCalc2(&mCamEye.y, -250.0f, 16.0f, 0.5f); + mCamEye.x = cM_ssin(field_0x720) * 400.0f; + mCamEye.z = cM_scos(field_0x720) * 400.0f + 1900.0f; - mActionMode2 = 15; - field_0xa6c = 150; - - if (!daPy_py_c::checkNowWolf()) { - mCamEye.set(0.0f, -200.0f, 2400.0f); - } else { - mCamEye.set(0.0f, -265.0f, 2400.0f); - } - - field_0x720 = 0x5c00; - mCamCenter = mCamEye; - mCamCenter.y += 400.0f * cM_ssin(field_0x720); - mCamCenter.z += 400.0f * cM_scos(field_0x720); + if (mTimer1 == 0) { + if (mActionMode2 == ACTION2_10_e) { + player->changeDemoMode(20, 0, 0, 0); + mTimer1 = 120; + mActionMode2 = ACTION2_11_e; + } else if (mActionMode2 == ACTION2_11_e) { + if (!daPy_py_c::checkNowWolf()) { + player->changeDemoMode(47, 2, 0, 0); } + + mActionMode2 = ACTION2_15_e; + mTimer1 = 150; + + if (!daPy_py_c::checkNowWolf()) { + mCamEye.set(0.0f, -200.0f, 2400.0f); + } else { + mCamEye.set(0.0f, -265.0f, 2400.0f); + } + + field_0x720 = 0x5c00; + mCamCenter = mCamEye; + mCamCenter.y += 400.0f * cM_ssin(field_0x720); + mCamCenter.z += 400.0f * cM_scos(field_0x720); } - break; + } + break; - case 15: - mCamCenter = mCamEye; - mCamCenter.y += 400.0f * cM_ssin(field_0x720); - mCamCenter.z += 400.0f * cM_scos(field_0x720); - cLib_addCalcAngleS2(&field_0x720, 0x7800, 16, 64); + case ACTION2_15_e: + mCamCenter = mCamEye; + mCamCenter.y += 400.0f * cM_ssin(field_0x720); + mCamCenter.z += 400.0f * cM_scos(field_0x720); + cLib_addCalcAngleS2(&field_0x720, 0x7800, 16, 64); - if (field_0xa6c == 0) { - mActionMode2 = 16; - field_0xa6c = 70; - field_0x724 = 1200.0f; - } - break; + if (mTimer1 == 0) { + mActionMode2 = ACTION2_16_e; + mTimer1 = 70; + field_0x724 = 1200.0f; + } + break; - case 16: - cLib_chaseF(&field_0x724, 1200.0f, 50.0f); - sp30.set(0.0f, 423.0f, -1841.0f); - cLib_addCalcPos2(&mCamCenter, sp30, 0.3f, field_0x724); - sp30.set(0.0f, 370.0f, -1442.0f); - cLib_addCalcPos2(&mCamEye, sp30, 0.3f, field_0x724); + case ACTION2_16_e: + cLib_chaseF(&field_0x724, 1200.0f, 50.0f); + sp30.set(0.0f, 423.0f, -1841.0f); + cLib_addCalcPos2(&mCamCenter, sp30, 0.3f, field_0x724); + sp30.set(0.0f, 370.0f, -1442.0f); + cLib_addCalcPos2(&mCamEye, sp30, 0.3f, field_0x724); - if (field_0xa6c == 0) { - mCamCenter.set(0.0f, -239.0f, 1874.0f); - mCamEye.set(0.0f, -202.0f, 2251.0f); - camera->mCamera.Reset(mCamCenter, mCamEye); - camera->mCamera.Start(); - camera->mCamera.SetTrimSize(0); - dComIfGp_event_reset(); - - setActionMode(1, 0); - return; - } + if (mTimer1 == 0) { + mCamCenter.set(0.0f, -239.0f, 1874.0f); + mCamEye.set(0.0f, -202.0f, 2251.0f); + camera->mCamera.Reset(mCamCenter, mCamEye); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + + setActionMode(ACT_OPENING, ACTION2_0_e); + return; + } } camera->mCamera.Set(mCamCenter, mCamEye, mCamFovY, 0); @@ -1835,7 +1748,6 @@ void daB_TN_c::executeRoomDemo() { /* 80623920-806246E8 004E20 0DC8+00 2/1 0/0 0/0 .text executeOpening__8daB_TN_cFv */ void daB_TN_c::executeOpening() { - // NONMATCHING cXyz sp7c, sp34; daPy_py_c* player = daPy_getPlayerActorClass(); camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); @@ -1843,185 +1755,188 @@ void daB_TN_c::executeOpening() { fopAcM_searchPlayerDistance(this); switch (mActionMode2) { - case 0: - speedF = 0.0f; - setBck(18, 2, 3.0f, 1.0f); - mActionMode2 = 1; - // fallthrough - - case 1: - sp7c = player->current.pos; - if (sp7c.absXZ() < 2200.0f) { - sp34.set(0.0f, -350.0f, 2250.0f); - if (sp7c.absXZ(sp34) > 1300.0f) { - mActionMode2 = 2; - } - } + case ACTION2_0_e: + speedF = 0.0f; + setBck(18, 2, 3.0f, 1.0f); + mActionMode2 = ACTION2_1_e; + // [[fallthrough]] + case ACTION2_1_e: + sp7c = player->current.pos; + if (sp7c.absXZ() < 2200.0f) { + sp34.set(0.0f, -350.0f, 2250.0f); + if (sp7c.absXZ(sp34) > 1300.0f) { + mActionMode2 = ACTION2_2_e; + } + } + + return; + + case ACTION2_2_e: + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); + eventInfo.onCondition(2); return; - - case 2: - if (!eventInfo.checkCommandDemoAccrpt()) { - fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); - eventInfo.onCondition(2); - return; - } + } - dComIfGs_onOneZoneSwitch(14, fopAcM_GetRoomNo(this)); + dComIfGs_onOneZoneSwitch(14, fopAcM_GetRoomNo(this)); - camera->mCamera.Stop(); - camera->mCamera.SetTrimSize(3); - field_0xa6c = 30; + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); + mTimer1 = 30; - Z2GetAudioMgr()->bgmStreamPrepare(0x2000037); - Z2GetAudioMgr()->bgmStreamPlay(); + Z2GetAudioMgr()->bgmStreamPrepare(0x2000037); + Z2GetAudioMgr()->bgmStreamPlay(); - mActionMode2 = 3; - mCamFovY = 60.0f; - field_0x724 = 380.0f; - field_0x720 = 0x1000; + mActionMode2 = ACTION2_3_e; + mCamFovY = 60.0f; + field_0x724 = 380.0f; + field_0x720 = 0x1000; + mCamCenter.set(current.pos.x, current.pos.y + 220.0f, current.pos.z); + mCamEye.set(mCamCenter.x + field_0x724 * cM_ssin(field_0x720), -210.0f, + mCamCenter.z + field_0x724 * cM_scos(field_0x720)); + + mpModelMorf2->setFrame(15.0f); + player->changeOriginalDemo(); + sp7c.set(150.0f, -400.0f, 600.0f); + player->setPlayerPosAndAngle(&sp7c, -0x7000, 0); + player->changeDemoMode(4, 1, 0, 0); + break; + + case ACTION2_3_e: + cLib_addCalcAngleS2(&field_0x720, 0x400, 8, 48); + mCamCenter.set(current.pos.x, current.pos.y + 220.0f, current.pos.z); + mCamEye.set(mCamCenter.x + field_0x724 * cM_ssin(field_0x720), -210.0f, + mCamCenter.z + field_0x724 * cM_scos(field_0x720)); + + if (mTimer1 == 0) { + setBck(14, 0, 20.0f, 1.0f); + mActionMode2 = ACTION2_4_e; + mBlendStatus = 1; + mBlend = 0.0f; + } + break; + + case ACTION2_4_e: + if (mpModelMorf2->checkFrame(111.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } + + if (mpModelMorf2->checkFrame(148.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } + + if (mpModelMorf2->getFrame() < 80.0f) { + cLib_addCalcAngleS2(&field_0x720, -0x400, 8, 48); mCamCenter.set(current.pos.x, current.pos.y + 220.0f, current.pos.z); - mCamEye.set(mCamCenter.x + field_0x724 * cM_ssin(field_0x720), -210.0f, mCamCenter.z + field_0x724 * cM_scos(field_0x720)); - - mpModelMorf2->setFrame(15.0f); - player->changeOriginalDemo(); - sp7c.set(150.0f, -400.0f, 600.0f); - player->setPlayerPosAndAngle(&sp7c, (s16)0xffff9000, 0); - player->changeDemoMode(4, 1, 0, 0); - break; - - case 3: - cLib_addCalcAngleS2(&field_0x720, 0x400, 8, 48); - mCamCenter.set(current.pos.x, current.pos.y + 220.0f, current.pos.z); - mCamEye.set(mCamCenter.x + field_0x724 * cM_ssin(field_0x720), -210.0f, mCamCenter.z + field_0x724 * cM_scos(field_0x720)); - - if (field_0xa6c == 0) { - setBck(14, 0, 20.0f, 1.0f); - mActionMode2 = 4; - field_0xaae = 1; - mBlend = 0.0f; - } - break; - - case 4: - if (mpModelMorf2->checkFrame(111.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } - - if (mpModelMorf2->checkFrame(148.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } - - if (mpModelMorf2->getFrame() < 80.0f) { - cLib_addCalcAngleS2(&field_0x720, -0x400, 8, 48); - mCamCenter.set(current.pos.x, current.pos.y + 220.0f, current.pos.z); - } else { - cLib_addCalc2(&field_0x724, 250.0f, 8.0f, 5.0f); - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); - mDoMtx_stack_c::multVecZero(&sp34); - cLib_addCalcPos2(&mCamCenter, sp34, 0.5f, 5.0f); - } - - mCamEye.set(mCamCenter.x + field_0x724 * cM_ssin(field_0x720), -210.0f, mCamCenter.z + field_0x724 * cM_scos(field_0x720)); - if (mpModelMorf2->isStop()) { - setBck(15, 2, 3.0f, 1.0f); - field_0xa6c = 60; - mActionMode2 = 10; - } - break; - - case 10: + } else { + cLib_addCalc2(&field_0x724, 250.0f, 8.0f, 5.0f); mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); mDoMtx_stack_c::multVecZero(&sp34); cLib_addCalcPos2(&mCamCenter, sp34, 0.5f, 5.0f); + } - if (field_0xa6c < 30) { - sp34.set(0.0f, -350.0f, 400.0f); - cLib_addCalcPos2(&mCamEye, sp34, 0.5f, 5.0f); - } + mCamEye.set(mCamCenter.x + field_0x724 * cM_ssin(field_0x720), -210.0f, + mCamCenter.z + field_0x724 * cM_scos(field_0x720)); + if (mpModelMorf2->isStop()) { + setBck(15, 2, 3.0f, 1.0f); + mTimer1 = 60; + mActionMode2 = ACTION2_10_e; + } + break; - if (field_0xa6c == 0) { - setBck(7, 0, 10.0f, 1.0f); - mActionMode2 = 14; - } - break; + case ACTION2_10_e: + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::multVecZero(&sp34); + cLib_addCalcPos2(&mCamCenter, sp34, 0.5f, 5.0f); - case 14: - if (mpModelMorf2->checkFrame(33.0f) || mpModelMorf2->checkFrame(105.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } else if (mpModelMorf2->checkFrame(57.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_SWD_L, 0, -1); - mSound.startCreatureVoice(Z2SE_EN_TN_V_KIAI_OP, -1); - } else if (mpModelMorf2->checkFrame(62.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } else if (mpModelMorf2->checkFrame(98.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_SWD_L, 0, -1); - } + if (mTimer1 < 30) { + sp34.set(0.0f, -350.0f, 400.0f); + cLib_addCalcPos2(&mCamEye, sp34, 0.5f, 5.0f); + } - if (mpModelMorf2->getFrame() < 30.0f) { - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); - mDoMtx_stack_c::multVecZero(&sp34); - cLib_addCalcPos2(&mCamCenter, sp34, 0.5f, 5.0f); - sp34.set(0.0f, -350.0f, 400.0f); - cLib_addCalcPos2(&mCamEye, sp34, 0.5f, 5.0f); - } else if (mpModelMorf2->getFrame() < 57.0f) { - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(14)); - mDoMtx_stack_c::multVecZero(&sp34); - sp34.y -= 50.0f; - cLib_addCalcPos2(&mCamCenter, sp34, 0.5f, 3.0f); - sp34.set(0.0f, -350.0f, 400.0f); - cLib_addCalcPos2(&mCamEye, sp34, 0.5f, 5.0f); - } else { - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(14)); - mDoMtx_stack_c::multVecZero(&sp34); - sp34.y -= 50.0f; - cLib_addCalcPos2(&mCamCenter, sp34, 1.0f, 30.0f); - sp34.set(0.0f, -350.0f, 500.0f); - cLib_addCalcPos2(&mCamEye, sp34, 0.5f, 3.0f); - } + if (mTimer1 == 0) { + setBck(7, 0, 10.0f, 1.0f); + mActionMode2 = ACTION2_14_e; + } + break; - if (mpModelMorf2->checkFrame(58.0f) || mpModelMorf2->checkFrame(98.0f)) { - dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f)); - field_0xa88 = 7; - } + case ACTION2_14_e: + if (mpModelMorf2->checkFrame(33.0f) || mpModelMorf2->checkFrame(105.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } else if (mpModelMorf2->checkFrame(57.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_SWD_L, 0, -1); + mSound.startCreatureVoice(Z2SE_EN_TN_V_KIAI_OP, -1); + } else if (mpModelMorf2->checkFrame(62.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } else if (mpModelMorf2->checkFrame(98.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_SWD_L, 0, -1); + } - if (mpModelMorf2->checkFrame(126.0f)) { - mActionMode2 = 17; - field_0xa6c = 30; - } - break; - - case 17: - mCamCenter.set(2.0f, -225.0f, -109.0f); - sp34.set(0.0f, -350.0f, 430.0f); - cLib_addCalcPos2(&mCamEye, sp34, 0.5f, 100.0f); - if (mpModelMorf2->checkFrame(160.0f)) { - mActionMode2 = 20; - player->changeDemoMode(23, 0, 0, 0); - } - break; - - case 20: + if (mpModelMorf2->getFrame() < 30.0f) { mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); mDoMtx_stack_c::multVecZero(&sp34); cLib_addCalcPos2(&mCamCenter, sp34, 0.5f, 5.0f); - sp34.set(0.0f, -300.0f, 1000.0f); - cLib_addCalcPos2(&mCamEye, sp34, 0.1f, 20.0f); + sp34.set(0.0f, -350.0f, 400.0f); + cLib_addCalcPos2(&mCamEye, sp34, 0.5f, 5.0f); + } else if (mpModelMorf2->getFrame() < 57.0f) { + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(14)); + mDoMtx_stack_c::multVecZero(&sp34); + sp34.y -= 50.0f; + cLib_addCalcPos2(&mCamCenter, sp34, 0.5f, 3.0f); + sp34.set(0.0f, -350.0f, 400.0f); + cLib_addCalcPos2(&mCamEye, sp34, 0.5f, 5.0f); + } else { + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(14)); + mDoMtx_stack_c::multVecZero(&sp34); + sp34.y -= 50.0f; + cLib_addCalcPos2(&mCamCenter, sp34, 1.0f, 30.0f); + sp34.set(0.0f, -350.0f, 500.0f); + cLib_addCalcPos2(&mCamEye, sp34, 0.5f, 3.0f); + } - if (mpModelMorf2->checkFrame(220.0f)) { - camera->mCamera.Reset(mCamCenter, mCamEye); - camera->mCamera.Start(); - camera->mCamera.SetTrimSize(0); - dComIfGp_event_reset(); + if (mpModelMorf2->checkFrame(58.0f) || mpModelMorf2->checkFrame(98.0f)) { + dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f)); + mVibrationTimer = 7; + } - Z2GetAudioMgr()->subBgmStart(Z2BGM_TN_MBOSS); + if (mpModelMorf2->checkFrame(126.0f)) { + mActionMode2 = ACTION2_17_e; + mTimer1 = 30; + } + break; - setActionMode(2, 0); - field_0xa93 = 1; - field_0xaae = 2; - mBlend = 0.0f; - return; - } + case ACTION2_17_e: + mCamCenter.set(2.0f, -225.0f, -109.0f); + sp34.set(0.0f, -350.0f, 430.0f); + cLib_addCalcPos2(&mCamEye, sp34, 0.5f, 100.0f); + if (mpModelMorf2->checkFrame(160.0f)) { + mActionMode2 = ACTION2_20_e; + player->changeDemoMode(23, 0, 0, 0); + } + break; + + case ACTION2_20_e: + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::multVecZero(&sp34); + cLib_addCalcPos2(&mCamCenter, sp34, 0.5f, 5.0f); + sp34.set(0.0f, -300.0f, 1000.0f); + cLib_addCalcPos2(&mCamEye, sp34, 0.1f, 20.0f); + + if (mpModelMorf2->checkFrame(220.0f)) { + camera->mCamera.Reset(mCamCenter, mCamEye); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + + Z2GetAudioMgr()->subBgmStart(Z2BGM_TN_MBOSS); + + setActionMode(ACT_WAITH, ACTION2_0_e); + mUpdateNeckAngle = true; + mBlendStatus = 2; + mBlend = 0.0f; + return; + } } camera->mCamera.Set(mCamCenter, mCamEye, mCamFovY, 0); @@ -2033,21 +1948,22 @@ void daB_TN_c::executeOpening() { void daB_TN_c::executeWaitH() { fopAcM_searchPlayerAngleY(this); f32 mPlayerDistance = fopAcM_searchPlayerDistance(this); - switch (mActionMode2) { - case 0: - speedF = 0.0f; - setBck(15, 2, 3.0f, 1.0f); - mActionMode2 = 1; - // fallthrough - - case 1: - if (mPlayerDistance < 1500.0f) { - if (field_0xaad != 0) { - Z2GetAudioMgr()->subBgmStart(Z2BGM_TN_MBOSS_LV9); - } - setActionMode(3, 0); + switch (mActionMode2) { + case ACTION2_0_e: + speedF = 0.0f; + setBck(15, 2, 3.0f, 1.0f); + mActionMode2 = ACTION2_1_e; + // [[fallthrough]] + + case ACTION2_1_e: + if (mPlayerDistance < 1500.0f) { + if (mStayNo2Flag) { + Z2GetAudioMgr()->subBgmStart(Z2BGM_TN_MBOSS_LV9); } + + setActionMode(ACT_CHASEH, ACTION2_0_e); + } } } @@ -2064,305 +1980,309 @@ void daB_TN_c::setAwaitSound() { /* 80624890-80625394 005D90 0B04+00 1/1 0/0 0/0 .text executeChaseH__8daB_TN_cFv */ void daB_TN_c::executeChaseH() { - // NONMATCHING f32 mPlayerDistance = fopAcM_searchPlayerDistance(this); s16 sVar4 = fopAcM_searchPlayerAngleY(this); s16 sVar5 = fopAcM_searchPlayerAngleY(this) - cM_atan2s(-current.pos.x, -current.pos.z); int mMoveArea = checkMoveArea(); switch (mActionMode2) { - case 1: - case 11: - if (mMoveArea == 3) { - if (checkMoveAngle()) { - mActionMode2 = 100; + case ACTION2_0_e: + case ACTION2_76_e: + if (mMoveArea == 3) { + if (checkMoveAngle()) { + mActionMode2 = ACTION2_100_e; + } else { + mActionMode2 = ACTION2_103_e; + } + } else { + if (mMoveArea != 0 && mPlayerDistance > 800.0f) { + mPlayerDistance = 400.0f; + } + + if (mPlayerDistance < 200.0f) { + mActionMode2 = ACTION2_3_e; + } else if (mPlayerDistance >= 800.0f) { + if (mActionMode2 == ACTION2_0_e) { + mActionMode2 = ACTION2_10_e; } else { - mActionMode2 = 103; + mActionMode2 = ACTION2_8_e; } + } else if (mPlayerDistance >= 400.0f) { + mActionMode2 = ACTION2_1_e; } else { - if (mMoveArea != 0 && mPlayerDistance > 800.0f) { - mPlayerDistance = 400.0f; - } + mActionMode2 = ACTION2_5_e; + } + } - if (mPlayerDistance < 200.0f) { - mActionMode2 = 3; - } else if (mPlayerDistance >= 800.0f) { - if (mActionMode2 == 0) { - mActionMode2 = 10; - } else { - mActionMode2 = 8; - } - } else if (mPlayerDistance >= 400.0f) { - mActionMode2 = 1; + setSwordAtBit(0); + field_0xa91 = true; + break; + + case ACTION2_8_e: + case ACTION2_10_e: + if (mActionMode2 == ACTION2_8_e) { + setBck(19, 2, 3.0f, 1.0f); + } else { + setBck(19, 2, 10.0f, 1.0f); + } + + mActionMode2 = ACTION2_9_e; + speedF = 4.3f; + // [[fallthrough]] + + case ACTION2_9_e: + if (mpModelMorf2->checkFrame(23.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } + + if (mpModelMorf2->checkFrame(0.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); + current.angle.y = shape_angle.y; + + if (mPlayerDistance < 700.0f) { + mActionMode2 = ACTION2_11_e; + } + break; + + case ACTION2_1_e: + case ACTION2_11_e: + if (mActionMode2 == ACTION2_1_e) { + setBck(16, 2, 3.0f, 1.0f); + } else { + setBck(16, 2, 10.0f, 1.0f); + } + + mActionMode2 = ACTION2_2_e; + speedF = 2.3f; + current.angle.y = shape_angle.y; + // [[fallthrough]] + + case ACTION2_2_e: + setAwaitSound(); + cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); + current.angle.y = shape_angle.y; + + if (mPlayerDistance > 800.0f) { + if (mMoveArea == 0) { + mActionMode2 = ACTION2_10_e; + } + } else if (mPlayerDistance < 300.0f) { + speedF = 0.0f; + mActionMode2 = ACTION2_5_e; + } + break; + + case ACTION2_3_e: + setBck(16, 2, 3.0f, -1.0f); + mActionMode2 = ACTION2_4_e; + current.angle.y = shape_angle.y + 0x8000; + mWalkDir = 0; + // [[fallthrough]] + + case ACTION2_4_e: + setAwaitSound(); + speedF = 2.3f; + cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); + current.angle.y = shape_angle.y + 0x8000; + + if (mPlayerDistance < 200.0f && mTimer3 == 0) { + mWalkDir++; + if (mWalkDir > 60) { + if (mType == 1) { + mTimer3 = l_HIO.mTimer3NormalType0; } else { - mActionMode2 = 5; + mTimer3 = l_HIO.mTimer3NormalType1; } - } - setSwordAtBit(0); - field_0xa91 = 1; - break; - - case 8: - case 10: - if (mActionMode2 == 8) { - setBck(19, 2, 3.0f, 1.0f); - } else { - setBck(19, 2, 10.0f, 1.0f); + setActionMode(ACT_ATTACKH, ACTION2_0_e); } - - mActionMode2 = 9; - speedF = 4.3f; - // fallthrough - default: - if (mpModelMorf2->checkFrame(23.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } - - if (mpModelMorf2->checkFrame(0.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - - cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); - current.angle.y = shape_angle.y; - - if (mPlayerDistance < 700.0f) { - mActionMode2 = 11; - } - break; - - case 0: - case 2: - if (mActionMode2 == 1) { - setBck(16, 2, 3.0f, 1.0f); - } else { - setBck(16, 2, 10.0f, 1.0f); - } - - mActionMode2 = 2; - speedF = 2.3f; - current.angle.y = shape_angle.y; - - - setAwaitSound(); - cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); - current.angle.y = shape_angle.y; - - if (mPlayerDistance > 800.0f) { - if (mMoveArea == 0) { - mActionMode2 = 10; - } - } else if (mPlayerDistance < 300.0f) { - speedF = 0.0f; - mActionMode2 = 5; - } - break; - - case 3: - setBck(16, 2, 3.0f, -1.0f); - mActionMode2 = 4; - current.angle.y = shape_angle.y + 0x8000; + } else { mWalkDir = 0; - // fallthrough - case 4: - setAwaitSound(); - speedF = 2.3f; - cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); - current.angle.y = shape_angle.y + 0x8000; + } - if (mPlayerDistance < 200.0f && field_0xa70 == 0) { - mWalkDir++; - if (mWalkDir > 60) { - if (field_0xaa5 == 1) { - field_0xa70 = l_HIO.field_0x1c; - } else { - field_0xa70 = l_HIO.field_0x20; - } + if (mPlayerDistance > 300.0f) { + speedF = 0.0f; + mActionMode2 = ACTION2_5_e; + } + break; - setActionMode(4, 0); - } - } else { - mWalkDir = 0; - } + case ACTION2_5_e: + if (cM_rnd() < 0.5f) { + mActionMode2 = ACTION2_6_e; + setBck(17, 2, 3.0f, 1.0f); + current.angle.y = shape_angle.y + 0x4000; + } else { + mActionMode2 = ACTION2_7_e; + setBck(17, 2, 3.0f, -1.0f); + current.angle.y = shape_angle.y + -0x4000; + } - if (mPlayerDistance > 300.0f) { - speedF = 0.0f; - mActionMode2 = 5; - } - break; + mTimer1 = cM_rndFX(20.0f) + 60.0f; + speedF = 2.3f; + break; - case 5: + case ACTION2_6_e: + setAwaitSound(); + cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); + current.angle.y = shape_angle.y + 0x4000; + + if (mTimer1 == 0) { if (cM_rnd() < 0.5f) { - mActionMode2 = 6; - setBck(17, 2, 3.0f, 1.0f); - current.angle.y = shape_angle.y + 0x4000; - } else { - mActionMode2 = 7; setBck(17, 2, 3.0f, -1.0f); current.angle.y = shape_angle.y + -0x4000; - } - - field_0xa6c = cM_rndFX(20.0f) + 60.0f; - speedF = 2.3f; - break; - - case 6: - setAwaitSound(); - cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); - current.angle.y = shape_angle.y + 0x4000; - - if (field_0xa6c == 0) { - if (cM_rnd() < 0.5f) { - setBck(17, 2, 3.0f, -1.0f); - current.angle.y = shape_angle.y + -0x4000; - mActionMode2 = 7; - } - - field_0xa6c = cM_rndFX(20.0f) + 60.0f; + mActionMode2 = ACTION2_7_e; } - if (mPlayerDistance < 200.0f) { - mActionMode2 = 3; + mTimer1 = cM_rndFX(20.0f) + 60.0f; + } + + if (mPlayerDistance < 200.0f) { + mActionMode2 = ACTION2_3_e; + } + + if (mPlayerDistance > 400.0f) { + mActionMode2 = ACTION2_1_e; + } + break; + + case ACTION2_7_e: + setAwaitSound(); + cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); + current.angle.y = shape_angle.y + -0x4000; + + if (mTimer1 == 0) { + if (cM_rnd() < 0.5f) { + setBck(17, 2, 3.0f, 1.0f); + current.angle.y = shape_angle.y + 0x4000; + mActionMode2 = ACTION2_6_e; } + mTimer1 = cM_rndFX(20.0f) + 90.0f; + } - if (mPlayerDistance > 400.0f) { - mActionMode2 = 1; - } - break; + if (mPlayerDistance < 200.0f) { + mActionMode2 = ACTION2_3_e; + } - case 7: - setAwaitSound(); - cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); - current.angle.y = shape_angle.y + -0x4000; + if (mPlayerDistance > 400.0f) { + mActionMode2 = ACTION2_1_e; + } + break; - if (field_0xa6c == 0) { - if (cM_rnd() < 0.5f) { - setBck(17, 2, 3.0f, 1.0f); - current.angle.y = shape_angle.y + 0x4000; - mActionMode2 = 6; - } - field_0xa6c = cM_rndFX(20.0f) + 90.0f; - } + case ACTION2_100_e: + setBck(16, 2, 10.0f, 1.0f); + mActionMode2 = ACTION2_102_e; + speedF = 2.3f; + current.angle.y = shape_angle.y; + // [[fallthrough]] - if (mPlayerDistance < 200.0f) { - mActionMode2 = 3; - } - - if (mPlayerDistance > 400.0f) { - mActionMode2 = 1; - } - break; + case ACTION2_102_e: + setAwaitSound(); + cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); + cLib_addCalcAngleS(¤t.angle.y, cM_atan2s(-current.pos.x, -current.pos.z), 4, 0x400, + 16); - case 70: - case 100: - setBck(16, 2, 10.0f, 1.0f); - mActionMode2 = 102; - speedF = 2.3f; - current.angle.y = shape_angle.y; - // fallthrough - case 101: - setAwaitSound(); - cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); - cLib_addCalcAngleS(¤t.angle.y, cM_atan2s(-current.pos.x, -current.pos.z), 4, 0x400, 16); - - if (!checkMoveAngle()) { - mActionMode2 = 103; - } + if (!checkMoveAngle()) { + mActionMode2 = ACTION2_103_e; + } - if (mMoveArea <= 1) { - mActionMode2 = 70; - } - break; + if (mMoveArea <= 1) { + mActionMode2 = ACTION2_76_e; + } + break; - case 103: - mPlayerDistance = 3.0f; + case ACTION2_103_e: + mPlayerDistance = 3.0f; - if (checkBck(19)) { - mPlayerDistance = 10.0f; - } + if ((u8)checkBck(19)) { + mPlayerDistance = 10.0f; + } - if (abs(sVar5) < 0x2000) { - if (cM_rnd() < 0.5f) { - mActionMode2 = 106; - setBck(17, 2, mPlayerDistance, 1.0f); - } else { - mActionMode2 = 107; - setBck(17, 2, mPlayerDistance, -1.0f); - } - } else if (sVar5 < 0) { - mActionMode2 = 106; + if (abs(sVar5) < 0x2000) { + if (cM_rnd() < 0.5f) { + mActionMode2 = ACTION2_106_e; setBck(17, 2, mPlayerDistance, 1.0f); } else { - mActionMode2 = 107; + mActionMode2 = ACTION2_107_e; setBck(17, 2, mPlayerDistance, -1.0f); } - - field_0xa6c = cM_rndFX(20.0f) + 60.0f; - // fallthrough - case 106: - case 107: - setAwaitSound(); - speedF = 2.3f; - cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); + } else if (sVar5 < 0) { + mActionMode2 = ACTION2_106_e; + setBck(17, 2, mPlayerDistance, 1.0f); + } else { + mActionMode2 = ACTION2_107_e; + setBck(17, 2, mPlayerDistance, -1.0f); + } - if (mActionMode2 == 106) { - if (mMoveArea == 3) { - current.angle.y = shape_angle.y + 0x6000; - } else if (mMoveArea == 2) { - current.angle.y = shape_angle.y + 0x4000; - } else { - current.angle.y = shape_angle.y + 0x3000; - } - } else if (mMoveArea == 3) { - current.angle.y = shape_angle.y + -0x6000; + mTimer1 = cM_rndFX(20.0f) + 60.0f; + // [[fallthrough]] + + case ACTION2_106_e: + case ACTION2_107_e: + setAwaitSound(); + speedF = 2.3f; + cLib_addCalcAngleS(&shape_angle.y, sVar4, 4, 0x400, 16); + + if (mActionMode2 == ACTION2_106_e) { + if (mMoveArea == 3) { + current.angle.y = shape_angle.y + 0x6000; } else if (mMoveArea == 2) { - current.angle.y = shape_angle.y + -0x4000; + current.angle.y = shape_angle.y + 0x4000; } else { - current.angle.y = shape_angle.y + -0x3000; + current.angle.y = shape_angle.y + 0x3000; } + } else if (mMoveArea == 3) { + current.angle.y = shape_angle.y + -0x6000; + } else if (mMoveArea == 2) { + current.angle.y = shape_angle.y + -0x4000; + } else { + current.angle.y = shape_angle.y + -0x3000; + } - if (field_0xa6c == 0 && mpModelMorf2->checkFrame(0.0f)) { - if (abs(sVar5) > 0x7800) { - field_0xa6c = cM_rndFX(20.0f) + 90.0f; - if (cM_rnd() < 0.5f) { - if (mActionMode2 == 106) { - setBck(17, 2, 3.0f, -1.0f); - mActionMode2 = 107; - } else { - setBck(17, 2, 3.0f, 1.0f); - mActionMode2 = 106; - } - } - } else if (abs(sVar5) < 0x7000) { - if (mActionMode2 == 106) { - if (sVar5 > 0) { - setBck(17, 2, 3.0f, -1.0f); - mActionMode2 = 107; - } - } else if (sVar5 < 0) { + if (mTimer1 == 0 && mpModelMorf2->checkFrame(0.0f)) { + if (abs(sVar5) > 0x7800) { + mTimer1 = cM_rndFX(20.0f) + 90.0f; + if (cM_rnd() < 0.5f) { + if (mActionMode2 == ACTION2_106_e) { + setBck(17, 2, 3.0f, -1.0f); + mActionMode2 = ACTION2_107_e; + } else { setBck(17, 2, 3.0f, 1.0f); - mActionMode2 = 106; + mActionMode2 = ACTION2_106_e; } } + } else if (abs(sVar5) < 0x7000) { + if (mActionMode2 == ACTION2_106_e) { + if (sVar5 > 0) { + setBck(17, 2, 3.0f, -1.0f); + mActionMode2 = ACTION2_107_e; + } + } else if (sVar5 < 0) { + setBck(17, 2, 3.0f, 1.0f); + mActionMode2 = ACTION2_106_e; + } } + } - if (checkMoveAngle()) { - mActionMode2 = 100; - } + if (checkMoveAngle()) { + mActionMode2 = ACTION2_100_e; + } - if (mMoveArea < 1) { - mActionMode2 = 70; - } - break; + if (mMoveArea < 1) { + mActionMode2 = ACTION2_76_e; + } + break; } if (mActionMode2 < 100) { checkStartAttackH(); if (mMoveArea == 3) { - if (checkMoveAngle() != 0) { - mActionMode2 = 100; + if (checkMoveAngle()) { + mActionMode2 = ACTION2_100_e; } else { - mActionMode2 = 103; + mActionMode2 = ACTION2_103_e; } } } @@ -2375,47 +2295,45 @@ void daB_TN_c::checkStartAttackH() { s16 sVar1 = fopAcM_searchPlayerAngleY(this) - shape_angle.y; if (mPlayerDistance < 400.0f && abs(sVar1) < 0x3000) { - if (field_0xa78 >= 11) { - if (field_0xaa5 == 1) { - if (field_0xa70 > 40) { - field_0xa70 = cM_rndF(20.0f) + 15.0f; + if (mNextBreakPart >= 11) { + if (mType == 1) { + if (mTimer3 > 40) { + mTimer3 = cM_rndF(20.0f) + 15.0f; } - } else if (field_0xa70 > 10) { - field_0xa70 = 10; + } else if (mTimer3 > 10) { + mTimer3 = 10; } - if (field_0xa70 == 0 && checkNormalAttackAble()) { - if (field_0xaa5 == 1) { - field_0xa70 = l_HIO.field_0x1c; + if (mTimer3 == 0 && checkNormalAttackAble()) { + if (mType == 1) { + mTimer3 = l_HIO.mTimer3NormalType0; } else { - field_0xa70 = l_HIO.field_0x20; + mTimer3 = l_HIO.mTimer3NormalType1; } - setActionMode(4, 0); + setActionMode(ACT_ATTACKH, ACTION2_0_e); } + } else if (mPlayerDistance < 200.0f) { + setActionMode(ACT_ATTACKSHIELDH, ACTION2_0_e); } else { - if (mPlayerDistance < 200.0f) { - setActionMode(5, 0); - } else { - if (mPlayerDistance < 250.0f) { - if (field_0xaa5 == 1) { - if (field_0xa70 > 60) { - field_0xa70 = cM_rndF(20.0f) + 40.0f; - } - } else if (field_0xa70 > 30) { - field_0xa70 = 30; + if (mPlayerDistance < 250.0f) { + if (mType == 1) { + if (mTimer3 > 60) { + mTimer3 = cM_rndF(20.0f) + 40.0f; } + } else if (mTimer3 > 30) { + mTimer3 = 30; + } + } + + if (mTimer3 == 0 && checkNormalAttackAble()) { + if (mType == 1) { + mTimer3 = l_HIO.mTimer3NormalType0; + } else { + mTimer3 = l_HIO.mTimer3NormalType1; } - if (field_0xa70 == 0 && checkNormalAttackAble()) { - if (field_0xaa5 == 1) { - field_0xa70 = l_HIO.field_0x1c; - } else { - field_0xa70 = l_HIO.field_0x20; - } - - setActionMode(4, 0); - } + setActionMode(ACT_ATTACKH, ACTION2_0_e); } } } @@ -2428,152 +2346,149 @@ void daB_TN_c::executeAttackH() { f32 playerDistance = fopAcM_searchPlayerDistance(this); switch (mActionMode2) { - case 0: - speedF = 0.0f; + case ACTION2_0_e: + speedF = 0.0f; - if (playerDistance < 250.0f) { - mActionMode2 = 1; - setBck(5, 0, 3.0f, 1.0f); - } else { - if (playerDistance < 350.0f) { - mActionMode2 = 2; - setBck(6, 0, 3.0f, 1.0f); - } else { - if (cM_rnd() < 0.5f) { - mActionMode2 = 1; - setBck(5, 0, 3.0f, 1.0f); - } else { - mActionMode2 = 2; - setBck(6, 0, 3.0f, 1.0f); - setAttackBlurEffect(1); - } - } - } - - field_0xa91 = 0; - break; - - case 1: - if (mpModelMorf2->getFrame() >= 20.0f && mpModelMorf2->getFrame() < 25.0f) { - field_0xa90 = 3; - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(15)); - mDoMtx_stack_c::transM(40.0f, 0.0f, 70.0f); - mDoMtx_stack_c::YrotM(-0x8000); - PSMTXCopy(mDoMtx_stack_c::get(), field_0x72c); - } - - if (mpModelMorf2->checkFrame(18.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_SWD_L, 0, -1); - mSound.startCreatureVoice(Z2SE_EN_TN_V_KIAI, -1); - } - - if (mpModelMorf2->checkFrame(23.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_L, 0, -1); - } - - if (mpModelMorf2->checkFrame(72.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } - - if (mpModelMorf2->getFrame() <= 30.0f) { - cLib_addCalcAngleS(&shape_angle.y, playerAngleY, 8, 0x400, 16); - } - - frame = mpModelMorf2->getFrame(); - if (frame >= 18.0f && frame < 29.0f) { - field_0xaa0 = 1; - } - - if (mpModelMorf2->checkFrame(18.0f)) { - setSwordAtBit(1); - } - - if (mpModelMorf2->checkFrame(29.0f)) { - setSwordAtBit(0); - } - - if (mpModelMorf2->isStop()) { - setActionMode(3, 0); - field_0xa91 = 1; - } - break; - - case 2: + if (playerDistance < 250.0f) { + mActionMode2 = ACTION2_1_e; + setBck(5, 0, 3.0f, 1.0f); + } else if (playerDistance < 350.0f) { + mActionMode2 = ACTION2_2_e; + setBck(6, 0, 3.0f, 1.0f); + } else if (cM_rnd() < 0.5f) { + mActionMode2 = ACTION2_1_e; + setBck(5, 0, 3.0f, 1.0f); + } else { + mActionMode2 = ACTION2_2_e; + setBck(6, 0, 3.0f, 1.0f); setAttackBlurEffect(1); - if (mpModelMorf2->checkFrame(11.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } else if (mpModelMorf2->checkFrame(19.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_KIAI_AGE, -1); - } else if (mpModelMorf2->checkFrame(22.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_SWD_L, 0, -1); - } else if (mpModelMorf2->checkFrame(23.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_L, 0, -1); - } else if (mpModelMorf2->checkFrame(66.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } + } - if (mpModelMorf2->getFrame() <= 22.0f) { - cLib_addCalcAngleS(&shape_angle.y, playerAngleY, 8, 0x400, 16); - } + field_0xa91 = false; + break; - if (mpModelMorf2->getFrame() >= 22.0f && mpModelMorf2->getFrame() < 30.0f) { - field_0xaa1 = 1; - field_0xaa0 = 1; - } + case ACTION2_1_e: + if (mpModelMorf2->getFrame() >= 20.0f && mpModelMorf2->getFrame() < 25.0f) { + mUpdateModelTimer = 3; + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(15)); + mDoMtx_stack_c::transM(40.0f, 0.0f, 70.0f); + mDoMtx_stack_c::YrotM(-0x8000); + MTXCopy(mDoMtx_stack_c::get(), mNewTRMtx); + } - if (mpModelMorf2->checkFrame(22.0f)) { - setSwordAtBit(1); - } + if (mpModelMorf2->checkFrame(18.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_SWD_L, 0, -1); + mSound.startCreatureVoice(Z2SE_EN_TN_V_KIAI, -1); + } - if (mpModelMorf2->checkFrame(30.0f)) { - setSwordAtBit(0); - } + if (mpModelMorf2->checkFrame(23.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_L, 0, -1); + } - if (mpModelMorf2->checkFrame(26.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_SWD_IMPCT, 0, -1); - dComIfGp_getVibration().StartShock(6, 31, cXyz(0.0f, 1.0f, 0.0f)); - } + if (mpModelMorf2->checkFrame(72.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } - if (mpModelMorf2->isStop()) { - setActionMode(3, 0); - field_0xa91 = 1; - } + if (mpModelMorf2->getFrame() <= 30.0f) { + cLib_addCalcAngleS(&shape_angle.y, playerAngleY, 8, 0x400, 16); + } + + frame = mpModelMorf2->getFrame(); + if (frame >= 18.0f && frame < 29.0f) { + mSphCSmallFlag = true; + } + + if (mpModelMorf2->checkFrame(18.0f)) { + setSwordAtBit(1); + } + + if (mpModelMorf2->checkFrame(29.0f)) { + setSwordAtBit(0); + } + + if (mpModelMorf2->isStop()) { + setActionMode(ACT_CHASEH, ACTION2_0_e); + field_0xa91 = true; + } + break; + + case ACTION2_2_e: + setAttackBlurEffect(1); + if (mpModelMorf2->checkFrame(11.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } else if (mpModelMorf2->checkFrame(19.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_KIAI_AGE, -1); + } else if (mpModelMorf2->checkFrame(22.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_SWD_L, 0, -1); + } else if (mpModelMorf2->checkFrame(23.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_L, 0, -1); + } else if (mpModelMorf2->checkFrame(66.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + if (mpModelMorf2->getFrame() <= 22.0f) { + cLib_addCalcAngleS(&shape_angle.y, playerAngleY, 8, 0x400, 16); + } + + if (mpModelMorf2->getFrame() >= 22.0f && mpModelMorf2->getFrame() < 30.0f) { + mChkCoHitOK = true; + mSphCSmallFlag = true; + } + + if (mpModelMorf2->checkFrame(22.0f)) { + setSwordAtBit(1); + } + + if (mpModelMorf2->checkFrame(30.0f)) { + setSwordAtBit(0); + } + + if (mpModelMorf2->checkFrame(26.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_SWD_IMPCT, 0, -1); + dComIfGp_getVibration().StartShock(6, 31, cXyz(0.0f, 1.0f, 0.0f)); + } + + if (mpModelMorf2->isStop()) { + setActionMode(ACT_CHASEH, ACTION2_0_e); + field_0xa91 = true; + } } } -/* 80625C74-80625E40 007174 01CC+00 1/1 0/0 0/0 .text executeAttackShieldH__8daB_TN_cFv */ +/* 80625C74-80625E40 007174 01CC+00 1/1 0/0 0/0 .text executeAttackShieldH__8daB_TN_cFv + */ void daB_TN_c::executeAttackShieldH() { switch (mActionMode2) { - case 0: - speedF = 0.0f; - setBck(8, 0, 3.0f, 1.0f); - mActionMode2 = 1; - break; + case ACTION2_0_e: + speedF = 0.0f; + setBck(8, 0, 3.0f, 1.0f); + mActionMode2 = ACTION2_1_e; + break; - case 1: - if (mpModelMorf2->checkFrame(4.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_ATK_SLD, -1); - } + case ACTION2_1_e: + if (mpModelMorf2->checkFrame(4.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_ATK_SLD, -1); + } - if (mpModelMorf2->checkFrame(8.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_L, 0, -1); - } + if (mpModelMorf2->checkFrame(8.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_L, 0, -1); + } - if (mpModelMorf2->checkFrame(21.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } + if (mpModelMorf2->checkFrame(21.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } - if (mpModelMorf2->checkFrame(5.0f)) { - field_0x3618.OnAtSetBit(); - } + if (mpModelMorf2->checkFrame(5.0f)) { + mSphC.OnAtSetBit(); + } - if (mpModelMorf2->checkFrame(9.0f)) { - field_0x3618.OffAtSetBit(); - } + if (mpModelMorf2->checkFrame(9.0f)) { + mSphC.OffAtSetBit(); + } - if (mpModelMorf2->isStop()) { - setActionMode(4, 0); - } + if (mpModelMorf2->isStop()) { + setActionMode(ACT_ATTACKH, ACTION2_0_e); + } } } @@ -2581,42 +2496,42 @@ void daB_TN_c::executeAttackShieldH() { void daB_TN_c::executeGuardH() { cXyz sp18; switch (mActionMode2) { - case 0: - setSwordAtBit(0); - field_0x3618.OffAtSetBit(); - field_0xa91 = 1; + case ACTION2_0_e: + setSwordAtBit(0); + mSphC.OffAtSetBit(); + field_0xa91 = true; - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(18)); - mDoMtx_stack_c::multVecZero(&sp18); - current.pos.set(sp18.x, current.pos.y, sp18.z); + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(18)); + mDoMtx_stack_c::multVecZero(&sp18); + current.pos.set(sp18.x, current.pos.y, sp18.z); - mActionMode2 = 1; - speedF = 0.0f; + mActionMode2 = ACTION2_1_e; + speedF = 0.0f; - if (field_0xaa8 != 0) { - shape_angle.y = fopAcM_searchPlayerAngleY(this); - setBck(13, 0, 0.0f, 1.0f); - } else { - cLib_chaseAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 0x2000); - setBck(12, 0, 0.0f, 1.0f); + if (field_0xaa8) { + shape_angle.y = fopAcM_searchPlayerAngleY(this); + setBck(13, 0, 0.0f, 1.0f); + } else { + cLib_chaseAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 0x2000); + setBck(12, 0, 0.0f, 1.0f); + } + break; + + case ACTION2_1_e: + if (field_0xaa8) { + onHeadLockFlg(); + } else { + // Obtained 4 secret techinques + if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[341])) { + attention_info.flags |= 0x200000; } - break; + } - case 1: - if (field_0xaa8 != 0) { - onHeadLockFlg(); - } else { - // Obtained 4 secret techinques - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[341])) { - attention_info.flags |= 0x200000; - } - } - - if (mpModelMorf2->isStop()) { - if (daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_HEAD_JUMP) { - setActionMode(3, 0); - } - } + if (mpModelMorf2->isStop() && + daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_HEAD_JUMP) + { + setActionMode(ACT_CHASEH, ACTION2_0_e); + } } } @@ -2624,447 +2539,452 @@ void daB_TN_c::executeGuardH() { void daB_TN_c::executeDamageH() { s16 mPlayerAngleY = fopAcM_searchPlayerAngleY(this); daPy_py_c* player = daPy_getPlayerActorClass(); - field_0xa91 = 0; + field_0xa91 = false; - if (field_0xa80 == 0) { - field_0xa91 = 1; - field_0xaa7 = 30; + if (mTimer5 == 0) { + field_0xa91 = true; + mTimer10 = 30; } - if (field_0xaa5 == 0) { + if (mType == 0) { if (player->getCutCount() >= 3) { - field_0xa91 = 1; + field_0xa91 = true; } - } else if (field_0xaa7 != 0) { - field_0xa91 = 1; + } else if (mTimer10 != 0) { + field_0xa91 = true; } - int iVar1; + int part_idx; switch (mActionMode2) { - case 0: - case 1: - setSwordAtBit(0); - iVar1 = field_0xa78; - if (iVar1 >= 12) { - setActionMode(8, 0); + case ACTION2_0_e: + case ACTION2_1_e: + setSwordAtBit(0); + part_idx = mNextBreakPart; + if (part_idx >= 12) { + setActionMode(ACT_CHANGEDEMO, ACTION2_0_e); + } else { + if (player->getCutType() != daPy_py_c::CUT_TYPE_HEAD_JUMP) { + setBreakPart(part_idx); } else { - if (player->getCutType() != daPy_py_c::CUT_TYPE_HEAD_JUMP) { - setBreakPart(iVar1); - } else { - setBreakHeadPart(iVar1); - } - - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(18)); - cXyz sp1c; - mDoMtx_stack_c::multVecZero(&sp1c); - current.pos.set(sp1c.x, current.pos.y, sp1c.z); - - if (mActionMode2 == 0) { - setBck(9, 0, 0.0f, 1.0f); - } else { - setBck(11, 0, 0.0f, 1.0f); - } - - mSound.startCreatureVoice(Z2SE_EN_TN_V_DMG, -1); - speedF = 0.0f; - mActionMode2 = 2; - - cLib_chaseAngleS(&shape_angle.y, mPlayerAngleY, 0x1800); - - if (field_0xaa5 == 1 && field_0xa78 < 11 && field_0xa9f != 0) { - field_0xa91 = 1; - field_0xaa7 = 40; - } - } - break; - - case 2: - if (mpModelMorf2->checkFrame(3.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + setBreakHeadPart(part_idx); } - if (mpModelMorf2->checkFrame(35.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(18)); + cXyz sp1c; + mDoMtx_stack_c::multVecZero(&sp1c); + current.pos.set(sp1c.x, current.pos.y, sp1c.z); + + if (mActionMode2 == ACTION2_0_e) { + setBck(9, 0, 0.0f, 1.0f); + } else { + setBck(11, 0, 0.0f, 1.0f); } - if (mpModelMorf2->isStop()) { - setActionMode(3, 0); - field_0xa91 = 1; + mSound.startCreatureVoice(Z2SE_EN_TN_V_DMG, -1); + speedF = 0.0f; + mActionMode2 = ACTION2_2_e; + + cLib_chaseAngleS(&shape_angle.y, mPlayerAngleY, 0x1800); + + if (mType == 1 && mNextBreakPart < 11 && mCutFlag) { + field_0xa91 = true; + mTimer10 = 40; } + } + break; + + case ACTION2_2_e: + if (mpModelMorf2->checkFrame(3.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } + + if (mpModelMorf2->checkFrame(35.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + if (mpModelMorf2->isStop()) { + setActionMode(ACT_CHASEH, ACTION2_0_e); + field_0xa91 = true; + } } } /* 80626320-80627100 007820 0DE0+00 1/1 0/0 0/0 .text executeChangeDemo__8daB_TN_cFv */ void daB_TN_c::executeChangeDemo() { - // NONMATCHING cXyz sp28, sp34, sp40; daPy_py_c* player = daPy_getPlayerActorClass(); camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); switch (mActionMode2) { - case 0: - if (!eventInfo.checkCommandDemoAccrpt()) { - fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); - eventInfo.onCondition(2); - return; - } + case ACTION2_0_e: + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); + eventInfo.onCondition(2); + return; + } - Z2GetAudioMgr()->changeSubBgmStatus(1); + Z2GetAudioMgr()->changeSubBgmStatus(1); - camera->mCamera.Stop(); - camera->mCamera.SetTrimSize(3); + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); - field_0xa6c = 30; - mCamFovY = 55.0f; - field_0x724 = 380.0f; - field_0x720 = 0x1000; - mCamCenter.set(0.0f, -179.0f, -342.0f); - mCamEye.set(0.0f, -300.0f, 350.0f); + mTimer1 = 30; + mCamFovY = 55.0f; + field_0x724 = 380.0f; + field_0x720 = 0x1000; + mCamCenter.set(0.0f, -179.0f, -342.0f); + mCamEye.set(0.0f, -300.0f, 350.0f); - player->changeOriginalDemo(); - sp28.set(100.0f, -400.0f, 1000.0f); - player->setPlayerPosAndAngle(&sp28, -0x8000, 0); - player->changeDemoMode(4, 1, 0, 0); + player->changeOriginalDemo(); + sp28.set(100.0f, -400.0f, 1000.0f); + player->setPlayerPosAndAngle(&sp28, -0x8000, 0); + player->changeDemoMode(4, 1, 0, 0); - speedF = 0.0f; - setBck(10, 0, 3.0f, 1.0f); + speedF = 0.0f; + setBck(10, 0, 3.0f, 1.0f); - mSound.startCreatureVoice(Z2SE_EN_TN_V_DMG_2, -1); + mSound.startCreatureVoice(Z2SE_EN_TN_V_DMG_2, -1); - mActionMode2 = 100; + mActionMode2 = ACTION2_100_e; - for (int i = 0; i < 16; i++) { - if (field_0x9fc[i] >= 3 && field_0x9fc[i] <= 5 && std::abs(field_0x75c[i].x) < 200.0f) { - if (field_0x75c[i].x < 0.0f) { - field_0x75c[i].x -= 200.0f; - } else { - field_0x75c[i].x += 200.0f; - } + for (int i = 0; i < 16; i++) { + if (mStates[i] >= 3 && mStates[i] <= 5 && std::abs(mPositions[i].x) < 200.0f) { + if (mPositions[i].x < 0.0f) { + mPositions[i].x -= 200.0f; + } else { + mPositions[i].x += 200.0f; } } + } - return; + return; - case 100: + case ACTION2_1_e: + case ACTION2_100_e: + case ACTION2_101_e: + if (mActionMode2 == ACTION2_100_e) { current.pos.set(0.0f, -400.0f, -350.0f); shape_angle.y = 0; - mActionMode2 = 101; - // fallthrough - case 101: - if (mActionMode2 == 101) { - setBreakPart(field_0xa78); - mActionMode2 = 1; + mActionMode2 = ACTION2_101_e; + + } else { + if (mActionMode2 == ACTION2_101_e) { + setBreakPart(mNextBreakPart); + mActionMode2 = ACTION2_1_e; } mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); mDoMtx_stack_c::multVecZero(&mCamCenter); - // fallthrough - default: - mCamEye.set(0.0f, -300.0f, 0.0f); + } - if (mpModelMorf2->checkFrame(3.0f) || mpModelMorf2->checkFrame(26.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + mCamEye.set(0.0f, -300.0f, 0.0f); + + if (mpModelMorf2->checkFrame(3.0f) || mpModelMorf2->checkFrame(26.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } + + if (mpModelMorf2->checkFrame(15.0f) || mpModelMorf2->checkFrame(37.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + if (mpModelMorf2->isStop()) { + setBck(30, 0, 3.0f, 1.0f); + current.angle.y = shape_angle.y + 0x10000 + -0x8000; + mActionMode2 = ACTION2_2_e; + } + break; + + case ACTION2_2_e: + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::multVecZero(&mCamCenter); + mCamEye.set(0.0f, -300.0f, 0.0f); + + if (mpModelMorf2->checkFrame(4.0f)) { + speedF = 35.0f; + speed.y = 4.0f; + gravity = -1.0f; + } + + if (mpModelMorf2->checkFrame(6.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_JUMP, -1); + } + + if (mpModelMorf2->isStop() && mAcch.ChkGroundHit()) { + setBck(31, 0, 5.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + mActionMode2 = ACTION2_3_e; + } + break; + + case ACTION2_3_e: + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::multVecZero(&mCamCenter); + mCamEye.set(0.0f, -300.0f, 0.0f); + cLib_chaseF(&speedF, 0.0f, 7.0f); + if (mpModelMorf2->checkFrame(4.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + if (mpModelMorf2->isStop()) { + speedF = 0.0f; + setBck(41, 0, 3.0f, 1.0f); + mActionMode2 = ACTION2_4_e; + } + break; + + case ACTION2_4_e: + if (mpModelMorf2->checkFrame(11.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } + + if (mpModelMorf2->checkFrame(19.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_THROW, -1); + } + + if (mpModelMorf2->checkFrame(22.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::multVecZero(&mCamCenter); + mCamEye.set(0.0f, -300.0f, 0.0f); + + if (mpModelMorf2->checkFrame(23.0f)) { + mStates[13] = 2; + } + + if (mpModelMorf2->checkFrame(33.0f)) { + mActionMode2 = ACTION2_10_e; + mPositions[13].z = -200.0f; + mCamEye.set(250.0f, -330.0f, 1250.0f); + mCamCenter = mPositions[13]; + } + break; + + case ACTION2_10_e: + mCamCenter = mPositions[13]; + + if (mpModelMorf2->isStop()) { + player->changeDemoMode(16, 2, 0, 0); + setBck(42, 2, 3.0f, 1.0f); + mTimer1 = 60; + mActionMode2 = ACTION2_11_e; + } + break; + + case ACTION2_11_e: + sp40 = mCamEye; + sp34.set(100.0f, -330.0f, 1250.0f); + cLib_addCalcPos2(&mCamEye, sp34, 0.5f, 10.0f); + mCamCenter += mCamEye - sp40; + sp28 = player->current.pos; + sp28.y += 150.0f; + cLib_addCalcPos2(&mCamCenter, sp28, 0.5f, 30.0f); + + if (mTimer1 == 45) { + player->changeDemoMode(25, 0, 0, 0); + } + + if (mTimer1 == 15) { + mTimer1 = 30; + mActionMode2 = ACTION2_12_e; + } + break; + + case ACTION2_12_e: + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::multVecZero(&sp34); + cLib_addCalcPos2(&mCamCenter, sp34, 0.1f, 60.0f); + + if (mTimer1 == 0) { + mTimer1 = 40; + mActionMode2 = ACTION2_13_e; + } + break; + + case ACTION2_13_e: + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::multVecZero(&sp34); + sp34.y -= 100.0f; + cLib_addCalcPos2(&mCamCenter, sp34, 0.1f, 30.0f); + sp34.set(0.0f, -380.0f, -270.0f); + cLib_addCalcPos2(&mCamEye, sp34, 0.1f, 70.0f); + + if (mTimer1 == 0) { + setBck(38, 0, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_TN_V_PULL_OUT, -1); + mActionMode2 = ACTION2_15_e; + sp28.set(-100.0f, -400.0f, 300.0f); + player->setPlayerPosAndAngle(&sp28, 0x7000, 0); + } + break; + + case ACTION2_15_e: + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::multVecZero(&sp34); + sp34.y -= 100.0f; + cLib_addCalcPos2(&mCamCenter, sp34, 0.1f, 30.0f); + sp34.set(0.0f, -380.0f, -270.0f); + cLib_addCalcPos2(&mCamEye, sp34, 0.1f, 70.0f); + + if (mpModelMorf2->checkFrame(10.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_PULL_OUT, 0, -1); + mStates[15] = 1; + mStates[14] = 2; + mpModelMorf1->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_tn", 40), 0, 0.0f, 1.0f, + 0.0f, -1.0f); + } + + if (mpModelMorf2->isStop()) { + for (int i = 0; i < 4; i++) { + mSwordSphs[i].OffCoSetBit(); } + mCps.OffCoSetBit(); + setBck(42, 2, 3.0f, 1.0f); + mTimer1 = 30; + mActionMode2 = ACTION2_16_e; + return; + } + break; - if (mpModelMorf2->checkFrame(15.0f) || mpModelMorf2->checkFrame(37.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - - if (mpModelMorf2->isStop()) { - setBck(30, 0, 3.0f, 1.0f); - current.angle.y = shape_angle.y + -0x8000; - mActionMode2 = 2; - } - break; - - case 2: - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); - mDoMtx_stack_c::multVecZero(&mCamCenter); - mCamEye.set(0.0f, -300.0f, 0.0f); - - if (mpModelMorf2->checkFrame(4.0f)) { - speedF = 35.0f; - speed.y = 4.0f; - gravity = -1.0f; - } - - if (mpModelMorf2->checkFrame(6.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_JUMP, -1); - } - - if (mpModelMorf2->isStop() && mAcch.ChkGroundHit()) { - setBck(31, 0, 5.0f, 1.0f); - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - mActionMode2 = 3; - } - break; - - case 3: - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); - mDoMtx_stack_c::multVecZero(&mCamCenter); - mCamEye.set(0.0f, -300.0f, 0.0f); - cLib_chaseF(&speedF, 0.0f, 7.0f); - if (mpModelMorf2->checkFrame(4.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - - if (mpModelMorf2->isStop()) { - speedF = 0.0f; - setBck(41, 0, 3.0f, 1.0f); - mActionMode2 = 4; - } - break; - - case 4: - if (mpModelMorf2->checkFrame(11.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } - - if (mpModelMorf2->checkFrame(19.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_THROW, -1); - } - - if (mpModelMorf2->checkFrame(22.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); - mDoMtx_stack_c::multVecZero(&mCamCenter); - mCamEye.set(0.0f, -300.0f, 0.0f); - - if (mpModelMorf2->checkFrame(23.0f)) { - field_0x9fc[13] = 2; - } - - if (mpModelMorf2->checkFrame(33.0f)) { - mActionMode2 = 10; - field_0x75c[13].z = -200.0f; - mCamEye.set(250.0f, -330.0f, 1250.0f); - mCamCenter = field_0x75c[13]; - } - break; - - case 10: - mCamCenter = field_0x75c[13]; - - if (mpModelMorf2->isStop()) { - player->changeDemoMode(16, 2, 0, 0); - setBck(42, 2, 3.0f, 1.0f); - field_0xa6c = 60; - mActionMode2 = 11; - } - break; - - case 11: - sp40 = mCamEye; - sp34.set(100.0f, -330.0f, 1250.0f); - cLib_addCalcPos2(&mCamEye, sp34, 0.5f, 10.0f); - mCamCenter += mCamEye - sp40; - sp28 = player->current.pos; - sp28.y += 150.0f; - cLib_addCalcPos2(&mCamCenter, sp28, 0.5f, 30.0f); - - if (field_0xa6c == 45) { - player->changeDemoMode(25, 0, 0, 0); - } - - if (field_0xa6c == 15) { - field_0xa6c = 30; - mActionMode2 = 12; - } - break; - - case 12: - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); - mDoMtx_stack_c::multVecZero(&sp34); - cLib_addCalcPos2(&mCamCenter, sp34, 0.1f, 60.0f); - - if (field_0xa6c == 0) { - field_0xa6c = 40; - mActionMode2 = 13; - } - break; - - case 13: - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); - mDoMtx_stack_c::multVecZero(&sp34); - sp34.y -= 100.0f; - cLib_addCalcPos2(&mCamCenter, sp34, 0.1f, 30.0f); - sp34.set(0.0f, -380.0f, -270.0f); - cLib_addCalcPos2(&mCamEye, sp34, 0.1f, 70.0f); - - if (field_0xa6c == 0) { - setBck(38, 0, 3.0f, 1.0f); - mSound.startCreatureVoice(Z2SE_EN_TN_V_PULL_OUT, -1); - mActionMode2 = 15; - sp28.set(-100.0f, -400.0f, 300.0f); - player->setPlayerPosAndAngle(&sp28, 0x7000, 0); - } - break; - - case 15: - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(4)); - mDoMtx_stack_c::multVecZero(&sp34); - sp34.y -= 100.0f; - cLib_addCalcPos2(&mCamCenter, sp34, 0.1f, 30.0f); - sp34.set(0.0f, -380.0f, -270.0f); - cLib_addCalcPos2(&mCamEye, sp34, 0.1f, 70.0f); - - if (mpModelMorf2->checkFrame(10.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_PULL_OUT, 0, -1); - field_0x9fc[15] = 1; - field_0x9fc[14] = 2; - mpModelMorf1->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_tn", 40), 0, 0.0f, 1.0f, 0.0f, -1.0f); - } - - if (mpModelMorf2->isStop()) { - for (int i = 0; i < 4; i++) { - mSwordSphs[i].OffCoSetBit(); - } - mCps.OffCoSetBit(); - setBck(42, 2, 3.0f, 1.0f); - field_0xa6c = 30; - mActionMode2 = 16; - return; - } - break; - - case 16: - if (field_0xa6c == 0) { - camera->mCamera.Reset(mCamCenter, mCamEye); - camera->mCamera.Start(); - camera->mCamera.SetTrimSize(0); - dComIfGp_event_reset(); - setActionMode(9, 0); - initChaseL(16); - field_0x3618.OffAtSetBit(); - } - break; - + case ACTION2_16_e: + if (mTimer1 == 0) { + camera->mCamera.Reset(mCamCenter, mCamEye); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + setActionMode(ACT_CHASEL, ACTION2_0_e); + initChaseL(16); + mSphC.OffAtSetBit(); + } + break; } camera->mCamera.Set(mCamCenter, mCamEye, mCamFovY, 0); } -/* 80627100-80627790 008600 0690+00 1/1 0/0 0/0 .text executeZakoChangeDemo__8daB_TN_cFv */ +/* 80627100-80627790 008600 0690+00 1/1 0/0 0/0 .text executeZakoChangeDemo__8daB_TN_cFv + */ void daB_TN_c::executeZakoChangeDemo() { s16 mPlayerAngleY = fopAcM_searchPlayerAngleY(this); switch (mActionMode2) { - case 0: - if (field_0xaad != 0) { - Z2GetAudioMgr()->changeSubBgmStatus(1); - } + case ACTION2_0_e: + if (mStayNo2Flag) { + Z2GetAudioMgr()->changeSubBgmStatus(1); + } - field_0xa6c = 30; - speedF = 0.0f; - setBck(10, 0, 3.0f, 1.0f); + mTimer1 = 30; + speedF = 0.0f; + setBck(10, 0, 3.0f, 1.0f); - mSound.startCreatureVoice(Z2SE_EN_TN_V_DMG_2, -1); + mSound.startCreatureVoice(Z2SE_EN_TN_V_DMG_2, -1); - setBreakPart(field_0xa78); - mActionMode2 = 1; - // fallthrough - case 1: - if (mpModelMorf2->checkFrame(3.0f) || mpModelMorf2->checkFrame(26.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } - - if (mpModelMorf2->checkFrame(15.0f) || mpModelMorf2->checkFrame(37.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 8, 0x100, 16); - - if (mpModelMorf2->isStop()) { - setBck(30, 0, 3.0f, 1.0f); - current.angle.y = shape_angle.y + 0x8000; - mActionMode2 = 2; - } - break; - - case 2: - if (mpModelMorf2->checkFrame(4.0f)) { - speedF = 45.0f; - speed.y = 5.0f; - gravity = -1.0f; - } - - if (mpModelMorf2->checkFrame(6.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_JUMP, -1); - } - - if (!mpModelMorf2->isStop()) { - return; - } - - if (!mAcch.ChkGroundHit()) { - return; - } - - setBck(31, 0, 5.0f, 1.0f); + setBreakPart(mNextBreakPart); + mActionMode2 = ACTION2_1_e; + // [[fallthrough]] + case ACTION2_1_e: + if (mpModelMorf2->checkFrame(3.0f) || mpModelMorf2->checkFrame(26.0f)) { mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - mActionMode2 = 3; + } + + if (mpModelMorf2->checkFrame(15.0f) || mpModelMorf2->checkFrame(37.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 8, 0x100, 16); + + if (mpModelMorf2->isStop()) { + setBck(30, 0, 3.0f, 1.0f); + current.angle.y = shape_angle.y + 0x8000; + mActionMode2 = ACTION2_2_e; + } + break; + + case ACTION2_2_e: + if (mpModelMorf2->checkFrame(4.0f)) { + speedF = 45.0f; + speed.y = 5.0f; + gravity = -1.0f; + } + + if (mpModelMorf2->checkFrame(6.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_JUMP, -1); + } + + if (!mpModelMorf2->isStop()) { return; + } - case 3: + if (!mAcch.ChkGroundHit()) { + return; + } + + setBck(31, 0, 5.0f, 1.0f); + + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + mActionMode2 = ACTION2_3_e; + return; + + case ACTION2_3_e: + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 8, 0x800, 16); + cLib_chaseF(&speedF, 0.0f, 9.0f); + + if (mpModelMorf2->checkFrame(4.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + if (mpModelMorf2->isStop()) { + speedF = 0.0f; + setBck(41, 0, 3.0f, 1.0f); + mActionMode2 = ACTION2_4_e; + } + break; + + case ACTION2_4_e: + if (mpModelMorf2->checkFrame(11.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } + + if (mpModelMorf2->checkFrame(19.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_THROW, -1); + } + + if (mpModelMorf2->checkFrame(22.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + if (mpModelMorf2->getFrame() < 23.0f) { cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 8, 0x800, 16); - cLib_chaseF(&speedF, 0.0f, 9.0f); - - if (mpModelMorf2->checkFrame(4.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } + } - if (mpModelMorf2->isStop()) { - speedF = 0.0f; - setBck(41, 0, 3.0f, 1.0f); - mActionMode2 = 4; - } - break; + if (mpModelMorf2->checkFrame(23.0f)) { + mStates[13] = 2; + setSwordAtBit(1); + } - case 4: - if (mpModelMorf2->checkFrame(11.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } + if (mpModelMorf2->isStop()) { + setBck(38, 0, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_TN_V_PULL_OUT, -1); + mActionMode2 = ACTION2_5_e; + } + break; - if (mpModelMorf2->checkFrame(19.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_THROW, -1); - } + case ACTION2_5_e: + if (mpModelMorf2->checkFrame(10.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_PULL_OUT, 0, -1); + mStates[15] = 1; + mStates[14] = 2; + mpModelMorf1->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_tn", 40), 0, 0.0f, 1.0f, + 0.0f, -1.0f); + } - if (mpModelMorf2->checkFrame(22.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - - if (mpModelMorf2->getFrame() < 23.0f) { - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 8, 0x800, 16); - } - - if (mpModelMorf2->checkFrame(23.0f)) { - field_0x9fc[13] = 2; - setSwordAtBit(1); - } - - if (mpModelMorf2->isStop()) { - setBck(38, 0, 3.0f, 1.0f); - mSound.startCreatureVoice(Z2SE_EN_TN_V_PULL_OUT, -1); - mActionMode2 = 5; - } - break; - - case 5: - if (mpModelMorf2->checkFrame(10.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_PULL_OUT, 0, -1); - field_0x9fc[15] = 1; - field_0x9fc[14] = 2; - mpModelMorf1->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_tn", 40), 0, 0.0f, 1.0f, 0.0f, -1.0f); - } - - if (mpModelMorf2->isStop()) { - setActionMode(9, 0); - initChaseL(3); - field_0x3618.OffAtSetBit(); - } + if (mpModelMorf2->isStop()) { + setActionMode(ACT_CHASEL, ACTION2_0_e); + initChaseL(3); + mSphC.OffAtSetBit(); + } } } @@ -3072,37 +2992,35 @@ void daB_TN_c::executeZakoChangeDemo() { void daB_TN_c::setWalkDir() { f32 mPlayerDistance = fopAcM_searchPlayerDistance(this); - if (checkMoveArea() != 0) { + if (checkMoveArea()) { s16 sVar1 = cM_atan2s(-current.pos.x, -current.pos.z); s16 mPlayerAngleY = fopAcM_searchPlayerAngleY(this) - sVar1; if (abs(mPlayerAngleY) < 0x2000) { mWalkDir = 0; + } else if (abs(mPlayerAngleY) > 0x6000) { + mWalkDir = 1; } else { - if (abs(mPlayerAngleY) > 0x6000) { - mWalkDir = 1; + if (abs(mPlayerAngleY) < 0x4000) { + mWalkDir = 0; } else { - if (abs(mPlayerAngleY) < 0x4000) { - mWalkDir = 0; - } else { - mWalkDir = 1; - } + mWalkDir = 1; + } - if (mPlayerAngleY < 0) { - if (mActionMode2 == 5 && field_0xa6c > 30) { - field_0xa6c = 30; - } - } else if (mActionMode2 == 4 && field_0xa6c > 30) { - field_0xa6c = 30; + if (mPlayerAngleY < 0) { + if (mActionMode2 == ACTION2_5_e && mTimer1 > 30) { + mTimer1 = 30; } + } else if (mActionMode2 == ACTION2_4_e && mTimer1 > 30) { + mTimer1 = 30; } } } else { if (mPlayerDistance > 800.0f) { - field_0xa6c = 0; + mTimer1 = 0; } if (mWalkDir == 0) { - if (field_0xa70 != 0) { + if (mTimer3 != 0) { if (mPlayerDistance < 500.0f) { mWalkDir = 1; } @@ -3110,7 +3028,7 @@ void daB_TN_c::setWalkDir() { mWalkDir = 1; } } else if (mWalkDir == 1) { - if (field_0xa70 != 0) { + if (mTimer3 != 0) { if (mPlayerDistance > 550.0f) { mWalkDir = 0; } @@ -3129,97 +3047,96 @@ void daB_TN_c::setWalkDir() { /* 8062799C-80627CBC 008E9C 0320+00 6/5 0/0 0/0 .text initChaseL__8daB_TN_cFi */ void daB_TN_c::initChaseL(int param_1) { - // NONMATCHING mActionMode2 = param_1; speedF = 0.0f; switch (mActionMode2) { - case 2: - setBck(42, 2, 10.0f, 1.0f); - field_0xa6c = 30; - break; - - case 3: - setBck(45, 2, 10.0f, 1.0f); - speedF = 4.7f; - break; + case ACTION2_2_e: + setBck(42, 2, 10.0f, 1.0f); + mTimer1 = 30; + break; - case 4: - if (!checkBck(43)) { - setBck(43, 2, 10.0f, 1.0f); - } + case ACTION2_3_e: + setBck(45, 2, 10.0f, 1.0f); + speedF = 4.7f; + break; - current.angle.y = shape_angle.y + 0x4000; - field_0xa6c = cM_rndFX(20.0f) + 90.0f; - speedF = 4.8f; - mWalkDir = 1; - break; - - case 5: - if (!checkBck(44)) { - setBck(44, 2, 10.0f, 1.0f); - } + case ACTION2_4_e: + if ((u8)checkBck(43) == 0) { + setBck(43, 2, 10.0f, 1.0f); + } - current.angle.y = shape_angle.y + -0x4000; - field_0xa6c = cM_rndFX(20.0f) + 90.0f; - speedF = 4.8f; - mWalkDir = 1; - break; + current.angle.y = shape_angle.y + 0x4000; + mTimer1 = cM_rndFX(20.0f) + 90.0f; + speedF = 4.8f; + mWalkDir = 1; + break; - case 6: - setBck(30, 0, 3.0f, 1.0f); - break; + case ACTION2_5_e: + if ((u8)checkBck(44) == 0) { + setBck(44, 2, 10.0f, 1.0f); + } - case 7: - mpModelMorf2->setPlaySpeed(1.0f); - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - break; + current.angle.y = shape_angle.y + -0x4000; + mTimer1 = cM_rndFX(20.0f) + 90.0f; + speedF = 4.8f; + mWalkDir = 1; + break; - case 8: - case 17: - setBck(32, 0, 3.0f, 1.0f); - break; + case ACTION2_6_e: + setBck(30, 0, 3.0f, 1.0f); + break; - case 9: - setBck(33, 0, 5.0f, 1.0f); - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - break; + case ACTION2_7_e: + mpModelMorf2->setPlaySpeed(1.0f); + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + break; - case 10: - case 11: - setBck(36, 0, 3.0f, 1.0f); - break; + case ACTION2_8_e: + case ACTION2_17_e: + setBck(32, 0, 3.0f, 1.0f); + break; - case 12: - setBck(37, 0, 3.0f, 1.0f); - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - speedF = 15.0f; - break; + case ACTION2_9_e: + setBck(33, 0, 5.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + break; - case 13: - case 14: - setBck(34, 0, 3.0f, 1.0f); - break; + case ACTION2_10_e: + case ACTION2_11_e: + setBck(36, 0, 3.0f, 1.0f); + break; - case 15: - setBck(35, 0, 3.0f, 1.0f); - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - speedF = 15.0f; - break; + case ACTION2_12_e: + setBck(37, 0, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + speedF = 15.0f; + break; - case 16: - setBck(45, 2, 10.0f, 1.0f); - speedF = 4.7; - field_0xa6c = 30; + case ACTION2_13_e: + case ACTION2_14_e: + setBck(34, 0, 3.0f, 1.0f); + break; + + case ACTION2_15_e: + setBck(35, 0, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + speedF = 15.0f; + break; + + case ACTION2_16_e: + setBck(45, 2, 10.0f, 1.0f); + speedF = 4.7; + mTimer1 = 30; } } /* 80627CBC-80627D3C 0091BC 0080+00 4/4 0/0 0/0 .text checkAttackAble__8daB_TN_cFv */ bool daB_TN_c::checkAttackAble() { - if (fopAcM_searchPlayerDistance(this) < 500.0f) { - if (abs((s16)(fopAcM_searchPlayerAngleY(this) - shape_angle.y)) < 0x3000) { - return true; - } + if (fopAcM_searchPlayerDistance(this) < 500.0f && + abs((s16)(fopAcM_searchPlayerAngleY(this) - shape_angle.y)) < 0x3000) + { + return true; } return false; @@ -3227,66 +3144,69 @@ bool daB_TN_c::checkAttackAble() { /* 80627D3C-8062868C 00923C 0950+00 1/1 0/0 0/0 .text checkNextMove__8daB_TN_cFv */ bool daB_TN_c::checkNextMove() { - // NONMATCHING daPy_py_c* player = daPy_getPlayerActorClass(); f32 mPlayerDistance = fopAcM_searchPlayerDistance(this); s16 mPlayerAngleY = fopAcM_searchPlayerAngleY(this) - shape_angle.y; s16 isAttackAble = checkAttackAble(); + int iVar1 = 0; s16 sVar7 = current.angle.y; fopAc_ac_c* mActor = (fopAc_ac_c*)fpcM_Search(s_obj_sub, this); - int iVar1; if (mActor != NULL) { sVar7 = fopAcM_searchActorAngleY(this, mActor); + iVar1 = 1; } - if (dComIfGp_checkPlayerStatus0(0, 0x4000) && player->getHookshotTopPos()) { - if (player->getHookshotTopPos()->absXZ(current.pos) < 300.0f) { - sVar7 = cLib_targetAngleY(¤t.pos, player->getHookshotTopPos()); - iVar1 = 1; - } + if (dComIfGp_checkPlayerStatus0(0, 0x4000) && player->getHookshotTopPos() && + player->getHookshotTopPos()->absXZ(current.pos) < 300.0f) + { + sVar7 = cLib_targetAngleY(¤t.pos, player->getHookshotTopPos()); + iVar1 = 1; } - if (player->getIronBallCenterPos() && !player->checkIronBallGroundStop()) { - if (player->getIronBallCenterPos()->absXZ(current.pos) < 300.0f) { - sVar7 = cLib_targetAngleY(¤t.pos, player->getIronBallCenterPos()); - iVar1 = 1; - } + if (player->getIronBallCenterPos() && !player->checkIronBallGroundStop() && + player->getIronBallCenterPos()->absXZ(current.pos) < 300.0f) + { + sVar7 = cLib_targetAngleY(¤t.pos, player->getIronBallCenterPos()); + iVar1 = 1; } - if (daPy_py_c::getThrowBoomerangActor()) { - if (daPy_py_c::getThrowBoomerangActor()->current.pos.absXZ(current.pos) < 300.0f) { - sVar7 = cLib_targetAngleY(¤t.pos, &daPy_py_c::getThrowBoomerangActor()->current.pos); - iVar1 = 1; - } + if (daPy_py_c::getThrowBoomerangActor() && + daPy_py_c::getThrowBoomerangActor()->current.pos.absXZ(current.pos) < 300.0f) + { + sVar7 = cLib_targetAngleY(¤t.pos, &daPy_py_c::getThrowBoomerangActor()->current.pos); + iVar1 = 1; } if (iVar1) { - if (shape_angle.y - sVar7 < 0) { + if ((s16)(sVar7 - shape_angle.y) < 0) { initChaseL(13); } else { initChaseL(10); } - field_0xa84 = 10; + mTimer7 = 10; return 1; } if (isAttackAble) { if (player->checkFrontRoll() && mPlayerDistance < 250.0f) { - setActionMode(11, 10); + setActionMode(ACT_ATTACKSHIELDL, ACTION2_10_e); return 1; } if (player->getCutType() != daPy_py_c::CUT_TYPE_JUMP && mPlayerDistance < 200.0f) { - setActionMode(11, 0); + setActionMode(ACT_ATTACKSHIELDL, ACTION2_0_e); return 1; } } - if ((player->getCutType() == daPy_py_c::CUT_TYPE_JUMP && !player->checkCutJumpCancelTurn()) && mPlayerDistance < 350.0f) { + if (player->getCutType() == daPy_py_c::CUT_TYPE_JUMP && !player->checkCutJumpCancelTurn() && + mPlayerDistance < 350.0f) + { if ((field_0xa9d & 1) == 0) { field_0xa9d |= 1; + if (player->speedF < 28.0f) { initChaseL(6); } else { @@ -3296,13 +3216,13 @@ bool daB_TN_c::checkNextMove() { initChaseL(11); } - field_0xa84 = 10; + mTimer7 = 10; } + return 1; } - - return 1; + } else { - field_0xa9d &= 254; + field_0xa9d &= ~0x1; } if (checkMoveArea() == 3) { @@ -3312,23 +3232,25 @@ bool daB_TN_c::checkNextMove() { if (player->checkCutCharge() && isAttackAble) { if ((field_0xa9d & 2) == 0) { field_0xa9d |= 2; - setActionMode(10, 10); + setActionMode(ACT_ATTACKL, ACTION2_10_e); return 1; } } else { - field_0xa9d &= 0xfd; + field_0xa9d &= ~0x2; } - if (field_0xa70 == 0 && abs(mPlayerAngleY) < 0x3000 && mPlayerDistance > 450.0f && mPlayerAngleY < 700.0f) { + if (mTimer3 == 0 && abs(mPlayerAngleY) < 0x3000 && mPlayerDistance > 450.0f && + mPlayerDistance < 700.0f) + { if (cM_rnd() < 0.5f) { initChaseL(8); return 1; } - if (field_0xaa5 == 1) { - field_0xa70 = cM_rndF(30.0f) + 10.0f; + if (mType == 1) { + mTimer3 = cM_rndF(30.0f) + 10.0f; } else { - field_0xa70 = 10; + mTimer3 = 10; } } @@ -3337,32 +3259,32 @@ bool daB_TN_c::checkNextMove() { field_0xa9d |= 4; if (cM_rnd() < 0.4f && mPlayerDistance < 450.0f && mPlayerDistance > 200.0f) { if (cM_rnd() < 0.5f) { - initChaseL(11); + initChaseL(0xe); } else { - initChaseL(14); + initChaseL(0xb); } - field_0xa84 = 10; + mTimer7 = 10; return 1; } } } else { - field_0xa9d &= 251; + field_0xa9d &= ~0x4; } if (isAttackAble && mPlayerDistance < 350.0f) { if (mPlayerDistance < 250.0f) { - if (field_0xaa5 == 1) { - if (field_0xa70 > 90) { - field_0xa70 = cM_rndF(30.0f) + 60.0f; + if (mType == 1) { + if (mTimer3 > 90) { + mTimer3 = cM_rndF(30.0f) + 60.0f; } - } else if (field_0xa70 > 30) { - field_0xa70 = 30; + } else if (mTimer3 > 30) { + mTimer3 = 30; } } - if (field_0xa70 == 0 && checkNormalAttackAble()) { - setActionMode(10, 0); + if (mTimer3 == 0 && checkNormalAttackAble()) { + setActionMode(ACT_ATTACKL, ACTION2_0_e); return 1; } } @@ -3373,12 +3295,12 @@ bool daB_TN_c::checkNextMove() { return 1; } - if (field_0xa70 > 5) { - field_0xa70 = 5; + if (mTimer3 > 5) { + mTimer3 = 5; } - if (field_0xa70 == 0 && checkNormalAttackAble()) { - setActionMode(10, 0); + if (mTimer3 == 0 && checkNormalAttackAble()) { + setActionMode(ACT_ATTACKL, ACTION2_0_e); return 1; } } @@ -3388,7 +3310,6 @@ bool daB_TN_c::checkNextMove() { /* 8062868C-806292F8 009B8C 0C6C+00 2/1 0/0 0/0 .text executeChaseL__8daB_TN_cFv */ void daB_TN_c::executeChaseL() { - // NONMATCHING f32 mPlayerDistance = fopAcM_searchPlayerDistance(this); s16 mPlayerAngleY = fopAcM_searchPlayerAngleY(this); daPy_py_c* player = daPy_getPlayerActorClass(); @@ -3400,61 +3321,32 @@ void daB_TN_c::executeChaseL() { } switch (mActionMode2) { - case 0: - field_0xa9d = 0; - // fallthrough - case 1: - speedF = 0.0f; - if (checkMoveArea()) { - if (cM_rnd() < 0.5f) { - initChaseL(4); - } else { - initChaseL(5); - } + case ACTION2_0_e: + field_0xa9d = 0; + // [[fallthrough]] + + case ACTION2_1_e: + speedF = 0.0f; + if (checkMoveArea()) { + if (cM_rnd() < 0.5f) { + initChaseL(4); } else { - if (mPlayerDistance > 800.0f) { - initChaseL(3); - } else { - if (cM_rnd() < 0.5f) { - initChaseL(4); - } else { - initChaseL(5); - } - } + initChaseL(5); } + } else if (mPlayerDistance > 800.0f) { + initChaseL(3); + } else if (cM_rnd() < 0.5f) { + initChaseL(4); + } else { + initChaseL(5); + } - setSwordAtBit(0); - field_0xa91 = 1; - break; + setSwordAtBit(0); + field_0xa91 = true; + break; - case 3: - if (checkNextMove() == 0) { - if (mpModelMorf2->checkFrame(16.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } - - if (mpModelMorf2->checkFrame(33.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x400, 16); - current.angle.y = shape_angle.y; - - if (mPlayerDistance < 700.0f) { - initChaseL(1); - } - - if (checkMoveArea() != 0) { - if (cM_rnd() < 0.5f) { - initChaseL(4); - } else { - initChaseL(5); - } - } - } - break; - - case 16: + case ACTION2_3_e: + if (checkNextMove() == 0) { if (mpModelMorf2->checkFrame(16.0f)) { mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); } @@ -3466,219 +3358,241 @@ void daB_TN_c::executeChaseL() { cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x400, 16); current.angle.y = shape_angle.y; - if (field_0xa6c == 0) { - initChaseL(17); - } - break; - - case 2: - if (field_0xa6c == 0) { + if (mPlayerDistance < 700.0f) { initChaseL(1); } - break; - case 4: - if (checkNextMove() == 0) { - if (mpModelMorf2->checkFrame(13.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } - - if (mpModelMorf2->checkFrame(27.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - - field_0xa94 = 1; - setWalkDir(); - if (mWalkDir == 0) { - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY + -0x2000, 4, 0x400, 16); - } else if (mWalkDir == 1) { - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x400, 16); + if (checkMoveArea()) { + if (cM_rnd() < 0.5f) { + initChaseL(4); } else { - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY + 0x2000, 4, 0x400, 16); - } - - current.angle.y = shape_angle.y + 0x4000; - - if (field_0xa6c == 0) { - initChaseL(1); + initChaseL(5); } } - break; + } + break; - case 5: - if (!checkNextMove()) { - if (mpModelMorf2->checkFrame(13.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } + case ACTION2_16_e: + if (mpModelMorf2->checkFrame(16.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } - if (mpModelMorf2->checkFrame(27.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } + if (mpModelMorf2->checkFrame(33.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } - field_0xa94 = 1; - setWalkDir(); - if (mWalkDir == 0) { - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY + 0x2000, 4, 0x400, 16); - } else if (mWalkDir == 1) { - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x400, 16); - } else { - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY + -0x2000, 4, 0x400, 16); - } + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x400, 16); + current.angle.y = shape_angle.y; - current.angle.y = shape_angle.y + -0x4000; + if (mTimer1 == 0) { + initChaseL(17); + } + break; - if (field_0xa6c == 0) { - initChaseL(1); - } + case ACTION2_2_e: + if (mTimer1 == 0) { + initChaseL(1); + } + break; + + case ACTION2_4_e: + if (checkNextMove() == 0) { + if (mpModelMorf2->checkFrame(13.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); } - break; - case 6: - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x400, 16); - current.angle.y = shape_angle.y + 0x8000; - - if (checkBck(30)) { - if (mpModelMorf2->checkFrame(4.0f)) { - speedF = 50.0f; - speed.y = 19.0f; - gravity = -4.0f; - } - - if (mpModelMorf2->checkFrame(6.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_JUMP, -1); - } - - if (mpModelMorf2->isStop()) { - setBck(31, 0, 5.0f, 0.0f); - } - } else { - if (mAcch.ChkGroundHit()) { - initChaseL(7); - } - } - break; - - case 7: - cLib_chaseF(&speedF, 0.0f, 6.0f); - - if (mpModelMorf2->checkFrame(4.0f)) { + if (mpModelMorf2->checkFrame(27.0f)) { mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); } - if (mpModelMorf2->isStop()) { - if ((!checkAttackAble() || field_0xaaa != 0) || !checkNormalAttackAble()) { - initChaseL(1); - } else if (mPlayerDistance < 200.0f) { - setActionMode(11, 0); - } else { - setActionMode(10, 10); - } + mUpdateWaistAngle = true; + setWalkDir(); + if (mWalkDir == 0) { + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY + -0x2000, 4, 0x400, 16); + } else if (mWalkDir == 1) { + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x400, 16); + } else { + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY + 0x2000, 4, 0x400, 16); } - break; - case 8: - case 17: - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x400, 16); - current.angle.y = shape_angle.y; - + current.angle.y = shape_angle.y + 0x4000; + + if (mTimer1 == 0) { + initChaseL(1); + } + } + break; + + case ACTION2_5_e: + if (!checkNextMove()) { + if (mpModelMorf2->checkFrame(13.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } + + if (mpModelMorf2->checkFrame(27.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + mUpdateWaistAngle = true; + setWalkDir(); + if (mWalkDir == 0) { + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY + 0x2000, 4, 0x400, 16); + } else if (mWalkDir == 1) { + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x400, 16); + } else { + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY + -0x2000, 4, 0x400, 16); + } + + current.angle.y = shape_angle.y + -0x4000; + + if (mTimer1 == 0) { + initChaseL(1); + } + } + break; + + case ACTION2_6_e: + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x400, 16); + current.angle.y = shape_angle.y + 0x8000; + + if ((u8)checkBck(30)) { if (mpModelMorf2->checkFrame(4.0f)) { - if (mActionMode2 == 8) { - speedF = 35.0f; - speed.y = 4.0f; - } else { - speedF = 45.0f; - speed.y = 5.0f; - } - - gravity = -1.0f; + speedF = 50.0f; + speed.y = 19.0f; + gravity = -4.0f; } if (mpModelMorf2->checkFrame(6.0f)) { mSound.startCreatureVoice(Z2SE_EN_TN_V_JUMP, -1); } - if (mpModelMorf2->isStop() && mAcch.ChkGroundHit()) { - if (!checkAttackAble() || !checkNormalAttackAble()) { - initChaseL(9); - } else { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - - if (mPlayerDistance < 200.0f) { - setActionMode(11, 0); - } else { - if (cM_rnd() < 0.5f) { - setActionMode(10, 10); - } else { - setActionMode(10, 0); - } - } - } - } - break; - - case 9: - cLib_chaseF(&speedF, 0.0f, 7.0f); - - if (mpModelMorf2->checkFrame(4.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - if (mpModelMorf2->isStop()) { + setBck(31, 0, 5.0f, 0.0f); + } + } else if (mAcch.ChkGroundHit()) { + initChaseL(7); + } + break; + + case ACTION2_7_e: + cLib_chaseF(&speedF, 0.0f, 6.0f); + + if (mpModelMorf2->checkFrame(4.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + if (mpModelMorf2->isStop()) { + if (!checkAttackAble() || mTimer13 != 0 || !checkNormalAttackAble()) { initChaseL(1); - } - break; - - case 10: - case 11: - case 13: - case 14: - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x400, 16); - - if (mActionMode2 == 11 || mActionMode2 == 10) { - current.angle.y = shape_angle.y + -0x4000; + } else if (mPlayerDistance < 200.0f) { + setActionMode(ACT_ATTACKSHIELDL, ACTION2_0_e); } else { - current.angle.y = shape_angle.y + 0x4000; + setActionMode(ACT_ATTACKL, ACTION2_10_e); } + } + break; - if (mpModelMorf2->checkFrame(7.0f)) { - speedF = 33.0f; - } else if (mpModelMorf2->checkFrame(6.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_JUMP, -1); + case ACTION2_8_e: + case ACTION2_17_e: + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x400, 16); + current.angle.y = shape_angle.y; + + if (mpModelMorf2->checkFrame(4.0f)) { + if (mActionMode2 == ACTION2_8_e) { speedF = 35.0f; - } else if (mpModelMorf2->checkFrame(5.0f)) { - speedF = 40.0f; - } else if (mpModelMorf2->checkFrame(4.0f)) { + speed.y = 4.0f; + } else { speedF = 45.0f; speed.y = 5.0f; - gravity = -1.0f; } - if (mpModelMorf2->isStop() && mAcch.ChkGroundHit()) { - if (mActionMode2 == 11 || mActionMode2 == 10) { - initChaseL(12); + gravity = -1.0f; + } + + if (mpModelMorf2->checkFrame(6.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_JUMP, -1); + } + + if (mpModelMorf2->isStop() && mAcch.ChkGroundHit()) { + if (!checkAttackAble() || !checkNormalAttackAble()) { + initChaseL(9); + } else { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + + if (mPlayerDistance < 200.0f) { + setActionMode(ACT_ATTACKSHIELDL, ACTION2_0_e); + } else if (cM_rnd() < 0.5f) { + setActionMode(ACT_ATTACKL, ACTION2_10_e); } else { - initChaseL(15); + setActionMode(ACT_ATTACKL, ACTION2_0_e); } } - break; + } + break; - case 12: - case 15: - if (mpModelMorf2->checkFrame(5.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + case ACTION2_9_e: + cLib_chaseF(&speedF, 0.0f, 7.0f); + + if (mpModelMorf2->checkFrame(4.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + if (mpModelMorf2->isStop()) { + initChaseL(1); + } + break; + + case ACTION2_10_e: + case ACTION2_11_e: + case ACTION2_13_e: + case ACTION2_14_e: + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x400, 16); + + if (mActionMode2 == ACTION2_11_e || mActionMode2 == ACTION2_10_e) { + current.angle.y = shape_angle.y + -0x4000; + } else { + current.angle.y = shape_angle.y + 0x4000; + } + + if (mpModelMorf2->checkFrame(7.0f)) { + speedF = 33.0f; + } else if (mpModelMorf2->checkFrame(6.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_JUMP, -1); + speedF = 35.0f; + } else if (mpModelMorf2->checkFrame(5.0f)) { + speedF = 40.0f; + } else if (mpModelMorf2->checkFrame(4.0f)) { + speedF = 45.0f; + speed.y = 5.0f; + gravity = -1.0f; + } + + if (mpModelMorf2->isStop() && mAcch.ChkGroundHit()) { + if (mActionMode2 == ACTION2_11_e || mActionMode2 == ACTION2_10_e) { + initChaseL(12); + } else { + initChaseL(15); } + } + break; - cLib_chaseF(&speedF, 0.0f, 7.0f); + case ACTION2_12_e: + case ACTION2_15_e: + if (mpModelMorf2->checkFrame(5.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } - if (mpModelMorf2->isStop()) { - if (!checkAttackAble() || !checkNormalAttackAble()) { - initChaseL(1); - } else if (mPlayerDistance < 200.0f) { - setActionMode(11, 0); - } else { - setActionMode(10, 10); - } + cLib_chaseF(&speedF, 0.0f, 7.0f); + + if (mpModelMorf2->isStop()) { + if (!checkAttackAble() || !checkNormalAttackAble()) { + initChaseL(1); + } else if (mPlayerDistance < 200.0f) { + setActionMode(ACT_ATTACKSHIELDL, ACTION2_0_e); + } else { + setActionMode(ACT_ATTACKL, ACTION2_10_e); } + } } } @@ -3691,272 +3605,270 @@ void daB_TN_c::executeAttackL() { current.angle.y = shape_angle.y; switch (mActionMode2) { - case 0: - case 20: - case 10: - field_0xa6c = 0; - field_0xa9b = mActionMode2; + case ACTION2_0_e: + case ACTION2_20_e: + case ACTION2_10_e: + mTimer1 = 0; + mActionMode2Copy = mActionMode2; - if (daPy_getPlayerActorClass()->checkNowWolf()) { - field_0xa70 = l_HIO.field_0x10; + if (daPy_getPlayerActorClass()->checkNowWolf()) { + mTimer3 = l_HIO.mTimer3Wolf; + } else if (mType == 0) { + mTimer3 = l_HIO.mTimer3HumanType0; + } else { + mTimer3 = l_HIO.mTimer3HumanType1; + } + + if (mPlayerDistance < 350.0f) { + if (mActionMode2Copy == ACTION2_20_e) { + mActionMode2 = ACTION2_4_e; + setBck(42, 2, 3.0f, 1.0f); + mTimer1 = 3; } else { - if (field_0xaa5 == 0) { - field_0xa70 = l_HIO.field_0x14; - } else { - field_0xa70 = l_HIO.field_0x18; - } + mActionMode2 = ACTION2_2_e; + setBck(21, 0, 3.0f, 1.0f); } - - if (mPlayerDistance < 350.0f) { - if (field_0xa9b == 20) { - mActionMode2 = 4; - setBck(42, 2, 3.0f, 1.0f); - field_0xa6c = 3; + } else { + if (mActionMode2Copy == ACTION2_20_e || mActionMode2Copy == ACTION2_10_e) { + mActionMode2 = ACTION2_3_e; + setBck(42, 2, 3.0f, 1.0f); + if (mActionMode2Copy == ACTION2_10_e) { + mTimer1 = 5; } else { - mActionMode2 = 2; - setBck(21, 0, 3.0f, 1.0f); + mTimer1 = 10; } } else { - if (field_0xa9b == 20 || field_0xa9b == 10) { - mActionMode2 = 3; - setBck(42, 2, 3.0f, 1.0f); - if (field_0xa9b == 10) { - field_0xa6c = 5; - } else { - field_0xa6c = 10; - } - } else { - mActionMode2 = 1; - setBck(20, 0, 3.0f, 1.0f); - } + mActionMode2 = ACTION2_1_e; + setBck(20, 0, 3.0f, 1.0f); } + } - mWalkDir = 0; - break; + mWalkDir = 0; + break; - case 11: - field_0xa9b = mActionMode2; - if (daPy_getPlayerActorClass()->checkNowWolf()) { - field_0xa70 = l_HIO.field_0x10; - } else { - if (field_0xaa5 == 0) { - field_0xa70 = l_HIO.field_0x14; - } else { - field_0xa70 = l_HIO.field_0x18; - } + case ACTION2_11_e: + mActionMode2Copy = mActionMode2; + if (daPy_getPlayerActorClass()->checkNowWolf()) { + mTimer3 = l_HIO.mTimer3Wolf; + } else if (mType == 0) { + mTimer3 = l_HIO.mTimer3HumanType0; + } else { + mTimer3 = l_HIO.mTimer3HumanType1; + } + + if (cM_rnd() < 0.5f) { + mActionMode2 = ACTION2_2_e; + setBck(21, 0, 10.0f, 1.0f); + } else { + mActionMode2 = ACTION2_1_e; + setBck(20, 0, 7.0f, 1.0f); + } + + mWalkDir = 0; + return; + + case ACTION2_1_e: + if (mpModelMorf2->checkFrame(7.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_SWD_S_TRST, 0, -1); + } + + if (mpModelMorf2->checkFrame(8.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_THRUST, -1); + } + + if (mpModelMorf2->checkFrame(10.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_L, 0, -1); + } + + if (mpModelMorf2->checkFrame(15.0f)) { + mActionMode2 = ACTION2_101_e; + mTimer1 = l_HIO.mTimer1Action1; + mpModelMorf2->setPlaySpeed(0.0f); + } + + case ACTION2_101_e: + if (mActionMode2Copy != 0 && mpModelMorf2->getFrame() < 8.0f) { + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x800, 16); + } + + if (mpModelMorf2->checkFrame(35.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + if (mpModelMorf2->checkFrame(7.0f)) { + setSwordAtBit(1); + } else if (mpModelMorf2->checkFrame(14.0f)) { + setSwordAtBit(0); + } + + if (mpModelMorf2->checkFrame(8.0f)) { + field_0xa91 = false; + } else if (mpModelMorf2->checkFrame(30.0f)) { + field_0xa91 = true; + } + + if (mActionMode2 == ACTION2_101_e && mTimer1 == 0) { + mpModelMorf2->setPlaySpeed(1.0f); + if (mpModelMorf2->isStop()) { + setActionMode(ACT_CHASEL, ACTION2_0_e); } + } + break; - if (cM_rnd() < 0.5f) { - mActionMode2 = 2; - setBck(21, 0, 10.0f, 1.0f); - } else { - mActionMode2 = 1; - setBck(20, 0, 7.0f, 1.0f); - } - - mWalkDir = 0; - return; - - case 1: - if (mpModelMorf2->checkFrame(7.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_SWD_S_TRST, 0, -1); - } - - if (mpModelMorf2->checkFrame(8.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_THRUST, -1); - } - - if (mpModelMorf2->checkFrame(10.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_L, 0, -1); - } - - if (mpModelMorf2->checkFrame(15.0f)) { - mActionMode2 = 101; - field_0xa6c = l_HIO.field_0x28; + case ACTION2_2_e: + if (mActionMode2Copy != 0) { + if (mpModelMorf2->checkFrame(40.0f)) { + mActionMode2 = ACTION2_102_e; + mTimer1 = l_HIO.mTimer1Action2; mpModelMorf2->setPlaySpeed(0.0f); } + } else { + mActionMode2 = ACTION2_102_e; + } + // [[fallthrough]] - case 101: - if (field_0xa9b != 0 && mpModelMorf2->getFrame() < 8.0f) { - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x800, 16); + case ACTION2_102_e: + if (mpModelMorf2->checkFrame(14.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_V_2_SWD_1, 0, -1); + } else if (mpModelMorf2->checkFrame(15.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_SWD_S, 0, -1); + } else if (mpModelMorf2->checkFrame(25.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_2_SWD_2, -1); + } else if (mpModelMorf2->checkFrame(26.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_SWD_S, 0, -1); + } else if (mpModelMorf2->checkFrame(28.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_L, 0, -1); + } else if (mpModelMorf2->checkFrame(52.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + if (mWalkDir != 0 && mpModelMorf2->getFrame() < 10.0f) { + speedF = 10.0f; + } + + if (mpModelMorf2->getFrame() < 20.0f) { + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 8, 0x400, 16); + } + + if (mpModelMorf2->checkFrame(13.0f)) { + setSwordAtBit(1); + setSwordAtBreak(0); + } else if (mpModelMorf2->checkFrame(38.0f)) { + setSwordAtBit(0); + setSwordAtBreak(1); + } + + if (mActionMode2Copy == ACTION2_0_e) { + if (mpModelMorf2->checkFrame(20.0f)) { + field_0xa91 = false; + } else if (mpModelMorf2->checkFrame(53.0f)) { + field_0xa91 = true; + } + } + + if (mActionMode2Copy == ACTION2_0_e && mPlayerDistance < 800.0f && + daPy_getPlayerActorClass()->getDamageWaitTimer() == 0) + { + if (mpModelMorf2->checkFrame(30.0f)) { + mWalkDir = 10; } - if (mpModelMorf2->checkFrame(35.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - - if (mpModelMorf2->checkFrame(7.0f)) { - setSwordAtBit(1); - } else if (mpModelMorf2->checkFrame(14.0f)) { - setSwordAtBit(0); - } - - if (mpModelMorf2->checkFrame(8.0f)) { - field_0xa91 = 0; - } else if (mpModelMorf2->checkFrame(30.0f)) { - field_0xa91 = 1; - } - - if (mActionMode2 == 101 && field_0xa6c == 0) { - mpModelMorf2->setPlaySpeed(1.0f); - if (mpModelMorf2->isStop()) { - setActionMode(9, 0); - } - } - break; - - case 2: - if (field_0xa9b != 0) { - if (mpModelMorf2->checkFrame(40.0f)) { - mActionMode2 = 102; - field_0xa6c = l_HIO.field_0x2c; - mpModelMorf2->setPlaySpeed(0.0f); - } - } else { - mActionMode2 = 102; - } - // fallthrough - case 102: - if (mpModelMorf2->checkFrame(14.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_V_2_SWD_1, 0, -1); - } else if (mpModelMorf2->checkFrame(15.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_SWD_S, 0, -1); - } else if (mpModelMorf2->checkFrame(25.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_2_SWD_2, -1); - } else if (mpModelMorf2->checkFrame(26.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_SWD_S, 0, -1); - } else if (mpModelMorf2->checkFrame(28.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_L, 0, -1); - } else if (mpModelMorf2->checkFrame(52.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - - if (mWalkDir != 0 && mpModelMorf2->getFrame() < 10.0f) { - speedF = 10.0f; - } - - if (mpModelMorf2->getFrame() < 20.0f) { - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 8, 0x400, 16); - } - - if (mpModelMorf2->checkFrame(13.0f)) { - setSwordAtBit(1); - setSwordAtBreak(0); - } else if (mpModelMorf2->checkFrame(38.0f)) { + if (mpModelMorf2->checkFrame(41.0f) && mWalkDir == 10) { + setBck(20, 0, 5.0f, 1.0f); setSwordAtBit(0); setSwordAtBreak(1); + mActionMode2 = ACTION2_1_e; } + } - if (field_0xa9b == 0) { - if (mpModelMorf2->checkFrame(20.0f)) { - field_0xa91 = 0; - } else if (mpModelMorf2->checkFrame(53.0f)) { - field_0xa91 = 1; - } - } - - if (field_0xa9b == 0 && mPlayerDistance < 800.0f && daPy_getPlayerActorClass()->getDamageWaitTimer() == 0) { - if (mpModelMorf2->checkFrame(30.0f)) { - mWalkDir = 10; - } - - if (mpModelMorf2->checkFrame(41.0f) && mWalkDir == 10) { - setBck(20, 0, 5.0f, 1.0f); - setSwordAtBit(0); - setSwordAtBreak(1); - mActionMode2 = 1; - } - } - - if (mActionMode2 != 102) { - return; - } - - if (field_0xa6c != 0) { - return; - } - - mpModelMorf2->setPlaySpeed(1.0f); - if (!mpModelMorf2->isStop()) { - return; - } - - setActionMode(9, 0); + if (mActionMode2 != 102) { return; + } - case 3: - if (field_0xa6c != 0) { - return; - } - - mActionMode2 = 1; - setBck(20, 0, 3.0f, 1.0f); + if (mTimer1 != 0) { return; + } - case 4: - if (field_0xa6c != 0) { - return; - } - - mActionMode2 = 2; - setBck(21, 0, 3.0f, 1.0f); + mpModelMorf2->setPlaySpeed(1.0f); + if (!mpModelMorf2->isStop()) { return; + } + + setActionMode(ACT_CHASEL, ACTION2_0_e); + return; + + case ACTION2_3_e: + if (mTimer1 != 0) { + return; + } + + mActionMode2 = ACTION2_1_e; + setBck(20, 0, 3.0f, 1.0f); + return; + + case ACTION2_4_e: + if (mTimer1 != 0) { + return; + } + + mActionMode2 = ACTION2_2_e; + setBck(21, 0, 3.0f, 1.0f); + return; } } -/* 80629D20-80629FB0 00B220 0290+00 1/1 0/0 0/0 .text executeAttackShieldL__8daB_TN_cFv */ +/* 80629D20-80629FB0 00B220 0290+00 1/1 0/0 0/0 .text executeAttackShieldL__8daB_TN_cFv + */ void daB_TN_c::executeAttackShieldL() { s16 mPlayerAngleY = fopAcM_searchPlayerAngleY(this); fopAcM_searchPlayerDistance(this); switch (mActionMode2) { - case 10: - case 0: - field_0xa9b = mActionMode2; - if (daPy_getPlayerActorClass()->checkNowWolf()) { - field_0xa70 = l_HIO.field_0x10; + case ACTION2_10_e: + case ACTION2_0_e: + mActionMode2Copy = mActionMode2; + if (daPy_getPlayerActorClass()->checkNowWolf()) { + mTimer3 = l_HIO.mTimer3Wolf; + } else if (mType == 0) { + mTimer3 = l_HIO.mTimer3HumanType0; + } else { + mTimer3 = l_HIO.mTimer3HumanType1; + } + + speedF = 0.0f; + setBck(22, 0, 3.0f, 1.0f); + mActionMode2 = ACTION2_1_e; + break; + + case ACTION2_1_e: + if (mpModelMorf2->checkFrame(8.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_KICK, -1); + } + + if (mpModelMorf2->checkFrame(26.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } + + if (mpModelMorf2->getFrame() < 10.0f) { + cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x800, 16); + } + + if (mpModelMorf2->checkFrame(8.0f)) { + mSphC.OnAtSetBit(); + } + + if (mpModelMorf2->checkFrame(12.0f)) { + mSphC.OffAtSetBit(); + } + + if (mpModelMorf2->isStop()) { + if (checkAttackAble() && checkNormalAttackAble()) { + setActionMode(ACT_ATTACKL, ACTION2_20_e); } else { - if (field_0xaa5 == 0) { - field_0xa70 = l_HIO.field_0x14; - } else { - field_0xa70 = l_HIO.field_0x18; - } + setActionMode(ACT_CHASEL, ACTION2_0_e); } - - speedF = 0.0f; - setBck(22, 0, 3.0f, 1.0f); - mActionMode2 = 1; - break; - - case 1: - if (mpModelMorf2->checkFrame(8.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_KICK, -1); - } - - if (mpModelMorf2->checkFrame(26.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } - - if (mpModelMorf2->getFrame() < 10.0f) { - cLib_addCalcAngleS(&shape_angle.y, mPlayerAngleY, 4, 0x800, 16); - } - - if (mpModelMorf2->checkFrame(8.0f)) { - field_0x3618.OnAtSetBit(); - } - - if (mpModelMorf2->checkFrame(12.0f)) { - field_0x3618.OffAtSetBit(); - } - - if (mpModelMorf2->isStop()) { - if (checkAttackAble() && checkNormalAttackAble()) { - setActionMode(10, 20); - } else { - setActionMode(9, 0); - } - } - break; + } + break; } } @@ -3967,109 +3879,109 @@ void daB_TN_c::executeGuardL() { f32 mPlayerDistance = fopAcM_searchPlayerDistance(this); switch (mActionMode2) { - case 0: - case 11: - case 10: - setSwordAtBit(0); - setSwordAtBreak(1); - field_0x3618.OffAtSetBit(); + case ACTION2_0_e: + case ACTION2_11_e: + case ACTION2_10_e: + setSwordAtBit(0); + setSwordAtBreak(1); + mSphC.OffAtSetBit(); + speedF = 0.0f; + + if (mActionMode2 == ACTION2_0_e) { + field_0xa91 = true; + + u32 mCutType = getCutType(); + if ((mCutType & 16) != 0) { + setBck(28, 0, 3.0f, 1.0f); + } else if ((mCutType & 32) != 0) { + setBck(29, 0, 3.0f, 1.0f); + } else if (cM_rnd() < 0.5f) { + setBck(28, 0, 3.0f, 1.0f); + } else { + setBck(29, 0, 3.0f, 1.0f); + } + speedF = 0.0f; - - if (mActionMode2 == 0) { - field_0xa91 = 1; - - u32 mCutType = getCutType(); - if ((mCutType & 16) != 0) { - setBck(28, 0, 3.0f, 1.0f); - } else if ((mCutType & 32) != 0) { - setBck(29, 0, 3.0f, 1.0f); - } else if (cM_rnd() < 0.5f) { - setBck(28, 0, 3.0f, 1.0f); - } else { - setBck(29, 0, 3.0f, 1.0f); - } - - speedF = 0.0f; - mActionMode2 = 1; + mActionMode2 = ACTION2_1_e; + } else { + if (mActionMode2 == ACTION2_11_e) { + mActionMode2 = ACTION2_3_e; } else { - if (mActionMode2 == 11) { - mActionMode2 = 3; - } else { - mActionMode2 = 2; - } - - field_0xa91 = 0; - setBck(26, 0, 3.0f, 1.0f); - speedF = 17.0f; + mActionMode2 = ACTION2_2_e; } - if (field_0xaa7 != 0) { - shape_angle.y = fopAcM_searchPlayerAngleY(this); - } else { - cLib_chaseAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 0x2000); - } + field_0xa91 = false; + setBck(26, 0, 3.0f, 1.0f); + speedF = 17.0f; + } - current.angle.y = shape_angle.y + 0x8000; + if (mTimer10 != 0) { + shape_angle.y = fopAcM_searchPlayerAngleY(this); + } else { + cLib_chaseAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 0x2000); + } + + current.angle.y = shape_angle.y + 0x8000; + break; + + case ACTION2_1_e: + field_0xa91 = false; + + if (player->getCutType() != daPy_py_c::CUT_TYPE_HEAD_JUMP && abs(mPlayerAngleY) < 0x3000) { + field_0xa91 = true; + } + + cLib_chaseF(&speedF, 0.0f, 1.0f); + + if (!mpModelMorf2->isStop()) { break; - - case 1: - field_0xa91 = 0; + } - if (player->getCutType() != daPy_py_c::CUT_TYPE_HEAD_JUMP && abs(mPlayerAngleY) < 0x3000) { - field_0xa91 = 1; - } - - cLib_chaseF(&speedF, 0.0f, 1.0f); - - if (!mpModelMorf2->isStop()) { - break; - } - - if (player->getCutType() == daPy_py_c::CUT_TYPE_HEAD_JUMP) { - break; - } - - setActionMode(9, 0); + if (player->getCutType() == daPy_py_c::CUT_TYPE_HEAD_JUMP) { break; + } - case 2: - case 3: - cLib_chaseF(&speedF, 0.0f, 1.0f); - if (abs(mPlayerAngleY) < 0x3000) { - field_0xa91 = 1; - } else { - field_0xa91 = 0; - } + setActionMode(ACT_CHASEL, ACTION2_0_e); + break; - if (mpModelMorf2->checkFrame(4.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_PULL_OUT, -1); - } + case ACTION2_2_e: + case ACTION2_3_e: + cLib_chaseF(&speedF, 0.0f, 1.0f); + if (abs(mPlayerAngleY) < 0x3000) { + field_0xa91 = true; + } else { + field_0xa91 = false; + } - if (mpModelMorf2->checkFrame(37.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } + if (mpModelMorf2->checkFrame(4.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_PULL_OUT, -1); + } - if (mActionMode2 == 3) { - if (!mpModelMorf2->checkFrame(15.0f)) { - break; - } + if (mpModelMorf2->checkFrame(37.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } - field_0xa91 = 1; - if (checkAttackAble() && mPlayerDistance < 200.0f) { - setActionMode(11, 0); - break; - } - - setActionMode(10, 11); + if (mActionMode2 == ACTION2_3_e) { + if (!mpModelMorf2->checkFrame(15.0f)) { break; } - if (!mpModelMorf2->isStop()) { + field_0xa91 = true; + if (checkAttackAble() && mPlayerDistance < 200.0f) { + setActionMode(ACT_ATTACKSHIELDL, ACTION2_0_e); break; } - setActionMode(9, 0); + setActionMode(ACT_ATTACKL, ACTION2_11_e); break; + } + + if (!mpModelMorf2->isStop()) { + break; + } + + setActionMode(ACT_CHASEL, ACTION2_0_e); + break; } } @@ -4078,81 +3990,81 @@ void daB_TN_c::executeDamageL() { s16 mPlayerAngleY = fopAcM_searchPlayerAngleY(this); daPy_py_c* player = daPy_getPlayerActorClass(); - field_0xa91 = 0; + field_0xa91 = false; - if (field_0xaa5 == 0) { + if (mType == 0) { if (daPy_py_c::checkNowWolf()) { - field_0xa91 = 1; + field_0xa91 = true; } - if (field_0xa9f != 0 && player->getCutType() != daPy_py_c::CUT_TYPE_TURN_RIGHT && - player->getCutType() != daPy_py_c::CUT_TYPE_TURN_LEFT) { - field_0xa91 = 1; + if (mCutFlag && player->getCutType() != daPy_py_c::CUT_TYPE_TURN_RIGHT && + player->getCutType() != daPy_py_c::CUT_TYPE_TURN_LEFT) + { + field_0xa91 = true; } - if (field_0xa80 == 0) { - field_0xa91 = 1; - field_0xaa7 = 30; + if (mTimer5 == 0) { + field_0xa91 = true; + mTimer10 = 30; } } else { - field_0xa91 = 0; + field_0xa91 = false; - if (field_0xa80 == 0) { - field_0xa91 = 1; - field_0xaa7 = 30; + if (mTimer5 == 0) { + field_0xa91 = true; + mTimer10 = 30; } - if (field_0xaa7 != 0 || player->checkNowWolf()) { - field_0xa91 = 1; + if (mTimer10 != 0 || player->checkNowWolf()) { + field_0xa91 = true; } } switch (mActionMode2) { - case 0: - case 1: - setSwordAtBit(0); - setSwordAtBit(0); - setSwordAtBreak(1); - field_0x3618.OffAtSetBit(); + case ACTION2_0_e: + case ACTION2_1_e: + setSwordAtBit(0); + setSwordAtBit(0); + setSwordAtBreak(1); + mSphC.OffAtSetBit(); - if (mActionMode2 == 0) { - setBck(23, 0, 3.0f, 1.0f); - } else { - setBck(24, 0, 3.0f, 1.0f); - } + if (mActionMode2 == ACTION2_0_e) { + setBck(23, 0, 3.0f, 1.0f); + } else { + setBck(24, 0, 3.0f, 1.0f); + } - mSound.startCreatureVoice(Z2SE_EN_TN_V_DMG, -1); - speedF = 0.0f; - mActionMode2 += 2; + mSound.startCreatureVoice(Z2SE_EN_TN_V_DMG, -1); + speedF = 0.0f; + mActionMode2 += 2; - cLib_chaseAngleS(&shape_angle.y, mPlayerAngleY, 0x1800); + cLib_chaseAngleS(&shape_angle.y, mPlayerAngleY, 0x1800); - if (field_0xaa5 == 1 && field_0xa9f != 0) { - field_0xa91 = 1; - field_0xaa7 = 40; - } - break; + if (mType == 1 && mCutFlag) { + field_0xa91 = true; + mTimer10 = 40; + } + break; - case 2: - case 3: - if (mpModelMorf2->checkFrame(3.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } + case ACTION2_2_e: + case ACTION2_3_e: + if (mpModelMorf2->checkFrame(3.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } - if (mActionMode2 == 2) { - if (mpModelMorf2->checkFrame(32.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - } else if (mpModelMorf2->checkFrame(35.0f)) { + if (mActionMode2 == ACTION2_2_e) { + if (mpModelMorf2->checkFrame(32.0f)) { mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); } + } else if (mpModelMorf2->checkFrame(35.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } - if (mpModelMorf2->isStop()) { - setActionMode(9, 0); - field_0xa91 = 1; - } + if (mpModelMorf2->isStop()) { + setActionMode(ACT_CHASEL, ACTION2_0_e); + field_0xa91 = true; + } } - } /* 8062A71C-8062A950 00BC1C 0234+00 1/1 0/0 0/0 .text executeYoroke__8daB_TN_cFv */ @@ -4160,229 +4072,234 @@ void daB_TN_c::executeYoroke() { daPy_py_c* player = daPy_getPlayerActorClass(); switch (mActionMode2) { - case 0: - case 1: - if (mActionMode2 == 0) { - setBck(27, 0, 3.0f, 1.0f); + case ACTION2_0_e: + case ACTION2_1_e: + if (mActionMode2 == ACTION2_0_e) { + setBck(27, 0, 3.0f, 1.0f); + } else { + setBck(27, 0, 3.0f, 1.0f); + } + + mActionMode2 = ACTION2_10_e; + setSwordAtBit(0); + setSwordAtBreak(1); + mSphC.OffAtSetBit(); + field_0xa91 = false; + speedF = 0.0f; + mCutJumpStatus = 0; + + if (player->getCutType() == daPy_py_c::CUT_TYPE_JUMP) { + mCutJumpStatus = 1; + } + // [[fallthrough]] + + case ACTION2_10_e: + if (mCutJumpStatus == 1) { + if (!player->checkCutJumpMode()) { + mCutJumpStatus = 2; + } + } else if (mCutJumpStatus == 2 && player->checkCutJumpMode() && + !player->checkCutJumpCancelTurn() && fopAcM_searchPlayerDistance(this) < 350.0f) + { + setActionMode(ACT_CHASEL, ACTION2_0_e); + if (player->speedF < 28.0f) { + initChaseL(6); + break; + } + + if ((s16)(fopAcM_searchPlayerAngleY(this) - shape_angle.y) < 0) { + initChaseL(14); } else { - setBck(27, 0, 3.0f, 1.0f); + initChaseL(11); } - mActionMode2 = 10; - setSwordAtBit(0); - setSwordAtBreak(1); - field_0x3618.OffAtSetBit(); - field_0xa91 = 0; - speedF = 0.0f; - field_0xaab = 0; + mTimer7 = 10; + break; + } - if (player->getCutType() == daPy_py_c::CUT_TYPE_JUMP) { - field_0xaab = 1; - } - // fallthrough - case 10: - if (field_0xaab == 1) { - if (!player->checkCutJumpMode()) { - field_0xaab = 2; - } - } else if (field_0xaab == 2 && player->checkCutJumpMode() && !player->checkCutJumpCancelTurn() && - fopAcM_searchPlayerDistance(this) < 350.0f) { - setActionMode(9, 0); - if (player->speedF < 28.0f) { - initChaseL(6); - break; - } - - if ((s16)(fopAcM_searchPlayerAngleY(this) - shape_angle.y) < 0) { - initChaseL(14); - } else { - initChaseL(11); - } - - field_0xa84 = 10; - break; - } - - if (mpModelMorf2->isStop()) { - setActionMode(9, 0); - field_0xa91 = 1; - } + if (mpModelMorf2->isStop()) { + setActionMode(ACT_CHASEL, ACTION2_0_e); + field_0xa91 = true; + } } } /* 8062A950-8062B344 00BE50 09F4+00 1/1 0/0 0/0 .text executeEnding__8daB_TN_cFv */ void daB_TN_c::executeEnding() { - // NONMATCHING daPy_py_c* player = daPy_getPlayerActorClass(); camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); cXyz sp1c, sp28; switch (mActionMode2) { - case 0: - if (!eventInfo.checkCommandDemoAccrpt()) { - fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); - eventInfo.onCondition(2); - return; - } - - Z2GetAudioMgr()->subBgmStop(); - - if (field_0xaa4 != 0xff) { - dComIfGs_onSwitch(field_0xaa4, fopAcM_GetRoomNo(this)); - } - - camera->mCamera.Stop(); - camera->mCamera.SetTrimSize(3); - - setBck(25, 0, 3.0f, 1.0f); - mSound.startCreatureVoice(Z2SE_EN_TN_V_DMG_2, -1); - mActionMode2 = 100; - speedF = 0.0f; - field_0xa93 = 0; - - for (int i = 0; i < 16; i++) { - if (i != 15) { - field_0x9fc[i] = 7; - } - } - - mCamFovY = 55.0f; - field_0x724 = 450.0f; - field_0x720 = 0x1000; - mCamCenter.set(-5.0f, -217.0f, -61.0f); - mCamEye.set(field_0x724 * cM_ssin(field_0x720), -350.0f, field_0x724 * cM_scos(field_0x720)); - player->changeOriginalDemo(); - sp1c.set(-100.0f, -400.0f, 550.0f); - player->setPlayerPosAndAngle(&sp1c, 0x7000, 0); - player->changeDemoMode(4, 1, 0, 0); - dComIfGs_onStageMiddleBoss(); + case ACTION2_0_e: + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); + eventInfo.onCondition(2); return; + } - case 100: - default: - if (mActionMode2 == 100) { - current.angle.y = 0; - shape_angle.y = 0; - current.pos.set(0.0f, -400.0f, 0.0f); - mActionMode2 = 1; + Z2GetAudioMgr()->subBgmStop(); + + if (mSwitchNo != 0xff) { + dComIfGs_onSwitch(mSwitchNo, fopAcM_GetRoomNo(this)); + } + + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); + + setBck(25, 0, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_TN_V_DMG_2, -1); + mActionMode2 = ACTION2_100_e; + speedF = 0.0f; + mUpdateNeckAngle = false; + + for (int i = 0; i < 16; i++) { + if (i != 15) { + mStates[i] = 7; + } + } + + mCamFovY = 55.0f; + field_0x724 = 450.0f; + field_0x720 = 0x1000; + mCamCenter.set(-5.0f, -217.0f, -61.0f); + mCamEye.set(field_0x724 * cM_ssin(field_0x720), -350.0f, + field_0x724 * cM_scos(field_0x720)); + player->changeOriginalDemo(); + sp1c.set(-100.0f, -400.0f, 550.0f); + player->setPlayerPosAndAngle(&sp1c, 0x7000, 0); + player->changeDemoMode(4, 1, 0, 0); + dComIfGs_onStageMiddleBoss(); + return; + + case ACTION2_1_e: + case ACTION2_2_e: + case ACTION2_100_e: + if (mActionMode2 == ACTION2_100_e) { + current.angle.y = 0; + shape_angle.y = 0; + current.pos.set(0.0f, -400.0f, 0.0f); + mActionMode2 = ACTION2_1_e; + } else { + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(2)); + mDoMtx_stack_c::multVecZero(&mCamCenter); + } + + mCamEye.set(field_0x724 * cM_ssin(field_0x720), -350.0f, + field_0x724 * cM_scos(field_0x720)); + cLib_addCalcAngleS2(&field_0x720, -0x1000, 8, 24); + + if (mActionMode2 == ACTION2_1_e) { + if (mpModelMorf2->checkFrame(212.0f)) { + mStates[15] = 2; + } + + if (mpModelMorf2->checkFrame(6.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } + + if (mpModelMorf2->checkFrame(29.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_ZEIZEI, -1); + } + + if (mpModelMorf2->checkFrame(94.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_KURUSI, -1); + } + + if (mpModelMorf2->checkFrame(103.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + if (mpModelMorf2->checkFrame(121.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } + + if (mpModelMorf2->checkFrame(147.0f)) { + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); + } + + if (mpModelMorf2->checkFrame(168.0f)) { + mSound.startCreatureVoice(Z2SE_EN_TN_V_DEAD, -1); + } + + if (mpModelMorf2->checkFrame(289.0f)) { + dComIfGp_getVibration().StartShock(2, 31, cXyz(0.0f, 1.0f, 0.0f)); + mSound.startCreatureSound(Z2SE_EN_TN_HIZA, 0, -1); + } + + if (mpModelMorf2->checkFrame(312.0f)) { + dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f)); + mSound.startCreatureSound(Z2SE_CM_BODYFALL_M, 0, -1); + } + + if (mpModelMorf2->isStop()) { + mActionMode2 = ACTION2_2_e; + mTimer1 = 60; + } + } else if (mTimer1 == 0) { + mActionMode2 = ACTION2_3_e; + mTimer1 = 60; + } + break; + + case ACTION2_3_e: + if (mTimer1 < 36) { + cLib_chaseF(&mMaterialColor, -50.0f, 0.3f); + } + + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(2)); + mDoMtx_stack_c::multVecZero(&sp28); + sp28.x += 100.0f; + cLib_addCalcPos2(&mCamCenter, sp28, 0.1f, 2.0f); + sp28.set(-350.0f, -250.0f, 700.0f); + cLib_addCalcPos2(&mCamEye, sp28, 0.1f, 5.0f); + + if (mTimer1 == 0) { + if (!daPy_py_c::checkNowWolf()) { + player->changeDemoMode(30, 0, 0, 0); } else { - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(2)); - mDoMtx_stack_c::multVecZero(&mCamCenter); + player->changeDemoMode(1, 0, 0, 0); } - mCamEye.set(field_0x724 * cM_ssin(field_0x720), -350.0f, field_0x724 * cM_scos(field_0x720)); - cLib_addCalcAngleS2(&field_0x720, (s16)0xfffff000, 8, 24); - - if (mActionMode2 == 1) { - if (mpModelMorf2->checkFrame(212.0f)) { - field_0x9fc[15] = 2; - } + mTimer1 = 54; + mActionMode2 = ACTION2_4_e; + } + break; - if (mpModelMorf2->checkFrame(6.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } - - if (mpModelMorf2->checkFrame(29.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_ZEIZEI, -1); - } - - if (mpModelMorf2->checkFrame(94.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_KURUSI, -1); - } - - if (mpModelMorf2->checkFrame(103.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - - if (mpModelMorf2->checkFrame(121.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } - - if (mpModelMorf2->checkFrame(147.0f)) { - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M2, 0, -1); - } - - if (mpModelMorf2->checkFrame(168.0f)) { - mSound.startCreatureVoice(Z2SE_EN_TN_V_DEAD, -1); - } - - if (mpModelMorf2->checkFrame(289.0f)) { - dComIfGp_getVibration().StartShock(2, 31, cXyz(0.0f, 1.0f, 0.0f)); - mSound.startCreatureSound(Z2SE_EN_TN_HIZA, 0, -1); - } - - if (mpModelMorf2->checkFrame(312.0f)) { - dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f)); - mSound.startCreatureSound(Z2SE_CM_BODYFALL_M, 0, -1); - } - - if (mpModelMorf2->isStop()) { - mActionMode2 = 2; - field_0xa6c = 60; - } - } else if (field_0xa6c == 0) { - mActionMode2 = 3; - field_0xa6c = 60; - } - break; - - case 3: - if (field_0xa6c < 36) { - cLib_chaseF(&field_0x728, -50.0f, 0.3f); - } + case ACTION2_4_e: + cLib_chaseF(&mMaterialColor, -50.0f, 0.3f); + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(2)); + mDoMtx_stack_c::multVecZero(&sp28); + sp28.x += 100.0f; + cLib_addCalcPos2(&mCamCenter, sp28, 0.1f, 2.0f); + sp28.set(-350.0f, -250.0f, 700.0f); + cLib_addCalcPos2(&mCamEye, sp28, 0.1f, 5.0f); + if (mTimer1 == 0) { mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(2)); mDoMtx_stack_c::multVecZero(&sp28); - sp28.x += 100.0f; - cLib_addCalcPos2(&mCamCenter, sp28, 0.1f, 2.0f); - sp28.set(-350.0f, -250.0f, 700.0f); - cLib_addCalcPos2(&mCamEye, sp28, 0.1f, 5.0f); + fopAcM_createDisappear(this, &sp28, 10, 0, 0xff); + mDisappear = true; + mActionMode2 = ACTION2_5_e; + mTimer1 = 65; + } + break; - if (field_0xa6c == 0) { - if (daPy_py_c::checkNowWolf()) { - player->changeDemoMode(1, 0, 0, 0); - } else { - player->changeDemoMode(30, 0, 0, 0); - } + case ACTION2_5_e: + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(2)); + mDoMtx_stack_c::multVecZero(&sp28); + sp28.x += 100.0f; + cLib_addCalcPos2(&mCamCenter, sp28, 0.1f, 2.0f); + sp28.set(-350.0f, -250.0f, 700.0f); + cLib_addCalcPos2(&mCamEye, sp28, 0.1f, 5.0f); - field_0xa6c = 54; - mActionMode2 = 4; - } - break; - - case 4: - cLib_chaseF(&field_0x728, -50.0f, 0.3f); - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(2)); - mDoMtx_stack_c::multVecZero(&sp28); - cLib_addCalcPos2(&mCamCenter, sp28, 0.1f, 2.0f); - sp28.set(-350.0f, -250.0f, 700.0f); - cLib_addCalcPos2(&mCamEye, sp28, 0.1f, 5.0f); - - if (field_0xa6c == 0) { - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(2)); - mDoMtx_stack_c::multVecZero(&sp28); - fopAcM_createDisappear(this, &sp28, 10, 0, 0xff); - field_0xa9e = 1; - mActionMode2 = 5; - field_0xa6c = 65; - } - break; - - case 5: - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(2)); - mDoMtx_stack_c::multVecZero(&sp28); - sp28.x += 100.0f; - cLib_addCalcPos2(&mCamCenter, sp28, 0.1f, 2.0f); - sp28.set(-350.0f, -250.0f, 700.0f); - cLib_addCalcPos2(&mCamEye, sp28, 0.1f, 5.0f); - - if (field_0xa6c == 0) { - camera->mCamera.Reset(mCamCenter, mCamEye); - camera->mCamera.Start(); - camera->mCamera.SetTrimSize(0); - dComIfGp_event_reset(); - fopAcM_delete(this); - } + if (mTimer1 == 0) { + camera->mCamera.Reset(mCamCenter, mCamEye); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + fopAcM_delete(this); + } } camera->mCamera.Set(mCamCenter, mCamEye, mCamFovY, 0); @@ -4393,198 +4310,198 @@ void daB_TN_c::executeZakoEnding() { cXyz sp20; switch (mActionMode2) { - case 0: - attention_info.flags = 0; - setBck(4, 0, 3.0f, 1.0f); - mSound.startCreatureVoice(Z2SE_EN_TN_V_DEAD2, -1); - mActionMode2 = 1; - speedF = 0.0f; - field_0xa93 = 0; + case ACTION2_0_e: + attention_info.flags = 0; + setBck(4, 0, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_TN_V_DEAD2, -1); + mActionMode2 = ACTION2_1_e; + speedF = 0.0f; + mUpdateNeckAngle = false; - if (field_0xaad != 0) { - Z2GetAudioMgr()->subBgmStop(); - } - // fallthrough - case 1: - if (mpModelMorf2->checkFrame(3.0f)) { - field_0x9fc[15] = 2; - mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); - } + if (mStayNo2Flag) { + Z2GetAudioMgr()->subBgmStop(); + } + // [[fallthrough]] - if (mpModelMorf2->checkFrame(33.0f)) { - dComIfGp_getVibration().StartShock(2, 31, cXyz(0.0f, 1.0f, 0.0f)); - mSound.startCreatureSound(Z2SE_EN_TN_HIZA, 0, -1); - } + case ACTION2_1_e: + if (mpModelMorf2->checkFrame(3.0f)) { + mStates[15] = 2; + mSound.startCreatureSound(Z2SE_EN_TN_FOOT_M1, 0, -1); + } - if (mpModelMorf2->checkFrame(68.0f)) { - dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f)); - mSound.startCreatureSound(Z2SE_CM_BODYFALL_M, 0, -1); - } + if (mpModelMorf2->checkFrame(33.0f)) { + dComIfGp_getVibration().StartShock(2, 31, cXyz(0.0f, 1.0f, 0.0f)); + mSound.startCreatureSound(Z2SE_EN_TN_HIZA, 0, -1); + } - cLib_chaseF(&field_0x728, -50.0f, 0.3f); + if (mpModelMorf2->checkFrame(68.0f)) { + dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f)); + mSound.startCreatureSound(Z2SE_CM_BODYFALL_M, 0, -1); + } - if (mpModelMorf2->isStop()) { - mActionMode2 = 2; - field_0xa6c = 10; - } - break; + cLib_chaseF(&mMaterialColor, -50.0f, 0.3f); - case 2: - cLib_chaseF(&field_0x728, -50.0f, 0.3f); + if (mpModelMorf2->isStop()) { + mActionMode2 = ACTION2_2_e; + mTimer1 = 10; + } + break; - if (field_0xa6c == 0) { - mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(2)); - mDoMtx_stack_c::multVecZero(&sp20); - fopAcM_createDisappear(this, &sp20, 10, 0, 29); + case ACTION2_2_e: + cLib_chaseF(&mMaterialColor, -50.0f, 0.3f); - if (field_0xaad != 0) { - field_0xa6c = 60; - field_0xaac = 1; - mActionMode2 = 3; - } else { - if (field_0xaa4 != 0xff) { - dComIfGs_onSwitch(field_0xaa4, fopAcM_GetRoomNo(this)); - } + if (mTimer1 == 0) { + mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(2)); + mDoMtx_stack_c::multVecZero(&sp20); + fopAcM_createDisappear(this, &sp20, 10, 0, 29); - fopAcM_delete(this); + if (mStayNo2Flag) { + mTimer1 = 60; + mInactive = true; + mActionMode2 = ACTION2_3_e; + } else { + if (mSwitchNo != 0xff) { + dComIfGs_onSwitch(mSwitchNo, fopAcM_GetRoomNo(this)); } - } - break; - case 3: - if (field_0xa6c == 0) { - if (field_0xaa4 != 0xff) { - dComIfGs_onSwitch(field_0xaa4, fopAcM_GetRoomNo(this)); - } - fopAcM_delete(this); } + } + break; + + case ACTION2_3_e: + if (mTimer1 == 0) { + if (mSwitchNo != 0xff) { + dComIfGs_onSwitch(mSwitchNo, fopAcM_GetRoomNo(this)); + } + + fopAcM_delete(this); + } } } /* 8062B6A8-8062BA5C 00CBA8 03B4+00 2/1 0/0 0/0 .text action__8daB_TN_cFv */ void daB_TN_c::action() { - // NONMATCHING daPy_py_c* player = daPy_getPlayerActorClass(); if (m_attack_timer != 0) { m_attack_timer--; } - if (field_0xaa5 == 0 || !player->checkGuardBreakMode()) { + if (mType == 0 || !player->checkGuardBreakMode()) { m_attack_tn = 0; } if (player->getCutType() == daPy_py_c::CUT_TYPE_JUMP && player->checkCutJumpCancelTurn()) { - field_0xaaa = 30; + mTimer13 = 30; } damage_check(); field_0x700 = l_HIO.field_0x24; - field_0xa94 = 0; - field_0xaa1 = 0; - field_0xaa0 = 0; + mUpdateWaistAngle = false; + mChkCoHitOK = false; + mSphCSmallFlag = false; attention_info.flags &= 0xffdfffff; int iVar1 = 1; switch (mActionMode1) { - case 0: - executeRoomDemo(); + case ACT_ROOMDEMO: + executeRoomDemo(); + iVar1 = 0; + break; + + case ACT_OPENING: + executeOpening(); + iVar1 = 0; + break; + + case ACT_WAITH: + executeWaitH(); + if (mType == 1) { iVar1 = 0; - break; + } + break; - case 1: - executeOpening(); - iVar1 = 0; - break; + case ACT_CHASEH: + executeChaseH(); + break; - case 2: - executeWaitH(); - if (field_0xaa5 == 1) { - iVar1 = 0; - } - break; + case ACT_ATTACKH: + executeAttackH(); + break; - case 3: - executeChaseH(); - break; + case ACT_ATTACKSHIELDH: + executeAttackShieldH(); + break; - case 4: - executeAttackH(); - break; + case ACT_GUARDH: + executeGuardH(); + break; - case 5: - executeAttackShieldH(); - break; + case ACT_DAMAGEH: + executeDamageH(); + break; - case 6: - executeGuardH(); - break; + case ACT_CHANGEDEMO: + if (mType == 0) { + executeChangeDemo(); + } else { + executeZakoChangeDemo(); + } + break; - case 7: - executeDamageH(); - break; + case ACT_CHASEL: + executeChaseL(); + break; - case 8: - if (field_0xaa5 == 0) { - executeChangeDemo(); - } else { - executeZakoChangeDemo(); - } - break; + case ACT_ATTACKL: + executeAttackL(); + break; - case 9: - executeChaseL(); - break; + case ACT_ATTACKSHIELDL: + executeAttackShieldL(); + break; - case 10: - executeAttackL(); - break; + case ACT_GUARDL: + executeGuardL(); + break; - case 11: - executeAttackShieldL(); - break; + case ACT_DAMAGEL: + executeDamageL(); + break; - case 12: - executeGuardL(); - break; + case ACT_YOROKE: + executeYoroke(); + break; - case 13: - executeDamageL(); - break; - - case 15: - executeYoroke(); - break; - - case 14: - if (field_0xaa5 == 0) { - executeEnding(); - } else { - executeZakoEnding(); - } - break; + case ACT_ENDING: + if (mType == 0) { + executeEnding(); + } else { + executeZakoEnding(); + } + break; } - if (field_0xaa5 == 0) { + if (mType == 0) { if (iVar1) { player->onBossRoomWait(); } - switch (field_0xaae) { - case 0: - mBlend = 1.0f; - dKy_custom_colset(0, 0, mBlend); - break; + switch (mBlendStatus) { + case 0: + mBlend = 1.0f; + dKy_custom_colset(0, 0, mBlend); + break; - case 1: - cLib_chaseF(&mBlend, 1.0f, 0.003f); - dKy_custom_colset(0, 1, mBlend); - break; + case 1: + cLib_chaseF(&mBlend, 1.0f, 0.003f); + dKy_custom_colset(0, 1, mBlend); + break; - case 2: - cLib_chaseF(&mBlend, 1.0f, 0.01f); - dKy_custom_colset(1, 2, mBlend); + case 2: + cLib_chaseF(&mBlend, 1.0f, 0.01f); + dKy_custom_colset(1, 2, mBlend); } } else { mSound.setLinkSearch(iVar1); @@ -4594,14 +4511,14 @@ void daB_TN_c::action() { calcWaistAngle(); setBodyShield(); calcPartMove(); - fopAcM_posMoveF(this, &field_0x2e50); + fopAcM_posMoveF(this, mStts1.GetCCMoveP()); mAcch.CrrPos(dComIfG_Bgsp()); cXyz sp38(eyePos); sp38.y += 300.0f; setHeadLockPos(&sp38); - int iVar2 = 13 - field_0xa78; + int iVar2 = 13 - mNextBreakPart; if (iVar2 < 0) { iVar2 = 0; } @@ -4629,69 +4546,69 @@ void daB_TN_c::mtx_set() { if (i == 15) { model2 = mpModelMorf1->getModel(); } else { - model2 = mModels[i]; + model2 = mpModels[i]; } - switch (field_0x9fc[i]) { - case 0: - mDoMtx_stack_c::copy(model1->getAnmMtx(tn_part_joint[i])); + switch (mStates[i]) { + case 0: + mDoMtx_stack_c::copy(model1->getAnmMtx(tn_part_joint[i])); - if (field_0xa60 != 0 && i <= 11 && i != 5 && i != 4) { - int iVar2 = (s16)(field_0xa60 * 96); - field_0xa64 += 1280; - mDoMtx_stack_c::ZXYrotM(iVar2 * cM_ssin(field_0xa64 + (i << 13)), iVar2 * cM_ssin(field_0xa64 + (i * 0x6000)), - iVar2 * cM_ssin(field_0xa64 - (i << 13))); - } + if (mTimer9 != 0 && i <= 11 && i != 5 && i != 4) { + int iVar2 = (s16)(mTimer9 * 96); + field_0xa64 += 1280; + mDoMtx_stack_c::ZXYrotM(iVar2 * cM_ssin(field_0xa64 + (i << 13)), + iVar2 * cM_ssin(field_0xa64 + (i * 0x6000)), + iVar2 * cM_ssin(field_0xa64 - (i << 13))); + } + model2->setBaseTRMtx(mDoMtx_stack_c::get()); + break; + + case 1: + if (i == 15) { + mDoMtx_stack_c::copy(model1->getAnmMtx(15)); + mDoMtx_stack_c::transM(12.65f, 13.47f, 20.07f); + mDoMtx_stack_c::ZXYrotM(cM_deg2s(-168.0f), cM_deg2s(-42.715f), cM_deg2s(77.897)); model2->setBaseTRMtx(mDoMtx_stack_c::get()); - break; + } else { + model2->setBaseTRMtx(model1->getAnmMtx(15)); + } + break; - case 1: - if (i == 15) { - mDoMtx_stack_c::copy(model1->getAnmMtx(15)); - mDoMtx_stack_c::transM(12.65f, 13.47f, 20.07f); - mDoMtx_stack_c::ZXYrotM(cM_deg2s(-168.0f), cM_deg2s(-42.715f), cM_deg2s(77.897)); - model2->setBaseTRMtx(mDoMtx_stack_c::get()); + case 2: + case 3: + case 4: + case 5: + if (mType == 1 && i == 5) { + mDoMtx_stack_c::copy(mpModels[4]->getBaseTRMtx()); + } else { + mDoMtx_stack_c::transS(mPositions[i]); + + if (i == 4) { + mDoMtx_stack_c::YrotM(field_0x99c[i].y); + mDoMtx_stack_c::ZrotM(field_0x99c[i].z); + mDoMtx_stack_c::XrotM(field_0x99c[i].x); } else { - model2->setBaseTRMtx(model1->getAnmMtx(15)); - } - break; - - case 2: - case 3: - case 4: - case 5: - if (field_0xaa5 == 1 && i == 5) { - mDoMtx_stack_c::copy(mModels[4]->getBaseTRMtx()); - } else { - mDoMtx_stack_c::transS(field_0x75c[i]); - - if (i == 4) { - mDoMtx_stack_c::YrotM(field_0x99c[i].y); - mDoMtx_stack_c::ZrotM(field_0x99c[i].z); - mDoMtx_stack_c::XrotM(field_0x99c[i].x); - } else { - mDoMtx_stack_c::ZXYrotM(field_0x99c[i]); - } - - mDoMtx_stack_c::transM(offset_part[i]); - mDoMtx_stack_c::scaleM(l_HIO.mScale, l_HIO.mScale, l_HIO.mScale); + mDoMtx_stack_c::ZXYrotM(field_0x99c[i]); } - model2->setBaseTRMtx(mDoMtx_stack_c::get()); + mDoMtx_stack_c::transM(offset_part[i]); + mDoMtx_stack_c::scaleM(l_HIO.mScale, l_HIO.mScale, l_HIO.mScale); + } + + model2->setBaseTRMtx(mDoMtx_stack_c::get()); } } mpModelMorf1->modelCalc(); - if (field_0xa90 != 0) { - field_0x648->setBaseTRMtx(field_0x72c); + if (mUpdateModelTimer != 0) { + mpModel->setBaseTRMtx(mNewTRMtx); } } /* 8062BDCC-8062C5B4 00D2CC 07E8+00 1/1 0/0 0/0 .text cc_set__8daB_TN_cFv */ void daB_TN_c::cc_set() { - // NONMATCHING cXyz sp38; J3DModel* model = mpModelMorf2->getModel(); @@ -4706,64 +4623,67 @@ void daB_TN_c::cc_set() { attention_info.position.y += 50.0f; } - if (field_0xa84 == 0) { + if (mTimer7 == 0) { for (int i = 0; i < 3; i++) { switch (i) { - case 0: - mDoMtx_stack_c::copy(model->getAnmMtx(5)); - - if (mActionMode1 < 8) { - mDoMtx_stack_c::transM(30.0f, 0.0f, 0.0f); - field_0x2ec8[0].SetR(40.0f); - field_0x3270[0].SetR(40.0f); - } else { - mDoMtx_stack_c::transM(15.0f, 0.0f, 0.0f); - field_0x2ec8[0].SetR(30.0f); - field_0x3270[0].SetR(30.0f); - } - break; + case 0: + mDoMtx_stack_c::copy(model->getAnmMtx(5)); - case 1: - field_0x2ec8[1].SetR(65.0f); - field_0x3270[1].SetR(65.0f); - mDoMtx_stack_c::copy(model->getAnmMtx(3)); - break; - - case 2: - field_0x2ec8[2].SetR(55.0f); - field_0x3270[2].SetR(55.0f); - mDoMtx_stack_c::copy(model->getAnmMtx(18)); + if (mActionMode1 < 8) { mDoMtx_stack_c::transM(30.0f, 0.0f, 0.0f); - break; + mSphA[0].SetR(40.0f); + mSphB[0].SetR(40.0f); + } else { + mDoMtx_stack_c::transM(15.0f, 0.0f, 0.0f); + mSphA[0].SetR(30.0f); + mSphB[0].SetR(30.0f); + } + break; + + case 1: + mSphA[1].SetR(65.0f); + mSphB[1].SetR(65.0f); + mDoMtx_stack_c::copy(model->getAnmMtx(3)); + break; + + case 2: + mSphA[2].SetR(55.0f); + mSphB[2].SetR(55.0f); + mDoMtx_stack_c::copy(model->getAnmMtx(18)); + mDoMtx_stack_c::transM(30.0f, 0.0f, 0.0f); + break; } mDoMtx_stack_c::multVecZero(&sp38); - field_0x2ec8[i].SetC(sp38); - field_0x3270[i].SetC(sp38); - dComIfG_Ccsp()->Set(&field_0x2ec8[i]); - dComIfG_Ccsp()->Set(&field_0x3270[i]); + mSphA[i].SetC(sp38); + mSphB[i].SetC(sp38); + dComIfG_Ccsp()->Set(&mSphA[i]); + dComIfG_Ccsp()->Set(&mSphB[i]); } } else { for (int i = 0; i < 3; i++) { - field_0x2ec8[i].ClrTgHit(); - field_0x3270[i].ClrTgHit(); + // Bug: This feels like a bug, but the original + // does this for some reason. The fields should + // be indexed by i, not 0. + mSphA[0].ClrTgHit(); + mSphB[0].ClrTgHit(); } } if (mActionMode1 < 8) { sp38 = current.pos; sp38.y += 30.0f; - field_0x3d74.SetC(sp38); - field_0x3d74.SetR(60.0f); - dComIfG_Ccsp()->Set(&field_0x3d74); + mSphD.SetC(sp38); + mSphD.SetR(60.0f); + dComIfG_Ccsp()->Set(&mSphD); } - if (field_0x9fc[13] == 1) { + if (mStates[13] == 1) { mDoMtx_stack_c::copy(model->getAnmMtx(15)); mDoMtx_stack_c::transM(10.0f, 15.0f, -20.0f); for (int i = 0; i < 4; i++) { - if (field_0xaa5 == 0) { + if (mType == 0) { mDoMtx_stack_c::transM(12.0f, -6.0f, 36.0f); } else { mDoMtx_stack_c::transM(9.0f, -4.0f, 27.0f); @@ -4771,7 +4691,7 @@ void daB_TN_c::cc_set() { mDoMtx_stack_c::multVecZero(&sp38); mSwordSphs[i].SetC(sp38); - if (mActionMode2 == 1) { + if (mActionMode2 == ACTION2_1_e) { mSwordSphs[i].SetR(70.0f); } else { mSwordSphs[i].SetR(60.0f); @@ -4780,15 +4700,15 @@ void daB_TN_c::cc_set() { dComIfG_Ccsp()->Set(&mSwordSphs[i]); } - if (mActionMode2 == 1) { - mCps.cM3dGCps::Set(field_0x3eac, sp38, 70.0f); + if (mActionMode2 == ACTION2_1_e) { + mCps.cM3dGCps::Set(mCpsPos, sp38, 70.0f); } else { - mCps.cM3dGCps::Set(field_0x3eac, sp38, 60.0f); + mCps.cM3dGCps::Set(mCpsPos, sp38, 60.0f); } - field_0x3eac = sp38; + mCpsPos = sp38; dComIfG_Ccsp()->Set(&mCps); - } else if (field_0x9fc[15] == 1) { + } else if (mStates[15] == 1) { mDoMtx_stack_c::copy(mpModelMorf1->getModel()->getAnmMtx(1)); mDoMtx_stack_c::transM(-50.0f, 0.0f, 0.0f); @@ -4800,11 +4720,11 @@ void daB_TN_c::cc_set() { dComIfG_Ccsp()->Set(&mSwordSphs[i]); } - mCps.cM3dGCps::Set(field_0x3eac, sp38, 45.0f); - field_0x3eac = sp38; + mCps.cM3dGCps::Set(mCpsPos, sp38, 45.0f); + mCpsPos = sp38; dComIfG_Ccsp()->Set(&mCps); - } else if (field_0x9fc[13] == 3) { - mDoMtx_stack_c::copy(mModels[13]->getBaseTRMtx()); + } else if (mStates[13] == 3) { + mDoMtx_stack_c::copy(mpModels[13]->getBaseTRMtx()); for (int i = 0; i < 4; i++) { mDoMtx_stack_c::transM(20.0f, 0.0f, 40.0f); @@ -4814,132 +4734,129 @@ void daB_TN_c::cc_set() { dComIfG_Ccsp()->Set(&mSwordSphs[i]); } - mCps.cM3dGCps::Set(field_0x3eac, sp38, 45.0f); - field_0x3eac = sp38; + mCps.cM3dGCps::Set(mCpsPos, sp38, 45.0f); + mCpsPos = sp38; dComIfG_Ccsp()->Set(&mCps); } - if (field_0x9fc[12] == 0) { + if (mStates[12] == 0) { mDoMtx_stack_c::copy(model->getAnmMtx(9)); mDoMtx_stack_c::transM(10.0f, -10.0f, 0.0f); mDoMtx_stack_c::multVecZero(&sp38); - field_0x3618.SetC(sp38); + mSphC.SetC(sp38); - if (field_0x3618.ChkAtSet()) { - field_0x3618.SetR(70.0f); + if (mSphC.ChkAtSet()) { + mSphC.SetR(70.0f); + } else if (!mSphCSmallFlag) { + mSphC.SetR(55.0f); } else { - if (field_0xaa0 == 0) { - field_0x3618.SetR(55.0f); - } else { - field_0x3618.SetR(30.0f); - } + mSphC.SetR(30.0f); } - dComIfG_Ccsp()->Set(&field_0x3618); - } else if (!field_0x3618.ChkAtSet() || mActionMode1 < 9) { - field_0x3618.ClrTgHit(); - } else { + dComIfG_Ccsp()->Set(&mSphC); + } else if (mSphC.ChkAtSet() && mActionMode1 > 8) { mDoMtx_stack_c::copy(model->getAnmMtx(24)); mDoMtx_stack_c::multVecZero(&sp38); - field_0x3618.SetC(sp38); - field_0x3618.SetR(70.0f); - dComIfG_Ccsp()->Set(&field_0x3618); + mSphC.SetC(sp38); + mSphC.SetR(70.0f); + dComIfG_Ccsp()->Set(&mSphC); + } else { + mSphC.ClrTgHit(); } for (int i = 0; i < 13; i++) { - if (field_0x9fc[i] == 5) { - mDoMtx_stack_c::transS(field_0x75c[i]); + if (mStates[i] == 5) { + mDoMtx_stack_c::transS(mPositions[i]); mDoMtx_stack_c::multVecZero(&sp38); - field_0x429c[i].SetC(sp38); + mSphArr[i].SetC(sp38); if (i == 12) { - field_0x429c[i].SetR(50.0f); + mSphArr[i].SetR(50.0f); } else { - field_0x429c[i].SetR(30.0f); + mSphArr[i].SetR(30.0f); } - dComIfG_Ccsp()->Set(&field_0x429c[i]); + dComIfG_Ccsp()->Set(&mSphArr[i]); } } } /* 8062C5B4-8062C7A0 00DAB4 01EC+00 1/1 0/0 0/0 .text execute__8daB_TN_cFv */ int daB_TN_c::execute() { - if (field_0xa6c != 0) { - field_0xa6c--; + if (mTimer1 != 0) { + mTimer1--; } - if (field_0xa68 != 0) { - field_0xa68--; + if (mInvincibilityTimer != 0) { + mInvincibilityTimer--; } - if (field_0xa70 != 0) { - field_0xa70--; + if (mTimer3 != 0) { + mTimer3--; } - if (field_0xa7c != 0) { - field_0xa7c--; + if (mTimer4 != 0) { + mTimer4--; } - if (field_0xa80 != 0) { - field_0xa80--; + if (mTimer5 != 0) { + mTimer5--; } - if (field_0xa74 != 0) { - field_0xa74--; + if (mTimer6 != 0) { + mTimer6--; } - if (field_0xa84 != 0) { - field_0xa84--; + if (mTimer7 != 0) { + mTimer7--; } - if (field_0xa88 != 0) { - field_0xa88--; - if (field_0xa88 == 0) { + if (mVibrationTimer != 0) { + mVibrationTimer--; + if (mVibrationTimer == 0) { dComIfGp_getVibration().StopQuake(31); } } - if (field_0xa60 != 0) { - field_0xa60--; + if (mTimer9 != 0) { + mTimer9--; } - if (field_0xaa7 != 0) { - field_0xaa7--; + if (mTimer10 != 0) { + mTimer10--; } - if (field_0xa90 != 0) { - field_0xa90--; + if (mUpdateModelTimer != 0) { + mUpdateModelTimer--; } - if (field_0xaa9 != 0) { - field_0xaa9--; + if (mTimer12 != 0) { + mTimer12--; } - if (field_0xaaa != 0) { - field_0xaaa--; + if (mTimer13 != 0) { + mTimer13--; } action(); mtx_set(); - if (field_0xaac != 0) { + if (mInactive) { return 1; } cc_set(); mDoMtx_stack_c::copy(mpModelMorf2->getModel()->getAnmMtx(18)); - cXyz sp1c, sp28; - mDoMtx_stack_c::multVecZero(&sp1c); - sp28.set(1.5f, 2.2f, 1.5f); - setMidnaBindEffect(this, &mSound, &sp1c, &sp28); - + cXyz effPos, effSize; + mDoMtx_stack_c::multVecZero(&effPos); + effSize.set(1.5f, 2.2f, 1.5f); + setMidnaBindEffect(this, &mSound, &effPos, &effSize); return 1; } /* 8062C7A0-8062C7C0 00DCA0 0020+00 2/1 0/0 0/0 .text daB_TN_Execute__FP8daB_TN_c */ -static void daB_TN_Execute(daB_TN_c* i_this) { +static int daB_TN_Execute(daB_TN_c* i_this) { i_this->execute(); } @@ -4950,13 +4867,13 @@ static int daB_TN_IsDelete(daB_TN_c* i_this) { /* 8062C7C8-8062C848 00DCC8 0080+00 1/1 0/0 0/0 .text _delete__8daB_TN_cFv */ int daB_TN_c::_delete() { - dComIfG_resDelete(&mPhase1, "B_tn"); - dComIfG_resDelete(&mPhase2, field_0xab4); - if (field_0x562c != 0) { - struct_8062F01C = 0; + dComIfG_resDelete(&mPhaseReq1, "B_tn"); + dComIfG_resDelete(&mPhaseReq2, mArcName); + if (mHioInit) { + s_hioinit = 0; } - if (heap) { + if (heap != NULL) { mSound.deleteObject(); } @@ -4964,40 +4881,39 @@ int daB_TN_c::_delete() { } /* 8062C848-8062C868 00DD48 0020+00 1/0 0/0 0/0 .text daB_TN_Delete__FP8daB_TN_c */ -static void daB_TN_Delete(daB_TN_c* i_this) { +static int daB_TN_Delete(daB_TN_c* i_this) { i_this->_delete(); } /* 8062C868-8062CD10 00DD68 04A8+00 1/1 0/0 0/0 .text CreateHeap__8daB_TN_cFv */ int daB_TN_c::CreateHeap() { - // NONMATCHING - static int tn2_brk_index[3] = { - 25, 26, 27 - }; + static int tn2_brk_index[3] = {25, 26, 27}; J3DModelData* modelData; - if (field_0xaa5 == 0) { + if (mType == 0) { modelData = (J3DModelData*)dComIfG_getObjectRes("B_tnp", 3); } else { modelData = (J3DModelData*)dComIfG_getObjectRes("B_tnp2", 4); } - mpModelMorf2 = new mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("B_tn", 15), - 0, 1.0f, 0, -1, &mSound, 0x80000, 0x11000084); + mpModelMorf2 = new mDoExt_McaMorfSO(modelData, NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes("B_tn", 15), 0, 1.0f, + 0, -1, &mSound, 0x80000, 0x11000084); if (mpModelMorf2 == NULL || mpModelMorf2->getModel() == NULL) { return 0; } - if (field_0xaa5 == 1) { - mBrkAnm = new mDoExt_brkAnm(); - if (mBrkAnm == NULL) { + if (mType == 1) { + mpBrkAnm = new mDoExt_brkAnm(); + if (mpBrkAnm == NULL) { return 0; } - if (mBrkAnm->init(modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes(field_0xab4, 24), - 1, 2, 0.0f, 0, -1) == 0) { - return 0; + if (mpBrkAnm->init(modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes(mArcName, 24), 1, 2, + 0.0f, 0, -1) == 0) + { + return 0; } } @@ -5006,145 +4922,207 @@ int daB_TN_c::CreateHeap() { model->getModelData()->getJointNodePointer(5)->setCallBack(JointCallBack); model->getModelData()->getJointNodePointer(1)->setCallBack(JointCallBack); - int iVar4 = 0; - while (true) { - if (iVar4 == 13 && field_0xaa5 == 1 && field_0xaa6 == 1) { - if (field_0xaa5 == 1) { - s8 sVar1 = tn_model_brk_idx[iVar4]; - if (field_0xaa3 == 3) { - sVar1 = tn_model_brk_idx2[iVar4]; + for (int i = 0; i < 15; i++) { + if (i == 13 && mType == 1 && mType2 == 1) { + modelData = (J3DModelData*)dComIfG_getObjectRes(mArcName, 0x13); + } else { + modelData = + (J3DModelData*)dComIfG_getObjectRes(mArcName, tn_part_model_id[i + mType * 0x10]); + } + + model = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + mpModels[i] = model; + + if (mpModels[i] == NULL) { + return 0; + } + + if (mType == 1) { + s8 sVar1 = tn_model_brk_idx[i]; + + if (mBrkAnmFrame == 3) { + sVar1 = tn_model_brk_idx2[i]; + } + + if (sVar1 != -1) { + mpBrkAnms[i] = new mDoExt_brkAnm(); + mDoExt_brkAnm* myanm = mpBrkAnms[i]; + + if (myanm == NULL) { + return 0; } - if (sVar1 == -1) { - mBrkAnms[iVar4] = new mDoExt_brkAnm(); - if (mBrkAnms[iVar4] == NULL) { - return 0; - } - - if (mBrkAnms[iVar4]->init(modelData, - (J3DAnmTevRegKey*)dComIfG_getObjectRes(field_0xab4, tn2_brk_index[iVar4]), - 1, 2, 0.0f, 0, -1) == 0) { - return 0; - } + if (mpBrkAnms[i]->init( + modelData, + (J3DAnmTevRegKey*)dComIfG_getObjectRes(mArcName, tn2_brk_index[sVar1]), 1, + 2, 0.0f, 0, -1) == 0) + { + return 0; } } } - - if (iVar4 > 14) { - modelData = (J3DModelData*)dComIfG_getObjectRes(field_0xab4, 19); - if (modelData == NULL) { /* Debug Stuff */ } - - mpModelMorf1 = new mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("B_tn", 39), - 0, 1.0f, 0, -1, &mSound, 0x80000, 0x11000084); - if (mpModelMorf1 == NULL || mpModelMorf1->getModel() == NULL) { - return 0; - } - - modelData = (J3DModelData*)dComIfG_getObjectRes("B_tn", 48); - if (modelData == NULL) { /* Debug Stuff */ } - - model = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); - - mModels[iVar4] = model; - if (mModels[iVar4] == NULL) { - return 0; - } - - return 1; - } - - iVar4++; } - return 0; + modelData = (J3DModelData*)dComIfG_getObjectRes(mArcName, tn_part_model_id[mType * 0x10 + 0xf]); + + mpModelMorf1 = new mDoExt_McaMorfSO(modelData, NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes("B_tn", 39), 0, 1.0f, + 0, -1, &mSound, 0x80000, 0x11000084); + if (mpModelMorf1 == NULL || mpModelMorf1->getModel() == NULL) { + return 0; + } + + modelData = (J3DModelData*)dComIfG_getObjectRes("B_tn", 48); + model = mDoExt_J3DModel__create(modelData, 0x80000, 0x31000084); + + mpModel = model; + if (mpModel == NULL) { + return 0; + } + return 1; } /* 8062CD58-8062CD78 00E258 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ static int useHeapInit(fopAc_ac_c* actor) { - // NONMATCHING + ((daB_TN_c*)actor)->CreateHeap(); } -/* ############################################################################################## */ -/* 8062E8CC-8062E8D4 000298 0008+00 0/1 0/0 0/0 .rodata @10331 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_10331[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8062E8CC, &lit_10331); -#pragma pop - -/* 8062E8E8-8062E8E8 0002B4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8062E8FA = "D_MN09"; -#pragma pop - /* 8062CD78-8062D2F0 00E278 0578+00 1/1 0/0 0/0 .text create__8daB_TN_cFv */ int daB_TN_c::create() { - // NONMATCHING fopAcM_SetupActor(this, daB_TN_c); - field_0xaa4 = fopAcM_GetParam(this); - field_0xaa5 = fopAcM_GetParam(this) >> 8; + mSwitchNo = fopAcM_GetParam(this); + mType = fopAcM_GetParamBit(this, 8, 8); - if (field_0xaa5 != 1) { - field_0xaa5 = 0; + if (mType != 1) { + mType = 0; } - if (field_0xaa5 == 0) { - field_0xab4 = "B_tnp"; + if (mType == 0) { + mArcName = "B_tnp"; if (dComIfGs_isStageMiddleBoss()) { return cPhs_ERROR_e; } } else { - field_0xab4 = "B_tnp2"; - if (dComIfGs_isSwitch(field_0xaa4, fopAcM_GetRoomNo(this))) { + mArcName = "B_tnp2"; + if (dComIfGs_isSwitch(mSwitchNo, fopAcM_GetRoomNo(this))) { return cPhs_ERROR_e; } } - if (dComIfG_resLoad(&mPhase1, "B_tn") == cPhs_COMPLEATE_e && dComIfG_resLoad(&mPhase2, field_0xab4) == cPhs_COMPLEATE_e) { - field_0xaa3 = fopAcM_GetParam(this) >> 16; - if (field_0xaa3 > 4) { - field_0xaa4 = 4; - } + cPhs__Step step = (cPhs__Step)dComIfG_resLoad(&mPhaseReq1, "B_tn"); + if (step == cPhs_COMPLEATE_e) { + step = (cPhs__Step)dComIfG_resLoad(&mPhaseReq2, mArcName); - field_0xaa6 = fopAcM_GetParam(this) >> 24; - if (field_0xaa6 != 1) { - field_0xaa6 = 0; - } + if (step == cPhs_COMPLEATE_e) { + mBrkAnmFrame = fopAcM_GetParamBit(this, 16, 16); + if (mBrkAnmFrame > 4) { + mBrkAnmFrame = 4; + } - if (field_0xaa5 == 1) { - if (!fopAcM_entrySolidHeap(this, useHeapInit, 0xb940)) { + mType2 = fopAcM_GetParamBit(this, 24, 24); + ; + if (mType2 != 1) { + mType2 = 0; + } + + if (mType == 1) { + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0xb940)) { + return cPhs_ERROR_e; + } + } else if (!fopAcM_entrySolidHeap(this, useHeapInit, 0xaa20)) { return cPhs_ERROR_e; } - } else if (!fopAcM_entrySolidHeap(this, useHeapInit, 0xaa20)) { - return cPhs_ERROR_e; + + if (s_hioinit == 0) { + s_hioinit = 1; + mHioInit = 1; + l_HIO.mUnk1 = -1; + } + + attention_info.flags = 4; + fopAcM_SetMtx(this, mpModelMorf2->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -200.0f, -200.0f, -200.0f); + fopAcM_SetMax(this, 200.0f, 200.0f, 200.0f); + + mAcch.Set(¤t.pos, &old.pos, this, 1, &mAcchCir, &speed, NULL, NULL); + mAcchCir.SetWall(60.0f, 300.0f); + health = 0x50; + field_0x560 = 0x50; + + mStts1.Init(0xfa, 0, this); + mStts2.Init(0xfa, 0, this); + + for (int i = 0; i < 3; i++) { + mSphA[i].Set(cc_tt_src); + mSphA[i].SetStts(&mStts1); + + mSphB[i].Set(cc_tt_src2); + mSphB[i].SetStts(&mStts1); + } + + mSphA[2].OnCoSameActorHit(); + mSphD.Set(cc_bomb_src); + mSphD.SetStts(&mStts1); + + for (int i = 0; i < 4; i++) { + mSwordSphs[i].Set(cc_tt_at_src); + mSwordSphs[i].SetStts(&mStts2); + } + + mCps.Set(cc_tt_at_cps_src); + mCps.SetStts(&mStts2); + + mSphC.Set(cc_tt_tate_src); + mSphC.SetStts(&mStts1); + + for (int k = 0; k < 16; k++) { + mAcchArr[k].Set(&mPositions[k], &mPositionsCopy[k], this, 1, &mAcchCirArr[k], + &field_0x8dc[k], NULL, NULL); + mAcchCirArr[k].SetWall(10.0f, 50.0f); + mAcchArr[k].SetGroundUpY(ground_y_part[k]); + mSttsArr[k].Init(100, 0, this); + mSphArr[k].Set(cc_part_src); + mSphArr[k].SetStts(&mSttsArr[k]); + + mSphArr[k].OnCoSameActorHit(); + } + + mSound.init(¤t.pos, &eyePos, 0x3, 0x1); + mSound.setEnemyName("B_tn"); + mAtInfo.mpSound = &mSound; + mAtInfo.mPowerType = 1; + gravity = -5.0f; + mStates[0xd] = 1; + + setSwordAtBreak(1); + + if (mType == 0) { + setActionMode(ACT_ROOMDEMO, ACTION2_0_e); + } else { + mpBrkAnm->setFrame(mBrkAnmFrame); + + for (int k = 0; k < 15; k++) { + if (mpBrkAnms[k] != NULL) { + mpBrkAnms[k]->setFrame(mBrkAnmFrame); + } + } + + fopAcM_OffStatus(this, 0x4000); + setActionMode(ACT_WAITH, ACTION2_0_e); + } + + if (!strcmp("D_MN09", dComIfGp_getStartStageName()) && + dComIfGp_roomControl_getStayNo() == 0x2) + { + mStayNo2Flag = true; + } + + daB_TN_Execute(this); } - - if (struct_8062F01C == 0) { - struct_8062F01C = 1; - field_0x562c = 1; - l_HIO.field_0x4 = -1; - } - - attention_info.flags = 4; - fopAcM_SetMtx(this, mpModelMorf2->getModel()->getBaseTRMtx()); - fopAcM_SetMin(this, -200.0f, -200.0f, -200.0f); - fopAcM_SetMax(this, 200.0f, 200.0f, 200.0f); - - mAcch.Set(¤t.pos, &old.pos, this, 1, &mAcchCir, &speed, NULL, NULL); - mAcchCir.SetWall(60.0f, 300.0f); - health = 0x50; - field_0x560 = 0x50; } -} -/* 8062D7E8-8062D83C 00ECE8 0054+00 1/1 0/0 0/0 .text __ct__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::dBgS_ObjAcch() { -extern "C" void __ct__12dBgS_ObjAcchFv() { - // NONMATCHING + return step; } /* 8062D924-8062D944 00EE24 0020+00 1/0 0/0 0/0 .text daB_TN_Create__FP8daB_TN_c */ @@ -5152,72 +5130,29 @@ static int daB_TN_Create(daB_TN_c* i_this) { return i_this->create(); } -/* ############################################################################################## */ -/* 8062E8D4-8062E8D8 0002A0 0004+00 0/1 0/0 0/0 .rodata @10688 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_10688 = -12.0f; -COMPILER_STRIP_GATE(0x8062E8D4, &lit_10688); -#pragma pop - -/* 8062E8D8-8062E8DC 0002A4 0004+00 0/1 0/0 0/0 .rodata @10689 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_10689 = -17.0f; -COMPILER_STRIP_GATE(0x8062E8D8, &lit_10689); -#pragma pop - -/* 8062E8DC-8062E8E0 0002A8 0004+00 0/1 0/0 0/0 .rodata @10690 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_10690 = -30.0f; -COMPILER_STRIP_GATE(0x8062E8DC, &lit_10690); -#pragma pop - -/* 8062E8E0-8062E8E4 0002AC 0004+00 0/1 0/0 0/0 .rodata @10691 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_10691 = -40.0f; -COMPILER_STRIP_GATE(0x8062E8E0, &lit_10691); -#pragma pop - -/* 8062E8E4-8062E8E8 0002B0 0004+00 0/1 0/0 0/0 .rodata @10692 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_10692 = -15.0f; -COMPILER_STRIP_GATE(0x8062E8E4, &lit_10692); -#pragma pop - -/* 8062D9D4-8062E16C 00EED4 0798+00 0/0 1/0 0/0 .text __sinit_d_a_b_tn_cpp */ -void __sinit_d_a_b_tn_cpp() { - // NONMATCHING -} - /* 8062EF10-8062EF30 -00001 0020+00 1/0 0/0 0/0 .data l_daB_TN_Method */ static actor_method_class l_daB_TN_Method = { - (process_method_func)daB_TN_Create, - (process_method_func)daB_TN_Delete, - (process_method_func)daB_TN_Execute, - (process_method_func)daB_TN_IsDelete, + (process_method_func)daB_TN_Create, (process_method_func)daB_TN_Delete, + (process_method_func)daB_TN_Execute, (process_method_func)daB_TN_IsDelete, (process_method_func)daB_TN_Draw, }; /* 8062EF30-8062EF60 -00001 0030+00 0/0 0/0 1/0 .data g_profile_B_TN */ extern actor_process_profile_definition g_profile_B_TN = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_B_TN, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daB_TN_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 225, // mPriority - &l_daB_TN_Method, // sub_method - 0x00044000, // mStatus - fopAc_ENEMY_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_B_TN, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daB_TN_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 225, // mPriority + &l_daB_TN_Method, // sub_method + 0x00044000, // mStatus + fopAc_ENEMY_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType }; AUDIO_INSTANCES;