mirror of
https://github.com/zeldaret/ss
synced 2026-06-18 15:35:20 -04:00
dAcArrow_c 99%
This commit is contained in:
@@ -62,7 +62,18 @@ public:
|
||||
// Item select/equip/use functions [0x801E3160 - 0x801E7AD0] ?
|
||||
static s32 calcItemWheelSelection(bool reset, s32 numOptions);
|
||||
|
||||
static void addDigInteractionTarget(dAcBase_c*, f32);
|
||||
static void addDigInteractionTarget(dAcBase_c *, f32);
|
||||
static void fn_801E2FC0(const mVec3_c &v1, cBgS_PolyInfo &, f32);
|
||||
|
||||
// Slingshot, Bow functions [0x80208CA0 - 0x8020AC30]
|
||||
mAng fn_80208CA0();
|
||||
f32 fn_80208CE0(); // 50.0f
|
||||
f32 fn_80208CF0(); // 3.0f
|
||||
void fn_80209700(f32 &, f32 &, bool);
|
||||
const mVec3_c *fn_802097E0(mAng &, mAng &);
|
||||
f32 fn_802097B0(); // 50.0f
|
||||
f32 fn_802097C0(); // 1000.0f
|
||||
f32 fn_802097D0(); // 4000.0f
|
||||
|
||||
public:
|
||||
f32 getField_0x4564() const {
|
||||
|
||||
@@ -6,19 +6,18 @@
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateID.hpp"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
|
||||
class dAcArrow_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcArrow_c() : mPolyInfo(), mStateMgr(*this) {}
|
||||
dAcArrow_c() : mPolyInfo(), mStateMgr(*this), mEffects(this) {}
|
||||
virtual ~dAcArrow_c();
|
||||
|
||||
virtual bool createHeap() override;
|
||||
virtual int create() override;
|
||||
virtual int doDelete() override;
|
||||
virtual int actorExecute() override;
|
||||
virtual int draw() override;
|
||||
|
||||
@@ -30,11 +29,70 @@ public:
|
||||
|
||||
void hitCallback(cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB);
|
||||
|
||||
public:
|
||||
private:
|
||||
static cCcD_SrcGObj sCcSrcInf;
|
||||
static dCcD_SrcCps sCc1;
|
||||
static const dCcD_SrcSph sCc2;
|
||||
|
||||
static const u8 sDamageArrMaybe[];
|
||||
static u16 sCounter;
|
||||
|
||||
bool fn_8025DD20(const mVec3_c &v1, mVec3_c &v2, bool noEffect);
|
||||
void fn_8025DED0(f32 f);
|
||||
void fn_8025E160();
|
||||
void updateRoomId();
|
||||
s16 fn_8025E640();
|
||||
void fn_8025E720(dAcObjBase_c *obj, const mVec3_c &v);
|
||||
void updateMtx();
|
||||
void setInitialPosition();
|
||||
dAcObjBase_c *fn_8025E960();
|
||||
void initPickupCc();
|
||||
bool checkPickup();
|
||||
void fn_80260050(const mVec3_c &v, bool);
|
||||
void fn_802600D0(bool);
|
||||
void fn_802601C0();
|
||||
bool fn_80260250(dAcObjBase_c *o1, dAcObjBase_c *o2);
|
||||
|
||||
enum ArrowFlag_e {
|
||||
ARROW_0x1 = 1 << 0,
|
||||
ARROW_0x2 = 1 << 1,
|
||||
ARROW_INITIAL_SPAWN = 1 << 2,
|
||||
ARROW_0x8 = 1 << 3,
|
||||
ARROW_0x10 = 1 << 4,
|
||||
ARROW_0x20 = 1 << 5,
|
||||
ARROW_0x40 = 1 << 6,
|
||||
ARROW_0x80 = 1 << 7,
|
||||
ARROW_0x100 = 1 << 8,
|
||||
ARROW_0x200 = 1 << 9,
|
||||
ARROW_0x400 = 1 << 10,
|
||||
ARROW_0x800 = 1 << 11,
|
||||
ARROW_0x1000 = 1 << 12,
|
||||
ARROW_0x2000 = 1 << 13,
|
||||
ARROW_0x4000 = 1 << 14,
|
||||
ARROW_0x8000 = 1 << 15,
|
||||
ARROW_0x10000 = 1 << 16,
|
||||
};
|
||||
|
||||
void setArrowFlag(u32 f) {
|
||||
mArrowFlags |= f;
|
||||
}
|
||||
|
||||
void unsetArrowFlag(u32 f) {
|
||||
mArrowFlags &= ~f;
|
||||
}
|
||||
|
||||
bool checkArrowFlag (u32 f) const {
|
||||
return (mArrowFlags & f) != 0;
|
||||
}
|
||||
|
||||
enum ArrowType_e {
|
||||
TYPE_MSK_SLINGSHOT = 0x10,
|
||||
};
|
||||
|
||||
bool isSlingshotProjectile() const {
|
||||
return (mArrowType & TYPE_MSK_SLINGSHOT) != 0;
|
||||
}
|
||||
|
||||
/* 0x330 */ nw4r::g3d::ResFile mResFile;
|
||||
/* 0x334 */ m3d::smdl_c mModel;
|
||||
/* 0x350 */ dAcRef_c<dAcObjBase_c> mRef1;
|
||||
@@ -42,17 +100,31 @@ public:
|
||||
/* 0x4CC */ dCcD_Sph mCcSph;
|
||||
/* 0x61C */ cBgS_PolyInfo mPolyInfo; // ??
|
||||
/* 0x648 */ dEmitter_c mEffects;
|
||||
/* 0x67C */ u32 field_0x67C;
|
||||
/* 0x680 */ u8 mSubType;
|
||||
/* 0x67C */ u32 mArrowFlags;
|
||||
/* 0x680 */ u8 mArrowType;
|
||||
/* 0x681 */ u8 field_0x681;
|
||||
/* 0x682 */ u8 mDespawnTimer;
|
||||
/* 0x683 */ u8 field_0x683;
|
||||
/* 0x684 */ s16 field_0x684;
|
||||
/* 0x686 */ u8 field_0x686[0x688 - 0x686];
|
||||
/* 0x688 */ u16 field_0x688;
|
||||
/* 0x68A */ u16 field_0x68A;
|
||||
/* 0x68C */ u8 field_0x68C[0x6A8 - 0x68C];
|
||||
/* 0x688 */ s16 field_0x688;
|
||||
/* 0x68A */ s16 field_0x68A;
|
||||
/* 0x68C */ u16 mEffectId;
|
||||
/* 0x68E */ mAng field_0x68E;
|
||||
/* 0x690 */ mAng field_0x690;
|
||||
/* 0x692 */ mAng3_c field_0x692;
|
||||
/* 0x698 */ UNKWORD field_0x698;
|
||||
/* 0x69C */ f32 field_0x69C;
|
||||
/* 0x6A0 */ f32 field_0x6A0;
|
||||
/* 0x6A4 */ f32 field_0x6A4;
|
||||
/* 0x6A8 */ f32 field_0x6A8;
|
||||
/* 0x6AC */ u8 field_0x6AC[0x6F8 - 0x6AC];
|
||||
/* 0x6AC */ f32 field_0x6AC;
|
||||
/* 0x6B0 */ mVec3_c field_0x6B0;
|
||||
/* 0x6BC */ mVec3_c field_0x6BC;
|
||||
/* 0x6C8 */ mVec3_c field_0x6C8;
|
||||
/* 0x6D4 */ mVec3_c field_0x6D4;
|
||||
/* 0x6E0 */ mVec3_c field_0x6E0;
|
||||
/* 0x6EC */ mVec3_c field_0x6EC;
|
||||
/* 0x6F8 */ dAcRef_c<dAcObjBase_c> mRef2;
|
||||
/* 0x704 */ STATE_MGR_DECLARE(dAcArrow_c);
|
||||
};
|
||||
|
||||
@@ -552,6 +552,10 @@ public:
|
||||
return mSrc.mDamage;
|
||||
}
|
||||
|
||||
void SetInfo_0x0(u8 val) {
|
||||
mSrc.mInfo.field_0x0 = val;
|
||||
}
|
||||
|
||||
const cCcD_SrcGObjAt &GetSrc() const {
|
||||
return mSrc;
|
||||
}
|
||||
@@ -605,6 +609,9 @@ public:
|
||||
void Set_0x4C(u32 f) {
|
||||
field_0x4C = f;
|
||||
}
|
||||
bool Chk_0x4C(u32 f) const {
|
||||
return field_0x4C & f;
|
||||
}
|
||||
|
||||
u32 MskType(u32 mask) const {
|
||||
return mSrc.mType & mask;
|
||||
@@ -930,6 +937,10 @@ public:
|
||||
mTg.Set_0x4C(f);
|
||||
}
|
||||
|
||||
bool ChkTg_0x4C(u32 f) const {
|
||||
return mTg.Chk_0x4C(f);
|
||||
}
|
||||
|
||||
void SetAtCallback(cCcD_HitCallback cb) {
|
||||
mAt.SetCallback(cb);
|
||||
}
|
||||
@@ -981,12 +992,21 @@ public:
|
||||
void OnAt_0x40() {
|
||||
mAt.OnSPrm(0x40);
|
||||
}
|
||||
void OnAt_0x1000() {
|
||||
mAt.OnSPrm(0x1000);
|
||||
}
|
||||
void OnAt_0x2000() {
|
||||
mAt.OnSPrm(0x2000);
|
||||
}
|
||||
// Related to Beetle (no hook)
|
||||
void OnAt_0x4000() {
|
||||
mAt.OnSPrm(0x4000);
|
||||
}
|
||||
|
||||
|
||||
void SetAtInfo_0x0(u8 amount) {
|
||||
mAt.SetInfo_0x0(amount);
|
||||
}
|
||||
|
||||
void SetAtDamage(u8 amount) {
|
||||
mAt.SetAtDamage(amount);
|
||||
|
||||
@@ -55,6 +55,10 @@ public:
|
||||
return mState;
|
||||
}
|
||||
|
||||
f32 getField_0x1C() const {
|
||||
return field_0x1C;
|
||||
}
|
||||
|
||||
bool checkState(State_e state) const {
|
||||
return mState == state;
|
||||
}
|
||||
@@ -68,6 +72,21 @@ public:
|
||||
return (checkState(STATE_ACTIVE) && mType == type);
|
||||
}
|
||||
|
||||
bool hasJntCol() const {
|
||||
return field_0xA0 != nullptr;
|
||||
}
|
||||
|
||||
dJntCol_c *getJntCol() {
|
||||
return field_0xA0;
|
||||
}
|
||||
|
||||
// TODO - can we get rid of this inline?
|
||||
int getArrowOffsetPosAndAngle(
|
||||
mVec3_c const *param_1, mAng3_c const *param_2, mVec3_c *param_3, mVec3_c *param_4, bool param_5
|
||||
) const {
|
||||
return field_0xA0->getArrowOffsetPosAndAngle(param_1, param_2, param_3, param_4, param_5);
|
||||
}
|
||||
|
||||
public:
|
||||
void set(u32 flags, f32, f32, f32, void *unk);
|
||||
bool tryAttach(dAcObjBase_c *, dAcObjBase_c *, dAcRefBase_c *, ConnectionType_e, bool);
|
||||
|
||||
@@ -914,6 +914,19 @@ public:
|
||||
static mColor sGuideColor2;
|
||||
static mColor sGuideColor3;
|
||||
|
||||
// Really not sure about these - there exist virtual functions for these use cases...
|
||||
const mAng& getField_0x1268() const {
|
||||
return field_0x1268;
|
||||
}
|
||||
|
||||
const mAng& getField_0x126A() const {
|
||||
return field_0x126A;
|
||||
}
|
||||
|
||||
void getWeaponLMtx(mMtx_c &mtx) const {
|
||||
mMainMdl.getNodeWorldMtx(PLAYER_MAIN_NODE_WEAPON_L, mtx);
|
||||
}
|
||||
|
||||
protected:
|
||||
/* 0x370 */ mHeapAllocator_c mModelAllocator;
|
||||
/* 0x38C */ mHeapAllocator_c mSwordAllocator;
|
||||
|
||||
@@ -26,4 +26,18 @@ inline mVec3_c vec2ToVec3XY(const mVec2_c &v) {
|
||||
return mVec3_c(v.x, v.y, 0.0f);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Computes left x right
|
||||
*
|
||||
* @param result the result
|
||||
* @param left left operant
|
||||
* @param right right operand
|
||||
*/
|
||||
inline void vecCross(mVec3_c &result, const mVec3_c &left, const mVec3_c &right) {
|
||||
result.set(
|
||||
(left.y * right.z) - (left.z * right.y), (left.z * right.x) - (left.x * right.z),
|
||||
(left.x * right.y) - (left.y * right.x)
|
||||
);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -265,6 +265,9 @@ public:
|
||||
s16 atan2sX_Z() const {
|
||||
return cM::atan2s(x, z);
|
||||
}
|
||||
s16 atan2snX_nZ() const {
|
||||
return cM::atan2s(-x, -z);
|
||||
}
|
||||
s16 atan2snY_XZ() const {
|
||||
return cM::atan2s(-y, absXZ());
|
||||
}
|
||||
|
||||
@@ -29,6 +29,10 @@ f32 PSVECDistance(const Vec *, const Vec *);
|
||||
#define VECDistance PSVECDistance
|
||||
|
||||
void C_VECHalfAngle(const Vec *, const Vec *, Vec *);
|
||||
void C_VECReflect(const Vec *, const Vec *, Vec *);
|
||||
|
||||
#define VECHalfAngle C_VECHalfAngle
|
||||
#define VECReflect C_VECReflect
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user