From 372d7822823643eb290fe5e0ba9a733d29776b81 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Sat, 7 Jun 2025 07:37:27 -0700 Subject: [PATCH] d_a_b_gg equivalent (#2478) * b_gg equivalent * clean up b_gg * cleanup float literal --- configure.py | 2 +- include/d/actor/d_a_b_gg.h | 122 +- include/f_op/f_op_actor_mng.h | 8 + src/d/actor/d_a_b_gg.cpp | 6209 ++++++++++++++++++++++----------- 4 files changed, 4227 insertions(+), 2114 deletions(-) diff --git a/configure.py b/configure.py index 8b79f498cda..d0ddfa08f58 100755 --- a/configure.py +++ b/configure.py @@ -1606,7 +1606,7 @@ config.libs = [ ActorRel(Equivalent, "d_a_b_dr"), # weak func order ActorRel(Equivalent, "d_a_b_dre"), # weak func order ActorRel(Equivalent, "d_a_b_ds"), - ActorRel(NonMatching, "d_a_b_gg"), + ActorRel(Equivalent, "d_a_b_gg"), ActorRel(NonMatching, "d_a_b_gm"), ActorRel(NonMatching, "d_a_b_gnd"), ActorRel(MatchingFor("GZ2E01"), "d_a_b_go"), diff --git a/include/d/actor/d_a_b_gg.h b/include/d/actor/d_a_b_gg.h index 1dd38b80d2f..8ac07afd40e 100644 --- a/include/d/actor/d_a_b_gg.h +++ b/include/d/actor/d_a_b_gg.h @@ -2,6 +2,9 @@ #define D_A_B_GG_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" +#include "d/d_cc_uty.h" /** * @ingroup actors-enemies @@ -13,21 +16,21 @@ */ class daB_GG_c : public fopEn_enemy_c { public: - /* 805DE464 */ void CreateHeap(); + /* 805DE464 */ int CreateHeap(); /* 805DE650 */ void initCc(); /* 805DE7A4 */ void setCcCylinder(); /* 805DE9B8 */ void G_setCcCylinder(); /* 805DEAD0 */ void MoveCo(); - /* 805DEB44 */ void ctrlJoint(J3DJoint*, J3DModel*); - /* 805DED58 */ void HeadctrlJoint(J3DJoint*, J3DModel*); + /* 805DEB44 */ int ctrlJoint(J3DJoint*, J3DModel*); + /* 805DED58 */ int HeadctrlJoint(J3DJoint*, J3DModel*); /* 805DEF64 */ void SetAnm(int, int, f32, f32); /* 805DF9F4 */ void Yazirushi(); /* 805DFA48 */ void SpeedClear(); /* 805DFA64 */ void SetAction(u8, u8, u8); - /* 805DFA8C */ void GetAction(u8, u8, u8); + /* 805DFA8C */ u8 GetAction(u8, u8, u8); /* 805DFACC */ void DemoSkip(int); - /* 805DFC24 */ void DemoSkipCallBack(void*, int); - /* 805DFC58 */ void CameraSet(); + /* 805DFC24 */ static int DemoSkipCallBack(void*, int); + /* 805DFC58 */ bool CameraSet(); /* 805DFD78 */ void SetStopingCam(); /* 805DFDFC */ void SetStopCam(cXyz, f32, f32, s16); /* 805DFF4C */ void SetMoveCam(cXyz, f32, f32, s16, f32, f32); @@ -48,8 +51,8 @@ public: /* 805E4914 */ void F_DamageAction(); /* 805E5190 */ void AttentionChk(); /* 805E5220 */ void FlyAction(); - /* 805E561C */ void F_A_TargetMove(cXyz); - /* 805E53DC */ void F_A_TargetMove(cXyz, u8); + /* 805E561C */ bool F_A_TargetMove(cXyz); + /* 805E53DC */ bool F_A_TargetMove(cXyz, u8); /* 805E5808 */ void F_A_MoveAction(); /* 805E5D0C */ void F_A_WaitAction(); /* 805E5D2C */ void F_A_Action(); @@ -69,7 +72,7 @@ public: /* 805E9418 */ void HeadAction(); /* 805E9A28 */ void SetHeadAngle(); /* 805E9B48 */ void SoundChk(); - /* 805EA344 */ void Execute(); + /* 805EA344 */ int Execute(); /* 805EA72C */ void ObjHit(); /* 805EA74C */ void At_Check(); /* 805EA938 */ void MoveAt(); @@ -77,19 +80,97 @@ public: /* 805EAAFC */ void ChanceTime(); /* 805EB028 */ void ArmAngleSet(); /* 805EB090 */ void Guard(); - /* 805EB5E0 */ void Draw(); - /* 805EB8A8 */ void Delete(); + /* 805EB5E0 */ int Draw(); + /* 805EB8A8 */ int Delete(); /* 805EB910 */ void setBaseMtx(); /* 805EB980 */ void setShieldMtx(); /* 805EB9DC */ void setSwordMtx(); /* 805EBA4C */ void setSwordMtx1(); /* 805EBAB8 */ void setHeadMtx(); /* 805EBB30 */ void setHeadMtx1(); - /* 805EBBE4 */ void Create(); - /* 805EC424 */ daB_GG_c(); + /* 805EBBE4 */ int Create(); -private: - /* 0x5ac */ u8 field_0x5ac[0x116c - 0x5ac]; + /* 0x05AC */ f32 field_0x5ac; + /* 0x05B0 */ u8 field_0x5b0; + /* 0x05B1 */ u8 field_0x5b1; + /* 0x05B2 */ u8 field_0x5b2; + /* 0x05B4 */ s16 mInOutPosIdx; + /* 0x05B6 */ u8 field_0x5b6; + /* 0x05B7 */ u8 field_0x5b7; + /* 0x05B8 */ u8 field_0x5B8[0x05BA - 0x05B8]; + /* 0x05BA */ s16 field_0x5ba; + /* 0x05BC */ f32 field_0x5bc; + /* 0x05C0 */ f32 field_0x5c0; + /* 0x05C4 */ u8 field_0x5c4; + /* 0x05C5 */ u8 mAction; + /* 0x05C6 */ u8 mSubAction; + /* 0x05C7 */ u8 mMode; + /* 0x05C8 */ u8 mPrevAction; + /* 0x05C9 */ u8 mPrevSubAction; + /* 0x05CA */ u8 mPrevMode; + /* 0x05CB */ u8 mCamMode; + /* 0x05CC */ s16 field_0x5cc; + /* 0x05CE */ u8 field_0x5ce; + /* 0x05CF */ u8 field_0x5cf; + /* 0x05D0 */ u8 field_0x5d0; + /* 0x05D4 */ int mAnm; + /* 0x05D8 */ s16 mTimers[4]; + /* 0x05E0 */ s16 field_0x5e0; + /* 0x05E4 */ cXyz field_0x5e4; + /* 0x05F0 */ u8 field_0x5f0; + /* 0x05F4 */ cXyz mCamCenter; + /* 0x0600 */ cXyz mCamEye; + /* 0x060C */ cXyz field_0x60c; + /* 0x0618 */ cXyz field_0x618; + /* 0x0624 */ cXyz mCamCenterTarget; + /* 0x0630 */ cXyz mCamEyeTarget; + /* 0x063C */ f32 mCamFovy; + /* 0x0640 */ f32 mModelPlaySpeed; + /* 0x0644 */ f32 field_0x644; + /* 0x0648 */ f32 field_0x648; + /* 0x064C */ f32 field_0x64c; + /* 0x0650 */ f32 field_0x650; + /* 0x0654 */ u8 field_0x654[0x0658 - 0x0654]; + /* 0x0658 */ s16 field_0x658; + /* 0x065A */ s16 field_0x65a; + /* 0x065C */ cXyz field_0x65c; + /* 0x0668 */ f32 field_0x668; + /* 0x066C */ u8 field_0x66c; + /* 0x066D */ u8 field_0x66d; + /* 0x0670 */ cXyz mSwordPos; + /* 0x067C */ csXyz mSwordRot; + /* 0x0684 */ cXyz field_0x684; + /* 0x0690 */ u8 mType; + /* 0x0694 */ cXyz mHeadPos; + /* 0x06A0 */ csXyz mHeadRot; + /* 0x06A8 */ cXyz field_0x6a8; + /* 0x06B4 */ csXyz field_0x6b4; + /* 0x06BA */ u8 field_0x6ba; + /* 0x06BC */ s16 field_0x6bc; + /* 0x06BE */ s16 field_0x6be; + /* 0x06C0 */ u8 field_0x6C0[0x06C4 - 0x06C0]; + /* 0x06C4 */ s16 field_0x6c4; + /* 0x06C6 */ u8 field_0x6C6[0x06C8 - 0x06C6]; + /* 0x06C8 */ csXyz mArmL1Rot; + /* 0x06CE */ csXyz mArmL2Rot; + /* 0x06D4 */ s16 field_0x6d4; + /* 0x06D6 */ s16 field_0x6d6; + /* 0x06D8 */ dCcD_Cyl mCcCyl; + /* 0x0814 */ dCcD_Sph mCcSph[3]; + /* 0x0BBC */ dCcD_Cyl mCcHookCyl; + /* 0x0CF8 */ dCcD_Sph mCcShieldSph; + /* 0x0E30 */ mDoExt_McaMorfSO* mpModelMorf; + /* 0x0E34 */ J3DModel* mpShieldModel; + /* 0x0E38 */ J3DModel* mpSwordModel; + /* 0x0E3C */ J3DModel* mpHelmetModel; + /* 0x0E40 */ request_of_phase_process_class mPhase; + /* 0x0E48 */ u32 mShadowId; + /* 0x0E4C */ Z2CreatureEnemy mSound; + /* 0x0EF0 */ dBgS_AcchCir mAcchCir; + /* 0x0F30 */ dBgS_ObjAcch mAcch; + /* 0x1108 */ dCcD_Stts mCcStts; + /* 0x1144 */ dCcU_AtInfo mAtInfo; + /* 0x1168 */ u8 mHIOInit; }; STATIC_ASSERT(sizeof(daB_GG_c) == 0x116c); @@ -97,7 +178,16 @@ STATIC_ASSERT(sizeof(daB_GG_c) == 0x116c); class daB_GG_HIO_c { public: /* 805DE40C */ daB_GG_HIO_c(); - /* 805EC9C4 */ ~daB_GG_HIO_c(); + /* 805EC9C4 */ virtual ~daB_GG_HIO_c() {} + + /* 0x04 */ s8 id; + /* 0x08 */ f32 base_size; + /* 0x0C */ s16 takeoff_time; + /* 0x0E */ s16 fly_attack_wait_time; + /* 0x10 */ f32 fly_attack_speed; + /* 0x14 */ s16 takeoff2_time; + /* 0x16 */ s16 max_hp; + /* 0x18 */ f32 field_0x18; }; diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index b695b0eb709..e09d4a77e56 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -711,6 +711,14 @@ inline s32 fopAcM_seenPlayerAngleY(const fopAc_ac_c* i_actor) { return fopAcM_seenActorAngleY(i_actor, dComIfGp_getPlayer(0)); } +inline s16 fopAcM_toActorShapeAngleY(const fopAc_ac_c* i_actorA, const fopAc_ac_c* i_actorB) { + return i_actorA->shape_angle.y - i_actorB->shape_angle.y; +} + +inline s16 fopAcM_toPlayerShapeAngleY(const fopAc_ac_c* i_actor) { + return fopAcM_toActorShapeAngleY(i_actor, dComIfGp_getPlayer(0)); +} + s8 dComIfGp_getReverb(int roomNo); inline void fopAcM_seStartCurrent(const fopAc_ac_c* actor, u32 sfxID, u32 param_2) { diff --git a/src/d/actor/d_a_b_gg.cpp b/src/d/actor/d_a_b_gg.cpp index 66fa91f2ca0..ecc8083895b 100644 --- a/src/d/actor/d_a_b_gg.cpp +++ b/src/d/actor/d_a_b_gg.cpp @@ -4,2457 +4,4472 @@ */ #include "d/actor/d_a_b_gg.h" -#include "d/d_cc_d.h" -#include "dol2asm.h" -#include "d/d_camera.h" +#include "d/d_com_inf_game.h" +#include "c/c_damagereaction.h" +#include "m_Do/m_Do_graphic.h" +#include "Z2AudioLib/Z2Instances.h" + UNK_REL_DATA; #include "f_op/f_op_actor_enemy.h" +enum daE_GG_TYPE { + TYPE_L7_MBOSS = 0, + TYPE_L7_W = 1, + TYPE_L7_M = 2, + TYPE_HYRULE_CASTLE = 3, + TYPE_CAVE = 4, -// -// Forward References: -// - -extern "C" void __ct__12daB_GG_HIO_cFv(); -extern "C" void CreateHeap__8daB_GG_cFv(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" void initCc__8daB_GG_cFv(); -extern "C" void setCcCylinder__8daB_GG_cFv(); -extern "C" void G_setCcCylinder__8daB_GG_cFv(); -extern "C" void MoveCo__8daB_GG_cFv(); -extern "C" void ctrlJoint__8daB_GG_cFP8J3DJointP8J3DModel(); -extern "C" static void JointCallBack__FP8J3DJointi(); -extern "C" void HeadctrlJoint__8daB_GG_cFP8J3DJointP8J3DModel(); -extern "C" static void HeadJointCallBack__FP8J3DJointi(); -extern "C" void SetAnm__8daB_GG_cFiiff(); -extern "C" static void way_bg_check2__FP8daB_GG_c4cXyz4cXyz(); -extern "C" static void roofchk__FP8daB_GG_c(); -extern "C" static void other_bg_check__FP8daB_GG_cP10fopAc_ac_c(); -extern "C" static void Hanekaeri__FP8daB_GG_c4cXyz4cXyzf(); -extern "C" void Yazirushi__8daB_GG_cFv(); -extern "C" void SpeedClear__8daB_GG_cFv(); -extern "C" void SetAction__8daB_GG_cFUcUcUc(); -extern "C" void GetAction__8daB_GG_cFUcUcUc(); -extern "C" void DemoSkip__8daB_GG_cFi(); -extern "C" void DemoSkipCallBack__8daB_GG_cFPvi(); -extern "C" void CameraSet__8daB_GG_cFv(); -extern "C" void SetStopingCam__8daB_GG_cFv(); -extern "C" void SetStopCam__8daB_GG_cF4cXyzffs(); -extern "C" void SetMoveCam__8daB_GG_cF4cXyzffsff(); -extern "C" void SetMoveCam1__8daB_GG_cFff(); -extern "C" void SetReleaseCam__8daB_GG_cFv(); -extern "C" void St_CamAction__8daB_GG_cFv(); -extern "C" void St_DemoAction__8daB_GG_cFv(); -extern "C" void Md_CamAction__8daB_GG_cFv(); -extern "C" void Md_DemoAction__8daB_GG_cFv(); -extern "C" void Gn_CamAction__8daB_GG_cFv(); -extern "C" void Gn_DemoAction__8daB_GG_cFv(); -extern "C" void DemoAction__8daB_GG_cFv(); -extern "C" void F_WaitAction__8daB_GG_cFv(); -extern "C" void F_FookChk__8daB_GG_cFv(); -extern "C" void F_MoveAction__8daB_GG_cFv(); -extern "C" void F_LV7_W_MoveAction__8daB_GG_cFv(); -extern "C" void F_AttackAction__8daB_GG_cFv(); -extern "C" void F_DamageAction__8daB_GG_cFv(); -extern "C" void AttentionChk__8daB_GG_cFv(); -extern "C" void FlyAction__8daB_GG_cFv(); -extern "C" void F_A_TargetMove__8daB_GG_cF4cXyzUc(); -extern "C" void F_A_TargetMove__8daB_GG_cF4cXyz(); -extern "C" void F_A_MoveAction__8daB_GG_cFv(); -extern "C" void F_A_WaitAction__8daB_GG_cFv(); -extern "C" void F_A_Action__8daB_GG_cFv(); -extern "C" void FookChk__8daB_GG_cFv(); -extern "C" void CutChk__8daB_GG_cFv(); -extern "C" void G_MoveAction__8daB_GG_cFv(); -extern "C" void FallChk__8daB_GG_cFv(); -extern "C" void G_AttackAction__8daB_GG_cFv(); -extern "C" void G_DamageAction__8daB_GG_cFv(); -extern "C" void G_DeathAction__8daB_GG_cFv(); -extern "C" void G_DeathAction1__8daB_GG_cFv(); -extern "C" void __dt__8cM3dGPlaFv(); -extern "C" void DeathCam__8daB_GG_cFv(); -extern "C" void GroundAction__8daB_GG_cFv(); -extern "C" void StopAction__8daB_GG_cFv(); -extern "C" void HitChk__8daB_GG_cFv(); -extern "C" void Action__8daB_GG_cFv(); -extern "C" void HeadAction__8daB_GG_cFv(); -extern "C" void SetHeadAngle__8daB_GG_cFv(); -extern "C" void SoundChk__8daB_GG_cFv(); -extern "C" void Execute__8daB_GG_cFv(); -extern "C" void ObjHit__8daB_GG_cFv(); -extern "C" void At_Check__8daB_GG_cFv(); -extern "C" void MoveAt__8daB_GG_cFv(); -extern "C" void F_AtHit__8daB_GG_cFv(); -extern "C" void ChanceTime__8daB_GG_cFv(); -extern "C" void ArmAngleSet__8daB_GG_cFv(); -extern "C" void Guard__8daB_GG_cFv(); -extern "C" void Draw__8daB_GG_cFv(); -extern "C" void Delete__8daB_GG_cFv(); -extern "C" void setBaseMtx__8daB_GG_cFv(); -extern "C" void setShieldMtx__8daB_GG_cFv(); -extern "C" void setSwordMtx__8daB_GG_cFv(); -extern "C" void setSwordMtx1__8daB_GG_cFv(); -extern "C" void setHeadMtx__8daB_GG_cFv(); -extern "C" void setHeadMtx1__8daB_GG_cFv(); -extern "C" static void daB_GG_Draw__FP8daB_GG_c(); -extern "C" static void daB_GG_Execute__FP8daB_GG_c(); -extern "C" static bool daB_GG_IsDelete__FP8daB_GG_c(); -extern "C" static void daB_GG_Delete__FP8daB_GG_c(); -extern "C" void Create__8daB_GG_cFv(); -extern "C" void __ct__8daB_GG_cFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8dCcD_SphFv(); -extern "C" void __ct__8dCcD_SphFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" static void daB_GG_Create__FP10fopAc_ac_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__12daB_GG_HIO_cFv(); -extern "C" void __sinit_d_a_b_gg_cpp(); -extern "C" static void func_805ECBEC(); -extern "C" static void func_805ECBF4(); -extern "C" void __dt__4cXyzFv(); -extern "C" extern char const* const d_a_b_gg__stringBase0; - -// -// External References: -// - -extern "C" void onBlure__13mDoGph_gInf_cFv(); -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoMtx_ZrotM__FPA4_fs(); -extern "C" void mDoMtx_MtxToRot__FPA4_CfP5csXyz(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void scaleM__14mDoMtx_stack_cFfff(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff(); -extern "C" void play__16mDoExt_McaMorfSOFUlSc(); -extern "C" void entryDL__16mDoExt_McaMorfSOFv(); -extern "C" void modelCalc__16mDoExt_McaMorfSOFv(); -extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz(); -extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_searchActorDistance__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_orderPotentialEvent__FP10fopAc_ac_cUsUsUs(); -extern "C" void fopAcM_createDisappear__FPC10fopAc_ac_cPC4cXyzUcUcUc(); -extern "C" void dStage_changeScene__FifUlScsi(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void dComIfGs_onZoneSwitch__Fii(); -extern "C" void -dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj(); -extern "C" void onDungeonItem__12dSv_memBit_cFi(); -extern "C" void isDungeonItem__12dSv_memBit_cCFi(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void offSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void setSkipProc__14dEvt_control_cFPvPFPvi_ii(); -extern "C" void onSkipFade__14dEvt_control_cFv(); -extern "C" void setHitMark__13dPa_control_cFUsP10fopAc_ac_cPC4cXyzPC5csXyzPC4cXyzUl(); -extern "C" void -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void addReal__21dDlst_shadowControl_cFUlP8J3DModel(); -extern "C" void StartQuake__12dVibration_cFii4cXyz(); -extern "C" void StopQuake__12dVibration_cFi(); -extern "C" void LineCross__4cBgSFP11cBgS_LinChk(); -extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void __ct__11dBgS_LinChkFv(); -extern "C" void __dt__11dBgS_LinChkFv(); -extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Move__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ChkAtHit__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObj__12dCcD_GObjInfFv(); -extern "C" void getHitSeID__12dCcD_GObjInfFUci(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void at_power_check__FP11dCcU_AtInfo(); -extern "C" void checkMasterSwordEquip__9daPy_py_cFv(); -extern "C" void cancelBoomerangLockActor__9daPy_py_cFP10fopAc_ac_c(); -extern "C" void Start__9dCamera_cFv(); -extern "C" void Stop__9dCamera_cFv(); -extern "C" void SetTrimSize__9dCamera_cFl(); -extern "C" void Set__9dCamera_cF4cXyz4cXyzfs(); -extern "C" void Reset__9dCamera_cF4cXyz4cXyz(); -extern "C" void dCam_getBody__Fv(); -extern "C" void Eye__9dCamera_cFv(); -extern "C" void Center__9dCamera_cFv(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void dKy_darkworld_check__Fv(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __apl__5csXyzFR5csXyz(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rndF__Ff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_addCalcPos__FP4cXyzRC4cXyzfff(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void cLib_chasePos__FP4cXyzRC4cXyzf(); -extern "C" void cLib_chaseAngleS__FPsss(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void cLib_offsetPos__FP4cXyzPC4cXyzsPC4cXyz(); -extern "C" void MtxPosition__FP4cXyzP4cXyz(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void subBgmStart__8Z2SeqMgrFUl(); -extern "C" void subBgmStop__8Z2SeqMgrFv(); -extern "C" void __ct__15Z2CreatureEnemyFv(); -extern "C" void init__15Z2CreatureEnemyFP3VecP3VecUcUc(); -extern "C" void setLinkSearch__15Z2CreatureEnemyFb(); -extern "C" void setEnemyName__15Z2CreatureEnemyFPCc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void checkPass__12J3DFrameCtrlFf(); -extern "C" void __construct_array(); -extern "C" void _savegpr_19(); -extern "C" void _savegpr_22(); -extern "C" void _savegpr_23(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_19(); -extern "C" void _restgpr_22(); -extern "C" void _restgpr_23(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" u8 mCurrentMtx__6J3DSys[48]; -extern "C" extern u8 mBlureFlag__13mDoGph_gInf_c[4]; -extern "C" extern u8 struct_80450C98[4]; -extern "C" u8 m_midnaActor__9daPy_py_c[4]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 805ED08C-805ED090 00002C 0004+00 0/4 0/0 0/0 .rodata @3932 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3932 = 4.0f / 5.0f; -COMPILER_STRIP_GATE(0x805ED08C, &lit_3932); -#pragma pop - -/* 805ED090-805ED094 000030 0004+00 0/4 0/0 0/0 .rodata @3933 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3933 = 3.0f; -COMPILER_STRIP_GATE(0x805ED090, &lit_3933); -#pragma pop - -/* 805ED094-805ED098 000034 0004+00 1/8 0/0 0/0 .rodata @3934 */ -SECTION_RODATA static f32 const lit_3934 = 0.5f; -COMPILER_STRIP_GATE(0x805ED094, &lit_3934); - -/* 805ED428-805ED47C -00001 0054+00 1/1 0/0 0/0 .data @5037 */ -SECTION_DATA static void* lit_5037[21] = { - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0x88), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0x264), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0x2B8), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0x3DC), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0x46C), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0x668), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0x868), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0x8C4), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0x924), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0xC40), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0xC40), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0xA70), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0x160), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0xC40), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0xC40), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0xC40), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0xC40), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0xC40), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0xC40), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0xC40), - (void*)(((char*)St_CamAction__8daB_GG_cFv) + 0xA80), + TYPE_DEFAULT = 0xFF, }; -/* 805ED47C-805ED498 -00001 001C+00 1/1 0/0 0/0 .data @5652 */ -SECTION_DATA static void* lit_5652[7] = { - (void*)(((char*)Gn_CamAction__8daB_GG_cFv) + 0x50), - (void*)(((char*)Gn_CamAction__8daB_GG_cFv) + 0xB4), - (void*)(((char*)Gn_CamAction__8daB_GG_cFv) + 0x164), - (void*)(((char*)Gn_CamAction__8daB_GG_cFv) + 0x2A4), - (void*)(((char*)Gn_CamAction__8daB_GG_cFv) + 0x394), - (void*)(((char*)Gn_CamAction__8daB_GG_cFv) + 0x3BC), - (void*)(((char*)Gn_CamAction__8daB_GG_cFv) + 0x4EC), +enum daE_GG_ACTION { + ACTION_FLY, + ACTION_GROUND, + ACTION_F_A, + ACTION_DEMO, + ACTION_STOP, }; -/* 805ED498-805ED4D0 -00001 0038+00 1/1 0/0 0/0 .data @6629 */ -SECTION_DATA static void* lit_6629[14] = { - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0x58), - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0x94), - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0xD8), - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0x864), - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0x864), - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0x864), - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0x864), - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0x864), - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0x864), - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0x864), - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0x140), - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0x364), - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0x584), - (void*)(((char*)F_DamageAction__8daB_GG_cFv) + 0x768), -}; +enum { + SUBACT_WAIT = 0, + SUBACT_MOVE = 1, + SUBACT_ATTACK = 2, + SUBACT_DAMAGE = 3, + SUBACT_DEATH = 4, -/* 805ED4D0-805ED4FC -00001 002C+00 1/1 0/0 0/0 .data @7820 */ -SECTION_DATA static void* lit_7820[11] = { - (void*)(((char*)G_DamageAction__8daB_GG_cFv) + 0x84), - (void*)(((char*)G_DamageAction__8daB_GG_cFv) + 0x474), - (void*)(((char*)G_DamageAction__8daB_GG_cFv) + 0x524), - (void*)(((char*)G_DamageAction__8daB_GG_cFv) + 0x738), - (void*)(((char*)G_DamageAction__8daB_GG_cFv) + 0x86C), - (void*)(((char*)G_DamageAction__8daB_GG_cFv) + 0x988), - (void*)(((char*)G_DamageAction__8daB_GG_cFv) + 0x988), - (void*)(((char*)G_DamageAction__8daB_GG_cFv) + 0x988), - (void*)(((char*)G_DamageAction__8daB_GG_cFv) + 0x988), - (void*)(((char*)G_DamageAction__8daB_GG_cFv) + 0x988), - (void*)(((char*)G_DamageAction__8daB_GG_cFv) + 0x938), -}; - -/* 805ED4FC-805ED56C -00001 0070+00 1/1 0/0 0/0 .data @8743 */ -SECTION_DATA static void* lit_8743[28] = { - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x48), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x7E4), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x100), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x7E4), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x7E4), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x1A8), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x1F0), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x238), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x7E4), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x298), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x2DC), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x324), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x3B0), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x43C), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x4C8), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x7E4), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x7E4), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x510), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x5E4), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x7E4), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x7E4), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x7E4), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x7E4), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x628), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x7E4), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x670), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x6B4), - (void*)(((char*)SoundChk__8daB_GG_cFv) + 0x714), -}; - -/* 805ED56C-805ED5E0 -00001 0074+00 1/1 0/0 0/0 .data @9091 */ -SECTION_DATA static void* lit_9091[29] = { - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x34), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x48), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x54), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x48), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x54), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x54), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x34), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x48), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x64), - (void*)(((char*)ArmAngleSet__8daB_GG_cFv) + 0x34), -}; - -/* 805ED5E0-805ED600 -00001 0020+00 1/0 0/0 0/0 .data l_daB_GG_Method */ -static actor_method_class l_daB_GG_Method = { - (process_method_func)daB_GG_Create__FP10fopAc_ac_c, - (process_method_func)daB_GG_Delete__FP8daB_GG_c, - (process_method_func)daB_GG_Execute__FP8daB_GG_c, - (process_method_func)daB_GG_IsDelete__FP8daB_GG_c, - (process_method_func)daB_GG_Draw__FP8daB_GG_c, -}; - -/* 805ED600-805ED630 -00001 0030+00 0/0 0/0 1/0 .data g_profile_B_GG */ -extern actor_process_profile_definition g_profile_B_GG = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_B_GG, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daB_GG_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 230, // mPriority - &l_daB_GG_Method, // sub_method - 0x000C0100, // mStatus - fopAc_ENEMY_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 805ED630-805ED63C 000240 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; - -/* 805ED63C-805ED648 00024C 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 805ED648-805ED654 000258 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 805ED654-805ED678 000264 0024+00 2/2 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_805ECBF4, - (void*)NULL, - (void*)NULL, - (void*)func_805ECBEC, -}; - -/* 805ED678-805ED684 000288 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 805ED684-805ED690 000294 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 805ED690-805ED69C 0002A0 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 805ED69C-805ED6A8 0002AC 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGPla */ -SECTION_DATA extern void* __vt__8cM3dGPla[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGPlaFv, -}; - -/* 805ED6A8-805ED6B4 0002B8 000C+00 2/2 0/0 0/0 .data __vt__12daB_GG_HIO_c */ -SECTION_DATA extern void* __vt__12daB_GG_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12daB_GG_HIO_cFv, + // DEMO + SUBACT_DEMO_ST = 0, + SUBACT_DEMO_MD = 1, + SUBACT_DEMO_GN = 2, }; /* 805DE40C-805DE464 0000EC 0058+00 1/1 0/0 0/0 .text __ct__12daB_GG_HIO_cFv */ daB_GG_HIO_c::daB_GG_HIO_c() { - // NONMATCHING + id = -1; + base_size = 0.8f; + takeoff_time = 400; + fly_attack_speed = 3.0f; + fly_attack_wait_time = 80; + takeoff2_time = 250; + max_hp = 700; + field_0x18 = 0.5f; } -/* ############################################################################################## */ -/* 805ED3D4-805ED3D4 000374 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_805ED3D4 = "B_gg"; -#pragma pop - /* 805DE464-805DE630 000144 01CC+00 1/1 0/0 0/0 .text CreateHeap__8daB_GG_cFv */ -void daB_GG_c::CreateHeap() { - // NONMATCHING +int daB_GG_c::CreateHeap() { + J3DModelData* modelData; + modelData = (J3DModelData*)dComIfG_getObjectRes("B_gg", 0x23); + JUT_ASSERT(207, modelData != 0); + + mpModelMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("B_gg", 0xE), 2, 1.0f, 0, -1, &mSound, 0x80000, 0x11000084); + if (mpModelMorf == NULL || mpModelMorf->getModel() == NULL) { + return 0; + } + + modelData = (J3DModelData*)dComIfG_getObjectRes("B_gg", 0x25); + mpShieldModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpShieldModel == NULL) { + return 0; + } + + modelData = (J3DModelData*)dComIfG_getObjectRes("B_gg", 0x26); + mpSwordModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpSwordModel == NULL) { + return 0; + } + + if (mType == TYPE_L7_MBOSS || mType == TYPE_DEFAULT) { + modelData = (J3DModelData*)dComIfG_getObjectRes("B_gg", 0x24); + mpHelmetModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpHelmetModel == NULL) { + return 0; + } + } + + return 1; } /* 805DE630-805DE650 000310 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* i_this) { + daB_GG_c* a_this = (daB_GG_c*)i_this; + return a_this->CreateHeap(); } -/* ############################################################################################## */ -/* 805ED098-805ED0DC 000038 0044+00 0/1 0/0 0/0 .rodata ccCylSrc$3979 */ -#pragma push -#pragma force_active on -const static dCcD_SrcCyl ccCylSrc = { - { - {0x0, {{AT_TYPE_CSTATUE_SWING, 0x1, 0x3}, {0xd8fbbdff, 0x43}, 0x75}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x2, 0x0, 0x0, 0x1}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {0.0f, 0.0f, 0.0f}, // mCenter - 130.0f, // mRadius - 200.0f // mHeight - } // mCyl -}; -#pragma pop - -/* 805ED0DC-805ED120 00007C 0044+00 0/1 0/0 0/0 .rodata ccHookSrc$3980 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const ccHookSrc[68] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 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, 0x43, 0x02, 0x00, 0x00, 0x43, 0x48, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x805ED0DC, &ccHookSrc); -#pragma pop - -/* 805ED120-805ED160 0000C0 0040+00 0/1 0/0 0/0 .rodata ccShieldSphSrc$3981 */ -#pragma push -#pragma force_active on -const static dCcD_SrcSph ccShieldSphSrc = { - { - {0x0, {{AT_TYPE_CSTATUE_SWING, 0x1, 0x0}, {0xd8fbbdff, 0x3}, 0x75}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {{0.0f, 0.0f, 0.0f}, 50.0f} // mSph - } // mSphAttr -}; -#pragma pop - -/* 805ED160-805ED1A0 000100 0040+00 0/1 0/0 0/0 .rodata ccSphSrc$3982 */ -#pragma push -#pragma force_active on -const static dCcD_SrcSph ccSphSrc = { - { - {0x0, {{AT_TYPE_CSTATUE_SWING, 0x2, 0xd}, {0x0, 0x0}, 0x0}}, // mObj - {dCcD_SE_SWORD, 0x0, 0x7, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x1}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {{0.0f, 0.0f, 0.0f}, 50.0f} // mSph - } // mSphAttr -}; -#pragma pop - /* 805DE650-805DE7A4 000330 0154+00 1/1 0/0 0/0 .text initCc__8daB_GG_cFv */ void daB_GG_c::initCc() { - // NONMATCHING + const static dCcD_SrcCyl ccCylSrc = { + { + {0x0, {{AT_TYPE_CSTATUE_SWING, 0x1, 0x3}, {0xd8fbbdff, 0x43}, 0x75}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x2, 0x0, 0x0, 0x1}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {0.0f, 0.0f, 0.0f}, // mCenter + 130.0f, // mRadius + 200.0f // mHeight + } // mCyl + }; + + const static dCcD_SrcCyl ccHookSrc = { + { + {0x0, {{0x0, 0x1, 0x0}, {0x4000, 0x3}, 0x0}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x2, 0x0, 0x0, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {0.0f, 0.0f, 0.0f}, // mCenter + 130.0f, // mRadius + 200.0f // mHeight + } // mCyl + }; + + const static dCcD_SrcSph ccShieldSphSrc = { + { + {0x0, {{AT_TYPE_CSTATUE_SWING, 0x1, 0x0}, {0xd8fbbdff, 0x3}, 0x75}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 50.0f} // mSph + } // mSphAttr + }; + + const static dCcD_SrcSph ccSphSrc = { + { + {0x0, {{AT_TYPE_CSTATUE_SWING, 0x2, 0xd}, {0x0, 0x0}, 0x0}}, // mObj + {dCcD_SE_SWORD, 0x0, 0x7, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x1}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 50.0f} // mSph + } // mSphAttr + }; + + mCcStts.Init(254, 0xFF, this); + mCcCyl.Set(ccCylSrc); + mCcCyl.SetStts(&mCcStts); + mCcCyl.SetC(current.pos); + mCcCyl.OffAtSetBit(); + mCcCyl.OnTgNoHitMark(); + mCcCyl.OnTgShield(); + + mCcHookCyl.Set(ccHookSrc); + mCcHookCyl.SetStts(&mCcStts); + mCcHookCyl.SetC(current.pos); + mCcHookCyl.OffAtSetBit(); + mCcHookCyl.OnTgNoHitMark(); + + mCcShieldSph.Set(ccShieldSphSrc); + mCcShieldSph.SetStts(&mCcStts); + mCcShieldSph.SetC(current.pos); + mCcShieldSph.OnTgNoHitMark(); + mCcShieldSph.OnTgShield(); + + for (int i = 0; i < 3; i++) { + mCcSph[i].Set(ccSphSrc); + mCcSph[i].SetStts(&mCcStts); + mCcSph[i].SetC(current.pos); + mCcSph[i].OffTgNoHitMark(); + mCcSph[i].OffTgSetBit(); + } } -/* ############################################################################################## */ -/* 805ED1A0-805ED1A8 000140 0004+04 0/10 0/0 0/0 .rodata @4064 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4064[1 + 1 /* padding */] = { - 50.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x805ED1A0, &lit_4064); -#pragma pop - -/* 805ED1A8-805ED1B0 000148 0008+00 3/10 0/0 0/0 .rodata @4066 */ -SECTION_RODATA static u8 const lit_4066[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x805ED1A8, &lit_4066); - -/* 805ED6C0-805ED6C4 000008 0001+03 14/14 0/0 0/0 .bss @1109 */ -static u8 lit_1109[1 + 3 /* padding */]; - -/* 805ED6C4-805ED6C8 00000C 0001+03 0/0 0/0 0/0 .bss @1107 */ -#pragma push -#pragma force_active on -static u8 lit_1107[1 + 3 /* padding */]; -#pragma pop - -/* 805ED6C8-805ED6CC 000010 0001+03 0/0 0/0 0/0 .bss @1105 */ -#pragma push -#pragma force_active on -static u8 lit_1105[1 + 3 /* padding */]; -#pragma pop - -/* 805ED6CC-805ED6D0 000014 0001+03 0/0 0/0 0/0 .bss @1104 */ -#pragma push -#pragma force_active on -static u8 lit_1104[1 + 3 /* padding */]; -#pragma pop - -/* 805ED6D0-805ED6D4 000018 0001+03 0/0 0/0 0/0 .bss @1099 */ -#pragma push -#pragma force_active on -static u8 lit_1099[1 + 3 /* padding */]; -#pragma pop - -/* 805ED6D4-805ED6D8 00001C 0001+03 0/0 0/0 0/0 .bss @1097 */ -#pragma push -#pragma force_active on -static u8 lit_1097[1 + 3 /* padding */]; -#pragma pop - -/* 805ED6D8-805ED6DC 000020 0001+03 0/0 0/0 0/0 .bss @1095 */ -#pragma push -#pragma force_active on -static u8 lit_1095[1 + 3 /* padding */]; -#pragma pop - -/* 805ED6DC-805ED6E0 000024 0001+03 0/0 0/0 0/0 .bss @1094 */ -#pragma push -#pragma force_active on -static u8 lit_1094[1 + 3 /* padding */]; -#pragma pop - -/* 805ED6E0-805ED6E4 000028 0001+03 0/0 0/0 0/0 .bss @1057 */ -#pragma push -#pragma force_active on -static u8 lit_1057[1 + 3 /* padding */]; -#pragma pop - -/* 805ED6E4-805ED6E8 00002C 0001+03 0/0 0/0 0/0 .bss @1055 */ -#pragma push -#pragma force_active on -static u8 lit_1055[1 + 3 /* padding */]; -#pragma pop - -/* 805ED6E8-805ED6EC 000030 0001+03 0/0 0/0 0/0 .bss @1053 */ -#pragma push -#pragma force_active on -static u8 lit_1053[1 + 3 /* padding */]; -#pragma pop - -/* 805ED6EC-805ED6F0 000034 0001+03 0/0 0/0 0/0 .bss @1052 */ -#pragma push -#pragma force_active on -static u8 lit_1052[1 + 3 /* padding */]; -#pragma pop - -/* 805ED6F0-805ED6F4 000038 0001+03 0/0 0/0 0/0 .bss @1014 */ -#pragma push -#pragma force_active on -static u8 lit_1014[1 + 3 /* padding */]; -#pragma pop - -/* 805ED6F4-805ED6F8 00003C 0001+03 0/0 0/0 0/0 .bss @1012 */ -#pragma push -#pragma force_active on -static u8 lit_1012[1 + 3 /* padding */]; -#pragma pop - -/* 805ED6F8-805ED6FC 000040 0001+03 0/0 0/0 0/0 .bss @1010 */ -#pragma push -#pragma force_active on -static u8 lit_1010[1 + 3 /* padding */]; -#pragma pop +UNK_REL_BSS /* 805ED6FC-805ED700 -00001 0004+00 1/2 0/0 0/0 .bss None */ -/* 805ED6FC 0001+00 data_805ED6FC @1009 */ -/* 805ED6FD 0003+00 data_805ED6FD None */ -static u8 struct_805ED6FC[4]; - -/* 805ED700-805ED70C 000048 000C+00 0/1 0/0 0/0 .bss @3927 */ -#pragma push -#pragma force_active on -static u8 lit_3927[12]; -#pragma pop +/* 805ED6FD 0003+00 l_HIOInit None */ +static u8 l_HIOInit; /* 805ED70C-805ED728 000054 001C+00 4/9 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[28]; +static daB_GG_HIO_c l_HIO; /* 805DE7A4-805DE9B8 000484 0214+00 1/1 0/0 0/0 .text setCcCylinder__8daB_GG_cFv */ void daB_GG_c::setCcCylinder() { - // NONMATCHING -} + mCcCyl.SetC(current.pos); + mCcCyl.SetR(100.0f * l_HIO.base_size); + dComIfG_Ccsp()->Set(&mCcCyl); -/* ############################################################################################## */ -/* 805ED1B0-805ED1B4 000150 0004+00 1/5 0/0 0/0 .rodata @4089 */ -SECTION_RODATA static f32 const lit_4089 = 150.0f; -COMPILER_STRIP_GATE(0x805ED1B0, &lit_4089); + mCcHookCyl.SetC(current.pos); + mCcHookCyl.SetR(100.0f * l_HIO.base_size); + dComIfG_Ccsp()->Set(&mCcHookCyl); + + cXyz center_pos; + for (int i = 0; i < 3; i++) { + center_pos.set(0.0f, (50.0f + (100.0f * i)) * l_HIO.base_size, 0.0f); + + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(0x10)); + mDoMtx_stack_c::multVec(¢er_pos, ¢er_pos); + + mCcSph[i].SetC(center_pos); + mCcSph[i].SetR(100.0f * l_HIO.base_size); + dComIfG_Ccsp()->Set(&mCcSph[i]); + } + + center_pos.set(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(0xB)); + mDoMtx_stack_c::multVec(¢er_pos, ¢er_pos); + + mCcShieldSph.SetC(center_pos); + mCcShieldSph.SetR(50.0f * l_HIO.base_size); + dComIfG_Ccsp()->Set(&mCcShieldSph); +} /* 805DE9B8-805DEAD0 000698 0118+00 1/1 0/0 0/0 .text G_setCcCylinder__8daB_GG_cFv */ void daB_GG_c::G_setCcCylinder() { - // NONMATCHING -} + cXyz center_pos; -/* ############################################################################################## */ -/* 805ED1B4-805ED1B8 000154 0004+00 2/6 0/0 0/0 .rodata @4100 */ -SECTION_RODATA static f32 const lit_4100 = 10000.0f; -COMPILER_STRIP_GATE(0x805ED1B4, &lit_4100); + mCcCyl.SetC(current.pos); + mCcCyl.SetR(100.0f * l_HIO.base_size); + dComIfG_Ccsp()->Set(&mCcCyl); + + mCcHookCyl.SetC(current.pos); + mCcHookCyl.SetR(100.0f * l_HIO.base_size); + dComIfG_Ccsp()->Set(&mCcHookCyl); + + center_pos.set(yREG_F(15), yREG_F(16), 50.0f + yREG_F(17)); + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(0xB)); + mDoMtx_stack_c::multVec(¢er_pos, ¢er_pos); + + mCcShieldSph.SetC(center_pos); + mCcShieldSph.SetR((150.0f + yREG_F(18)) * l_HIO.base_size); + dComIfG_Ccsp()->Set(&mCcShieldSph); +} /* 805DEAD0-805DEB44 0007B0 0074+00 1/1 0/0 0/0 .text MoveCo__8daB_GG_cFv */ void daB_GG_c::MoveCo() { - // NONMATCHING + cXyz center_pos; + center_pos = current.pos; + center_pos.y += 10000.0f; + + mCcCyl.SetC(center_pos); + mCcShieldSph.SetC(center_pos); + mCcHookCyl.SetC(center_pos); } -/* ############################################################################################## */ -/* 805ED1B8-805ED1BC 000158 0004+00 1/1 0/0 0/0 .rodata @4147 */ -SECTION_RODATA static f32 const lit_4147 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x805ED1B8, &lit_4147); - -/* 805ED1BC-805ED1C0 00015C 0004+00 1/1 0/0 0/0 .rodata @4148 */ -SECTION_RODATA static f32 const lit_4148 = 7.0f / 10.0f; -COMPILER_STRIP_GATE(0x805ED1BC, &lit_4148); - /* 805DEB44-805DED0C 000824 01C8+00 1/1 0/0 0/0 .text ctrlJoint__8daB_GG_cFP8J3DJointP8J3DModel */ -void daB_GG_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { - // NONMATCHING +int daB_GG_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { + J3DJoint* temp_r28 = i_joint; + + int jnt_no = temp_r28->getJntNo(); + mDoMtx_stack_c::copy(i_model->getAnmMtx(jnt_no)); + + csXyz spC; + switch (jnt_no) { + case 1: + mDoMtx_stack_c::ZrotM(0.3f * field_0x6c4); + break; + case 5: + mDoMtx_stack_c::YrotM(-field_0x6be); + mDoMtx_stack_c::ZrotM(0.7f * field_0x6c4); + break; + case 9: + mDoMtx_stack_c::ZrotM((s16)mArmL1Rot.z); + mDoMtx_stack_c::XrotM((s16)mArmL1Rot.x); + mDoMtx_stack_c::YrotM((s16)mArmL1Rot.y); + break; + case 10: + mDoMtx_stack_c::ZrotM((s16)mArmL2Rot.z); + mDoMtx_stack_c::XrotM((s16)mArmL2Rot.x); + mDoMtx_stack_c::YrotM((s16)mArmL2Rot.y); + break; + } + + i_model->setAnmMtx(jnt_no, mDoMtx_stack_c::get()); + cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + return 1; } /* 805DED0C-805DED58 0009EC 004C+00 1/1 0/0 0/0 .text JointCallBack__FP8J3DJointi */ -static void JointCallBack(J3DJoint* param_0, int param_1) { - // NONMATCHING +static int JointCallBack(J3DJoint* i_joint, int param_1) { + if (param_1 == 0) { + J3DModel* model = j3dSys.getModel(); + daB_GG_c* a_this = (daB_GG_c*)model->getUserArea(); + + if (a_this != NULL) { + a_this->ctrlJoint(i_joint, model); + } + } + + return 1; } /* 805DED58-805DEF18 000A38 01C0+00 1/1 0/0 0/0 .text * HeadctrlJoint__8daB_GG_cFP8J3DJointP8J3DModel */ -void daB_GG_c::HeadctrlJoint(J3DJoint* param_0, J3DModel* param_1) { - // NONMATCHING +int daB_GG_c::HeadctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { + int jnt_no = i_joint->getJntNo(); + mDoMtx_stack_c::copy(i_model->getAnmMtx(jnt_no)); + + switch (jnt_no) { + case 1: + mDoMtx_stack_c::YrotM(0.5f * field_0x6d4); + mDoMtx_stack_c::ZrotM(0.5f * field_0x6d6); + break; + case 2: + mDoMtx_stack_c::YrotM(0.5f * field_0x6d4); + mDoMtx_stack_c::ZrotM(0.5f * field_0x6d6); + break; + } + + i_model->setAnmMtx(jnt_no, mDoMtx_stack_c::get()); + cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + return 1; } /* 805DEF18-805DEF64 000BF8 004C+00 1/1 0/0 0/0 .text HeadJointCallBack__FP8J3DJointi */ -static void HeadJointCallBack(J3DJoint* param_0, int param_1) { - // NONMATCHING -} +static int HeadJointCallBack(J3DJoint* i_joint, int param_1) { + if (param_1 == 0) { + J3DModel* model = j3dSys.getModel(); + daB_GG_c* a_this = (daB_GG_c*)model->getUserArea(); -/* ############################################################################################## */ -/* 805ED1C0-805ED1C4 000160 0004+00 1/5 0/0 0/0 .rodata @4220 */ -SECTION_RODATA static f32 const lit_4220 = -1.0f; -COMPILER_STRIP_GATE(0x805ED1C0, &lit_4220); + if (a_this != NULL) { + a_this->HeadctrlJoint(i_joint, model); + } + } + + return 1; +} /* 805DEF64-805DF010 000C44 00AC+00 15/15 0/0 0/0 .text SetAnm__8daB_GG_cFiiff */ -void daB_GG_c::SetAnm(int param_0, int param_1, f32 param_2, f32 param_3) { - // NONMATCHING +void daB_GG_c::SetAnm(int i_anm, int i_mode, f32 i_morf, f32 i_speed) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_gg", i_anm), i_mode, i_morf, i_speed, 0.0f, -1.0f); + mAnm = i_anm; } -/* ############################################################################################## */ -/* 805ED1C4-805ED1C8 000164 0004+00 1/4 0/0 0/0 .rodata @4250 */ -SECTION_RODATA static f32 const lit_4250 = 30.0f; -COMPILER_STRIP_GATE(0x805ED1C4, &lit_4250); - /* 805DF010-805DF0B8 000CF0 00A8+00 1/1 0/0 0/0 .text way_bg_check2__FP8daB_GG_c4cXyz4cXyz */ -static void way_bg_check2(daB_GG_c* param_0, cXyz param_1, cXyz param_2) { - // NONMATCHING +static BOOL way_bg_check2(daB_GG_c* a_this, cXyz i_start, cXyz i_end) { + dBgS_LinChk line_chk; + i_start.y += 30.0f; + line_chk.Set(&i_start, &i_end, a_this); + + if (dComIfG_Bgsp().LineCross(&line_chk)) { + return TRUE; + } + + return FALSE; } -/* ############################################################################################## */ -/* 805ED1C8-805ED1CC 000168 0004+00 0/7 0/0 0/0 .rodata @4251 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4251 = 300.0f; -COMPILER_STRIP_GATE(0x805ED1C8, &lit_4251); -#pragma pop - -/* 805ED1CC-805ED1D0 00016C 0004+00 1/2 0/0 0/0 .rodata @4291 */ -SECTION_RODATA static f32 const lit_4291 = 700.0f; -COMPILER_STRIP_GATE(0x805ED1CC, &lit_4291); +static f32 dummyFloat() { + return 300.0f; +} /* 805DF0B8-805DF178 000D98 00C0+00 1/1 0/0 0/0 .text roofchk__FP8daB_GG_c */ -static void roofchk(daB_GG_c* param_0) { - // NONMATCHING +static BOOL roofchk(daB_GG_c* a_this) { + dBgS_LinChk line_chk; + cXyz sp24; + cXyz start; + cXyz end; + + start = a_this->current.pos; + end = a_this->current.pos; + end.y += 700.0f; + line_chk.Set(&start, &end, a_this); + + if (dComIfG_Bgsp().LineCross(&line_chk)) { + a_this->current.pos.y = a_this->old.pos.y; + return TRUE; + } + + return FALSE; } /* 805DF178-805DF250 000E58 00D8+00 2/2 0/0 0/0 .text other_bg_check__FP8daB_GG_cP10fopAc_ac_c */ -static void other_bg_check(daB_GG_c* param_0, fopAc_ac_c* param_1) { - // NONMATCHING +static BOOL other_bg_check(daB_GG_c* a_this, fopAc_ac_c* i_other) { + fopAc_ac_c* i_this = (fopAc_ac_c*)a_this; + dBgS_LinChk line_chk; + cXyz sp28; + cXyz start; + cXyz end; + + end = i_other->current.pos; + end.y += 100.0f; + + start = i_this->current.pos; + start.y += 100.0f; + + line_chk.Set(&start, &end, i_this); + + if (dComIfG_Bgsp().LineCross(&line_chk)) { + return TRUE; + } + + return FALSE; } -/* ############################################################################################## */ -/* 805ED1D0-805ED1D4 000170 0004+00 0/1 0/0 0/0 .rodata @4320 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4320 = 800.0f; -COMPILER_STRIP_GATE(0x805ED1D0, &lit_4320); -#pragma pop - -/* 805ED1D4-805ED1D8 000174 0004+00 0/4 0/0 0/0 .rodata @4530 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4530 = 2.0f; -COMPILER_STRIP_GATE(0x805ED1D4, &lit_4530); -#pragma pop +static f32 dummyFloat2() { + return 800.0f; +} /* 805DF250-805DF9F4 000F30 07A4+00 1/1 0/0 0/0 .text Hanekaeri__FP8daB_GG_c4cXyz4cXyzf */ -static void Hanekaeri(daB_GG_c* param_0, cXyz param_1, cXyz param_2, f32 param_3) { - // NONMATCHING +static cXyz Hanekaeri(daB_GG_c* a_this, cXyz param_1, cXyz param_2, f32 param_3) { + cXyz sp28; + + f32 temp_f1 = param_2.abs(); + sp28.x = param_2.x / temp_f1; + sp28.y = param_2.y / temp_f1; + sp28.z = param_2.z / temp_f1; + + cXyz ret; + cXyz sp1C; + cXyz sp10; + + sp1C -= param_1; + sp28 *= 2.0f * sp1C.inprod(param_2); + sp28 += param_1; + + f32 temp_f30 = param_3 * param_1.abs(); + + ret.x = 0.8f * ((sp28.x / sp28.abs()) * param_1.abs()); + ret.y = temp_f30 * (sp28.y / sp28.abs()); + ret.z = 0.8f * ((sp28.z / sp28.abs()) * param_1.abs()); + return ret; } /* 805DF9F4-805DFA48 0016D4 0054+00 1/1 0/0 0/0 .text Yazirushi__8daB_GG_cFv */ void daB_GG_c::Yazirushi() { - // NONMATCHING + eyePos = current.pos; + eyePos.y += 150.0f; + + attention_info.position = eyePos; + attention_info.position.y += 150.0f; } /* 805DFA48-805DFA64 001728 001C+00 8/8 0/0 0/0 .text SpeedClear__8daB_GG_cFv */ void daB_GG_c::SpeedClear() { - // NONMATCHING + speedF = 0.0f; + field_0x5bc = 0.0f; + speed.y = 0.0f; + field_0x5c0 = 0.0f; } /* 805DFA64-805DFA8C 001744 0028+00 13/13 0/0 0/0 .text SetAction__8daB_GG_cFUcUcUc */ -void daB_GG_c::SetAction(u8 param_0, u8 param_1, u8 param_2) { - // NONMATCHING +void daB_GG_c::SetAction(u8 i_action, u8 i_subAction, u8 i_mode) { + mPrevAction = mAction; + mPrevSubAction = mSubAction; + mPrevMode = mMode; + + mAction = i_action; + mSubAction = i_subAction; + mMode = i_mode; } /* 805DFA8C-805DFACC 00176C 0040+00 1/1 0/0 0/0 .text GetAction__8daB_GG_cFUcUcUc */ -void daB_GG_c::GetAction(u8 param_0, u8 param_1, u8 param_2) { - // NONMATCHING +u8 daB_GG_c::GetAction(u8 i_action, u8 i_subAction, u8 i_mode) { + if (mPrevAction == i_action && mPrevSubAction == i_subAction && mPrevMode == i_mode) { + return true; + } + + return false; } -/* ############################################################################################## */ -/* 805ED1D8-805ED1DC 000178 0004+00 0/6 0/0 0/0 .rodata @4585 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4585 = 200.0f; -COMPILER_STRIP_GATE(0x805ED1D8, &lit_4585); -#pragma pop - -/* 805ED1DC-805ED1E0 00017C 0004+00 0/2 0/0 0/0 .rodata @4586 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4586 = 5930.0f; -COMPILER_STRIP_GATE(0x805ED1DC, &lit_4586); -#pragma pop - -/* 805ED1E0-805ED1E4 000180 0004+00 0/2 0/0 0/0 .rodata @4587 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4587 = 3157.0f; -COMPILER_STRIP_GATE(0x805ED1E0, &lit_4587); -#pragma pop - -/* 805ED1E4-805ED1E8 000184 0004+00 0/2 0/0 0/0 .rodata @4588 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4588 = 6993.0f; -COMPILER_STRIP_GATE(0x805ED1E4, &lit_4588); -#pragma pop - +namespace { /* 805ED728-805ED72C 000070 0004+00 4/7 0/0 0/0 .bss s_dis__22@unnamed@d_a_b_gg_cpp@ */ -static u8 data_805ED728[4]; +static f32 s_dis; /* 805ED72C-805ED730 000074 0004+00 8/16 0/0 0/0 .bss s_LinkPos__22@unnamed@d_a_b_gg_cpp@ */ -static u8 data_805ED72C[4]; +static cXyz* s_LinkPos; /* 805ED730-805ED734 000078 0002+02 12/19 0/0 0/0 .bss s_TargetAngle__22@unnamed@d_a_b_gg_cpp@ */ -static u8 data_805ED730[2 + 2 /* padding */]; +static s16 s_TargetAngle; + +/* 805ED740-805ED74C 000088 000C+00 0/2 0/0 0/0 .bss s_centerpos__22@unnamed@d_a_b_gg_cpp@ */ +static cXyz s_centerpos(217.0f, 1275.0f, -57.0f); + +/* 805ED74C 0002+00 data_805ED74C s_M_Action__22@unnamed@d_a_b_gg_cpp@ */ +static s16 s_M_Action; + +/* 805ED74E 0002+00 data_805ED74E s_W_Action__22@unnamed@d_a_b_gg_cpp@ */ +static s16 s_W_Action; +} /* 805DFACC-805DFC24 0017AC 0158+00 1/1 0/0 0/0 .text DemoSkip__8daB_GG_cFi */ void daB_GG_c::DemoSkip(int param_0) { - // NONMATCHING + cXyz offset(0.0f, 200.0f, 300.0f); + cXyz sp14(0.0f, 0.0f, 0.0f); + cXyz sp8(0.0f, 0.0f, 0.0f); + + cDmr_SkipInfo = 1; + + if (param_0 == 0) { + dStage_changeScene(1, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); + Z2GetAudioMgr()->subBgmStop(); + } else if (param_0 == 1) { + cDmr_SkipInfo = 0; + + cLib_offsetPos(&sp8, s_LinkPos, s_TargetAngle, &offset); + mCamEye = sp8; + + SetReleaseCam(); + + mAction = ACTION_FLY; + mSubAction = SUBACT_WAIT; + mMode = 0; + + current.pos.set(5930.0f, 3157.0f, 6993.0f); + old.pos = current.pos; + } + + dComIfGp_getVibration().StopQuake(0x1F); } /* 805DFC24-805DFC58 001904 0034+00 2/2 0/0 0/0 .text DemoSkipCallBack__8daB_GG_cFPvi */ -void daB_GG_c::DemoSkipCallBack(void* param_0, int param_1) { - // NONMATCHING +int daB_GG_c::DemoSkipCallBack(void* i_process, int param_1) { + if (i_process != NULL) { + ((daB_GG_c*)i_process)->DemoSkip(param_1); + return 1; + } + + return 0; } /* 805DFC58-805DFD78 001938 0120+00 4/4 0/0 0/0 .text CameraSet__8daB_GG_cFv */ -void daB_GG_c::CameraSet() { - // NONMATCHING +bool daB_GG_c::CameraSet() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + dCamera_c* cam_body = dCam_getBody(); + + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xFFFF, 0); + eventInfo.onCondition(dEvtCnd_NONE_e); + return false; + } + + camera->mCamera.Stop(); + mCamFovy = cam_body->Fovy(); + mCamCenter = cam_body->Center(); + field_0x60c = mCamCenter; + mCamEye = cam_body->Eye(); + field_0x618 = mCamEye; + camera->mCamera.SetTrimSize(3); + return true; } /* 805DFD78-805DFDFC 001A58 0084+00 2/2 0/0 0/0 .text SetStopingCam__8daB_GG_cFv */ void daB_GG_c::SetStopingCam() { - // NONMATCHING + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + camera->mCamera.Set(mCamCenter, mCamEye, mCamFovy, 0); } /* 805DFDFC-805DFF4C 001ADC 0150+00 5/5 0/0 0/0 .text SetStopCam__8daB_GG_cF4cXyzffs */ void daB_GG_c::SetStopCam(cXyz param_0, f32 param_1, f32 param_2, s16 param_3) { - // NONMATCHING + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + + cXyz sp38(0.0f, param_2, param_1); + cXyz sp2C(0.0f, 0.0f, 0.0f); + mCamCenter.set(param_0.x, param_0.y, param_0.z); + field_0x60c = mCamCenter; + mCamCenterTarget = mCamCenter; + + cLib_offsetPos(&sp2C, ¶m_0, param_3, &sp38); + mCamEye = sp2C; + field_0x618 = sp2C; + mCamEyeTarget = sp2C; + + camera->mCamera.Set(mCamCenter, mCamEye, mCamFovy, 0); } /* 805DFF4C-805E00D4 001C2C 0188+00 2/2 0/0 0/0 .text SetMoveCam__8daB_GG_cF4cXyzffsff */ void daB_GG_c::SetMoveCam(cXyz param_0, f32 param_1, f32 param_2, s16 param_3, f32 param_4, - f32 param_5) { - // NONMATCHING + f32 param_5) { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + cXyz sp38(0.0f, param_2, param_1); + cXyz sp2C(0.0f, 0.0f, 0.0f); + field_0x60c = param_0; + + cLib_offsetPos(&sp2C, ¶m_0, param_3, &sp38); + field_0x618 = sp2C; + + cLib_addCalcPos(&mCamCenterTarget, field_0x60c, param_4, param_5, 0.0f); + cLib_addCalcPos(&mCamEyeTarget, field_0x618, param_4, param_5, 0.0f); + cLib_addCalcPos(&mCamCenter, mCamCenterTarget, param_4, param_5, 0.0f); + cLib_addCalcPos(&mCamEye, mCamEyeTarget, param_4, param_5, 0.0f); + + camera->mCamera.Set(mCamCenter, mCamEye, mCamFovy, 0); } /* 805E00D4-805E01F8 001DB4 0124+00 4/4 0/0 0/0 .text SetMoveCam1__8daB_GG_cFff */ -void daB_GG_c::SetMoveCam1(f32 param_0, f32 param_1) { - // NONMATCHING +void daB_GG_c::SetMoveCam1(f32 i_scale, f32 i_step) { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + + cLib_addCalcPos(&mCamCenterTarget, field_0x60c, i_scale, i_step, 0.0f); + cLib_addCalcPos(&mCamEyeTarget, field_0x618, i_scale, i_step, 0.0f); + cLib_addCalcPos(&mCamCenter, field_0x60c, i_scale, i_step, 0.0f); + cLib_addCalcPos(&mCamEye, field_0x618, i_scale, i_step, 0.0f); + + camera->mCamera.Set(mCamCenter, mCamEye, mCamFovy, 0); } /* 805E01F8-805E029C 001ED8 00A4+00 6/6 0/0 0/0 .text SetReleaseCam__8daB_GG_cFv */ void daB_GG_c::SetReleaseCam() { - // NONMATCHING + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + camera->mCamera.Reset(mCamCenter, mCamEye); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); } -/* ############################################################################################## */ -/* 805ED1E8-805ED1EC 000188 0004+00 0/5 0/0 0/0 .rodata @5006 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5006 = -300.0f; -COMPILER_STRIP_GATE(0x805ED1E8, &lit_5006); -#pragma pop +/* 805ED774-805ED798 0000BC 0024+00 2/5 0/0 0/0 .bss out_pos */ +static cXyz out_pos[] = { + cXyz(5714.0f, 1200.0f, 218.0f), + cXyz(20.0f, 950.0f, -4937.0), + cXyz(-5560.0f, 1200.0f, 222.0f), +}; -/* 805ED1EC-805ED1F0 00018C 0004+00 0/5 0/0 0/0 .rodata @5007 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5007 = 1000.0f; -COMPILER_STRIP_GATE(0x805ED1EC, &lit_5007); -#pragma pop - -/* 805ED1F0-805ED1F4 000190 0004+00 0/1 0/0 0/0 .rodata @5008 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5008 = 550.0f; -COMPILER_STRIP_GATE(0x805ED1F0, &lit_5008); -#pragma pop +/* 805ED7BC-805ED7E0 000104 0024+00 1/7 0/0 0/0 .bss in_pos */ +static cXyz in_pos[]= { + cXyz(1185.0f, 1200.0f, 152.0f), + cXyz(-121.0f, 950.0f, -1190.0f), + cXyz(-1080.0f, 1200.0f, 7.0f), +}; /* 805E029C-805E0F2C 001F7C 0C90+00 2/1 0/0 0/0 .text St_CamAction__8daB_GG_cFv */ void daB_GG_c::St_CamAction() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + + cXyz sp58(*s_LinkPos); + cXyz sp4C(0.0f, 0.0f, -300.0f); + cXyz sp40; + + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + + switch (mCamMode) { + case 0: + if (s_LinkPos->y < 1000.0f) { + mTimers[0] = 0; + if (CameraSet()) { + Z2GetAudioMgr()->subBgmStart(Z2BGM_GG_MBOSS_D01); + mSound.startCreatureVoice(Z2SE_EN_GG_V_DEMO_OP, -1); + mCamMode = 12; + + sp40.set(0.0f, 0.0f, 550.0f + MREG_F(8)); + player->setPlayerPosAndAngle(&sp40, cLib_targetAngleY(&sp40, &sp4C), 0); + player->changeOriginalDemo(); + player->changeDemoMode(1, 0, 0, 0); + } + } + break; + case 12: + sp58 = fopAcM_GetPosition(player); + sp58.y += 100.0f; + + if (daPy_py_c::checkNowWolf()) { + sp58.set(0.0f, 0.0f, 0.0f); + MTXCopy(daPy_getLinkPlayerActorClass()->getModelJointMtx(6), *calc_mtx); + MtxPosition(&sp58, &sp58); + sp58.y += 50.0f + yREG_F(13); + } + + SetStopCam(sp58, 300.0f, 0.0f, cLib_targetAngleY(&sp58, &sp4C) + 0x2000); + field_0x5ba = cLib_targetAngleY(&sp58, &sp4C) + 0x2000; + mTimers[0] = 30; + mCamMode = 1; + field_0x560 = l_HIO.max_hp; + health = l_HIO.max_hp; + field_0x648 = 300.0f; + break; + case 1: + if (mTimers[0] == 0) { + player->changeDemoMode(0x14, 0, 0, 0); + player->changeDemoMoveAngle(cLib_targetAngleY(s_LinkPos, &sp4C)); + mTimers[0] = 160; + mCamMode++; + field_0x648 = 300.0f; + } + break; + case 2: + sp58.y += 100.0f; + + if (mTimers[0] == 0) { + sp58.y += 50.0f; + player->changeDemoMode(1, 0, 0, 0); + mCamMode++; + } else { + field_0x5ba -= yREG_S(0) + 0x20; + + f32 var_f31; + f32 var_f30; + if (!daPy_py_c::checkNowWolf()) { + var_f31 = 120.0f; + } else { + var_f31 = 180.0f + yREG_F(1); + } + + cLib_chaseF(&field_0x648, var_f31, 1.2f); + + if (!daPy_py_c::checkNowWolf()) { + var_f31 = 60.0f; + var_f30 = 0.3f; + } else { + var_f31 = 40.0f + yREG_F(9); + var_f30 = 0.15f; + } + + cLib_chaseF(&field_0x64c, var_f31, var_f30); + sp58.y += field_0x64c; + + if (!daPy_py_c::checkNowWolf()) { + var_f31 = -60.0f; + var_f30 = 0.3f; + } else { + var_f31 = -110.0f + yREG_F(2); + var_f30 = 0.6f + yREG_F(7); + } + + cLib_chaseF(&field_0x650, var_f31, var_f30); + SetMoveCam(sp58, field_0x648, field_0x650, field_0x5ba, 0.2f, 50.0f); + } + break; + case 3: + if (mTimers[0] == 0) { + mCamMode++; + mTimers[0] = 35.0f + HREG_F(0); + + sp58.set(110.0f, XREG_F(2), 0.0f); + cLib_offsetPos(&field_0x60c, &field_0x60c, cLib_targetAngleY(s_LinkPos, &sp4C), &sp58); + + sp58.set(-90.0f, -25.0f, 0.0f); + cLib_offsetPos(&field_0x618, &field_0x618, cLib_targetAngleY(s_LinkPos, &sp4C), &sp58); + + mMode = 0; + } + break; + case 4: + if (mTimers[0] == 0) { + mCamMode++; + + if (!daPy_py_c::checkNowWolf()) { + sp58.set(-20.0f + MREG_F(0), 120.0f + MREG_F(5), -300.0f + MREG_F(3)); + } else { + sp58.set(-20.0f + MREG_F(0), 120.0f + MREG_F(5), -300.0f + MREG_F(3)); + } + + cLib_offsetPos(&field_0x60c, &field_0x60c, cLib_targetAngleY(s_LinkPos, &sp4C), &sp58); + + if (!daPy_py_c::checkNowWolf()) { + sp58.set(-30.0f + MREG_F(1), MREG_F(6), -10.0f + MREG_F(4)); + } else { + sp58.set(-30.0f + MREG_F(1), MREG_F(6), -10.0f + MREG_F(4)); + } + + cLib_offsetPos(&field_0x618, &field_0x618, cLib_targetAngleY(s_LinkPos, &sp4C), &sp58); + mTimers[0] = 50; + mMode = 1; + player->changeDemoMoveAngle(-0x3000); + mTimers[1] = 0; + } + + if ((f32)mTimers[0] == 30.0f + HREG_F(0)) { + player->changeDemoMode(0x17, 1, 0, 0); + player->changeDemoMoveAngle(0x3000); + } + + if ((f32)mTimers[0] == 25.0f + HREG_F(0)) { + sp58.set(-60.0f + MREG_F(13), 0.0f, 0.0f); + cLib_offsetPos(&field_0x60c, &field_0x60c, cLib_targetAngleY(s_LinkPos, &sp4C), &sp58); + } + + SetMoveCam1(0.1f + yREG_F(9), 40.0f + yREG_F(8)); + attention_info.position = in_pos[2]; + attention_info.position.z += 400.0f; + eyePos = in_pos[2]; + break; + case 5: + SetMoveCam1(0.2f + yREG_F(10), 50.0f + yREG_F(8)); + + if (mTimers[0] < 45) { + attention_info.position = in_pos[0]; + attention_info.position.z += 400.0f; + eyePos = in_pos[0]; + } else { + attention_info.position = in_pos[2]; + attention_info.position.z += 400.0f; + eyePos = in_pos[2]; + } + + if (mTimers[0] == 45) { + player->changeDemoMode(0x19, 1, 0, 0); + player->changeDemoMoveAngle(0x3000); + } + + if ((f32)mTimers[0] == (40.0f + MREG_F(12))) { + sp58.set(80.0f + MREG_F(10), 0.0f, MREG_F(11)); + cLib_offsetPos(&field_0x60c, &field_0x60c, cLib_targetAngleY(s_LinkPos, &sp4C), &sp58); + } + + if ((f32)mTimers[0] == HREG_F(1)) { + mCamMode = 20; + + if (!daPy_py_c::checkNowWolf()) { + sp58.set(0.0f, -50.0f, 100.0f); + } else { + sp58.set(0.0f, 0.0f, 100.0f); + } + + cLib_offsetPos(&field_0x618, &field_0x618, cLib_targetAngleY(s_LinkPos, &sp4C), &sp58); + field_0x60c.x = s_LinkPos->x; + field_0x60c.y = 50.0f + s_LinkPos->y + MREG_F(14); + field_0x60c.z = s_LinkPos->z; + + mTimers[0] = 70; + } + break; + case 6: + sp58 = current.pos; + sp58.y += 250.0f + BREG_F(16); + SetMoveCam(sp58, 250.0f + BREG_F(17), -200.0f, cLib_targetAngleY(¤t.pos, s_LinkPos), 0.1f, 1.0f); + break; + case 7: + sp58 = current.pos; + sp58.y += 250.0f + BREG_F(16); + SetMoveCam(sp58, 400.0f + BREG_F(18), -200.0f, (cLib_targetAngleY(¤t.pos, s_LinkPos) - 0x500), 0.1f, 1.0f); + break; + case 8: + if (!daPy_py_c::checkNowWolf()) { + sp4C = current.pos; + sp4C += *s_LinkPos; + field_0x60c.set(100.0f + (0.5f * sp4C.x) + aREG_F(15), 100.0f + (0.5f * sp4C.y) + aREG_F(14), (0.5f * sp4C.z) + aREG_F(16)); + sp58.set(150.0f, 52.0f, -120.0f); + cLib_offsetPos(&field_0x618, s_LinkPos, cLib_targetAngleY(s_LinkPos, ¤t.pos), &sp58); + } else { + sp4C = current.pos; + sp4C += *s_LinkPos; + field_0x60c.set(100.0f + (0.5f * sp4C.x) + aREG_F(15), 80.0f + (0.5f * sp4C.y) + aREG_F(14), (0.5f * sp4C.z) + aREG_F(16)); + sp58.set(150.0f, 52.0f, -120.0f); + cLib_offsetPos(&field_0x618, s_LinkPos, cLib_targetAngleY(s_LinkPos, ¤t.pos), &sp58); + } + + SetMoveCam1(0.2f, 3.5f); + break; + case 11: + SetMoveCam1(0.2f, 1.0f + TREG_F(11)); + break; + case 20: + if (mTimers[0] == 0) { + sp58.set(0.0f, 150.0f, -80.0f); + if (daPy_py_c::checkNowWolf()) { + sp58.y -= 100.0f; + sp58.z -= 50.0f; + } + + cLib_offsetPos(&field_0x618, s_LinkPos, cLib_targetAngleY(s_LinkPos, &sp4C), &sp58); + + sp58.set(0.0f, 340.0f + aREG_F(7), 0.0f); + if (daPy_py_c::checkNowWolf()) { + sp58.y -= 80.0f; + } + + cLib_offsetPos(&field_0x60c, &sp4C, cLib_targetAngleY(s_LinkPos, &sp4C), &sp58); + mCamEye = field_0x618; + mCamCenter = field_0x60c; + SetStopingCam(); + mMode = 2; + mCamMode = 11; + SpeedClear(); + } + + SetMoveCam1(0.1f, 3.0f + MREG_F(17)); + + if ((f32)mTimers[0] == (30.0f + HREG_F(2))) { + player->changeDemoMode(0x17, 1, 0, 0); + } + + if (!((f32)mTimers[0] > (30.0f + HREG_F(2)))) { + attention_info.position = in_pos[1]; + eyePos = in_pos[1]; + } + break; + } + + if (mCamMode != 0) { + dComIfGp_getEvent().onSkipFade(); + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 0); + } } -/* ############################################################################################## */ -/* 805ED1F4-805ED1F8 000194 0004+00 0/0 0/0 0/0 .rodata @5009 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5009 = 180.0f; -COMPILER_STRIP_GATE(0x805ED1F4, &lit_5009); -#pragma pop - -/* 805ED1F8-805ED1FC 000198 0004+00 0/1 0/0 0/0 .rodata @5010 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5010 = 120.0f; -COMPILER_STRIP_GATE(0x805ED1F8, &lit_5010); -#pragma pop - -/* 805ED1FC-805ED200 00019C 0004+00 0/0 0/0 0/0 .rodata @5011 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5011 = 6.0f / 5.0f; -COMPILER_STRIP_GATE(0x805ED1FC, &lit_5011); -#pragma pop - -/* 805ED200-805ED204 0001A0 0004+00 0/3 0/0 0/0 .rodata @5012 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5012 = 60.0f; -COMPILER_STRIP_GATE(0x805ED200, &lit_5012); -#pragma pop - -/* 805ED204-805ED208 0001A4 0004+00 0/2 0/0 0/0 .rodata @5013 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5013 = 40.0f; -COMPILER_STRIP_GATE(0x805ED204, &lit_5013); -#pragma pop - -/* 805ED208-805ED20C 0001A8 0004+00 0/0 0/0 0/0 .rodata @5014 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5014 = 3.0f / 20.0f; -COMPILER_STRIP_GATE(0x805ED208, &lit_5014); -#pragma pop - -/* 805ED20C-805ED210 0001AC 0004+00 0/0 0/0 0/0 .rodata @5015 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5015 = -60.0f; -COMPILER_STRIP_GATE(0x805ED20C, &lit_5015); -#pragma pop - -/* 805ED210-805ED214 0001B0 0004+00 0/0 0/0 0/0 .rodata @5016 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5016 = -110.0f; -COMPILER_STRIP_GATE(0x805ED210, &lit_5016); -#pragma pop - -/* 805ED214-805ED218 0001B4 0004+00 0/0 0/0 0/0 .rodata @5017 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5017 = 3.0f / 5.0f; -COMPILER_STRIP_GATE(0x805ED214, &lit_5017); -#pragma pop - -/* 805ED218-805ED21C 0001B8 0004+00 2/4 0/0 0/0 .rodata @5018 */ -SECTION_RODATA static f32 const lit_5018 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x805ED218, &lit_5018); - -/* 805ED21C-805ED220 0001BC 0004+00 0/0 0/0 0/0 .rodata @5019 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5019 = 110.0f; -COMPILER_STRIP_GATE(0x805ED21C, &lit_5019); -#pragma pop - -/* 805ED220-805ED224 0001C0 0004+00 0/0 0/0 0/0 .rodata @5020 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5020 = -90.0f; -COMPILER_STRIP_GATE(0x805ED220, &lit_5020); -#pragma pop - -/* 805ED224-805ED228 0001C4 0004+00 0/0 0/0 0/0 .rodata @5021 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5021 = -25.0f; -COMPILER_STRIP_GATE(0x805ED224, &lit_5021); -#pragma pop - -/* 805ED228-805ED22C 0001C8 0004+00 0/1 0/0 0/0 .rodata @5022 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5022 = -20.0f; -COMPILER_STRIP_GATE(0x805ED228, &lit_5022); -#pragma pop - -/* 805ED22C-805ED230 0001CC 0004+00 0/1 0/0 0/0 .rodata @5023 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5023 = -30.0f; -COMPILER_STRIP_GATE(0x805ED22C, &lit_5023); -#pragma pop - -/* 805ED230-805ED234 0001D0 0004+00 0/1 0/0 0/0 .rodata @5024 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5024 = -10.0f; -COMPILER_STRIP_GATE(0x805ED230, &lit_5024); -#pragma pop - -/* 805ED234-805ED238 0001D4 0004+00 0/0 0/0 0/0 .rodata @5025 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5025 = 25.0f; -COMPILER_STRIP_GATE(0x805ED234, &lit_5025); -#pragma pop - -/* 805ED238-805ED23C 0001D8 0004+00 0/1 0/0 0/0 .rodata @5026 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5026 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x805ED238, &lit_5026); -#pragma pop - -/* 805ED23C-805ED240 0001DC 0004+00 0/5 0/0 0/0 .rodata @5027 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5027 = 400.0f; -COMPILER_STRIP_GATE(0x805ED23C, &lit_5027); -#pragma pop - -/* 805ED240-805ED244 0001E0 0004+00 0/2 0/0 0/0 .rodata @5028 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5028 = 80.0f; -COMPILER_STRIP_GATE(0x805ED240, &lit_5028); -#pragma pop - -/* 805ED244-805ED248 0001E4 0004+00 0/0 0/0 0/0 .rodata @5029 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5029 = -50.0f; -COMPILER_STRIP_GATE(0x805ED244, &lit_5029); -#pragma pop - -/* 805ED248-805ED24C 0001E8 0004+00 0/1 0/0 0/0 .rodata @5030 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5030 = 250.0f; -COMPILER_STRIP_GATE(0x805ED248, &lit_5030); -#pragma pop - -/* 805ED24C-805ED250 0001EC 0004+00 0/1 0/0 0/0 .rodata @5031 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5031 = -200.0f; -COMPILER_STRIP_GATE(0x805ED24C, &lit_5031); -#pragma pop - -/* 805ED250-805ED254 0001F0 0004+00 0/1 0/0 0/0 .rodata @5032 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5032 = 52.0f; -COMPILER_STRIP_GATE(0x805ED250, &lit_5032); -#pragma pop - -/* 805ED254-805ED258 0001F4 0004+00 0/0 0/0 0/0 .rodata @5033 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5033 = -120.0f; -COMPILER_STRIP_GATE(0x805ED254, &lit_5033); -#pragma pop - -/* 805ED258-805ED25C 0001F8 0004+00 0/0 0/0 0/0 .rodata @5034 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5034 = 3.5f; -COMPILER_STRIP_GATE(0x805ED258, &lit_5034); -#pragma pop - -/* 805ED25C-805ED260 0001FC 0004+00 0/0 0/0 0/0 .rodata @5035 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5035 = -80.0f; -COMPILER_STRIP_GATE(0x805ED25C, &lit_5035); -#pragma pop - -/* 805ED260-805ED264 000200 0004+00 0/0 0/0 0/0 .rodata @5036 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5036 = 340.0f; -COMPILER_STRIP_GATE(0x805ED260, &lit_5036); -#pragma pop - -/* 805ED264-805ED268 000204 0004+00 0/1 0/0 0/0 .rodata @5245 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5245 = -400.0f; -COMPILER_STRIP_GATE(0x805ED264, &lit_5245); -#pragma pop - -/* 805ED268-805ED26C 000208 0004+00 0/1 0/0 0/0 .rodata @5246 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5246 = -250.0f; -COMPILER_STRIP_GATE(0x805ED268, &lit_5246); -#pragma pop - -/* 805ED26C-805ED270 00020C 0004+00 0/18 0/0 0/0 .rodata @5247 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5247 = 5.0f; -COMPILER_STRIP_GATE(0x805ED26C, &lit_5247); -#pragma pop - -/* 805ED270-805ED274 000210 0004+00 0/3 0/0 0/0 .rodata @5248 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5248 = 600.0f; -COMPILER_STRIP_GATE(0x805ED270, &lit_5248); -#pragma pop - -/* 805ED274-805ED278 000214 0004+00 0/1 0/0 0/0 .rodata @5249 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5249 = -150.0f; -COMPILER_STRIP_GATE(0x805ED274, &lit_5249); -#pragma pop - -/* 805ED278-805ED27C 000218 0004+00 0/2 0/0 0/0 .rodata @5250 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5250 = -500.0f; -COMPILER_STRIP_GATE(0x805ED278, &lit_5250); -#pragma pop - -/* 805ED27C-805ED280 00021C 0004+00 0/5 0/0 0/0 .rodata @5251 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5251 = 500.0f; -COMPILER_STRIP_GATE(0x805ED27C, &lit_5251); -#pragma pop - -/* 805ED280-805ED284 000220 0004+00 0/3 0/0 0/0 .rodata @5252 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5252 = -5.0f; -COMPILER_STRIP_GATE(0x805ED280, &lit_5252); -#pragma pop - -/* 805ED284-805ED288 000224 0004+00 0/1 0/0 0/0 .rodata @5253 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5253 = 33.0f; -COMPILER_STRIP_GATE(0x805ED284, &lit_5253); -#pragma pop - /* 805E0F2C-805E18E8 002C0C 09BC+00 1/1 0/0 0/0 .text St_DemoAction__8daB_GG_cFv */ void daB_GG_c::St_DemoAction() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + + cXyz sp58(*s_LinkPos); + cXyz sp4C(0.0f, 0.0f, -300.0f); + cXyz sp40; + cXyz sp34; + + s16 sp8 = s_TargetAngle - shape_angle.y; + + switch (mMode) { + case 0: + sp58.set(-400.0f, 100.0f, -250.0f); + cLib_offsetPos(¤t.pos, s_LinkPos, cLib_targetAngleY(s_LinkPos, &sp4C), &sp58); + old.pos = current.pos; + + sp34.set(100.0f, 200.0f, 0.0f); + sp58.set(0.0f, 0.0f, 0.0f); + cLib_offsetPos(&sp58, s_LinkPos, cLib_targetAngleY(s_LinkPos, &sp4C), &sp34); + field_0x5ba = cLib_targetAngleY(¤t.pos, &sp58); + current.angle.y = field_0x5ba; + shape_angle.y = current.angle.y; + + SetAnm(5, 2, 5.0f, 1.0f); + + field_0x5bc = 100.0f + yREG_F(9); + speedF = field_0x5bc; + field_0x5c0 = (sp58.y - current.pos.y) / (current.pos.absXZ(sp58) / speedF); + speed.y = field_0x5c0; + mMode = 10; + break; + case 1: + sp58.set(600.0f, 100.0f, -150.0f); + cLib_offsetPos(¤t.pos, s_LinkPos, cLib_targetAngleY(s_LinkPos, &sp4C), &sp58); + old.pos = current.pos; + + sp34.set(-300.0f, 200.0f, -500.0f + MREG_F(2)); + sp58.set(0.0f, 0.0f, 0.0f); + cLib_offsetPos(&sp58, s_LinkPos, cLib_targetAngleY(s_LinkPos, &sp4C), &sp34); + field_0x5ba = cLib_targetAngleY(¤t.pos, &sp58); + current.angle.y = field_0x5ba; + shape_angle.y = current.angle.y; + + SetAnm(5, 2, 5.0f, 1.0f); + + field_0x5bc = 100.0f + yREG_F(9); + speedF = field_0x5bc; + field_0x5c0 = (sp58.y - current.pos.y) / (current.pos.absXZ(sp58) / speedF); + speed.y = field_0x5c0; + mMode = 10; + break; + case 2: + if (mAnm != 0xE) { + sp58.set(0.0f, 1000.0f + TREG_F(0), 500.0f); + cLib_offsetPos(¤t.pos, s_LinkPos, cLib_targetAngleY(s_LinkPos, &sp4C), &sp58); + old.pos = current.pos; + + SetAnm(14, 2, 5.0f, 1.0f); + field_0x5c0 = -5.0f; + + sp58.set(0.0f, 50.0f, -250.0f); + cLib_offsetPos(&field_0x618, s_LinkPos, cLib_targetAngleY(s_LinkPos, &sp4C), &sp58); + player->changeDemoMode(0x17, 1, 0, 0); + } else if (mAnm == 0xE && (current.pos.y - s_LinkPos->y) < 300.0f) { + speed.y = 0.0f; + field_0x5c0 = 0.0f; + mTimers[0] = 0; + mMode++; + } + + field_0x6be = s_TargetAngle - shape_angle.y; + shape_angle.y = s_TargetAngle; + break; + case 3: + if (mTimers[0] == 0) { + mMode++; + mTimers[0] = 130; + } + + shape_angle.y = s_TargetAngle; + break; + case 4: + if (mTimers[0] == 110) { + mCamMode = 7; + sp58 = current.pos; + sp58.y += 300.0f + BREG_F(16); + SetStopCam(sp58, 250.0f + BREG_F(17), -200.0f, (cLib_targetAngleY(¤t.pos, s_LinkPos) + 0x1000)); + } + + if (mAnm != 0xD && mTimers[0] == 0) { + SetAnm(13, 0, 5.0f, 1.0f); + mCamMode = 7; + } else if (mAnm == 0xD && mpModelMorf->checkFrame(33.0f)) { + dComIfGp_getVibration().StartQuake(6, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); + } else if (mAnm == 0xD && mpModelMorf->isStop()) { + mMode++; + SetAnm(14, 2, 5.0f, 1.0f); + mTimers[1] = 200; + mCamMode = 8; + dComIfGp_getVibration().StopQuake(0x1F); + player->changeDemoMode(0x17, 1, 2, 0); + } + + shape_angle.y = s_TargetAngle; + break; + case 5: + if (mTimers[1] == 0) { + if (field_0x5ce != 0xFF && !dComIfGs_isSwitch(142, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(142, fopAcM_GetRoomNo(this)); + } + + cDmr_SkipInfo = 1; + SetReleaseCam(); + + mAction = ACTION_FLY; + mSubAction = SUBACT_WAIT; + mMode = 1; + mCamMode = 0; + + Z2GetAudioMgr()->subBgmStart(Z2BGM_GG_MBOSS); + dComIfGs_onSwitch(226, fopAcM_GetRoomNo(this)); + } + + shape_angle.y = s_TargetAngle; + break; + } + + if (mMode > 1 && mMode != 10) { + sp40 = *s_LinkPos - current.pos; + cLib_addCalcAngleS2(&field_0x6c4, -cM_atan2s(sp40.y, JMAFastSqrt((sp40.x * sp40.x) + (sp40.z * sp40.z))), 2, 0x600); + cLib_addCalcAngleS2(&field_0x6be, sp8, 2, 0x100); + } else { + field_0x6be = 0; + field_0x6c4 = 0; + } } -/* ############################################################################################## */ -/* 805ED288-805ED28C 000228 0004+00 0/3 0/0 0/0 .rodata @5315 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5315 = 217.0f; -COMPILER_STRIP_GATE(0x805ED288, &lit_5315); -#pragma pop - -/* 805ED28C-805ED290 00022C 0004+00 0/5 0/0 0/0 .rodata @5316 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5316 = -57.0f; -COMPILER_STRIP_GATE(0x805ED28C, &lit_5316); -#pragma pop - -/* 805ED290-805ED294 000230 0004+00 0/2 0/0 0/0 .rodata @5317 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5317 = 2.0f / 5.0f; -COMPILER_STRIP_GATE(0x805ED290, &lit_5317); -#pragma pop - -/* 805ED734-805ED740 00007C 000C+00 0/1 0/0 0/0 .bss @3935 */ -#pragma push -#pragma force_active on -static u8 lit_3935[12]; -#pragma pop - -/* 805ED740-805ED74C 000088 000C+00 0/2 0/0 0/0 .bss s_centerpos__22@unnamed@d_a_b_gg_cpp@ */ -#pragma push -#pragma force_active on -static u8 data_805ED740[12]; -#pragma pop - -/* 805ED74C-805ED750 -00001 0004+00 0/3 0/0 0/0 .bss None */ -#pragma push -#pragma force_active on -/* 805ED74C 0002+00 data_805ED74C s_M_Action__22@unnamed@d_a_b_gg_cpp@ */ -/* 805ED74E 0002+00 data_805ED74E s_W_Action__22@unnamed@d_a_b_gg_cpp@ */ -static u8 struct_805ED74C[4]; -#pragma pop - -/* 805ED750-805ED75C 000098 000C+00 0/1 0/0 0/0 .bss @3936 */ -#pragma push -#pragma force_active on -static u8 lit_3936[12]; -#pragma pop - -/* 805ED75C-805ED768 0000A4 000C+00 0/1 0/0 0/0 .bss @3937 */ -#pragma push -#pragma force_active on -static u8 lit_3937[12]; -#pragma pop - -/* 805ED768-805ED774 0000B0 000C+00 0/1 0/0 0/0 .bss @3938 */ -#pragma push -#pragma force_active on -static u8 lit_3938[12]; -#pragma pop - -/* 805ED774-805ED798 0000BC 0024+00 2/5 0/0 0/0 .bss out_pos */ -static u8 out_pos[36]; - -/* 805ED798-805ED7A4 0000E0 000C+00 0/1 0/0 0/0 .bss @3939 */ -#pragma push -#pragma force_active on -static u8 lit_3939[12]; -#pragma pop - -/* 805ED7A4-805ED7B0 0000EC 000C+00 0/1 0/0 0/0 .bss @3940 */ -#pragma push -#pragma force_active on -static u8 lit_3940[12]; -#pragma pop - -/* 805ED7B0-805ED7BC 0000F8 000C+00 0/1 0/0 0/0 .bss @3941 */ -#pragma push -#pragma force_active on -static u8 lit_3941[12]; -#pragma pop - -/* 805ED7BC-805ED7E0 000104 0024+00 1/7 0/0 0/0 .bss in_pos */ -static u8 in_pos[36]; - /* 805E18E8-805E1C28 0035C8 0340+00 1/1 0/0 0/0 .text Md_CamAction__8daB_GG_cFv */ void daB_GG_c::Md_CamAction() { - // NONMATCHING + cXyz sp2C; + cXyz sp20; + + daPy_py_c* player = daPy_getPlayerActorClass(); + int sp10 = 0; + int spC = 0; + + switch (mCamMode) { + case 0: + if (CameraSet()) { + mSound.startCreatureVoice(Z2SE_EN_GG_V_DEMO_MID, -1); + mInOutPosIdx = 0; + + sp2C.set(217.0f, 0.0f, -57.0f); + current.pos = sp2C; + old.pos = current.pos; + shape_angle.y = cLib_targetAngleY(¤t.pos, &in_pos[mInOutPosIdx]); + current.angle.y = shape_angle.y; + + sp20 = current.pos; + sp20.y += 150.0f + BREG_F(13); + SetStopCam(sp20, 300.0f, 0.0f, shape_angle.y); + mCamMode++; + + sp20.set(0.0f, mAcch.GetGroundH(), 0.0f); + sp2C.set(0.0f, 0.0f, -300.0f); + cLib_offsetPos(&sp20, &mCamEye, cLib_targetAngleY(&mCamEye, ¤t.pos), &sp2C); + player->setPlayerPosAndAngle(&sp20, shape_angle.y, 0); + + field_0x658 = shape_angle.y; + field_0x648 = 300.0f; + if (field_0x5ce != 0xFF && dComIfGs_isSwitch(142, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(142, fopAcM_GetRoomNo(this)); + } + + field_0x5b0 = 0; + } + break; + case 1: + sp20.set(217.0f, 0.0f, -57.0f); + sp20.y += 150.0f + BREG_F(13); + + field_0x60c = current.pos; + field_0x60c.y += 150.0f + BREG_F(18); + field_0x658 += 80; + field_0x648 += 3.0f; + + sp2C.set(0.0f, 0.0f, field_0x648); + cLib_offsetPos(&field_0x618, &sp20, field_0x658, &sp2C); + + SetMoveCam1(0.4f, 50.0f); + + sp20 = current.pos; + sp20.set(0.0f, s_LinkPos->y, 0.0f); + sp2C.set(0.0f, 0.0f, -300.0f); + cLib_offsetPos(&sp20, &mCamEye, cLib_targetAngleY(&mCamEye, ¤t.pos), &sp2C); + + player->setPlayerPosAndAngle(&sp20, shape_angle.y, 0); + break; + } } -/* ############################################################################################## */ -/* 805ED294-805ED298 000234 0004+00 0/3 0/0 0/0 .rodata @5506 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5506 = 18.0f; -COMPILER_STRIP_GATE(0x805ED294, &lit_5506); -#pragma pop - -/* 805ED298-805ED29C 000238 0004+00 1/2 0/0 0/0 .rodata @5507 */ -SECTION_RODATA static f32 const lit_5507 = 90.0f; -COMPILER_STRIP_GATE(0x805ED298, &lit_5507); - -/* 805ED29C-805ED2A0 00023C 0004+00 0/3 0/0 0/0 .rodata @5508 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5508 = -21.0f / 5.0f; -COMPILER_STRIP_GATE(0x805ED29C, &lit_5508); -#pragma pop - /* 805E1C28-805E23E8 003908 07C0+00 2/2 0/0 0/0 .text Md_DemoAction__8daB_GG_cFv */ void daB_GG_c::Md_DemoAction() { - // NONMATCHING + s16 sp10 = 0; + u8 var_r29 = 0; + s16 i; + cXyz sp3C; + daPy_py_c* player = daPy_getPlayerActorClass(); + + switch (mMode) { + case 0: + mCcShieldSph.OnTgShield(); + mCcCyl.OnTgShield(); + mCcCyl.OffTgSetBit(); + mCcShieldSph.OffTgSetBit(); + mCcHookCyl.OffTgSetBit(); + + if (mAnm != 0x1B && mpModelMorf->isStop() && mAnm != 0x1D) { + mCcCyl.OnTgSetBit(); + mCcShieldSph.OnTgSetBit(); + + SetAnm(29, 2, 5.0f, 1.0f); + + if (field_0x5b0 == 0) { + mTimers[0] = 50; + field_0x5b0 = 1; + } else { + mTimers[0] = 0; + } + } else if (mpModelMorf->checkFrame(18.0f) && mAnm == 0x1B) { + speed.y = 90.0f; + field_0x5c0 = 0.0f; + gravity = -4.2f; + var_r29 = 1; + } else if (mpModelMorf->isStop() && mAnm == 0x1B) { + mMode++; + gravity = 0.0f; + speed.y = 0.0f; + + if (field_0x5ce != 0xFF && !dComIfGs_isSwitch(142, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(142, fopAcM_GetRoomNo(this)); + } + + SetAnm(4, 0, 5.0f, 1.0f); + var_r29 = 1; + } else if (mpModelMorf->getFrame() > 18.0f && mAnm == 0x1B) { + var_r29 = 1; + } else if (mAnm == 0x1D && mTimers[0] == 0) { + fopAcM_OffStatus(this, 0x200000); + fopAcM_OnStatus(this, 0x80000); + SetAnm(27, 0, 5.0f, 1.0f); + + mSound.startCreatureVoice(Z2SE_EN_GG_V_TAKE_OFF, -1); + SpeedClear(); + + s16 spE = cLib_targetAngleY(¤t.pos, &in_pos[0]) - shape_angle.y; + for (i = 1; i < 3; i++) { + s16 spC = cLib_targetAngleY(¤t.pos, &in_pos[i]) - shape_angle.y; + if (abs(spC) < abs(spE)) { + sp10 = i; + spE = spC; + } + } + + mInOutPosIdx = sp10; + field_0x5ba = cLib_targetAngleY(¤t.pos, &in_pos[mInOutPosIdx]); + } + break; + case 1: + if (mAnm == 4 && mpModelMorf->isStop()) { + SetAnm(5, 2, 5.0f, 1.0f); + field_0x5bc = 100.0f; + speedF = field_0x5bc; + field_0x5c0 = (out_pos[mInOutPosIdx].y - current.pos.y) / (current.pos.absXZ(out_pos[mInOutPosIdx]) / speedF); + speed.y = field_0x5c0; + } else if (mAnm == 5) { + mSound.startCreatureSoundLevel(Z2SE_EN_GG_ATK_MOVE, 0, -1); + if (F_A_TargetMove(in_pos[mInOutPosIdx])) { + mMode++; + mTimers[0] = 20; + attention_info.flags = 0; + } + } + + var_r29 = 1; + break; + case 2: + mSound.startCreatureSoundLevel(Z2SE_EN_GG_ATK_MOVE, 0, -1); + + if (mAnm == 5) { + if (F_A_TargetMove(out_pos[mInOutPosIdx], 1) || (!GetAction(2, 0, 0) && mTimers[0] == 0)) { + SetAction(ACTION_F_A, SUBACT_MOVE, 0); + mTimers[0] = 50; + + if (field_0x5b6 == 0) { + fopAcM_SetSpeed(player, 0.0f, 0.0f, 0.0f); + attention_info.flags = 0; + SetReleaseCam(); + + sp3C.set(217.0f, 0.0f, -57.0f); + player->setPlayerPosAndAngle(&sp3C, shape_angle.y, 0); + + if (field_0x5ce != 0xFF && dComIfGs_isSwitch(142, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(142, fopAcM_GetRoomNo(this)); + } + + field_0x5b6 = 1; + current.pos.y += 10000.0f; + old.pos.y = current.pos.y; + mTimers[0] = 40; + field_0x648 = s_LinkPos->y; + } + } + } + + var_r29 = 1; + break; + } + + if (var_r29 == 1) { + cLib_addCalcAngleS(¤t.angle.y, field_0x5ba, 5, 0x1000, 0); + cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 2, 0x1000, 0); + } } -/* ############################################################################################## */ -/* 805ED2A0-805ED2A4 000240 0004+00 0/2 0/0 0/0 .rodata @5639 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5639 = -7853.0f; -COMPILER_STRIP_GATE(0x805ED2A0, &lit_5639); -#pragma pop - -/* 805ED2A4-805ED2A8 000244 0004+00 0/1 0/0 0/0 .rodata @5640 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5640 = 10535.0f; -COMPILER_STRIP_GATE(0x805ED2A4, &lit_5640); -#pragma pop - -/* 805ED2A8-805ED2AC 000248 0004+00 0/2 0/0 0/0 .rodata @5641 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5641 = 8619.0f; -COMPILER_STRIP_GATE(0x805ED2A8, &lit_5641); -#pragma pop - /* 805E23E8-805E2974 0040C8 058C+00 2/1 0/0 0/0 .text Gn_CamAction__8daB_GG_cFv */ void daB_GG_c::Gn_CamAction() { - // NONMATCHING + cXyz sp24; + daPy_py_c* player = daPy_getPlayerActorClass(); + + switch (mCamMode) { + case 0: + if (field_0x5d0 != 0xFF && dComIfGs_isSwitch(field_0x5d0, fopAcM_GetRoomNo(this))) { + mCamMode++; + current.pos.set(-7853.0f + HREG_F(0), 10535.0f + HREG_F(1), 8619.0f + HREG_F(2)); + old.pos = current.pos; + } + break; + case 1: + if (CameraSet()) { + sp24 = current.pos; + SetStopCam(sp24, 4000.0f + aREG_F(5), -4000.0f, shape_angle.y); + + mCamMode++; + mTimers[0] = 90; + + player->changeOriginalDemo(); + player->changeDemoMode(4, 1, 0, 0); + mSound.startCreatureVoice(Z2SE_EN_GG_V_DEMO_OP_LV9, -1); + } + break; + case 2: + if (mTimers[0] == 0) { + mMode++; + mCamMode++; + + if (daPy_py_c::checkNowWolf()) { + sp24.set(6469.0f, s_LinkPos->y, 6465.0f + aREG_F(6)); + } else { + sp24.set(6469.0f, s_LinkPos->y, 6133.0f + aREG_F(6)); + } + + player->setPlayerPosAndAngle(&sp24, s_TargetAngle + 0x8000, 0); + player->changeDemoMode(0x17, 1, 0, 0); + + mTimers[0] = 100; + mTimers[2] = 125; + } + + if (mTimers[0] < 70) { + sp24 = current.pos; + sp24.y += 100.0f + aREG_F(12); + + SetMoveCam(sp24, 700.0f + aREG_F(1), -100.0f + aREG_F(2), shape_angle.y, 0.2f + aREG_F(10), 200.0f + aREG_F(10)); + } + break; + case 3: + if (mTimers[2] == 0) { + mCamMode++; + mCamCenter = current.pos; + + sp24.set(50.0f + TREG_F(4), 30.0f + TREG_F(5), 150.0f + TREG_F(6)); + cLib_offsetPos(&mCamEye, s_LinkPos, s_TargetAngle, &sp24); + field_0x618 = mCamEye; + + mTimers[0] = 150; + current.pos.set(1146.0f, 4907.0f, 7269.0f); + old.pos = current.pos; + } + + if (mTimers[0] != 0) { + field_0x60c = current.pos; + } + + SetMoveCam1(0.2f, 100.0f); + break; + case 4: + field_0x60c = current.pos; + SetMoveCam1(0.2f, 100.0f); + break; + case 5: + sp24.set(0.0f, 0.0f, 0.0f); + MTXCopy(daPy_getLinkPlayerActorClass()->getModelJointMtx(6), *calc_mtx); + MtxPosition(&sp24, &sp24); + field_0x60c = sp24; + + sp24.set(TREG_F(4), 10.0f + TREG_F(5), 200.0f + TREG_F(6)); + cLib_offsetPos(&field_0x618, s_LinkPos, fopAcM_GetShapeAngle_p(player)->y + 0x8000, &sp24); + SetMoveCam1(0.5f + HREG_F(4), 1000.0f + HREG_F(5)); + + if (mTimers[0] == 1) { + daPy_getPlayerActorClass()->changeDemoMode(0x17, 1, 2, 0); + } + + if (mTimers[1] == 0) { + daPy_getPlayerActorClass()->changeDemoMode(0x17, 1, 2, 0); + mCamMode++; + mMode++; + mTimers[0] = 150; + } + break; + case 6: + if (mTimers[0] == 0) { + SetReleaseCam(); + mAction = ACTION_FLY; + mSubAction = SUBACT_WAIT; + mMode = 0; + mType = TYPE_HYRULE_CASTLE; + } + + field_0x60c = current.pos; + SetMoveCam1(0.2f, 5.0f); + break; + } + + if (mCamMode > 1) { + dComIfGp_getEvent().onSkipFade(); + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 1); + } } -/* ############################################################################################## */ -/* 805ED2AC-805ED2B0 00024C 0004+00 0/0 0/0 0/0 .rodata @5642 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5642 = 4000.0f; -COMPILER_STRIP_GATE(0x805ED2AC, &lit_5642); -#pragma pop - -/* 805ED2B0-805ED2B4 000250 0004+00 0/0 0/0 0/0 .rodata @5643 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5643 = -4000.0f; -COMPILER_STRIP_GATE(0x805ED2B0, &lit_5643); -#pragma pop - -/* 805ED2B4-805ED2B8 000254 0004+00 0/0 0/0 0/0 .rodata @5644 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5644 = 6469.0f; -COMPILER_STRIP_GATE(0x805ED2B4, &lit_5644); -#pragma pop - -/* 805ED2B8-805ED2BC 000258 0004+00 0/0 0/0 0/0 .rodata @5645 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5645 = 6465.0f; -COMPILER_STRIP_GATE(0x805ED2B8, &lit_5645); -#pragma pop - -/* 805ED2BC-805ED2C0 00025C 0004+00 0/0 0/0 0/0 .rodata @5646 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5646 = 6133.0f; -COMPILER_STRIP_GATE(0x805ED2BC, &lit_5646); -#pragma pop - -/* 805ED2C0-805ED2C4 000260 0004+00 0/1 0/0 0/0 .rodata @5647 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5647 = -100.0f; -COMPILER_STRIP_GATE(0x805ED2C0, &lit_5647); -#pragma pop - -/* 805ED2C4-805ED2C8 000264 0004+00 0/0 0/0 0/0 .rodata @5648 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5648 = 1146.0f; -COMPILER_STRIP_GATE(0x805ED2C4, &lit_5648); -#pragma pop - -/* 805ED2C8-805ED2CC 000268 0004+00 0/0 0/0 0/0 .rodata @5649 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5649 = 4907.0f; -COMPILER_STRIP_GATE(0x805ED2C8, &lit_5649); -#pragma pop - -/* 805ED2CC-805ED2D0 00026C 0004+00 0/0 0/0 0/0 .rodata @5650 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5650 = 7269.0f; -COMPILER_STRIP_GATE(0x805ED2CC, &lit_5650); -#pragma pop - -/* 805ED2D0-805ED2D4 000270 0004+00 0/9 0/0 0/0 .rodata @5651 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5651 = 10.0f; -COMPILER_STRIP_GATE(0x805ED2D0, &lit_5651); -#pragma pop - -/* 805ED2D4-805ED2D8 000274 0004+00 0/1 0/0 0/0 .rodata @5779 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5779 = 170.0f; -COMPILER_STRIP_GATE(0x805ED2D4, &lit_5779); -#pragma pop - -/* 805ED2D8-805ED2DC 000278 0004+00 0/1 0/0 0/0 .rodata @5780 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5780 = 140.0f; -COMPILER_STRIP_GATE(0x805ED2D8, &lit_5780); -#pragma pop - -/* 805ED2DC-805ED2E0 00027C 0004+00 0/2 0/0 0/0 .rodata @5781 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5781 = 9.0f / 10.0f; -COMPILER_STRIP_GATE(0x805ED2DC, &lit_5781); -#pragma pop - -/* 805ED2E0-805ED2E4 000280 0004+00 0/1 0/0 0/0 .rodata @5782 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5782 = 1400.0f; -COMPILER_STRIP_GATE(0x805ED2E0, &lit_5782); -#pragma pop - -/* 805ED2E4-805ED2E8 000284 0004+00 0/1 0/0 0/0 .rodata @5783 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5783 = 900.0f; -COMPILER_STRIP_GATE(0x805ED2E4, &lit_5783); -#pragma pop - -/* 805ED2E8-805ED2EC 000288 0004+00 1/5 0/0 0/0 .rodata @5784 */ -SECTION_RODATA static f32 const lit_5784 = 15.0f; -COMPILER_STRIP_GATE(0x805ED2E8, &lit_5784); - -/* 805ED2EC-805ED2F0 00028C 0004+00 0/2 0/0 0/0 .rodata @5785 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5785 = -2.0f; -COMPILER_STRIP_GATE(0x805ED2EC, &lit_5785); -#pragma pop - /* 805E2974-805E2F44 004654 05D0+00 1/1 0/0 0/0 .text Gn_DemoAction__8daB_GG_cFv */ void daB_GG_c::Gn_DemoAction() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp34; + + switch (mMode) { + case 0: + if (mAnm != 0x20) { + SetAnm(32, 2, 5.0f, 1.0f); + } + break; + case 1: + if (mAnm != 0x1B) { + SetAnm(27, 0, 5.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_GG_V_TAKE_OFF, 0, -1); + speed.y = 0.0f; + gravity = 0.0f; + field_0x5c0 = 0.0f; + } else if (mpModelMorf->checkFrame(18.0f)) { + speed.y = 170.0f + TREG_F(0); + field_0x5c0 = TREG_F(1); + gravity = -4.2f + TREG_F(2); + } else if (mpModelMorf->isStop()) { + gravity = 0.0f; + SetAnm(14, 2, 5.0f, 1.0f); + mMode++; + mTimers[1] = 50; + speed.y = 0.0f; + field_0x5c0 = 0.0f; + } + break; + case 2: + if (mTimers[1] == 0 && mAnm != 4) { + SetAnm(4, 0, 5.0f, 1.0f); + } else if (mpModelMorf->isStop() && mAnm == 4) { + SetAnm(5, 0, 5.0f, 1.0f); + field_0x5ba = s_TargetAngle; + current.angle.y = s_TargetAngle; + field_0x5bc = 140.0f + TREG_F(3); + speedF = field_0x5bc; + field_0x5c0 = (100.0f + (s_LinkPos->y - current.pos.y)) / ((0.9f * fopAcM_searchPlayerDistanceXZ(this)) / speedF); + speed.y = field_0x5c0; + mMode++; + } + break; + case 3: + mSound.startCreatureSoundLevel(Z2SE_EN_GG_ATK_MOVE, 0, -1); + field_0x5c0 = (100.0f + (s_LinkPos->y - current.pos.y)) / ((0.9f * fopAcM_searchPlayerDistanceXZ(this)) / speedF); + field_0x5ba = s_TargetAngle; + + if (fopAcM_searchPlayerDistance(this) < (1400.0f + HREG_F(7))) { + if (daPy_py_c::checkNowWolf()) { + daPy_getPlayerActorClass()->changeDemoMode(0x10, 3, 0, 0); + } else { + daPy_getPlayerActorClass()->changeDemoMode(0x49, 0, 0, 0); + } + } + + if (fopAcM_searchPlayerDistance(this) < (900.0f + HREG_F(6))) { + SetAnm(6, 0, 5.0f, 1.0f); + field_0x5bc *= 0.5f; + field_0x648 = current.pos.y; + mMode++; + mCamMode++; + + mTimers[0] = 20; + mTimers[1] = 40; + } + break; + case 4: + mSound.startCreatureSoundLevel(Z2SE_EN_GG_ATK_MOVE, 0, -1); + + if (mpModelMorf->checkFrame(15.0f)) { + field_0x5c0 = 50.0f; + } + + if (mAnm == 6 && mpModelMorf->isStop()) { + SetAnm(7, 2, 5.0f, 1.0f); + } else if ((current.pos.y - field_0x648) > 600.0f || mAcch.ChkRoofHit()) { + SetAnm(14, 2, 5.0f, 1.0f); + current.pos.y -= 100.0f + HREG_F(9); + old.pos.y = current.pos.y; + + mMode++; + field_0x5c0 = -2.0f; + field_0x5bc = 0.0f; + } + break; + case 5: + break; + } + + s16 sp8 = s_TargetAngle - shape_angle.y; + cXyz sp28; + sp28 = *s_LinkPos - current.pos; + cLib_addCalcAngleS2(&field_0x6c4, -cM_atan2s(sp28.y, JMAFastSqrt((sp28.x * sp28.x) + (sp28.z * sp28.z))), 2, 0x600); + cLib_addCalcAngleS2(&field_0x6be, sp8, 2, 0x100); + field_0x5ba = s_TargetAngle; + shape_angle.y = current.angle.y; } /* 805E2F44-805E3024 004C24 00E0+00 1/1 0/0 0/0 .text DemoAction__8daB_GG_cFv */ void daB_GG_c::DemoAction() { - // NONMATCHING + switch (mSubAction) { + case 0: + St_CamAction(); + St_DemoAction(); + break; + case 1: + Md_CamAction(); + Md_DemoAction(); + break; + case 2: + Gn_DemoAction(); + Gn_CamAction(); + break; + } + + if (mSubAction != 1 || mMode != 0) { + cLib_addCalc2(&speed.y, field_0x5c0, 0.2f, 100.0f); + } + + cLib_addCalc2(&speedF, field_0x5bc, 0.2f, 100.0f); + cLib_addCalcAngleS2(¤t.angle.y, field_0x5ba, 0x10, 0x1000); } /* 805E3024-805E31E4 004D04 01C0+00 1/1 0/0 0/0 .text F_WaitAction__8daB_GG_cFv */ void daB_GG_c::F_WaitAction() { - // NONMATCHING + switch (mMode) { + case 0: + SetAnm(14, 2, 5.0f, 1.0f); + field_0x5bc = 0.0f; + field_0x5c0 = 0.0f; + mTimers[0] = 50.0f + cM_rndF(50.0f); + mMode++; + + mCcShieldSph.OnTgShield(); + mCcCyl.OnTgShield(); + mCcHookCyl.OffTgSetBit(); + break; + case 1: + if (mTimers[0] == 0 && !dComIfGp_event_runCheck()) { + SetAction(ACTION_FLY, SUBACT_MOVE, 0); + } + break; + } + + cXyz sp8 = *s_LinkPos - current.pos; + cLib_addCalcAngleS2(&field_0x6c4, -cM_atan2s(sp8.y, JMAFastSqrt((sp8.x * sp8.x) + (sp8.z * sp8.z))), 0x10, 0x600); + cLib_addCalcAngleS2(&field_0x6be, (cLib_targetAngleY(¤t.pos, s_LinkPos) - shape_angle.y), 0x10, 0x100); + + if (field_0x6be > 0x2000) { + field_0x6be = 0x2000; + } else if (field_0x6be < -0x2000) { + field_0x6be = -0x2000; + } } -/* ############################################################################################## */ -/* 805ED2F0-805ED2F4 000290 0004+00 0/3 0/0 0/0 .rodata @5883 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5883 = 1500.0f; -COMPILER_STRIP_GATE(0x805ED2F0, &lit_5883); -#pragma pop - -/* 805ED2F4-805ED2F8 000294 0004+00 1/6 0/0 0/0 .rodata @5884 */ -SECTION_RODATA static f32 const lit_5884 = 20.0f; -COMPILER_STRIP_GATE(0x805ED2F4, &lit_5884); - -/* 805ED2F8-805ED2FC 000298 0004+00 0/2 0/0 0/0 .rodata @5885 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5885 = 9.0f / 5.0f; -COMPILER_STRIP_GATE(0x805ED2F8, &lit_5885); -#pragma pop - -/* 805ED2FC-805ED300 00029C 0004+00 0/1 0/0 0/0 .rodata @5886 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5886 = 7.0f / 5.0f; -COMPILER_STRIP_GATE(0x805ED2FC, &lit_5886); -#pragma pop - /* 805E31E4-805E3448 004EC4 0264+00 2/2 0/0 0/0 .text F_FookChk__8daB_GG_cFv */ void daB_GG_c::F_FookChk() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz* hookshot_top = player->getHookshotTopPos(); + + if (hookshot_top != NULL) { + s16 temp_r26 = (s_TargetAngle - fopAcM_GetShapeAngle_p(player)->y) + 0x8000; + if (current.pos.abs(*hookshot_top) < 1500.0f && daPy_getPlayerActorClass()->checkHookshotShootReturnMode() && !daPy_getPlayerActorClass()->checkHookshotReturnMode() && temp_r26 < 0x500 && temp_r26 > -0x500) { + mMode = 2; + mTimers[1] = 30; + mTimers[2] = 50; + + field_0x5bc = 20.0f; + speedF = 30.0f; + mModelPlaySpeed = 1.8f; + field_0x644 = 1.4f; + field_0x5c0 = 2.0f; + speed.y = -30.0f; + + if ((int)cM_rndF(100.0f) > 50) { + current.angle.y = s_TargetAngle + 0x4000; + field_0x5b7 = 1; + } else { + current.angle.y = s_TargetAngle - 0x4000; + field_0x5b7 = 0; + } + + field_0x5ba = current.angle.y; + } + } } -/* ############################################################################################## */ -/* 805ED300-805ED304 0002A0 0004+00 1/2 0/0 0/0 .rodata @6106 */ -SECTION_RODATA static f32 const lit_6106 = 5000.0f; -COMPILER_STRIP_GATE(0x805ED300, &lit_6106); - -/* 805ED304-805ED308 0002A4 0004+00 0/1 0/0 0/0 .rodata @6107 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6107 = 1550.0f; -COMPILER_STRIP_GATE(0x805ED304, &lit_6107); -#pragma pop - -/* 805ED308-805ED30C 0002A8 0004+00 0/3 0/0 0/0 .rodata @6108 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6108 = 8.0f; -COMPILER_STRIP_GATE(0x805ED308, &lit_6108); -#pragma pop - -/* 805ED30C-805ED310 0002AC 0004+00 0/1 0/0 0/0 .rodata @6109 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6109 = -3.0f; -COMPILER_STRIP_GATE(0x805ED30C, &lit_6109); -#pragma pop - -/* 805ED310-805ED314 0002B0 0004+00 0/4 0/0 0/0 .rodata @6110 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6110 = 1200.0f; -COMPILER_STRIP_GATE(0x805ED310, &lit_6110); -#pragma pop - -/* 805ED314-805ED318 0002B4 0004+00 0/2 0/0 0/0 .rodata @6111 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6111 = -1200.0f; -COMPILER_STRIP_GATE(0x805ED314, &lit_6111); -#pragma pop - -/* 805ED3D4-805ED3D4 000374 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_805ED3D9 = "D_MN07"; -#pragma pop - /* 805E3448-805E3CAC 005128 0864+00 1/1 0/0 0/0 .text F_MoveAction__8daB_GG_cFv */ void daB_GG_c::F_MoveAction() { - // NONMATCHING -} + cXyz sp34; + cXyz sp28; + daPy_py_c* player = daPy_getPlayerActorClass(); -/* ############################################################################################## */ -/* 805ED318-805ED31C 0002B8 0004+00 0/1 0/0 0/0 .rodata @6174 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6174 = 2350.0f; -COMPILER_STRIP_GATE(0x805ED318, &lit_6174); -#pragma pop + switch (mMode) { + case 0: + if (mType == TYPE_L7_MBOSS) { + mTimers[0] = 200.0f + cM_rndF(100.0f); + } else { + mTimers[0] = 200.0f + cM_rndF(200.0f); + + if (s_dis > 5000.0f) { + mSound.setLinkSearch(false); + } else { + mSound.setLinkSearch(true); + } + } + + mMode++; + mCcHookCyl.OffTgSetBit(); + break; + case 1: + if (mTimers[1] == 0) { + field_0x5bc = 5.0f + cM_rndF(5.0f); + mTimers[1] = 40.0f + cM_rndF(40.0f); + + sp34 = *s_LinkPos - current.pos; + + if (mType == TYPE_HYRULE_CASTLE) { + sp34.x += cM_rndFX(1550.0f); + sp34.z += cM_rndFX(1550.0f); + } else { + sp34.x += 1500.0f + cM_rndFX(1550.0f); + sp34.z += 1500.0f + cM_rndFX(1550.0f); + } + + field_0x5ba = cM_atan2s(sp34.x, sp34.z); + gravity = 0.0f; + } + + if (mTimers[2] == 0) { + mTimers[2] = 40.0f + cM_rndF(40.0f); + + field_0x5c0 = cM_rndFX(5.0f); + if (current.pos.y < 400.0f + BREG_F(10)) { + field_0x5c0 = 8.0f + BREG_F(9); + } + + if (strcmp("D_MN07", dComIfGp_getStartStageName()) == 0 && dComIfGp_getStartStageRoomNo() == 15 && s_LinkPos->y > 1500.0f) { + if (current.pos.y > 1500.0f) { + field_0x5c0 = -3.0f; + } else if (current.pos.y < 500.0f) { + field_0x5c0 = 3.0f; + } + } else if (current.pos.y - s_LinkPos->y < 500.0f) { + field_0x5c0 = 3.0f; + } else if (current.pos.y - s_LinkPos->y > 800.0f) { + field_0x5c0 = -3.0f; + } + + field_0x644 = 1.0f + (field_0x5c0 / 60.0f); + } + + if (s_LinkPos->absXZ(current.pos) < 1000.0f + BREG_F(6)) { + field_0x5bc = 10.0f; + + if (field_0x5b7 != 0) { + field_0x5ba = s_TargetAngle - 0x5000; + } else { + field_0x5ba = s_TargetAngle + 0x5000; + } + + mTimers[1] = 20; + } else if (s_LinkPos->absXZ(current.pos) < 500.0f) { + field_0x5bc = 10.0f; + + if (field_0x5b7 != 0) { + field_0x5ba = s_TargetAngle - 0x7000; + } else { + field_0x5ba = s_TargetAngle + 0x7000; + } + + mTimers[1] = 20; + + if (mAcch.ChkWallHit()) { + if (field_0x5b7 != 0) { + field_0x5ba = s_TargetAngle - 0x3000; + } else { + field_0x5ba = s_TargetAngle + 0x3000; + } + } + } + + F_FookChk(); + + if ((strcmp("D_MN07", dComIfGp_getStartStageName()) != 0 || dComIfGp_getStartStageRoomNo() != 15 || !(s_LinkPos->y > 1500.0f)) && mTimers[0] == 0 && (mType != TYPE_HYRULE_CASTLE || !other_bg_check(this, player))) { + if (mType == TYPE_L7_M && s_W_Action == 2) { + mTimers[0] = 100; + } else if (!dComIfGp_event_runCheck()) { + SetAction(ACTION_FLY, SUBACT_ATTACK, 10); + } else { + mTimers[0] = 200; + } + } + break; + case 2: + if (field_0x5b7 != 0) { + s_TargetAngle -= 0x1500; + } else { + s_TargetAngle += 0x1500; + } + + if (mTimers[1] == 0) { + field_0x644 = 1.0f; + } + + if (mTimers[2] == 0) { + mMode = 1; + } + + cLib_addCalcAngleS2(&field_0x6be, 0, 1, 0x100); + break; + } + + sp34 = *s_LinkPos - current.pos; + cLib_addCalcAngleS2(&field_0x6c4, -cM_atan2s(sp34.y, JMAFastSqrt((sp34.x * sp34.x) + (sp34.z * sp34.z))), 0x10, 0x600); + s16 sp8 = cLib_targetAngleY(¤t.pos, s_LinkPos) - shape_angle.y; + cLib_addCalcAngleS2(&field_0x6be, sp8, 0x10, 0x100); + + if (field_0x6be > 0x2000) { + field_0x6be = 0x2000; + } else if (field_0x6be < -0x2000) { + field_0x6be = -0x2000; + } + + if (mType == TYPE_L7_MBOSS) { + if (current.pos.x > 1200.0f) { + current.pos.x = 1200.0f; + } else if (current.pos.x < -1200.0f) { + current.pos.x = -1200.0f; + } else if (current.pos.z < -1200.0f) { + current.pos.z = -1200.0f; + } else if (current.pos.z > 1200.0f) { + current.pos.z = 1200.0f; + } + } +} /* 805E3CAC-805E3F0C 00598C 0260+00 1/1 0/0 0/0 .text F_LV7_W_MoveAction__8daB_GG_cFv */ void daB_GG_c::F_LV7_W_MoveAction() { - // NONMATCHING -} + cXyz sp20; + cXyz sp14; + daPy_getPlayerActorClass(); -/* ############################################################################################## */ -/* 805ED31C-805ED320 0002BC 0004+00 0/4 0/0 0/0 .rodata @6430 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6430 = 70.0f; -COMPILER_STRIP_GATE(0x805ED31C, &lit_6430); -#pragma pop + switch (mMode) { + case 0: + mTimers[0] = 200.0f + cM_rndF(200.0f); + mMode++; + field_0x644 = 1.0f; + mCcHookCyl.OffTgSetBit(); + break; + case 1: + F_FookChk(); + + if ((strcmp("D_MN07", dComIfGp_getStartStageName()) != 0 || dComIfGp_getStartStageRoomNo() != 15 || !(s_LinkPos->y > 2350.0f)) && mTimers[0] == 0) { + if (s_M_Action != 2) { + if (!dComIfGp_event_runCheck()) { + SetAction(ACTION_FLY, SUBACT_ATTACK, 10); + } else { + mTimers[0] = 200; + } + } else { + mTimers[0] = 100; + } + } + break; + case 2: + if (field_0x5b7 != 0) { + s_TargetAngle -= 0x1500; + } else { + s_TargetAngle += 0x1500; + } + + if (mTimers[1] == 0) { + field_0x5bc = 0.0f; + mMode = 1; + } + + cLib_addCalcAngleS2(&field_0x6be, 0, 1, 0x100); + break; + } + + sp20 = *s_LinkPos - current.pos; + cLib_addCalcAngleS2(&field_0x6c4, -cM_atan2s(sp20.y, JMAFastSqrt((sp20.x * sp20.x) + (sp20.z * sp20.z))), 0x10, 0x600); + cLib_addCalcAngleS2(&field_0x6be, (cLib_targetAngleY(¤t.pos, s_LinkPos) - shape_angle.y), 0x10, 0x100); + + if (field_0x6be > 0x2000) { + field_0x6be = 0x2000; + } else if (field_0x6be < -0x2000) { + field_0x6be = -0x2000; + } +} /* 805E3F0C-805E4914 005BEC 0A08+00 1/1 0/0 0/0 .text F_AttackAction__8daB_GG_cFv */ void daB_GG_c::F_AttackAction() { - // NONMATCHING + switch (mMode) { + case 0: + if (mAnm != 4) { + for (s16 i = 0; i < 3; i++) { + mCcSph[i].OnAtSetBit(); + } + + SetAnm(4, 0, 5.0f, 1.0f); + field_0x5ba = s_TargetAngle + 0x8000; + field_0x5c0 = 10.0f; + + if (field_0x5b6 != 0) { + field_0x5ba = s_TargetAngle; + } + } else if (mAnm == 4 && mpModelMorf->isStop()) { + mMode++; + SetAnm(5, 2, 5.0f, 1.0f); + field_0x5ba = s_TargetAngle; + current.angle.y = s_TargetAngle; + + f32 var_f31 = fopAcM_searchPlayerDistanceXZ(this); + if (var_f31 < 40.0f) { + var_f31 = 40.0f; + } + field_0x5bc = 60.0f * (var_f31 / 1000.0f); + + speedF = field_0x5bc; + field_0x5c0 = (100.0f + (s_LinkPos->y - current.pos.y)) / ((0.9f * var_f31) / speedF); + speed.y = field_0x5c0; + fopAcM_OffStatus(this, 0x80000); + } + break; + case 1: { + mSound.startCreatureSoundLevel(Z2SE_EN_GG_ATK_MOVE, 0, -1); + + f32 var_f31 = fopAcM_searchPlayerDistanceXZ(this); + if (var_f31 < 40.0f) { + var_f31 = 40.0f; + } + + field_0x5c0 = (100.0f + (s_LinkPos->y - current.pos.y)) / ((0.9f * var_f31) / speedF); + field_0x5ba = cLib_targetAngleY(¤t.pos, s_LinkPos); + + if (fopAcM_searchPlayerDistance(this) < 600.0f || mAcch.ChkGroundHit() || mAcch.ChkWallHit()) { + SetAnm(6, 0, 5.0f, 1.0f); + mMode++; + field_0x5bc *= 0.5f; + field_0x648 = current.pos.y; + } + + speedF = l_HIO.fly_attack_speed * field_0x5bc; + speed.y = l_HIO.fly_attack_speed * field_0x5c0; + break; + } + case 2: + mSound.startCreatureSoundLevel(Z2SE_EN_GG_ATK_MOVE, 0, -1); + + if (mpModelMorf->checkFrame(15.0f)) { + field_0x5c0 = 60.0f; + } + + if (mAnm == 6 && mpModelMorf->isStop()) { + SetAnm(7, 2, 5.0f, 1.0f); + + for (int i = 0; i < 3; i++) { + mCcSph[i].OffAtSetBit(); + } + } else if (current.pos.y - field_0x648 > 500.0f || (field_0x650 == current.pos.y - field_0x648 && mAnm == 7)) { + mCcHookCyl.OnTgSetBit(); + fopAcM_OnStatus(this, 0x80000); + + if (field_0x5b6 != 0) { + SetAnm(5, 2, 5.0f, 1.0f); + SetAction(ACTION_F_A, SUBACT_MOVE, 2); + field_0x5bc = 70.0f; + + s16 i; + s16 sp8 = 0; + for (i = 0; i < 3; i++) { + if (in_pos[sp8].absXZ(current.pos) > in_pos[i].absXZ(current.pos)) { + sp8 = i; + } + } + + mInOutPosIdx = sp8; + field_0x5ba = cLib_targetAngleY(¤t.pos, &in_pos[mInOutPosIdx]); + + mCcCyl.OffTgSetBit(); + mCcShieldSph.OffTgSetBit(); + mCcHookCyl.OffTgSetBit(); + } else { + SetAnm(14, 2, 5.0f, 1.0f); + SetAction(ACTION_FLY, SUBACT_MOVE, 0); + + field_0x5c0 = 0.0f; + field_0x5bc = 0.0f; + + mCcShieldSph.OnTgShield(); + mCcCyl.OnTgShield(); + } + } + + if (mAnm == 7 || mpModelMorf->getFrame() > 15.0f) { + field_0x5ba = current.angle.y; + s_TargetAngle = field_0x5ba; + } + + field_0x650 = current.pos.y - field_0x648; + break; + case 10: + if (mAnm != 0xB) { + mCcHookCyl.OnTgSetBit(); + SetAnm(11, 2, 5.0f, 1.0f); + + fopAcM_OffStatus(this, 0x200000); + fopAcM_OnStatus(this, 0x80000); + + if (field_0x6ba != 0) { + mTimers[0] = l_HIO.fly_attack_wait_time * 0.5f; + } else { + mTimers[0] = l_HIO.fly_attack_wait_time; + } + + field_0x5bc = 0.0f; + field_0x5c0 = 0.0f; + + for (int i = 0; i < 3; i++) { + if (mType == TYPE_L7_MBOSS) { + mCcSph[i].SetAtAtp(4); + } else { + mCcSph[i].SetAtAtp(2); + } + + mCcSph[i].OnAtSetBit(); + mCcSph[i].SetAtSpl((dCcG_At_Spl) 7); + } + } else if (mAnm == 0xB) { + field_0x6ba = 0; + + if (mTimers[0] == 0) { + mMode = 0; + } + + if (strcmp("D_MN07", dComIfGp_getStartStageName()) == 0 && dComIfGp_getStartStageRoomNo() == 15 && s_LinkPos->y > 1500.0f) { + SetAction(ACTION_FLY, SUBACT_MOVE, 0); + SetAnm(14, 2, 5.0f, 1.0f); + } + } + break; + } + + cLib_addCalc2(&speedF, field_0x5bc, 0.8f, 1000.0f); + cLib_addCalc2(&speed.y, field_0x5c0, 0.8f, 1000.0f); + cLib_addCalcAngleS2(&field_0x6c4, 0, 0x10, 0x600); + cLib_addCalcAngleS2(&field_0x6be, 0, 0x10, 0x1000); + + F_AtHit(); + + if (mType == TYPE_L7_MBOSS) { + if (current.pos.x > 1200.0f) { + current.pos.x = 1200.0f; + } else if (current.pos.x < -1200.0f) { + current.pos.x = -1200.0f; + } else if (current.pos.z < -1200.0f) { + current.pos.z = -1200.0f; + } else if (current.pos.z > 1200.0f) { + current.pos.z = 1200.0f; + } + } } /* 805E4914-805E5190 0065F4 087C+00 2/1 0/0 0/0 .text F_DamageAction__8daB_GG_cFv */ void daB_GG_c::F_DamageAction() { - // NONMATCHING + cXyz sp30; + daPy_py_c* player = daPy_getPlayerActorClass(); + + switch (mMode) { + case 0: + mCcHookCyl.OnTgSetBit(); + SetAnm(10, 0, 1.0f, 1.0f); + field_0x5c0 = 0.0f; + field_0x5bc = 0.0f; + mMode += 2; + break; + case 1: + SetAnm(10, 0, 1.0f, 1.0f); + current.angle.y = s_TargetAngle + 0x8000; + field_0x5bc = 40.0f; + field_0x5c0 = -40.0f; + mMode++; + break; + case 2: + if (mpModelMorf->isStop()) { + SetAction(ACTION_FLY, SUBACT_ATTACK, 10); + mCcShieldSph.OnTgShield(); + mCcCyl.OnTgShield(); + field_0x6ba = 1; + } + break; + case 10: + if (mAnm == 18 || mAnm == 9) { + mAction = ACTION_GROUND; + mSubAction = SUBACT_DAMAGE; + mMode = 10; + speedF = 0.0f; + field_0x5bc = 0.0f; + + if (field_0x5b6 != 0) { + mTimers[2] = 0.8f * l_HIO.takeoff2_time; + } else { + mTimers[2] = 0.8f * l_HIO.takeoff_time; + } + + if (field_0x5ce != 0xFF && dComIfGs_isSwitch(142, fopAcM_GetRoomNo(this))) { + dComIfGs_offSwitch(142, fopAcM_GetRoomNo(this)); + } + } else if (mAnm != 8 && mAnm != 12) { + SetAnm(8, 0, 5.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_GG_V_PULL, -1); + gravity = -9.0f; + dComIfGs_onZoneSwitch(31, fopAcM_GetRoomNo(this)); + } else if (mAnm == 8 && mpModelMorf->isStop()) { + SetAnm(12, 2, 5.0f, 1.0f); + SpeedClear(); + mTimers[0] = 1; + } + + if (mTimers[0] == 1 && mAnm == 0xC) { + mMode++; + fopAcM_cancelHookCarryNow(this); + fopAcM_OffStatus(this, 0x80000); + fopAcM_OnStatus(this, 0x200000); + mTimers[0] = 5; + } + break; + case 11: + if (!daPy_getPlayerActorClass()->checkHookshotReturnMode()) { + gravity = -9.0f; + SetAnm(9, 0, 5.0f, 1.0f); + speed.y = 0.0f; + speedF = 0.0f; + field_0x5bc = 0.0f; + mMode++; + + for (int i = 0; i < 3; i++) { + mCcSph[i].SetAtSpl((dCcG_At_Spl) 0); + mCcSph[i].OffAtSetBit(); + } + + field_0x5cc = 0; + field_0x648 = s_LinkPos->y - 50.0f; + + mCcCyl.OffTgShield(); + mCcShieldSph.OffTgSetBit(); + mCcShieldSph.OffTgShield(); + + s_M_Action = 0; + s_W_Action = 0; + + fopAcM_OffStatus(this, 0x80000); + fopAcM_OnStatus(this, 0x200000); + } else { + cXyz* hookshot_top = player->getHookshotTopPos(); + cXyz sp24(0.0f, 0.0f, 0.0f); + cXyz sp18; + + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(0xB)); + mDoMtx_stack_c::multVec(&sp24, &sp24); + sp24 = *hookshot_top; + sp24.y -= 100.0f + BREG_F(7); + cLib_chasePos(¤t.pos, sp24, 120.0f); + + if (mAcch.ChkWallHit() && mTimers[0] == 0) { + SetAction(ACTION_FLY, SUBACT_MOVE, 0); + fopAcM_OffStatus(this, 0x200000); + fopAcM_OnStatus(this, 0x80000); + + SetAnm(14, 2, 5.0f + BREG_F(12), 1.0f); + + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + mCcShieldSph.OnTgSetBit(); + + speed.y = 0.0f; + field_0x644 = 1.2f; + gravity = 0.0f; + } + } + + cLib_chaseAngleS(&field_0x6c4, 0, 0x2000); + break; + case 12: + cLib_chaseAngleS(&field_0x6c4, 0, 0x2000); + + if (mpModelMorf->isStop() && mAcch.ChkGroundHit()) { + field_0x648 = current.pos.y; + gravity = -9.0f; + mMode++; + speedF = 0.0f; + field_0x5bc = 0.0f; + + if (field_0x5b6 != 0) { + mTimers[2] = 0.8f * l_HIO.takeoff2_time; + } else { + mTimers[2] = 0.8f * l_HIO.takeoff_time; + } + + if (field_0x5ce != 0xFF && dComIfGs_isSwitch(142, fopAcM_GetRoomNo(this))) { + dComIfGs_offSwitch(142, fopAcM_GetRoomNo(this)); + } + } else if (current.pos.y < (field_0x648 - 50.0f)) { + SetAction(ACTION_FLY, SUBACT_MOVE, 0); + fopAcM_OffStatus(this, 0x200000); + fopAcM_OnStatus(this, 0x80000); + + SetAnm(14, 2, 5.0f + BREG_F(12), 1.0f); + + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + mCcShieldSph.OnTgSetBit(); + + speed.y = 0.0f; + field_0x5c0 = 10.0f + BREG_F(11); + field_0x644 = 1.2f; + gravity = 0.0f; + } + break; + case 13: + if (mAnm != 0x12) { + SetAnm(18, 0, 5.0f, 1.0f); + field_0x5ba = s_TargetAngle + 0x8000; + current.angle.y = field_0x5ba; + } else if (mAnm == 0x12 && mpModelMorf->checkFrame(5.0f)) { + field_0x5bc = 50.0f; + speedF = 50.0f; + speed.y = 30.0f; + } else if (mAnm == 0x12 && mpModelMorf->checkFrame(13.0f)) { + speedF = 0.0f; + speed.y = 0.0f; + field_0x5bc = 0.0f; + + mSound.startCreatureSound(Z2SE_EN_GG_FOOTNOTE, 0, -1); + + mCcCyl.OffTgSetBit(); + mCcShieldSph.OffTgSetBit(); + + SetAction(ACTION_GROUND, SUBACT_MOVE, 0); + } + break; + } } -/* ############################################################################################## */ -/* 805ED320-805ED324 0002C0 0004+00 0/0 0/0 0/0 .rodata @6626 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6626 = -40.0f; -COMPILER_STRIP_GATE(0x805ED320, &lit_6626); -#pragma pop - -/* 805ED324-805ED328 0002C4 0004+00 0/2 0/0 0/0 .rodata @6627 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6627 = -9.0f; -COMPILER_STRIP_GATE(0x805ED324, &lit_6627); -#pragma pop - -/* 805ED328-805ED32C 0002C8 0004+00 0/1 0/0 0/0 .rodata @6628 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6628 = 13.0f; -COMPILER_STRIP_GATE(0x805ED328, &lit_6628); -#pragma pop - -/* 805ED32C-805ED330 0002CC 0004+00 1/3 0/0 0/0 .rodata @6653 */ -SECTION_RODATA static f32 const lit_6653 = 3000.0f; -COMPILER_STRIP_GATE(0x805ED32C, &lit_6653); - /* 805E5190-805E5220 006E70 0090+00 1/1 0/0 0/0 .text AttentionChk__8daB_GG_cFv */ void daB_GG_c::AttentionChk() { - // NONMATCHING + daPy_getPlayerActorClass(); + + if (s_dis < 3000.0f) { + attention_info.flags = 4; + if (field_0x5b0 != 0 && mSubAction == SUBACT_ATTACK) { + s16 temp_r0 = fopAcM_toPlayerShapeAngleY(this) + 0x8000; + if (temp_r0 < 0x3000 && temp_r0 > -0x3000) { + attention_info.flags = 4; + } else { + attention_info.flags = 0; + } + } + } else { + attention_info.flags = 0; + } } /* 805E5220-805E53DC 006F00 01BC+00 1/1 0/0 0/0 .text FlyAction__8daB_GG_cFv */ void daB_GG_c::FlyAction() { - // NONMATCHING + s16 var_r29 = 0x1000; + + switch (mSubAction) { + case SUBACT_WAIT: + F_WaitAction(); + break; + case SUBACT_MOVE: + if (mType == TYPE_L7_MBOSS) { + F_MoveAction(); + } else if (mType == TYPE_L7_W) { + F_LV7_W_MoveAction(); + s_W_Action = mSubAction; + } else if (mType == TYPE_L7_M) { + F_MoveAction(); + s_M_Action = mSubAction; + } else if (mType == TYPE_HYRULE_CASTLE) { + F_MoveAction(); + } + + cLib_addCalc2(&mModelPlaySpeed, field_0x644, 0.2f, 10.0f); + mpModelMorf->setPlaySpeed(mModelPlaySpeed); + break; + case SUBACT_ATTACK: + F_AttackAction(); + if (mType == TYPE_L7_W || mType == TYPE_L7_M) { + var_r29 = 0x500; + } + break; + case SUBACT_DAMAGE: + F_DamageAction(); + break; + } + + AttentionChk(); + + if (daPy_getPlayerActorClass()->checkWolfLock(this)) { + daPy_getPlayerActorClass()->cancelWolfLock(this); + } + + cLib_addCalc2(&speed.y, field_0x5c0, 0.2f, 100.0f); + cLib_addCalc2(&speedF, field_0x5bc, 0.2f, 100.0f); + cLib_addCalcAngleS2(¤t.angle.y, field_0x5ba, 0x10, var_r29); + cLib_addCalcAngleS2(&shape_angle.y, s_TargetAngle, 0x10, 0x1000); + + if (mSubAction != SUBACT_DAMAGE) { + roofchk(this); + } } /* 805E53DC-805E561C 0070BC 0240+00 2/2 0/0 0/0 .text F_A_TargetMove__8daB_GG_cF4cXyzUc */ -void daB_GG_c::F_A_TargetMove(cXyz param_0, u8 param_1) { - // NONMATCHING +bool daB_GG_c::F_A_TargetMove(cXyz param_0, u8 param_1) { + field_0x5ba = cLib_targetAngleY(¤t.pos, ¶m_0); + field_0x5c0 = (param_0.y - current.pos.y) / (current.pos.absXZ(param_0) / speedF); + speedF = field_0x5bc; + speed.y = field_0x5c0; + + if (param_1 != 0) { + Mtx inv; + mDoMtx_inverse(mpModelMorf->getModel()->getBaseTRMtx(), inv); + mDoMtx_stack_c::copy(inv); + mDoMtx_stack_c::multVec(¶m_0, ¶m_0); + + if (param_0.z < 0.0f) { + return true; + } + } else { + s16 temp_r28 = cLib_targetAngleY(¶m_0, &out_pos[mInOutPosIdx]); + s16 temp_r3 = cLib_targetAngleY(¶m_0, ¤t.pos); + if ((temp_r28 - temp_r3) < 0x4000 && (temp_r28 - temp_r3) > -0x4000) { + return true; + } + } + + return false; } /* 805E561C-805E5808 0072FC 01EC+00 2/2 0/0 0/0 .text F_A_TargetMove__8daB_GG_cF4cXyz */ -void daB_GG_c::F_A_TargetMove(cXyz param_0) { - // NONMATCHING -} +bool daB_GG_c::F_A_TargetMove(cXyz param_0) { + field_0x5ba = cLib_targetAngleY(¤t.pos, ¶m_0); + field_0x5c0 = (param_0.y - current.pos.y) / (current.pos.absXZ(param_0) / speedF); + speedF = field_0x5bc; + speed.y = field_0x5c0; -/* ############################################################################################## */ -/* 805ED330-805ED334 0002D0 0004+00 0/1 0/0 0/0 .rodata @6924 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6924 = 29.0f / 10.0f; -COMPILER_STRIP_GATE(0x805ED330, &lit_6924); -#pragma pop + return way_bg_check2(this, current.pos, out_pos[mInOutPosIdx]) == false; +} /* 805E5808-805E5D0C 0074E8 0504+00 1/1 0/0 0/0 .text F_A_MoveAction__8daB_GG_cFv */ void daB_GG_c::F_A_MoveAction() { - // NONMATCHING + gravity = 0.0f; + cXyz sp38(0.0f, 1000.0f, 3000.0f); + mSound.startCreatureSoundLevel(Z2SE_EN_GG_ATK_MOVE, 0, -1); + + switch (mMode) { + case 0: + if (mTimers[0] == 0) { + s16 new_idx; + do { + new_idx = cM_rndF(2.9f); + } while (mInOutPosIdx == new_idx); + + mInOutPosIdx = new_idx; + current.pos = out_pos[mInOutPosIdx]; + old.pos = current.pos; + + field_0x5bc = 70.0f; + speedF = field_0x5bc; + field_0x5c0 = (in_pos[mInOutPosIdx].y - current.pos.y) / (current.pos.absXZ(in_pos[mInOutPosIdx]) / speedF); + speed.y = field_0x5c0; + current.angle.y = cLib_targetAngleY(&out_pos[mInOutPosIdx], &in_pos[mInOutPosIdx]); + mMode++; + } + break; + case 1: + if (F_A_TargetMove(in_pos[mInOutPosIdx], 1)) { + int sp10 = cM_rndF(100.0f); + + s16 new_idx; + do { + new_idx = cM_rndF(2.9f); + } while (mInOutPosIdx == new_idx); + mInOutPosIdx = new_idx; + + if (sp10 > 70) { + mMode++; + field_0x5bc = 100.0f; + } else { + SpeedClear(); + SetAction(ACTION_FLY, SUBACT_ATTACK, 10); + + mCcCyl.OnTgSetBit(); + mCcShieldSph.OnTgSetBit(); + mCcHookCyl.OnTgSetBit(); + } + } + break; + case 2: + sp38 = in_pos[mInOutPosIdx]; + sp38.y += 400.0f; + + if (F_A_TargetMove(sp38)) { + mMode++; + } + break; + case 3: + if (F_A_TargetMove(out_pos[mInOutPosIdx], 1)) { + current.pos = s_centerpos; + current.pos.y += 10000.0f; + current.pos.x += 10000.0f; + old.pos = current.pos; + + mMode = 0; + mTimers[0] = 50; + attention_info.flags = 0; + } + break; + } + + if (field_0x5bc != 100.0f) { + cLib_addCalcAngleS2(¤t.angle.y, field_0x5ba, 2, 0x1000); + } else { + cLib_addCalcAngleS2(¤t.angle.y, field_0x5ba, 9, 0x1000); + } + + shape_angle.y = current.angle.y; + + if (current.pos.z > 1200.0f) { + current.pos.z = 1200.0f; + } } /* 805E5D0C-805E5D2C 0079EC 0020+00 1/1 0/0 0/0 .text F_A_WaitAction__8daB_GG_cFv */ void daB_GG_c::F_A_WaitAction() { - // NONMATCHING + Md_DemoAction(); } /* 805E5D2C-805E5E78 007A0C 014C+00 1/1 0/0 0/0 .text F_A_Action__8daB_GG_cFv */ void daB_GG_c::F_A_Action() { - // NONMATCHING + daPy_py_c::cancelBoomerangLockActor(this); + + switch (mSubAction) { + case SUBACT_WAIT: + F_A_WaitAction(); + break; + case SUBACT_MOVE: + F_A_MoveAction(); + cLib_addCalc2(&speed.y, field_0x5c0, 0.2f, 100.0f); + break; + } + + if (daPy_getPlayerActorClass()->checkWolfLock(this)) { + daPy_getPlayerActorClass()->cancelWolfLock(this); + } + + cLib_addCalc2(&speedF, field_0x5bc, 0.2f, 100.0f); + + cXyz sp8 = *s_LinkPos - current.pos; + cLib_addCalcAngleS2(&field_0x6c4, (-cM_atan2s(sp8.y, JMAFastSqrt((sp8.x * sp8.x) + (sp8.z * sp8.z))) - shape_angle.x), 0x10, 0x600); } /* 805E5E78-805E608C 007B58 0214+00 2/2 0/0 0/0 .text FookChk__8daB_GG_cFv */ void daB_GG_c::FookChk() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz* hookshot_top = player->getHookshotTopPos(); + + if (hookshot_top != NULL) { + s16 temp_r27 = (s_TargetAngle - fopAcM_GetShapeAngle_p(player)->y) + 0x8000; + if (hookshot_top->absXZ(current.pos) > 100.0f && daPy_getPlayerActorClass()->checkHookshotShootReturnMode() && !daPy_getPlayerActorClass()->checkHookshotReturnMode() && temp_r27 < 0x500 && temp_r27 > -0x500) { + SpeedClear(); + mMode = 5; + SetAnm(0x19, 2, 5.0f, 1.0f); + } + } } /* 805E608C-805E6174 007D6C 00E8+00 2/2 0/0 0/0 .text CutChk__8daB_GG_cFv */ void daB_GG_c::CutChk() { - // NONMATCHING -} + int rnd = cM_rndF(100.0f); + u32 cut_type = daPy_getPlayerActorClass()->getCutType(); -/* ############################################################################################## */ -/* 805ED334-805ED338 0002D4 0004+00 0/2 0/0 0/0 .rodata @7247 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7247 = 4.0f; -COMPILER_STRIP_GATE(0x805ED334, &lit_7247); -#pragma pop + if (s_dis < 400.0f && mMode != 4 && rnd < (20.0f + XREG_F(0)) && cut_type != 0 && !mCcCyl.ChkTgHit() && !mCcShieldSph.ChkTgHit() && cut_type != daPy_py_c::CUT_TYPE_GUARD_ATTACK) { + SetAction(ACTION_GROUND, SUBACT_MOVE, 0); + } +} /* 805E6174-805E6AB0 007E54 093C+00 1/1 0/0 0/0 .text G_MoveAction__8daB_GG_cFv */ void daB_GG_c::G_MoveAction() { - // NONMATCHING -} + CutChk(); -/* ############################################################################################## */ -/* 805ED338-805ED33C 0002D8 0004+00 0/2 0/0 0/0 .rodata @7347 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7347 = 1.5f; -COMPILER_STRIP_GATE(0x805ED338, &lit_7347); -#pragma pop + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz& player_pos = fopAcM_GetPosition(player); + + switch (mMode) { + case 0: + if (mAnm != 0x12) { + SetAnm(18, 0, 5.0f, 1.0f); + field_0x5ba = s_TargetAngle + 0x8000; + current.angle.y = field_0x5ba; + + mCcCyl.OffTgSetBit(); + mCcShieldSph.OffTgSetBit(); + } else if (mAnm == 0x12 && mpModelMorf->checkFrame(5.0f)) { + field_0x5bc = 50.0f; + speedF = 50.0f; + speed.y = 30.0f; + } else if (mAnm == 0x12 && mpModelMorf->checkFrame(13.0f)) { + speedF = 0.0f; + speed.y = 0.0f; + field_0x5bc = 0.0f; + + mSound.startCreatureSound(Z2SE_EN_GG_FOOTNOTE, 0, -1); + } else if (mAnm == 0x12 && mpModelMorf->isStop()) { + SpeedClear(); + if (current.pos.y < (field_0x648 - 10.0f)) { + mCcCyl.OnTgSetBit(); + mCcShieldSph.OnTgSetBit(); + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + + SetAction(ACTION_GROUND, SUBACT_MOVE, 3); + FallChk(); + } else if (current.pos.y < (field_0x648 - 10.0f) && mAcch.ChkGroundHit() && mType == TYPE_L7_MBOSS) { + mCcCyl.OnTgSetBit(); + mCcShieldSph.OnTgSetBit(); + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + + mMode = 4; + } else if (mTimers[2] == 0 && field_0x5b0 != 0) { + SetAction(ACTION_F_A, SUBACT_WAIT, 0); + } else if (mTimers[2] == 0) { + mCcCyl.OnTgSetBit(); + mCcShieldSph.OnTgSetBit(); + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + + mMode = 4; + } else { + mCcCyl.OnTgSetBit(); + mCcShieldSph.OnTgSetBit(); + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + + SetAction(ACTION_GROUND, SUBACT_MOVE, 2); + } + } else { + FallChk(); + } + break; + case 1: + if (mAnm != 0x1A) { + SetAnm(0x1A, 2, 5.0f, 1.0f); + int sp1C = cM_rndF(100.0f); + field_0x5bc = 5.0f; + } + + if (mTimers[0] == 0 && mpModelMorf->checkFrame(0.0f)) { + mMode = 3; + } + + if (mpModelMorf->getPlaySpeed() > 0.0f) { + field_0x5ba = s_TargetAngle + 0x3000; + } else { + field_0x5ba = s_TargetAngle - 0x3000; + } + + if (mpModelMorf->checkFrame(13.0f) || mpModelMorf->checkFrame(1.0f)) { + speedF = 0.0f; + field_0x5bc = 0.0f; + } else { + field_0x5bc = 5.0f; + } + + current.angle.y = field_0x5ba; + FookChk(); + + if (s_dis < 300.0f && (s_TargetAngle - shape_angle.y) < 0x2000 && (s_TargetAngle - shape_angle.y) > -0x2000) { + SetAction(ACTION_GROUND, SUBACT_ATTACK, 0); + speedF = 0.0f; + field_0x5bc = 0.0f; + } + + FallChk(); + break; + case 2: + if (mAnm != 0x1E) { + SetAnm(30, 2, 5.0f, 1.0f); + mTimers[0] = 50.0f + cM_rndF(50.0f); + int sp1C = cM_rndF(100.0f); + field_0x5bc = 10.0f; + current.angle.y = s_TargetAngle; + } + + field_0x5ba = s_TargetAngle; + + if (mTimers[0] == 0 && mAnm == 0x1E && s_dis < 400.0f) { + mMode = 3; + } + + FookChk(); + + if (s_dis < 300.0f && (s_TargetAngle - shape_angle.y) < 0x2000 && (s_TargetAngle - shape_angle.y) > -0x2000) { + SetAction(ACTION_GROUND, SUBACT_ATTACK, 0); + } + + FallChk(); + break; + case 3: + if (mAnm != 0x1D) { + SetAnm(29, 2, 5.0f, 1.0f); + mTimers[0] = 10.0f + cM_rndF(10.0f); + speedF = 0.0f; + field_0x5bc = 0.0f; + current.angle.y = 0; + } + + if (mTimers[0] == 0) { + mMode = 1; + if (s_dis < 500.0f) { + mTimers[0] = 100.0f + cM_rndF(100.0f); + + int rnd = cM_rndF(100.0f); + if (rnd > 50) { + SetAnm(0x1A, 2, 5.0f, 1.0f); + } else { + SetAnm(0x1A, 2, 5.0f, -1.0f); + } + } else { + field_0x5bc = 4.0f; + mMode = 2; + } + } + + FookChk(); + FallChk(); + break; + case 4: + eyePos = current.pos; + eyePos.y += 300.0f; + + attention_info.position = eyePos; + attention_info.position.y += 50.0f; + + if (mAnm != 0x1B) { + SetAnm(27, 0, 5.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_GG_V_TAKE_OFF, 0, -1); + + mCcCyl.OffTgSetBit(); + mCcShieldSph.OffTgSetBit(); + mCcHookCyl.OffTgSetBit(); + + SpeedClear(); + gravity = -2.0f; + + if (field_0x5ce != 0xFF && !dComIfGs_isSwitch(142, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(142, fopAcM_GetRoomNo(this)); + } + + if (daPy_getPlayerActorClass()->checkWolfLock(this)) { + daPy_getPlayerActorClass()->cancelWolfLock(this); + } + } else { + if (mpModelMorf->checkFrame(18.0f)) { + speed.y = 70.0f; + field_0x5c0 = 0.0f; + gravity = -4.2f; + } else if (mpModelMorf->isStop()) { + SetAction(ACTION_FLY, SUBACT_MOVE, 0); + mTimers[0] = 0; + mTimers[1] = 0; + gravity = 0.0f; + + fopAcM_OffStatus(this, 0x200000); + fopAcM_OnStatus(this, 0x80000); + + SetAnm(14, 2, 5.0f, 1.0f); + + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + field_0x644 = 1.0f; + + for (int i = 0; i < 3; i++) { + mCcSph[i].SetAtSpl((dCcG_At_Spl) 7); + } + + mCcCyl.OnTgSetBit(); + mCcShieldSph.OnTgSetBit(); + } + } + break; + case 5: + if (!daPy_getPlayerActorClass()->checkHookshotShootReturnMode()) { + mMode = 3; + } + break; + } +} /* 805E6AB0-805E6E30 008790 0380+00 2/2 0/0 0/0 .text FallChk__8daB_GG_cFv */ void daB_GG_c::FallChk() { - // NONMATCHING + if (current.pos.y < (field_0x648 - 10.0f) && field_0x5b6 != 0) { + if (!mAcch.ChkGroundHit()) { + SetAction(ACTION_FLY, SUBACT_MOVE, 0); + fopAcM_OffStatus(this, 0x200000); + fopAcM_OnStatus(this, 0x80000); + + SetAnm(14, 2, 5.0f + BREG_F(12), 1.0f); + + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + + for (int i = 0; i < 3; i++) { + mCcSph[i].SetAtSpl((dCcG_At_Spl) 7); + } + + speed.y = 0.0f; + field_0x5c0 = 10.0f + BREG_F(11); + field_0x644 = 1.5f; + mModelPlaySpeed = 1.8f; + mTimers[2] = 50; + gravity = 0.0f; + + if (field_0x5ce != 0xFF && !dComIfGs_isSwitch(142, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(142, fopAcM_GetRoomNo(this)); + } + } else { + SetAnm(29, 2, 5.0f, 1.0f); + SetAction(ACTION_F_A, SUBACT_WAIT, 0); + mTimers[0] = 0; + } + + mCcCyl.OnTgSetBit(); + mCcShieldSph.OnTgSetBit(); + } else if (current.pos.y < (field_0x648 - 10.0f) && mAcch.ChkGroundHit()) { + SpeedClear(); + SetAction(ACTION_GROUND, SUBACT_MOVE, 4); + + mCcCyl.OnTgSetBit(); + mCcShieldSph.OnTgSetBit(); + } else if (current.pos.y < (field_0x648 - 10.0f)) { + SpeedClear(); + SetAction(ACTION_FLY, SUBACT_MOVE, 0); + fopAcM_OffStatus(this, 0x200000); + fopAcM_OnStatus(this, 0x80000); + + SetAnm(14, 2, 5.0f + BREG_F(12), 1.0f); + + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + + for (int i = 0; i < 3; i++) { + mCcSph[i].SetAtSpl((dCcG_At_Spl) 7); + } + + speed.y = 0.0f; + field_0x5c0 = 10.0f + BREG_F(11); + field_0x644 = 1.5f; + mModelPlaySpeed = 1.8f; + mTimers[2] = 50; + gravity = 0.0f; + + if (field_0x5ce != 0xFF && !dComIfGs_isSwitch(142, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(142, fopAcM_GetRoomNo(this)); + } + + mCcCyl.OnTgSetBit(); + mCcShieldSph.OnTgSetBit(); + } else if (mTimers[2] == 0 && field_0x5b6 != 0) { + SetAction(ACTION_GROUND, SUBACT_MOVE, 0); + + mCcCyl.OffTgSetBit(); + mCcShieldSph.OffTgSetBit(); + } else if (mTimers[2] == 0) { + SetAction(ACTION_GROUND, SUBACT_MOVE, 0); + + mCcCyl.OffTgSetBit(); + mCcShieldSph.OffTgSetBit(); + } } -/* ############################################################################################## */ -/* 805ED33C-805ED340 0002DC 0004+00 0/1 0/0 0/0 .rodata @7534 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7534 = 37.0f; -COMPILER_STRIP_GATE(0x805ED33C, &lit_7534); -#pragma pop - -/* 805ED340-805ED344 0002E0 0004+00 0/1 0/0 0/0 .rodata @7535 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7535 = 11.0f; -COMPILER_STRIP_GATE(0x805ED340, &lit_7535); -#pragma pop - /* 805E6E30-805E73A8 008B10 0578+00 1/1 0/0 0/0 .text G_AttackAction__8daB_GG_cFv */ void daB_GG_c::G_AttackAction() { - // NONMATCHING + switch (mMode) { + case 0: + SpeedClear(); + + int rnd = cM_rndF(100.0f); + if (rnd > 70) { + SetAnm(15, 0, 5.0f, 1.0f); + + for (int i = 0; i < 3; i++) { + mCcSph[i].SetAtAtp(2); + } + } else if (rnd > 30) { + SetAnm(16, 0, 5.0f, 1.0f); + + for (int i = 0; i < 3; i++) { + mCcSph[i].SetAtAtp(2); + } + } else { + SetAnm(17, 0, 1.0f, 1.0f); + + for (int i = 0; i < 3; i++) { + mCcSph[i].OnAtSetBit(); + mCcSph[i].SetAtSpl((dCcG_At_Spl) 0xA); + + if (mType == TYPE_L7_MBOSS) { + mCcSph[i].SetAtAtp(2); + } else { + mCcSph[i].SetAtAtp(1); + } + } + } + + mMode++; + break; + case 1: + if (mpModelMorf->checkFrame(2.0f) && mAnm == 0x11) { + for (int i = 0; i < 3; i++) { + mCcSph[i].OnAtSetBit(); + mCcSph[i].SetAtSpl((dCcG_At_Spl) 0xA); + } + } + + if (mpModelMorf->checkFrame(20.0f) && mAnm != 0x11) { + for (int i = 0; i < 3; i++) { + mCcSph[i].OnAtSetBit(); + mCcSph[i].SetAtSpl((dCcG_At_Spl) 0); + } + } + + if (mpModelMorf->checkFrame(37.0f) && mAnm == 0xF) { + for (int i = 0; i < 3; i++) { + mCcSph[i].OffAtSetBit(); + } + } else if (mpModelMorf->checkFrame(37.0f) && mAnm == 0x10) { + speedF = 8.0f; + field_0x5bc = 0.0f; + } else if (mpModelMorf->checkFrame(52.0f) && mAnm == 0x10) { + for (int i = 0; i < 3; i++) { + mCcSph[i].OffAtSetBit(); + } + } else if (mpModelMorf->checkFrame(11.0f) && mAnm == 0x11) { + for (int i = 0; i < 3; i++) { + mCcSph[i].OffAtSetBit(); + mCcSph[i].SetAtAtp(2); + } + } + + if (mpModelMorf->isStop()) { + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + + int rnd = cM_rndF(100.0f); + if (rnd < 30 || mAnm == 0x11) { + SetAction(ACTION_GROUND, SUBACT_MOVE, 0); + } else if (mAnm != 0x11 && rnd > 50) { + SetAnm(17, 0, 1.0f, 1.0f); + + for (int i = 0; i < 3; i++) { + if (mType == TYPE_L7_MBOSS) { + mCcSph[i].SetAtAtp(2); + } else { + mCcSph[i].SetAtAtp(1); + } + + mCcSph[i].OnAtSetBit(); + mCcSph[i].SetAtSpl((dCcG_At_Spl) 0xA); + } + } else if (rnd > 30) { + SetAction(ACTION_GROUND, SUBACT_MOVE, 1); + mTimers[1] = 50; + } else { + SetAction(ACTION_GROUND, SUBACT_MOVE, 2); + mTimers[1] = 50; + } + } + + if (mpModelMorf->getFrame() > 37.0f && mAnm == 0x10) { + cLib_addCalcAngleS2(¤t.angle.y, field_0x5ba, 10, 0x1000); + cLib_addCalcAngleS2(&shape_angle.y, s_TargetAngle, 10, 0x1000); + cLib_addCalcAngleS2(&field_0x6be, (s_TargetAngle - shape_angle.y), 10, 0x100); + } + break; + case 10: + SpeedClear(); + SetAnm(17, 0, 1.0f, 1.0f); + field_0x6c4 = 0; + mMode = 1; + + for (int i = 0; i < 3; i++) { + if (mType == TYPE_L7_MBOSS) { + mCcSph[i].SetAtAtp(2); + } else { + mCcSph[i].SetAtAtp(1); + } + + mCcSph[i].OnAtSetBit(); + mCcSph[i].SetAtSpl((dCcG_At_Spl) 0xA); + } + break; + } + + F_AtHit(); } /* 805E73A8-805E7D50 009088 09A8+00 2/1 0/0 0/0 .text G_DamageAction__8daB_GG_cFv */ void daB_GG_c::G_DamageAction() { - // NONMATCHING + cXyz sp38; + if (mAnm != 0x11 && mAnm != 0x18) { + for (int i = 0; i < 3; i++) { + mCcSph[i].OffAtSetBit(); + } + } + + switch (mMode) { + case 0: + CutChk(); + if (mAnm == 0x18 && mpModelMorf->isStop()) { + SetAction(ACTION_GROUND, SUBACT_MOVE, 1); + speedF = 0.0f; + + if (s_dis < 300.0f) { + int rnd = cM_rndF(100.0f); + if (rnd <= 50) { + if (rnd > 20) { + mMode = 0; + } else { + SetAnm(17, 0, 1.0f, 1.0f); + + for (int i = 0; i < 3; i++) { + if (mType == TYPE_L7_MBOSS) { + mCcSph[i].SetAtAtp(2); + } else { + mCcSph[i].SetAtAtp(1); + } + + mCcSph[i].OnAtSetBit(); + mCcSph[i].SetAtSpl((dCcG_At_Spl) 0xA); + field_0x65a = 0; + } + + SetAction(ACTION_GROUND, SUBACT_ATTACK, 1); + HitChk(); + mMode = 1; + } + } + + u32 cut_type = daPy_getPlayerActorClass()->getCutType(); + if (cut_type == daPy_py_c::CUT_TYPE_TURN_LEFT || cut_type == daPy_py_c::CUT_TYPE_TURN_RIGHT || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) { + SetAnm(17, 0, 1.0f, 1.0f); + + for (int i = 0; i < 3; i++) { + if (mType == TYPE_L7_MBOSS) { + mCcSph[i].SetAtAtp(2); + } else { + mCcSph[i].SetAtAtp(1); + } + + mCcSph[i].OnAtSetBit(); + mCcSph[i].SetAtSpl((dCcG_At_Spl) 0xA); + field_0x65a = 0; + } + + SetAction(ACTION_GROUND, SUBACT_ATTACK, 1); + HitChk(); + mMode = 1; + } + } + + field_0x5f0 = 0; + } else { + u32 cut_type = daPy_getPlayerActorClass()->getCutType(); + int rnd = cM_rndF(100.0f); + + if (field_0x5f0 > 1) { + SetAnm(17, 0, 1.0f, 1.0f); + for (int i = 0; i < 3; i++) { + if (mType == TYPE_L7_MBOSS) { + mCcSph[i].SetAtAtp(2); + } else { + mCcSph[i].SetAtAtp(1); + } + + mCcSph[i].OnAtSetBit(); + mCcSph[i].SetAtSpl((dCcG_At_Spl) 0xA); + field_0x65a = 0; + } + + SetAction(ACTION_GROUND, SUBACT_ATTACK, 1); + mCcCyl.OffTgShield(); + mCcShieldSph.OffTgShield(); + + mMode = 1; + field_0x5f0 = 0; + speedF = 0.0f; + } else if (cut_type != 0) { + if (rnd < (10.0f + nREG_F(0)) && mpModelMorf->getFrame() > (5.0f + nREG_F(6))) { + SetAnm(17, 0, 1.0f, 1.0f); + + for (int i = 0; i < 3; i++) { + if (mType == TYPE_L7_MBOSS) { + mCcSph[i].SetAtAtp(2); + } else { + mCcSph[i].SetAtAtp(1); + } + + mCcSph[i].OnAtSetBit(); + mCcSph[i].SetAtSpl((dCcG_At_Spl) 0xA); + field_0x65a = 0; + field_0x5f0 = 0; + } + + SetAction(ACTION_GROUND, SUBACT_ATTACK, 1); + mCcCyl.OffTgShield(); + mCcShieldSph.OffTgShield(); + + mMode = 1; + speedF = 0.0f; + } + } + } + break; + case 1: + if (mAnm != 0x18) { + SetAnm(24, 0, 1.0f, 1.0f); + speedF = 30.0f; + field_0x5bc = 0.0f; + current.angle.y = s_TargetAngle + 0x8000; + } else if (mAnm == 0x18 && mpModelMorf->isStop()) { + int sp30 = cM_rndF(100.0f); + SetAction(ACTION_GROUND, SUBACT_MOVE, 1); + speedF = 0.0f; + } + + s_TargetAngle += 0x4000; + break; + case 2: + cXyz* tg_hit_pos = mCcCyl.GetTgHitPosP(); + s16 spA = cLib_targetAngleY(¤t.pos, tg_hit_pos); + if ((spA - shape_angle.y) > 0) { + if (mAnm != 0x14) { + SetAnm(20, 0, 5.0f, 1.0f); + } else { + SetAnm(19, 0, 5.0f, 1.0f); + } + } else if (mAnm != 0x13) { + SetAnm(19, 0, 5.0f, 1.0f); + } else { + SetAnm(20, 0, 5.0f, 1.0f); + } + + SetAction(ACTION_GROUND, SUBACT_DAMAGE, 3); + + if (health < (s16)(field_0x560 * l_HIO.field_0x18) && field_0x5b0 == 0 && mType == TYPE_L7_MBOSS) { + mpModelMorf->setPlaySpeed(1.0f); + SetAction(ACTION_DEMO, 1, 0); + mCamMode = 0; + attention_info.flags = 0; + } + + field_0x5bc = 0.0f; + speedF = -8.0f + yREG_F(0); + current.angle.y = s_TargetAngle; + shape_angle.y = current.angle.y; + field_0x5ba = current.angle.y; + + if (health <= 0) { + Z2GetAudioMgr()->subBgmStop(); + SetAction(ACTION_GROUND, SUBACT_DEATH, 0); + attention_info.flags = 0; + + if (mType == TYPE_L7_MBOSS) { + SetAnm(0x15, 0, 5.0f, 1.0f); + } else { + SetAnm(31, 0, 5.0f, 1.0f); + + mCcCyl.OffTgSetBit(); + mCcShieldSph.OffTgSetBit(); + mCcHookCyl.OffTgSetBit(); + } + + mCamMode = 0; + } + break; + case 3: + int cut_count = daPy_getPlayerActorClass()->getCutCount(); + u32 cut_type = daPy_getPlayerActorClass()->getCutType(); + + if ((cut_type == daPy_py_c::CUT_TYPE_TURN_LEFT || cut_type == daPy_py_c::CUT_TYPE_TURN_RIGHT || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) && field_0x6bc > 0) { + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + mCcShieldSph.OnTgSetBit(); + } else if (field_0x5e0 < 4) { + mCcCyl.OffTgShield(); + mCcShieldSph.OffTgSetBit(); + } else { + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + mCcShieldSph.OnTgSetBit(); + } + + if (mpModelMorf->isStop()) { + field_0x6bc = 0; + field_0x5e0 = 0; + SetAction(ACTION_GROUND, SUBACT_MOVE, 0); + mTimers[1] = 60; + + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + mCcShieldSph.OnTgSetBit(); + } + + FallChk(); + break; + case 4: + sp38 = eyePos; + sp38.y += 180.0f + NREG_F(7); + setHeadLockPos(&sp38); + + if (mpModelMorf->isStop()) { + field_0x5f0 = 0; + mCcShieldSph.OnTgSetBit(); + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + + if (s_dis < 300.0f) { + SetAction(ACTION_GROUND, SUBACT_ATTACK, 0); + } else { + SetAction(ACTION_GROUND, SUBACT_MOVE, 2); + } + } + break; + case 10: + if (fopAcM_checkHookCarryNow(this) && mAnm != 0x19) { + SetAnm(0x19, 2, 1.0f, 1.0f); + } else if (!fopAcM_checkHookCarryNow(this)) { + SetAction(ACTION_GROUND, SUBACT_ATTACK, 10); + } + break; + } + + FallChk(); } /* 805E7D50-805E7F50 009A30 0200+00 1/1 0/0 0/0 .text G_DeathAction__8daB_GG_cFv */ void daB_GG_c::G_DeathAction() { - // NONMATCHING + cXyz sp8; + daPy_py_c* player = daPy_getPlayerActorClass(); + + switch (mMode) { + case 0: + if (mpModelMorf->isStop()) { + if (mType == TYPE_L7_MBOSS) { + mTimers[1] = 130; + } else { + mTimers[1] = 70; + } + + mMode++; + } + break; + case 1: + if (mTimers[1] == 0) { + fopAcM_createDisappear(this, ¤t.pos, 10, 0, 0x2E); + fopAcM_createDisappear(this, &mSwordPos, 5, 0, 0xFF); + fopAcM_delete(this); + + if (mType == TYPE_L7_MBOSS) { + dComIfGs_onSwitch(field_0x5cf, fopAcM_GetRoomNo(this)); + SetReleaseCam(); + } else if (mType == TYPE_HYRULE_CASTLE) { + cDmr_SkipInfo = 0; + dComIfGs_onSwitch(field_0x5cf, fopAcM_GetRoomNo(this)); + } else if (field_0x5cf != 0xFF && !dComIfGs_isSwitch(field_0x5cf, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(field_0x5cf, fopAcM_GetRoomNo(this)); + } + } + + if (mTimers[1] == (90.0f + aREG_F(1)) && mType == TYPE_L7_MBOSS) { + player->changeOriginalDemo(); + player->changeDemoMode(0x1E, 0, 0, 0); + } + break; + } } -/* ############################################################################################## */ -/* 805ED344-805ED348 0002E4 0004+00 0/0 0/0 0/0 .rodata @7819 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7819 = -8.0f; -COMPILER_STRIP_GATE(0x805ED344, &lit_7819); -#pragma pop - -/* 805ED348-805ED34C 0002E8 0004+00 0/1 0/0 0/0 .rodata @7984 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_7984 = 0x3A83126F; -COMPILER_STRIP_GATE(0x805ED348, &lit_7984); -#pragma pop - /* 805E7F50-805E82A8 009C30 0358+00 1/1 0/0 0/0 .text G_DeathAction1__8daB_GG_cFv */ void daB_GG_c::G_DeathAction1() { - // NONMATCHING + cXyz sp50(0.0f, 0.0f, 0.0f); + cXyz sp44(0.0f, 0.0f, 0.0f); + cXyz sp38(0.0f, 0.0f, 0.0f); + daPy_getPlayerActorClass(); + + cXyz sp2C; + dBgS_LinChk sp70; + + if (mpModelMorf->checkFrame(2.0f)) { + field_0x66d = 1; + mDoMtx_stack_c::copy(mpSwordModel->getBaseTRMtx()); + mDoMtx_stack_c::multVecZero(&mSwordPos); + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &mSwordRot); + + sp50.set(BREG_F(3), BREG_F(4), BREG_F(5)); + cLib_offsetPos(&mSwordPos, &mSwordPos, shape_angle.y, &sp50); + + if (mType != TYPE_HYRULE_CASTLE) { + sp44.set(cM_rndFX(30.0f), 80.0f + aREG_F(8), cM_rndFX(30.0f)); + } else { + sp44.set(0.0f, 5.0f + aREG_F(8), -1.0f); + } + + cLib_offsetPos(&sp50, &sp38, shape_angle.y, &sp44); + field_0x684 = sp50; + } else if (mpModelMorf->getFrame() > 2.0f && 0.0f != field_0x684.z) { + sp2C = mSwordPos; + field_0x684.y += -9.0f + aREG_F(9); + mSwordPos += field_0x684; + + cLib_chaseAngleS(&mSwordRot.z, -0x3500, 0x500); + cLib_chaseAngleS(&mSwordRot.x, 0x4FA0, 0x500); + + sp70.Set(&sp2C, &mSwordPos, NULL); + if (dComIfG_Bgsp().LineCross(&sp70)) { + field_0x5b2++; + + cM3dGPla sp5C; + dComIfG_Bgsp().GetTriPla(sp70, &sp5C); + + field_0x684 = Hanekaeri(this, field_0x684, *sp5C.GetNP(), 0.5f); + if (field_0x5b2 > 2) { + field_0x684.set(0.0f, 0.0f, 0.0f); + } + + mSwordRot.y += 0x500; + mSwordPos = sp70.GetCross(); + mSwordPos.y += 15.0f; + } + } + + field_0x66c = 1; + + if (mpModelMorf->isStop()) { + cLib_chaseF(&field_0x668, 0.4f + aREG_F(5), 0.001f + aREG_F(6)); + } } -/* 805E82A8-805E82F0 009F88 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -// cM3dGPla::~cM3dGPla() { -extern "C" void __dt__8cM3dGPlaFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 805ED34C-805ED350 0002EC 0004+00 0/1 0/0 0/0 .rodata @8242 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8242 = 176.0f; -COMPILER_STRIP_GATE(0x805ED34C, &lit_8242); -#pragma pop - -/* 805ED350-805ED354 0002F0 0004+00 0/2 0/0 0/0 .rodata @8243 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8243 = -7.0f; -COMPILER_STRIP_GATE(0x805ED350, &lit_8243); -#pragma pop - -/* 805ED354-805ED358 0002F4 0004+00 0/2 0/0 0/0 .rodata @8244 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8244 = -3.0f / 5.0f; -COMPILER_STRIP_GATE(0x805ED354, &lit_8244); -#pragma pop - -/* 805ED358-805ED35C 0002F8 0004+00 0/1 0/0 0/0 .rodata @8245 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8245 = 350.0f; -COMPILER_STRIP_GATE(0x805ED358, &lit_8245); -#pragma pop - /* 805E82F0-805E8D48 009FD0 0A58+00 1/1 0/0 0/0 .text DeathCam__8daB_GG_cFv */ void daB_GG_c::DeathCam() { - // NONMATCHING + cXyz sp48(0.0f, 0.0f, 0.0f); + cXyz sp3C(0.0f, 0.0f, 0.0f); + cXyz sp30(0.0f, 0.0f, 0.0f); + + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp24; + dBgS_LinChk sp58; + + if (mpModelMorf->checkFrame(176.0f)) { + field_0x66d = 1; + + mDoMtx_stack_c::copy(mpSwordModel->getBaseTRMtx()); + mDoMtx_stack_c::multVecZero(&mSwordPos); + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &mSwordRot); + + sp48.set(BREG_F(3), BREG_F(4), BREG_F(5)); + cLib_offsetPos(&mSwordPos, &mSwordPos, shape_angle.y, &sp48); + + sp3C.set(-5.0f, -1.0f, 5.0f); + cLib_offsetPos(&sp48, &sp30, shape_angle.y, &sp3C); + + field_0x684 = sp48; + } else if ((mpModelMorf->getFrame() > 176.0f || mpModelMorf->isStop()) && 0.0f != field_0x684.z) { + sp24 = mSwordPos; + field_0x684.y += -7.0f + aREG_F(9); + mSwordPos += field_0x684; + + cLib_chaseAngleS(&mSwordRot.z, -0x3500, 0x500); + cLib_chaseAngleS(&mSwordRot.x, 0x4FA0, 0x500); + + sp58.Set(&sp24, &mSwordPos, NULL); + if (dComIfG_Bgsp().LineCross(&sp58)) { + mSwordPos = sp58.GetCross(); + mSwordPos.y += 10.0f; + + field_0x684.y = field_0x684.y * -(0.6f + BREG_F(7)); + if (field_0x684.y < (8.0f + BREG_F(6))) { + field_0x684.set(0.0f, 0.0f, 0.0f); + } + } + } + + switch (mCamMode) { + case 0: + if (CameraSet()) { + sp48.set(0.0f, 0.0f, -57.0f); + current.pos = sp48; + old.pos = current.pos; + shape_angle.y = cLib_targetAngleY(¤t.pos, &in_pos[mInOutPosIdx]); + current.angle.y = shape_angle.y; + + mCamMode++; + field_0x658 = 0; + field_0x650 = 350.0f + BREG_F(3); + + sp30.set(0.0f, 0.0f, 0.0f); + sp30 = current.pos; + sp30.y += 150.0f + BREG_F(5); + SetStopCam(sp30, 350.0f + BREG_F(3), -100.0f - BREG_F(5), shape_angle.y); + + sp30.set(0.0f, mAcch.GetGroundH(), 0.0f); + sp48.set(0.0f, 0.0f, -300.0f); + cLib_offsetPos(&sp30, &mCamEye, cLib_targetAngleY(&mCamEye, ¤t.pos), &sp48); + + player->setPlayerPosAndAngle(&sp30, shape_angle.y, 0); + player->changeOriginalDemo(); + } + break; + case 1: + sp30.set(0.0f, 0.0f, -57.0f); + field_0x658 -= 0x10; + sp48.set(0.0f, 0.0f, 0.0f); + + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(6)); + mDoMtx_stack_c::multVec(&sp48, &sp48); + field_0x60c = sp48; + field_0x60c.y -= 80.0f + BREG_F(1); + field_0x650 += 0.5f + aREG_F(11); + + if (field_0x60c.y > (150.0f + BREG_F(4))) { + field_0x60c.y = 150.0f + BREG_F(4); + } else if (field_0x60c.y < (100.0f + BREG_F(2))) { + field_0x60c.y = 100.0f + BREG_F(2); + } + + sp48.set(0.0f, field_0x618.y, field_0x650); + cLib_offsetPos(&field_0x618, &sp30, (shape_angle.y + field_0x658), &sp48); + SetMoveCam1(0.1f + BREG_F(15), 50.0f + BREG_F(16)); + + sp30 = current.pos; + sp30.set(0.0f, s_LinkPos->y, 0.0f); + sp48.set(0.0f, 0.0f, -300.0f); + cLib_offsetPos(&sp30, &mCamEye, cLib_targetAngleY(&mCamEye, ¤t.pos), &sp48); + player->setPlayerPosAndAngle(&sp30, shape_angle.y, 0); + + if (mpModelMorf->checkFrame(200.0f)) { + field_0x66c = 1; + field_0x668 = 0.0f; + + sp3C.set(300.0f, 0.0f, 400.0f); + cLib_offsetPos(&sp48, ¤t.pos, cLib_targetAngleY(¤t.pos, &mCamEye), &sp3C); + fopAcM_SetSpeed(player, 0.0f, 0.0f, 0.0f); + + player->setPlayerPosAndAngle(&sp48, cLib_targetAngleY(&sp48, ¤t.pos), 0); + daPy_getPlayerActorClass()->changeDemoMode(0x17, 1, 2, 0); + mCamMode++; + } + break; + case 2: + sp30.set(0.0f, 0.0f, -57.0f); + field_0x658 -= 0x10; + sp48.set(0.0f, 0.0f, 0.0f); + + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(6)); + mDoMtx_stack_c::multVec(&sp48, &sp48); + field_0x60c = sp48; + field_0x60c.y -= 80.0f + BREG_F(1); + field_0x650 += 0.5f + aREG_F(11); + + if (mpModelMorf->getFrame() < 200.0f) { + if (field_0x60c.y > (150.0f + BREG_F(4))) { + field_0x60c.y = 150.0f + BREG_F(4); + } else if (field_0x60c.y < (100.0f + BREG_F(2))) { + field_0x60c.y = 100.0f + BREG_F(2); + } + } else { + field_0x60c.x = current.pos.x; + field_0x60c.z = current.pos.z; + if (field_0x60c.y < (100.0f + BREG_F(2))) { + field_0x60c.y = 100.0f + BREG_F(2); + } + } + + if (mpModelMorf->isStop() && cLib_chaseF(&field_0x668, 0.5f + aREG_F(5), 0.01f + aREG_F(6))) { + cDmr_SkipInfo = 0; + fopAcM_createDisappear(this, ¤t.pos, 10, 0, 0xFF); + fopAcM_createDisappear(this, &mSwordPos, 5, 0, 0xFF); + + current.pos.y += 10000.0f; + old.pos.y = current.pos.y; + mSwordPos.y += 10000.0f; + mTimers[0] = 30; + mCamMode++; + } + + sp48.set(0.0f, field_0x618.y, field_0x650); + cLib_offsetPos(&field_0x618, &sp30, (shape_angle.y + field_0x658), &sp48); + SetMoveCam1(0.1f + BREG_F(15), 50.0f + BREG_F(16)); + break; + case 3: + current.pos.y = 10000.0f; + + if (mTimers[0] == 0) { + sp48 = *s_LinkPos; + sp48.y += 100.0f; + + if (!daPy_py_c::checkNowWolf()) { + SetStopCam(sp48, 200.0f, 0.0f, (s_TargetAngle + 0x7000)); + } else { + SetReleaseCam(); + if (field_0x5cf != 0xFF && !dComIfGs_isSwitch(field_0x5cf, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(field_0x5cf, fopAcM_GetRoomNo(this)); + dComIfGs_onStageMiddleBoss(); + } + fopAcM_delete(this); + } + + player->changeOriginalDemo(); + + if (!daPy_py_c::checkNowWolf()) { + player->changeDemoMode(0x1E, 0, 0, 0); + } + + mTimers[2] = 110; + mTimers[0] = 1000; + } else if (mTimers[2] == 1) { + if (field_0x5cf != 0xFF && !dComIfGs_isSwitch(field_0x5cf, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(field_0x5cf, fopAcM_GetRoomNo(this)); + dComIfGs_onStageMiddleBoss(); + } + + fopAcM_delete(this); + + sp48.set(0.0f, 100.0f, 300.0f); + mCamCenter.set(s_LinkPos->x, 200.0f + s_LinkPos->y, s_LinkPos->z); + cLib_offsetPos(&mCamEye, s_LinkPos, s_TargetAngle, &sp48); + SetReleaseCam(); + } + + SetStopingCam(); + break; + } } /* 805E8D48-805E8EE8 00AA28 01A0+00 1/1 0/0 0/0 .text GroundAction__8daB_GG_cFv */ void daB_GG_c::GroundAction() { - // NONMATCHING + s16 var_r30 = 0; + + switch (mSubAction) { + case SUBACT_MOVE: + G_MoveAction(); + var_r30 = 10; + break; + case SUBACT_ATTACK: + G_AttackAction(); + break; + case SUBACT_DAMAGE: + G_DamageAction(); + var_r30 = 2; + break; + case SUBACT_DEATH: + if (mType == TYPE_L7_MBOSS) { + DeathCam(); + } else { + G_DeathAction1(); + G_DeathAction(); + } + break; + } + + if (mAnm != 0x16) { + offHeadLockFlg(); + } + + cLib_addCalc2(&speedF, field_0x5bc, 0.2f, 100.0f); + cLib_addCalcAngleS2(¤t.angle.y, field_0x5ba, var_r30, 0x1000); + cLib_addCalcAngleS2(&shape_angle.y, s_TargetAngle, var_r30, 0x1000); + cLib_addCalcAngleS2(&field_0x6be, (s_TargetAngle - shape_angle.y), var_r30, 0x100); + cLib_addCalcAngleS2(&mArmL1Rot.x, 0, 0x10, 0x1000); + cLib_addCalcAngleS2(&mArmL1Rot.y, 0, 0x10, 0x1000); + cLib_addCalcAngleS2(&mArmL1Rot.z, 0, 0x10, 0x1000); + cLib_addCalcAngleS2(&mArmL2Rot.x, 0, 0x10, 0x1000); + cLib_addCalcAngleS2(&mArmL2Rot.y, 0, 0x10, 0x1000); + cLib_addCalcAngleS2(&mArmL2Rot.z, 0, 0x10, 0x1000); } /* 805E8EE8-805E92A0 00ABC8 03B8+00 1/1 0/0 0/0 .text StopAction__8daB_GG_cFv */ void daB_GG_c::StopAction() { - // NONMATCHING + if (!other_bg_check(this, daPy_getPlayerActorClass())) { + attention_info.flags = 4; + } else { + attention_info.flags = 0; + } + + cXyz sp20; + switch (mMode) { + case 0: + if (s_LinkPos->y < (500.0f + current.pos.y)) { + mAction = ACTION_GROUND; + mSubAction = SUBACT_MOVE; + mMode = 4; + } + + if (mpModelMorf->isStop() && mAnm != 0x1D) { + SetAnm(29, 2, 5.0f, 1.0f); + } + + FookChk(); + break; + case 5: + if (!dComIfGp_checkPlayerStatus0(0, 0x4000)) { + mMode = 0; + } + break; + } + + if (field_0x5cc > 0) { + mCcCyl.ClrTgHit(); + mCcShieldSph.ClrTgHit(); + mCcHookCyl.ClrTgHit(); + return; + } + + if ((mCcCyl.ChkTgShield() && mCcCyl.ChkTgHit()) || mCcHookCyl.ChkTgHit()) { + mAtInfo.field_0x18 = 0x2A; + + cCcD_Obj* tg_hit_obj; + if (mCcCyl.ChkTgHit()) { + mAtInfo.mpCollider = mCcCyl.GetTgHitObj(); + tg_hit_obj = mCcCyl.GetTgHitObj(); + mCcCyl.GetTgHitPosP(); + } else if (mCcHookCyl.ChkTgHit()) { + mAtInfo.mpCollider = mCcHookCyl.GetTgHitObj(); + tg_hit_obj = mCcHookCyl.GetTgHitObj(); + mCcHookCyl.GetTgHitPosP(); + } + + At_Check(); + + if (tg_hit_obj->ChkAtType(AT_TYPE_HOOKSHOT)) { + mAction = ACTION_GROUND; + mMode = 10; + mSubAction = SUBACT_DAMAGE; + mTimers[2] = l_HIO.takeoff2_time; + gravity = -9.0f; + } else { + sp20.set(0.0f, 0.0f, 0.0f); + + cXyz sp14(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(0xB)); + mDoMtx_stack_c::multVec(&sp14, &sp20); + dComIfGp_setHitMark(2, this, &sp20, NULL, NULL, 0); + SetAnm(24, 0, 1.0f, 1.0f); + } + + mCcHookCyl.ClrTgHit(); + mCcCyl.ClrTgHit(); + mCcShieldSph.ClrTgHit(); + field_0x5cc = 15; + } + + cXyz sp8 = *s_LinkPos - current.pos; + cLib_addCalcAngleS2(&field_0x6c4, -cM_atan2s(sp8.y, JMAFastSqrt((sp8.x * sp8.x) + (sp8.z * sp8.z))), 2, 0x600); + cLib_addCalcAngleS2(&field_0x6be, (s_TargetAngle - shape_angle.y), 2, 0x100); + current.angle.y = s_TargetAngle; + shape_angle.y = s_TargetAngle; } /* 805E92A0-805E9310 00AF80 0070+00 2/2 0/0 0/0 .text HitChk__8daB_GG_cFv */ void daB_GG_c::HitChk() { - // NONMATCHING + if (mAction == ACTION_GROUND && mSubAction == SUBACT_ATTACK) { + if ((s_TargetAngle - shape_angle.y) < 0x3000 && (s_TargetAngle - shape_angle.y) > 0x300) { + mCcShieldSph.OnTgShield(); + mCcCyl.OnTgShield(); + } else { + mCcShieldSph.OffTgShield(); + mCcCyl.OffTgShield(); + } + } } /* 805E9310-805E9418 00AFF0 0108+00 1/1 0/0 0/0 .text Action__8daB_GG_cFv */ void daB_GG_c::Action() { - // NONMATCHING + if (mType != TYPE_L7_MBOSS) { + if (s_dis > 5000.0f) { + mSound.setLinkSearch(0); + } else { + mSound.setLinkSearch(1); + } + } + + HitChk(); + + if (mAction != ACTION_F_A && mAction != ACTION_STOP) { + ObjHit(); + } + + switch (mAction) { + case ACTION_FLY: + FlyAction(); + break; + case ACTION_GROUND: + GroundAction(); + break; + case ACTION_F_A: + F_A_Action(); + break; + case ACTION_DEMO: + DemoAction(); + break; + case ACTION_STOP: + StopAction(); + break; + } + + if (field_0x5b1 == 1) { + HeadAction(); + } } -/* ############################################################################################## */ -/* 805ED35C-805ED360 0002FC 0004+00 0/1 0/0 0/0 .rodata @8519 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8519 = 2.5f; -COMPILER_STRIP_GATE(0x805ED35C, &lit_8519); -#pragma pop - -/* 805ED360-805ED364 000300 0004+00 0/1 0/0 0/0 .rodata @8520 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8520 = -0.5f; -COMPILER_STRIP_GATE(0x805ED360, &lit_8520); -#pragma pop - /* 805E9418-805E9A28 00B0F8 0610+00 1/1 0/0 0/0 .text HeadAction__8daB_GG_cFv */ void daB_GG_c::HeadAction() { - // NONMATCHING + cXyz sp18; + cXyz spC; + dBgS_LinChk sp28; + + switch (field_0x5c4) { + case 0: + field_0x6a8.set(5.0f, 50.0f, 5.0f); + field_0x6b4.x = 0x500; + field_0x6b4.z = 0x500; + field_0x5c4++; + break; + case 1: + spC = mHeadPos; + field_0x6a8.y += -7.0f; + mHeadPos += field_0x6a8; + mHeadRot += field_0x6b4; + + sp28.Set(&spC, &mHeadPos, NULL); + if (dComIfG_Bgsp().LineCross(&sp28)) { + mHeadPos = sp28.GetCross(); + Z2GetAudioMgr()->seStart(0x705B6, &mHeadPos, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + + field_0x6a8.y = field_0x6a8.y * -0.6f; + if (field_0x6a8.y < (2.5f + BREG_F(6))) { + field_0x6a8.set(0.0f, 0.0f, 0.0f); + fopAcM_createDisappear(this, &mHeadPos, 3, 0, 0xFF); + field_0x5b1 = 2; + } + } + + cLib_chaseAngleS(&field_0x6b4.x, 0, 5); + cLib_chaseAngleS(&field_0x6b4.z, 0, 5); + break; + case 2: + if (mHeadPos.absXZ(current.pos) < 100.0f && mTimers[3] == 0) { + sp18.set(0.0f, 20.0f + MREG_F(8), 10.0f + MREG_F(9)); + + mDoMtx_stack_c::YrotS(cLib_targetAngleY(¤t.pos, &mHeadPos)); + mDoMtx_stack_c::multVec(&sp18, &sp18); + field_0x6a8 = sp18; + + mTimers[3] = 50; + field_0x6b4.x = 0x500; + field_0x6b4.z = 0x500; + } else if (mHeadPos.absXZ(*s_LinkPos) < 100.0f && mTimers[3] == 0) { + sp18.set(0.0f, 20.0f + MREG_F(8), 10.0f + MREG_F(9)); + + mDoMtx_stack_c::YrotS(cLib_targetAngleY(s_LinkPos, &mHeadPos)); + mDoMtx_stack_c::multVec(&sp18, &sp18); + field_0x6a8 = sp18; + + mTimers[3] = 50; + field_0x6b4.x = 0x500; + field_0x6b4.z = 0x500; + } + + field_0x6a8.y += -5.0f; + mHeadPos += field_0x6a8; + mHeadRot.x += field_0x6b4.x; + mHeadRot.y += field_0x6b4.y; + mHeadRot.z += field_0x6b4.z; + + if (mHeadPos.y < 15.0f) { + mHeadPos.y = 15.0f; + field_0x6a8.y = field_0x6a8.y * -0.5f; + if (field_0x6a8.y < 4.0f) { + field_0x6a8.set(0.0f, 0.0f, 0.0f); + field_0x6b4.x = 0; + field_0x6b4.z = 0; + mTimers[3] = 0; + } + } + + cLib_chaseAngleS(&field_0x6b4.x, 0, 5); + cLib_chaseAngleS(&field_0x6b4.z, 0, 5); + break; + } } /* 805E9A28-805E9B48 00B708 0120+00 1/1 0/0 0/0 .text SetHeadAngle__8daB_GG_cFv */ void daB_GG_c::SetHeadAngle() { - // NONMATCHING -} + cXyz sp20; + cXyz sp14(0.0f, 0.0f, 0.0f); -/* ############################################################################################## */ -/* 805ED364-805ED368 000304 0004+00 0/2 0/0 0/0 .rodata @8732 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8732 = 7.0f; -COMPILER_STRIP_GATE(0x805ED364, &lit_8732); -#pragma pop + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(5)); + mDoMtx_stack_c::multVec(&sp14, &sp14); + sp20 = sp14 - field_0x65c; + + s16 temp_r30 = -cM_atan2s(sp20.y, JMAFastSqrt((sp20.x * sp20.x) + (sp20.z * sp20.z))); + s16 var_r29 = cM_atan2s(sp20.x, sp20.z); + if (mAction != ACTION_GROUND) { + var_r29 = 0x3000; + } + + cLib_addCalcAngleS2(&field_0x6d4, temp_r30, 2, 0x1000); + cLib_addCalcAngleS2(&field_0x6d6, temp_r30, 2, 0x1000); + field_0x65c = sp14; +} /* 805E9B48-805EA344 00B828 07FC+00 2/1 0/0 0/0 .text SoundChk__8daB_GG_cFv */ void daB_GG_c::SoundChk() { - // NONMATCHING + switch (mAnm) { + case 4: + if (mpModelMorf->checkFrame(0.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_WING, 0, -1); + mSound.startCreatureVoice(Z2SE_EN_GG_V_ATTACK, -1); + } else if (mpModelMorf->checkFrame(7.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_WING, 0, -1); + } + break; + case 6: + if (mpModelMorf->checkFrame(3.0f) || mpModelMorf->checkFrame(16.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_WING, 0, -1); + } else if (mpModelMorf->checkFrame(0.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_ATTACK, 0, -1); + } + break; + case 9: + if (mpModelMorf->checkFrame(6.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_WING, 0, -1); + } + break; + case 10: + if (mpModelMorf->checkFrame(27.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_WING, 0, -1); + } + break; + case 11: + if (mpModelMorf->checkFrame(5.0f) || mpModelMorf->checkFrame(13.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_WING, 0, -1); + } + break; + case 13: + if (mpModelMorf->checkFrame(0.0f)) { + mSound.startCreatureVoice(Z2SE_EN_GG_V_SHOUT, -1); + } + break; + case 14: + if (mpModelMorf->checkFrame(10.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_WING, 0, -1); + } + break; + case 15: + if (mpModelMorf->checkFrame(0.0f)) { + mSound.startCreatureVoice(Z2SE_EN_GG_V_ATTACK_A, -1); + } else if (mpModelMorf->checkFrame(26.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_ATTACK_A, 0, -1); + } + break; + case 16: + if (mpModelMorf->checkFrame(0.0f)) { + mSound.startCreatureVoice(Z2SE_EN_GG_V_ATTACK_B, -1); + } else if (mpModelMorf->checkFrame(29.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_ATTACK_B, 0, -1); + } + break; + case 17: + if (mpModelMorf->checkFrame(0.0f)) { + mSound.startCreatureVoice(Z2SE_EN_GG_V_ATTACK_C, -1); + } else if (mpModelMorf->checkFrame(5.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_ATTACK_C, 0, -1); + } + break; + case 18: + if (mpModelMorf->checkFrame(4.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_WING, 0, -1); + } + break; + case 21: + if (mpModelMorf->checkFrame(0.0f)) { + mSound.startCreatureVoice(Z2SE_EN_GG_V_DIE_BOSS, -1); + } else if (mpModelMorf->checkFrame(190.0f)) { + mSound.startCreatureSound(Z2SE_CM_BODYFALL_S, 0, -1); + } else if (mpModelMorf->checkFrame(226.0f)) { + mSound.startCreatureSound(Z2SE_CM_BODYFALL_M, 0, -1); + } + break; + case 22: + if (mpModelMorf->checkFrame(0.0f)) { + mSound.startCreatureVoice(Z2SE_EN_GG_V_FAINT, -1); + } + break; + case 27: + if (mpModelMorf->checkFrame(23.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_WING, 0, -1); + } + break; + case 29: + if (mpModelMorf->checkFrame(5.0f)) { + mSound.startCreatureVoice(Z2SE_EN_GG_V_BREATH, -1); + } + break; + case 30: + if (mpModelMorf->checkFrame(11.0f) || mpModelMorf->checkFrame(1.0f)) { + mSound.startCreatureSound(Z2SE_EN_GG_FOOTNOTE, 0, -1); + } + break; + case 31: + if (mpModelMorf->checkFrame(0.0f)) { + mSound.startCreatureVoice(Z2SE_EN_GG_V_DIE, -1); + } else if (mpModelMorf->checkFrame(22.0f)) { + mSound.startCreatureSound(Z2SE_CM_BODYFALL_S, 0, -1); + } else if (mpModelMorf->checkFrame(42.0f)) { + mSound.startCreatureSound(Z2SE_CM_BODYFALL_M, 0, -1); + } + break; + } } /* 805EA344-805EA72C 00C024 03E8+00 1/1 0/0 0/0 .text Execute__8daB_GG_cFv */ -void daB_GG_c::Execute() { - // NONMATCHING +int daB_GG_c::Execute() { + daPy_py_c* player = daPy_getPlayerActorClass(); + s_LinkPos = &fopAcM_GetPosition(player); + s_TargetAngle = fopAcM_searchPlayerAngleY(this); + s_dis = current.pos.abs(*s_LinkPos); + + for (int i = 0; i < 4; i++) { + mTimers[i]--; + if (mTimers[i] <= 0) { + mTimers[i] = 0; + } + } + + field_0x5cc--; + if (field_0x5cc <= 0) { + field_0x5cc = 0; + } + + Yazirushi(); + Action(); + SoundChk(); + + if (mType == TYPE_L7_MBOSS && (mAction != ACTION_DEMO || mSubAction != 0)) { + daPy_getPlayerActorClass()->onBossRoomWait(); + } + + cXyz eff_size(1.5f, 1.5f, 1.5f); + setMidnaBindEffect(this, &mSound, ¤t.pos, &eff_size); + SetHeadAngle(); + mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + + fopAcM_posMoveF(this, mCcStts.GetCCMoveP()); + mAcch.CrrPos(dComIfG_Bgsp()); + + setBaseMtx(); + setShieldMtx(); + setSwordMtx(); + + if (mAction == ACTION_GROUND) { + G_setCcCylinder(); + } else { + setCcCylinder(); + } + + if (field_0x65a != 0) { + MoveAt(); + } else { + cXyz spC; + for (int i = 0; i < 3; i++) { + spC.set(0.0f, (10.0f + (100.0f * i)) * l_HIO.base_size, 0.0f); + + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(0x10)); + mDoMtx_stack_c::multVec(&spC, &spC); + + mCcSph[i].SetC(spC); + mCcSph[i].SetR(70.0f * l_HIO.base_size); + dComIfG_Ccsp()->Set(&mCcSph[i]); + } + } + + if (mType == TYPE_L7_MBOSS) { + setHeadMtx(); + } + + return 1; } /* 805EA72C-805EA74C 00C40C 0020+00 1/1 0/0 0/0 .text ObjHit__8daB_GG_cFv */ void daB_GG_c::ObjHit() { - // NONMATCHING + Guard(); } /* 805EA74C-805EA938 00C42C 01EC+00 3/3 0/0 0/0 .text At_Check__8daB_GG_cFv */ void daB_GG_c::At_Check() { - // NONMATCHING + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + mAtInfo.mpActor = at_power_check(&mAtInfo); + if (mAtInfo.mpActor != NULL) { + if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_HOOKSHOT)) { + mAtInfo.mAttackPower = 0; + } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_BOMB)) { + mAtInfo.mAttackPower = 30; + } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_NORMAL_SWORD) && daPy_py_c::checkMasterSwordEquip()) { + mAtInfo.mAttackPower *= 2; + } + + if ((s16)mAtInfo.mAttackPower > 0) { + if (mAtInfo.mAttackPower > 80) { + mAtInfo.mAttackPower = 80; + } + + health -= (s16)mAtInfo.mAttackPower; + } + + int pause_time; + if (mAtInfo.mAttackPower != 0) { + mAtInfo.mHitStatus = 2; + pause_time = 5; + } else { + pause_time = 2; + } + + if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_MIDNA_LOCK)) { + pause_time = 0; + } + + u8 at_se = ((dCcD_GObjInf*)mAtInfo.mpCollider)->GetAtSe(); + + u32 var_r28 = 0x1E; + if (mAtInfo.mHitStatus == 1) { + var_r28 = 0x1F; + } else if (mAtInfo.mHitStatus == 2) { + var_r28 = 0x20; + } + + if (mAtInfo.mpSound != NULL) { + if (mAtInfo.field_0x18 != 0) { + mAtInfo.mpSound->startCollisionSE(dCcD_GObjInf::getHitSeID(at_se, 0), mAtInfo.field_0x18); + } else { + mAtInfo.mpSound->startCollisionSE(dCcD_GObjInf::getHitSeID(at_se, 0), var_r28); + } + } + + if ((mAtInfo.mHitType == HIT_TYPE_LINK_NORMAL_ATTACK || mAtInfo.mpCollider->ChkAtType(AT_TYPE_THROW_OBJ)) && !player->checkCutJumpCancelTurn()) { + if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_THROW_OBJ)) { + pause_time = 4; + } + + dScnPly_c::setPauseTimer(pause_time); + } + } } /* 805EA938-805EA9AC 00C618 0074+00 1/1 0/0 0/0 .text MoveAt__8daB_GG_cFv */ void daB_GG_c::MoveAt() { - // NONMATCHING + cXyz pos(0.0f, 10000.0f, 0.0f); + for (int i = 0; i < 3; i++) { + mCcSph[i].SetC(pos); + } } /* 805EA9AC-805EAAFC 00C68C 0150+00 2/2 0/0 0/0 .text F_AtHit__8daB_GG_cFv */ void daB_GG_c::F_AtHit() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + + field_0x65a--; + if (field_0x65a <= 0) { + field_0x65a = 0; + } + + if (field_0x65a > 0) { + for (int i = 0; i < 3; i++) { + mCcSph[i].ClrAtHit(); + } + return; + } + + for (int i = 0; i < 3; i++) { + if (mCcSph[i].ChkAtHit() && !player->checkPlayerGuard()) { + if (mAction != ACTION_FLY && mAction == ACTION_GROUND && mCcSph[i].GetAtSpl() == 0) { + player->setThrowDamage(s_TargetAngle, 20.0f + nREG_F(4), 15.0f + nREG_F(5), 0, 0, 0); + } + + field_0x65a = 20; + break; + } + } } /* 805EAAFC-805EB028 00C7DC 052C+00 1/1 0/0 0/0 .text ChanceTime__8daB_GG_cFv */ void daB_GG_c::ChanceTime() { - // NONMATCHING + if ((mCcCyl.ChkTgHit() && !mCcCyl.ChkTgShield()) || mCcHookCyl.ChkTgHit()) { + s16 prev_hp = health; + if (mAction == ACTION_FLY && (mMode == 12 || mMode == 13)) { + mAction = ACTION_GROUND; + + if (field_0x5ce != 0xFF && dComIfGs_isSwitch(142, fopAcM_GetRoomNo(this))) { + dComIfGs_offSwitch(142, fopAcM_GetRoomNo(this)); + } + + if (field_0x5b6 != 0) { + mTimers[2] = 0.8f * l_HIO.takeoff2_time; + } else { + mTimers[2] = 0.8f * l_HIO.takeoff_time; + } + } + + mAtInfo.field_0x18 = 0x1E; + + cCcD_Obj* tg_hit_obj; + if (mCcCyl.ChkTgHit()) { + tg_hit_obj = mCcCyl.GetTgHitObj(); + mAtInfo.mpCollider = mCcCyl.GetTgHitObj(); + } else { + tg_hit_obj = mCcHookCyl.GetTgHitObj(); + mAtInfo.mpCollider = mCcHookCyl.GetTgHitObj(); + } + + u8 sp8 = 0; + + if (!tg_hit_obj->ChkAtType(AT_TYPE_SHIELD_ATTACK)) { + At_Check(); + } + + u8 spA = mSubAction; + field_0x5cc = 10; + mSubAction = SUBACT_DAMAGE; + mMode = 2; + + if (tg_hit_obj->ChkAtType(AT_TYPE_SHIELD_ATTACK)) { + if (field_0x5f0 <= 1) { + field_0x5f0++; + SetAnm(0x16, 0, 5.0f, 1.0f); + onHeadLockFlg(); + mMode = 4; + mSubAction = SUBACT_DAMAGE; + + mCcShieldSph.OffTgSetBit(); + mCcCyl.OffTgShield(); + mCcShieldSph.OffTgShield(); + + speedF = 0.0f; + field_0x5bc = 0.0f; + At_Check(); + field_0x5cc = 20; + } else { + mAtInfo.field_0x18 = 0x2A; + field_0x5cc = 15; + mSubAction = SUBACT_DAMAGE; + SetAnm(24, 0, 1.0f, 1.0f); + + mCcShieldSph.OnTgSetBit(); + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + mMode = 0; + + cXyz sp14(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(0xB)); + mDoMtx_stack_c::multVec(&sp14, &sp14); + dComIfGp_setHitMark(2, this, &sp14, NULL, NULL, 0); + + At_Check(); + } + } else if (tg_hit_obj->ChkAtType(AT_TYPE_HOOKSHOT)) { + mMode = 10; + field_0x5f0 = 0; + } else { + field_0x5e0++; + field_0x5f0 = 0; + + if (mCcCyl.ChkTgHit()) { + dComIfGp_setHitMark(1, this, mCcCyl.GetTgHitPosP(), NULL, NULL, 0); + } else { + dComIfGp_setHitMark(1, this, mCcHookCyl.GetTgHitPosP(), NULL, NULL, 0); + } + + mSound.startCreatureVoice(Z2SE_EN_GG_V_DAMAGE, -1); + + u32 cut_type = daPy_getPlayerActorClass()->getCutType(); + if (cut_type == daPy_py_c::CUT_TYPE_TURN_LEFT || cut_type == daPy_py_c::CUT_TYPE_TURN_RIGHT) { + field_0x6bc++; + field_0x5cc = 20; + } + } + + if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_HEAD_JUMP && mType == TYPE_L7_MBOSS) { + if (field_0x5b1 == 0) { + field_0x5b1 = 1; + health = prev_hp; + mSound.startCreatureSound(Z2SE_EN_GG_MET_BREAK, 0, -1); + } + + mDoMtx_stack_c::copy(mpHelmetModel->getBaseTRMtx()); + mDoMtx_stack_c::multVecZero(&mHeadPos); + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &mHeadRot); + + field_0x5c4 = 0; + SetAction(ACTION_GROUND, SUBACT_DAMAGE, 2); + } + + MoveCo(); + mCcCyl.ClrTgHit(); + mCcHookCyl.ClrTgHit(); + mCcShieldSph.OffTgSetBit(); + } } /* 805EB028-805EB090 00CD08 0068+00 2/1 0/0 0/0 .text ArmAngleSet__8daB_GG_cFv */ void daB_GG_c::ArmAngleSet() { - // NONMATCHING + daPy_getPlayerActorClass()->getCutType(); + + switch (daPy_getPlayerActorClass()->getCutType()) { + case daPy_py_c::CUT_TYPE_NM_RIGHT: + case daPy_py_c::CUT_TYPE_FINISH_RIGHT: + case daPy_py_c::CUT_TYPE_MORTAL_DRAW_B: + mArmL2Rot.y = -0x1130; + mArmL1Rot.z = 0x1B58; + return; + case daPy_py_c::CUT_TYPE_NM_LEFT: + case daPy_py_c::CUT_TYPE_FINISH_LEFT: + case daPy_py_c::CUT_TYPE_TURN_LEFT: + mArmL1Rot.x = -0x3000; + return; + case daPy_py_c::CUT_TYPE_HEAD_JUMP: + case daPy_py_c::CUT_TYPE_FINISH_VERTICAL: + case daPy_py_c::CUT_TYPE_JUMP: + mArmL2Rot.x = -0x2328; + mArmL1Rot.y = 0x3BC4; + default: + return; + } } /* 805EB090-805EB5E0 00CD70 0550+00 1/1 0/0 0/0 .text Guard__8daB_GG_cFv */ void daB_GG_c::Guard() { - // NONMATCHING + mCcStts.Move(); + + if (field_0x5cc > 0) { + mCcCyl.ClrTgHit(); + mCcShieldSph.ClrTgHit(); + mCcHookCyl.ClrTgHit(); + return; + } + + if (mCcCyl.ChkTgHit() && !mCcCyl.ChkTgShield()) { + ChanceTime(); + return; + } + + if (mCcShieldSph.ChkTgHit() || (mCcCyl.ChkTgShield() && mCcCyl.ChkTgHit()) || mCcHookCyl.ChkTgHit()) { + current.angle.y = s_TargetAngle; + field_0x5ba = s_TargetAngle; + shape_angle.y = s_TargetAngle; + + u8 spC = mSubAction; + field_0x6bc = 0; + field_0x5e0 = 0; + u8 sp8 = 0; + mAtInfo.field_0x18 = 0x2A; + + cCcD_Obj* tg_hit_obj; + if (mCcCyl.ChkTgHit()) { + mAtInfo.mpCollider = mCcCyl.GetTgHitObj(); + tg_hit_obj = mCcCyl.GetTgHitObj(); + mCcCyl.GetTgHitPosP(); + } else if (mCcHookCyl.ChkTgHit()) { + mAtInfo.mpCollider = mCcHookCyl.GetTgHitObj(); + tg_hit_obj = mCcHookCyl.GetTgHitObj(); + mCcHookCyl.GetTgHitPosP(); + } else { + mAtInfo.mpCollider = mCcShieldSph.GetTgHitObj(); + tg_hit_obj = mCcShieldSph.GetTgHitObj(); + mCcShieldSph.GetTgHitPosP(); + } + + s16 prev_hp = health; + At_Check(); + health = prev_hp; + field_0x5cc = 10; + + if (mSubAction == SUBACT_ATTACK && mAction != ACTION_GROUND) { + if (mMode == 0 || mMode == 10) { + if (tg_hit_obj->ChkAtType(AT_TYPE_HOOKSHOT)) { + mMode = 10; + mSubAction = SUBACT_DAMAGE; + } else { + cXyz sp34(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(0xB)); + mDoMtx_stack_c::multVec(&sp34, &sp34); + dComIfGp_setHitMark(2, this, &sp34, NULL, NULL, 0); + } + } + } else { + cXyz sp28(0.0f, 120.0f, 100.0f); + cXyz sp1C(0.0f, 0.0f, 0.0f); + cLib_offsetPos(&sp1C, ¤t.pos, shape_angle.y, &sp28); + + cXyz sp10(1.0f, 1.0f, 1.0f); + + if (mAnm == 0x18) { + mAnm = 0x17; + } + + if (tg_hit_obj->ChkAtType(AT_TYPE_HOOKSHOT)) { + mMode = 10; + mSubAction = SUBACT_DAMAGE; + field_0x5f0 = 0; + } else if (tg_hit_obj->ChkAtType(AT_TYPE_8000)) { + mMode = 1; + mSubAction = SUBACT_DAMAGE; + dComIfGp_setHitMark(2, this, &sp1C, NULL, NULL, 0); + field_0x5f0 = 0; + } else if (tg_hit_obj->ChkAtType(AT_TYPE_SHIELD_ATTACK) && field_0x5f0 <= 1) { + field_0x5f0++; + cM_rndF(100.0f); + SetAnm(0x16, 0, 5.0f, 1.0f); + onHeadLockFlg(); + + mMode = 4; + mSubAction = SUBACT_DAMAGE; + + mCcShieldSph.OffTgSetBit(); + mCcCyl.OffTgShield(); + mCcShieldSph.OffTgShield(); + + speedF = nREG_F(7); + field_0x5bc = 0.0f; + } else if (mSubAction != SUBACT_ATTACK) { + mSubAction = SUBACT_DAMAGE; + mMode = 0; + + if (mAction == ACTION_GROUND) { + SetAnm(24, 0, 1.0f, 1.0f); + ArmAngleSet(); + } + + if (tg_hit_obj->ChkAtType(AT_TYPE_NORMAL_SWORD)) { + speedF = -10.0f + nREG_F(7); + field_0x5bc = 0.0f; + } else { + speedF = 0.0f; + field_0x5bc = 0.0f; + } + + dComIfGp_setHitMark(2, this, &sp1C, NULL, NULL, 0); + field_0x5f0 = 0; + } else { + At_Check(); + mCcShieldSph.OnTgShield(); + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + + field_0x5f0 = 0; + sp1C.set(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(0xB)); + mDoMtx_stack_c::multVec(&sp1C, &sp1C); + dComIfGp_setHitMark(2, this, &sp1C, NULL, NULL, 0); + } + } + + mCcHookCyl.ClrTgHit(); + mCcCyl.ClrTgHit(); + mCcShieldSph.ClrTgHit(); + return; + } + + ChanceTime(); } -/* ############################################################################################## */ -/* 805ED368-805ED36C 000308 0004+00 0/0 0/0 0/0 .rodata @8733 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8733 = 16.0f; -COMPILER_STRIP_GATE(0x805ED368, &lit_8733); -#pragma pop - -/* 805ED36C-805ED370 00030C 0004+00 0/0 0/0 0/0 .rodata @8734 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8734 = 6.0f; -COMPILER_STRIP_GATE(0x805ED36C, &lit_8734); -#pragma pop - -/* 805ED370-805ED374 000310 0004+00 0/0 0/0 0/0 .rodata @8735 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8735 = 27.0f; -COMPILER_STRIP_GATE(0x805ED370, &lit_8735); -#pragma pop - -/* 805ED374-805ED378 000314 0004+00 0/0 0/0 0/0 .rodata @8736 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8736 = 26.0f; -COMPILER_STRIP_GATE(0x805ED374, &lit_8736); -#pragma pop - -/* 805ED378-805ED37C 000318 0004+00 0/0 0/0 0/0 .rodata @8737 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8737 = 29.0f; -COMPILER_STRIP_GATE(0x805ED378, &lit_8737); -#pragma pop - -/* 805ED37C-805ED380 00031C 0004+00 0/0 0/0 0/0 .rodata @8738 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8738 = 190.0f; -COMPILER_STRIP_GATE(0x805ED37C, &lit_8738); -#pragma pop - -/* 805ED380-805ED384 000320 0004+00 0/0 0/0 0/0 .rodata @8739 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8739 = 226.0f; -COMPILER_STRIP_GATE(0x805ED380, &lit_8739); -#pragma pop - -/* 805ED384-805ED388 000324 0004+00 0/0 0/0 0/0 .rodata @8740 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8740 = 23.0f; -COMPILER_STRIP_GATE(0x805ED384, &lit_8740); -#pragma pop - -/* 805ED388-805ED38C 000328 0004+00 0/0 0/0 0/0 .rodata @8741 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8741 = 22.0f; -COMPILER_STRIP_GATE(0x805ED388, &lit_8741); -#pragma pop - -/* 805ED38C-805ED390 00032C 0004+00 0/0 0/0 0/0 .rodata @8742 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8742 = 42.0f; -COMPILER_STRIP_GATE(0x805ED38C, &lit_8742); -#pragma pop - -/* 805ED390-805ED394 000330 0004+00 0/1 0/0 0/0 .rodata @9281 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9281 = -255.0f; -COMPILER_STRIP_GATE(0x805ED390, &lit_9281); -#pragma pop - -/* 805ED394-805ED398 000334 0004+00 0/1 0/0 0/0 .rodata @9282 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9282 = 32.0f; -COMPILER_STRIP_GATE(0x805ED394, &lit_9282); -#pragma pop - /* 805EB5E0-805EB8A8 00D2C0 02C8+00 1/1 0/0 0/0 .text Draw__8daB_GG_cFv */ -void daB_GG_c::Draw() { - // NONMATCHING +int daB_GG_c::Draw() { + J3DModel* model = mpModelMorf->getModel(); + + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpShieldModel, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpSwordModel, &tevStr); + + if (mType == TYPE_L7_MBOSS && field_0x5b1 != 2) { + g_env_light.setLightTevColorType_MAJI(mpHelmetModel, &tevStr); + } + + if (field_0x66c != 0) { + J3DMaterial* material = model->getModelData()->getMaterialNodePointer(0); + material->getTevColor(0)->r = -255.0f * field_0x668; + material->getTevColor(0)->g = -255.0f * field_0x668; + material->getTevColor(0)->b = -255.0f * field_0x668; + } + + mpModelMorf->entryDL(); + mDoExt_modelUpdateDL(mpShieldModel); + mDoExt_modelUpdateDL(mpSwordModel); + + if (mType == TYPE_L7_MBOSS && field_0x5b1 != 2) { + mDoExt_modelUpdateDL(mpHelmetModel); + } + + cXyz sp8; + sp8.set(current.pos.x, 100.0f + current.pos.y, current.pos.z); + + mShadowId = dComIfGd_setShadow(mShadowId, 1, model, &sp8, 3000.0f, 0.0f, current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + dComIfGd_addRealShadow(mShadowId, mpShieldModel); + dComIfGd_addRealShadow(mShadowId, mpSwordModel); + + if (mType == TYPE_L7_MBOSS && field_0x5b1 != 2) { + dComIfGd_addRealShadow(mShadowId, mpHelmetModel); + } + + if (mAnm == 0xD && mpModelMorf->getFrame() > 32.0f) { + cLib_chaseF(&field_0x5ac, 0.0f, 0.5f); + mDoGph_gInf_c::setBlureRate(field_0x5ac); + mDoGph_gInf_c::onBlure(); + } else { + mDoGph_gInf_c::offBlure(); + } + + return 1; } /* 805EB8A8-805EB910 00D588 0068+00 1/1 0/0 0/0 .text Delete__8daB_GG_cFv */ -void daB_GG_c::Delete() { - // NONMATCHING +int daB_GG_c::Delete() { + dComIfG_resDelete(&mPhase, "B_gg"); + + if (mHIOInit) { + l_HIOInit = 0; + mDoHIO_DELETE_CHILD(l_HIO.id); + } + + if (heap != NULL) { + mpModelMorf->stopZelAnime(); + } + + return 1; } /* 805EB910-805EB980 00D5F0 0070+00 2/2 0/0 0/0 .text setBaseMtx__8daB_GG_cFv */ void daB_GG_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::scaleM(l_HIO.base_size, l_HIO.base_size, l_HIO.base_size); + + mpModelMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + mpModelMorf->modelCalc(); } /* 805EB980-805EB9DC 00D660 005C+00 1/1 0/0 0/0 .text setShieldMtx__8daB_GG_cFv */ void daB_GG_c::setShieldMtx() { - // NONMATCHING + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(0xB)); + mpShieldModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 805EB9DC-805EBA4C 00D6BC 0070+00 1/1 0/0 0/0 .text setSwordMtx__8daB_GG_cFv */ void daB_GG_c::setSwordMtx() { - // NONMATCHING + if (field_0x66d == 0) { + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(0x10)); + mpSwordModel->setBaseTRMtx(mDoMtx_stack_c::get()); + } else { + setSwordMtx1(); + } } /* 805EBA4C-805EBAB8 00D72C 006C+00 1/1 0/0 0/0 .text setSwordMtx1__8daB_GG_cFv */ void daB_GG_c::setSwordMtx1() { - // NONMATCHING + cXyz sp8(-20.0f, 60.0f, 0.0f); + mDoMtx_stack_c::transS(mSwordPos); + mDoMtx_stack_c::ZXYrotM(mSwordRot); + mpSwordModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 805EBAB8-805EBB30 00D798 0078+00 1/1 0/0 0/0 .text setHeadMtx__8daB_GG_cFv */ void daB_GG_c::setHeadMtx() { - // NONMATCHING + if (field_0x5b1 == 0) { + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(5)); + mpHelmetModel->setBaseTRMtx(mDoMtx_stack_c::get()); + } else if (field_0x5b1 == 1) { + setHeadMtx1(); + } } /* 805EBB30-805EBB7C 00D810 004C+00 1/1 0/0 0/0 .text setHeadMtx1__8daB_GG_cFv */ void daB_GG_c::setHeadMtx1() { - // NONMATCHING + mDoMtx_stack_c::transS(mHeadPos); + mDoMtx_stack_c::ZXYrotM(mHeadRot); + mpHelmetModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 805EBB7C-805EBB9C 00D85C 0020+00 1/0 0/0 0/0 .text daB_GG_Draw__FP8daB_GG_c */ -static void daB_GG_Draw(daB_GG_c* param_0) { - // NONMATCHING +static int daB_GG_Draw(daB_GG_c* a_this) { + return a_this->Draw(); } /* 805EBB9C-805EBBBC 00D87C 0020+00 2/1 0/0 0/0 .text daB_GG_Execute__FP8daB_GG_c */ -static void daB_GG_Execute(daB_GG_c* param_0) { - // NONMATCHING +static int daB_GG_Execute(daB_GG_c* a_this) { + return a_this->Execute(); } /* 805EBBBC-805EBBC4 00D89C 0008+00 1/0 0/0 0/0 .text daB_GG_IsDelete__FP8daB_GG_c */ -static bool daB_GG_IsDelete(daB_GG_c* param_0) { - return true; +static int daB_GG_IsDelete(daB_GG_c* a_this) { + return 1; } /* 805EBBC4-805EBBE4 00D8A4 0020+00 1/0 0/0 0/0 .text daB_GG_Delete__FP8daB_GG_c */ -static void daB_GG_Delete(daB_GG_c* param_0) { - // NONMATCHING +static int daB_GG_Delete(daB_GG_c* a_this) { + return a_this->Delete(); } -/* ############################################################################################## */ -/* 805ED398-805ED39C 000338 0004+00 0/1 0/0 0/0 .rodata @9660 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9660 = -700.0f; -COMPILER_STRIP_GATE(0x805ED398, &lit_9660); -#pragma pop - -/* 805ED39C-805ED3A0 00033C 0004+00 0/1 0/0 0/0 .rodata @9661 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9661 = -60535.0f; -COMPILER_STRIP_GATE(0x805ED39C, &lit_9661); -#pragma pop - -/* 805ED3A0-805ED3A4 000340 0004+00 0/1 0/0 0/0 .rodata @9662 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9662 = -1000000000.0f; -COMPILER_STRIP_GATE(0x805ED3A0, &lit_9662); -#pragma pop - -/* 805ED3D4-805ED3D4 000374 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_805ED3E0 = "D_MN07B"; -SECTION_DEAD static char const* const stringBase_805ED3E8 = "B_GG"; -#pragma pop - /* 805EBBE4-805EC424 00D8C4 0840+00 1/1 0/0 0/0 .text Create__8daB_GG_cFv */ -void daB_GG_c::Create() { - // NONMATCHING -} +int daB_GG_c::Create() { + fopAcM_SetupActor(this, daB_GG_c); -/* 805EC424-805EC5F8 00E104 01D4+00 1/1 0/0 0/0 .text __ct__8daB_GG_cFv */ -daB_GG_c::daB_GG_c() { - // NONMATCHING -} + int phase_state = dComIfG_resLoad(&mPhase, "B_gg"); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("B_GG PARAM %x\n", fopAcM_GetParam(this)); + mType = fopAcM_GetParam(this); + field_0x5cf = (fopAcM_GetParam(this) & 0xFF0000) >> 0x10; -/* 805EC5F8-805EC654 00E2D8 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} + if ((mType == TYPE_L7_MBOSS || mType == TYPE_DEFAULT) && dComIfGs_isStageMiddleBoss() && strcmp("D_MN07B", dComIfGp_getStartStageName()) == 0) { + dComIfGs_onSwitch(field_0x5cf, fopAcM_GetRoomNo(this)); + return cPhs_ERROR_e; + } -/* 805EC654-805EC6C4 00E334 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} + if (dComIfGs_isSwitch(field_0x5cf, fopAcM_GetRoomNo(this))) { + return cPhs_ERROR_e; + } -/* 805EC6C4-805EC734 00E3A4 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -// dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" void __dt__12dBgS_AcchCirFv() { - // NONMATCHING -} + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x4A20)) { + return cPhs_ERROR_e; + } -/* 805EC734-805EC77C 00E414 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} + if (!l_HIOInit) { + l_HIOInit = TRUE; + mHIOInit = TRUE; + l_HIO.id = mDoHIO_CREATE_CHILD("ガーゴイル", &l_HIO); + } -/* 805EC77C-805EC848 00E45C 00CC+00 1/1 0/0 0/0 .text __dt__8dCcD_SphFv */ -// dCcD_Sph::~dCcD_Sph() { -extern "C" void __dt__8dCcD_SphFv() { - // NONMATCHING -} + field_0x5ce = 0x7C; + field_0x5d0 = (fopAcM_GetParam(this) & 0xFF000000) >> 0x18; -/* 805EC848-805EC8CC 00E528 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_SphFv */ -// dCcD_Sph::dCcD_Sph() { -extern "C" void __ct__8dCcD_SphFv() { - // NONMATCHING -} + gravity = 0.0f; -/* 805EC8CC-805EC914 00E5AC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} + attention_info.flags = 4; + attention_info.distances[fopAc_attn_BATTLE_e] = 82; -/* 805EC914-805EC95C 00E5F4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING + fopAcM_SetMtx(this, mpModelMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -700.0f, 0.0f, -700.0f); + fopAcM_SetMax(this, 700.0f, 700.0f, 700.0f); + + mAcchCir.SetWall(50.0f, 150.0f); + + if (mType != TYPE_L7_MBOSS && mType != TYPE_DEFAULT) { + mAcch.ClrRoofNone(); + mAcch.SetRoofCrrHeight(200.0f); + } + + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL); + + cXyz sp34(0.0f, 0.0f, -57.0f); + field_0x6bc = 0; + field_0x5e0 = 0; + + if (mType == TYPE_L7_MBOSS || mType == TYPE_DEFAULT) { + if (dComIfGp_getStartStagePoint() == 2 || dComIfGp_getStartStagePoint() == -1) { + cDmr_SkipInfo = 0; + cXyz sp28(0.0f, 0.0f, -300.0f); + + mAction = ACTION_FLY; + mSubAction = SUBACT_WAIT; + mMode = 1; + mCamMode = 0; + + cXyz sp1C(0.0f, 300.0f + TREG_F(0), -500.0f); + cLib_offsetPos(¤t.pos, &sp34, cLib_targetAngleY(&sp28, &sp34), &sp1C); + Z2GetAudioMgr()->subBgmStart(Z2BGM_GG_MBOSS); + old.pos = current.pos; + SetAnm(14, 2, 5.0f, 1.0f); + + mCcCyl.OnTgShield(); + mCcShieldSph.OnTgShield(); + + shape_angle.y = cLib_targetAngleY(¤t.pos, &sp34); + field_0x6be = 0; + + mTimers[0] = 30; + mTimers[1] = 0; + + if (field_0x5ce != 0xFF && !dComIfGs_isSwitch(142, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(142, fopAcM_GetRoomNo(this)); + } + + field_0x560 = l_HIO.max_hp; + health = l_HIO.max_hp; + + setBaseMtx(); + mType = TYPE_L7_MBOSS; + dComIfGs_onSwitch(226, fopAcM_GetRoomNo(this)); + } else { + mAction = ACTION_DEMO; + mSubAction = SUBACT_WAIT; + mMode = 10; + mCamMode = 0; + + current.pos = in_pos[2]; + current.pos.y += 10000.0f; + old.pos = current.pos; + + mType = TYPE_L7_MBOSS; + } + } else if (mType == TYPE_L7_W) { + mType = TYPE_L7_W; + field_0x560 = 0.5f * l_HIO.max_hp; + health = 0.5f * l_HIO.max_hp; + mAction = ACTION_FLY; + mSubAction = SUBACT_WAIT; + mMode = 0; + } else if (mType == TYPE_L7_M) { + mType = TYPE_L7_M; + field_0x560 = 0.5f * l_HIO.max_hp; + health = 0.5f * l_HIO.max_hp; + mAction = ACTION_FLY; + mSubAction = SUBACT_WAIT; + mMode = 0; + } else if (mType == TYPE_HYRULE_CASTLE) { + field_0x560 = 0.5f * l_HIO.max_hp; + health = 0.5f * l_HIO.max_hp; + mAction = ACTION_DEMO; + mSubAction = 2; + mMode = 0; + + current.pos.set(-7853.0f + HREG_F(0), -60535.0f + HREG_F(1), 8619.0f + HREG_F(2)); + old.pos = current.pos; + + if (cDmr_SkipInfo != 0) { + cDmr_SkipInfo = 0; + mAction = ACTION_FLY; + mSubAction = SUBACT_WAIT; + mMode = 0; + current.pos.set(5930.0f, 3157.0f, 6993.0f); + old.pos = current.pos; + } + } else if (mType == TYPE_CAVE) { + mType = TYPE_L7_M; + field_0x560 = 0.5f * l_HIO.max_hp; + health = 0.5f * l_HIO.max_hp; + mAction = ACTION_STOP; + mSubAction = SUBACT_WAIT; + mMode = 0; + + SetAnm(32, 2, 5.0f, 1.0f); + fopAcM_OnStatus(this, 0x200000); + + if (-1000000000.0f != mAcch.GetGroundH()) { + current.pos.y = mAcch.GetGroundH(); + field_0x648 = mAcch.GetGroundH(); + } + } + + mSound.setEnemyName("B_GG"); + mSound.init(¤t.pos, &eyePos, 3, 1); + mAtInfo.mpSound = &mSound; + mAtInfo.mPowerType = 1; + + initCc(); + + fopAcM_setCullSizeFar(this, 3.0f); + + J3DModel* model = mpModelMorf->getModel(); + model->setUserArea((u32)this); + + for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) { + if (i != 0) { + model->getModelData()->getJointNodePointer(i)->setCallBack(JointCallBack); + } + } + + field_0x5ac = 150.0f; + + if (mType == TYPE_L7_MBOSS) { + mpHelmetModel->setUserArea((u32)this); + mpHelmetModel->getModelData()->getJointNodePointer(1)->setCallBack(HeadJointCallBack); + mpHelmetModel->getModelData()->getJointNodePointer(2)->setCallBack(HeadJointCallBack); + } + + daB_GG_Execute(this); + } + + return phase_state; } /* 805EC95C-805EC97C 00E63C 0020+00 1/0 0/0 0/0 .text daB_GG_Create__FP10fopAc_ac_c */ -static void daB_GG_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daB_GG_Create(fopAc_ac_c* i_this) { + return ((daB_GG_c*)i_this)->Create(); } -/* 805EC97C-805EC9C4 00E65C 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} +/* 805ED5E0-805ED600 -00001 0020+00 1/0 0/0 0/0 .data l_daB_GG_Method */ +static actor_method_class l_daB_GG_Method = { + (process_method_func)daB_GG_Create, + (process_method_func)daB_GG_Delete, + (process_method_func)daB_GG_Execute, + (process_method_func)daB_GG_IsDelete, + (process_method_func)daB_GG_Draw, +}; -/* 805EC9C4-805ECA0C 00E6A4 0048+00 2/1 0/0 0/0 .text __dt__12daB_GG_HIO_cFv */ -daB_GG_HIO_c::~daB_GG_HIO_c() { - // NONMATCHING -} +/* 805ED600-805ED630 -00001 0030+00 0/0 0/0 1/0 .data g_profile_B_GG */ +extern actor_process_profile_definition g_profile_B_GG = { + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_B_GG, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daB_GG_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 230, // mPriority + &l_daB_GG_Method, // sub_method + 0x000C0100, // mStatus + fopAc_ENEMY_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; -/* ############################################################################################## */ -/* 805ED3A4-805ED3A8 000344 0004+00 0/1 0/0 0/0 .rodata @9929 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9929 = 1275.0f; -COMPILER_STRIP_GATE(0x805ED3A4, &lit_9929); -#pragma pop - -/* 805ED3A8-805ED3AC 000348 0004+00 0/1 0/0 0/0 .rodata @9930 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9930 = 5714.0f; -COMPILER_STRIP_GATE(0x805ED3A8, &lit_9930); -#pragma pop - -/* 805ED3AC-805ED3B0 00034C 0004+00 0/1 0/0 0/0 .rodata @9931 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9931 = 218.0f; -COMPILER_STRIP_GATE(0x805ED3AC, &lit_9931); -#pragma pop - -/* 805ED3B0-805ED3B4 000350 0004+00 0/1 0/0 0/0 .rodata @9932 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9932 = 950.0f; -COMPILER_STRIP_GATE(0x805ED3B0, &lit_9932); -#pragma pop - -/* 805ED3B4-805ED3B8 000354 0004+00 0/1 0/0 0/0 .rodata @9933 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9933 = -4937.0f; -COMPILER_STRIP_GATE(0x805ED3B4, &lit_9933); -#pragma pop - -/* 805ED3B8-805ED3BC 000358 0004+00 0/1 0/0 0/0 .rodata @9934 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9934 = -5560.0f; -COMPILER_STRIP_GATE(0x805ED3B8, &lit_9934); -#pragma pop - -/* 805ED3BC-805ED3C0 00035C 0004+00 0/1 0/0 0/0 .rodata @9935 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9935 = 222.0f; -COMPILER_STRIP_GATE(0x805ED3BC, &lit_9935); -#pragma pop - -/* 805ED3C0-805ED3C4 000360 0004+00 0/1 0/0 0/0 .rodata @9936 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9936 = 1185.0f; -COMPILER_STRIP_GATE(0x805ED3C0, &lit_9936); -#pragma pop - -/* 805ED3C4-805ED3C8 000364 0004+00 0/1 0/0 0/0 .rodata @9937 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9937 = 152.0f; -COMPILER_STRIP_GATE(0x805ED3C4, &lit_9937); -#pragma pop - -/* 805ED3C8-805ED3CC 000368 0004+00 0/1 0/0 0/0 .rodata @9938 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9938 = -121.0f; -COMPILER_STRIP_GATE(0x805ED3C8, &lit_9938); -#pragma pop - -/* 805ED3CC-805ED3D0 00036C 0004+00 0/1 0/0 0/0 .rodata @9939 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9939 = -1190.0f; -COMPILER_STRIP_GATE(0x805ED3CC, &lit_9939); -#pragma pop - -/* 805ED3D0-805ED3D4 000370 0004+00 0/1 0/0 0/0 .rodata @9940 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_9940 = -1080.0f; -COMPILER_STRIP_GATE(0x805ED3D0, &lit_9940); -#pragma pop - -/* 805ECA0C-805ECBEC 00E6EC 01E0+00 0/0 1/0 0/0 .text __sinit_d_a_b_gg_cpp */ -void __sinit_d_a_b_gg_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x805ECA0C, __sinit_d_a_b_gg_cpp); -#pragma pop - -/* 805ECBEC-805ECBF4 00E8CC 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_805ECBEC() { - // NONMATCHING -} - -/* 805ECBF4-805ECBFC 00E8D4 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_805ECBF4() { - // NONMATCHING -} - -/* 805ED010-805ED04C 00ECF0 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 805ED7E0-805ED7E4 000128 0004+00 0/0 0/0 0/0 .bss - * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ -#pragma push -#pragma force_active on -static u8 data_805ED7E0[4]; -#pragma pop - -/* 805ED7E4-805ED7E8 00012C 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JASAudioThread> */ -#pragma push -#pragma force_active on -static u8 data_805ED7E4[4]; -#pragma pop - -/* 805ED7E8-805ED7EC 000130 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ -#pragma push -#pragma force_active on -static u8 data_805ED7E8[4]; -#pragma pop - -/* 805ED7EC-805ED7F0 000134 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_805ED7EC[4]; -#pragma pop - -/* 805ED7F0-805ED7F4 000138 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> - */ -#pragma push -#pragma force_active on -static u8 data_805ED7F0[4]; -#pragma pop - -/* 805ED7F4-805ED7F8 00013C 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> - */ -#pragma push -#pragma force_active on -static u8 data_805ED7F4[4]; -#pragma pop - -/* 805ED7F8-805ED7FC 000140 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> - */ -#pragma push -#pragma force_active on -static u8 data_805ED7F8[4]; -#pragma pop - -/* 805ED7FC-805ED800 000144 0004+00 0/0 0/0 0/0 .bss - * sInstance__36JASGlobalInstance<15JAISoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_805ED7FC[4]; -#pragma pop - -/* 805ED800-805ED804 000148 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_805ED800[4]; -#pragma pop - -/* 805ED804-805ED808 00014C 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ -#pragma push -#pragma force_active on -static u8 data_805ED804[4]; -#pragma pop - -/* 805ED808-805ED80C 000150 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ -#pragma push -#pragma force_active on -static u8 data_805ED808[4]; -#pragma pop - -/* 805ED80C-805ED810 000154 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_805ED80C[4]; -#pragma pop - -/* 805ED810-805ED814 000158 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ -#pragma push -#pragma force_active on -static u8 data_805ED810[4]; -#pragma pop - -/* 805ED814-805ED818 00015C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> - */ -#pragma push -#pragma force_active on -static u8 data_805ED814[4]; -#pragma pop - -/* 805ED818-805ED81C 000160 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAISoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_805ED818[4]; -#pragma pop - -/* 805ED81C-805ED820 000164 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13JAUSoundTable> */ -#pragma push -#pragma force_active on -static u8 data_805ED81C[4]; -#pragma pop - -/* 805ED820-805ED824 000168 0004+00 0/0 0/0 0/0 .bss - * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ -#pragma push -#pragma force_active on -static u8 data_805ED820[4]; -#pragma pop - -/* 805ED824-805ED828 00016C 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_805ED824[4]; -#pragma pop - -/* 805ED828-805ED82C 000170 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> - */ -#pragma push -#pragma force_active on -static u8 data_805ED828[4]; -#pragma pop - -/* 805ED82C-805ED830 000174 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ -#pragma push -#pragma force_active on -static u8 data_805ED82C[4]; -#pragma pop - -/* 805ED830-805ED834 000178 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> - */ -#pragma push -#pragma force_active on -static u8 data_805ED830[4]; -#pragma pop - -/* 805ED834-805ED838 00017C 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> - */ -#pragma push -#pragma force_active on -static u8 data_805ED834[4]; -#pragma pop - -/* 805ED838-805ED83C 000180 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> - */ -#pragma push -#pragma force_active on -static u8 data_805ED838[4]; -#pragma pop - -/* 805ED83C-805ED840 000184 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> - */ -#pragma push -#pragma force_active on -static u8 data_805ED83C[4]; -#pragma pop - -/* 805ED840-805ED844 000188 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ -#pragma push -#pragma force_active on -static u8 data_805ED840[4]; -#pragma pop - -/* 805ED3D4-805ED3D4 000374 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +AUDIO_INSTANCES