summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/unk_0204AEA8.s67
-rw-r--r--arm9/src/unk_0204AEA8.c45
-rw-r--r--include/unk_0204AEA8.h7
3 files changed, 52 insertions, 67 deletions
diff --git a/arm9/asm/unk_0204AEA8.s b/arm9/asm/unk_0204AEA8.s
deleted file mode 100644
index 018a64e2..00000000
--- a/arm9/asm/unk_0204AEA8.s
+++ /dev/null
@@ -1,67 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- thumb_func_start FUN_0204AEA8
-FUN_0204AEA8: ; 0x0204AEA8
- push {r3-r5, lr}
- add r4, r0, #0x0
- bl FUN_02046528
- add r5, r0, #0x0
- add r0, r4, #0x0
- bl FUN_0204652C
- add r4, r0, #0x0
- ldr r1, [r4, #0x0]
- cmp r1, #0x0
- beq _0204AEC6
- cmp r1, #0x1
- beq _0204AEE6
- b _0204AEF4
-_0204AEC6:
- ldr r0, [r4, #0x8]
- add r1, r5, #0x0
- add r2, r4, #0x4
- bl MOD05_021E3444
- ldr r1, [r4, #0xc]
- mov r0, #0x5
- lsl r1, r1, #0x10
- lsr r1, r1, #0x10
- mov r2, #0x1
- bl FUN_0200433C
- ldr r0, [r4, #0x0]
- add r0, r0, #0x1
- str r0, [r4, #0x0]
- b _0204AEF4
-_0204AEE6:
- ldr r1, [r4, #0x4]
- cmp r1, #0x1
- bne _0204AEF4
- bl FreeToHeap
- mov r0, #0x1
- pop {r3-r5, pc}
-_0204AEF4:
- mov r0, #0x0
- pop {r3-r5, pc}
-
- thumb_func_start FUN_0204AEF8
-FUN_0204AEF8: ; 0x0204AEF8
- push {r4-r6, lr}
- add r6, r0, #0x0
- add r5, r1, #0x0
- mov r0, #0xb
- mov r1, #0x10
- add r4, r2, #0x0
- bl AllocFromHeapAtEnd
- add r2, r0, #0x0
- mov r0, #0x0
- str r0, [r2, #0x0]
- str r0, [r2, #0x4]
- str r5, [r2, #0x8]
- ldr r1, _0204AF20 ; =FUN_0204AEA8
- add r0, r6, #0x0
- str r4, [r2, #0xc]
- bl FUN_0204640C
- pop {r4-r6, pc}
- nop
-_0204AF20: .word FUN_0204AEA8
diff --git a/arm9/src/unk_0204AEA8.c b/arm9/src/unk_0204AEA8.c
new file mode 100644
index 00000000..23dd6960
--- /dev/null
+++ b/arm9/src/unk_0204AEA8.c
@@ -0,0 +1,45 @@
+#include "global.h"
+#include "heap.h"
+#include "unk_0204639C.h"
+#include "unk_0204AEA8.h"
+
+#pragma thumb on
+
+extern void MOD05_021E3444(u32, struct UnkStruct_0204639C *, u32);
+extern void FUN_0200433C(u32, u32, u32);
+
+BOOL FUN_0204AEA8(struct UnkStruct_0204639C *a0)
+{
+ struct UnkStruct_0204639C *v0 = FUN_02046528(a0);
+ u32 *v1 = FUN_0204652C(a0);
+
+ switch (v1[0])
+ {
+ case 0:
+ MOD05_021E3444(v1[2], v0, (u32)v1 + 4);
+ FUN_0200433C(5, ((v1[3] << 16) >> 16), 1);
+ v1[0]++;
+ break;
+ case 1:
+ if (v1[1] == 1)
+ {
+ FreeToHeap(v1);
+ return TRUE;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+void FUN_0204AEF8(struct UnkStruct_0204639C *a0, u32 a1, u32 a2)
+{
+ u32 *v0 = AllocFromHeapAtEnd(11, 4 * sizeof(u32));
+
+ v0[0] = 0;
+ v0[1] = 0;
+ v0[2] = a1;
+ v0[3] = a2;
+
+ FUN_0204640C(a0, FUN_0204AEA8, v0);
+}
diff --git a/include/unk_0204AEA8.h b/include/unk_0204AEA8.h
new file mode 100644
index 00000000..90e13cc2
--- /dev/null
+++ b/include/unk_0204AEA8.h
@@ -0,0 +1,7 @@
+#ifndef POKEDIAMOND_UNK_0204AEA8_H
+#define POKEDIAMOND_UNK_0204AEA8_H
+
+BOOL FUN_0204AEA8(struct UnkStruct_0204639C *a0);
+void FUN_0204AEF8(struct UnkStruct_0204639C *a0, u32 a1, u32 a2);
+
+#endif