mirror of
https://github.com/zeldaret/ss
synced 2026-09-03 09:59:55 -04:00
Decompile the ColliderLinkedList stuff too
This commit is contained in:
@@ -57,6 +57,8 @@ public:
|
||||
*/
|
||||
void prepend(cListNd_c *node);
|
||||
|
||||
void clear();
|
||||
|
||||
cListNd_c *getFirst() const {
|
||||
return mpFirst;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user