summaryrefslogtreecommitdiff
path: root/include/d
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2024-11-22 21:30:35 +0100
committerrobojumper <robojumper@gmail.com>2024-11-22 21:30:35 +0100
commitd70141b14b9070d1421a672f89f82290856590a5 (patch)
tree664545bc04743616fd5a6a3448ca0131d8935dc8 /include/d
parentee64481b9ca7b80978d93aa717d09f861da2308a (diff)
Decompile the ColliderLinkedList stuff too
Diffstat (limited to 'include/d')
-rw-r--r--include/d/a/obj/d_a_obj_tbox.h4
-rw-r--r--include/d/col/c/c_cc_d.h18
-rw-r--r--include/d/d_cc.h89
3 files changed, 99 insertions, 12 deletions
diff --git a/include/d/a/obj/d_a_obj_tbox.h b/include/d/a/obj/d_a_obj_tbox.h
index 255d868b..eaccca94 100644
--- a/include/d/a/obj/d_a_obj_tbox.h
+++ b/include/d/a/obj/d_a_obj_tbox.h
@@ -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;
diff --git a/include/d/col/c/c_cc_d.h b/include/d/col/c/c_cc_d.h
index 49791e31..b9d9daa4 100644
--- a/include/d/col/c/c_cc_d.h
+++ b/include/d/col/c/c_cc_d.h
@@ -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
diff --git a/include/d/d_cc.h b/include/d/d_cc.h
index e150555f..2d2f39a4 100644
--- a/include/d/d_cc.h
+++ b/include/d/d_cc.h
@@ -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