summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/unk_020166C8.s41
-rw-r--r--arm9/global.inc1
-rw-r--r--arm9/src/unk_020166C8_c.c62
3 files changed, 47 insertions, 57 deletions
diff --git a/arm9/asm/unk_020166C8.s b/arm9/asm/unk_020166C8.s
index 39bf564d..ecbd9afe 100644
--- a/arm9/asm/unk_020166C8.s
+++ b/arm9/asm/unk_020166C8.s
@@ -5,47 +5,6 @@
.text
- thumb_func_start FUN_020167F4
-FUN_020167F4: ; 0x020167F4
- ldr r1, _02016818 ; =UNK_021C4D28
- ldrh r0, [r1, #0x16]
- ldrh r3, [r1, #0x18]
- cmp r0, r3
- bge _02016812
- ldr r2, [r1, #0x0]
- lsl r1, r0, #0x2
- add r2, r2, r1
-_02016804:
- ldr r1, [r2, #0x0]
- cmp r1, #0x0
- beq _02016816
- add r0, r0, #0x1
- add r2, r2, #0x4
- cmp r0, r3
- blt _02016804
-_02016812:
- mov r0, #0x0
- mvn r0, r0
-_02016816:
- bx lr
- .balign 4
-_02016818: .word UNK_021C4D28
-
- thumb_func_start FUN_0201681C
-FUN_0201681C: ; 0x0201681C
- push {r3, lr}
- mov r3, #0x4
- bl FUN_02016834
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02016828
-FUN_02016828: ; 0x02016828
- push {r3, lr}
- mov r3, #0x3
- mvn r3, r3
- bl FUN_02016834
- pop {r3, pc}
thumb_func_start FUN_02016834
FUN_02016834: ; 0x02016834
diff --git a/arm9/global.inc b/arm9/global.inc
index a9c01091..28515dd6 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -8520,3 +8520,4 @@
.extern MonNotFaintedOrEgg
.extern CountAlivePokemon
.extern UNK_021C4D28
+.extern FUN_020167F4
diff --git a/arm9/src/unk_020166C8_c.c b/arm9/src/unk_020166C8_c.c
index b3cb4503..6e9e672f 100644
--- a/arm9/src/unk_020166C8_c.c
+++ b/arm9/src/unk_020166C8_c.c
@@ -16,18 +16,15 @@ struct UnkStruct_020166C8
struct UnkStruct_020166C8 UNK_021C4D28;
extern void *tempName_NNS_FndCreateExpHeapEx(void *param0, u32 param1, u32 param2);
-
+extern u32 FUN_02016834(u32 param0, u32 param1, u32 param2, u32 param3);
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)
+ u32 unk_size = param1 + 24;
+
+ if (param2 < unk_size)
{
- param2 = saved_in_stack;
+ param2 = unk_size;
}
if (pre_size != 0)
{
@@ -39,14 +36,15 @@ THUMB_FUNC void FUN_020166C8(u32 *param0, u32 param1, u32 param2, u32 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);
+ u32 r7 = param2 * 2;
+
+ void *ptr = OS_AllocFromArenaLo(0, (unk_size * 3 + 1) * sizeof(u32) + r7 + param2, 4);
UNK_021C4D28.unk_ptr1 = ptr;
- ptr += (saved_in_stack + 1) * 4;
+ ptr += (unk_size + 1) * 4;
UNK_021C4D28.unk_ptr2 = ptr;
- ptr += saved_in_stack * 4;
+ ptr += unk_size * 4;
UNK_021C4D28.unk_ptr3 = ptr;
- ptr += saved_in_stack * 4;
+ ptr += unk_size * 4;
UNK_021C4D28.unk_ptr4 = ptr;
ptr += r7;
UNK_021C4D28.unk_ptr5 = ptr;
@@ -54,8 +52,8 @@ THUMB_FUNC void FUN_020166C8(u32 *param0, u32 param1, u32 param2, u32 pre_size)
UNK_021C4D28.unk_half2 = param1;
r7 = 0;
- UNK_021C4D28.unk_half4 = (u16)saved_in_stack;
- UNK_021C4D28.unk_half3 = (u16)saved_in_stack;
+ UNK_021C4D28.unk_half4 = (u16)unk_size;
+ UNK_021C4D28.unk_half3 = (u16)unk_size;
while (r7 < param1)
{
@@ -84,7 +82,7 @@ THUMB_FUNC void FUN_020166C8(u32 *param0, u32 param1, u32 param2, u32 pre_size)
r7++;
}
- while (param1 < saved_in_stack + 1)
+ while (param1 < unk_size + 1)
{
UNK_021C4D28.unk_ptr1[param1] = 0;
UNK_021C4D28.unk_ptr5[param1] = (u8)UNK_021C4D28.unk_half4;
@@ -104,3 +102,35 @@ THUMB_FUNC void FUN_020166C8(u32 *param0, u32 param1, u32 param2, u32 pre_size)
UNK_021C4D28.unk_ptr4[param1] = 0;
}
}
+
+THUMB_FUNC s32 FUN_020167F4()
+{
+ s32 i = UNK_021C4D28.unk_half2;
+ s32 j = UNK_021C4D28.unk_half3;
+
+ if (i < j)
+ {
+ u32 *ptr = UNK_021C4D28.unk_ptr1 + i;
+ do
+ {
+ if (*ptr == 0)
+ {
+ return i;
+ }
+ i++;
+ ptr++;
+ } while (i < j);
+ }
+
+ return -1;
+}
+
+
+THUMB_FUNC u32 FUN_0201681C(u32 param0, u32 param1, u32 param2) {
+ return FUN_02016834(param0, param1, param2, 4);
+}
+
+
+THUMB_FUNC u32 FUN_02016828(u32 param0, u32 param1, u32 param2) {
+ return FUN_02016834(param0, param1, param2, -4);
+} \ No newline at end of file