summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lsf1
-rw-r--r--arm9/asm/unk_020166C8.s167
-rw-r--r--arm9/global.inc1
-rw-r--r--arm9/src/unk_020166C8_c.c106
4 files changed, 108 insertions, 167 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index b8accee4..7b581663 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -48,6 +48,7 @@ Static arm9
Object unk_02015D14.o
Object unk_02015E30.o
Object game_init.o
+ Object unk_020166C8_c.o
Object unk_020166C8.o
Object unk_02016B94.o
Object unk_0201B1A8.o
diff --git a/arm9/asm/unk_020166C8.s b/arm9/asm/unk_020166C8.s
index 3c251114..39bf564d 100644
--- a/arm9/asm/unk_020166C8.s
+++ b/arm9/asm/unk_020166C8.s
@@ -2,175 +2,8 @@
.include "global.inc"
.section .bss
-
- .global UNK_021C4D28
-UNK_021C4D28: ; 0x021C4D28
- .space 0x1c
-
.text
- thumb_func_start FUN_020166C8
-FUN_020166C8: ; 0x020166C8
- push {r3-r7, lr}
- sub sp, #0x8
- add r4, r1, #0x0
- add r5, r0, #0x0
- add r0, r4, #0x0
- str r0, [sp, #0x4]
- add r0, #0x18
- add r6, r2, #0x0
- str r0, [sp, #0x4]
- cmp r6, r0
- bhs _020166E0
- add r6, r0, #0x0
-_020166E0:
- cmp r3, #0x0
- beq _020166FE
- mov r0, #0x3
- tst r0, r3
- beq _020166F4
- mov r0, #0x3
-_020166EC:
- add r3, r3, #0x1
- add r1, r3, #0x0
- tst r1, r0
- bne _020166EC
-_020166F4:
- mov r0, #0x0
- add r1, r3, #0x0
- mov r2, #0x4
- bl OS_AllocFromArenaLo
-_020166FE:
- ldr r1, [sp, #0x4]
- lsl r7, r6, #0x1
- lsl r2, r1, #0x1
- add r1, r1, r2
- add r1, r1, #0x1
- lsl r1, r1, #0x2
- add r1, r7, r1
- mov r0, #0x0
- add r1, r6, r1
- mov r2, #0x4
- bl OS_AllocFromArenaLo
- ldr r1, _020167F0 ; =UNK_021C4D28
- str r0, [r1, #0x0]
- ldr r1, [sp, #0x4]
- add r1, r1, #0x1
- lsl r1, r1, #0x2
- add r1, r0, r1
- ldr r0, _020167F0 ; =UNK_021C4D28
- str r1, [r0, #0x4]
- ldr r0, [sp, #0x4]
- lsl r0, r0, #0x2
- add r2, r1, r0
- ldr r1, _020167F0 ; =UNK_021C4D28
- str r2, [r1, #0x8]
- add r1, r2, r0
- ldr r0, _020167F0 ; =UNK_021C4D28
- str r1, [r0, #0xc]
- add r1, r1, r7
- str r1, [r0, #0x10]
- strh r6, [r0, #0x14]
- strh r4, [r0, #0x16]
- ldr r0, [sp, #0x4]
- mov r7, #0x0
- lsl r0, r0, #0x10
- lsr r1, r0, #0x10
- ldr r0, _020167F0 ; =UNK_021C4D28
- cmp r4, #0x0
- strh r1, [r0, #0x1a]
- strh r1, [r0, #0x18]
- bls _020167A0
- str r7, [sp, #0x0]
-_02016752:
- ldr r0, [r5, #0x4]
- cmp r0, #0x0
- beq _0201675C
- cmp r0, #0x2
- beq _02016768
-_0201675C:
- ldr r1, [r5, #0x0]
- mov r0, #0x0
- mov r2, #0x4
- bl OS_AllocFromArenaLo
- b _02016772
-_02016768:
- ldr r1, [r5, #0x0]
- mov r0, #0x2
- mov r2, #0x4
- bl OS_AllocFromArenaHi
-_02016772:
- cmp r0, #0x0
- beq _0201678E
- ldr r1, [r5, #0x0]
- mov r2, #0x0
- bl tempName_NNS_FndCreateExpHeapEx
- ldr r1, _020167F0 ; =UNK_021C4D28
- ldr r2, [r1, #0x0]
- ldr r1, [sp, #0x0]
- str r0, [r2, r1]
- ldr r0, _020167F0 ; =UNK_021C4D28
- ldr r0, [r0, #0x10]
- strb r7, [r0, r7]
- b _02016792
-_0201678E:
- bl ErrorHandling
-_02016792:
- ldr r0, [sp, #0x0]
- add r7, r7, #0x1
- add r0, r0, #0x4
- add r5, #0x8
- str r0, [sp, #0x0]
- cmp r7, r4
- blo _02016752
-_020167A0:
- ldr r0, [sp, #0x4]
- add r1, r0, #0x1
- cmp r4, r1
- bhs _020167C0
- ldr r3, _020167F0 ; =UNK_021C4D28
- lsl r2, r4, #0x2
- mov r0, #0x0
-_020167AE:
- ldr r5, [r3, #0x0]
- str r0, [r5, r2]
- ldrh r7, [r3, #0x1a]
- ldr r5, [r3, #0x10]
- add r2, r2, #0x4
- strb r7, [r5, r4]
- add r4, r4, #0x1
- cmp r4, r1
- blo _020167AE
-_020167C0:
- cmp r4, r6
- bhs _020167D2
- ldr r0, _020167F0 ; =UNK_021C4D28
-_020167C6:
- ldrh r2, [r0, #0x1a]
- ldr r1, [r0, #0x10]
- strb r2, [r1, r4]
- add r4, r4, #0x1
- cmp r4, r6
- blo _020167C6
-_020167D2:
- mov r4, #0x0
- cmp r6, #0x0
- bls _020167EA
- ldr r0, _020167F0 ; =UNK_021C4D28
- add r3, r4, #0x0
- add r2, r4, #0x0
-_020167DE:
- ldr r1, [r0, #0xc]
- add r4, r4, #0x1
- strh r2, [r1, r3]
- add r3, r3, #0x2
- cmp r4, r6
- blo _020167DE
-_020167EA:
- add sp, #0x8
- pop {r3-r7, pc}
- nop
-_020167F0: .word UNK_021C4D28
thumb_func_start FUN_020167F4
FUN_020167F4: ; 0x020167F4
diff --git a/arm9/global.inc b/arm9/global.inc
index d816d92a..a9c01091 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -8519,3 +8519,4 @@
.extern CARDi_InitCommon
.extern MonNotFaintedOrEgg
.extern CountAlivePokemon
+.extern UNK_021C4D28
diff --git a/arm9/src/unk_020166C8_c.c b/arm9/src/unk_020166C8_c.c
new file mode 100644
index 00000000..b3cb4503
--- /dev/null
+++ b/arm9/src/unk_020166C8_c.c
@@ -0,0 +1,106 @@
+#include "global.h"
+
+struct UnkStruct_020166C8
+{
+ u32 *unk_ptr1;
+ void *unk_ptr2;
+ void *unk_ptr3;
+ u16 *unk_ptr4;
+ u8 *unk_ptr5;
+ u16 unk_half1;
+ u16 unk_half2;
+ u16 unk_half3;
+ u16 unk_half4;
+};
+
+struct UnkStruct_020166C8 UNK_021C4D28;
+
+extern void *tempName_NNS_FndCreateExpHeapEx(void *param0, u32 param1, u32 param2);
+
+
+THUMB_FUNC void FUN_020166C8(u32 *param0, u32 param1, u32 param2, u32 pre_size)
+{
+ u32 r7;
+ u32 saved_in_stack;
+
+ saved_in_stack = param1 + 0x18;
+
+ if (param2 < saved_in_stack)
+ {
+ param2 = saved_in_stack;
+ }
+ if (pre_size != 0)
+ {
+ while (pre_size % 4 != 0)
+ {
+ pre_size++;
+ }
+
+ OS_AllocFromArenaLo(0, pre_size, 4);
+ }
+
+ r7 = param2 * 2;
+ void *ptr = OS_AllocFromArenaLo(0, (saved_in_stack * 3 + 1) * 4 + r7 + param2, 4);
+ UNK_021C4D28.unk_ptr1 = ptr;
+ ptr += (saved_in_stack + 1) * 4;
+ UNK_021C4D28.unk_ptr2 = ptr;
+ ptr += saved_in_stack * 4;
+ UNK_021C4D28.unk_ptr3 = ptr;
+ ptr += saved_in_stack * 4;
+ UNK_021C4D28.unk_ptr4 = ptr;
+ ptr += r7;
+ UNK_021C4D28.unk_ptr5 = ptr;
+ UNK_021C4D28.unk_half1 = param2;
+ UNK_021C4D28.unk_half2 = param1;
+
+ r7 = 0;
+ UNK_021C4D28.unk_half4 = (u16)saved_in_stack;
+ UNK_021C4D28.unk_half3 = (u16)saved_in_stack;
+
+ while (r7 < param1)
+ {
+ void *ptr;
+ if (param0[1] == 0 || param0[1] != 2)
+ {
+ ptr = OS_AllocFromArenaLo(0, param0[0], 4);
+ }
+ else
+ {
+ ptr = OS_AllocFromArenaHi(2, param0[0], 4);
+ }
+
+ if (ptr != 0)
+ {
+ void *res = tempName_NNS_FndCreateExpHeapEx(ptr, param0[0], 0);
+ UNK_021C4D28.unk_ptr1[r7] = res;
+ UNK_021C4D28.unk_ptr5[r7] = (u8)r7;
+ }
+ else
+ {
+ ErrorHandling();
+ }
+
+ param0 += 2;
+ r7++;
+ }
+
+ while (param1 < saved_in_stack + 1)
+ {
+ UNK_021C4D28.unk_ptr1[param1] = 0;
+ UNK_021C4D28.unk_ptr5[param1] = (u8)UNK_021C4D28.unk_half4;
+
+ param1++;
+ }
+
+ while (param1 < param2)
+ {
+ UNK_021C4D28.unk_ptr5[param1] = (u8)UNK_021C4D28.unk_half4;
+
+ param1++;
+ }
+
+ for (param1 = 0; param1 < param2; param1++)
+ {
+ UNK_021C4D28.unk_ptr4[param1] = 0;
+ }
+}