This commit is contained in:
lepelog
2026-02-01 17:36:32 +01:00
parent ab4b5ef915
commit 066967c146
9 changed files with 359 additions and 369 deletions
+1
View File
@@ -8,6 +8,7 @@ public:
static s32 GetGameFrame() {
return m_gameFrame;
}
private:
static s32 m_gameFrame;
};
+1 -1
View File
@@ -169,7 +169,7 @@ public:
return mPosition - other.mPosition;
}
void getPostionDifferenceOut(const mVec3_c &other, mVec3_c& result) const {
void getPostionDifferenceOut(const mVec3_c &other, mVec3_c &result) const {
mVec3_c diff = (other - mPosition);
result = diff;
}
+2 -2
View File
@@ -446,11 +446,11 @@ public:
return field_0x38C0;
}
const mVec3_c& getfield_0x38B4() const {
const mVec3_c &getfield_0x38B4() const {
return field_0x38B4;
}
mVec3_c& getfield_0x38C8() {
mVec3_c &getfield_0x38C8() {
return field_0x38C8;
}
+1 -1
View File
@@ -61,7 +61,7 @@ public:
/* vt 0x0C0 */ virtual bool isUsingWhip() const {
return false;
}
/* vt 0x0C4 */ virtual const mVec3_c* anotherThingWithWhip() {
/* vt 0x0C4 */ virtual const mVec3_c *anotherThingWithWhip() {
return nullptr;
}
/* vt 0x0C8 */ virtual bool somethingWithWHip() {
+71 -64
View File
@@ -36,17 +36,18 @@ public:
TG_MASS_UNK2_IS_CUT = 2,
TG_MASS_UNK2_TIMESHIFT_RELATED = 4,
};
dTgMassObjInstance(){
dTgMassObjInstance() {
reset();
}
~dTgMassObjInstance() {}
void reset();
void releaseDynamicTransform(GrassModel *param_2);
bool checkForHit(GrassModel *param2,GrassModelData *param3,u16 roomid);
bool checkForHit(u32 param_2,dCcMassS_HitInf& param_3,dAcObjBase_c* param_4,
GrassModel *param_5,GrassModelData* param_6,undefined4 roomid);
bool FUN_80278c70(u32 param_2,dCcMassS_HitInf & param_3,dAcBase_c *param_4,
GrassModel *param_5);
bool checkForHit(GrassModel *param2, GrassModelData *param3, u16 roomid);
bool checkForHit(
u32 param_2, dCcMassS_HitInf &param_3, dAcObjBase_c *param_4, GrassModel *param_5, GrassModelData *param_6,
undefined4 roomid
);
bool FUN_80278c70(u32 param_2, dCcMassS_HitInf &param_3, dAcBase_c *param_4, GrassModel *param_5);
bool handleLinkSpinAttack(GrassModel *param_2);
bool handleTimeshiftZone();
void getDrawMatrix(mMtx_c *pOut);
@@ -55,7 +56,7 @@ public:
return mSpecialItemDropId == 10;
}
// private:
// private:
/* 0x00 */ TListNode<dTgMassObjInstance> mLink;
/* 0x08 */ GXColorS10 mTevColor;
/* 0x10 */ mVec3_c mGroundHeight;
@@ -75,19 +76,18 @@ public:
// size: 0x50
class dTgMassObjTransform {
public:
dTgMassObjTransform();
~dTgMassObjTransform() {}
void update();
const mMtx_c& getMtx() const {
const mMtx_c &getMtx() const {
return mMtx;
}
void setQuat(const mQuat_c& quat) {
void setQuat(const mQuat_c &quat) {
mQuat.set(quat);
}
void setMtxFromQuat(const mQuat_c& quat) {
void setMtxFromQuat(const mQuat_c &quat) {
mMtx.fromQuat(quat);
}
@@ -107,25 +107,25 @@ public:
destroyLinkedLists();
}
void initRes(nw4r::g3d::ResMat pResMat, nw4r::g3d::ResShp pResShp);
void addToRoom(s32 room, dTgMassObjInstance* p3);
void removeFromRoom(s32 room, dTgMassObjInstance* p3);
void update(GrassModel*);
bool tryCreateLinkedLists(s32 entrycount, EGG::Heap* heap);
void addToRoom(s32 room, dTgMassObjInstance *p3);
void removeFromRoom(s32 room, dTgMassObjInstance *p3);
void update(GrassModel *);
bool tryCreateLinkedLists(s32 entrycount, EGG::Heap *heap);
void destroyLinkedLists();
void unloadRoom(GrassModel *param_2,int roomid);
void draw(f32 param_1,f32 param_2,
nw4r::math::MTX34 *param_4);
void unloadRoom(GrassModel *param_2, int roomid);
void draw(f32 param_1, f32 param_2, nw4r::math::MTX34 *param_4);
private:
/* 0x04 */ nw4r::g3d::ResMat mResMat;
/* 0x08 */ nw4r::g3d::ResShp mResShp;
/* 0x0C */ dTgMassObjInstanceList* mLinkedLists;
/* 0x0C */ dTgMassObjInstanceList *mLinkedLists;
/* 0x10 */ u16 mLinkedListsCount;
};
struct GrassModelInfo {
/* 0x00 */ char* mArcName;
/* 0x04 */ char* mModelName;
/* 0x08 */ char* mCutModelName;
/* 0x00 */ char *mArcName;
/* 0x04 */ char *mModelName;
/* 0x08 */ char *mCutModelName;
/* 0x0C */ u32 field_0x0C;
/* 0x10 */ u16 mRadius;
/* 0x12 */ u16 field_0x12;
@@ -136,42 +136,45 @@ struct GrassModelInfo {
/* 0x1B */ u8 field_0x1B; // might be padding
};
struct GrassModelNames {
/* 0x00 */ char* mArcName;
/* 0x04 */ char* mModelName;
/* 0x08 */ char* mCutModelName;
/* 0x00 */ char *mArcName;
/* 0x04 */ char *mModelName;
/* 0x08 */ char *mCutModelName;
};
class GrassModel : public m3d::proc_c {
public:
GrassModel() : mpModelData(nullptr), mInstanceList(nullptr), mStaticTransformationList(nullptr), mDynamicTransformationList(nullptr), mCutCounter(0) {}
GrassModel()
: mpModelData(nullptr),
mInstanceList(nullptr),
mStaticTransformationList(nullptr),
mDynamicTransformationList(nullptr),
mCutCounter(0) {}
/* vt 0x08 */ virtual ~GrassModel() {
remove();
}
bool
setModelInfo(f32 radius,f32 param_2,int param_4,
s32 roomCount,u16 instanceListLength,u16 staticTransformationListLength,int dynamicTransformationListLength,
undefined1 param_9,s32 opaDrawPrio,u32 xluDrawPrio,mHeapAllocator_c *allocator);
bool
spawnSingleGrass(int modelSubtype,u16 roomid,mVec3_c *groundHeight,
u16 yRotation,s32 specialItemDropId,int affectedByTimeshift,int activeInPresent,
s32 massObjSubtype,u8 lightingCode);
bool setModelInfo(
f32 radius, f32 param_2, int param_4, s32 roomCount, u16 instanceListLength, u16 staticTransformationListLength,
int dynamicTransformationListLength, undefined1 param_9, s32 opaDrawPrio, u32 xluDrawPrio,
mHeapAllocator_c *allocator
);
bool spawnSingleGrass(
int modelSubtype, u16 roomid, mVec3_c *groundHeight, u16 yRotation, s32 specialItemDropId,
int affectedByTimeshift, int activeInPresent, s32 massObjSubtype, u8 lightingCode
);
void addToFreeInstances(dTgMassObjInstance *param_2);
bool addToRoom(u32 param2, s32 roomid, dTgMassObjInstance* param4);
bool addToRoom(u32 param2, s32 roomid, dTgMassObjInstance *param4);
void unloadRoom(u16 roomid);
void initResForModel(s32 param_2,nw4r::g3d::ResMat pResMat,nw4r::g3d::ResShp pResShp);
dTgMassObjTransform* aquireTransform();
void initResForModel(s32 param_2, nw4r::g3d::ResMat pResMat, nw4r::g3d::ResShp pResShp);
dTgMassObjTransform *aquireTransform();
void update();
void releaseTransform(dTgMassObjTransform*);
void setModelInfo(const GrassModelInfo* modelInfo, mHeapAllocator_c * heap) {
void releaseTransform(dTgMassObjTransform *);
void setModelInfo(const GrassModelInfo *modelInfo, mHeapAllocator_c *heap) {
setModelInfo(
modelInfo->mRadius, modelInfo->field_0x0C,
modelInfo->field_0x12, 0x3F,
modelInfo->mInstanceCount, modelInfo->mStaticTransformCount,
modelInfo->mDynamicTransformCount, (f32)modelInfo->field_0x1A,
0x7F, 0xFFFFFFFF, heap
);
modelInfo->mRadius, modelInfo->field_0x0C, modelInfo->field_0x12, 0x3F, modelInfo->mInstanceCount,
modelInfo->mStaticTransformCount, modelInfo->mDynamicTransformCount, (f32)modelInfo->field_0x1A, 0x7F,
0xFFFFFFFF, heap
);
}
void setRadius(f32 r) {
@@ -191,14 +194,14 @@ public:
return mDynamicTransformationListLength;
}
dTgMassObjInstanceList& getFree() {
dTgMassObjInstanceList &getFree() {
return mFreeInstances;
}
bool testSpecialItemtype(s32 itemtype) {
return itemtype == 10;
}
/* vt 0x10 */ virtual void remove() override;
// /* vt 0x14 */ virtual int entry();
/* vt 0x18 */ virtual void drawOpa() override {
@@ -210,22 +213,22 @@ public:
void draw();
void calcCutCounter() {
mCutCounter = (mCutCounter != 0) ? mCutCounter-1 : mCutCounter;
mCutCounter = (mCutCounter != 0) ? mCutCounter - 1 : mCutCounter;
}
dTgMassObjTransformList& GetUnk3Too() {
dTgMassObjTransformList &GetUnk3Too() {
return mAquiredTransforms;
}
dTgMassObjTransformList& GetUnk3() {
dTgMassObjTransformList &GetUnk3() {
return mAvailableTransforms;
}
// private:
/* 0x18 */ GrassModelData* mpModelData;
/* 0x1C */ dTgMassObjInstance* mInstanceList;
/* 0x20 */ dTgMassObjTransform* mStaticTransformationList;
/* 0x24 */ dTgMassObjTransform* mDynamicTransformationList;
// private:
/* 0x18 */ GrassModelData *mpModelData;
/* 0x1C */ dTgMassObjInstance *mInstanceList;
/* 0x20 */ dTgMassObjTransform *mStaticTransformationList;
/* 0x24 */ dTgMassObjTransform *mDynamicTransformationList;
/* 0x28 */ dTgMassObjInstanceList mFreeInstances;
/* 0x34 */ dTgMassObjTransformList mAquiredTransforms;
/* 0x40 */ dTgMassObjTransformList mAvailableTransforms;
@@ -257,13 +260,17 @@ public:
void unloadRoom(u16 roomid);
int initializeCircle(GrassModel *grassModel, mVec3_c *bbStart, mVec3_c *bbEnd,s32 xzDisplacement,mMtx_c *param_7,s32 specialItemDropId,
undefined4 affectedByTimeshift,u8 activeInPresent,int randInt,s32 massObjSubtype,
u8 lightingCode, f32 fParam);
int initializeCircle(
GrassModel *grassModel, mVec3_c *bbStart, mVec3_c *bbEnd, s32 xzDisplacement, mMtx_c *param_7,
s32 specialItemDropId, undefined4 affectedByTimeshift, u8 activeInPresent, int randInt, s32 massObjSubtype,
u8 lightingCode, f32 fParam
);
int initializeBox(GrassModel *grassModel,mVec3_c *minVec,
mVec3_c *maxVec,int xzDisplacement,mMtx_c *boundsMtx,int specialItemDropId,undefined4 affectedByTimeshift,
u8 activeInPresent,int randInt,s32 massObjSubtype,u8 lightingCode, f32 fParam);
int initializeBox(
GrassModel *grassModel, mVec3_c *minVec, mVec3_c *maxVec, int xzDisplacement, mMtx_c *boundsMtx,
int specialItemDropId, undefined4 affectedByTimeshift, u8 activeInPresent, int randInt, s32 massObjSubtype,
u8 lightingCode, f32 fParam
);
virtual int actorExecute() override;
virtual int actorCreate() override;
@@ -281,7 +288,7 @@ public:
return mtx2;
}
GrassModel* getGrassModel(s32 i) {
GrassModel *getGrassModel(s32 i) {
return sGrassModels[i];
}
+4 -4
View File
@@ -44,8 +44,8 @@ struct Quatf {
Vector3f rotateVector(const Vector3f &);
Vector3f rotateVectorInv(const Vector3f &); // not in SS
void slerpTo(const Quatf &, f32, Quatf &out) const;
void slerpTo2(f32 fparam,const Quatf & param1, Quatf &out ) const {
const Quatf & tmp = param1;
void slerpTo2(f32 fparam, const Quatf &param1, Quatf &out) const {
const Quatf &tmp = param1;
slerpTo(tmp, fparam, out);
}
void limitSlerpTo(const Quatf &, f32, f32, Quatf &out) const;
@@ -53,13 +53,13 @@ struct Quatf {
void makeVectorRotation(const Vector3f &, const Vector3f &);
// not sure about the name
f32 dot(const Quatf& other) const {
f32 dot(const Quatf &other) const {
f32 ret = v.dot(other.v);
ret += w * other.w;
return ret;
}
void set(const Quatf& other) {
void set(const Quatf &other) {
v.set(other.v);
w = other.w;
}
+1
View File
@@ -8,6 +8,7 @@
#include "nw4r/math/math_triangular.h"
#include "nw4r/math.h"
#include <cmath>
namespace EGG {
+1
View File
@@ -3,6 +3,7 @@
#include "nw4r/types_nw4r.h"
#include "rvl/GX/GXTypes.h"
#include "rvl/GX.h" // IWYU pragma: export
namespace nw4r {
File diff suppressed because it is too large Load Diff