summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Calixte <remicalixte.rmc@gmail.com>2021-03-18 17:55:41 +0100
committerRémi Calixte <remicalixte.rmc@gmail.com>2021-03-18 17:55:41 +0100
commitdc241048eeac3cb560f621658dafc107226722fd (patch)
tree0e426b8e2fa9381391b30239689a48113de1f076
parent71f0b43f821292a1093a9c7bad752f5a04655df3 (diff)
decomp FUN_020168D0 and FUN_02016944
-rw-r--r--arm9/asm/unk_020166C8.s95
-rw-r--r--arm9/global.inc1
-rw-r--r--arm9/src/unk_020166C8_c.c49
3 files changed, 50 insertions, 95 deletions
diff --git a/arm9/asm/unk_020166C8.s b/arm9/asm/unk_020166C8.s
index a1caec42..d28d1166 100644
--- a/arm9/asm/unk_020166C8.s
+++ b/arm9/asm/unk_020166C8.s
@@ -5,101 +5,6 @@
.text
- thumb_func_start FUN_020168D0
-FUN_020168D0: ; 0x020168D0
- push {r4, lr}
- add r4, r0, #0x0
- bl OS_GetProcMode
- cmp r0, #0x12
- bne _020168E0
- bl ErrorHandling
-_020168E0:
- ldr r0, _02016940 ; =UNK_021C4D28
- ldr r1, [r0, #0x0]
- ldr r0, [r0, #0x10]
- ldrb r0, [r0, r4]
- lsl r0, r0, #0x2
- ldr r0, [r1, r0]
- cmp r0, #0x0
- beq _0201693E
- bl thunk_FUN_020adc8c
- ldr r1, _02016940 ; =UNK_021C4D28
- ldr r0, [r1, #0x10]
- ldrb r0, [r0, r4]
- lsl r2, r0, #0x2
- ldr r0, [r1, #0x4]
- ldr r1, [r1, #0x8]
- ldr r0, [r0, r2]
- ldr r1, [r1, r2]
- cmp r0, #0x0
- beq _02016912
- cmp r1, #0x0
- beq _02016912
- bl FUN_020ADDF0
- b _02016916
-_02016912:
- bl ErrorHandling
-_02016916:
- ldr r1, _02016940 ; =UNK_021C4D28
- mov r0, #0x0
- ldr r2, [r1, #0x10]
- ldr r3, [r1, #0x0]
- ldrb r2, [r2, r4]
- lsl r2, r2, #0x2
- str r0, [r3, r2]
- ldr r2, [r1, #0x10]
- ldr r3, [r1, #0x4]
- ldrb r2, [r2, r4]
- lsl r2, r2, #0x2
- str r0, [r3, r2]
- ldr r2, [r1, #0x10]
- ldr r3, [r1, #0x8]
- ldrb r2, [r2, r4]
- lsl r2, r2, #0x2
- str r0, [r3, r2]
- ldrh r2, [r1, #0x1a]
- ldr r0, [r1, #0x10]
- strb r2, [r0, r4]
-_0201693E:
- pop {r4, pc}
- .balign 4
-_02016940: .word UNK_021C4D28
-
- thumb_func_start FUN_02016944
-FUN_02016944: ; 0x02016944
- push {r3-r7, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- add r7, r2, #0x0
- add r6, r3, #0x0
- cmp r5, #0x0
- bne _02016956
- bl ErrorHandling
-_02016956:
- bl OS_DisableInterrupts
- add r4, #0x10
- str r0, [sp, #0x0]
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, r7, #0x0
- bl tempName_NNS_FndAllocFromExpHeapEx
- add r4, r0, #0x0
- ldr r0, [sp, #0x0]
- bl OS_RestoreInterrupts
- cmp r4, #0x0
- beq _02016984
- ldr r1, [r4, #0xc]
- mov r0, #0xff
- bic r1, r0
- lsl r0, r6, #0x18
- lsr r0, r0, #0x18
- orr r0, r1
- str r0, [r4, #0xc]
- add r4, #0x10
-_02016984:
- add r0, r4, #0x0
- pop {r3-r7, pc}
-
thumb_func_start FUN_02016988
FUN_02016988: ; 0x02016988
push {r3, lr}
diff --git a/arm9/global.inc b/arm9/global.inc
index 28515dd6..e30ba1c5 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -8521,3 +8521,4 @@
.extern CountAlivePokemon
.extern UNK_021C4D28
.extern FUN_020167F4
+.extern FUN_02016944 \ No newline at end of file
diff --git a/arm9/src/unk_020166C8_c.c b/arm9/src/unk_020166C8_c.c
index 00640ec1..36428a59 100644
--- a/arm9/src/unk_020166C8_c.c
+++ b/arm9/src/unk_020166C8_c.c
@@ -18,6 +18,8 @@ struct UnkStruct_020166C8 UNK_021C4D28;
extern void *tempName_NNS_FndCreateExpHeapEx(void *param0, u32 param1, u32 param2);
extern void *tempName_NNS_FndAllocFromExpHeapEx(void *param0, u32 param1, s32 param2);
u32 FUN_02016834(u32 param0, u32 param1, u32 param2, s32 param3);
+extern void thunk_FUN_020adc8c();
+extern void FUN_020ADDF0(u32 param0, void *param1);
THUMB_FUNC void FUN_020166C8(u32 *param0, u32 param1, u32 param2, u32 pre_size)
{
@@ -191,4 +193,51 @@ THUMB_FUNC u32 FUN_02016834(u32 param0, u32 param1, u32 param2, s32 param3)
ErrorHandling();
}
return 0;
+}
+
+
+THUMB_FUNC void FUN_020168D0(u32 param0) {
+ if (OS_GetProcMode() == OS_PROCMODE_IRQ) {
+ ErrorHandling();
+ }
+
+ if (UNK_021C4D28.unk_ptr1[UNK_021C4D28.unk_ptr5[param0]] != 0) {
+ thunk_FUN_020adc8c();
+
+ u8 index = UNK_021C4D28.unk_ptr5[param0];
+ u32 arg1 = UNK_021C4D28.unk_ptr2[index];
+ void *arg2 = UNK_021C4D28.unk_ptr3[index];
+ if (arg1 != 0 && arg2 != 0) {
+ FUN_020ADDF0(arg1, arg2);
+ } else {
+ ErrorHandling();
+ }
+
+
+
+ UNK_021C4D28.unk_ptr1[UNK_021C4D28.unk_ptr5[param0]] = 0;
+ UNK_021C4D28.unk_ptr2[UNK_021C4D28.unk_ptr5[param0]] = 0;
+ UNK_021C4D28.unk_ptr3[UNK_021C4D28.unk_ptr5[param0]] = 0;
+
+ UNK_021C4D28.unk_ptr5[param0] = UNK_021C4D28.unk_half4;
+ }
+}
+
+
+THUMB_FUNC u32 FUN_02016944(void *param0, u32 param1, u32 param2, u8 param3) {
+ if (param0 == 0) {
+ ErrorHandling();
+ }
+ OSIntrMode os_mode = OS_DisableInterrupts();
+ param1+=16;
+ u32 *ptr = (u32 *) tempName_NNS_FndAllocFromExpHeapEx(param0, param1, param2);
+
+ OS_RestoreInterrupts(os_mode);
+ if (ptr != 0) {
+ ptr[3] = (ptr[3] & ~0xff) | (param3 & 0xff);
+
+ ptr+=4;
+ }
+
+ return ptr;
} \ No newline at end of file