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