summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-08-28 12:45:00 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-08-28 12:45:00 -0400
commitcd2529e8855bdf5bb725b40524478cf197b27a62 (patch)
treed92f5e462b64a05b45e08e00cd17790fabb54acf
parent46175353717188d59960c1ed9cf3a12deb81a6ab (diff)
Decompile unk_020254B8
-rw-r--r--arm9/asm/unk_020254B8.s246
-rw-r--r--arm9/src/save_arrays.c3
-rw-r--r--arm9/src/unk_020254B8.c114
-rw-r--r--include/unk_020254B8.h23
4 files changed, 138 insertions, 248 deletions
diff --git a/arm9/asm/unk_020254B8.s b/arm9/asm/unk_020254B8.s
deleted file mode 100644
index 1d7159d1..00000000
--- a/arm9/asm/unk_020254B8.s
+++ /dev/null
@@ -1,246 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- thumb_func_start FUN_020254B8
-FUN_020254B8: ; 0x020254B8
- mov r0, #0x22
- lsl r0, r0, #0x6
- bx lr
- .balign 4
-
- thumb_func_start FUN_020254C0
-FUN_020254C0: ; 0x020254C0
- ldr r3, _020254C8 ; =SavArray_get
- mov r1, #0x9
- bx r3
- nop
-_020254C8: .word SavArray_get
-
- thumb_func_start FUN_020254CC
-FUN_020254CC: ; 0x020254CC
- push {r3-r7, lr}
- mov r4, #0x0
- ldr r6, _020254EC ; =0x0000FFFF
- add r5, r0, #0x0
- add r7, r4, #0x0
-_020254D6:
- add r0, r5, #0x0
- add r1, r7, #0x0
- mov r2, #0x88
- bl memset
- strh r6, [r5, #0x0]
- add r4, r4, #0x1
- add r5, #0x88
- cmp r4, #0x10
- blt _020254D6
- pop {r3-r7, pc}
- .balign 4
-_020254EC: .word 0x0000FFFF
-
- thumb_func_start FUN_020254F0
-FUN_020254F0: ; 0x020254F0
- mov r2, #0x88
- mul r2, r1
- add r0, r0, r2
- bx lr
-
- thumb_func_start FUN_020254F8
-FUN_020254F8: ; 0x020254F8
- add r0, r0, r1
- add r0, #0x68
- ldrb r0, [r0, #0x0]
- bx lr
-
- thumb_func_start FUN_02025500
-FUN_02025500: ; 0x02025500
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- bl StringNotEqual
- cmp r0, #0x0
- bne _0202551A
- ldr r1, [r5, #0x10]
- ldr r0, [r4, #0x10]
- cmp r1, r0
- bne _0202551A
- mov r0, #0x1
- pop {r3-r5, pc}
-_0202551A:
- mov r0, #0x0
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02025520
-FUN_02025520: ; 0x02025520
- push {r4-r7, lr}
- sub sp, #0x2c
- str r1, [sp, #0x4]
- mov r1, #0x22
- str r0, [sp, #0x0]
- add r0, r3, #0x0
- lsl r1, r1, #0x6
- str r2, [sp, #0x8]
- bl AllocFromHeap
- str r0, [sp, #0x10]
- bl FUN_020254CC
- mov r0, #0x0
- str r0, [sp, #0x14]
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- ble _02025578
- ldr r7, [sp, #0x4]
- add r6, sp, #0x18
-_02025548:
- mov r0, #0x0
- mvn r0, r0
- ldr r5, [sp, #0x0]
- str r0, [r6, #0x0]
- mov r4, #0x0
-_02025552:
- add r0, r5, #0x0
- add r1, r7, #0x0
- bl FUN_02025500
- cmp r0, #0x0
- beq _02025560
- str r4, [r6, #0x0]
-_02025560:
- add r4, r4, #0x1
- add r5, #0x88
- cmp r4, #0x10
- blt _02025552
- ldr r0, [sp, #0x14]
- add r6, r6, #0x4
- add r1, r0, #0x1
- ldr r0, [sp, #0x8]
- add r7, #0x88
- str r1, [sp, #0x14]
- cmp r1, r0
- blt _02025548
-_02025578:
- ldr r0, [sp, #0x8]
- mov r4, #0x0
- str r4, [sp, #0xc]
- cmp r0, #0x0
- ble _020255BE
- ldr r5, [sp, #0x10]
- add r6, sp, #0x18
-_02025586:
- ldr r3, [sp, #0x4]
- add r7, r5, #0x0
- mov r2, #0x11
-_0202558C:
- ldmia r3!, {r0-r1}
- stmia r7!, {r0-r1}
- sub r2, r2, #0x1
- bne _0202558C
- ldr r1, [r6, #0x0]
- cmp r1, #0x0
- blt _020255A6
- add r2, r1, #0x0
- mov r0, #0x88
- mul r2, r0
- ldr r1, _02025610 ; =0x0000FFFF
- ldr r0, [sp, #0x0]
- strh r1, [r0, r2]
-_020255A6:
- ldr r0, [sp, #0x4]
- add r5, #0x88
- add r0, #0x88
- str r0, [sp, #0x4]
- ldr r0, [sp, #0xc]
- add r4, r4, #0x1
- add r1, r0, #0x1
- ldr r0, [sp, #0x8]
- add r6, r6, #0x4
- str r1, [sp, #0xc]
- cmp r1, r0
- blt _02025586
-_020255BE:
- mov r0, #0x0
- mov r12, r0
- mov r0, #0x88
- add r1, r4, #0x0
- mul r1, r0
- ldr r0, [sp, #0x10]
- ldr r3, [sp, #0x0]
- add r5, r0, r1
-_020255CE:
- ldrh r1, [r3, #0x0]
- ldr r0, _02025610 ; =0x0000FFFF
- cmp r1, r0
- beq _020255EC
- add r6, r3, #0x0
- add r7, r5, #0x0
- mov r2, #0x11
-_020255DC:
- ldmia r6!, {r0-r1}
- stmia r7!, {r0-r1}
- sub r2, r2, #0x1
- bne _020255DC
- add r4, r4, #0x1
- add r5, #0x88
- cmp r4, #0x10
- bge _020255F8
-_020255EC:
- mov r0, r12
- add r0, r0, #0x1
- add r3, #0x88
- mov r12, r0
- cmp r0, #0x10
- blt _020255CE
-_020255F8:
- mov r2, #0x22
- ldr r0, [sp, #0x0]
- ldr r1, [sp, #0x10]
- lsl r2, r2, #0x6
- bl memcpy
- ldr r0, [sp, #0x10]
- bl FreeToHeap
- add sp, #0x2c
- pop {r4-r7, pc}
- nop
-_02025610: .word 0x0000FFFF
-
- thumb_func_start FUN_02025614
-FUN_02025614: ; 0x02025614
- push {r3-r6}
- mov r3, #0x0
- add r4, r0, #0x0
-_0202561A:
- ldr r2, [r4, #0x10]
- cmp r1, r2
- bne _02025626
- mov r0, #0x1
- pop {r3-r6}
- bx lr
-_02025626:
- add r3, r3, #0x1
- add r4, #0x88
- cmp r3, #0x10
- blt _0202561A
- mov r6, #0x0
- add r3, r6, #0x0
-_02025632:
- add r4, r3, #0x0
- add r5, r0, #0x0
-_02025636:
- ldr r2, [r5, #0x18]
- cmp r1, r2
- bne _02025642
- add r0, r6, #0x2
- pop {r3-r6}
- bx lr
-_02025642:
- add r4, r4, #0x1
- add r5, r5, #0x4
- cmp r4, #0x10
- blt _02025636
- add r6, r6, #0x1
- add r0, #0x88
- cmp r6, #0x10
- blt _02025632
- mov r0, #0x0
- pop {r3-r6}
- bx lr
diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c
index 96808ba6..bccdcc11 100644
--- a/arm9/src/save_arrays.c
+++ b/arm9/src/save_arrays.c
@@ -9,12 +9,12 @@
#include "poketch.h"
#include "hall_of_fame.h"
#include "unk_020286F8.h"
+#include "unk_020254B8.h"
#include "daycare.h"
extern u32 FUN_0202AC20(void);
extern u32 FUN_02034D7C(void);
extern u32 Sav2_Pokedex_sizeof(void);
-extern u32 FUN_020254B8(void);
extern u32 FUN_02024E64(void);
extern u32 FUN_02034D80(void);
extern u32 FUN_02025954(void);
@@ -41,7 +41,6 @@ extern u32 FUN_02013B28(void);
extern void FUN_0202AC28(void *);
extern void FUN_02034D98(void *);
extern void Sav2_Pokedex_init(void *);
-extern void FUN_020254CC(void *);
extern void FUN_02024E6C(void *);
extern void FUN_02034D88(void *);
extern void FUN_0202597C(void *);
diff --git a/arm9/src/unk_020254B8.c b/arm9/src/unk_020254B8.c
new file mode 100644
index 00000000..ed323965
--- /dev/null
+++ b/arm9/src/unk_020254B8.c
@@ -0,0 +1,114 @@
+#include "global.h"
+#include "string_util.h"
+#include "save_block_2.h"
+#include "heap.h"
+#include "unk_020254B8.h"
+
+#pragma thumb on
+
+u32 FUN_020254B8(void)
+{
+ return 16 * sizeof(struct UnkStruct_020254B8);
+}
+
+struct UnkStruct_020254B8 * FUN_020254C0(struct SaveBlock2 * sav2)
+{
+ return (struct UnkStruct_020254B8 *)SavArray_get(sav2, 9);
+}
+
+void FUN_020254CC(struct UnkStruct_020254B8 * arr)
+{
+ s32 i;
+
+ for (i = 0; i < 16; i++)
+ {
+ memset(&arr[i], 0, sizeof(struct UnkStruct_020254B8));
+ arr[i].field_00[0] = EOS;
+ }
+}
+
+u16 * FUN_020254F0(struct UnkStruct_020254B8 * arr, s32 i)
+{
+ return arr[i].field_00;
+}
+
+u8 FUN_020254F8(struct UnkStruct_020254B8 * unk, s32 i)
+{
+ return unk->field_68[i];
+}
+
+BOOL FUN_02025500(struct UnkStruct_020254B8 * a, struct UnkStruct_020254B8 * b)
+{
+ return !StringNotEqual(a->field_00, b->field_00) && a->field_10 == b->field_10;
+}
+
+void FUN_02025520(struct UnkStruct_020254B8 * sp0, struct UnkStruct_020254B8 * sp4, s32 n, u32 heap_id)
+{
+ s32 sp18[5];
+ s32 sp14;
+ struct UnkStruct_020254B8 * sp10;
+ s32 r12;
+ s32 spC;
+ s32 r4;
+ s32 r4_2;
+
+ // auto buffer = new UnkStruct_020254B8[16]
+ sp10 = AllocFromHeap(heap_id, 16 * sizeof(struct UnkStruct_020254B8));
+ FUN_020254CC(sp10);
+
+ // Look up each element of sp4 in sp0
+ for (sp14 = 0; sp14 < n; sp14++)
+ {
+ sp18[sp14] = -1;
+ for (r4_2 = 0; r4_2 < 16; r4_2++)
+ {
+ if (FUN_02025500(&sp0[r4_2], &sp4[sp14]))
+ sp18[sp14] = r4_2;
+ }
+ }
+
+ // Copy sp4 to buffer and mask matching entries in sp0
+ r4 = 0;
+ for (spC = 0; spC < n; spC++)
+ {
+ sp10[r4] = sp4[spC];
+ if (sp18[spC] >= 0)
+ sp0[sp18[spC]].field_00[0] = EOS;
+ r4++;
+ }
+
+ // Copy unmasked entries from sp0 to buffer
+ for (r12 = 0; r12 < 16; r12++)
+ {
+ if (sp0[r12].field_00[0] != EOS)
+ {
+ sp10[r4] = sp0[r12];
+ r4++;
+ if (r4 >= 16)
+ break;
+ }
+ }
+ // Copy buffer to sp0 and destroy buffer
+ memcpy(sp0, sp10, 16 * sizeof(struct UnkStruct_020254B8));
+ FreeToHeap(sp10);
+}
+
+s32 FUN_02025614(struct UnkStruct_020254B8 * a0, u32 a1)
+{
+ s32 i, j;
+
+ for (i = 0; i < 16; i++)
+ {
+ if (a1 == a0[i].field_10)
+ return 1;
+ }
+ for (i = 0; i < 16; i++)
+ {
+ for (j = 0; j < 16; j++)
+ {
+ if (a1 == a0[i].field_18[j])
+ return i + 2;
+ }
+ }
+ return 0;
+}
diff --git a/include/unk_020254B8.h b/include/unk_020254B8.h
new file mode 100644
index 00000000..792ba33e
--- /dev/null
+++ b/include/unk_020254B8.h
@@ -0,0 +1,23 @@
+#ifndef POKEDIAMOND_UNK_020254B8_H
+#define POKEDIAMOND_UNK_020254B8_H
+
+struct UnkStruct_020254B8
+{
+ u16 field_00[8];
+ u32 field_10;
+ u8 filler_14[4];
+ u32 field_18[16];
+ u8 filler_58[16];
+ u8 field_68[32];
+};
+
+u32 FUN_020254B8(void);
+struct UnkStruct_020254B8 * FUN_020254C0(struct SaveBlock2 * sav2);
+void FUN_020254CC(struct UnkStruct_020254B8 * arr);
+u16 * FUN_020254F0(struct UnkStruct_020254B8 * arr, s32 i);
+u8 FUN_020254F8(struct UnkStruct_020254B8 * unk, s32 i);
+BOOL FUN_02025500(struct UnkStruct_020254B8 * a, struct UnkStruct_020254B8 * b);
+void FUN_02025520(struct UnkStruct_020254B8 * sp0, struct UnkStruct_020254B8 * sp4, s32 n, u32 heap_id);
+s32 FUN_02025614(struct UnkStruct_020254B8 * a0, u32 a1);
+
+#endif //POKEDIAMOND_UNK_020254B8_H