mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-24 15:20:53 -04:00
276 lines
12 KiB
C++
276 lines
12 KiB
C++
#ifndef D_A_PLAYER
|
|
#define D_A_PLAYER
|
|
|
|
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_cc_d.h"
|
|
|
|
class daPy_matAnm_c : public J3DMaterialAnm {
|
|
public:
|
|
daPy_matAnm_c() { init(); }
|
|
|
|
void init();
|
|
|
|
virtual ~daPy_matAnm_c() {}
|
|
virtual void calc(J3DMaterial*) const;
|
|
|
|
static u8 m_maba_flg;
|
|
static u8 m_eye_move_flg;
|
|
static u8 m_maba_timer;
|
|
static u8 m_morf_frame;
|
|
};
|
|
|
|
class daPy_mtxFollowEcallBack_c : public dPa_levelEcallBack {
|
|
public:
|
|
void execute(JPABaseEmitter*);
|
|
void end();
|
|
void makeEmitter(u16, MtxP, const cXyz*, const cXyz*);
|
|
void makeEmitterColor(u16, MtxP, const cXyz*, const GXColor*, const GXColor*);
|
|
void setup(JPABaseEmitter* emitter, const cXyz*, const csXyz*, s8) { mpEmitter = emitter; }
|
|
|
|
/* 0x04 */ JPABaseEmitter* mpEmitter;
|
|
/* 0x08 */ MtxP mpMtx;
|
|
}; // Size: 0x0C
|
|
|
|
STATIC_ASSERT(sizeof(daPy_mtxFollowEcallBack_c) == 0x0C);
|
|
|
|
class daPy_HIO_c {
|
|
public:
|
|
daPy_HIO_c();
|
|
|
|
public:
|
|
/* 0x00 */ u8 temp[0x3F - 0x00];
|
|
}; // Size: 0x3F
|
|
|
|
class daPy_demo_c {
|
|
public:
|
|
void setDemoType(u16 pType) { mDemoType = pType; }
|
|
int getDemoType() const { return mDemoType; }
|
|
void setDemoMode(u32 mode) { mDemoMode = mode; }
|
|
u32 getDemoMode() const { return mDemoMode; }
|
|
int getParam1() const { return mParam1; }
|
|
void setTimer(s16 time) { mTimer = time; }
|
|
void decTimer() { mTimer--; }
|
|
void setOriginalDemoType() { setDemoType(3); }
|
|
void setSpecialDemoType() { setDemoType(5); }
|
|
void setSystemDemoType() { setDemoType(2); }
|
|
void setStick(f32 stick) { mStick = stick; }
|
|
void setMoveAngle(s16 angle) { mDemoMoveAngle = angle; }
|
|
s16 getMoveAngle() const { return mDemoMoveAngle; }
|
|
f32 getStick() { return mStick; }
|
|
int getParam0() const { return mParam0; }
|
|
void setParam0(int value) { mParam0 = value; }
|
|
void setParam1(int value) { mParam1 = value; }
|
|
void setParam2(int value) { mParam2 = value; }
|
|
|
|
private:
|
|
/* 0x00 */ u16 mDemoType;
|
|
/* 0x02 */ s16 mDemoMoveAngle;
|
|
/* 0x04 */ s16 mTimer;
|
|
/* 0x06 */ s16 mParam2;
|
|
/* 0x08 */ int mParam0;
|
|
/* 0x0C */ int mParam1;
|
|
/* 0x10 */ u32 mDemoMode;
|
|
/* 0x14 */ f32 mStick;
|
|
}; // Size: 0x18
|
|
|
|
class daPy_py_c : public fopAc_ac_c {
|
|
public:
|
|
enum daPy_FLG0 {
|
|
daPyFlg0_UNK10 = 0x00000010,
|
|
daPyFlg0_CUT_AT_FLG = 0x00000040,
|
|
daPyFlg0_PUSH_PULL_KEEP = 0x00000800,
|
|
daPyFlg0_UNK1000 = 0x00001000,
|
|
daPyFlg0_UNK4000 = 0x00004000,
|
|
daPyFlg0_UNK200000 = 0x00200000,
|
|
daPyFlg0_EQUIP_HEAVY_BOOTS = 0x02000000,
|
|
daPyFlg0_NO_DRAW = 0x08000000,
|
|
daPyFlg0_HEAVY_STATE = 0x40000000,
|
|
};
|
|
|
|
enum daPy_FLG1 {
|
|
daPy_FLG1_EQUIP_DRAGON_SHIELD = 0x00000001,
|
|
daPy_FLG1_NPC_CALL_COMMAND = 0x00000002,
|
|
daPy_FLG1_FORCE_VOMIT_JUMP = 0x00000010,
|
|
daPy_FLG1_NPC_NOT_CHANGE = 0x00000040,
|
|
daPy_FLG1_CONFUSE = 0x00000100,
|
|
daPy_FLG1_FREEZE_STATE = 0x00000800,
|
|
daPy_FLG1_SHIP_TACT = 0x00001000,
|
|
daPy_FLG1_USE_ARROW_EFFECT = 0x00002000,
|
|
daPy_FLG1_LETTER_READ_EYE_MOVE = 0x00004000,
|
|
daPy_FLG1_UNK8000 = 0x00008000,
|
|
daPy_FLG1_FOREST_WATER_USE = 0x00020000,
|
|
daPy_FLG1_WATER_DROP = 0x00080000,
|
|
daPy_FLG1_VINE_CATCH = 0x02000000,
|
|
daPy_FLG1_LAST_COMBO_WAIT = 0x20000000,
|
|
};
|
|
|
|
enum daPy_RFLG0 {
|
|
daPy_RFLG0_ROPE_GRAB_RIGHT_HAND = 0x00000004,
|
|
daPy_RFLG0_GRAB_UP_END = 0x00000020,
|
|
daPy_RFLG0_AUTO_JUMP_LAND = 0x00000040,
|
|
daPy_RFLG0_RIGHT_FOOT_ON_GROUND = 0x00000400,
|
|
daPy_RFLG0_LEFT_FOOT_ON_GROUND = 0x00000800,
|
|
daPy_RFLG0_FRONT_ROLL_CRASH = 0x00002000,
|
|
daPy_RFLG0_UNK4000 = 0x00004000,
|
|
daPy_RFLG0_GRAB_UP_START = 0x00008000,
|
|
daPy_RFLG0_ATTENTION_LOCK = 0x00010000,
|
|
daPy_RFLG0_HAMMER_QUAKE = 0x00020000,
|
|
daPy_RFLG0_GRAB_PUT_START = 0x00400000,
|
|
daPy_RFLG0_FAIRY_USE = 0x02000000,
|
|
// 0x00000001 and 0x00000002 set in daPy_lk_c::dProcLastCombo
|
|
// 0x00001000 set in daPy_lk_c::procCrawlMove_init, checked in checkNoCollisionCorret__9daPy_lk_cFv
|
|
// 0x04000000 set in daPy_lk_c::procShipPaddle
|
|
};
|
|
|
|
/* 0x290 */ u8 mAttackState;
|
|
/* 0x291 */ u8 field_0x291;
|
|
/* 0x292 */ u8 field_0x292[0x294 - 0x292];
|
|
/* 0x294 */ s16 mDamageWaitTimer;
|
|
/* 0x296 */ s16 mQuakeTimer;
|
|
/* 0x298 */ int field_0x298;
|
|
/* 0x29C */ u32 mNoResetFlg0;
|
|
/* 0x2A0 */ u32 mNoResetFlg1;
|
|
/* 0x2A4 */ u32 mResetFlg0;
|
|
/* 0x2A8 */ f32 field_0x2a8;
|
|
/* 0x2AC */ u8 field_0x2AC[0x2B0 - 0x2AC];
|
|
/* 0x2B0 */ f32 field_0x2b0;
|
|
/* 0x2B4 */ csXyz mBodyAngle;
|
|
/* 0x2BA */ u8 field_0x2BA[0x2BC - 0x2BA];
|
|
/* 0x2BC */ cXyz mHeadTopPos;
|
|
/* 0x2C8 */ cXyz mSwordTopPos;
|
|
/* 0x2D4 */ cXyz field_0x2d4;
|
|
/* 0x2E0 */ cXyz field_0x2e0;
|
|
/* 0x2EC */ cXyz mRopePos;
|
|
/* 0x2F8 */ cXyz field_0x2f8;
|
|
/* 0x304 */ daPy_demo_c mDemo;
|
|
|
|
u8 getCutType() const { return mAttackState; }
|
|
s16 getDamageWaitTimer() const { return mDamageWaitTimer; }
|
|
s16 getBodyAngleX() { return mBodyAngle.x; }
|
|
s16 getBodyAngleY() { return mBodyAngle.y; }
|
|
void changeDemoMoveAngle(s16 angle) { mDemo.setMoveAngle(angle); }
|
|
|
|
void onNoResetFlg0(daPy_FLG0 flag) { mNoResetFlg0 |= flag; }
|
|
void offNoResetFlg0(daPy_FLG0 flag) { mNoResetFlg0 &= ~flag; }
|
|
bool checkNoResetFlg0(daPy_FLG0 flag) const { return mNoResetFlg0 & flag; }
|
|
bool getCutAtFlg() const { return checkNoResetFlg0(daPyFlg0_CUT_AT_FLG); }
|
|
void onPushPullKeep() { onNoResetFlg0(daPyFlg0_PUSH_PULL_KEEP); }
|
|
void offPushPullKeep() { offNoResetFlg0(daPyFlg0_PUSH_PULL_KEEP); }
|
|
bool checkEquipHeavyBoots() const { return checkNoResetFlg0(daPyFlg0_EQUIP_HEAVY_BOOTS); }
|
|
void onPlayerNoDraw() { onNoResetFlg0(daPyFlg0_NO_DRAW); }
|
|
void offPlayerNoDraw() { offNoResetFlg0(daPyFlg0_NO_DRAW); }
|
|
void onHeavyState() { onNoResetFlg0(daPyFlg0_HEAVY_STATE); }
|
|
void offHeavyState() { offNoResetFlg0(daPyFlg0_HEAVY_STATE); }
|
|
|
|
void onNoResetFlg1(daPy_FLG1 flag) { mNoResetFlg1 |= flag; }
|
|
void offNoResetFlg1(daPy_FLG1 flag) { mNoResetFlg1 &= ~flag; }
|
|
bool checkNoResetFlg1(daPy_FLG1 flag) const { return mNoResetFlg1 & flag; }
|
|
bool checkEquipDragonShield() const { return checkNoResetFlg1(daPy_FLG1_EQUIP_DRAGON_SHIELD); }
|
|
void onNpcCall() { onNoResetFlg1(daPy_FLG1_NPC_CALL_COMMAND); }
|
|
void offNpcCallCommand() { offNoResetFlg1(daPy_FLG1_NPC_CALL_COMMAND); }
|
|
bool checkNpcCallCommand() const { return checkNoResetFlg1(daPy_FLG1_NPC_CALL_COMMAND); }
|
|
void onForceVomitJump() { onNoResetFlg1(daPy_FLG1_FORCE_VOMIT_JUMP); }
|
|
void onNpcNotChange() { onNoResetFlg1(daPy_FLG1_NPC_NOT_CHANGE); }
|
|
void offNpcNotChange() { offNoResetFlg1(daPy_FLG1_NPC_NOT_CHANGE); }
|
|
void onConfuse() { onNoResetFlg1(daPy_FLG1_CONFUSE); }
|
|
void offConfuse() { offNoResetFlg1(daPy_FLG1_CONFUSE); }
|
|
bool checkConfuse() const { return checkNoResetFlg1(daPy_FLG1_CONFUSE); }
|
|
bool checkFreezeState() const { return checkNoResetFlg1(daPy_FLG1_FREEZE_STATE); }
|
|
void onShipTact() { onNoResetFlg1(daPy_FLG1_SHIP_TACT); }
|
|
void offShipTact() { offNoResetFlg1(daPy_FLG1_SHIP_TACT); }
|
|
void onUseArrowEffect() { onNoResetFlg1(daPy_FLG1_USE_ARROW_EFFECT); }
|
|
void offUseArrowEffect() { offNoResetFlg1(daPy_FLG1_USE_ARROW_EFFECT); }
|
|
void onLetterReadEyeMove() { onNoResetFlg1(daPy_FLG1_LETTER_READ_EYE_MOVE); }
|
|
bool checkForestWaterUse() const { return checkNoResetFlg1(daPy_FLG1_FOREST_WATER_USE); }
|
|
void onWaterDrop() { onNoResetFlg1(daPy_FLG1_WATER_DROP); }
|
|
void onVineCatch() { onNoResetFlg1(daPy_FLG1_VINE_CATCH); }
|
|
bool checkLastComboWait() const { return checkNoResetFlg1(daPy_FLG1_LAST_COMBO_WAIT); }
|
|
|
|
void onResetFlg0(daPy_RFLG0 flag) { mResetFlg0 |= flag; }
|
|
void offNoResetFlg0(daPy_RFLG0 flag) { mResetFlg0 &= ~flag; }
|
|
bool checkResetFlg0(daPy_RFLG0 flag) const { return mResetFlg0 & flag; }
|
|
bool getRopeGrabRightHand() const { return checkResetFlg0(daPy_RFLG0_ROPE_GRAB_RIGHT_HAND); }
|
|
bool getGrabUpEnd() const { return checkResetFlg0(daPy_RFLG0_GRAB_UP_END); }
|
|
bool getAutoJumpLand() const { return checkResetFlg0(daPy_RFLG0_AUTO_JUMP_LAND); }
|
|
bool getRightFootOnGround() const { return checkResetFlg0(daPy_RFLG0_RIGHT_FOOT_ON_GROUND); }
|
|
bool getLeftFootOnGround() const { return checkResetFlg0(daPy_RFLG0_LEFT_FOOT_ON_GROUND); }
|
|
bool checkFrontRollCrash() const { return checkResetFlg0(daPy_RFLG0_FRONT_ROLL_CRASH); }
|
|
bool getGrabUpStart() const { return checkResetFlg0(daPy_RFLG0_GRAB_UP_START); }
|
|
bool checkAttentionLock() const { return checkResetFlg0(daPy_RFLG0_ATTENTION_LOCK); }
|
|
bool checkHammerQuake() const { return checkResetFlg0(daPy_RFLG0_HAMMER_QUAKE); }
|
|
bool getGrabPutStart() const { return checkResetFlg0(daPy_RFLG0_GRAB_PUT_START); }
|
|
bool checkFairyUse() const { return checkResetFlg0(daPy_RFLG0_FAIRY_USE); }
|
|
|
|
// checkSwordMiniGame__9daPy_py_cCFv
|
|
// checkNormalSwordEquip__9daPy_py_cCFv
|
|
// checkBowMiniGame__9daPy_py_cCFv
|
|
// checkUseArrowEffect__9daPy_py_cCFv
|
|
// checkNpcNotChange__9daPy_py_cCFv
|
|
// checkFinalMasterSwordEquip__9daPy_py_cCFv
|
|
// getHeavyState__9daPy_py_cFv
|
|
// checkEquipHoverBoots__9daPy_py_cCFv
|
|
// getHeavyStateAndBoots__9daPy_py_cFv
|
|
// onNpcCallCommand__9daPy_py_cFv
|
|
// onForceVomitJumpShort__9daPy_py_cFv
|
|
// onNoFallVoice__9daPy_py_cFv
|
|
// checkGrabWear__9daPy_py_cCFv
|
|
// checkArrowShoot__9daPy_py_cCFv
|
|
// onScopeCancel__9daPy_py_cFv
|
|
// getFootOnGround__9daPy_py_cCFv
|
|
|
|
virtual MtxP getLeftHandMatrix() = 0;
|
|
virtual MtxP getRightHandMatrix() = 0;
|
|
virtual f32 getGroundY() = 0;
|
|
virtual int getTactMusic() const { return -1; }
|
|
virtual int getTactTimerCancel() const { return 0; }
|
|
virtual BOOL checkPlayerGuard() const { return FALSE; }
|
|
virtual fopAc_ac_c* getGrabMissActor() { return NULL; }
|
|
virtual BOOL checkPlayerFly() const { return FALSE; }
|
|
virtual BOOL checkFrontRoll() const { return FALSE; }
|
|
virtual BOOL checkBottleSwing() const { return FALSE; }
|
|
virtual BOOL checkCutCharge() const { return FALSE; }
|
|
virtual BOOL getBokoFlamePos(cXyz*) { return FALSE; }
|
|
virtual BOOL checkTactWait() const { return FALSE; }
|
|
virtual void setTactZev(unsigned int, int, char*) {}
|
|
virtual void onDekuSpReturnFlg(u8) {}
|
|
virtual bool checkComboCutTurn() const { return false; }
|
|
virtual f32 getBaseAnimeFrameRate() = 0;
|
|
virtual f32 getBaseAnimeFrame() = 0;
|
|
virtual u32 getItemID() const { return -1; }
|
|
virtual u32 getThrowBoomerangID() const { return -1; }
|
|
virtual u32 getGrabActorID() const { return -1; }
|
|
virtual BOOL checkGrabBarrel() { return FALSE; }
|
|
virtual BOOL checkPlayerNoDraw() { return FALSE; }
|
|
virtual BOOL checkRopeTag() { return FALSE; }
|
|
virtual BOOL checkRopeReadyAnime() const { return FALSE; }
|
|
virtual void voiceStart(u32) {}
|
|
virtual void setOutPower(f32, s16, int) {}
|
|
virtual void onFrollCrashFlg(u32) {}
|
|
virtual MtxP getModelJointMtx(u16) { return NULL; }
|
|
virtual f32 getOldSpeedY() { return 0.0f; }
|
|
virtual BOOL setHookshotCarryOffset(unsigned int, const cXyz*) { return FALSE; }
|
|
virtual void setPlayerPosAndAngle(cXyz*, s16) {}
|
|
virtual void setPlayerPosAndAngle(cXyz*, csXyz*) {}
|
|
virtual void setPlayerPosAndAngle(MtxP) {}
|
|
virtual BOOL setThrowDamage(cXyz*, s16, f32, f32, int) { return FALSE; }
|
|
virtual void changeTextureAnime(u16, u16, int) {}
|
|
virtual void cancelChangeTextureAnime() {}
|
|
|
|
void getSwordTopPos() const;
|
|
void getLeftHandPos() const;
|
|
void getRopeJumpLand() const;
|
|
void checkRopeForceEnd() const;
|
|
cXyz getHeadTopPos() const { return mHeadTopPos; }
|
|
cXyz* getHeadTopPosP() { return &mHeadTopPos; }
|
|
void changePlayer(fopAc_ac_c*);
|
|
void objWindHitCheck(dCcD_Cyl*);
|
|
void setDoButtonQuake();
|
|
void stopDoButtonQuake(int);
|
|
void getRopePos() const;
|
|
f32 getSpeedF() const { return speedF; }
|
|
};
|
|
|
|
#endif /* D_A_PLAYER */
|