mirror of
https://github.com/zeldaret/ss
synced 2026-08-04 01:03:19 -04:00
Tubo! (d_a_obj_tubo) (#95)
* begin work * fixup modifications to d_a_base header * progress * update from main again (forgor to fetch) * progress * Basically done * clean up some inlines * some at/tg hit typing and tubo naming * more naming
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
namespace cLib {
|
||||
|
||||
s32 targetAngleY(const mVec3_c &target, const mVec3_c &source);
|
||||
f32 addCalcPosXZ(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep, f32 minStep);
|
||||
|
||||
} // namespace cLib
|
||||
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
#define C_LIB_CMATH
|
||||
|
||||
#include "common.h"
|
||||
#include "egg/math/eggMath.h"
|
||||
|
||||
#include <cmath.h>
|
||||
|
||||
namespace cM {
|
||||
s16 atan2s(f32, f32);
|
||||
@@ -24,6 +27,16 @@ inline T minMaxLimit(T val, T min, T max) {
|
||||
return (T)((T)val < (T)min ? (T)min : ((T)val > (T)max ? (T)max : (T)val));
|
||||
}
|
||||
|
||||
inline bool isZero(f32 val) {
|
||||
return std::fabsf(val) <= EGG::Math<f32>::epsilon();
|
||||
}
|
||||
|
||||
// When possivle, use the `isZero` func above.
|
||||
// There are small cases where the result of fabs needs to be used again
|
||||
inline bool isLessThanZero(f32 val) {
|
||||
return val <= EGG::Math<f32>::epsilon();
|
||||
}
|
||||
|
||||
} // namespace cM
|
||||
|
||||
#endif
|
||||
|
||||
+13
-5
@@ -87,6 +87,8 @@ public:
|
||||
/* 0xE8 */ u32 field_0xe8;
|
||||
/* 0xEC */ s8 roomid;
|
||||
/* 0xED */ u8 actor_subtype;
|
||||
/* 0xEE */ u8 field_0xEE;
|
||||
/* 0xEF */ u8 field_0xEF;
|
||||
/* 0xF0 */ u32 JStudio_actor;
|
||||
/* 0xF4 */ char someStr[4];
|
||||
/* 0xF8 */ char field_0xf8[0xfc - 0xf8];
|
||||
@@ -108,7 +110,7 @@ protected:
|
||||
/* 0x5C | 8002ce90 */ virtual void unkVirtFunc_0x5C();
|
||||
/* 0x60 | 8002cea0 */ virtual void unkVirtFunc_0x60();
|
||||
/* 0x64 | 8002ceb0 */ virtual bool restorePosRotFromCopy();
|
||||
/* 0x68 | 8002db80 */ virtual void *getCurrentEventActor();
|
||||
/* 0x68 | 8002db80 */ virtual void registerInEvent();
|
||||
/* 0x6C | 8002db90 */ virtual void unkVirtFunc_0x6C();
|
||||
/* 0x70 | 8002dba0 */ virtual void doInteraction(s32);
|
||||
|
||||
@@ -160,8 +162,14 @@ public:
|
||||
return roomid;
|
||||
}
|
||||
|
||||
bool ChkProperty_0x40000000() const {
|
||||
return actor_properties & 0x40000000;
|
||||
void clearActorProperty(u32 property) {
|
||||
actor_properties &= ~property;
|
||||
}
|
||||
void setActorProperty(u32 property) {
|
||||
actor_properties |= property;
|
||||
}
|
||||
bool checkActorProperty(u32 property) const {
|
||||
return actor_properties & property;
|
||||
}
|
||||
|
||||
public:
|
||||
@@ -180,7 +188,7 @@ public:
|
||||
/* 8002cf90 */ void fillUpperParams2Byte();
|
||||
/* 8002cfa0 */ u32 getParams2_ignoreLower();
|
||||
/* 8002cfb0 */ void setParams2Upper_ignoreLower(u32 val);
|
||||
/* 8002cfc0 */ u8 getParams2UpperByte();
|
||||
/* 8002cfc0 */ int getParams2UpperByte();
|
||||
/* 8002cfd0 */ void setParams2UpperByte(u32 val);
|
||||
/* 8002cff0 */ static u32 buildParams2(u32 lower, u32 upper);
|
||||
/* 8002d010 */ u32 getParams2Lower();
|
||||
@@ -213,7 +221,7 @@ public:
|
||||
/* 8002d6d0 */ void FUN_8002d6d0();
|
||||
/* 8002d710 */ void playSoundEffect1(u16 effect);
|
||||
/* 8002d740 */ void FUN_8002d740();
|
||||
/* 8002d770 */ void FUN_8002d770();
|
||||
/* 8002d770 */ void FUN_8002d770(u16, f32);
|
||||
/* 8002d7a0 */ void FUN_8002d7a0();
|
||||
/* 8002d7d0 */ void FUN_8002d7d0();
|
||||
/* 8002d7f0 */ void FUN_8002d7f0();
|
||||
|
||||
@@ -51,6 +51,10 @@ public:
|
||||
void getItemFromBWheelItem();
|
||||
bool isStateWait();
|
||||
|
||||
static int getTotalBombCount();
|
||||
static int getTotalArrowCount();
|
||||
static int getTotalSeedCount();
|
||||
|
||||
private:
|
||||
/* 0x334 */ UNKTYPE *mpMdl; // Model has its own handling system
|
||||
/* 0x338 */ dShadowCircle_c mShdw;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define D_A_NPC_CE_FRIEND_H
|
||||
|
||||
#include "d/a/npc/d_a_npc.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
@@ -10,6 +11,8 @@ public:
|
||||
dAcNpcCeFriend_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dAcNpcCeFriend_c() {}
|
||||
|
||||
bool fn_11_17C0(dAcObjBase_c *);
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcNpcCeFriend_c);
|
||||
};
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define D_A_NPC_CE_LADY_H
|
||||
|
||||
#include "d/a/npc/d_a_npc.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
@@ -10,6 +11,9 @@ public:
|
||||
dAcNpcCeLady_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dAcNpcCeLady_c() {}
|
||||
|
||||
bool fn_12_1C20(dAcObjBase_c *);
|
||||
void fn_12_1E00(dAcObjBase_c *, bool *);
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcNpcCeLady_c);
|
||||
};
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef D_A_OBJ_BASE_H
|
||||
#define D_A_OBJ_BASE_H
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/col/c/c_m3d_g_aab.h"
|
||||
@@ -12,6 +13,9 @@
|
||||
#include "m/m_vec.h"
|
||||
#include "m/types_m.h"
|
||||
|
||||
class dAcObjBase_c;
|
||||
class dBgS_Acch;
|
||||
|
||||
// Size: 0xA8
|
||||
struct ActorCarryStruct {
|
||||
/* 0x00 */ fLiNdBa_c actorLink;
|
||||
@@ -24,14 +28,29 @@ struct ActorCarryStruct {
|
||||
/* 0x28 */ mMtx_c carryTransMtx;
|
||||
/* 0x58 */ mMtx_c field_0x58;
|
||||
/* 0x88 */ s32 isCarried;
|
||||
/* 0x8C */ u8 field_0x8C[0x10]; // mQuat_c
|
||||
/* 0x9C */ void *dtor; // ???
|
||||
/* 0x8C */ f32 field_0x8C;
|
||||
/* 0x90 */ f32 field_0x90;
|
||||
/* 0x94 */ f32 field_0x94;
|
||||
/* 0x98 */ f32 field_0x98;
|
||||
/* 0x9C */ void *dtor; // ???
|
||||
/* 0xA0 */ u32 field_0xA0;
|
||||
/* 0xA4 */ u32 field_0xA4;
|
||||
|
||||
void set(u32 flags, f32 x, f32 y, f32 z, void *unk);
|
||||
|
||||
// not real name, but sure
|
||||
void bushTpFunc(dBgS_Acch &);
|
||||
|
||||
void fn_80050EA0(dAcObjBase_c *);
|
||||
void fn_800511E0(dAcObjBase_c *);
|
||||
|
||||
bool testCarryFlag(u32 flag) {
|
||||
return (carryFlags & flag) != 0;
|
||||
}
|
||||
|
||||
bool checkCarryType(int type) const {
|
||||
return (isCarried == 1 && carryType == type);
|
||||
}
|
||||
};
|
||||
|
||||
// Ghidra has it as `unk_ActorObjectBase`
|
||||
@@ -48,7 +67,7 @@ struct LightingInfo {
|
||||
class dAcObjBase_c : public dAcBase_c {
|
||||
public:
|
||||
/* 0x0FC */ f32 yoffset;
|
||||
/* 0x100 */ char _0[4];
|
||||
/* 0x100 */ f32 field_0x100;
|
||||
/* 0x104 */ f32 unkfloat;
|
||||
/* 0x108 */ char _1[12];
|
||||
/* 0x114 */ u16 targetFiTextId;
|
||||
@@ -66,11 +85,9 @@ public:
|
||||
/* 0x1A4 */ f32 mCullingDistance;
|
||||
/* 0x1A8 */ f32 field_0x1A8;
|
||||
/* 0x1AC */ u32 mObjectActorFlags;
|
||||
|
||||
/* 0x1B0 */ u8 unk_0x1B0[0x1C0 - 0x1B0];
|
||||
|
||||
/* 0x1B0 */ f32 mField_0x1B0;
|
||||
/* 0x1B4 */ mVec3_c mField_0x1B4;
|
||||
/* 0x1C0 */ cCcD_Stts mStts;
|
||||
|
||||
/* 0x1FC */ mVec3_c mStartingPos;
|
||||
/* 0x208 */ mAng3_c mStartingRot;
|
||||
/* 0x210 */ ActorCarryStruct mActorCarryInfo;
|
||||
@@ -101,6 +118,20 @@ public:
|
||||
return fabsf(forwardSpeed) <= speed;
|
||||
}
|
||||
|
||||
bool checkYOffsetField_0x100() const {
|
||||
return yoffset <= field_0x100;
|
||||
}
|
||||
|
||||
void clearObjectProperty(u32 property) {
|
||||
mObjectActorFlags &= ~property;
|
||||
}
|
||||
void setObjectProperty(u32 property) {
|
||||
mObjectActorFlags |= property;
|
||||
}
|
||||
bool checkObjectProperty(u32 property) const {
|
||||
return mObjectActorFlags & property;
|
||||
}
|
||||
|
||||
// could be their own thing?
|
||||
/* 8002de40 */ static void *getOarcFile(const char *oarcName, const char *fileName);
|
||||
/* 8002de60 */ static void *getOarcSubEntry(const char *oarcName, const char *fileName);
|
||||
@@ -192,4 +223,22 @@ public:
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
class dAcObjRef_unk {
|
||||
public:
|
||||
dAcObjRef_unk(dAcObjBase_c *ref) : mObj(nullptr), refOwner(ref) {}
|
||||
~dAcObjRef_unk() {
|
||||
refOwner = nullptr;
|
||||
}
|
||||
|
||||
bool fn_80051780(const cCcD_Obj &);
|
||||
void fn_800051630();
|
||||
|
||||
void modifyMtx();
|
||||
|
||||
/* 0x00 */ dAcRef_c<dAcObjBase_c> mObj;
|
||||
/* 0x0C */ u8 _0C[4];
|
||||
/* 0x10 */ dAcObjBase_c *refOwner;
|
||||
/* 0x14 */ u8 _14[0x2C - 0x14];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -35,7 +35,7 @@ public:
|
||||
/* vt 0x44 */ virtual bool createHeap() override;
|
||||
/* vt 0x54 */ virtual int actorExecute() override;
|
||||
/* vt 0x5C */ virtual void unkVirtFunc_0x5C() override;
|
||||
/* vt 0x68 */ virtual void *getCurrentEventActor() override;
|
||||
/* vt 0x68 */ virtual void registerInEvent() override;
|
||||
/* vt 0x6C */ virtual void unkVirtFunc_0x6C() override;
|
||||
|
||||
STATE_FUNC_DECLARE(dAcBomb_c, Wait);
|
||||
|
||||
@@ -16,7 +16,14 @@ public:
|
||||
STATE_FUNC_DECLARE(dAcOlog_c, Fall);
|
||||
STATE_FUNC_DECLARE(dAcOlog_c, Shake);
|
||||
|
||||
u8 getField_0xE4E() const {
|
||||
return mField_0xE4E;
|
||||
}
|
||||
|
||||
private:
|
||||
// TODO: Fixup stuff
|
||||
/* 0x330 */ u8 _330[0xE4E - 0x330];
|
||||
/* 0xE4E */ u8 mField_0xE4E;
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcOlog_c);
|
||||
};
|
||||
|
||||
|
||||
@@ -1,15 +1,80 @@
|
||||
#ifndef D_A_OBJ_TUBO_H
|
||||
#define D_A_OBJ_TUBO_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/a/npc/d_a_npc_ce_friend.h"
|
||||
#include "d/a/npc/d_a_npc_ce_lady.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_s_acch.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/d_shadow.h"
|
||||
#include "d/flag/sceneflag_manager.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_quat.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/g3d_resfile.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
#include "toBeSorted/effects_struct.h"
|
||||
|
||||
class dAcOtubo_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcOtubo_c() : mStateMgr(*this, sStateID::null) {}
|
||||
dAcOtubo_c() : mStateMgr(*this, sStateID::null), mField_0x8F0(this) {}
|
||||
virtual ~dAcOtubo_c() {}
|
||||
|
||||
virtual int doDelete() override;
|
||||
virtual int draw() override;
|
||||
virtual bool createHeap() override;
|
||||
virtual int actorCreate() override;
|
||||
virtual int actorPostCreate() override;
|
||||
virtual int actorExecute() override;
|
||||
virtual void registerInEvent() override;
|
||||
|
||||
bool checkCarryType() const;
|
||||
void destroy();
|
||||
|
||||
void calcRoll();
|
||||
void adjustRoll();
|
||||
void attemptDestroy();
|
||||
void fn_272_2670();
|
||||
mVec3_c getCenter() const;
|
||||
void attemptDestroyOnWall(u32 *, const u8 *);
|
||||
void fn_272_2E60(const mVec3_c &);
|
||||
void fn_272_3020();
|
||||
void addPickupTarget();
|
||||
void adjustAngle();
|
||||
void adjustSpeed();
|
||||
bool checkSlope();
|
||||
bool fn_272_3660();
|
||||
bool checkInvalidGround();
|
||||
bool checkOnLava();
|
||||
bool checkSubmerged();
|
||||
bool fn_272_38A0();
|
||||
bool fn_272_38C0();
|
||||
bool checkRollHitMaybe();
|
||||
void playRollSound();
|
||||
|
||||
bool checkOnLog_0xE4E() const;
|
||||
|
||||
u8 getSubtype() const {
|
||||
return params & 0xF; // 0 -> Tubo00, Else -> Tubo01
|
||||
}
|
||||
|
||||
int getParams_0x3000() const {
|
||||
return params >> 12 & 0x3;
|
||||
}
|
||||
u8 getParams_0xC000() const {
|
||||
return params >> 14 & 0x3;
|
||||
}
|
||||
|
||||
u8 getSceneflag() const {
|
||||
return params >> 4 & 0xFF;
|
||||
}
|
||||
|
||||
bool checkSceneflag() {
|
||||
return SceneflagManager::sInstance->checkFlag(roomid, mSceneflag);
|
||||
}
|
||||
|
||||
STATE_FUNC_DECLARE(dAcOtubo_c, Wait);
|
||||
STATE_FUNC_DECLARE(dAcOtubo_c, Grab);
|
||||
STATE_FUNC_DECLARE(dAcOtubo_c, Put);
|
||||
@@ -17,7 +82,55 @@ public:
|
||||
STATE_FUNC_DECLARE(dAcOtubo_c, Rebirth);
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcOtubo_c);
|
||||
/* 0x330 */ nw4r::g3d::ResFile mRes;
|
||||
/* 0x334 */ m3d::smdl_c mMdl;
|
||||
/* 0x350 */ dShadowCircle_c mShdw;
|
||||
/* 0x358 */ dBgS_AcchCir mAcchCir;
|
||||
/* 0x3B4 */ dBgS_ObjAcch mObjAcch;
|
||||
/* 0x764 */ dCcD_Sph mSph;
|
||||
/* 0x8B4 */ STATE_MGR_DECLARE(dAcOtubo_c);
|
||||
/* 0x8F0 */ dAcObjRef_unk mField_0x8F0;
|
||||
/* 0x91C */ EffectsStruct_Ext mEff_0x91C;
|
||||
/* 0x964 */ dAcRef_c<dAcNpcCeLady_c> mCeLady;
|
||||
/* 0x970 */ dAcRef_c<dAcNpcCeFriend_c> mCeFriend;
|
||||
/* 0x97C */ mQuat_c mQuat_0x97C;
|
||||
/* 0x98C */ mQuat_c mQuat_0x98C;
|
||||
/* 0x99C */ mQuat_c mQuat_0x99C;
|
||||
/* 0x9AC */ mVec3_c mField_0x9AC;
|
||||
/* 0x9B8 */ mVec3_c mField_0x9B8;
|
||||
/* 0x9C4 */ mAng mField_0x9C4;
|
||||
/* 0x9C6 */ mAng mField_0x9C6;
|
||||
/* 0x9C8 */ mAng mField_0x9C8;
|
||||
/* 0x9CA */ mAng mField_0x9CA;
|
||||
/* 0x9CC */ mAng mField_0x9CC;
|
||||
/* 0x9D0 */ f32 mField_0x9D0;
|
||||
/* 0x9D4 */ f32 mField_0x9D4;
|
||||
/* 0x9D8 */ f32 mField_0x9D8;
|
||||
/* 0x9DC */ f32 mField_0x9DC;
|
||||
/* 0x9E0 */ f32 mField_0x9E0;
|
||||
/* 0x9E4 */ f32 mField_0x9E4;
|
||||
/* 0x9E8 */ u16 mTimer_0x9E8;
|
||||
/* 0x9EA */ bool mbMovingForward;
|
||||
/* 0x9EB */ bool mbField_0x9EB;
|
||||
/* 0x9EC */ bool mbField_0x9EC;
|
||||
/* 0x9ED */ bool mbField_0x9ED;
|
||||
/* 0x9EE */ bool mbField_0x9EE;
|
||||
/* 0x9EF */ bool mbField_0x9EF;
|
||||
/* 0x9F0 */ bool mbField_0x9F0;
|
||||
/* 0x9F1 */ bool mbField_0x9F1;
|
||||
/* 0x9F2 */ bool mbSubmerged;
|
||||
/* 0x9F2 */ bool mbField_0x9F3;
|
||||
/* 0x9F4 */ u8 mTimer_0x9F4;
|
||||
/* 0x9F5 */ u8 mTimer_0x9F5;
|
||||
/* 0x9F6 */ u8 mField_0x9F6;
|
||||
/* 0x9F7 */ u8 mTimer_0x9F7;
|
||||
/* 0x9F8 */ u8 mSceneflag;
|
||||
/* 0x9F9 */ u8 mSubtype;
|
||||
/* 0x9FC */ int mField_0x9FC;
|
||||
|
||||
static u8 sUnk0;
|
||||
static u32 sUnk1;
|
||||
static dCcD_SrcSph sSphSrc;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -32,7 +32,7 @@ public:
|
||||
return false;
|
||||
}
|
||||
const dAcObjBase_c *pObj = mObj.get();
|
||||
return !(pObj && pObj->ChkProperty_0x40000000());
|
||||
return !(pObj && pObj->checkActorProperty(0x40000000));
|
||||
}
|
||||
|
||||
// ??? Template seems bad
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#ifndef D_BG_S_ACCH_H
|
||||
#define D_BG_S_ACCH_H
|
||||
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_s_gnd_chk.h"
|
||||
#include "d/col/bg/d_bg_s_roof_chk.h"
|
||||
#include "d/col/bg/d_bg_s_sph_chk.h"
|
||||
@@ -11,6 +10,8 @@
|
||||
#include "d/col/c/c_m3d_g_lin.h"
|
||||
#include "d/col/c/c_m3d_g_pla.h"
|
||||
|
||||
class dAcObjBase_c;
|
||||
|
||||
class dBgS_AcchCir : public cBgS_PolyInfo {
|
||||
private:
|
||||
/* 0x2C */ cM3dGCir m_cir;
|
||||
@@ -237,6 +238,9 @@ public:
|
||||
mVec3_c *GetOldPos() {
|
||||
return mpOldPos;
|
||||
}
|
||||
f32 GetWtrGroundH() const {
|
||||
return mWtr.mGroundH;
|
||||
}
|
||||
f32 GetGroundH() const {
|
||||
return mGroundHeight;
|
||||
}
|
||||
@@ -309,6 +313,16 @@ public:
|
||||
bool Chk_0x10000000() {
|
||||
return mFlags & ACCH_FLAG_0x10000000;
|
||||
}
|
||||
|
||||
void Clr_0x20000() {
|
||||
mFlags &= ~ACCH_FLAG_0x20000;
|
||||
}
|
||||
void Set_0x20000() {
|
||||
mFlags |= ACCH_FLAG_0x20000;
|
||||
}
|
||||
bool Chk_0x20000() {
|
||||
return mFlags & ACCH_FLAG_0x20000;
|
||||
}
|
||||
void Clr_0x80000000() {
|
||||
mFlags &= ~ACCH_FLAG_0x80000000;
|
||||
}
|
||||
@@ -355,9 +369,9 @@ public:
|
||||
u32 MaskRoofHit() {
|
||||
return mFlags & ROOF_HIT;
|
||||
}
|
||||
bool ChkRoofHit() {
|
||||
return MaskRoofHit();
|
||||
}
|
||||
// bool ChkRoofHit() {
|
||||
// return MaskRoofHit();
|
||||
// }
|
||||
void OffClrSpeedY() {
|
||||
mFlags |= CLR_SPEED_Y;
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ public:
|
||||
}
|
||||
|
||||
static void ClearInstance();
|
||||
static bool CheckPos(const mVec3_c *);
|
||||
static bool CheckPos(const mVec3_c &);
|
||||
static int GetMaterial();
|
||||
static int GetPolyAtt1();
|
||||
static bool GetTriPlane(cM3dGPla *);
|
||||
|
||||
+41
-18
@@ -327,36 +327,37 @@ struct cCcD_SrcGObjTg {
|
||||
/* 0x0E */ u16 mField_0x0E;
|
||||
};
|
||||
|
||||
enum cCcD_AtType_e {
|
||||
enum dCcD_ObjAtType {
|
||||
/* 0x 0000 0001 */ AT_TYPE_0x1 = (1 << 0),
|
||||
/* 0x 0000 0002 */ AT_TYPE_0x2 = (1 << 1),
|
||||
/* 0x 0000 0002 */ AT_TYPE_SWORD = (1 << 1),
|
||||
/* 0x 0000 0004 */ AT_TYPE_0x4 = (1 << 2),
|
||||
/* 0x 0000 0008 */ AT_TYPE_0x8 = (1 << 3),
|
||||
/* 0x 0000 0008 */ AT_TYPE_PHYSICS = (1 << 3),
|
||||
/* 0x 0000 0010 */ AT_TYPE_0x10 = (1 << 4),
|
||||
/* 0x 0000 0020 */ AT_TYPE_0x20 = (1 << 5),
|
||||
/* 0x 0000 0020 */ AT_TYPE_BOMB = (1 << 5),
|
||||
/* 0x 0000 0040 */ AT_TYPE_0x40 = (1 << 6),
|
||||
/* 0x 0000 0080 */ AT_TYPE_0x80 = (1 << 7),
|
||||
/* 0x 0000 0080 */ AT_TYPE_SLINGSHOT = (1 << 7),
|
||||
/* 0x 0000 0100 */ AT_TYPE_0x100 = (1 << 8),
|
||||
/* 0x 0000 0200 */ AT_TYPE_0x200 = (1 << 9),
|
||||
/* 0x 0000 0400 */ AT_TYPE_0x400 = (1 << 10),
|
||||
/* 0x 0000 0800 */ AT_TYPE_0x800 = (1 << 11),
|
||||
/* 0x 0000 0200 */ AT_TYPE_WIND = (1 << 9),
|
||||
/* 0x 0000 0400 */ AT_TYPE_DAMAGE = (1 << 10),
|
||||
/* 0x 0000 0800 */ AT_TYPE_WHIP = (1 << 11),
|
||||
/* 0x 0000 1000 */ AT_TYPE_0x1000 = (1 << 12),
|
||||
/* 0x 0000 2000 */ AT_TYPE_0x2000 = (1 << 13),
|
||||
/* 0x 0000 4000 */ AT_TYPE_0x4000 = (1 << 14),
|
||||
/* 0x 0000 2000 */ AT_TYPE_ARROW = (1 << 13),
|
||||
/* 0x 0000 4000 */ AT_TYPE_CLAWSHOT = (1 << 14),
|
||||
/* 0x 0000 8000 */ AT_TYPE_0x8000 = (1 << 15),
|
||||
/* 0x 0001 0000 */ AT_TYPE_0x10000 = (1 << 16),
|
||||
/* 0x 0001 0000 */ AT_TYPE_BELLOWS = (1 << 16),
|
||||
/* 0x 0002 0000 */ AT_TYPE_0x20000 = (1 << 17),
|
||||
/* 0x 0004 0000 */ AT_TYPE_0x40000 = (1 << 18),
|
||||
/* 0x 0008 0000 */ AT_TYPE_0x80000 = (1 << 19),
|
||||
/* 0x 0010 0000 */ AT_TYPE_0x100000 = (1 << 20),
|
||||
/* 0x 0010 0000 */ AT_TYPE_BUBBLE = (1 << 20),
|
||||
/* 0x 0020 0000 */ AT_TYPE_0x200000 = (1 << 21),
|
||||
/* 0x 0040 0000 */ AT_TYPE_0x400000 = (1 << 22),
|
||||
/* 0x 0040 0000 */ AT_TYPE_BEETLE = (1 << 22),
|
||||
/* 0x 0080 0000 */ AT_TYPE_0x800000 = (1 << 23),
|
||||
/* 0x 0100 0000 */ AT_TYPE_BUGNET = (1 << 24),
|
||||
/* 0x 0200 0000 */ AT_TYPE_0x2000000 = (1 << 25),
|
||||
/* 0x 0400 0000 */ AT_TYPE_0x4000000 = (1 << 26),
|
||||
/* 0x 0400 0000 */ AT_TYPE_KOLOKTOS_SWORD = (1 << 26),
|
||||
/* 0x 0800 0000 */ AT_TYPE_0x8000000 = (1 << 27),
|
||||
};
|
||||
|
||||
enum cCcD_AtModifiers_e {
|
||||
/* 0x 0000 0001 */ AT_MOD_FIRE = (1 << 0),
|
||||
/* 0x 0000 0002 */ AT_MOD_0x2 = (1 << 1),
|
||||
@@ -630,9 +631,13 @@ public:
|
||||
mField_0x4B = val;
|
||||
}
|
||||
|
||||
void SetInfo_0x2(u16 val) {
|
||||
mSrc.mInfo.mField_0x2 = val;
|
||||
}
|
||||
|
||||
public:
|
||||
/* 0x1C */ cCcD_SrcGObjTg mSrc;
|
||||
/* 0x2C */ mVec3_c mField_0x2C;
|
||||
/* 0x2C */ mVec3_c mAtHitDir;
|
||||
/* 0x38 */ mVec3_c mHitPos;
|
||||
/* 0x44 */ s16 *mShieldFrontRangeYAngle;
|
||||
/* 0x48 */ s16 mShieldRange;
|
||||
@@ -737,7 +742,7 @@ public:
|
||||
dAcObjBase_c *GetAtActor();
|
||||
|
||||
bool ChkTgAtHitType(u32) const;
|
||||
u32 GetTg_0x58() const;
|
||||
u32 GetTgAtHitType() const;
|
||||
bool ChkTgBit14() const;
|
||||
u8 GetTgDamage() const;
|
||||
u16 GetTgDamageFlags() const;
|
||||
@@ -754,7 +759,7 @@ public:
|
||||
bool ChkTgBit8() const;
|
||||
u8 GetTg_0x4A() const;
|
||||
dAcObjBase_c *GetTgActor();
|
||||
const mVec3_c &GetTg_0x2C() const;
|
||||
const mVec3_c &GetTgAtHitDir() const;
|
||||
|
||||
dAcObjBase_c *GetCoActor();
|
||||
bool ChkCoBit4() const;
|
||||
@@ -780,7 +785,7 @@ public:
|
||||
mCo.OnSPrm(f);
|
||||
}
|
||||
|
||||
void SetTgFlag(u32 flag) {
|
||||
void SetTgType(u32 flag) {
|
||||
mTg.SetType(flag);
|
||||
}
|
||||
void SetAtFlag(u32 flag) {
|
||||
@@ -860,6 +865,9 @@ public:
|
||||
|
||||
// At
|
||||
|
||||
void OnAtSet() {
|
||||
mAt.OnSPrm(1);
|
||||
}
|
||||
u32 ChkAtNoMass() const {
|
||||
return mAt.MskSPrm(0x400);
|
||||
}
|
||||
@@ -878,6 +886,9 @@ public:
|
||||
|
||||
// Tg
|
||||
|
||||
void OnTgSet() {
|
||||
mTg.OnSPrm(1);
|
||||
}
|
||||
u32 GetTgGrp() const {
|
||||
return mTg.MskSPrm(0x3E);
|
||||
}
|
||||
@@ -894,9 +905,15 @@ public:
|
||||
void SetTg_0x4B(u8 val) {
|
||||
mTg.Set_0x4B(val);
|
||||
}
|
||||
void SetTgInfo_0x2(u16 val) {
|
||||
mTg.SetInfo_0x2(val);
|
||||
}
|
||||
|
||||
// Co
|
||||
|
||||
void OnCoSet() {
|
||||
mCo.OnSPrm(1);
|
||||
}
|
||||
u32 ChkCoSet2() const {
|
||||
return mCo.MskSPrm(0x800);
|
||||
}
|
||||
@@ -906,6 +923,12 @@ public:
|
||||
u32 ChkCoSameActorHit() const {
|
||||
return mCo.MskSPrm(0x1000);
|
||||
}
|
||||
void ClrCo_0x400() {
|
||||
mCo.OffSPrm(0x400);
|
||||
}
|
||||
void SetCo_0x400() {
|
||||
mCo.OnSPrm(0x400);
|
||||
}
|
||||
|
||||
/**
|
||||
* SET HIT
|
||||
|
||||
@@ -11,15 +11,11 @@ public:
|
||||
/* 0x10 */ f32 mRatio;
|
||||
cM3dGSph();
|
||||
|
||||
void SetC(const mVec3_c *);
|
||||
void SetC(const mVec3_c &);
|
||||
void Set(const mVec3_c *, f32);
|
||||
void SetR(f32);
|
||||
void SetC(f32, f32, f32);
|
||||
|
||||
void SetC(const mVec3_c &p) {
|
||||
SetC(&p);
|
||||
}
|
||||
|
||||
f32 GetYDist(f32) const;
|
||||
bool Cross(const cM3dGTri *, f32 *, mVec3_c *);
|
||||
void Clamp(const mVec3_c &, mVec3_c &) const;
|
||||
|
||||
@@ -30,6 +30,12 @@ public:
|
||||
return FileManager::sInstance->getDungeonFlagsConst() + offset;
|
||||
}
|
||||
|
||||
u16 getCounterOrFlag(u16 idx, u32 count) const {
|
||||
u16 offset = mStageIndex * 8;
|
||||
const u16 *space = FileManager::sInstance->getDungeonFlagsConst() + offset;
|
||||
return mpFlagIndex->getCounterOrFlag(idx, space, count);
|
||||
}
|
||||
|
||||
static DungeonflagManager *sInstance;
|
||||
};
|
||||
|
||||
|
||||
+9
-2
@@ -23,6 +23,10 @@ struct mAng {
|
||||
return mVal;
|
||||
}
|
||||
|
||||
s16 *ref() {
|
||||
return &mVal;
|
||||
}
|
||||
|
||||
mAng operator-() {
|
||||
return mAng(-mVal);
|
||||
}
|
||||
@@ -50,8 +54,6 @@ struct mAng {
|
||||
return nw4r::math::CosIdx(*this);
|
||||
}
|
||||
|
||||
s16 mVal;
|
||||
|
||||
f32 degree() const {
|
||||
return (360.0f / 65536.0f) * mVal;
|
||||
}
|
||||
@@ -59,6 +61,9 @@ struct mAng {
|
||||
static mAng fromDeg(f32 deg) {
|
||||
return deg * sDegToAng;
|
||||
}
|
||||
f32 degree2() const {
|
||||
return mVal * sAngToDeg;
|
||||
}
|
||||
|
||||
static s16 angle(const mVec3_c &a, const mVec3_c &b) {
|
||||
f32 rads = a.angle(b);
|
||||
@@ -99,6 +104,8 @@ struct mAng {
|
||||
return rad * (65536.0f / (2.f * M_PI));
|
||||
}
|
||||
|
||||
s16 mVal;
|
||||
|
||||
private:
|
||||
static const f32 sHalfCircleDeg;
|
||||
static const f32 sAngToDeg;
|
||||
|
||||
@@ -236,6 +236,10 @@ public:
|
||||
return cM::atan2s(x * x, z * z);
|
||||
}
|
||||
|
||||
f32 inprodXZ(const mVec3_c &other) const {
|
||||
return x * other.x + z * other.z;
|
||||
}
|
||||
|
||||
static mVec3_c Zero;
|
||||
static mVec3_c Ex;
|
||||
static mVec3_c Ey;
|
||||
|
||||
@@ -23,7 +23,7 @@ public:
|
||||
|
||||
void remove(bool);
|
||||
void fn_80029929(u16 effect, mVec3_c *pos, void *, void *, void *, void *);
|
||||
void setMtx(const mMtx_c&);
|
||||
void setMtx(const mMtx_c &);
|
||||
|
||||
bool checkField0x00() const {
|
||||
return field_0x00 != 0;
|
||||
@@ -35,4 +35,30 @@ private:
|
||||
u8 field_0x2C[0x34 - 0x2C];
|
||||
};
|
||||
|
||||
// Not sure if these belongs here, but it uses EffectsStruct
|
||||
// Related Functions in the 8002B100 area
|
||||
class EffectsStruct_Ext {
|
||||
public:
|
||||
EffectsStruct_Ext() : mField_0x00(1), mField_0x01(0) {}
|
||||
|
||||
void init(dBase_c *, f32, f32, f32);
|
||||
|
||||
void setField_0x00(u8 val) {
|
||||
mField_0x00 = val;
|
||||
}
|
||||
void setField_0x01(u8 val) {
|
||||
mField_0x01 = val;
|
||||
}
|
||||
|
||||
void fn_8002B120(f32, f32);
|
||||
|
||||
/* 0x00 */ u8 mField_0x00;
|
||||
/* 0x01 */ u8 mField_0x01;
|
||||
/* 0x04 */ f32 mField_0x04;
|
||||
/* 0x08 */ f32 mField_0x08;
|
||||
/* 0x0C */ f32 mField_0x0C;
|
||||
/* 0x10 */ EffectsStruct mEff;
|
||||
virtual ~EffectsStruct_Ext() {}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
#ifndef EVENT_MANAGER_H
|
||||
#define EVENT_MANAGER_H
|
||||
|
||||
#include "common.h"
|
||||
#include "sized_string.h"
|
||||
#include "toBeSorted/event.h"
|
||||
|
||||
class dAcBase_c;
|
||||
@@ -21,9 +23,20 @@ public:
|
||||
return isInEvent() && sInstance != nullptr && sInstance->mState != 7;
|
||||
}
|
||||
|
||||
static const char *getCurrentEventName() {
|
||||
return isInEvent() ? sInstance->mCurrentEvent.eventName : nullptr;
|
||||
}
|
||||
|
||||
static bool isCurrentEvent(const char *name) {
|
||||
return strequals(getCurrentEventName(), name);
|
||||
}
|
||||
|
||||
private:
|
||||
u8 field_0x000[0x184 - 0x000];
|
||||
int mState;
|
||||
/* 0x000 */ u8 _000[0x084 - 0x000];
|
||||
/* 0x084 */ Event mCurrentEvent;
|
||||
/* 0x0C4 */ u8 _0C4[0x184 - 0x0C4];
|
||||
/* 0x184 */ int mState;
|
||||
/* 0x18C */ u8 _18C[0x19C - 0x18C];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -5,6 +5,24 @@
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
enum SpecialItemDropTable {
|
||||
SPECIAL_ITEM_0 = 0,
|
||||
SPECIAL_ITEM_1,
|
||||
SPECIAL_ITEM_2,
|
||||
SPECIAL_ITEM_3,
|
||||
SPECIAL_ITEM_4,
|
||||
SPECIAL_ITEM_5,
|
||||
SPECIAL_ITEM_6,
|
||||
SPECIAL_ITEM_7,
|
||||
SPECIAL_ITEM_8,
|
||||
SPECIAL_ITEM_9,
|
||||
SPECIAL_ITEM_10,
|
||||
SPECIAL_ITEM_11,
|
||||
SPECIAL_ITEM_12,
|
||||
SPECIAL_ITEM_13,
|
||||
// ...
|
||||
};
|
||||
|
||||
class SpecialItemDropMgr {
|
||||
public:
|
||||
static SpecialItemDropMgr *sInstance;
|
||||
|
||||
@@ -37,6 +37,7 @@ struct TimeAreaStruct {
|
||||
/* 0x08 */ u8 field_0x08;
|
||||
|
||||
bool isNearZero() {
|
||||
// is cM3d_IsZero
|
||||
return fabsf(field_0x00) <= FLT_EPSILON;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user