diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/code_801DAAE0.cpp | 3 | ||||
-rw-r--r-- | src/code_801DBB3C.cpp | 4 | ||||
-rw-r--r-- | src/code_801DD5C8.cpp | 5 | ||||
-rw-r--r-- | src/code_801DD8C0.cpp | 127 |
4 files changed, 138 insertions, 1 deletions
diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp index 0db2018..d1b0945 100644 --- a/src/code_801DAAE0.cpp +++ b/src/code_801DAAE0.cpp @@ -98,6 +98,7 @@ u16 func_801DAC90(MEMHeapHandle heap, u16 groupID) return MEMSetGroupIDForExpHeap(heap, groupID);
}
+// "new" used in combination with func_801DAD48
void* func_801DAC94(MEMHeapHandle heap, u32 size)
{
return MEMAllocFromExpHeapEx(heap, size, 32);
@@ -132,6 +133,8 @@ static BOOL func_801DAD1C(MEMHeapHandle heap, void* memBlock, u32 size) return MEMResizeForMBlockExpHeap(heap, memBlock, size) != 0;
}
+// TODO: another "delete" that seems to be called in some destructors
+// see func_8016E5C0 for a destructor that calls both this and operator delete
void func_801DAD48(MEMHeapHandle heap, void* memBlock)
{
if (memBlock)
diff --git a/src/code_801DBB3C.cpp b/src/code_801DBB3C.cpp index bfaa7cd..0092622 100644 --- a/src/code_801DBB3C.cpp +++ b/src/code_801DBB3C.cpp @@ -44,6 +44,7 @@ static void func_801DBB48(gUnkClass2 *p1, size_t nodes, size_t size) r8->unk0 = 0;
}
+// Allocate linked list node from free store
gUnkClass1* func_801DBC58(gUnkClass2* p1)
{
gUnkClass3* r31 = p1->unk18;
@@ -53,6 +54,8 @@ gUnkClass1* func_801DBC58(gUnkClass2* p1) p1->unk18 = r31->unk0;
goto passCheck;
}
+
+failCheck:
func_801DBB44(r30);
return NULL;
passCheck:
@@ -63,6 +66,7 @@ passCheck: return &r31->unk4;
}
+// Return linked list node to free store
void func_801DBD00(gUnkClass2* p1, gUnkClass1* p2)
{
u32 r31;
diff --git a/src/code_801DD5C8.cpp b/src/code_801DD5C8.cpp index f91832a..77c8ae3 100644 --- a/src/code_801DD5C8.cpp +++ b/src/code_801DD5C8.cpp @@ -3,6 +3,9 @@ static ctorStruct gUnk8063F348(1, 4, 0);
+// gUnkClass7.cpp
+// TODO: convert to C++ member functions?
+
extern "C" {
void func_801DD5C8(gUnkClass7* p1, float p2)
@@ -69,7 +72,7 @@ void func_801DD5C8(gUnkClass7* p1, float p2) p1->unk6 |= 0x2;
}
-void func_801DD7FC(gUnkClass7* p1, u32 p2, u32 p3)
+void func_801DD7FC(gUnkClass7* p1, void* p2, u32 p3)
{
if (!p1->unk0 || !(p1->unk6 & 0x2))
return;
diff --git a/src/code_801DD8C0.cpp b/src/code_801DD8C0.cpp new file mode 100644 index 0000000..8636ccc --- /dev/null +++ b/src/code_801DD8C0.cpp @@ -0,0 +1,127 @@ +#include <SDK/mem.h>
+#include "code_801DAAE0.h"
+#include "code_801DD5C8.h"
+
+// TODO: C++
+
+extern "C" {
+
+// TODO: determine file that defines this
+extern MEMHeapHandle lbl_8063E8F8;
+
+struct gUnkClass10
+{
+ gUnkClass8* unk0; // TODO: check type
+ gUnkClass7* unk4;
+};
+
+// TODO: gUnkClass10 constructor?
+gUnkClass10* func_801DD8C0(gUnkClass10* p1, gUnkClass8* p2)
+{
+ p1->unk0 = p2;
+ p1->unk4 = 0;
+ if (p2) {
+ gUnkClass7* r3;
+ if (func_801DAB28())
+ r3 = (gUnkClass7*)func_801DAC94(lbl_8063E8F8, sizeof(gUnkClass7));
+ else
+ r3 = NULL;
+
+ if (r3) {
+ r3->unk0 = NULL;
+ r3->unk4 = 0;
+ r3->unk6 = 0xC;
+ r3->unk8 = 1.0f;
+ r3->unkC = 0.0f;
+ }
+ p1->unk4 = r3;
+ }
+ return p1;
+}
+
+// TODO: Destructor. Get mwcc to generate parts of this function implicitly
+gUnkClass10* func_801DD958(gUnkClass10* p1, s32 p2)
+{
+ if (p1) {
+ if (p1->unk4) {
+ func_801DAD48(lbl_8063E8F8, p1->unk4);
+ p1->unk4 = NULL;
+ }
+ if (p2 > 0)
+ func_801DAD48(lbl_8063E8F8, p1);
+ }
+ return p1;
+}
+
+// NONMATCHING
+void func_801DD9C8(gUnkClass10* p1, float p2)
+{
+ if (p1->unk4) {
+ BOOL flag = FALSE;
+ if (p1->unk4->unk0 && (p1->unk4->unk6 & 0x1))
+ flag = TRUE;
+ if (flag) {
+ func_801DD5C8(p1->unk4, p2);
+ func_801DD7FC(p1->unk4, p1, 0);
+ BOOL flag2 = TRUE; //r4
+ if (!(p1->unk4->unk6 & 0x8)) {
+ BOOL flag3 = FALSE; //r3
+ if (p1->unk4->unk0 && (p1->unk4->unk6 & 0x1)) {
+ flag3 = TRUE;
+ }
+ if (flag3)
+ flag2 = FALSE;
+ if (flag2 && !(p1->unk4->unk6 & 0x10)) {
+ p1->unk4->unk6 &= ~0x1;
+ }
+ }
+ }
+ }
+}
+
+// TODO: assuming gUnkClass8* member here
+//static
+gUnkClass8* func_801DDA94(gUnkClass10* p1, u16 p2)
+{
+ gUnkClass8* p = p1->unk0;
+ while (p) {
+ if (p->unk0 == p2)
+ return p;
+ p = p->next;
+ }
+ return NULL;
+}
+
+func_801DDABC
+{
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+} //extern "C"
|