From ad63244f06faaf566506dfbba2c8c8e71226180c Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 2 Nov 2020 11:05:00 -0500 Subject: start decompiling code_801DD8C0.o --- src/code_801DAAE0.cpp | 3 ++ src/code_801DBB3C.cpp | 4 ++ src/code_801DD5C8.cpp | 5 +- src/code_801DD8C0.cpp | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 src/code_801DD8C0.cpp (limited to 'src') 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 +#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" -- cgit v1.2.3