diff options
-rw-r--r-- | arm9/asm/unk_020166C8.s | 41 | ||||
-rw-r--r-- | arm9/global.inc | 1 | ||||
-rw-r--r-- | arm9/src/unk_020166C8_c.c | 62 |
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 |