diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-08-28 12:45:00 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-08-28 12:45:00 -0400 |
commit | cd2529e8855bdf5bb725b40524478cf197b27a62 (patch) | |
tree | d92f5e462b64a05b45e08e00cd17790fabb54acf | |
parent | 46175353717188d59960c1ed9cf3a12deb81a6ab (diff) |
Decompile unk_020254B8
-rw-r--r-- | arm9/asm/unk_020254B8.s | 246 | ||||
-rw-r--r-- | arm9/src/save_arrays.c | 3 | ||||
-rw-r--r-- | arm9/src/unk_020254B8.c | 114 | ||||
-rw-r--r-- | include/unk_020254B8.h | 23 |
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 |