d_a_e_tk2 Matching (#2399)

* d_a_e_tk2 first pass

* d_a_e_tk2 matching

* d_a_e_tk, d_a_e_tk2 cleanup
This commit is contained in:
Niklas Bauer 2025-04-19 08:57:52 +09:00 committed by GitHub
parent 0ab8dc2519
commit c5f9d8dd9f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 580 additions and 521 deletions

View File

@ -1675,7 +1675,7 @@ config.libs = [
ActorRel(Equivalent, "d_a_e_th"), # weak func order
ActorRel(MatchingFor("GZ2E01"), "d_a_e_th_ball"),
ActorRel(MatchingFor("GZ2E01"), "d_a_e_tk"),
ActorRel(NonMatching, "d_a_e_tk2"),
ActorRel(MatchingFor("GZ2E01"), "d_a_e_tk2"),
ActorRel(NonMatching, "d_a_e_tk_ball"),
ActorRel(NonMatching, "d_a_e_tt"),
ActorRel(NonMatching, "d_a_e_vt"),

View File

@ -49,7 +49,7 @@ public:
/* 0x6A1 */ s8 mTKBallSpawned;
/* 0x6A4 */ u32 mHamonSet;
/* 0x6A8 */ u8 field_0x6a8[4];
/* 0x6AC */ fpc_ProcID mpBallID;
/* 0x6AC */ fpc_ProcID mBallID;
/* 0x6B0 */ dBgS_AcchCir mAcchCir;
/* 0x6F0 */ dBgS_ObjAcch mAcch;
/* 0x8C8 */ dCcD_Stts mStts;

View File

@ -1,26 +1,72 @@
#ifndef D_A_E_TK2_H
#define D_A_E_TK2_H
#include "f_op/f_op_actor_mng.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "d/d_cc_uty.h"
#include "f_op/f_op_actor.h"
/**
* @ingroup actors-enemies
* @class e_tk2_class
* @brief Fire Toadpoli
*
* @details
*
*
* @details Fire Toadpoli in the Goron Mines Entrance.
* Armored, two-legged frogs that spit Fireballs at Link.
* They cannot swim, but will dive under the lava if Link
* gets too close. They share most of the code with the
* Water Toadpoli e_tk.
*/
class e_tk2_class : public fopEn_enemy_c {
private:
/* 0x5ac */ u8 field_0x5ac[0xa50 - 0x5ac];
public:
/* 0x5AC */ request_of_phase_process_class mPhaseReq;
/* 0x5B4 */ u8 mArg0;
/* 0x5B5 */ u8 mArg1;
/* 0x5B6 */ u8 mArg2;
/* 0x5B7 */ u8 mArg3; /* Unused */
/* 0x5B8 */ mDoExt_McaMorfSO* mpMorf;
/* 0x5BC */ int mAnim;
/* 0x5C0 */ Z2CreatureEnemy mSound;
/* 0x664 */ f32 mAnimSpeed;
/* 0x668 */ s16 mLifetime;
/* 0x66A */ s16 mAction;
/* 0x66C */ s16 mMode;
/* 0x670 */ cXyz mPos;
/* 0x67C */ s16 mSomeAngle;
/* 0x67E */ u8 field18_0x67e[2];
/* 0x680 */ s16 mPlayerAngleY;
/* 0x684 */ f32 mPlayerDistanceLimit;
/* 0x688 */ u8 field24_0x688[2];
/* 0x68A */ s16 mActionTimer[3];
/* 0x690 */ s16 mExecuteState;
/* 0x692 */ s16 mInvincibilityTimer;
/* 0x694 */ s8 mAttentionOFF;
/* 0x695 */ s8 mTKBallSpawned;
/* 0x698 */ fpc_ProcID mBallID;
/* 0x69C */ dBgS_AcchCir mAcchCir;
/* 0x6DC */ dBgS_ObjAcch mAcch;
/* 0x8B4 */ dCcD_Stts mStts;
/* 0x8F0 */ dCcD_Sph mSph;
/* 0xA28 */ dCcU_AtInfo mAtInfo;
/* 0xA4C */ bool mInitHIO;
};
STATIC_ASSERT(sizeof(e_tk2_class) == 0xa50);
STATIC_ASSERT(sizeof(e_tk2_class) == 0xA50);
class daE_TK2_HIO_c {
public:
/* 807BA56C */ daE_TK2_HIO_c();
/* 807BBD00 */ ~daE_TK2_HIO_c();
/* 807BBD00 */ virtual ~daE_TK2_HIO_c() {};
/* 0x04 */ s8 field_0x04;
/* 0x08 */ f32 mRadiusScale;
/* 0x0C */ f32 mPlayerRange1;
/* 0x10 */ f32 mPlayerRange2;
/* 0x14 */ f32 mSpeedModifier1; /* Unused */
/* 0x18 */ f32 mSpeedModifier2; /* Unused */
};
STATIC_ASSERT(sizeof(daE_TK2_HIO_c) == 0x1C);
#endif /* D_A_E_TK2_H */

View File

@ -347,7 +347,7 @@ static void e_tk_attack(e_tk_class* i_this) {
case MODE_TK_APPEAR:
if (pl_y_check(i_this)) {
if ((int)i_this->mpMorf->getFrame() == 24) {
i_this->mpBallID =
i_this->mBallID =
fopAcM_createChild(PROC_E_TK_BALL, fopAcM_GetID(i_this), 0, &i_this->eyePos,
fopAcM_GetRoomNo(i_this), &i_this->shape_angle, 0, -1, 0);
}
@ -627,7 +627,7 @@ static int daE_TK_Execute(e_tk_class* i_this) {
if (i_this->mTKBallSpawned) {
e_tk_ball_class* ball_actor =
static_cast<e_tk_ball_class*>(fopAcM_SearchByID(i_this->mpBallID));
static_cast<e_tk_ball_class*>(fopAcM_SearchByID(i_this->mBallID));
if (ball_actor != NULL) {
ball_actor->current.pos = i_this->eyePos;
ball_actor->field_0x5ac[0x31C] = 0x0;
@ -667,7 +667,6 @@ static int daE_TK_IsDelete(e_tk_class* i_this) {
/* 807B9C58-807B9CC0 001B58 0068+00 1/0 0/0 0/0 .text daE_TK_Delete__FP10e_tk_class */
static int daE_TK_Delete(e_tk_class* i_this) {
// fopAcM_GetID(i_this);
dComIfG_resDelete(&i_this->mPhaseReq, "E_tk");
if (i_this->mInitHIO) {
hioInit = false;

File diff suppressed because it is too large Load Diff