From ddb1f42c699bbe9792066e8936b5f534d240a6ef Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Mon, 15 Apr 2024 20:23:53 -0600 Subject: [PATCH] Misc cleanup (#2134) * Merge remote-tracking branch 'upstream/main' * rm search terms alias (ended up not using it) * typo fix --- Doxyfile | 11 +- .../doxygen-custom/header.html | 8 +- .../doxygen-awesome-css-2.3.2/logo.drawio.svg | 1 + include/rel/d/a/b/d_a_b_gnd/d_a_b_gnd.h | 3 +- include/rel/d/a/b/d_a_b_yo/d_a_b_yo.h | 83 ++ .../d/a/door/d_a_door_boss/d_a_door_boss.h | 3 + include/rel/d/a/e/d_a_e_fz/d_a_e_fz.h | 147 +-- rel/d/a/b/d_a_b_yo/d_a_b_yo.cpp | 459 +------ rel/d/a/e/d_a_e_fz/d_a_e_fz.cpp | 179 ++- rel/d/a/e/d_a_e_fz/d_a_e_fz_nonmatching.cpp | 1169 +++++++++++++++++ 10 files changed, 1493 insertions(+), 570 deletions(-) create mode 100644 docs/doxygen-awesome-css-2.3.2/logo.drawio.svg create mode 100644 rel/d/a/e/d_a_e_fz/d_a_e_fz_nonmatching.cpp diff --git a/Doxyfile b/Doxyfile index 5c96c6b56f3..c90c5343784 100644 --- a/Doxyfile +++ b/Doxyfile @@ -289,7 +289,8 @@ TAB_SIZE = 4 # with the commands \{ and \} for these it is advised to use the version @{ and # @} or use a double escape (\\{ and \\}) -ALIASES = +ALIASES = "" + # Commenting out for now # ALIASES = "meme=\xrefitem memes \"Meme\" \"Meme List\"" @@ -1423,7 +1424,13 @@ HTML_EXTRA_STYLESHEET = docs/doxygen-awesome-css-2.3.2/doxygen-awesome.css \ # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = docs/doxygen-awesome-css-2.3.2/doxygen-awesome-darkmode-toggle.js \ - docs/doxygen-awesome-css-2.3.2/doxygen-awesome-interactive-toc.js + docs/doxygen-awesome-css-2.3.2/doxygen-awesome-interactive-toc.js \ + docs/doxygen-awesome-css-2.3.2/doxygen-awesome-fragment-copy-button.js \ + docs/doxygen-awesome-css-2.3.2/doxygen-awesome-paragraph-link.js \ + docs/doxygen-awesome-css-2.3.2/doxygen-awesome-tabs.js \ + docs/doxygen-awesome-css-2.3.2/logo.drawio.svg \ + docs/doxygen-awesome-css-2.3.2/doxygen-custom/toggle-alternative-theme.js + # The HTML_COLORSTYLE tag can be used to specify if the generated HTML output # should be rendered with a dark or light theme. diff --git a/docs/doxygen-awesome-css-2.3.2/doxygen-custom/header.html b/docs/doxygen-awesome-css-2.3.2/doxygen-custom/header.html index ab2f31ba5be..5357aa0c605 100644 --- a/docs/doxygen-awesome-css-2.3.2/doxygen-custom/header.html +++ b/docs/doxygen-awesome-css-2.3.2/doxygen-custom/header.html @@ -7,16 +7,16 @@ - + - + - - + + $projectname: $title diff --git a/docs/doxygen-awesome-css-2.3.2/logo.drawio.svg b/docs/doxygen-awesome-css-2.3.2/logo.drawio.svg new file mode 100644 index 00000000000..a506ee080c9 --- /dev/null +++ b/docs/doxygen-awesome-css-2.3.2/logo.drawio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/include/rel/d/a/b/d_a_b_gnd/d_a_b_gnd.h b/include/rel/d/a/b/d_a_b_gnd/d_a_b_gnd.h index 696db6c7b7f..c6741ad80cd 100644 --- a/include/rel/d/a/b/d_a_b_gnd/d_a_b_gnd.h +++ b/include/rel/d/a/b/d_a_b_gnd/d_a_b_gnd.h @@ -13,9 +13,10 @@ struct g_himo_s { /** * @ingroup actors-enemies + * @class b_gnd_class * @brief Ganondorf * - * Hyrule Castle dungeon boss. + * @details Hyrule Castle dungeon boss. * */ class b_gnd_class : public fopEn_enemy_c { diff --git a/include/rel/d/a/b/d_a_b_yo/d_a_b_yo.h b/include/rel/d/a/b/d_a_b_yo/d_a_b_yo.h index 2fee889077a..7dbc8b52836 100644 --- a/include/rel/d/a/b/d_a_b_yo/d_a_b_yo.h +++ b/include/rel/d/a/b/d_a_b_yo/d_a_b_yo.h @@ -2,5 +2,88 @@ #define D_A_B_YO_H #include "dolphin/types.h" +#include "f_op/f_op_actor_mng.h" + +/** + * @ingroup actors-enemies + * @class daB_YO_c + * @brief Blizzeta + * + * @details Snowpeak Ruins dungeon boss. + * + */ +class daB_YO_c : public fopEn_enemy_c { +public: + /* 8062F51C */ void draw(); + /* 8062FBEC */ void onIceBreak(u16); + /* 8062FC08 */ void setBck(int, u8, f32, f32); + /* 8062FE0C */ void setActionMode(int, int); + /* 8062FE18 */ void damage_check(); + /* 806300F4 */ void setBreakFrizad(); + /* 8063022C */ void setIcicleOperate(int); + /* 806302B4 */ void setIcicleSubNumber(); + /* 80630330 */ void setWindowBreakEffect(int); + /* 8063040C */ void setHensinEffect(); + /* 806305B8 */ void setLandingEffect(f32); + /* 806306F0 */ void setBreakIceEffect(); + /* 8063089C */ void setWallHitEffect(); + /* 80630A9C */ void setChillEffect(); + /* 80630BF0 */ void setApperEffect(); + /* 80630CA0 */ void setApperEffect2(); + /* 80630DD8 */ void demo_skip(int); + /* 80630E3C */ void DemoSkipCallBack(void*, int); + /* 80630E70 */ void setYoMessage(int); + /* 80630EAC */ void doYoMessage(); + /* 80630F28 */ void executeOpening(); + /* 80632598 */ void reflectFreeMove(); + /* 80632660 */ void calcFreeMove(f32); + /* 8063290C */ void setReflectAngle(); + /* 806329CC */ void executeChase(); + /* 806331CC */ void executeSeriousDemo(); + /* 80633EDC */ void checkIcecleRevival(); + /* 80633F50 */ void createIcecleRevival(u8); + /* 80634040 */ void executeJump(); + /* 80634548 */ void executeAttackIce(); + /* 8063476C */ void executeAttackYose(); + /* 80634CEC */ void checkDamageWithIceBreak(); + /* 80634E04 */ void executeAttackBody(); + /* 806352C8 */ void executeDemoRevival(); + /* 80635798 */ void executeDamage(); + /* 80635ABC */ void executeDeath(); + /* 80636E9C */ void reviseIceCenterPos(cXyz*); + /* 80637048 */ void calcPlayerBufPos(); + /* 806374BC */ void action(); + /* 80637990 */ void mtx_set(); + /* 80637B30 */ void cc_set(); + /* 80637E10 */ void execute(); + /* 80637FC8 */ void _delete(); + /* 806380F8 */ void CreateHeap(); + /* 806388A0 */ void CreateHeap2(); + /* 806389C0 */ void create(); + + u8 getModelNo() { return mModelNo;} + s16 getFrizadRollAngle() { return mRollAngle;} + f32 getModeRarius() { return mModeRarius;} + u8 getFrizadAttack() { return mFrizadAttack;} + +private: + /* 0x5AC */ u8 field_0x5ac[0xF54 - 0x5AC]; + /* 0xF54 */ f32 mModeRarius; + /* 0xF58 */ u8 field_0xf58[0xF5C - 0xF58]; + /* 0xF5C */ s16 mRollAngle; + /* 0xF5E */ u8 field_0xf5e[0xFA8 - 0xF5E]; + /* 0xFA8 */ u8 mModelNo; + /* 0xFA9 */ u8 field_0xfa9[0xFAD - 0xFA9]; + /* 0xFAD */ u8 mFrizadAttack; +}; + +struct daB_YO_HIO_c { + /* 8062F46C */ daB_YO_HIO_c(); + /* 806395E4 */ ~daB_YO_HIO_c(); +}; + +struct daB_YOI_c { + /* 8063A480 */ void setOperate(int); +}; #endif /* D_A_B_YO_H */ diff --git a/include/rel/d/a/door/d_a_door_boss/d_a_door_boss.h b/include/rel/d/a/door/d_a_door_boss/d_a_door_boss.h index 585455c3b60..f4cbfa8939a 100644 --- a/include/rel/d/a/door/d_a_door_boss/d_a_door_boss.h +++ b/include/rel/d/a/door/d_a_door_boss/d_a_door_boss.h @@ -8,8 +8,11 @@ /** * @ingroup actors-doors + * @class daBdoor_c * @brief Boss Door * + * @details The door that leads to the boss room. + * */ class daBdoor_c : public fopAc_ac_c { public: diff --git a/include/rel/d/a/e/d_a_e_fz/d_a_e_fz.h b/include/rel/d/a/e/d_a_e_fz/d_a_e_fz.h index 2b68f413a87..55e72d0e834 100644 --- a/include/rel/d/a/e/d_a_e_fz/d_a_e_fz.h +++ b/include/rel/d/a/e/d_a_e_fz/d_a_e_fz.h @@ -1,6 +1,8 @@ /** * @file d_a_e_fz.h -* This header contains information about the Mini Freezard actor. +* @brief Freezard header file. +* +* @details This header contains information about the Mini Freezard actor. * */ @@ -10,10 +12,11 @@ #include "Z2AudioLib/Z2Creature.h" #include "d/cc/d_cc_uty.h" #include "m_Do/m_Do_hostIO.h" +#include "rel/d/a/b/d_a_b_yo/d_a_b_yo.h" /** - * \enum daE_FZ_Action - * \brief Mini Freezard current action. + * @enum daE_FZ_Action + * @brief Mini Freezard current action. * */ enum daE_FZ_Action { @@ -21,11 +24,13 @@ enum daE_FZ_Action { ACT_MOVE, /**< Mini Freezard is moving to attack. */ ACT_ATTACK, /**< Mini Freezard is attacking. */ ACT_DAMAGE, /**< Mini Freezard is damaged. */ - ACT_ROLLMOVE /**< Mini Freezard is spinning around Blizzeta. This action is only taken when actor is loaded in with parameter 3 (aka, during the Blizzeta fight).*/ + ACT_ROLLMOVE /**< Mini Freezard is spinning around Blizzeta. + This action is only taken when actor is loaded in with parameter 3 + (during the Blizzeta fight).*/ }; /** - * \brief Temporary HIO struct to get a match. Remove later. + * @brief Temporary HIO struct to get a match. Remove later. * */ struct daE_FZ_HIO_c_tmp { @@ -50,8 +55,11 @@ struct daE_FZ_HIO_c_tmp { /** * @ingroup actors-enemies + * @class daE_FZ_c * @brief Mini Freezard * + * @details Miniature Freezard enemy. + * */ class daE_FZ_c : public fopEn_enemy_c { public: @@ -77,65 +85,64 @@ public: /* 806C0CD0 */ s32 create(); private: - /* 0x5AC */ request_of_phase_process_class mPhaseReq; /**< Phase request used when creating the actor. */ - /* 0x5B4 */ J3DModel* mpModel; /**< Pointer to the Mini Freezard's model. */ - /* 0x5B8 */ mDoExt_invisibleModel mInvisibleModel; - /* 0x5C0 */ Z2CreatureEnemy mCreature; /**< Z2CreatureEnemy class used for playing sound effects. */ - /* 0x664 */ cXyz field_0x664; - /* 0x670 */ cXyz field_0x670; - /* 0x67C */ cXyz field_0x67c[4]; - /* 0x6AC */ cXyz field_0x6ac[4]; - /* 0x6DC */ cXyz field_0x6dc; - /* 0x6E8 */ cXyz field_0x6e8; - /* 0x6F4 */ s32 mActionMode; /**< Mini Freezard current action mode. */ - /* 0x6F8 */ s32 mActionPhase; /**< Mini Freezard phase of current action mode. */ - /* 0x6FC */ f32 field_0x6fc; - /* 0x700 */ f32 mRadiusBase; /**< Base radius value used by mSph1 and mSph2. */ - /* 0x704 */ s16 field_0x704; - /* 0x706 */ s16 mAngleFromPlayer; /**< Angle the mini freezard is from the player. */ - /* 0x708 */ s16 mLastWallHitAngle; /**< Angle of the last wall the mini freezard hit. */ - /* 0x70A */ u8 field_0x70A[0x70C - 0x70A]; - /* 0x70C */ s32 field_0x70c; - /* 0x710 */ u8 field_0x710; - /* 0x711 */ u8 field_0x711; - /* 0x712 */ u8 field_0x712; - /* 0x713 */ u8 field_0x713; - /* 0x714 */ u8 field_0x714; - /* 0x715 */ u8 field_0x715; - /* 0x716 */ u8 field_0x716; - /* 0x717 */ u8 field_0x717; - /* 0x718 */ fopAc_ac_c* mpBlizzetaActor; /**< Pointer to Blizzeta's actor (if used). Used to figure out what the mini freezard's angle and positioning should be when Blizzeta is attacking with them.*/ - /* 0x71C */ u32 field_0x71c[3]; - /* 0x728 */ u8 field_0x728[4]; - /* 0x72C */ dBgS_AcchCir mAcchCir; - /* 0x76C */ dBgS_ObjAcch mObjAcch; - /* 0x944 */ dCcD_Stts mStts; - /* 0x980 */ dCcD_Sph mSph1; /**< Mini Freezard's sphere collider used for ? */ - /* 0xAB8 */ dCcD_Sph mSph2; /**< Mini Freezard's sphere collider used for attacking. */ - /* 0xBF0 */ dCcU_AtInfo mAtInfo; - /* 0xC14 */ u8 field_0xc14; - /* 0xC15 */ u8 field_0xc15; - /* 0xC16 */ u8 field_0xc16; - /* 0xC17 */ u8 field_0xc17; - /* 0xC18 */ u8 field_0xc18; - /* 0xC19 */ u8 field_0xc19; - /* 0xC1A */ u8 field_0xc1a; - /* 0xC1B */ u8 field_0xc1b; - /* 0xC1C */ u8 field_0xc1c; - /* 0xC1D */ u8 field_0xc1d; - /* 0xC1E */ u8 field_0xc1e; - /* 0xC1F */ u8 field_0xc1f; - /* 0xC20 */ u8 field_0xc20; - /* 0xC21 */ u8 field_0xc21; - /* 0xC22 */ u8 field_0xc22; - /* 0xC23 */ u8 field_0xc23; + /* 0x5AC */ request_of_phase_process_class mPhaseReq; /**< Phase request used when creating the actor. */ + /* 0x5B4 */ J3DModel* mpModel; /**< Pointer to the Mini Freezard's model. */ + /* 0x5B8 */ mDoExt_invisibleModel mInvisibleModel; /**< Invisible model used for the Mini Freezard. */ + /* 0x5C0 */ Z2CreatureEnemy mCreature; /**< Z2CreatureEnemy class used for playing sound effects. */ + /* 0x664 */ cXyz mUserWork; /**< ??? */ + /* 0x670 */ cXyz field_0x670; /**< Appears unused. Set to current position on actor creation. */ + /* 0x67C */ cXyz field_0x67c[4]; /**< ??? */ + /* 0x6AC */ cXyz field_0x6ac[4]; /**< ??? */ + /* 0x6DC */ cXyz field_0x6dc; /**< ??? */ + /* 0x6E8 */ cXyz field_0x6e8; /**< ??? */ + /* 0x6F4 */ s32 mActionMode; /**< Current action mode. */ + /* 0x6F8 */ s32 mActionPhase; /**< Current phase of @ref mActionMode. */ + /* 0x6FC */ f32 field_0x6fc; /**< ??? */ + /* 0x700 */ f32 mRadiusBase; /**< Base radius value used by @ref mTgCoSph and @ref mAtSph. */ + /* 0x704 */ s16 field_0x704; /**< ??? */ + /* 0x706 */ s16 mAngleFromPlayer; /**< Angle the mini freezard is from the player. */ + /* 0x708 */ s16 mLastWallHitAngle; /**< Angle of the last wall the mini freezard hit. */ + /* 0x70C */ s32 field_0x70c; /**< ??? */ + /* 0x710 */ u8 field_0x710; /**< ??? */ + /* 0x711 */ u8 field_0x711; /**< ??? */ + /* 0x712 */ u8 field_0x712; /**< ??? */ + /* 0x713 */ u8 field_0x713; /**< ??? */ + /* 0x714 */ u8 field_0x714; /**< ??? */ + /* 0x715 */ u8 field_0x715; /**< ??? */ + /* 0x716 */ u8 field_0x716; /**< ??? */ + /* 0x717 */ u8 field_0x717; /**< ??? */ + /* 0x718 */ fopAc_ac_c* mpBlizzetaActor; /**< Pointer to Blizzeta's actor (if used). Used to figure out what the mini freezard's angle and positioning should be when Blizzeta is attacking with them. */ + /* 0x71C */ u32 mParticleSet[3]; /**< Particle set */ + /* 0x728 */ u8 field_0x728[4]; /**< ??? */ + /* 0x72C */ dBgS_AcchCir mAcchCir; /**< Checks for actor collision with background circles? */ + /* 0x76C */ dBgS_ObjAcch mObjAcch; /**< Checks for actor collision with background objects. */ + /* 0x944 */ dCcD_Stts mStts; /**< Track Mini Freezard collider status. */ + /* 0x980 */ dCcD_Sph mTgCoSph; /**< Sphere collider used when Mini Freezard is attacked / pushed. */ + /* 0xAB8 */ dCcD_Sph mAtSph; /**< Sphere collider used when Mini Freezard is attacking. */ + /* 0xBF0 */ dCcU_AtInfo mAtInfo; /**< Tracks information when the Mini Freezard is attacked. */ + /* 0xC14 */ u8 field_0xc14; /**< ??? */ + /* 0xC15 */ u8 field_0xc15; /**< ??? */ + /* 0xC16 */ u8 field_0xc16; /**< ??? */ + /* 0xC17 */ u8 field_0xc17; /**< ??? */ + /* 0xC18 */ u8 field_0xc18; /**< ??? */ + /* 0xC19 */ u8 field_0xc19; /**< ??? */ + /* 0xC1A */ u8 field_0xc1a; /**< ??? */ + /* 0xC1B */ u8 field_0xc1b; /**< ??? */ + /* 0xC1C */ u8 field_0xc1c; /**< ??? */ + /* 0xC1D */ u8 field_0xc1d; /**< ??? */ + /* 0xC1E */ u8 field_0xc1e; /**< ??? */ + /* 0xC1F */ u8 field_0xc1f; /**< ??? */ + /* 0xC20 */ u8 field_0xc20; /**< ??? */ + /* 0xC21 */ u8 field_0xc21; /**< ??? */ + /* 0xC22 */ u8 field_0xc22; /**< ??? */ + /* 0xC23 */ u8 field_0xc23; /**< ??? */ }; STATIC_ASSERT(sizeof(daE_FZ_c) == 0xC24); -class daE_FZ_HIO_c : public mDoHIO_entry_c { +class daE_FZ_HIO_c { public: /* 806BE94C */ daE_FZ_HIO_c(); - /* 806C1440 */ virtual ~daE_FZ_HIO_c(); + /* 806C1440 */ virtual ~daE_FZ_HIO_c() {}; public: /* 0x04 */ s8 field_0x04; @@ -156,26 +163,4 @@ public: /* 0x34 */ f32 field_0x34; }; -/** - * \brief Blizzeta's actor class. Reference in proper header later when it has been reversed. - * - */ -class daB_YO_c : public fopEn_enemy_c { -public: - u8 getModelNo() { return mModelNo;} - s16 getFrizadRollAngle() { return mRollAngle;} - f32 getModeRarius() { return mModeRarius;} - u8 getFrizadAttack() { return mFrizadAttack;} - -private: - /* 0x5AC */ u8 field_0x5ac[0xF54 - 0x5AC]; - /* 0xF54 */ f32 mModeRarius; - /* 0xF58 */ u8 field_0xf58[0xF5C - 0xF58]; - /* 0xF5C */ s16 mRollAngle; - /* 0xF5E */ u8 field_0xf5e[0xFA8 - 0xF5E]; - /* 0xFA8 */ u8 mModelNo; - /* 0xFA9 */ u8 field_0xfa9[0xFAD - 0xFA9]; - /* 0xFAD */ u8 mFrizadAttack; -}; - #endif /* D_A_E_FZ_H */ diff --git a/rel/d/a/b/d_a_b_yo/d_a_b_yo.cpp b/rel/d/a/b/d_a_b_yo/d_a_b_yo.cpp index d4ae7bd87c3..7e043df71b3 100644 --- a/rel/d/a/b/d_a_b_yo/d_a_b_yo.cpp +++ b/rel/d/a/b/d_a_b_yo/d_a_b_yo.cpp @@ -4,399 +4,9 @@ // #include "rel/d/a/b/d_a_b_yo/d_a_b_yo.h" +#include "rel/d/a/obj/d_a_obj_ystone/d_a_obj_ystone.h" #include "dol2asm.h" -// -// Types: -// - -struct request_of_phase_process_class {}; - -struct csXyz { - /* 802673F4 */ csXyz(s16, s16, s16); -}; - -struct Vec {}; - -struct cXyz { - /* 80266B84 */ void operator*(f32) const; - /* 8062FB90 */ ~cXyz(); - /* 80639578 */ cXyz(); - /* 806396CC */ void abs(Vec const&) const; -}; - -struct obj_ystone_class { - /* 80639694 */ void setShapeAngle(csXyz); - /* 806396B0 */ void setCurrentPos(cXyz); -}; - -struct mDoMtx_stack_c { - /* 8000CD64 */ void transS(cXyz const&); - /* 8000CD9C */ void transM(f32, f32, f32); - /* 8000CE38 */ void scaleM(f32, f32, f32); - /* 8000CF44 */ void ZXYrotM(csXyz const&); - - static u8 now[48]; -}; - -struct mDoGph_gInf_c { - /* 80008078 */ void onBlure(); -}; - -struct J3DAnmTextureSRTKey {}; - -struct J3DAnmTexPattern {}; - -struct J3DAnmTevRegKey {}; - -struct J3DMaterialTable { - /* 8032F6F8 */ void removeTexNoAnimator(J3DAnmTexPattern*); - /* 8032F7B4 */ void removeTexMtxAnimator(J3DAnmTextureSRTKey*); - /* 8032F880 */ void removeTevRegAnimator(J3DAnmTevRegKey*); -}; - -struct mDoExt_btpAnm { - /* 8000D54C */ void init(J3DMaterialTable*, J3DAnmTexPattern*, int, int, f32, s16, s16); - /* 8000D5E8 */ void entry(J3DMaterialTable*, s16); -}; - -struct mDoExt_btkAnm { - /* 8000D63C */ void init(J3DMaterialTable*, J3DAnmTextureSRTKey*, int, int, f32, s16, s16); - /* 8000D6D8 */ void entry(J3DMaterialTable*, f32); -}; - -struct mDoExt_brkAnm { - /* 8000D70C */ void init(J3DMaterialTable*, J3DAnmTevRegKey*, int, int, f32, s16, s16); - /* 8000D7A8 */ void entry(J3DMaterialTable*, f32); -}; - -struct mDoExt_baseAnm { - /* 8000D428 */ void play(); -}; - -struct mDoExt_McaMorfCallBack2_c {}; - -struct mDoExt_McaMorfCallBack1_c {}; - -struct J3DAnmTransform {}; - -struct J3DModelData {}; - -struct Z2Creature {}; - -struct mDoExt_McaMorfSO { - /* 800107D0 */ mDoExt_McaMorfSO(J3DModelData*, mDoExt_McaMorfCallBack1_c*, - mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, f32, int, - int, Z2Creature*, u32, u32); - /* 80010E70 */ void setAnm(J3DAnmTransform*, int, f32, f32, f32, f32); - /* 800110B0 */ void play(u32, s8); - /* 800111C0 */ void entryDL(); - /* 800111EC */ void modelCalc(); -}; - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); -}; - -struct J3DModel {}; - -struct daMirror_c { - /* 8003194C */ void entry(J3DModel*); - /* 80031990 */ void remove(); -}; - -struct daE_FZ_c { - /* 806C0B20 */ void demoDelete(); -}; - -struct daB_YO_c { - /* 8062F51C */ void draw(); - /* 8062FBEC */ void onIceBreak(u16); - /* 8062FC08 */ void setBck(int, u8, f32, f32); - /* 8062FE0C */ void setActionMode(int, int); - /* 8062FE18 */ void damage_check(); - /* 806300F4 */ void setBreakFrizad(); - /* 8063022C */ void setIcicleOperate(int); - /* 806302B4 */ void setIcicleSubNumber(); - /* 80630330 */ void setWindowBreakEffect(int); - /* 8063040C */ void setHensinEffect(); - /* 806305B8 */ void setLandingEffect(f32); - /* 806306F0 */ void setBreakIceEffect(); - /* 8063089C */ void setWallHitEffect(); - /* 80630A9C */ void setChillEffect(); - /* 80630BF0 */ void setApperEffect(); - /* 80630CA0 */ void setApperEffect2(); - /* 80630DD8 */ void demo_skip(int); - /* 80630E3C */ void DemoSkipCallBack(void*, int); - /* 80630E70 */ void setYoMessage(int); - /* 80630EAC */ void doYoMessage(); - /* 80630F28 */ void executeOpening(); - /* 80632598 */ void reflectFreeMove(); - /* 80632660 */ void calcFreeMove(f32); - /* 8063290C */ void setReflectAngle(); - /* 806329CC */ void executeChase(); - /* 806331CC */ void executeSeriousDemo(); - /* 80633EDC */ void checkIcecleRevival(); - /* 80633F50 */ void createIcecleRevival(u8); - /* 80634040 */ void executeJump(); - /* 80634548 */ void executeAttackIce(); - /* 8063476C */ void executeAttackYose(); - /* 80634CEC */ void checkDamageWithIceBreak(); - /* 80634E04 */ void executeAttackBody(); - /* 806352C8 */ void executeDemoRevival(); - /* 80635798 */ void executeDamage(); - /* 80635ABC */ void executeDeath(); - /* 80636E9C */ void reviseIceCenterPos(cXyz*); - /* 80637048 */ void calcPlayerBufPos(); - /* 806374BC */ void action(); - /* 80637990 */ void mtx_set(); - /* 80637B30 */ void cc_set(); - /* 80637E10 */ void execute(); - /* 80637FC8 */ void _delete(); - /* 806380F8 */ void CreateHeap(); - /* 806388A0 */ void CreateHeap2(); - /* 806389C0 */ void create(); -}; - -struct daB_YO_HIO_c { - /* 8062F46C */ daB_YO_HIO_c(); - /* 806395E4 */ ~daB_YO_HIO_c(); -}; - -struct daB_YOI_c { - /* 8063A480 */ void setOperate(int); -}; - -struct dVibration_c { - /* 8006FA24 */ void StartShock(int, int, cXyz); - /* 8006FB10 */ void StartQuake(int, int, cXyz); - /* 8006FD94 */ void StopQuake(int); -}; - -struct dSv_memBit_c { - /* 80034918 */ void onDungeonItem(int); - /* 80034934 */ void isDungeonItem(int) const; -}; - -struct dSv_info_c { - /* 80035200 */ void onSwitch(int, int); - /* 80035360 */ void isSwitch(int, int) const; -}; - -struct dSv_danBit_c { - /* 80034B98 */ void onSwitch(int); - /* 80034BC0 */ void offSwitch(int); - /* 80034BE8 */ void isSwitch(int) const; -}; - -struct dKy_tevstr_c {}; - -struct dScnKy_env_light_c { - /* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*); - /* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*); -}; - -struct dRes_info_c {}; - -struct dRes_control_c { - /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); -}; - -struct dPa_levelEcallBack {}; - -struct _GXColor {}; - -struct dPa_control_c { - struct level_c { - /* 8004B918 */ void getEmitter(u32); - }; - - /* 8004CA90 */ void set(u8, u16, cXyz const*, dKy_tevstr_c const*, csXyz const*, cXyz const*, - u8, dPa_levelEcallBack*, s8, _GXColor const*, _GXColor const*, - cXyz const*, f32); - /* 8004D4CC */ void set(u32, u8, u16, cXyz const*, dKy_tevstr_c const*, csXyz const*, - cXyz const*, u8, dPa_levelEcallBack*, s8, _GXColor const*, - _GXColor const*, cXyz const*, f32); -}; - -struct dEvt_control_c { - /* 80042468 */ void reset(); - /* 80042914 */ void setSkipProc(void*, int (*)(void*, int), int); - /* 800429A8 */ void onSkipFade(); - /* 8004368C */ void setPtT(void*); -}; - -struct dEvent_manager_c { - /* 800483E8 */ void getRunEventName(); -}; - -struct dDlst_shadowControl_c { - static u8 mSimpleTexObj[32]; -}; - -struct dCcU_AtInfo {}; - -struct dCcD_Stts { - /* 80083860 */ void Init(int, int, fopAc_ac_c*); -}; - -struct dCcD_SrcSph {}; - -struct dCcD_SrcCyl {}; - -struct dCcD_Sph { - /* 80084A34 */ void Set(dCcD_SrcSph const&); - /* 80639214 */ ~dCcD_Sph(); - /* 806392E0 */ dCcD_Sph(); -}; - -struct dCcD_GStts { - /* 80083760 */ dCcD_GStts(); - /* 80083830 */ void Move(); - /* 8063943C */ ~dCcD_GStts(); -}; - -struct dCcD_GObjInf { - /* 80083A28 */ dCcD_GObjInf(); - /* 800840E4 */ ~dCcD_GObjInf(); - /* 800842C0 */ void ChkAtHit(); - /* 80084358 */ void GetAtHitObj(); - /* 80084460 */ void ChkTgHit(); - /* 800844F8 */ void GetTgHitObj(); -}; - -struct dCcD_Cyl { - /* 800848B4 */ void Set(dCcD_SrcCyl const&); -}; - -struct dCamera_c { - /* 801614AC */ void Start(); - /* 801614D0 */ void Stop(); - /* 8016300C */ void SetTrimSize(s32); - /* 80180AE0 */ void Set(cXyz, cXyz, f32, s16); - /* 80180C18 */ void Reset(cXyz, cXyz); - /* 80181500 */ void GetForceLockOnActor(); - /* 80181534 */ void ForceLockOn(fopAc_ac_c*); - /* 8018159C */ void ForceLockOff(fopAc_ac_c*); -}; - -struct dBgW_Base {}; - -struct dBgW { - /* 8007B970 */ dBgW(); - /* 8007B9C0 */ void Move(); -}; - -struct dBgS_PolyPassChk { - /* 80078E68 */ void SetObj(); -}; - -struct dBgS_ObjAcch { - /* 80639498 */ ~dBgS_ObjAcch(); -}; - -struct dBgS_AcchCir { - /* 80075EAC */ dBgS_AcchCir(); - /* 80075F58 */ void SetWall(f32, f32); - /* 80639508 */ ~dBgS_AcchCir(); -}; - -struct dBgS { - /* 80074A08 */ void Regist(dBgW_Base*, fopAc_ac_c*); -}; - -struct dBgS_Acch { - /* 80075F94 */ ~dBgS_Acch(); - /* 800760A0 */ dBgS_Acch(); - /* 80076248 */ void Set(cXyz*, cXyz*, fopAc_ac_c*, int, dBgS_AcchCir*, cXyz*, csXyz*, csXyz*); - /* 80076AAC */ void CrrPos(dBgS&); -}; - -struct cM3dGSph { - /* 8026F648 */ void SetC(cXyz const&); - /* 8026F708 */ void SetR(f32); - /* 80639364 */ ~cM3dGSph(); -}; - -struct cM3dGCyl { - /* 8026F1DC */ void SetC(cXyz const&); - /* 8026F1F8 */ void SetH(f32); - /* 8026F200 */ void SetR(f32); - /* 806393AC */ ~cM3dGCyl(); -}; - -struct cM3dGCir { - /* 8026EF18 */ ~cM3dGCir(); -}; - -struct cM3dGAab { - /* 806393F4 */ ~cM3dGAab(); -}; - -struct cCcD_Obj { - /* 80263A48 */ void GetAc(); -}; - -struct cCcS { - /* 80264BA8 */ void Set(cCcD_Obj*); -}; - -struct cCcD_GStts { - /* 8063959C */ ~cCcD_GStts(); -}; - -struct cBgD_t {}; - -struct cBgW { - /* 80079F38 */ void Set(cBgD_t*, u32, f32 (*)[3][4]); -}; - -struct cBgS_PolyInfo { - /* 802680B0 */ ~cBgS_PolyInfo(); -}; - -struct cBgS { - /* 80074250 */ void Release(dBgW_Base*); -}; - -struct _GXTexObj {}; - -struct Z2SeqMgr { - /* 802AF010 */ void bgmStart(u32, u32, s32); - /* 802AF408 */ void bgmStop(u32, s32); - /* 802AF49C */ void subBgmStart(u32); - /* 802AF884 */ void subBgmStop(); - /* 802AFB94 */ void bgmStreamPrepare(u32); - /* 802AFE18 */ void bgmStreamPlay(); - /* 802AFF8C */ void changeBgmStatus(s32); -}; - -struct JAISoundID {}; - -struct Z2SeMgr { - /* 802AB984 */ void seStart(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); -}; - -struct Z2CreatureEnemy { - /* 802C0F64 */ Z2CreatureEnemy(); - /* 802C1094 */ void init(Vec*, Vec*, u8, u8); - /* 802C1B90 */ void setEnemyName(char const*); -}; - -struct Z2AudioMgr { - static u8 mAudioMgrPtr[4 + 4 /* padding */]; -}; - -struct JMath { - static u8 sincosTable_[65536]; -}; - -struct J3DFrameCtrl { - /* 803283FC */ void init(s16); - /* 8032842C */ void checkPass(f32); - /* 80638838 */ ~J3DFrameCtrl(); -}; - // // Forward References: // @@ -631,10 +241,10 @@ extern "C" void checkPass__12J3DFrameCtrlFf(); extern "C" void removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern(); extern "C" void removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey(); extern "C" void removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey(); -extern "C" void PSMTXCopy(); -extern "C" void PSMTXTrans(); -extern "C" void PSVECSquareMag(); -extern "C" void PSVECSquareDistance(); +// extern "C" void PSMTXCopy(); +// extern "C" void PSMTXTrans(); +// extern "C" void PSVECSquareMag(); +// extern "C" void PSVECSquareDistance(); extern "C" void __construct_array(); extern "C" void _savegpr_22(); extern "C" void _savegpr_23(); @@ -652,10 +262,10 @@ extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" void abs(); -extern "C" void strcmp(); -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; +// extern "C" void abs(); +// extern "C" void strcmp(); +// extern "C" extern void* g_fopAc_Method[8]; +// extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; extern "C" extern void* __vt__8dCcD_Sph[36]; extern "C" extern void* __vt__8dCcD_Cyl[36]; extern "C" extern void* __vt__9dCcD_Stts[11]; @@ -666,11 +276,11 @@ extern "C" extern void* __vt__9cCcD_Stts[8]; extern "C" u8 now__14mDoMtx_stack_c[48]; extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" extern u8 g_env_light[4880]; -extern "C" extern u8 j3dSys[284]; +// extern "C" extern u8 g_env_light[4880]; +// extern "C" extern u8 j3dSys[284]; extern "C" extern u8 j3dZModeTable[96]; extern "C" u8 sincosTable___5JMath[65536]; -extern "C" extern u32 __float_nan; +// extern "C" extern u32 __float_nan; extern "C" extern u8 mBlureFlag__13mDoGph_gInf_c[4]; extern "C" extern u8 struct_80450C98[4]; extern "C" extern u8 pauseTimer__9dScnPly_c[4]; @@ -1220,7 +830,8 @@ asm void daB_YO_c::draw() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cXyz::~cXyz() { +// asm cXyz::~cXyz() { +asm void __dt__4cXyzFv() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/__dt__4cXyzFv.s" } @@ -2696,7 +2307,8 @@ asm void daB_YO_c::CreateHeap() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DFrameCtrl::~J3DFrameCtrl() { +// asm J3DFrameCtrl::~J3DFrameCtrl() { +asm void __dt__12J3DFrameCtrlFv() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/__dt__12J3DFrameCtrlFv.s" } @@ -2753,7 +2365,8 @@ asm void daB_YO_c::create() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dCcD_Sph::~dCcD_Sph() { +// asm dCcD_Sph::~dCcD_Sph() { +asm void __dt__8dCcD_SphFv() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/__dt__8dCcD_SphFv.s" } @@ -2763,7 +2376,8 @@ asm dCcD_Sph::~dCcD_Sph() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dCcD_Sph::dCcD_Sph() { +// asm dCcD_Sph::dCcD_Sph() { +asm void __ct__8dCcD_SphFv() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/__ct__8dCcD_SphFv.s" } @@ -2773,7 +2387,8 @@ asm dCcD_Sph::dCcD_Sph() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGSph::~cM3dGSph() { +// asm cM3dGSph::~cM3dGSph() { +asm void __dt__8cM3dGSphFv() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/__dt__8cM3dGSphFv.s" } @@ -2783,7 +2398,8 @@ asm cM3dGSph::~cM3dGSph() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGCyl::~cM3dGCyl() { +// asm cM3dGCyl::~cM3dGCyl() { +asm void __dt__8cM3dGCylFv() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/__dt__8cM3dGCylFv.s" } @@ -2793,7 +2409,8 @@ asm cM3dGCyl::~cM3dGCyl() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGAab::~cM3dGAab() { +// asm cM3dGAab::~cM3dGAab() { +asm void __dt__8cM3dGAabFv() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/__dt__8cM3dGAabFv.s" } @@ -2803,7 +2420,8 @@ asm cM3dGAab::~cM3dGAab() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dCcD_GStts::~dCcD_GStts() { +// asm dCcD_GStts::~dCcD_GStts() { +asm void __dt__10dCcD_GSttsFv() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/__dt__10dCcD_GSttsFv.s" } @@ -2813,7 +2431,8 @@ asm dCcD_GStts::~dCcD_GStts() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dBgS_ObjAcch::~dBgS_ObjAcch() { +// asm dBgS_ObjAcch::~dBgS_ObjAcch() { +asm void __dt__12dBgS_ObjAcchFv() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/__dt__12dBgS_ObjAcchFv.s" } @@ -2823,14 +2442,16 @@ asm dBgS_ObjAcch::~dBgS_ObjAcch() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dBgS_AcchCir::~dBgS_AcchCir() { +// asm dBgS_AcchCir::~dBgS_AcchCir() { +asm void __dt__12dBgS_AcchCirFv() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/__dt__12dBgS_AcchCirFv.s" } #pragma pop /* 80639578-8063957C 00A1F8 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -cXyz::cXyz() { +// cXyz::cXyz() { +asm void __ct__4cXyzFv() { /* empty function */ } @@ -2848,7 +2469,8 @@ static asm void daB_YO_Create(daB_YO_c* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cCcD_GStts::~cCcD_GStts() { +// asm cCcD_GStts::~cCcD_GStts() { +asm void __dt__10cCcD_GSttsFv() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/__dt__10cCcD_GSttsFv.s" } @@ -2916,7 +2538,8 @@ static asm void func_8063968C() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void obj_ystone_class::setShapeAngle(csXyz param_0) { +// asm void obj_ystone_class::setShapeAngle(csXyz param_0) { +asm void setShapeAngle__16obj_ystone_classF5csXyz() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/setShapeAngle__16obj_ystone_classF5csXyz.s" } @@ -2926,7 +2549,8 @@ asm void obj_ystone_class::setShapeAngle(csXyz param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void obj_ystone_class::setCurrentPos(cXyz param_0) { +// asm void obj_ystone_class::setCurrentPos(cXyz param_0) { +asm void setCurrentPos__16obj_ystone_classF4cXyz() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/setCurrentPos__16obj_ystone_classF4cXyz.s" } @@ -2936,7 +2560,8 @@ asm void obj_ystone_class::setCurrentPos(cXyz param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void cXyz::abs(Vec const& param_0) const { +// asm void cXyz::abs(Vec const& param_0) const { +asm void abs__4cXyzCFRC3Vec() { nofralloc #include "asm/rel/d/a/b/d_a_b_yo/d_a_b_yo/abs__4cXyzCFRC3Vec.s" } diff --git a/rel/d/a/e/d_a_e_fz/d_a_e_fz.cpp b/rel/d/a/e/d_a_e_fz/d_a_e_fz.cpp index 6755da344e6..4fa1a2199e0 100644 --- a/rel/d/a/e/d_a_e_fz/d_a_e_fz.cpp +++ b/rel/d/a/e/d_a_e_fz/d_a_e_fz.cpp @@ -3,6 +3,8 @@ * @brief Enemy - Mini Freezard */ + + #include "rel/d/a/e/d_a_e_fz/d_a_e_fz.h" #include "rel/d/a/d_a_mirror/d_a_mirror.h" #include "d/com/d_com_inf_game.h" @@ -17,6 +19,7 @@ // Forward References: // +#ifndef d_a_e_fz_nonmatching extern "C" void __ct__12daE_FZ_HIO_cFv(); extern "C" void draw__8daE_FZ_cFv(); extern "C" static void daE_FZ_Draw__FP8daE_FZ_c(); @@ -63,6 +66,7 @@ extern "C" extern char const* const d_a_e_fz__stringBase0; // External References: // + extern "C" void mDoMtx_YrotS__FPA4_fs(); extern "C" void transM__14mDoMtx_stack_cFfff(); extern "C" void scaleM__14mDoMtx_stack_cFfff(); @@ -184,6 +188,7 @@ extern "C" void __register_global_object(); /* ############################################################################################## */ /* 806C1938-806C193C 000000 0004+00 13/13 0/0 0/0 .rodata @3803 */ + SECTION_RODATA static f32 const lit_3803 = 100.0f; COMPILER_STRIP_GATE(0x806C1938, &lit_3803); @@ -332,6 +337,7 @@ SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { 0x00000000, }; #pragma pop +#endif /* 806C1A20-806C1A28 000020 0008+00 0/1 0/0 0/0 .data e_prim$3682 */ #pragma push @@ -392,6 +398,7 @@ static dCcD_SrcSph cc_fz_at_src = { } // mSphAttr }; +#ifndef d_a_e_fz_nonmatching /* 806C1AB8-806C1AD4 -00001 001C+00 1/1 0/0 0/0 .data @4324 */ SECTION_DATA static void* lit_4324[7] = { (void*)(((char*)executeDamage__8daE_FZ_cFv) + 0x5C), @@ -402,21 +409,29 @@ SECTION_DATA static void* lit_4324[7] = { (void*)(((char*)executeDamage__8daE_FZ_cFv) + 0x178), (void*)(((char*)executeDamage__8daE_FZ_cFv) + 0x3F4), }; +#endif /* 806C1AD4-806C1ADC 0000D4 0006+02 1/1 0/0 0/0 .data ice_name$4578 */ -SECTION_DATA static u16 ice_name[3] = { +static u16 ice_name[3] = { 0x8221, 0x8222, 0x8223, }; /* 806C1ADC-806C1AFC -00001 0020+00 1/0 0/0 0/0 .data l_daE_FZ_Method */ +// forward references +static void daE_FZ_Create(daE_FZ_c* i_this); +static void daE_FZ_Delete(daE_FZ_c* i_this); +static void daE_FZ_Execute(daE_FZ_c* i_this); +static bool daE_FZ_IsDelete(daE_FZ_c* i_this); +static void daE_FZ_Draw(daE_FZ_c* i_this); + static actor_method_class l_daE_FZ_Method = { - (process_method_func)daE_FZ_Create__FP8daE_FZ_c, - (process_method_func)daE_FZ_Delete__FP8daE_FZ_c, - (process_method_func)daE_FZ_Execute__FP8daE_FZ_c, - (process_method_func)daE_FZ_IsDelete__FP8daE_FZ_c, - (process_method_func)daE_FZ_Draw__FP8daE_FZ_c, + (process_method_func)daE_FZ_Create, + (process_method_func)daE_FZ_Delete, + (process_method_func)daE_FZ_Execute, + (process_method_func)daE_FZ_IsDelete, + (process_method_func)daE_FZ_Draw, }; /* 806C1AFC-806C1B2C -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_FZ */ @@ -437,6 +452,7 @@ extern actor_process_profile_definition g_profile_E_FZ = { fopAc_CULLBOX_0_e, // cullType }; +#ifndef d_a_e_fz_nonmatching /* 806C1B2C-806C1B38 00012C 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */ SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { (void*)NULL /* RTTI */, @@ -491,6 +507,7 @@ SECTION_DATA extern void* __vt__12daE_FZ_HIO_c[3] = { (void*)NULL, (void*)__dt__12daE_FZ_HIO_cFv, }; +#endif /* 806BE94C-806BE9D4 0000EC 0088+00 1/1 0/0 0/0 .text __ct__12daE_FZ_HIO_cFv */ #ifdef NONMATCHING @@ -524,17 +541,19 @@ asm daE_FZ_HIO_c::daE_FZ_HIO_c() { /* ############################################################################################## */ /* 806C1990-806C1994 000058 0004+00 0/3 0/0 0/0 .rodata @3863 */ +#ifndef d_a_e_fz_nonmatching #pragma push #pragma force_active on SECTION_RODATA static f32 const lit_3863 = 300.0f; COMPILER_STRIP_GATE(0x806C1990, &lit_3863); #pragma pop +#endif /* 806BE9D4-806BEAD8 000174 0104+00 1/1 0/0 0/0 .text draw__8daE_FZ_cFv */ #ifdef NONMATCHING // float literals s32 daE_FZ_c::draw() { - if (field_0x714 != 2 || !checkItemGet(IRONBALL,1)) { + if (field_0x714 == 2 && !checkItemGet(IRONBALL,1)) { return 1; } @@ -616,12 +635,12 @@ void daE_FZ_c::deadnextSet(bool param_0) { mCreature.startCollisionSE(Z2SE_HIT_HAMMER, 0x20); } - mSph1.ClrTgHit(); + mTgCoSph.ClrTgHit(); fopAcM_OffStatus(this,0); attention_info.flags &= 0xfffffffb; - mSph2.OffAtSetBit(); - mSph1.OffTgSetBit(); + mAtSph.OffAtSetBit(); + mTgCoSph.OffTgSetBit(); mCreature.startCreatureSound(Z2SE_EN_FZ_DEATH, 0, -1); @@ -642,8 +661,10 @@ asm void daE_FZ_c::deadnextSet(bool param_0) { /* ############################################################################################## */ /* 806C1994-806C1998 00005C 0004+00 1/3 0/0 0/0 .rodata @4109 */ +#ifndef d_a_e_fz_nonmatching SECTION_RODATA static f32 const lit_4109 = 1.0f / 5.0f; COMPILER_STRIP_GATE(0x806C1994, &lit_4109); +#endif /* 806C1BA0-806C1BA4 000008 0004+00 2/2 0/0 0/0 .bss None */ static u8 data_806C1BA0[4]; @@ -652,7 +673,11 @@ static u8 data_806C1BA0[4]; static u8 lit_3819[12]; /* 806C1BB0-806C1BE8 000018 0038+00 8/8 0/0 0/0 .bss l_HIO */ +#ifndef d_a_e_fz_nonmatching static daE_FZ_HIO_c_tmp l_HIO; +#else +static daE_FZ_HIO_c l_HIO; +#endif /* 806BED34-806BF444 0004D4 0710+00 1/1 0/0 0/0 .text damage_check__8daE_FZ_cFv */ #ifdef NONMATCHING @@ -676,18 +701,18 @@ void daE_FZ_c::damage_check() { mStts.Move(); if (field_0x714 == 3) { - if (mSph1.ChkTgHit()) { - mAtInfo.mpCollider = mSph1.GetTgHitObj(); + if (mTgCoSph.ChkTgHit()) { + mAtInfo.mpCollider = mTgCoSph.GetTgHitObj(); - if (mSph1.GetTgHitObj()->ChkAtType(AT_TYPE_IRON_BALL)) { + if (mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_IRON_BALL)) { deadnextSet(false); } } } else { - if (mSph1.ChkTgHit()) { - mAtInfo.mpCollider = mSph1.GetTgHitObj(); + if (mTgCoSph.ChkTgHit()) { + mAtInfo.mpCollider = mTgCoSph.GetTgHitObj(); - if (mSph1.GetTgHitObj()->ChkAtType(AT_TYPE_40) || mSph1.GetTgHitObj()->ChkAtType(AT_TYPE_BOOMERANG)) { + if (mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_40) || mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_BOOMERANG)) { current.angle.y = fopAcM_searchPlayerAngleY(this) + 32768; f32 tmp_l_hio = l_HIO.field_0x28; speedF = tmp_l_hio; @@ -697,14 +722,14 @@ void daE_FZ_c::damage_check() { return; } - pos2 = current.pos - *mSph1.GetTgHitPosP(); - pos3.set(*mSph1.GetTgHitPosP()); + pos2 = current.pos - *mTgCoSph.GetTgHitPosP(); + pos3.set(*mTgCoSph.GetTgHitPosP()); s_pos.x = 0; s_pos.y = pos2.atan2sX_Z(); s_pos.z = 0; - if (mSph1.GetTgHitObj()->ChkAtType(AT_TYPE_SPINNER) || mSph1.GetTgHitObj()->ChkAtType(AT_TYPE_ARROW)) { + if (mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_SPINNER) || mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_ARROW)) { current.angle.y = fopAcM_searchPlayerAngleY(this) + 32768; f32 tmp_l_hio = l_HIO.field_0x28; speedF = tmp_l_hio; @@ -718,7 +743,7 @@ void daE_FZ_c::damage_check() { cXyz cStack_54(l_HIO.field_0x0c, l_HIO.field_0x0c, l_HIO.field_0x0c); dComIfGp_particle_set(0x85ba, ¤t.pos, &shape_angle, &cStack_54); - if (mSph1.GetTgHitObj()->ChkAtType(AT_TYPE_HOOKSHOT)) { + if (mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_HOOKSHOT)) { health -= 20; if (1 < health) { @@ -742,9 +767,9 @@ void daE_FZ_c::damage_check() { return; } - if (mSph1.GetTgHitObj()->ChkAtType(AT_TYPE_IRON_BALL)) { + if (mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_IRON_BALL)) { deadnextSet(false); - mSph1.ClrTgHit(); + mTgCoSph.ClrTgHit(); dComIfGp_setHitMark(3,this,&pos3,&s_pos,0,AT_TYPE_0); return; } @@ -774,12 +799,12 @@ void daE_FZ_c::damage_check() { deadnextSet(true); return; } else { - if (mObjAcch.ChkGroundHit() && mSph1.ChkCoHit()) { - fopAc_ac_c* co_hit_actor = mSph1.GetCoHitAc(); + if (mObjAcch.ChkGroundHit() && mTgCoSph.ChkCoHit()) { + fopAc_ac_c* co_hit_actor = mTgCoSph.GetCoHitAc(); if (fopAcM_IsActor(co_hit_actor) && fopAcM_GetName(co_hit_actor) == PROC_E_FZ) { - pos = current.pos - mSph1.GetCoHitAc()->current.pos; - mSph1.ClrCoHit(); + pos = current.pos - mTgCoSph.GetCoHitAc()->current.pos; + mTgCoSph.ClrCoHit(); f32 co_hit_actor_speed = co_hit_actor->speedF; if (co_hit_actor_speed > l_HIO.field_0x28 * 0.2f || speedF > l_HIO.field_0x28 * 0.2f) { @@ -805,16 +830,16 @@ void daE_FZ_c::damage_check() { } } - if (mSph2.ChkAtHit()) { + if (mAtSph.ChkAtHit()) { fopAc_ac_c* player = dComIfGp_getPlayer(0); - fopAc_ac_c* at_hit_actor = mSph2.GetAtHitAc(); + fopAc_ac_c* at_hit_actor = mAtSph.GetAtHitAc(); current.angle.y = fopAcM_searchPlayerAngleY(this) + 32768; if (player != at_hit_actor) { - mSph2.ClrAtHit(); + mAtSph.ClrAtHit(); } else { - if (mSph2.ChkAtShieldHit()) { + if (mAtSph.ChkAtShieldHit()) { f32 l_hio_28 = l_HIO.field_0x28; speedF = l_hio_28; field_0x6fc = l_hio_28; @@ -827,7 +852,7 @@ void daE_FZ_c::damage_check() { } } mBoundSoundset(); - mSph2.ClrAtHit(); + mAtSph.ClrAtHit(); } } } @@ -848,6 +873,7 @@ asm void daE_FZ_c::damage_check() { /* ############################################################################################## */ /* 806C1998-806C199C 000060 0004+00 0/3 0/0 0/0 .rodata @4139 */ +#ifndef d_a_e_fz_nonmatching #pragma push #pragma force_active on SECTION_RODATA static f32 const lit_4139 = 70.0f; @@ -860,6 +886,7 @@ COMPILER_STRIP_GATE(0x806C1998, &lit_4139); SECTION_RODATA static f32 const lit_4140 = -1000000000.0f; COMPILER_STRIP_GATE(0x806C199C, &lit_4140); #pragma pop +#endif /* 806BF444-806BF58C 000BE4 0148+00 3/3 0/0 0/0 .text way_gake_check__8daE_FZ_cFv */ #ifdef NONMATCHING @@ -909,6 +936,7 @@ asm bool daE_FZ_c::way_gake_check() { /* ############################################################################################## */ /* 806C19A0-806C19A4 000068 0004+00 0/3 0/0 0/0 .rodata @4200 */ +#ifndef d_a_e_fz_nonmatching #pragma push #pragma force_active on SECTION_RODATA static f32 const lit_4200 = 200.0f; @@ -944,6 +972,7 @@ SECTION_RODATA static u8 const lit_4205[8] = { }; COMPILER_STRIP_GATE(0x806C19B0, &lit_4205); #pragma pop +#endif /* 806BF58C-806BF8E8 000D2C 035C+00 1/1 0/0 0/0 .text executeWait__8daE_FZ_cFv */ #ifdef NONMATCHING @@ -964,7 +993,7 @@ void daE_FZ_c::executeWait() { pos2.y = home.pos.y; pos2.z = home.pos.z + cM_rndFX(l_HIO.field_0x10); - pos = pos2 - current.pos; // -= doesn't appear to work here + pos = pos2 - current.pos; angle = pos.atan2sX_Z() - current.angle.y; @@ -1078,11 +1107,13 @@ asm void daE_FZ_c::executeMove() { /* ############################################################################################## */ /* 806C19B8-806C19BC 000080 0004+00 0/1 0/0 0/0 .rodata @4243 */ +#ifndef d_a_e_fz_nonmatching #pragma push #pragma force_active on SECTION_RODATA static f32 const lit_4243 = 7.0f / 10.0f; COMPILER_STRIP_GATE(0x806C19B8, &lit_4243); #pragma pop +#endif /* 806BFA64-806BFB60 001204 00FC+00 1/1 0/0 0/0 .text executeAttack__8daE_FZ_cFv */ #ifdef NONMATCHING @@ -1233,6 +1264,7 @@ asm void daE_FZ_c::executeDamage() { /* ############################################################################################## */ /* 806C19BC-806C19C0 000084 0004+00 0/0 0/0 0/0 .rodata @4322 */ +#ifndef d_a_e_fz_nonmatching #pragma push #pragma force_active on SECTION_RODATA static f32 const lit_4322 = 4096.0f; @@ -1266,6 +1298,7 @@ COMPILER_STRIP_GATE(0x806C19C8, &lit_4420); SECTION_RODATA static f32 const lit_4421 = 60.0f; COMPILER_STRIP_GATE(0x806C19CC, &lit_4421); #pragma pop +#endif /* 806BFF94-806C0224 001734 0290+00 1/1 0/0 0/0 .text executeRollMove__8daE_FZ_cFv */ #ifdef NONMATCHING @@ -1325,8 +1358,8 @@ void daE_FZ_c::executeRollMove() { return; } - if (mSph2.ChkAtHit()) { - if ((fopAcM_GetName(mSph2.GetAtHitAc()) == PROC_ALINK) || mSph2.ChkAtShieldHit()) { + if (mAtSph.ChkAtHit()) { + if ((fopAcM_GetName(mAtSph.GetAtHitAc()) == PROC_ALINK) || mAtSph.ChkAtShieldHit()) { setActionMode(ACT_DAMAGE,0); return; } @@ -1348,11 +1381,13 @@ asm void daE_FZ_c::executeRollMove() { /* ############################################################################################## */ /* 806C19D0-806C19D4 000098 0004+00 0/2 0/0 0/0 .rodata @4517 */ +#ifndef d_a_e_fz_nonmatching #pragma push #pragma force_active on SECTION_RODATA static f32 const lit_4517 = 35.0f; COMPILER_STRIP_GATE(0x806C19D0, &lit_4517); #pragma pop +#endif /* 806C0224-806C06DC 0019C4 04B8+00 1/1 0/0 0/0 .text action__8daE_FZ_cFv */ #ifdef NONMATCHING @@ -1500,11 +1535,13 @@ void daE_FZ_c::mtx_set() { /* ############################################################################################## */ /* 806C19D4-806C19D8 00009C 0004+00 0/1 0/0 0/0 .rodata @4562 */ +#ifndef d_a_e_fz_nonmatching #pragma push #pragma force_active on SECTION_RODATA static f32 const lit_4562 = 25.0f; COMPILER_STRIP_GATE(0x806C19D4, &lit_4562); #pragma pop +#endif /* 806C0760-806C08C4 001F00 0164+00 1/1 0/0 0/0 .text cc_set__8daE_FZ_cFv */ #ifdef NONMATCHING @@ -1514,29 +1551,29 @@ void daE_FZ_c::cc_set() { cXyz pos2; pos.set(0.0f,60.0f,0.0f); - mDoMtx_stack_c::multVec(&pos,&mEyePos); - attention_info.mPosition = mEyePos; - attention_info.mPosition.y += 25.0f; + mDoMtx_stack_c::multVec(&pos,&eyePos); + attention_info.position = eyePos; + attention_info.position.y += 25.0f; mDoMtx_stack_c::copy(mpModel->getBaseTRMtx()); pos.set(0.0f,40.0f,0.0f); mDoMtx_stack_c::multVec(&pos,&pos2); - mSph1.SetC(pos2); - mSph1.SetR(mRadiusBase * 60.0f); + mTgCoSph.SetC(pos2); + mTgCoSph.SetR(mRadiusBase * 60.0f); - dComIfG_Ccsp()->Set(&mSph1); + dComIfG_Ccsp()->Set(&mTgCoSph); mDoMtx_stack_c::copy(mpModel->getBaseTRMtx()); pos.set(0.0f,25.0f,0.0f); mDoMtx_stack_c::multVec(&pos,&pos2); - mSph2.SetC(pos2); - mSph2.SetR(mRadiusBase * 40.0f); + mAtSph.SetC(pos2); + mAtSph.SetR(mRadiusBase * 0.05f); - dComIfG_Ccsp()->Set(&mSph2); + dComIfG_Ccsp()->Set(&mAtSph); } #else #pragma push @@ -1551,11 +1588,13 @@ asm void daE_FZ_c::cc_set() { /* ############################################################################################## */ /* 806C19D8-806C19DC 0000A0 0004+00 0/1 0/0 0/0 .rodata @4627 */ +#ifndef d_a_e_fz_nonmatching #pragma push #pragma force_active on SECTION_RODATA static f32 const lit_4627 = 4.0f / 5.0f; COMPILER_STRIP_GATE(0x806C19D8, &lit_4627); #pragma pop +#endif /* 806C08C4-806C0B00 002064 023C+00 1/1 0/0 0/0 .text execute__8daE_FZ_cFv */ #ifdef NONMATCHING @@ -1585,25 +1624,25 @@ s32 daE_FZ_c::execute() { if (field_0x712 != 0) field_0x712 -= 1; - action(); - mtx_set(); - cc_set(); + action(); // set current action + mtx_set(); // update model matrix + cc_set(); // update sphere colliders mCreature.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); - field_0x664 = current.pos - next.pos; - field_0x664 *= 8000.0f; + mUserWork = current.pos - home.pos; + mUserWork *= 8000.0f; for (int i = 0; i < 3; i++) { - field_0x71c[i] = dComIfGp_particle_set(field_0x71c[i], ice_name[i], ¤t.pos, 0, 0); - JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(field_0x71c[i]); + mParticleSet[i] = dComIfGp_particle_set(mParticleSet[i], ice_name[i], ¤t.pos, 0, 0); + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleSet[i]); if (emitter) { - mDoMtx_stack_c::copy(field_0x5b4->getBaseTRMtx()); + mDoMtx_stack_c::copy(mpModel->getBaseTRMtx()); mDoMtx_stack_c::transM(0.0f, 40.0f, 0.0f); emitter->setGlobalSRTMatrix(mDoMtx_stack_c::get()); emitter->setParticleCallBackPtr(dPa_control_c::getParticleTracePCB()); - emitter->setUserWork((u32)(&field_0x664)); + emitter->setUserWork((u32)(&mUserWork)); } } @@ -1628,7 +1667,7 @@ static void daE_FZ_Execute(daE_FZ_c* i_this) { /* 806C0B20-806C0B8C 0022C0 006C+00 0/0 0/0 1/1 .text demoDelete__8daE_FZ_cFv */ void daE_FZ_c::demoDelete() { for (int i = 0; i < 3; i++) { - dComIfGp_particle_levelEmitterOnEventMove(field_0x71c[i]); + dComIfGp_particle_levelEmitterOnEventMove(mParticleSet[i]); } fopAcM_delete(this); @@ -1685,6 +1724,7 @@ static int useHeapInit(fopAc_ac_c* i_this) { /* ############################################################################################## */ /* 806C19DC-806C19E0 0000A4 0004+00 0/1 0/0 0/0 .rodata @4847 */ +#ifndef d_a_e_fz_nonmatching #pragma push #pragma force_active on SECTION_RODATA static f32 const lit_4847 = -200.0f; @@ -1731,6 +1771,7 @@ COMPILER_STRIP_GATE(0x806C19F0, &lit_4852); #pragma force_active on SECTION_DEAD static char const* const stringBase_806C19F9 = "E_fz"; #pragma pop +#endif /* 806C0CD0-806C1208 002470 0538+00 1/1 0/0 0/0 .text create__8daE_FZ_cFv */ #ifdef NONMATCHING @@ -1776,7 +1817,7 @@ s32 daE_FZ_c::create() { } } - mObjAcch.Set(&fopAcM_GetPosition_p(this),&fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, &fopAcM_GetSpeed_p(this), 0, 0); + mObjAcch.Set(fopAcM_GetPosition_p(this),fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), 0, 0); if (field_0x714 == 3) { mAcchCir.SetWall(35.0f,70.0f); @@ -1787,19 +1828,19 @@ s32 daE_FZ_c::create() { mObjAcch.CrrPos(dComIfG_Bgsp()); - mSph1.Set(cc_fz_src); - mSph1.SetStts(&mStts); + mTgCoSph.Set(cc_fz_src); + mTgCoSph.SetStts(&mStts); - mSph2.Set(cc_fz_at_src); - mSph2.SetStts(&mStts); + mAtSph.Set(cc_fz_at_src); + mAtSph.SetStts(&mStts); - mCreature.init(¤t.pos,&mEyePos,3,1); + mCreature.init(¤t.pos,&eyePos,3,1); mCreature.setEnemyName("E_fz"); mAtInfo.mpSound = &mCreature; mAtInfo.mPowerType = 1; - mGravity = -5.0f; + gravity = -5.0f; shape_angle.z = 0; shape_angle.x = 0; @@ -1824,11 +1865,11 @@ s32 daE_FZ_c::create() { if (field_0x714 == 3) { mRadiusBase = 0.0f; attention_info.flags &= 0xfffffffb; - mSph2.SetAtType(AT_TYPE_CSTATUE_SWING); - mSph2.SetAtSpl(dCcG_At_Spl_UNK_1); + mAtSph.SetAtType(AT_TYPE_CSTATUE_SWING); + mAtSph.SetAtSpl(dCcG_At_Spl_UNK_1); setActionMode(ACT_ROLLMOVE,0); } else { - mSph2.SetAtMtrl(2); + mAtSph.SetAtMtrl(2); mRadiusBase = 1.0f; cM_rnd() < 0.5f ? setActionMode(ACT_WAIT,0) : setActionMode(ACT_MOVE,0); } @@ -1849,6 +1890,7 @@ asm s32 daE_FZ_c::create() { #pragma pop #endif +#ifndef d_a_e_fz_nonmatching /* 806C1208-806C1250 0029A8 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ #pragma push #pragma optimization_level 0 @@ -1909,12 +1951,14 @@ asm void __dt__12dBgS_AcchCirFv() { asm void __ct__4cXyzFv() { /* empty function */ } +#endif /* 806C13D8-806C13F8 002B78 0020+00 1/0 0/0 0/0 .text daE_FZ_Create__FP8daE_FZ_c */ static void daE_FZ_Create(daE_FZ_c* i_this) { i_this->create(); } +#ifndef d_a_e_fz_nonmatching /* 806C13F8-806C1440 002B98 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ #pragma push #pragma optimization_level 0 @@ -1930,7 +1974,8 @@ asm void __dt__10cCcD_GSttsFv() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daE_FZ_HIO_c::~daE_FZ_HIO_c() { +// asm daE_FZ_HIO_c::~daE_FZ_HIO_c() { +asm void __dt__12daE_FZ_HIO_cFv() { nofralloc #include "asm/rel/d/a/e/d_a_e_fz/d_a_e_fz/__dt__12daE_FZ_HIO_cFv.s" } @@ -1970,6 +2015,7 @@ static asm void func_806C14CC() { #include "asm/rel/d/a/e/d_a_e_fz/d_a_e_fz/func_806C14CC.s" } #pragma pop +#endif /* 806C14D4-806C18E8 002C74 0414+00 1/1 0/0 0/0 .text * setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz */ @@ -2051,6 +2097,7 @@ static asm int setMidnaBindEffect(fopEn_enemy_c* param_0, Z2CreatureEnemy* param #pragma pop #endif +#ifndef d_a_e_fz_nonmatching /* 806C18E8-806C1924 003088 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ #pragma push #pragma optimization_level 0 @@ -2061,5 +2108,7 @@ asm void __dt__4cXyzFv() { #include "asm/rel/d/a/e/d_a_e_fz/d_a_e_fz/__dt__4cXyzFv.s" } #pragma pop - +#endif /* 806C19F4-806C19F4 0000BC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ + + diff --git a/rel/d/a/e/d_a_e_fz/d_a_e_fz_nonmatching.cpp b/rel/d/a/e/d_a_e_fz/d_a_e_fz_nonmatching.cpp new file mode 100644 index 00000000000..113ca1402a5 --- /dev/null +++ b/rel/d/a/e/d_a_e_fz/d_a_e_fz_nonmatching.cpp @@ -0,0 +1,1169 @@ +/** + * @file d_a_obj_carry.cpp + * @brief Enemy - Mini Freezard + * + * @details This should match in theory?? + */ + +#include "rel/d/a/e/d_a_e_fz/d_a_e_fz.h" +#include "rel/d/a/d_a_mirror/d_a_mirror.h" +#include "d/com/d_com_inf_game.h" +#include "d/d_item.h" +#include "d/a/d_a_player.h" +#include "rel/d/a/d_a_midna/d_a_midna.h" +#include "SSystem/SComponent/c_math.h" +#include "SSystem/SComponent/c_xyz.h" +#include "dol2asm.h" + +/* 806C1A20-806C1A28 000020 0008+00 0/1 0/0 0/0 .data e_prim$3682 */ +static GXColor e_prim[2] = { + {0xFF, 0x78, 0x00, 0x00}, + {0xFF, 0x64, 0x78, 0x00}, +}; + +/* 806C1A28-806C1A30 000028 0008+00 0/1 0/0 0/0 .data e_env$3683 */ +static GXColor e_env[2] = { + {0x5A, 0x2D, 0x2D, 0x00}, + {0x3C, 0x1E, 0x1E, 0x00}, +}; + +/* 806C1A30-806C1A38 000030 0006+02 0/1 0/0 0/0 .data eff_id$3691 */ +static u16 eff_id[3] = { + 0x029D, + 0x029E, + 0x029F, +}; + +/* 806C1A38-806C1A78 000038 0040+00 1/1 0/0 0/0 .data cc_fz_src__22@unnamed@d_a_e_fz_cpp@ + */ +static dCcD_SrcSph cc_fz_src = { + { + {0x0, {{0x100, 0x1, 0x0}, {0xd0fbfdff, 0x43}, 0x65}}, // mObj + {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x6}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr +}; + +/* 806C1A78-806C1AB8 000078 0040+00 1/1 0/0 0/0 .data cc_fz_at_src__22@unnamed@d_a_e_fz_cpp@ */ +static dCcD_SrcSph cc_fz_at_src = { + { + {0x0, {{0x100, 0x1, 0x1d}, {0x0, 0x0}, 0x0}}, // mObj + {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr +}; + +/* 806C1AD4-806C1ADC 0000D4 0006+02 1/1 0/0 0/0 .data ice_name$4578 */ +static u16 ice_name[3] = { + 0x8221, + 0x8222, + 0x8223, +}; + +/* 806C1ADC-806C1AFC -00001 0020+00 1/0 0/0 0/0 .data l_daE_FZ_Method */ +// forward references +static void daE_FZ_Create(daE_FZ_c* i_this); +static void daE_FZ_Delete(daE_FZ_c* i_this); +static void daE_FZ_Execute(daE_FZ_c* i_this); +static bool daE_FZ_IsDelete(daE_FZ_c* i_this); +static void daE_FZ_Draw(daE_FZ_c* i_this); + +static actor_method_class l_daE_FZ_Method = { + (process_method_func)daE_FZ_Create, + (process_method_func)daE_FZ_Delete, + (process_method_func)daE_FZ_Execute, + (process_method_func)daE_FZ_IsDelete, + (process_method_func)daE_FZ_Draw, +}; + +/* 806BE94C-806BE9D4 0000EC 0088+00 1/1 0/0 0/0 .text __ct__12daE_FZ_HIO_cFv */ +daE_FZ_HIO_c::daE_FZ_HIO_c() { + field_0x04 = -1; + field_0x0c = 1.4f; + field_0x10 = 1000.0f; + field_0x14 = 800.0f; + field_0x18 = 350.0f; + field_0x1c = 2.0f; + field_0x20 = 6.0f; + field_0x24 = 10.0f; + field_0x28 = 50.0f; + field_0x2c = 3.0f; + field_0x06 = 0x28; + field_0x30 = 40.0f; + field_0x08 = 0x78; + field_0x34 = 80.0f; +} + +/* 806BE9D4-806BEAD8 000174 0104+00 1/1 0/0 0/0 .text draw__8daE_FZ_cFv */ +s32 daE_FZ_c::draw() { + if (field_0x714 == 2 && !checkItemGet(IRONBALL,1)) { + return 1; + } + + J3DModel* model = mpModel; + + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel->mModelData, &tevStr); + + mDoExt_modelUpdateDL(mpModel); + daMirror_c::entry(mpModel); + + cXyz pos; + + pos.set(current.pos.x, current.pos.y + 10.0f, current.pos.z); + field_0x70c = dComIfGd_setShadow(field_0x70c, 1, model, &pos, 0.0f, 1.0f, current.pos.y, + mObjAcch.GetGroundH(), mObjAcch.m_gnd, &tevStr, + 0, 2.0f, &dDlst_shadowControl_c::mSimpleTexObj); + return 1; +} + +/* 806BEAD8-806BEAF8 000278 0020+00 1/0 0/0 0/0 .text daE_FZ_Draw__FP8daE_FZ_c */ +static void daE_FZ_Draw(daE_FZ_c* i_this) { + i_this->draw(); +} + +/* 806BEAF8-806BEB04 000298 000C+00 9/9 0/0 0/0 .text setActionMode__8daE_FZ_cFii */ +void daE_FZ_c::setActionMode(int i_actionMode, int i_actionPhase) { + mActionMode = i_actionMode; + mActionPhase = i_actionPhase; +} + +/* 806BEB04-806BEBA0 0002A4 009C+00 2/2 0/0 0/0 .text setReflectAngle__8daE_FZ_cFv */ +void daE_FZ_c::setReflectAngle() { + s16 x = current.angle.y - mLastWallHitAngle; + + if (abs(x) > 18432) { + current.angle.y = (mLastWallHitAngle << 1) - (current.angle.y + 32768); + } else { + if (x > 14336) { + current.angle.y = mLastWallHitAngle + 14336; + } else { + if (x < -14336) { + current.angle.y = mLastWallHitAngle - 14336; + } + } + } +} + +/* 806BEBA0-806BEC08 000340 0068+00 2/2 0/0 0/0 .text mBoundSoundset__8daE_FZ_cFv */ +void daE_FZ_c::mBoundSoundset() { + u32 speed = speedF; + + if (speed < 1) + speed = 1; + + mCreature.startCreatureSound(Z2SE_EN_FZ_BOUND,speed,-1); +} + +/* 806BEC08-806BED34 0003A8 012C+00 2/2 0/0 0/0 .text deadnextSet__8daE_FZ_cFb */ +void daE_FZ_c::deadnextSet(bool param_0) { + health = 0; + + if (!param_0) { + if (field_0x714 != 3) { + dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + } + mCreature.startCollisionSE(Z2SE_HIT_HAMMER, 0x20); + } + + mTgCoSph.ClrTgHit(); + fopAcM_OffStatus(this,0); + attention_info.flags &= 0xfffffffb; + + mAtSph.OffAtSetBit(); + mTgCoSph.OffTgSetBit(); + + mCreature.startCreatureSound(Z2SE_EN_FZ_DEATH, 0, -1); + + speedF = 0.0f; + field_0x6fc = 0; + setActionMode(ACT_DAMAGE,0); +} + +/* 806C1BA0-806C1BA4 000008 0004+00 2/2 0/0 0/0 .bss None */ +static u8 data_806C1BA0[4]; + +/* 806C1BA4-806C1BB0 00000C 000C+00 1/1 0/0 0/0 .bss @3819 */ +static u8 lit_3819[12]; + +/* 806C1BB0-806C1BE8 000018 0038+00 8/8 0/0 0/0 .bss l_HIO */ +static daE_FZ_HIO_c l_HIO; + +/* 806BED34-806BF444 0004D4 0710+00 1/1 0/0 0/0 .text damage_check__8daE_FZ_cFv */ +// fwd ref to function at bottom of TU +static int setMidnaBindEffect(fopEn_enemy_c* param_0, Z2CreatureEnemy* param_1, cXyz* param_2, + cXyz* param_3); + +void daE_FZ_c::damage_check() { + csXyz s_pos; + cXyz pos; + cXyz pos2; + cXyz pos3; + + if (1 < health) { + scale.set(l_HIO.field_0x0c, l_HIO.field_0x0c, l_HIO.field_0x0c); + setMidnaBindEffect(this, &mCreature, ¤t.pos, &scale); + + if (field_0x712 == 0) { + pos.set(dComIfGp_getPlayer(0)->current.pos); + mStts.Move(); + + if (field_0x714 == 3) { + if (mTgCoSph.ChkTgHit()) { + mAtInfo.mpCollider = mTgCoSph.GetTgHitObj(); + + if (mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_IRON_BALL)) { + deadnextSet(false); + } + } + } else { + if (mTgCoSph.ChkTgHit()) { + mAtInfo.mpCollider = mTgCoSph.GetTgHitObj(); + + if (mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_40) || mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_BOOMERANG)) { + current.angle.y = fopAcM_searchPlayerAngleY(this) + 32768; + f32 tmp_l_hio = l_HIO.field_0x28; + speedF = tmp_l_hio; + field_0x6fc = tmp_l_hio; + mBoundSoundset(); + setActionMode(ACT_DAMAGE,1); + return; + } + + pos2 = current.pos - *mTgCoSph.GetTgHitPosP(); + pos3.set(*mTgCoSph.GetTgHitPosP()); + + s_pos.x = 0; + s_pos.y = pos2.atan2sX_Z(); + s_pos.z = 0; + + if (mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_SPINNER) || mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_ARROW)) { + current.angle.y = fopAcM_searchPlayerAngleY(this) + 32768; + f32 tmp_l_hio = l_HIO.field_0x28; + speedF = tmp_l_hio; + field_0x6fc = tmp_l_hio; + mBoundSoundset(); + dComIfGp_setHitMark(2,this,&pos3,&s_pos,0,AT_TYPE_0); + setActionMode(ACT_DAMAGE,1); + return; + } + + cXyz cStack_54(l_HIO.field_0x0c, l_HIO.field_0x0c, l_HIO.field_0x0c); + dComIfGp_particle_set(0x85ba, ¤t.pos, &shape_angle, &cStack_54); + + if (mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_HOOKSHOT)) { + health -= 20; + + if (1 < health) { + current.angle.y = fopAcM_searchPlayerAngleY(this) + 32768; + + f32 tmp_l_hio = l_HIO.field_0x28; + speedF = tmp_l_hio; + field_0x6fc = tmp_l_hio; + mCreature.startCreatureSound(Z2SE_EN_FZ_DAMAGE,0,-1); + + f32 tmp_l_hio2 = l_HIO.field_0x28; + speedF = tmp_l_hio2; + field_0x6fc = tmp_l_hio2; + setActionMode(ACT_DAMAGE,1); + dComIfGp_setHitMark(3,this,&pos3,&s_pos,0,AT_TYPE_0); + return; + } + + deadnextSet(true); + dComIfGp_setHitMark(1,this,&pos3,&s_pos,0,AT_TYPE_0); + return; + } + + if (mTgCoSph.GetTgHitObj()->ChkAtType(AT_TYPE_IRON_BALL)) { + deadnextSet(false); + mTgCoSph.ClrTgHit(); + dComIfGp_setHitMark(3,this,&pos3,&s_pos,0,AT_TYPE_0); + return; + } + + cc_at_check(this,&mAtInfo); + + if (mAtInfo.mHitStatus == 0) { + dComIfGp_setHitMark(1,this,&pos3,&s_pos,0,AT_TYPE_0); + } else { + dComIfGp_setHitMark(3,this,&pos3,&s_pos,0,AT_TYPE_0); + } + + mLastWallHitAngle = mAtInfo.mHitDirection; + setReflectAngle(); + current.angle.y += -32768; + field_0x712 = 10; + + if (1 < health) { + mCreature.startCreatureSound(Z2SE_EN_FZ_DAMAGE,0,-1); + f32 tmp_l_hio = l_HIO.field_0x28; + speedF = tmp_l_hio; + field_0x6fc = tmp_l_hio; + setActionMode(ACT_DAMAGE,1); + return; + } + + deadnextSet(true); + return; + } else { + if (mObjAcch.ChkGroundHit() && mTgCoSph.ChkCoHit()) { + fopAc_ac_c* co_hit_actor = mTgCoSph.GetCoHitAc(); + + if (fopAcM_IsActor(co_hit_actor) && fopAcM_GetName(co_hit_actor) == PROC_E_FZ) { + pos = current.pos - mTgCoSph.GetCoHitAc()->current.pos; + mTgCoSph.ClrCoHit(); + f32 co_hit_actor_speed = co_hit_actor->speedF; + + if (co_hit_actor_speed > l_HIO.field_0x28 * 0.2f || speedF > l_HIO.field_0x28 * 0.2f) { + pos = current.pos - co_hit_actor->current.pos; + mLastWallHitAngle = pos.atan2sX_Z(); + setReflectAngle(); + + f32 tmp2 = speedF; + f32 tmp = co_hit_actor->speedF; + + if (speedF > tmp) { + co_hit_actor->speedF = tmp2; + static_cast(co_hit_actor)->field_0x6fc = tmp2; + } else { + speedF = tmp; + field_0x6fc = tmp; + } + + mBoundSoundset(); + setActionMode(ACT_DAMAGE,5); + return; + } + } + } + + if (mAtSph.ChkAtHit()) { + fopAc_ac_c* player = dComIfGp_getPlayer(0); + fopAc_ac_c* at_hit_actor = mAtSph.GetAtHitAc(); + + current.angle.y = fopAcM_searchPlayerAngleY(this) + 32768; + + if (player != at_hit_actor) { + mAtSph.ClrAtHit(); + } else { + if (mAtSph.ChkAtShieldHit()) { + f32 l_hio_28 = l_HIO.field_0x28; + speedF = l_hio_28; + field_0x6fc = l_hio_28; + setActionMode(ACT_DAMAGE,1); + + } else { + if (mActionMode != ACT_DAMAGE) { + field_0x712 = 10; + setActionMode(ACT_DAMAGE,3); + } + } + mBoundSoundset(); + mAtSph.ClrAtHit(); + } + } + } + } + } + } +} + +/* 806BF444-806BF58C 000BE4 0148+00 3/3 0/0 0/0 .text way_gake_check__8daE_FZ_cFv */ +bool daE_FZ_c::way_gake_check() { + cXyz pos; + dBgS_GndChk gnd_chk; + + if (mObjAcch.ChkWallHit()) { + return false; + } + + cMtx_YrotS((MtxP)calc_mtx,current.angle.y); + + pos.x = 0.0f; + pos.y = 300.0f; + pos.z = 70.0f; + + MtxPosition(&pos,&field_0x6dc); + + field_0x6dc += current.pos; + field_0x6e8.set(field_0x6dc); + gnd_chk.SetPos(&field_0x6e8); + + field_0x6e8.y = dComIfG_Bgsp().GroundCross(&gnd_chk); + f32 tmp = field_0x6e8.y; + + if (tmp == -1e+09f) { + field_0x6e8.y = current.pos.y; + return true; + } else if (current.pos.y - tmp > 100.0f) { + return true; + } + + return false; +} + +/* 806BF58C-806BF8E8 000D2C 035C+00 1/1 0/0 0/0 .text executeWait__8daE_FZ_cFv */ +void daE_FZ_c::executeWait() { + cXyz pos; + cXyz pos2; + s16 angle; + f32 tmp = l_HIO.field_0x14; + + switch (mActionPhase) { + case 0: + if (fopAcM_wayBgCheck(this,200.0f,50.0f)) { + angle = cM_rndFX(10000.0f) + 32768.0f; + } else { + + pos2.x = home.pos.x + cM_rndFX(l_HIO.field_0x10); + pos2.y = home.pos.y; + pos2.z = home.pos.z + cM_rndFX(l_HIO.field_0x10); + + pos = pos2 - current.pos; + + angle = pos.atan2sX_Z() - current.angle.y; + + if (angle > 12288) { + angle = 12288; + } + else { + if (angle < -12288) + angle = -12288; + } + } + + mAngleFromPlayer = current.angle.y + angle; + field_0x710 = l_HIO.field_0x06 + cM_rndFX(l_HIO.field_0x30); + mActionPhase = 1; + case 1: + if (way_gake_check()) { + pos2 = current.pos - home.pos; + angle = pos2.atan2sX_Z(); + mAngleFromPlayer = angle; + current.angle.y = angle; + } + + if (field_0x714 == 4) { + field_0x710 = 10; + speedF = 0.0f; + angle = fopAcM_searchPlayerAngleY(this); + mAngleFromPlayer = angle; + current.angle.y = angle; + tmp = l_HIO.field_0x18; + } + + if (mObjAcch.ChkGroundHit() && dComIfG_Bgsp().GetPolyAtt0(mObjAcch.m_gnd) == 8) { + angle = shape_angle.y - mAngleFromPlayer; + + if (abs(angle) < 512 && field_0x710 == 0) { + cLib_addCalc0(&speedF, 0.1f, 0.1f); + } + } else { + cLib_addCalc0(&speedF,0.1f,l_HIO.field_0x2c); + } + + if (field_0x710 == 0 && speedF < 0.2f) { + angle = shape_angle.y - mAngleFromPlayer; + + if (abs(angle) < 512) { + current.angle.y = shape_angle.y; + setActionMode(ACT_MOVE,0); + } + } + } + + cLib_addCalcAngleS2(&shape_angle.y,mAngleFromPlayer,8,1280); + + if (fopAcM_searchPlayerDistance(this) <= tmp && !way_gake_check()) { + if (!fopAcM_otherBgCheck(this,dComIfGp_getPlayer(0))) { + current.angle.y = shape_angle.y; + setActionMode(ACT_ATTACK,0); + } + } +} + +/* 806BF8E8-806BFA64 001088 017C+00 1/1 0/0 0/0 .text executeMove__8daE_FZ_cFv */ +void daE_FZ_c::executeMove() { + switch (mActionPhase) { + case 0: + field_0x710 = l_HIO.field_0x08 + cM_rndFX(l_HIO.field_0x34); + mActionPhase = 1; + case 1: + cLib_addCalcAngleS2(¤t.angle.y,mAngleFromPlayer,8,256); + cLib_addCalc2(&speedF,l_HIO.field_0x1c,1.0f,3.0f); + + if (fopAcM_wayBgCheck(this, 200.0f,500.0f) != 0 || field_0x710 == 0) { + setActionMode(ACT_WAIT,0); + } + default: + if (way_gake_check()) { + speedF = 0; + setActionMode(ACT_WAIT,0); + } else { + shape_angle.y = current.angle.y; + + if (fopAcM_searchPlayerDistance(this) <= l_HIO.field_0x14) { + setActionMode(ACT_ATTACK,0); + } + } + } +} + +/* 806BFA64-806BFB60 001204 00FC+00 1/1 0/0 0/0 .text executeAttack__8daE_FZ_cFv */ +void daE_FZ_c::executeAttack() { + switch (mActionPhase) { + case 0: + cLib_addCalcAngleS2(¤t.angle.y,fopAcM_searchPlayerAngleY(this),8,0x300); + if (way_gake_check() == 0) { + cLib_addCalc2(&speedF,l_HIO.field_0x20,0.7f,1.0f); + } else { + speedF = 0.0f; + } + default: + shape_angle.y = current.angle.y; + if (!(fopAcM_searchPlayerDistance(this) >= l_HIO.field_0x10)) { + if (fopAcM_otherBgCheck(this,dComIfGp_getPlayer(0)) == 0) { + return; + } + } + } + + setActionMode(ACT_WAIT,0); +} + +/* 806BFB60-806BFF94 001300 0434+00 2/1 0/0 0/0 .text executeDamage__8daE_FZ_cFv */ +void daE_FZ_c::executeDamage() { + cXyz pos; + pos.set(l_HIO.field_0x0c, l_HIO.field_0x0c, l_HIO.field_0x0c); + + switch(mActionPhase) { + case 0: + dComIfGp_particle_set(0x85b8,¤t.pos,&shape_angle,&pos); + dComIfGp_particle_set(0x85b9,¤t.pos,&shape_angle,&pos); + + if (field_0x714 != 3) { + field_0x564 = 25; + fopAcM_createItemFromEnemyID(field_0x564,¤t.pos,-1,-1,0,0,0,0); + } else { + if (cM_rnd() < 0.2f) { + fopAcM_createItem(¤t.pos,0,-1,-1,0,0,0); + } + } + fopAcM_delete(this); + break; + case 1: + f32 tmp = l_HIO.field_0x28; + speedF = tmp; + field_0x6fc = tmp; + case 5: + mStts.SetWeight(118); + current.angle.y < 0 ? field_0x704 = 0 : field_0x704 = 1; + mActionPhase = 2; + case 2: + if (mObjAcch.ChkGroundHit() && dComIfG_Bgsp().GetPolyAtt0(mObjAcch.m_gnd) == 8) { + tmp = 1.0f; + } else { + tmp = 0.3f; + } + + cLib_addCalc0(&speedF,0.1f,tmp); + + if (field_0x704 == 0) { + s16 value = 4096.0f - (4096.0f / field_0x6fc) * (field_0x6fc - speedF); + shape_angle.y -= value; + } else { + s16 value = 4096.0f - (4096.0f / field_0x6fc) * (field_0x6fc - speedF); + shape_angle.y += value; + } + + if (mObjAcch.ChkWallHit()) { + mLastWallHitAngle = mAcchCir.GetWallAngleY(); + setReflectAngle(); + mBoundSoundset(); + } + + if (speedF < 0.3f) { + current.angle.y = shape_angle.y; + mStts.SetWeight(100); + setActionMode(ACT_WAIT,0); + } + break; + case 3: + mAngleFromPlayer = fopAcM_searchPlayerAngleY(this); + if (current.angle.y < 0) { + field_0x704 = 0; + } + else { + field_0x704 = 1; + } + tmp = l_HIO.field_0x24; + speedF = tmp; + field_0x6fc = tmp; + mActionPhase = 4; + case 4: + if (field_0x704 == 0) { + s16 value = 4096.0f - (4096.0f / field_0x6fc) * (field_0x6fc - speedF); + shape_angle.y -= value; + } + else { + s16 value = 4096.0f - (4096.0f / field_0x6fc) * (field_0x6fc - speedF); + shape_angle.y += value; + } + + cLib_addCalcAngleS2(¤t.angle.y,mAngleFromPlayer,1,512); + cLib_addCalc0(&speedF,0.1f,0.1f); + + if (mObjAcch.ChkWallHit()) { + mLastWallHitAngle = mAcchCir.GetWallAngleY(); + setReflectAngle(); + mBoundSoundset(); + } + + if (speedF < 0.2f) { + current.angle.y = shape_angle.y; + setActionMode(ACT_ATTACK,0); + } + break; + case 6: + health = 0; + if (field_0x710 == 1 || mObjAcch.ChkGroundHit()) { + mActionPhase = 0; + } + } +} + +/* 806BFF94-806C0224 001734 0290+00 1/1 0/0 0/0 .text executeRollMove__8daE_FZ_cFv */ +void daE_FZ_c::executeRollMove() { + if (fopAcM_SearchByID(fopAcM_GetLinkId(this),&mpBlizzetaActor) == 0 || !mpBlizzetaActor) return; + u32 model_no = static_cast(mpBlizzetaActor)->getModelNo(); + + if (model_no < 4 || 6 < model_no) { + fopAcM_delete(this); + return; + } + + cXyz pos; + + s16 roll_angle = static_cast(mpBlizzetaActor)->getFrizadRollAngle(); + f32 mode_rarius = static_cast(mpBlizzetaActor)->getModeRarius(); + + mode_rarius = 100.0f + mode_rarius; + if (mode_rarius < 400.0f) + mode_rarius = 400.0f; + + switch (mActionPhase) { + case 0: + field_0x704 = 0; + speedF = 0.0f; + mRadiusBase = 0; + mActionPhase = 1; + field_0x710 = (20 - field_0x715) * 2; + case 1: + if (field_0x710 == 0) { + cLib_chaseF(&mRadiusBase,0.0f,0.03f); + } + + cLib_chaseAngleS(&field_0x704,1024,16); + pos = mpBlizzetaActor->current.pos; + + pos.x += (f32)(mode_rarius * cM_ssin(roll_angle + field_0x715 * 0xccc)); + pos.z += (f32)(mode_rarius * cM_scos(roll_angle + field_0x715 * 0xccc)); + + current.pos = pos; + u32 frizad_attack = static_cast(mpBlizzetaActor)->getFrizadAttack(); + + if (frizad_attack == 3) { + mActionPhase = 2; + speedF = 60.0f; + current.angle.y = cLib_targetAngleY(&static_cast(mpBlizzetaActor)->current.pos,¤t.pos); + } + break; + case 2: + cLib_chaseF(&mRadiusBase,1.0,0.1); + cLib_chaseAngleS(&field_0x704,512,16); + + if (mObjAcch.ChkWallHit() || !mObjAcch.ChkGroundHit()) { + setActionMode(ACT_DAMAGE,0); + mCreature.startCreatureSound(Z2SE_EN_FZ_DEATH,0,-1); + return; + } + + if (mAtSph.ChkAtHit()) { + if ((fopAcM_GetName(mAtSph.GetAtHitAc()) == PROC_ALINK) || mAtSph.ChkAtShieldHit()) { + setActionMode(ACT_DAMAGE,0); + return; + } + } + } + + shape_angle.y += field_0x704; +} + +/* 806C0224-806C06DC 0019C4 04B8+00 1/1 0/0 0/0 .text action__8daE_FZ_cFv */ +void daE_FZ_c::action() { + int linkSearch; + int i; + + if (field_0x714 == 1 && mObjAcch.ChkGroundHit()) { + fopAcM_OffStatus(this, 0x4000); + field_0x714 = 0; + } + + if (!fopAcM_otherBgCheck(this, dComIfGp_getPlayer(0))) { + fopAcM_OnStatus(this, 0); + attention_info.flags |= 4; + } else { + fopAcM_OffStatus(this, 0); + attention_info.flags &= 0xfffffffb; + } + + linkSearch = false; + damage_check(); + + switch (mActionMode) { + case ACT_WAIT: + executeWait(); + break; + case ACT_MOVE: + executeMove(); + break; + case ACT_ATTACK: + executeAttack(); + linkSearch = 1; + break; + case ACT_DAMAGE: + executeDamage(); + break; + case ACT_ROLLMOVE: + executeRollMove(); + linkSearch = 1; + } + + mCreature.setLinkSearch(linkSearch); + fopAcM_posMoveF(this, mStts.GetCCMoveP()); + field_0x714 == 3 ? mAcchCir.SetWall(35.0f, 70.0f) : mAcchCir.SetWall(35.0f, 60.0f); + mObjAcch.CrrPos(dComIfG_Bgsp()); + + if (1 < health) { + u32 speed = speedF; + + if (speed < 1) + speed = 1; + + mCreature.startCreatureSoundLevel(Z2SE_EN_FZ_MOVE, speed, -1); + + cXyz mtxPos; + for (int i = 0; i < 4; i++) { + cMtx_YrotS((MtxP)calc_mtx, (current.angle.y & 0xffffc000) + (i * 0x4000)); + mtxPos.x = 0.0f; + mtxPos.y = 100.0f; + mtxPos.z = 70.0f; + MtxPosition(&mtxPos, &field_0x67c[i]); + field_0x67c[i] += current.pos; + + mtxPos.x = 0.0f; + mtxPos.y = 100.0f; + mtxPos.z = 40.0f; + MtxPosition(&mtxPos, &field_0x6ac[i]); + field_0x6ac[i] += current.pos; + } + + if (1 < health && mAcchCir.ChkWallHit()) { + if (fopAcM_GetName(dComIfG_Bgsp().GetActorPointer(mAcchCir.GetBgIndex())) != PROC_BG) { + dBgS_LinChk lin_chk; + dBgS_LinChk lin_chk2; + + for (i = 0; i < 2; i++) { + lin_chk.Set(&field_0x67c[i], &field_0x6ac[i], this); + lin_chk2.Set(&field_0x67c[i + 2], &field_0x6ac[i + 2], this); + + if (dComIfG_Bgsp().LineCross(&lin_chk)) { + if (dComIfG_Bgsp().LineCross(&lin_chk2)) { + deadnextSet(false); + break; + } + } + } + } + } + + if (field_0x714 != 3) { + if (health > 1 && !mObjAcch.ChkGroundHit()) { + dBgS_GndChk gnd_chk; + cXyz pos; + + pos.set(current.pos); + pos.y += 300.0f; + gnd_chk.SetPos(&pos); + pos.y = dComIfG_Bgsp().GroundCross(&gnd_chk); + + if (pos.y != -1e+09f) { + field_0x710 = 0; + + if (current.pos.y - pos.y > 400.0f && field_0x713 == 0) { + field_0x713 = 1; + } + } else { + field_0x710 = 0xfa; + setActionMode(ACT_DAMAGE, 6); + } + + if (field_0x713 != 0) { + field_0x713++; + + if (10 < field_0x713) { + setActionMode(ACT_DAMAGE, 6); + } + } + } else { + field_0x713 = 0; + } + } + } +} + +/* 806C06DC-806C0760 001E7C 0084+00 2/2 0/0 0/0 .text mtx_set__8daE_FZ_cFv */ +void daE_FZ_c::mtx_set() { + mDoMtx_stack_c::transS(current.pos.x,current.pos.y,current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::scaleM(l_HIO.field_0x0c,l_HIO.field_0x0c,l_HIO.field_0x0c); + mDoMtx_stack_c::scaleM(mRadiusBase,mRadiusBase,mRadiusBase); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); +} + +/* 806C0760-806C08C4 001F00 0164+00 1/1 0/0 0/0 .text cc_set__8daE_FZ_cFv */ +void daE_FZ_c::cc_set() { + cXyz pos; + cXyz pos2; + + pos.set(0.0f,60.0f,0.0f); + mDoMtx_stack_c::multVec(&pos,&eyePos); + attention_info.position = eyePos; + attention_info.position.y += 25.0f; + + mDoMtx_stack_c::copy(mpModel->getBaseTRMtx()); + + pos.set(0.0f,40.0f,0.0f); + mDoMtx_stack_c::multVec(&pos,&pos2); + + mTgCoSph.SetC(pos2); + mTgCoSph.SetR(mRadiusBase * 60.0f); + + dComIfG_Ccsp()->Set(&mTgCoSph); + + mDoMtx_stack_c::copy(mpModel->getBaseTRMtx()); + + pos.set(0.0f,25.0f,0.0f); + mDoMtx_stack_c::multVec(&pos,&pos2); + + mAtSph.SetC(pos2); + mAtSph.SetR(mRadiusBase * 0.05f); + + dComIfG_Ccsp()->Set(&mAtSph); +} + +/* 806C08C4-806C0B00 002064 023C+00 1/1 0/0 0/0 .text execute__8daE_FZ_cFv */ +s32 daE_FZ_c::execute() { + if (field_0x714 == 2) { + if (checkItemGet(IRONBALL,1) == 0) { + return 1; + } + + if (attention_info.field_0x0[2] == 0) { + attention_info.field_0x0[2] = 69; + fopAcM_SetGroup(this,2); + #if DEBUG + fopAcM_OnStatus(this,0); + #endif + attention_info.flags |= 4; + } + } + + if (field_0x710 != 0) + field_0x710 -= 1; + + if (field_0x711 != 0) + field_0x711 -= 1; + + if (field_0x712 != 0) + field_0x712 -= 1; + + action(); // set current action + mtx_set(); // update model matrix + cc_set(); // update sphere colliders + + mCreature.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + + mUserWork = current.pos - home.pos; + mUserWork *= 8000.0f; + + for (int i = 0; i < 3; i++) { + mParticleSet[i] = dComIfGp_particle_set(mParticleSet[i], ice_name[i], ¤t.pos, 0, 0); + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleSet[i]); + + if (emitter) { + mDoMtx_stack_c::copy(mpModel->getBaseTRMtx()); + mDoMtx_stack_c::transM(0.0f, 40.0f, 0.0f); + emitter->setGlobalSRTMatrix(mDoMtx_stack_c::get()); + emitter->setParticleCallBackPtr(dPa_control_c::getParticleTracePCB()); + emitter->setUserWork((u32)(&mUserWork)); + } + } + + return 1; +} + +/* 806C0B00-806C0B20 0022A0 0020+00 1/0 0/0 0/0 .text daE_FZ_Execute__FP8daE_FZ_c */ +static void daE_FZ_Execute(daE_FZ_c* i_this) { + i_this->execute(); +} + +/* 806C0B20-806C0B8C 0022C0 006C+00 0/0 0/0 1/1 .text demoDelete__8daE_FZ_cFv */ +void daE_FZ_c::demoDelete() { + for (int i = 0; i < 3; i++) { + dComIfGp_particle_levelEmitterOnEventMove(mParticleSet[i]); + } + + fopAcM_delete(this); +} + +/* 806C0B8C-806C0B94 00232C 0008+00 1/0 0/0 0/0 .text daE_FZ_IsDelete__FP8daE_FZ_c */ +static bool daE_FZ_IsDelete(daE_FZ_c* i_this) { + return true; +} + +/* 806C0B94-806C0C08 002334 0074+00 1/1 0/0 0/0 .text _delete__8daE_FZ_cFv */ +s32 daE_FZ_c::_delete() { + dComIfG_resDelete(&mPhaseReq,"E_FZ"); + + if (field_0xc21 != 0) { + data_806C1BA0[0] = 0; + } + + if (heap) { + mCreature.deleteObject(); + } + + return 1; +} + +/* 806C0C08-806C0C28 0023A8 0020+00 1/0 0/0 0/0 .text daE_FZ_Delete__FP8daE_FZ_c */ +static void daE_FZ_Delete(daE_FZ_c* i_this) { + i_this->_delete(); +} + +/* 806C0C28-806C0CB0 0023C8 0088+00 1/1 0/0 0/0 .text CreateHeap__8daE_FZ_cFv */ +s32 daE_FZ_c::CreateHeap() { + J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes("E_FZ", 3); + mpModel = mDoExt_J3DModel__create(model_data, 0, 0x11020203); + + if (mpModel == 0) { + return 0; + } + + return mInvisibleModel.create(mpModel, 1) != 0 ? 1 : 0; +} + +/* 806C0CB0-806C0CD0 002450 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ +static int useHeapInit(fopAc_ac_c* i_this) { + return static_cast(i_this)->CreateHeap(); +} + +/* 806C0CD0-806C1208 002470 0538+00 1/1 0/0 0/0 .text create__8daE_FZ_cFv */ +s32 daE_FZ_c::create() { + fopAcM_SetupActor(this,daE_FZ_c); + + s32 phase = dComIfG_resLoad(&mPhaseReq,"E_FZ"); + if (phase == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this,useHeapInit,6480)) { + return cPhs_ERROR_e; + } + if (data_806C1BA0[0] == 0) { + data_806C1BA0[0] = 1; + field_0xc21 = 1; + l_HIO.field_0x04 = -1; + } + + attention_info.flags = 4; + attention_info.field_0x0[2] = 69; + + fopAcM_SetMtx(this,mpModel->getBaseTRMtx()); + fopAcM_SetMin(this,-200.0f,-200.0f,-200.0f); + fopAcM_SetMax(this,200.0f,200.0f,200.0f); + + mStts.Init(100,0,this); + health = 80; + field_0x560 = 80; + + field_0x714 = fopAcM_GetParam(this); + field_0x715 = fopAcM_GetParam(this) >> 8; + + if (field_0x714 == 255) + field_0x714 = 0; + + if (field_0x714 == 1 || field_0x714 == 3) { + speed.y = cM_rndFX(10.0f) + 30.0f; + f32 rng = cM_rndFX(1.0f); + speedF = rng + 4.0f; + field_0x6fc = rng + 4.0f; + if (field_0x714 == 1) { + fopAcM_OnStatus(this,fopAcM_STATUS_UNK_004000); + } + } + + mObjAcch.Set(fopAcM_GetPosition_p(this),fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), 0, 0); + + if (field_0x714 == 3) { + mAcchCir.SetWall(35.0f,70.0f); + } + else { + mAcchCir.SetWall(20.0f,60.0f); + } + + mObjAcch.CrrPos(dComIfG_Bgsp()); + + mTgCoSph.Set(cc_fz_src); + mTgCoSph.SetStts(&mStts); + + mAtSph.Set(cc_fz_at_src); + mAtSph.SetStts(&mStts); + + mCreature.init(¤t.pos,&eyePos,3,1); + mCreature.setEnemyName("E_fz"); + + mAtInfo.mpSound = &mCreature; + mAtInfo.mPowerType = 1; + + gravity = -5.0f; + + shape_angle.z = 0; + shape_angle.x = 0; + + s16 random = cM_rndFX(10000.0f); + shape_angle.y = random; + current.angle.y = random; + + field_0x670.set(current.pos); + + for (int i = 0; i < 4; i++) { + field_0x67c[i].set(current.pos); + } + + if (field_0x714 == 2 && !checkItemGet(IRONBALL,1)) { + attention_info.field_0x0[2] = 0; + fopAcM_SetGroup(this,0); + fopAcM_OffStatus(this,0); + attention_info.flags &= 0xfffffffb; + } + + if (field_0x714 == 3) { + mRadiusBase = 0.0f; + attention_info.flags &= 0xfffffffb; + mAtSph.SetAtType(AT_TYPE_CSTATUE_SWING); + mAtSph.SetAtSpl(dCcG_At_Spl_UNK_1); + setActionMode(ACT_ROLLMOVE,0); + } else { + mAtSph.SetAtMtrl(2); + mRadiusBase = 1.0f; + cM_rnd() < 0.5f ? setActionMode(ACT_WAIT,0) : setActionMode(ACT_MOVE,0); + } + + mtx_set(); + } + + return phase; +} + +/* 806C13D8-806C13F8 002B78 0020+00 1/0 0/0 0/0 .text daE_FZ_Create__FP8daE_FZ_c */ +static void daE_FZ_Create(daE_FZ_c* i_this) { + i_this->create(); +} + +/* 806C14D4-806C18E8 002C74 0414+00 1/1 0/0 0/0 .text + * setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz */ +#ifndef NONMATCHING +// gave up on this one, it's a mess. +// it appears to be actually defined in f_op_actor header and is in ~60 enemy actor TUs +// so needs to be solved eventually +// bind_id issue + regalloc (could be related) +static int setMidnaBindEffect(fopEn_enemy_c* i_actorP, Z2CreatureEnemy* i_creatureP, cXyz* param_2, + cXyz* param_3) { + int darkworld_check; + daPy_py_c* player_actor = daPy_getPlayerActorClass(); + + if (player_actor->getMidnaActor() && player_actor->checkWolfLock(i_actorP)) { + cXyz pos3; + if (dKy_darkworld_check()) { + darkworld_check = 1; + } else { + darkworld_check = 0; + } + + if (i_actorP->getMidnaBindMode() == 0) { + i_actorP->setMidnaBindMode(1); + + csXyz s_pos; + PSMTXCopy(player_actor->getMidnaActor()->getMtxHairTop(), mDoMtx_stack_c::get()); + cXyz cStack_54(100.0f, 0.0f, 0.0f); + mDoMtx_stack_c::multVec(&cStack_54, &pos3); + + cXyz pos = pos3 - *param_2; + + s_pos.y = cM_atan2s(pos.x, pos.z); + s_pos.x = -cM_atan2s(pos.y, JMAFastSqrt(pos.x * pos.x + pos.z * pos.z)); + s_pos.z = 0; + + s32 room_no = fopAcM_GetRoomNo(i_actorP); + + JPABaseEmitter* emitter = dComIfGp_particle_set( + 0x29b, param_3, &i_actorP->tevStr, &s_pos, param_3, 0xff, 0, room_no, + &e_prim[darkworld_check], &e_env[darkworld_check], 0); + + if (emitter) { + emitter->setGlobalParticleHeightScale(0.01f * pos.abs()); + } + + room_no = fopAcM_GetRoomNo(i_actorP); + + dComIfGp_particle_set(0x29c, param_3, &i_actorP->tevStr, &i_actorP->shape_angle, + param_3, 0xff, 0, room_no, &e_prim[darkworld_check], + &e_env[darkworld_check], 0); + + i_creatureP->startCreatureSound(Z2SE_MIDNA_BIND_LOCK_ON, 0, -1); + } + for (int i = 0; i < 3; i++) { + u32* bind_id = i_actorP->getMidnaBindID(i); + s32 room_no = fopAcM_GetRoomNo(i_actorP); + *bind_id = dComIfGp_particle_set(*bind_id, eff_id[i], param_2, &i_actorP->tevStr, + &i_actorP->shape_angle, param_3, 0xff, 0, room_no, + &e_prim[darkworld_check], &e_env[darkworld_check], 0); + + } + + i_creatureP->startCreatureSound(Z2SE_MIDNA_BIND_LOCK_SUS, 0, -1); + return 1; + } + + i_actorP->setMidnaBindMode(0); + return 0; +} +#else +#pragma push +#pragma optimization_level 0 +#pragma optimizewithasm off +static asm int setMidnaBindEffect(fopEn_enemy_c* param_0, Z2CreatureEnemy* param_1, cXyz* param_2, + cXyz* param_3) { + nofralloc +#include "asm/rel/d/a/e/d_a_e_fz/d_a_e_fz/setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz.s" +} +#pragma pop +#endif \ No newline at end of file