diff options
-rw-r--r-- | asm/code_80036F88.s | 4 | ||||
-rw-r--r-- | asm/code_801DDF78.s | 2 | ||||
-rw-r--r-- | asm/code_801E6BF8.s | 2 | ||||
-rw-r--r-- | asm/code_801EE044.s | 2 | ||||
-rw-r--r-- | asm/code_801F1AE8.s | 4 | ||||
-rw-r--r-- | asm/code_801F40E0.s | 14 | ||||
-rw-r--r-- | asm/code_80205954.s | 4 | ||||
-rw-r--r-- | include/GShierMemObject.h | 2 | ||||
-rw-r--r-- | include/code_801DD5C8.h | 2 | ||||
-rw-r--r-- | src/code_801DD8C0.cpp | 278 |
10 files changed, 106 insertions, 208 deletions
diff --git a/asm/code_80036F88.s b/asm/code_80036F88.s index 7903f3e..9377523 100644 --- a/asm/code_80036F88.s +++ b/asm/code_80036F88.s @@ -2377,7 +2377,7 @@ lbl_80039068: /* 8003906C 00034CCC 54 84 04 3E */ clrlwi r4, r4, 0x10
/* 80039070 00034CD0 C0 42 82 30 */ lfs f2, lbl_80640830-_SDA2_BASE_(r2)
/* 80039074 00034CD4 38 A0 00 01 */ li r5, 1
-/* 80039078 00034CD8 48 1A 4D D5 */ bl func_801DDE4C
+/* 80039078 00034CD8 48 1A 4D D5 */ bl func_801DDE4C__13GSblendObjectFUsUsff
lbl_8003907C:
/* 8003907C 00034CDC 80 01 00 14 */ lwz r0, 0x14(r1)
/* 80039080 00034CE0 83 E1 00 0C */ lwz r31, 0xc(r1)
@@ -5962,7 +5962,7 @@ lbl_8003C124: /* 8003C130 00037D90 57 E4 04 3E */ clrlwi r4, r31, 0x10
/* 8003C134 00037D94 C0 42 82 30 */ lfs f2, lbl_80640830-_SDA2_BASE_(r2)
/* 8003C138 00037D98 38 A0 00 00 */ li r5, 0
-/* 8003C13C 00037D9C 48 1A 19 81 */ bl func_801DDABC
+/* 8003C13C 00037D9C 48 1A 19 81 */ bl func_801DDABC__17GSanimationObjectFUsUsff
/* 8003C140 00037DA0 48 00 00 24 */ b lbl_8003C164
lbl_8003C144:
/* 8003C144 00037DA4 C0 22 82 20 */ lfs f1, lbl_80640820-_SDA2_BASE_(r2)
diff --git a/asm/code_801DDF78.s b/asm/code_801DDF78.s index f5f52b9..d3af0ca 100644 --- a/asm/code_801DDF78.s +++ b/asm/code_801DDF78.s @@ -945,7 +945,7 @@ func_801DECBC: lbl_801DECEC:
/* 801DECEC 001DA94C FC 20 F8 90 */ fmr f1, f31
/* 801DECF0 001DA950 7F E3 FB 78 */ mr r3, r31
-/* 801DECF4 001DA954 4B FF EF 91 */ bl func_801DDC84
+/* 801DECF4 001DA954 4B FF EF 91 */ bl func_801DDC84__13GSblendObjectFf
/* 801DECF8 001DA958 81 9F 01 00 */ lwz r12, 0x100(r31)
/* 801DECFC 001DA95C 7F E3 FB 78 */ mr r3, r31
/* 801DED00 001DA960 81 8C 00 14 */ lwz r12, 0x14(r12)
diff --git a/asm/code_801E6BF8.s b/asm/code_801E6BF8.s index 5992778..659a4ad 100644 --- a/asm/code_801E6BF8.s +++ b/asm/code_801E6BF8.s @@ -236,7 +236,7 @@ lbl_801E6F1C: lbl_801E6F34:
/* 801E6F34 001E2B94 7F C3 F3 78 */ mr r3, r30
/* 801E6F38 001E2B98 38 80 00 00 */ li r4, 0
-/* 801E6F3C 001E2B9C 4B FF 6A 1D */ bl func_801DD958
+/* 801E6F3C 001E2B9C 4B FF 6A 1D */ bl __dt__17GSanimationObjectFv
/* 801E6F40 001E2BA0 2C 1F 00 00 */ cmpwi r31, 0
/* 801E6F44 001E2BA4 40 81 00 10 */ ble lbl_801E6F54
/* 801E6F48 001E2BA8 80 6D 96 38 */ lwz r3, lbl_8063E8F8-_SDA_BASE_(r13)
diff --git a/asm/code_801EE044.s b/asm/code_801EE044.s index c4e0fec..5118332 100644 --- a/asm/code_801EE044.s +++ b/asm/code_801EE044.s @@ -2720,7 +2720,7 @@ lbl_801F0698: /* 801F069C 001EC2FC 2C 03 00 00 */ cmpwi r3, 0
/* 801F06A0 001EC300 41 82 00 0C */ beq lbl_801F06AC
/* 801F06A4 001EC304 FC 20 F8 90 */ fmr f1, f31
-/* 801F06A8 001EC308 4B FE D3 21 */ bl func_801DD9C8
+/* 801F06A8 001EC308 4B FE D3 21 */ bl func_801DD9C8__17GSanimationObjectFf
lbl_801F06AC:
/* 801F06AC 001EC30C 83 DE 00 20 */ lwz r30, 0x20(r30)
lbl_801F06B0:
diff --git a/asm/code_801F1AE8.s b/asm/code_801F1AE8.s index 48a130e..fd861d8 100644 --- a/asm/code_801F1AE8.s +++ b/asm/code_801F1AE8.s @@ -374,7 +374,7 @@ lbl_801F1FE4: lbl_801F2000:
/* 801F2000 001EDC60 7F 83 E3 78 */ mr r3, r28
/* 801F2004 001EDC64 38 80 00 00 */ li r4, 0
-/* 801F2008 001EDC68 4B FE BC 01 */ bl func_801DDC08
+/* 801F2008 001EDC68 4B FE BC 01 */ bl __dt__13GSblendObjectFv
/* 801F200C 001EDC6C 2C 1D 00 00 */ cmpwi r29, 0
/* 801F2010 001EDC70 40 81 00 10 */ ble lbl_801F2020
/* 801F2014 001EDC74 80 6D 96 38 */ lwz r3, lbl_8063E8F8-_SDA_BASE_(r13)
@@ -2269,7 +2269,7 @@ func_801F3960: lbl_801F3990:
/* 801F3990 001EF5F0 FC 20 F8 90 */ fmr f1, f31
/* 801F3994 001EF5F4 7F E3 FB 78 */ mr r3, r31
-/* 801F3998 001EF5F8 4B FE A2 ED */ bl func_801DDC84
+/* 801F3998 001EF5F8 4B FE A2 ED */ bl func_801DDC84__13GSblendObjectFf
/* 801F399C 001EF5FC A0 1F 00 10 */ lhz r0, 0x10(r31)
/* 801F39A0 001EF600 54 00 07 FE */ clrlwi r0, r0, 0x1f
/* 801F39A4 001EF604 2C 00 00 01 */ cmpwi r0, 1
diff --git a/asm/code_801F40E0.s b/asm/code_801F40E0.s index 96cfeec..79fdf7e 100644 --- a/asm/code_801F40E0.s +++ b/asm/code_801F40E0.s @@ -1023,7 +1023,7 @@ lbl_801F4EA0: /* 801F4EBC 001F0B1C FC 40 F8 90 */ fmr f2, f31
/* 801F4EC0 001F0B20 7E 64 9B 78 */ mr r4, r19
/* 801F4EC4 001F0B24 7E 85 A3 78 */ mr r5, r20
-/* 801F4EC8 001F0B28 4B FE 8F 85 */ bl func_801DDE4C
+/* 801F4EC8 001F0B28 4B FE 8F 85 */ bl func_801DDE4C__13GSblendObjectFUsUsff
/* 801F4ECC 001F0B2C 2C 15 00 00 */ cmpwi r21, 0
/* 801F4ED0 001F0B30 41 82 00 34 */ beq lbl_801F4F04
/* 801F4ED4 001F0B34 80 71 00 04 */ lwz r3, 4(r17)
@@ -1077,7 +1077,7 @@ lbl_801F4F5C: /* 801F4F80 001F0BE0 FC 40 F8 90 */ fmr f2, f31
/* 801F4F84 001F0BE4 7E 64 9B 78 */ mr r4, r19
/* 801F4F88 001F0BE8 7E 85 A3 78 */ mr r5, r20
-/* 801F4F8C 001F0BEC 4B FE 8E C1 */ bl func_801DDE4C
+/* 801F4F8C 001F0BEC 4B FE 8E C1 */ bl func_801DDE4C__13GSblendObjectFUsUsff
/* 801F4F90 001F0BF0 2C 15 00 00 */ cmpwi r21, 0
/* 801F4F94 001F0BF4 41 82 00 34 */ beq lbl_801F4FC8
/* 801F4F98 001F0BF8 80 7C 00 04 */ lwz r3, 4(r28)
@@ -1124,7 +1124,7 @@ lbl_801F5000: /* 801F5028 001F0C88 FC 40 F8 90 */ fmr f2, f31
/* 801F502C 001F0C8C 7E 64 9B 78 */ mr r4, r19
/* 801F5030 001F0C90 7E 85 A3 78 */ mr r5, r20
-/* 801F5034 001F0C94 4B FE 8A 89 */ bl func_801DDABC
+/* 801F5034 001F0C94 4B FE 8A 89 */ bl func_801DDABC__17GSanimationObjectFUsUsff
/* 801F5038 001F0C98 2C 16 00 00 */ cmpwi r22, 0
/* 801F503C 001F0C9C 41 82 00 1C */ beq lbl_801F5058
/* 801F5040 001F0CA0 80 71 00 04 */ lwz r3, 4(r17)
@@ -1170,7 +1170,7 @@ lbl_801F50A4: /* 801F50C4 001F0D24 FC 40 F8 90 */ fmr f2, f31
/* 801F50C8 001F0D28 7E 64 9B 78 */ mr r4, r19
/* 801F50CC 001F0D2C 7E 85 A3 78 */ mr r5, r20
-/* 801F50D0 001F0D30 4B FE 89 ED */ bl func_801DDABC
+/* 801F50D0 001F0D30 4B FE 89 ED */ bl func_801DDABC__17GSanimationObjectFUsUsff
/* 801F50D4 001F0D34 2C 16 00 00 */ cmpwi r22, 0
/* 801F50D8 001F0D38 41 82 00 1C */ beq lbl_801F50F4
/* 801F50DC 001F0D3C 80 71 00 04 */ lwz r3, 4(r17)
@@ -1204,7 +1204,7 @@ lbl_801F5114: /* 801F513C 001F0D9C FC 40 F8 90 */ fmr f2, f31
/* 801F5140 001F0DA0 7E 64 9B 78 */ mr r4, r19
/* 801F5144 001F0DA4 7E 85 A3 78 */ mr r5, r20
-/* 801F5148 001F0DA8 4B FE 89 75 */ bl func_801DDABC
+/* 801F5148 001F0DA8 4B FE 89 75 */ bl func_801DDABC__17GSanimationObjectFUsUsff
/* 801F514C 001F0DAC 2C 16 00 00 */ cmpwi r22, 0
/* 801F5150 001F0DB0 41 82 00 1C */ beq lbl_801F516C
/* 801F5154 001F0DB4 80 71 00 04 */ lwz r3, 4(r17)
@@ -1464,7 +1464,7 @@ lbl_801F549C: /* 801F54BC 001F111C 7F 63 DB 78 */ mr r3, r27
/* 801F54C0 001F1120 7E A4 AB 78 */ mr r4, r21
/* 801F54C4 001F1124 7E C5 B3 78 */ mr r5, r22
-/* 801F54C8 001F1128 4B FE 89 D9 */ bl func_801DDEA0
+/* 801F54C8 001F1128 4B FE 89 D9 */ bl func_801DDEA0__13GSblendObjectFUsUsfff
/* 801F54CC 001F112C 2C 18 00 00 */ cmpwi r24, 0
/* 801F54D0 001F1130 41 82 00 14 */ beq lbl_801F54E4
/* 801F54D4 001F1134 A0 1B 00 10 */ lhz r0, 0x10(r27)
@@ -1527,7 +1527,7 @@ lbl_801F556C: /* 801F5594 001F11F4 7F 63 DB 78 */ mr r3, r27
/* 801F5598 001F11F8 7E A4 AB 78 */ mr r4, r21
/* 801F559C 001F11FC 7E C5 B3 78 */ mr r5, r22
-/* 801F55A0 001F1200 4B FE 89 01 */ bl func_801DDEA0
+/* 801F55A0 001F1200 4B FE 89 01 */ bl func_801DDEA0__13GSblendObjectFUsUsfff
/* 801F55A4 001F1204 2C 18 00 00 */ cmpwi r24, 0
/* 801F55A8 001F1208 41 82 00 14 */ beq lbl_801F55BC
/* 801F55AC 001F120C A0 1B 00 10 */ lhz r0, 0x10(r27)
diff --git a/asm/code_80205954.s b/asm/code_80205954.s index 61cff22..2b1558f 100644 --- a/asm/code_80205954.s +++ b/asm/code_80205954.s @@ -837,7 +837,7 @@ lbl_80206424: /* 80206448 002020A8 38 80 00 00 */ li r4, 0
/* 8020644C 002020AC C0 42 99 6C */ lfs f2, lbl_80641F6C-_SDA2_BASE_(r2)
/* 80206450 002020B0 38 A0 00 01 */ li r5, 1
-/* 80206454 002020B4 4B FD 76 69 */ bl func_801DDABC
+/* 80206454 002020B4 4B FD 76 69 */ bl func_801DDABC__17GSanimationObjectFUsUsff
lbl_80206458:
/* 80206458 002020B8 3A 73 00 01 */ addi r19, r19, 1
lbl_8020645C:
@@ -849,7 +849,7 @@ lbl_8020645C: /* 80206470 002020D0 C0 22 99 68 */ lfs f1, lbl_80641F68-_SDA2_BASE_(r2)
/* 80206474 002020D4 38 A0 00 01 */ li r5, 1
/* 80206478 002020D8 C0 42 99 6C */ lfs f2, lbl_80641F6C-_SDA2_BASE_(r2)
-/* 8020647C 002020DC 4B FD 79 D1 */ bl func_801DDE4C
+/* 8020647C 002020DC 4B FD 79 D1 */ bl func_801DDE4C__13GSblendObjectFUsUsff
/* 80206480 002020E0 48 00 00 10 */ b lbl_80206490
lbl_80206484:
/* 80206484 002020E4 38 84 00 0C */ addi r4, r4, 0xc
diff --git a/include/GShierMemObject.h b/include/GShierMemObject.h index 60af7b7..fd5846d 100644 --- a/include/GShierMemObject.h +++ b/include/GShierMemObject.h @@ -7,7 +7,7 @@ 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
+// GSlight, GSmodel, etc. Instances of 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?
diff --git a/include/code_801DD5C8.h b/include/code_801DD5C8.h index 1b528ae..dbe31c3 100644 --- a/include/code_801DD5C8.h +++ b/include/code_801DD5C8.h @@ -36,7 +36,7 @@ struct gUnkClass7 : public GShierMemObject float unkC;
gUnkClass7() : unk0(NULL), unk4(0), unk6(0xC), unk8(1.0f), unkC(0.0f) { }
-
+ ~gUnkClass7() { }
};
void func_801DD5C8(gUnkClass7* p1, float p2);
diff --git a/src/code_801DD8C0.cpp b/src/code_801DD8C0.cpp index f0a428d..9a77009 100644 --- a/src/code_801DD8C0.cpp +++ b/src/code_801DD8C0.cpp @@ -9,7 +9,6 @@ static ctorStruct gUnk8063F350(1, 4, 0); extern "C" {
-// GSanimationObject
class GSanimationObject : public GShierMemObject
{
protected:
@@ -17,6 +16,10 @@ protected: gUnkClass7* unk4;
public:
GSanimationObject(gUnkClass8* list);
+ ~GSanimationObject();
+ void func_801DD9C8(float p2);
+ gUnkClass8* func_801DDA94(u16 id);
+ void func_801DDABC(u16 id, u16 p3, float p4, float p5);
};
class GSblendObject : public GSanimationObject
@@ -25,117 +28,69 @@ class GSblendObject : public GSanimationObject float unkC;
public:
GSblendObject(gUnkClass8* list);
+ ~GSblendObject();
+ void func_801DDC84(float p2);
+ void func_801DDE4C(u16 id, u16 p3, float p4, float p5);
+ void func_801DDEA0(u16 id, u16 p3, float p4, float p5, float p6);
};
-// TODO: replace this
-struct gUnkClass10
-{
- gUnkClass8* unk0;
- gUnkClass7* unk4;
- 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)
+#ifdef NONMATCHING
+// Can't get this to match with an operator delete
+// because mwcc adds an extra beq instruction
+GSanimationObject::~GSanimationObject()
{
- p1->unk0 = p2;
- p1->unk4 = NULL;
- if (p2) {
- // TODO: inlined call to an overloaded new?
- gUnkClass7* r3;
- if (func_801DAB28())
- r3 = (gUnkClass7*)func_801DAC94(lbl_8063E8F8, sizeof(gUnkClass7));
- else
- r3 = NULL;
-
- // TODO: inlined gUnkClass7 constructor?
- if (r3) {
- r3->unk0 = NULL;
- r3->unk4 = 0;
- r3->unk6 = 0xC;
- r3->unk8 = 1.0f;
- r3->unkC = 0.0f;
- }
- p1->unk4 = r3;
+ if (unk4) {
+ delete unk4;
+ unk4 = NULL;
}
- return p1;
}
-#endif
-
-// TODO: gUnkClass10 destructor? Get mwcc to generate parts of this function implicitly
-gUnkClass10* func_801DD958(gUnkClass10* p1, s32 p2)
+#else
+GSanimationObject::~GSanimationObject()
{
- if (p1) {
- if (p1->unk4) {
- func_801DAD48(lbl_8063E8F8, p1->unk4);
- p1->unk4 = NULL;
- }
- if (p2 > 0)
- func_801DAD48(lbl_8063E8F8, p1);
+ if (unk4) {
+ func_801DAD48(lbl_8063E8F8, unk4);
+ unk4 = NULL;
}
- return p1;
}
-
#endif
-
// Note: inferred static inline functions
-static inline BOOL helper_1(gUnkClass7* p1)
-{
- return p1->unk0 && (p1->unk6 & 0x1);
-}
-
-static inline BOOL helper_2(gUnkClass7* p1)
-{
- return !helper_1(p1) && !(p1->unk6 & 0x10);
-}
-
-
-static inline BOOL TestFunction(gUnkClass7* ptr)
+static inline BOOL inline_TestFunction(gUnkClass7* ptr)
{
return ptr->unk0 && ptr->unk6 & 0x1;
}
-// if bit 4 is cleared, clear bit 0
-static inline void ClearFunction(gUnkClass7* ptr)
+static inline void inline_ClearFunction(gUnkClass7* ptr)
{
if (!(ptr->unk6 & 0x10))
ptr->unk6 &= ~0x1;
}
-// TODO: "flag"s are the results of inline functions?
#ifdef NONMATCHING
// r4/r6 regswap
-void func_801DD9C8(gUnkClass10* p1, float p2)
+void GSanimationObject::func_801DD9C8(float p2)
{
- if (p1->unk4) {
- if (TestFunction(p1->unk4)) {
- func_801DD5C8(p1->unk4, p2);
- func_801DD7FC(p1->unk4, p1, 0);
- BOOL flag2 = TRUE; //r4
- u16* new_var = &p1->unk4->unk6;
- if (!(p1->unk4->unk6 & 0x8)) {
+ if (unk4) {
+ if (inline_TestFunction(unk4)) {
+ func_801DD5C8(unk4, p2);
+ func_801DD7FC(unk4, this, 0);
+ BOOL flag2 = TRUE;
+ u16* new_var = &unk4->unk6;
+ if (!(unk4->unk6 & 0x8)) {
BOOL flag = FALSE;
- if (p1->unk4->unk0 && (*new_var & 0x1))
+ if (unk4->unk0 && (*new_var & 0x1))
flag = TRUE;
if (flag)
flag2 = FALSE;
}
if (flag2) {
- gUnkClass7* r3 = p1->unk4;
+ gUnkClass7* r3 = unk4;
if (!(r3->unk6 & 0x10)) {
r3->unk6 &= ~0x1;
}
@@ -144,7 +99,7 @@ void func_801DD9C8(gUnkClass10* p1, float p2) }
}
#else
-asm void func_801DD9C8(gUnkClass10* p1, float p2)
+asm void GSanimationObject::func_801DD9C8(float p2)
{
nofralloc
/* 801DD9C8 001D9628 94 21 FF F0 */ stwu r1, -0x10(r1)
@@ -206,33 +161,28 @@ lbl_801DDA80: #pragma peephole on
#endif
-
-#if 1
-
-// TODO: assuming gUnkClass8* member here
-// search linked list
-//static
-gUnkClass8* func_801DDA94(gUnkClass10* p1, u16 p2)
+// Search the linked list referenced by unk0 for a node with the specified id
+gUnkClass8* GSanimationObject::func_801DDA94(u16 id)
{
- gUnkClass8* p = p1->unk0;
+ gUnkClass8* p = unk0;
while (p) {
- if (p->unk0 == p2)
+ if (p->unk0 == id)
return p;
p = p->next;
}
return NULL;
}
-// set unk4 member of p1
-void func_801DDABC(gUnkClass10* p1, u16 p2, u16 p3, float p4, float p5)
+// Populate unk4 member
+void GSanimationObject::func_801DDABC(u16 id, u16 p3, float p4, float p5)
{
- gUnkClass7* r6 = p1->unk4;
+ gUnkClass7* r6 = unk4;
if (r6) {
if (!(r6->unk6 & 0x10))
r6->unk6 &= ~0x1;
- gUnkClass8* r3 = func_801DDA94(p1, p2);
+ gUnkClass8* r3 = func_801DDA94(id);
if (r3) {
- gUnkClass7* r4 = p1->unk4;
+ gUnkClass7* r4 = unk4;
if (!(r4->unk6 & 0x10)) {
r4->unk0 = r3;
r4->unkC = p4;
@@ -244,121 +194,80 @@ 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);
- p1->unk8 = NULL;
- p1->unkC = 0.0f;
- if (p1->unk4) {
- 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->unk8 = r3;
- }
- return p1;
-}
-#endif
-
-// TODO: derived class destructor?
-gUnkClass10* func_801DDC08(gUnkClass10* p1, s32 p2)
+#ifdef NONMATCHING
+// Same issue as ~GSanimationObject()... extra beq instruction
+GSblendObject::~GSblendObject()
{
- if (p1) {
- if (p1->unk8) {
- func_801DAD48(lbl_8063E8F8, p1->unk8);
- p1->unk8 = NULL;
- }
- func_801DD958(p1, 0);
- if (p2 > 0)
- func_801DAD48(lbl_8063E8F8, p1);
+ if (unk8) {
+ delete unk8;
+ unk8 = NULL;
}
- return p1;
}
-
-static inline void InlineFunction(gUnkClass10* p1, gUnkClass7* p2)
+#else
+GSblendObject::~GSblendObject()
{
- func_801DD7FC(p2, p1, 0);
- BOOL r4 = TRUE;
- if (!(p2->unk6 & 0x8)) {
- BOOL r3 = helper_1(p2);
- if (r3)
- r4 = FALSE;
- }
- if (r4 && !(p2->unk6 & 0x10)) {
- p2->unk6 &= ~0x1;
+ if (unk8) {
+ func_801DAD48(lbl_8063E8F8, unk8);
+ unk8 = NULL;
}
}
+#endif
-// derived class method calling base class method?
#ifdef NONMATCHING
-// regswaps and instruction ordering
-void func_801DDC84(gUnkClass10* p1, float p2)
+// regswaps and instruction ordering issue near if (r4 && !(unk4->unk6 & 0x10))
+void GSblendObject::func_801DDC84(float p2)
{
- if (p1->unk4) {
- BOOL r29 = helper_1(p1->unk4);
+ if (unk4) {
+ BOOL r29 = inline_TestFunction(unk4);
BOOL r30 = FALSE;
- if (p1->unk8) {
- BOOL r3 = helper_1(p1->unk8);
+ if (unk8) {
+ BOOL r3 = inline_TestFunction(unk8);
if (r3)
r30 = TRUE;
if (r29)
- func_801DD5C8(p1->unk4, p2);
+ func_801DD5C8(unk4, p2);
if (r30) {
- func_801DD5C8(p1->unk8, p2);
+ func_801DD5C8(unk8, p2);
r29 = TRUE;
- p1->unk4->unk6 |= 0x2;
+ unk4->unk6 |= 0x2;
}
- // inlined function call?
+ // Note: inlined function call?
if (r29) {
- func_801DD7FC(p1->unk4, p1, 0);
+ func_801DD7FC(unk4, this, 0);
BOOL r4 = TRUE;
- if (!(p1->unk4->unk6 & 0x8)) {
- BOOL r3 = p1->unk4->unk0 && (p1->unk4->unk6 & 0x1);
+ if (!(unk4->unk6 & 0x8)) {
+ BOOL r3 = unk4->unk0 && (unk4->unk6 & 0x1);
if (r3)
r4 = FALSE;
}
- if (r4 && !(p1->unk4->unk6 & 0x10)) {
- p1->unk4->unk6 &= ~0x1;
+ if (r4 && !(unk4->unk6 & 0x10)) {
+ unk4->unk6 &= ~0x1;
}
}
if (r30) {
- func_801DD7FC(p1->unk8, p1, 0);
+ func_801DD7FC(unk8, this, 0);
BOOL r4 = TRUE;
- if (!(p1->unk8->unk6 & 0x8)) {
- BOOL r3 = p1->unk8->unk0 && (p1->unk8->unk6 & 0x1);
+ if (!(unk8->unk6 & 0x8)) {
+ BOOL r3 = unk8->unk0 && (unk8->unk6 & 0x1);
if (r3)
r4 = FALSE;
}
- if (r4 && !(p1->unk8->unk6 & 0x10)) {
- p1->unk8->unk6 &= ~0x1;
+ if (r4 && !(unk8->unk6 & 0x10)) {
+ unk8->unk6 &= ~0x1;
}
}
}
}
}
#else
-asm void func_801DDC84(gUnkClass10* p1, float p2)
+asm void GSblendObject::func_801DDC84(float p2)
{
nofralloc
/* 801DDC84 001D98E4 94 21 FF E0 */ stwu r1, -0x20(r1)
@@ -490,33 +399,25 @@ lbl_801DDE2C: #pragma peephole on
#endif
-
-// TODO: inlining
-// This matches
-void func_801DDE4C(gUnkClass10* p1, u16 p2, u16 p3, float p4, float p5)
+void GSblendObject::func_801DDE4C(u16 id, u16 p3, float p4, float p5)
{
- if (p1->unk8) {
- p1->unkC = 0.0f;
- if (TestFunction(p1->unk8)) {
- ClearFunction(p1->unk8);
- }
+ if (unk8) {
+ unkC = 0.0f;
+ if (inline_TestFunction(unk8))
+ inline_ClearFunction(unk8);
}
- func_801DDABC(p1, p2, p3, p4, p5);
+ func_801DDABC(id, p3, p4, p5);
}
-// NOTE: nearly identical to func_801DDABC. Modifies unk8 instead of unk4, and initializes p1->unkC
-
+// NOTE: nearly identical to func_801DDABC. Modifies unk8 instead of unk4, and initializes unkC
// Populate structure referenced by unk8, attaching it to a gUnkClass8 with the matching id
-// derived class method?
-// matches
-void func_801DDEA0(gUnkClass10* p1, u16 id, u16 p3, float p4, float p5, float p6)
+void GSblendObject::func_801DDEA0(u16 id, u16 p3, float p4, float p5, float p6)
{
- if (p1->unk8) {
- ClearFunction(p1->unk8);
- // TODO: 5 parameter inline function?
- gUnkClass8* r3 = func_801DDA94(p1, id);
+ if (unk8) {
+ inline_ClearFunction(unk8);
+ gUnkClass8* r3 = func_801DDA94(id);
if (r3) {
- gUnkClass7* r4 = p1->unk8;
+ gUnkClass7* r4 = unk8;
if (!(r4->unk6 & 0x10)) {
r4->unk0 = r3;
r4->unkC = p4;
@@ -525,11 +426,8 @@ void func_801DDEA0(gUnkClass10* p1, u16 id, u16 p3, float p4, float p5, float p6 r4->unk6 = 3;
}
}
- p1->unkC = p6;
+ unkC = p6;
}
}
-
-#endif
-
} //extern "C"
|