Decompile the ColliderLinkedList stuff too

This commit is contained in:
robojumper
2024-11-22 21:30:35 +01:00
parent ee64481b9c
commit d70141b14b
9 changed files with 295 additions and 41 deletions
+2
View File
@@ -57,6 +57,8 @@ public:
*/
void prepend(cListNd_c *node);
void clear();
cListNd_c *getFirst() const {
return mpFirst;
}
+2 -2
View File
@@ -148,8 +148,8 @@ private:
s32 field_0x4F4;
/* 0x04F8 */ dBgW mBgWs[2];
/* 0x0918 */ LinkedCollider mCcD1;
/* 0x0B30 */ LinkedCollider mCcD2;
/* 0x0918 */ LinkedColliderUnk mCcD1;
/* 0x0B30 */ LinkedColliderUnk mCcD2;
/* 0x0D48 */ ColliderLinkedList field_0x0D48;
/* 0x0D54 */ dCcD_Unk mCcD3;
/* 0x0F5C */ dCcD_Cyl mCcD4;
+18
View File
@@ -883,6 +883,12 @@ public:
u32 ChkAtNoGaurd() const {
return mAt.MskSPrm(0x200000);
}
void SetAt_0x40000000() {
mAt.OnSPrm(0x40000000);
}
u32 ChkAt_0x40000000() {
return mAt.MskSPrm(0x40000000);
}
// Tg
@@ -908,6 +914,12 @@ public:
void SetTgInfo_0x2(u16 val) {
mTg.SetInfo_0x2(val);
}
void SetTg_0x40000000() {
mTg.OnSPrm(0x40000000);
}
u32 ChkTg_0x40000000() {
return mTg.MskSPrm(0x40000000);
}
// Co
@@ -929,6 +941,12 @@ public:
void SetCo_0x400() {
mCo.OnSPrm(0x400);
}
void SetCo_0x40000000() {
mCo.OnSPrm(0x40000000);
}
u32 ChkCo_0x40000000() {
return mCo.MskSPrm(0x40000000);
}
/**
* SET HIT
+79 -10
View File
@@ -5,28 +5,97 @@
#include "d/col/c/c_cc_d.h"
#include "d/col/cc/d_cc_d.h"
// Somewhere in d_cc
class LinkedCollider : public dCcD_Unk {
class LinkedColliderNode : public cListNd_c {
public:
LinkedCollider() : mpList(nullptr), field_0x210(this) {}
virtual ~LinkedCollider() {
LinkedColliderNode(cCcD_Obj *obj) : mpList(nullptr), mpCcDObj(obj) {}
void remove() {
if (mpList != nullptr) {
mpList->remove(&mNode);
mpList->remove(this);
mpList = nullptr;
}
}
/* 0x208 */ cListNd_c mNode;
/* 0x210 */ dCcD_Unk *field_0x210;
/* 0x214 */ cListMg_c *mpList;
/* 0x08 */ cCcD_Obj *mpCcDObj;
/* 0x0C */ cListMg_c *mpList;
};
struct ColliderLinkedList {
class LinkedColliderUnk : public dCcD_Unk {
public:
LinkedColliderUnk() : mNode(this) {}
virtual ~LinkedColliderUnk() {
mNode.remove();
}
/* 0x210 */ LinkedColliderNode mNode;
};
class LinkedColliderCyl : public dCcD_Cyl {
public:
LinkedColliderCyl() : mNode(this) {}
virtual ~LinkedColliderCyl() {
mNode.remove();
}
/* 0x150 */ LinkedColliderNode mNode;
};
class LinkedColliderSph : public dCcD_Sph {
public:
LinkedColliderSph() : mNode(this) {}
virtual ~LinkedColliderSph() {
mNode.remove();
}
/* 0x150 */ LinkedColliderNode mNode;
};
class LinkedColliderCps : public dCcD_Cps {
public:
LinkedColliderCps() : mNode(this) {}
virtual ~LinkedColliderCps() {
mNode.remove();
}
/* 0x170 */ LinkedColliderNode mNode;
};
class ColliderLinkedList {
private:
cListMg_c mList;
static void Set(cCcD_Obj *obj, void *cbArg);
static void SetStts(cCcD_Obj *obj, void *cbArg);
static void AtSet(cCcD_Obj *obj, void *cbArg);
static void ClrAt(cCcD_Obj *obj, void *cbArg);
static void TgSet(cCcD_Obj *obj, void *cbArg);
static void ClrTg(cCcD_Obj *obj, void *cbArg);
static void CoSet(cCcD_Obj *obj, void *cbArg);
static void ClrCo(cCcD_Obj *obj, void *cbArg);
public:
virtual ~ColliderLinkedList();
void addCc(LinkedCollider &ccD, const dCcD_SrcUnk &src);
void postInit(cCcD_Obj &ccD);
void addCc(LinkedColliderCyl &ccD, const dCcD_SrcCyl &src);
void addCc(LinkedColliderSph &ccD, const dCcD_SrcSph &src);
void addCc(LinkedColliderCps &ccD, const dCcD_SrcCps &src);
void addCc(LinkedColliderUnk &ccD, const dCcD_SrcUnk &src);
void SetStts(cCcD_Stts &stts);
void registerColliders();
typedef void (*ccCbFunc)(cCcD_Obj *obj, void *cbArg);
void foreachCc(ccCbFunc f, void *cbArg) const;
void foreachCc2(ccCbFunc f, void *cbArg) const;
// This find function is used by a lot of other
// TUs, all of which own the function passed as
// a ptmf. It's not immediately clear how this works,
// does every actor subclass the LinkedCollider___,
// or are the functions all added here for the other
// files to implement?
typedef bool (cCcD_Obj::*ccPtmf)();
cCcD_Obj *find(ccPtmf f) const;
void AtSet();
void ClrAt();
void TgSet();
void ClrTg();
void CoSet();
void ClrCo();
};
#endif