summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/code_801DAAE0.cpp3
-rw-r--r--src/code_801DBB3C.cpp4
-rw-r--r--src/code_801DD5C8.cpp5
-rw-r--r--src/code_801DD8C0.cpp127
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"