mirror of https://github.com/zeldaret/tp.git
193 lines
6.6 KiB
C++
193 lines
6.6 KiB
C++
#ifndef D_A_BOOMERANG_H
|
|
#define D_A_BOOMERANG_H
|
|
|
|
#include "JSystem/J2DGraph/J2DScreen.h"
|
|
#include "d/d_particle_copoly.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
|
|
class daBoomerang_sight_c {
|
|
public:
|
|
/* 8049E0B8 */ int createHeap();
|
|
/* 8049E36C */ void initialize();
|
|
/* 8049EB64 */ int playAnime(int, int);
|
|
/* 8049EDA8 */ void initFrame(int);
|
|
/* 8049EDE8 */ void copyNumData(int);
|
|
/* 8049EEC8 */ void setSight(cXyz const*, int);
|
|
/* 8049EF60 */ void draw();
|
|
|
|
/* 804A278C */ virtual ~daBoomerang_sight_c();
|
|
|
|
u8 getReserve() const { return mReserve; }
|
|
u8 getAlpha(int i_index) { return mAlpha[i_index]; }
|
|
void offRedSight() { mRedSight = false; }
|
|
void onReserve() { mReserve = 1; }
|
|
void offReserve() { mReserve = 0; }
|
|
|
|
private:
|
|
/* 0x04 */ J2DScreen* field_0x4;
|
|
/* 0x08 */ J2DPane* field_0x8;
|
|
/* 0x0C */ J2DPane* field_0xc;
|
|
/* 0x10 */ J2DPane* field_0x10;
|
|
/* 0x14 */ J2DPane* field_0x14;
|
|
/* 0x18 */ J2DAnmTevRegKey* field_0x18;
|
|
/* 0x1C */ J2DAnmTevRegKey* field_0x1c;
|
|
/* 0x20 */ J2DScreen* field_0x20;
|
|
/* 0x24 */ J2DPane* field_0x24;
|
|
/* 0x28 */ J2DPane* field_0x28;
|
|
/* 0x2C */ J2DPane* field_0x2c;
|
|
/* 0x30 */ J2DPane* field_0x30;
|
|
/* 0x34 */ J2DAnmTevRegKey* field_0x34;
|
|
/* 0x38 */ J2DAnmTevRegKey* field_0x38;
|
|
/* 0x3C */ J2DScreen* field_0x3c;
|
|
/* 0x40 */ J2DPane* field_0x40;
|
|
/* 0x44 */ J2DPane* field_0x44;
|
|
/* 0x48 */ J2DPane* field_0x48;
|
|
/* 0x4C */ J2DPane* field_0x4c;
|
|
/* 0x50 */ J2DAnmTevRegKey* field_0x50;
|
|
/* 0x54 */ J2DAnmTevRegKey* field_0x54;
|
|
/* 0x58 */ J2DAnmColor* field_0x58;
|
|
/* 0x5C */ J2DAnmTransform* field_0x5c;
|
|
/* 0x60 */ bool mRedSight;
|
|
/* 0x61 */ u8 mReserve;
|
|
/* 0x62 */ u8 mAlpha[6];
|
|
/* 0x68 */ f32 field_0x68[6];
|
|
/* 0x80 */ f32 field_0x80[6];
|
|
/* 0x98 */ f32 field_0x98[6];
|
|
/* 0xB0 */ f32 field_0xb0[6];
|
|
/* 0xC8 */ cXyz field_0xc8[6];
|
|
}; // Size: 0x110
|
|
|
|
class daAlink_c;
|
|
|
|
/**
|
|
* @ingroup actors-items
|
|
* @class daBoomerang_c
|
|
* @brief Gale Boomerang
|
|
*
|
|
* @details Forest Temple dungeon item.
|
|
*
|
|
*/
|
|
class daBoomerang_c : public fopAc_ac_c {
|
|
public:
|
|
enum daBoomerang_FLG0 {
|
|
/* 0x001 */ FLG0_1 = 0x001,
|
|
/* 0x004 */ FLG0_UNK = 0x004,
|
|
/* 0x010 */ FLG0_10 = 0x010,
|
|
/* 0x200 */ FLG0_0x200 = 0x200,
|
|
/* 0x800 */ FLG0_LOCK_DIST_CANCEL = 0x800,
|
|
/* 0x080 */ WIND_CATCH = 0x80,
|
|
};
|
|
|
|
/* 8049F280 */ void windModelCallBack();
|
|
/* 8049F39C */ int draw();
|
|
/* 8049F5F4 */ void lockLineCallback(fopAc_ac_c*);
|
|
/* 8049F660 */ void moveLineCallback(fopAc_ac_c*);
|
|
/* 8049F710 */ void pushLockList(int);
|
|
/* 8049F818 */ void cancelLockActorBase(fopAc_ac_c*);
|
|
/* 8049F874 */ void setAimActorBase(fopAc_ac_c*);
|
|
/* 8049F8B0 */ int setLockActor(fopAc_ac_c*, int);
|
|
/* 8049F9A4 */ void resetLockActor();
|
|
/* 8049F9F0 */ void setRoomInfo();
|
|
/* 8049FAA4 */ void setKeepMatrix();
|
|
/* 8049FBAC */ void setMoveMatrix();
|
|
/* 8049FCD0 */ void setRotAngle();
|
|
/* 8049FD6C */ void setAimPos();
|
|
/* 8049FE6C */ void checkBgHit(cXyz*, cXyz*);
|
|
/* 804A006C */ JPABaseEmitter* setEffectTraceMatrix(u32*, u16);
|
|
/* 804A012C */ void setEffect();
|
|
/* 804A0874 */ void procWait();
|
|
/* 804A0F0C */ void procMove();
|
|
/* 804A1814 */ int execute();
|
|
/* 804A1BF4 */ ~daBoomerang_c();
|
|
/* 804A1EE4 */ int createHeap();
|
|
/* 804A2084 */ int create();
|
|
/* 804A230C */ daBoomerang_c();
|
|
|
|
u32 checkStateFlg0(daBoomerang_FLG0 i_flag) { return mStateFlg0 & i_flag; }
|
|
void onStateFlg0(daBoomerang_FLG0 flag) { mStateFlg0 |= flag; }
|
|
void onWindCatch() { onStateFlg0(WIND_CATCH); }
|
|
bool checkForceDelete() const { return mForceDelete; }
|
|
void onForceDelete() { mForceDelete = true; }
|
|
bool checkCharge() const { return true; }
|
|
void setThrow() { fopAcM_SetParam(this, 1); }
|
|
void setAimActor(fopAc_ac_c* i_actor) { (this->*mpSetAimActorFn)(i_actor); }
|
|
void cancelLockActor(fopAc_ac_c* i_actor) { (this->*mpCancelLockActorFn)(i_actor); }
|
|
u8 getLockReserve() const { return mSight.getReserve(); }
|
|
bool getLockCntMax() { return mLockCnt >= 5; }
|
|
void onLockDistanceCancel() { onStateFlg0(FLG0_LOCK_DIST_CANCEL); }
|
|
|
|
private:
|
|
/* 0x568 */ J3DModel* field_0x568;
|
|
/* 0x56C */ J3DModel* field_0x56c;
|
|
/* 0x570 */ J3DAnmTextureSRTKey* m_windBtk;
|
|
/* 0x574 */ mDoExt_bckAnm mBck;
|
|
/* 0x590 */ J3DModel* field_0x590;
|
|
/* 0x594 */ J3DAnmTextureSRTKey* m_waitEffBtk;
|
|
/* 0x598 */ daBoomerang_sight_c mSight;
|
|
/* 0x6A8 */ s32 field_0x6a8;
|
|
/* 0x6AC */ s32 field_0x6ac[5];
|
|
/* 0x6C0 */ fopAc_ac_c* mLockActors[5]; // Actors corresponding to the five target points
|
|
/* 0x6D4 */ u32 field_0x6d4;
|
|
/* 0x6D8 */ fopAc_ac_c* field_0x6d8;
|
|
/* 0x6DC */ cXyz mLockActorsPositions[5];
|
|
/* 0x718 */ u8 field_0x718[5];
|
|
/* 0x720 */ Z2SoundObjSimple field_0x720;
|
|
/* 0x740 */ dBgS_Acch field_0x740;
|
|
/* 0x918 */ dPaPo_c field_0x918;
|
|
/* 0x950 */ u8 mLockCnt;
|
|
/* 0x951 */ u8 field_0x951;
|
|
/* 0x952 */ u8 field_0x952;
|
|
/* 0x953 */ u8 field_0x953;
|
|
/* 0x954 */ u8 field_0x954;
|
|
/* 0x955 */ u8 field_0x955;
|
|
/* 0x956 */ bool mForceDelete;
|
|
/* 0x957 */ u8 field_0x957;
|
|
/* 0x958 */ s16 field_0x958;
|
|
/* 0x95A */ s16 field_0x95a;
|
|
/* 0x95C */ s16 field_0x95c;
|
|
/* 0x95E */ s16 field_0x95e;
|
|
/* 0x960 */ s16 field_0x960;
|
|
/* 0x962 */ s16 field_0x962;
|
|
/* 0x964 */ u32 mStateFlg0;
|
|
/* 0x968 */ u32 field_0x968;
|
|
/* 0x96C */ u32 field_0x96c;
|
|
/* 0x970 */ u32 field_0x970;
|
|
/* 0x974 */ u32 field_0x974;
|
|
/* 0x978 */ u32 field_0x978;
|
|
/* 0x97C */ u32 field_0x97c;
|
|
/* 0x980 */ f32 field_0x980;
|
|
/* 0x984 */ f32 field_0x984;
|
|
/* 0x988 */ f32 field_0x988;
|
|
/* 0x98C */ f32 field_0x98c;
|
|
/* 0x990 */ cXyz field_0x990;
|
|
/* 0x99C */ cXyz field_0x99c;
|
|
/* 0x9A8 */ f32 field_0x9a8;
|
|
/* 0x9AC */ cXyz field_0x9ac;
|
|
/* 0x9B8 */ cXyz field_0x9b8;
|
|
/* 0x9C4 */ cXyz field_0x9c4;
|
|
/* 0x9D0 */ dCcD_Stts field_0x9d0;
|
|
/* 0xA0C */ dCcD_Cps field_0xa0c;
|
|
/* 0xB50 */ dCcD_Cyl field_0xb50;
|
|
/* 0xC8C */ dBgS_BoomerangLinChk field_0xc8c;
|
|
/* 0xCFC */ dBgS_ObjLinChk field_0xcfc;
|
|
/* 0xD6C */ dBgS_ObjGndChk field_0xd6c;
|
|
/* 0xDC0 */ int (daBoomerang_c::*mpProcFn)();
|
|
/* 0xDCC */ void (daBoomerang_c::*mpSetAimActorFn)(fopAc_ac_c*);
|
|
/* 0xDD8 */ void (daBoomerang_c::*mpCancelLockActorFn)(fopAc_ac_c*);
|
|
};
|
|
|
|
STATIC_ASSERT(sizeof(daBoomerang_c) == 0xDE4);
|
|
|
|
class daBoomerang_HIO_c0 {
|
|
public:
|
|
static u16 const m_lockWaitTime;
|
|
static f32 const m_minCircleR;
|
|
static f32 const m_middleCircleR;
|
|
static f32 const m_maxCircleR;
|
|
static f32 const m_scale;
|
|
static f32 const m_lockWindScale;
|
|
};
|
|
|
|
|
|
#endif /* D_A_BOOMERANG_H */
|