summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/code_801DDF78.s11
-rw-r--r--asm/code_801E6BF8.s2
-rw-r--r--asm/code_801F1AE8.s4
-rw-r--r--include/GShierMemObject.h32
-rw-r--r--include/code_801DD5C8.h7
-rw-r--r--obj_files.mk1
-rw-r--r--src/code_801DD8C0.cpp48
7 files changed, 92 insertions, 13 deletions
diff --git a/asm/code_801DDF78.s b/asm/code_801DDF78.s
index 4a2901f..f5f52b9 100644
--- a/asm/code_801DDF78.s
+++ b/asm/code_801DDF78.s
@@ -2,6 +2,7 @@
.section .text, "ax" # 0x80006980 - 0x803E1E60
+# GScamera constructor
.global func_801DDF78
func_801DDF78:
/* 801DDF78 001D9BD8 94 21 FF F0 */ stwu r1, -0x10(r1)
@@ -72,6 +73,7 @@ func_801DDF78:
/* 801DE07C 001D9CDC 38 21 00 10 */ addi r1, r1, 0x10
/* 801DE080 001D9CE0 4E 80 00 20 */ blr
+# GScamera constructor
.global func_801DE084
func_801DE084:
/* 801DE084 001D9CE4 94 21 FF F0 */ stwu r1, -0x10(r1)
@@ -145,6 +147,7 @@ func_801DE084:
/* 801DE194 001D9DF4 38 21 00 10 */ addi r1, r1, 0x10
/* 801DE198 001D9DF8 4E 80 00 20 */ blr
+# GScamera virtual
.global func_801DE19C
func_801DE19C:
/* 801DE19C 001D9DFC 94 21 FF F0 */ stwu r1, -0x10(r1)
@@ -450,6 +453,9 @@ lbl_801DE5E4:
/* 801DE5EC 001DA24C 7C 08 03 A6 */ mtlr r0
/* 801DE5F0 001DA250 38 21 00 50 */ addi r1, r1, 0x50
/* 801DE5F4 001DA254 4E 80 00 20 */ blr
+
+# GScamera virtual
+func_801DE5F8:
/* 801DE5F8 001DA258 94 21 FE B0 */ stwu r1, -0x150(r1)
/* 801DE5FC 001DA25C 7C 08 02 A6 */ mflr r0
/* 801DE600 001DA260 90 01 01 54 */ stw r0, 0x154(r1)
@@ -922,7 +928,7 @@ lbl_801DEC9C:
/* 801DECB4 001DA914 38 21 00 B0 */ addi r1, r1, 0xb0
/* 801DECB8 001DA918 4E 80 00 20 */ blr
-# virtual
+# GScamera virtual
func_801DECBC:
/* 801DECBC 001DA91C 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 801DECC0 001DA920 7C 08 02 A6 */ mflr r0
@@ -957,6 +963,9 @@ lbl_801DECEC:
/* 801DED30 001DA990 7C 08 03 A6 */ mtlr r0
/* 801DED34 001DA994 38 21 00 20 */ addi r1, r1, 0x20
/* 801DED38 001DA998 4E 80 00 20 */ blr
+
+# GScamera virtual
+func_801DED3C:
/* 801DED3C 001DA99C 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 801DED40 001DA9A0 7C 08 02 A6 */ mflr r0
/* 801DED44 001DA9A4 90 01 00 14 */ stw r0, 0x14(r1)
diff --git a/asm/code_801E6BF8.s b/asm/code_801E6BF8.s
index ad6ef55..5992778 100644
--- a/asm/code_801E6BF8.s
+++ b/asm/code_801E6BF8.s
@@ -13,7 +13,7 @@ func_801E6BF8:
/* 801E6C10 001E2870 80 84 00 84 */ lwz r4, 0x84(r4)
/* 801E6C14 001E2874 7C 7A 1B 78 */ mr r26, r3
/* 801E6C18 001E2878 7C B8 2B 78 */ mr r24, r5
-/* 801E6C1C 001E287C 4B FF 6C A5 */ bl func_801DD8C0
+/* 801E6C1C 001E287C 4B FF 6C A5 */ bl __ct__17GSanimationObjectFP10gUnkClass8
/* 801E6C20 001E2880 3C C0 80 42 */ lis r6, lbl_80423620@ha
/* 801E6C24 001E2884 38 A0 00 00 */ li r5, 0
/* 801E6C28 001E2888 38 80 00 FF */ li r4, 0xff
diff --git a/asm/code_801F1AE8.s b/asm/code_801F1AE8.s
index eeb8f21..48a130e 100644
--- a/asm/code_801F1AE8.s
+++ b/asm/code_801F1AE8.s
@@ -12,7 +12,7 @@ func_801F1AE8:
/* 801F1AFC 001ED75C 38 80 00 00 */ li r4, 0
/* 801F1B00 001ED760 93 C1 00 08 */ stw r30, 8(r1)
/* 801F1B04 001ED764 7C 7E 1B 78 */ mr r30, r3
-/* 801F1B08 001ED768 4B FE C0 5D */ bl func_801DDB64
+/* 801F1B08 001ED768 4B FE C0 5D */ bl __ct__13GSblendObjectFP10gUnkClass8
/* 801F1B0C 001ED76C C0 22 97 F0 */ lfs f1, lbl_80641DF0-_SDA2_BASE_(r2)
/* 801F1B10 001ED770 3C 60 80 42 */ lis r3, lbl_804236C8@ha
/* 801F1B14 001ED774 38 80 00 00 */ li r4, 0
@@ -74,7 +74,7 @@ func_801F1BC8:
/* 801F1BE8 001ED848 93 81 00 10 */ stw r28, 0x10(r1)
/* 801F1BEC 001ED84C 7C BC 2B 78 */ mr r28, r5
/* 801F1BF0 001ED850 80 85 00 20 */ lwz r4, 0x20(r5)
-/* 801F1BF4 001ED854 4B FE BF 71 */ bl func_801DDB64
+/* 801F1BF4 001ED854 4B FE BF 71 */ bl __ct__13GSblendObjectFP10gUnkClass8
/* 801F1BF8 001ED858 80 1E 00 08 */ lwz r0, 8(r30)
/* 801F1BFC 001ED85C 38 80 00 00 */ li r4, 0
/* 801F1C00 001ED860 C0 22 97 F0 */ lfs f1, lbl_80641DF0-_SDA2_BASE_(r2)
diff --git a/include/GShierMemObject.h b/include/GShierMemObject.h
new file mode 100644
index 0000000..60af7b7
--- /dev/null
+++ b/include/GShierMemObject.h
@@ -0,0 +1,32 @@
+#ifndef POKEREVO_GSHIERMEMOBJECT_H
+#define POKEREVO_GSHIERMEMOBJECT_H
+
+#include "code_801DAAE0.h"
+
+// TODO: determine file that defines this
+extern MEMHeapHandle lbl_8063E8F8;
+
+// Note: This is the root base class for various classes such as GScamera,
+// GSlight, GSmodel, etc. These classes are all new/deleted using an alternative set of
+// routines than the global new and delete, which we infer is defined inline here.
+
+// TODO: abstract class?
+
+class GShierMemObject
+{
+public:
+ void* operator new(size_t sz)
+ {
+ if (func_801DAB28())
+ return func_801DAC94(lbl_8063E8F8, sz);
+ else
+ return NULL;
+ }
+
+ void operator delete(void* ptr)
+ {
+ func_801DAD48(lbl_8063E8F8, ptr);
+ }
+};
+
+#endif //POKEREVO_GSHIERMEMOBJECT_H
diff --git a/include/code_801DD5C8.h b/include/code_801DD5C8.h
index 2b0dc47..1b528ae 100644
--- a/include/code_801DD5C8.h
+++ b/include/code_801DD5C8.h
@@ -5,6 +5,8 @@
extern "C" {
#endif
+#include "GShierMemObject.h"
+
// TODO: identify data structures
// size == 0x10
@@ -25,13 +27,16 @@ struct gUnkClass8
gUnkClass8* next;
};
-struct gUnkClass7
+struct gUnkClass7 : public GShierMemObject
{
gUnkClass8* unk0; // linked list head
u16 unk4;
u16 unk6;
float unk8;
float unkC;
+
+ gUnkClass7() : unk0(NULL), unk4(0), unk6(0xC), unk8(1.0f), unkC(0.0f) { }
+
};
void func_801DD5C8(gUnkClass7* p1, float p2);
diff --git a/obj_files.mk b/obj_files.mk
index d667ec7..a5cfb9f 100644
--- a/obj_files.mk
+++ b/obj_files.mk
@@ -229,7 +229,6 @@ SPLIT_O_FILES := \
$(BUILD_DIR)/src/code_801DCE6C.o \
$(BUILD_DIR)/src/code_801DD5C8.o \
$(BUILD_DIR)/src/code_801DD8C0.o \
- $(BUILD_DIR)/asm/code_801DD8C0_asm.o \
$(BUILD_DIR)/asm/code_801DDF78.o \
$(BUILD_DIR)/asm/code_801DF040.o \
$(BUILD_DIR)/asm/code_801E07E8.o \
diff --git a/src/code_801DD8C0.cpp b/src/code_801DD8C0.cpp
index f27222e..f0a428d 100644
--- a/src/code_801DD8C0.cpp
+++ b/src/code_801DD8C0.cpp
@@ -1,6 +1,6 @@
#include "ctorStruct.h"
#include <SDK/mem.h>
-#include "code_801DAAE0.h"
+#include "GShierMemObject.h"
#include "code_801DD5C8.h"
// TODO: C++
@@ -9,24 +9,46 @@ static ctorStruct gUnk8063F350(1, 4, 0);
extern "C" {
-// TODO: determine file that defines this
-extern MEMHeapHandle lbl_8063E8F8;
+// GSanimationObject
+class GSanimationObject : public GShierMemObject
+{
+protected:
+ gUnkClass8* unk0;
+ gUnkClass7* unk4;
+public:
+ GSanimationObject(gUnkClass8* list);
+};
+
+class GSblendObject : public GSanimationObject
+{
+ gUnkClass7* unk8;
+ float unkC;
+public:
+ GSblendObject(gUnkClass8* list);
+};
+// TODO: replace this
struct gUnkClass10
{
- gUnkClass8* unk0; // TODO: check type
+ gUnkClass8* unk0;
gUnkClass7* unk4;
-
- // TODO: begin derived class?
gUnkClass7* unk8;
float unkC;
};
-
#if 1
+// func_801DD8C0
+GSanimationObject::GSanimationObject(gUnkClass8* list) : unk0(list), unk4(NULL)
+{
+ if (list)
+ unk4 = new gUnkClass7;
+}
+
+#if 0
// caller provides a linked list of gUnkClass8
// TODO: gUnkClass10 constructor?
+// GSanimationObject?
gUnkClass10* func_801DD8C0(gUnkClass10* p1, gUnkClass8* p2)
{
p1->unk0 = p2;
@@ -51,6 +73,7 @@ gUnkClass10* func_801DD8C0(gUnkClass10* p1, gUnkClass8* p2)
}
return p1;
}
+#endif
// TODO: gUnkClass10 destructor? Get mwcc to generate parts of this function implicitly
gUnkClass10* func_801DD958(gUnkClass10* p1, s32 p2)
@@ -221,7 +244,17 @@ void func_801DDABC(gUnkClass10* p1, u16 p2, u16 p3, float p4, float p5)
}
}
+
// TODO: derived class constructor?
+// GSblendObject?
+
+GSblendObject::GSblendObject(gUnkClass8* list) : GSanimationObject(list), unk8(NULL), unkC(0.0f)
+{
+ if (unk4)
+ unk8 = new gUnkClass7;
+}
+
+#if 0
gUnkClass10* func_801DDB64(gUnkClass10* p1, gUnkClass8* p2)
{
func_801DD8C0(p1, p2);
@@ -245,6 +278,7 @@ gUnkClass10* func_801DDB64(gUnkClass10* p1, gUnkClass8* p2)
}
return p1;
}
+#endif
// TODO: derived class destructor?
gUnkClass10* func_801DDC08(gUnkClass10* p1, s32 p2)