mirror of
https://github.com/zeldaret/ss
synced 2026-05-24 15:20:58 -04:00
350 lines
14 KiB
C++
350 lines
14 KiB
C++
#ifndef D_A_PLAYER_H
|
|
#define D_A_PLAYER_H
|
|
|
|
#include "common.h"
|
|
#include "d/a/d_a_base.h"
|
|
#include "d/a/d_a_itembase.h"
|
|
#include "d/a/obj/d_a_obj_base.h"
|
|
#include "m/m3d/m_anmmatclr.h"
|
|
#include "m/m_allocator.h"
|
|
#include "m/m_angle.h"
|
|
#include "m/m_mtx.h"
|
|
#include "m/m_vec.h"
|
|
#include "nw4r/g3d/res/g3d_resfile.h"
|
|
#include "toBeSorted/file_manager.h"
|
|
|
|
class dAcPy_c : public dAcObjBase_c {
|
|
// See Below for some info
|
|
// https://github.com/lepelog/skywardsword-tools/wiki/Player-Actor
|
|
public:
|
|
// These Flags are named under general guesses. Very likely may need some changes
|
|
// Correspond to mActionFlags
|
|
enum dAcPy_FLG0 {
|
|
FLG0_ON_FOOT = 0x80000000,
|
|
FLG0_USE_ITEM_0 = 0x40000000,
|
|
FLG0_USE_ITEM_1 = 0x20000000,
|
|
FLG0_UNK_GEN_MOVE = 0x10000000,
|
|
FLG0_ATTACK_MOVE = 0x8000000,
|
|
FLG0_USE_ITEM_2 = 0x4000000,
|
|
FLG0_RECOVER_ELEC = 0x2000000,
|
|
FLG0_CRAWLING = 0x1000000,
|
|
FLG0_TIGHT_ROPE = 0x800000,
|
|
FLG0_SWING_ROPE = 0x400000,
|
|
FLG0_PUSHPULL = 0x200000,
|
|
FLG0_UNK_100000 = 0x100000,
|
|
FLG0_UNK_80000 = 0x80000,
|
|
FLG0_IN_WATER = 0x40000,
|
|
FLG0_ON_LADDDER = 0x20000,
|
|
FLG0_ON_VINES = 0x10000,
|
|
FLG0_UNK_0x8000 = 0x8000,
|
|
FLG0_UNK_0x4000 = 0x4000,
|
|
FLG0_INTERATION = 0x2000,
|
|
FLG0_BASIC_ACTION = 0x1000,
|
|
FLG0_HANGING_ITEM = 0x800,
|
|
FLG0_EXTERN_CONTROL = 0x400,
|
|
FLG0_ATTACK_RELATED = 0x200,
|
|
FLG0_UNK_0x100 = 0x100,
|
|
FLG0_UNK_0x80 = 0x80,
|
|
FLG0_HANGING_LEDGE = 0x40,
|
|
FLG0_UNK_0x20 = 0x20,
|
|
FLG0_UNK_0x10 = 0x10,
|
|
FLG0_DAMAGED = 0x8,
|
|
FLG0_UNK_0x4 = 0x4,
|
|
FLG0_IN_AIR = 0x2,
|
|
FLG0_STATIONARY = 0x1,
|
|
|
|
FLG0_FLY = FLG0_TIGHT_ROPE | FLG0_SWING_ROPE | FLG0_IN_WATER | FLG0_ON_LADDDER | FLG0_ON_VINES |
|
|
FLG0_HANGING_ITEM | FLG0_HANGING_LEDGE | FLG0_UNK_0x10 | FLG0_IN_AIR,
|
|
};
|
|
|
|
enum dAcPy_RidingActor {
|
|
RIDING_NONE = 0,
|
|
RIDING_TRUCK_MINECART = 1,
|
|
RIDING_LOFTWING = 2,
|
|
RIDING_BOAT = 3,
|
|
};
|
|
|
|
dAcPy_c();
|
|
virtual ~dAcPy_c();
|
|
|
|
void setTransform(const mMtx_c &mtx, UNKWORD, UNKWORD, UNKWORD);
|
|
void setPosYRot(const mVec3_c &pos, mAng rot, UNKWORD, UNKWORD, UNKWORD);
|
|
// argument is always false in existing code, true doesn't seem to make a difference
|
|
void bonk(bool unk = false);
|
|
bool fn_80202D90(bool);
|
|
|
|
/* vt 0x080 */ virtual UNKWORD IfCurrentActionToActor(dAcBase_c *ac, UNKWORD);
|
|
/* vt 0x084 */ virtual void vt_0x084(dAcBase_c *ac, UNKWORD);
|
|
/* vt 0x088 */ virtual void set0x439F(dAcBase_c *ac, UNKWORD);
|
|
/* vt 0x08C */ virtual void set0x43DE();
|
|
/* vt 0x090 */ virtual f32 vt_0x090();
|
|
/* vt 0x094 */ virtual void relatedToUsingItem0x11();
|
|
/* vt 0x098 */ virtual void setPosRot(const mVec3_c &pos, const mAng3_c &ang, UNKWORD, UNKWORD, UNKWORD);
|
|
/* vt 0x09C */ virtual void isLiftingObject();
|
|
/* vt 0x0A0 */ virtual void isThrowingOrRollingItem();
|
|
/* vt 0x0A4 */ virtual void canThrowObject();
|
|
/* vt 0x0A8 */ virtual void canRollObject();
|
|
/* vt 0x0AC */ virtual void vt_0x0AC();
|
|
/* vt 0x0B0 */ virtual void isCarryingBomb();
|
|
/* vt 0x0B4 */ virtual void isPullingOutBomb();
|
|
/* vt 0x0B8 */ virtual void isUsingHarp();
|
|
/* vt 0x0BC */ virtual void isFinishedPlayingHarp();
|
|
/* vt 0x0C0 */ virtual void isUsingWhip();
|
|
/* vt 0x0C4 */ virtual void anotherThingWithWhip();
|
|
/* vt 0x0C8 */ virtual void somethingWithWHip();
|
|
/* vt 0x0CC */ virtual void isWhipOnObject();
|
|
/* vt 0x0D0 */ virtual void tryGrabItemWithWhip();
|
|
/* vt 0x0D4 */ virtual void someFloatWithWhip();
|
|
/* vt 0x0D8 */ virtual void getItemFromClawshotsMaybe();
|
|
/* vt 0x0DC */ virtual void vt_0x0DC(dAcBase_c *, mVec3_c &);
|
|
/* vt 0x0E0 */ virtual void isUsingBomb();
|
|
/* vt 0x0E4 */ virtual void vt_0x0E4();
|
|
/* vt 0x0E8 */ virtual void vt_0x0E8();
|
|
/* vt 0x0EC */ virtual void vt_0x0EC();
|
|
/* vt 0x0F0 */ virtual void vt_0x0F0();
|
|
/* vt 0x0F4 */ virtual void vt_0x0F4();
|
|
/* vt 0x0F8 */ virtual void vt_0x0F8();
|
|
/* vt 0x0FC */ virtual void vt_0x0FC();
|
|
/* vt 0x100 */ virtual void isCrawling();
|
|
/* vt 0x104 */ virtual void isUsingSword();
|
|
/* vt 0x108 */ virtual void isUsingMitts();
|
|
/* vt 0x10C */ virtual void isUsingShield();
|
|
/* vt 0x110 */ virtual void getTargetedActor1();
|
|
/* vt 0x114 */ virtual void somethingWithCarriedActorFlags();
|
|
/* vt 0x118 */ virtual dAcObjBase_c *getCurrentCarriedActor();
|
|
/* vt 0x11C */ virtual void checkBeetleActorReferences();
|
|
/* vt 0x120 */ virtual void getBeetleActorReferencesSize();
|
|
/* vt 0x124 */ virtual void vt_0x124();
|
|
/* vt 0x128 */ virtual void vt_0x128();
|
|
/* vt 0x12C */ virtual void vt_0x12C();
|
|
/* vt 0x130 */ virtual void isBurning();
|
|
/* vt 0x134 */ virtual void isShocked();
|
|
/* vt 0x138 */ virtual void isCursed();
|
|
/* vt 0x13C */ virtual void isSmelly();
|
|
/* vt 0x140 */ virtual void store2Floats0x4500();
|
|
/* vt 0x144 */ virtual void setActorLinkToSomething();
|
|
/* vt 0x148 */ virtual void applyDamageWithIFrames();
|
|
/* vt 0x14C */ virtual void vt_0x14C();
|
|
/* vt 0x150 */ virtual bool hasLessThanQuarterHealth(bool);
|
|
/* vt 0x154 */ virtual void vt_0x154();
|
|
/* vt 0x158 */ virtual void vt_0x158();
|
|
/* vt 0x15C */ virtual void vt_0x15C();
|
|
/* vt 0x160 */ virtual void vt_0x160();
|
|
/* vt 0x164 */ virtual void vt_0x164();
|
|
/* vt 0x168 */ virtual f32 getCurrentAnimFrame() const;
|
|
/* vt 0x16C */ virtual void getFloatIfStruggling();
|
|
/* vt 0x170 */ virtual void isSwimming();
|
|
/* vt 0x174 */ virtual void isGustBellowsBeingBlown();
|
|
/* vt 0x178 */ virtual void getPointedAngle();
|
|
/* vt 0x17C */ virtual void getBellowsPosOrOtherVec3F();
|
|
/* vt 0x180 */ virtual void setWindMillPos();
|
|
/* vt 0x184 */ virtual void isOffeset0x435eEqual0x20();
|
|
/* vt 0x188 */ virtual void getVec3F_Z();
|
|
/* vt 0x18C */ virtual void getBodyMtx(mMtx_c *out_mtx, int boneIdx);
|
|
/* vt 0x190 */ virtual void getSheathModelMatrix();
|
|
/* vt 0x194 */ virtual void getSwordModelMatrix();
|
|
/* vt 0x198 */ virtual void vt_0x198();
|
|
/* vt 0x19C */ virtual void vt_0x19C();
|
|
/* vt 0x1A0 */ virtual void vt_0x1A0();
|
|
/* vt 0x1A4 */ virtual void vt_0x1A4();
|
|
/* vt 0x1A8 */ virtual void vt_0x1A8();
|
|
/* vt 0x1AC */ virtual void vt_0x1AC();
|
|
/* vt 0x1B0 */ virtual void isItemFairyFromBugnet();
|
|
/* vt 0x1B4 */ virtual void isByte0x434eEqual7();
|
|
/* vt 0x1B8 */ virtual void canHandleGameOver();
|
|
/* vt 0x1BC */ virtual void vt_0x1BC();
|
|
/* vt 0x1C0 */ virtual void *vt_0x1C0() const;
|
|
/* vt 0x1C4 */ virtual void getActorInActorRef1();
|
|
/* vt 0x1C8 */ virtual void doesActorRef1Exist();
|
|
/* vt 0x1CC */ virtual void unlinkActorRef1();
|
|
/* vt 0x1D0 */ virtual void ifHasHealthAndSomethingElse();
|
|
/* vt 0x1D4 */ virtual void isChargingWeapon();
|
|
/* vt 0x1D8 */ virtual void isWeaponChargedFully();
|
|
/* vt 0x1DC */ virtual void didShootBow();
|
|
/* vt 0x1E0 */ virtual void vt_0x1E0();
|
|
/* vt 0x1E4 */ virtual void checkRefArrayAtIndex();
|
|
/* vt 0x1E8 */ virtual void sizeOfActorRefs_16();
|
|
/* vt 0x1EC */ virtual void vt_0x1EC();
|
|
/* vt 0x1F0 */ virtual void vt_0x1F0();
|
|
/* vt 0x1F4 */ virtual void didDiveSky_and_other();
|
|
/* vt 0x1F8 */ virtual void didDiveSky_andNotOther();
|
|
/* vt 0x1FC */ virtual void isLandingFromSailcloth();
|
|
/* vt 0x200 */ virtual void isBeingPulledFromRightClawshot();
|
|
/* vt 0x204 */ virtual void isBeingPulledByLeftClawshot();
|
|
/* vt 0x208 */ virtual void isDashing();
|
|
/* vt 0x20C */ virtual void isSliding();
|
|
/* vt 0x210 */ virtual void isSlding2();
|
|
/* vt 0x214 */ virtual void vt_0x214();
|
|
/* vt 0x218 */ virtual void isinMpPosePower();
|
|
/* vt 0x21C */ virtual void isPushingBlock();
|
|
/* vt 0x220 */ virtual void getRidingActor();
|
|
/* vt 0x224 */ virtual void isRidingBall();
|
|
/* vt 0x228 */ virtual void getRidingMinecartActor();
|
|
/* vt 0x22C */ virtual void getTurnableSwitch();
|
|
/* vt 0x230 */ virtual void vt_0x230();
|
|
/* vt 0x234 */ virtual void vt_0x234();
|
|
/* vt 0x238 */ virtual void setVecIfInFreeFall();
|
|
/* vt 0x23C */ virtual void setActorRef10();
|
|
/* vt 0x240 */ virtual void vt_0x240();
|
|
/* vt 0x244 */ virtual void vt_0x244();
|
|
/* vt 0x248 */ virtual void vt_0x248();
|
|
/* vt 0x24C */ virtual void vt_0x24C();
|
|
/* vt 0x250 */ virtual void vt_0x250();
|
|
/* vt 0x254 */ virtual void isAttackingUnderground();
|
|
/* vt 0x258 */ virtual void vt_0x258();
|
|
/* vt 0x25C */ virtual void vt_0x25C();
|
|
/* vt 0x260 */ virtual f32 vt_0x260() const;
|
|
/* vt 0x264 */ virtual void getGroosenatorIfIn();
|
|
/* vt 0x268 */ virtual void setActorRef11();
|
|
/* vt 0x26C */ virtual void doesGameOver();
|
|
/* vt 0x270 */ virtual void triggerExitRelated();
|
|
/* vt 0x274 */ virtual void vt_0x274();
|
|
/* vt 0x278 */ virtual void vt_0x278();
|
|
/* vt 0x27C */ virtual void getSwordPos();
|
|
/* vt 0x280 */ virtual void vt_0x280();
|
|
/* vt 0x284 */ virtual bool isUsingBugnet() const;
|
|
/* vt 0x288 */ virtual const mVec3_c &getBugNetPos() const;
|
|
/* vt 0x28C */ virtual bool isUsingBugnet1();
|
|
/* vt 0x290 */ virtual void bugNetCollectTreasure(u32 itemId);
|
|
/* vt 0x294 */ virtual void somethingSwitchDials();
|
|
/* vt 0x298 */ virtual void vt_0x298();
|
|
/* vt 0x29C */ virtual void getDieLargeDamageDir();
|
|
/* vt 0x2A0 */ virtual void doGameOver();
|
|
/* vt 0x2A4 */ virtual void isRunningUpWall();
|
|
/* vt 0x2A8 */ virtual void lookTowardItem();
|
|
/* vt 0x2AC */ virtual void vt_0x2AC();
|
|
/* vt 0x2B0 */ virtual void vt_0x2B0();
|
|
/* vt 0x2B4 */ virtual void triggerMoveEventMaybe();
|
|
/* vt 0x2B8 */ virtual void setActorRef9();
|
|
/* vt 0x2BC */ virtual void unlinkActorRef9();
|
|
/* vt 0x2C0 */ virtual void vt_0x2C0();
|
|
/* vt 0x2C4 */ virtual void vt_0x2C4();
|
|
/* vt 0x2C8 */ virtual void isRecovering();
|
|
/* vt 0x2CC */ virtual void isDrinkingPotion();
|
|
/* vt 0x2D0 */ virtual void isHealingShield();
|
|
/* vt 0x2D4 */ virtual void isBottleOut();
|
|
/* vt 0x2D8 */ virtual void isUsingBottle();
|
|
/* vt 0x2DC */ virtual void getShieldRegenProgressMaybe();
|
|
/* vt 0x2E0 */ virtual void vt_0x2E0();
|
|
/* vt 0x2E4 */ virtual void someDivingHrabbingStuff();
|
|
/* vt 0x2E8 */ virtual void vt_0x2E8();
|
|
/* vt 0x2EC */ virtual void isOnClawTargetMaybe();
|
|
/* vt 0x2F0 */ virtual void isMPPose();
|
|
/* vt 0x2F4 */ virtual void isOnTightRope();
|
|
/* vt 0x2F8 */ virtual void isOnVines();
|
|
/* vt 0x2FC */ virtual void alwaysRet0();
|
|
/* vt 0x300 */ virtual void canBlockAttack();
|
|
/* vt 0x304 */ virtual void vt_0x304();
|
|
/* vt 0x308 */ virtual void vt_0x308();
|
|
/* vt 0x30C */ virtual void vt_0x30C();
|
|
/* vt 0x310 */ virtual void vt_0x310();
|
|
/* vt 0x314 */ virtual void vt_0x314();
|
|
/* vt 0x318 */ virtual void vt_0x318();
|
|
|
|
/* 0x330 */ u8 unk_0x330[0x339 - 0x330];
|
|
/* 0x339 */ u8 mRidingActorType;
|
|
/* 0x33A */ u8 unk_0x33A[0x340 - 0x33A];
|
|
/* 0x340 */ u32 someFlags_0x340;
|
|
/* 0x344 */ u8 unk_0x344[0x348 - 0x344];
|
|
/* 0x348 */ u32 mSwordAndMoreStates;
|
|
/* 0x34C */ u8 unk_0x34C[0x350 - 0x34C];
|
|
/* 0x350 */ u32 someFlags_0x350;
|
|
u8 UNK_0x354[0x35C - 0x354];
|
|
/* 0x35C */ u32 mForceOrPreventActionFlags;
|
|
/* 0x360 */ UNKWORD field_0x360;
|
|
/* 0x364 */ u32 mActionFlags;
|
|
/* 0x368 */ u32 mActionFlagsCont;
|
|
/* 0x36C */ int mCurrentAction; // TODO (Document Enum)
|
|
/* 0x370 */ u8 _370[0x3C8 - 0x370];
|
|
/* 0x3C8 */ nw4r::g3d::ResFile mSwordRes;
|
|
/* 0x3CC */ u8 _0x3CC[0x5B4 - 0x3CC];
|
|
/* 0x5B4 */ m3d::anmMatClr_c mAnmMatClr;
|
|
/* 0x5E0 */ u8 _0x5E0[0x4564 - 0x5E0];
|
|
/* 0x4564 */ f32 field_0x4564;
|
|
|
|
f32 getField_0x4564() const {
|
|
return field_0x4564;
|
|
}
|
|
|
|
f32 getAnmMatClrFrame() const {
|
|
return mAnmMatClr.getFrame(0);
|
|
}
|
|
|
|
inline bool checkFlags0x340(u32 mask) const {
|
|
return (someFlags_0x340 & mask) != 0;
|
|
}
|
|
|
|
inline bool checkFlags0x350(u32 mask) const {
|
|
return (someFlags_0x350 & mask) != 0;
|
|
}
|
|
|
|
bool CheckPlayerFly() const {
|
|
return mActionFlags & FLG0_FLY;
|
|
}
|
|
|
|
int getCurrentAction() const {
|
|
return mCurrentAction;
|
|
}
|
|
|
|
bool checkCurrentAction(int action) const {
|
|
return mCurrentAction == action;
|
|
}
|
|
|
|
bool isSittingOrUnk0xAE() const {
|
|
return mCurrentAction == 0xAD || mCurrentAction == 0xAE;
|
|
}
|
|
|
|
inline bool checkSwordAndMoreStates(u32 mask) const {
|
|
return (mSwordAndMoreStates & mask) != 0;
|
|
}
|
|
|
|
inline bool checkActionFlags(u32 mask) const {
|
|
return (mActionFlags & mask) != 0;
|
|
}
|
|
inline bool checkActionFlagsCont(u32 mask) const {
|
|
return (mActionFlagsCont & mask) != 0;
|
|
}
|
|
|
|
inline u8 getRidingActorType() const {
|
|
return mRidingActorType;
|
|
}
|
|
|
|
inline bool hasvt_0x1C0() const {
|
|
return vt_0x1C0() != nullptr;
|
|
}
|
|
|
|
inline bool isAffectedByStaminaPotion() const {
|
|
return FileManager::GetInstance()->hasStaminaPotionNormal() && getRidingActorType() != RIDING_BOAT;
|
|
}
|
|
|
|
inline bool isAffectedByStaminaPotionPlus() const {
|
|
return FileManager::GetInstance()->hasStaminaPotionPlus() && getRidingActorType() != RIDING_BOAT;
|
|
}
|
|
|
|
static nw4r::g3d::ResFile getItemResFile(const char *name, mAllocator_c &allocator);
|
|
|
|
static const dAcPy_c *GetLink() {
|
|
return LINK;
|
|
}
|
|
|
|
static dAcPy_c *GetLink2() {
|
|
return LINK2;
|
|
}
|
|
|
|
static dAcPy_c *LINK;
|
|
static dAcPy_c *LINK2;
|
|
|
|
static s32 getCurrentBowType();
|
|
static s32 getCurrentSlingshotType();
|
|
static s32 getCurrentBeetleType();
|
|
static s32 getCurrentBugNetType();
|
|
|
|
static bool isItemRestrictedByBokoBase(ITEM_ID item);
|
|
|
|
static u32 getCurrentHealthCapacity();
|
|
|
|
bool canDowseProbably() const;
|
|
};
|
|
|
|
#endif
|