diff options
-rw-r--r-- | arm9/asm/unk_020139D8.s | 533 | ||||
-rw-r--r-- | arm9/src/unk_020139D8.c | 291 | ||||
-rw-r--r-- | include/unk_020139D8.h | 34 |
3 files changed, 325 insertions, 533 deletions
diff --git a/arm9/asm/unk_020139D8.s b/arm9/asm/unk_020139D8.s deleted file mode 100644 index d03cc66a..00000000 --- a/arm9/asm/unk_020139D8.s +++ /dev/null @@ -1,533 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .rodata - - .global UNK_020ED580 -UNK_020ED580: ; 0x020ED580 - .byte 0xC0, 0x04, 0xF0, 0x04 - - .global UNK_020ED584 -UNK_020ED584: ; 0x020ED584 - .byte 0x4E, 0x02, 0xD2, 0x03 - - .global UNK_020ED588 -UNK_020ED588: ; 0x020ED588 - .byte 0xBB, 0x04, 0x00, 0x05 - - .global UNK_020ED58C -UNK_020ED58C: ; 0x020ED58C - .byte 0x41, 0x04, 0x99, 0x05 - - .global UNK_020ED590 -UNK_020ED590: ; 0x020ED590 - .byte 0x2C, 0x04, 0x9D, 0x05 - - .global UNK_020ED594 -UNK_020ED594: ; 0x020ED594 - .byte 0x7A, 0x04, 0x8D, 0x04 - - .global UNK_020ED598 -UNK_020ED598: ; 0x020ED598 - .byte 0xB6, 0x04, 0x05, 0x05 - - .global UNK_020ED59C -UNK_020ED59C: ; 0x020ED59C - .byte 0xFC, 0x04, 0x96, 0x05 - - .global UNK_020ED5A0 -UNK_020ED5A0: ; 0x020ED5A0 - .byte 0x8F, 0x04, 0x97, 0x04 - - .global UNK_020ED5A4 -UNK_020ED5A4: ; 0x020ED5A4 - .byte 0xB0, 0x04, 0xFF, 0x04 - - .global UNK_020ED5A8 -UNK_020ED5A8: ; 0x020ED5A8 - .byte 0xA7, 0x04, 0xE1, 0x04 - - .global UNK_020ED5AC -UNK_020ED5AC: ; 0x020ED5AC - .byte 0x79, 0x04, 0x98, 0x04, 0x9B, 0x04, 0x9C, 0x04 - - .global UNK_020ED5B4 -UNK_020ED5B4: ; 0x020ED5B4 - .byte 0x01 - - .global UNK_020ED5B5 -UNK_020ED5B5: ; 0x020ED5B5 - .byte 0x00, 0x02, 0x01, 0x03, 0x02, 0x04, 0x03, 0x05, 0x04, 0x07, 0x05 - - .global UNK_020ED5C0 -UNK_020ED5C0: ; 0x020ED5C0 - .short 0x016A, 0x024D, 0x0235, 0x0229, 0x0184, 0x0185, 0x0186, 0x0187 - .short 0x0188, 0x0189, 0x018A - - .global UNK_020ED5D6 -UNK_020ED5D6: ; 0x020ED5D6 - .short 0x01F0, 0x01D4, 0x0012, 0x007C, 0x0026, 0x0026, 0x006B, 0x0068 - .short 0x002F, 0x0020, 0x0017 - - .global UNK_020ED5EC -UNK_020ED5EC: ; 0x020ED5EC - .word UNK_020ED58C - .byte 2 - .word UNK_020ED580 - .byte 2 - .word UNK_020ED5A8 - .byte 2 - .word UNK_020ED5AC - .byte 4 - .word UNK_020ED5A0 - .byte 2 - .word UNK_020ED59C - .byte 2 - .word UNK_020ED588 - .byte 2 - .word UNK_020ED584 - .byte 2 - .word UNK_020ED590 - .byte 2 - .word UNK_020ED5A4 - .byte 2 - .word UNK_020ED598 - .byte 2 - .word UNK_020ED594 - .byte 2 - - .text - - thumb_func_start FUN_020139D8 -FUN_020139D8: ; 0x020139D8 - push {r3-r7, lr} - mov r1, #0x30 - add r6, r0, #0x0 - bl AllocFromHeap - ldr r4, _02013A0C ; =UNK_020ED5C0 - str r0, [sp, #0x0] - mov r7, #0x0 - add r5, r0, #0x0 -_020139EA: - ldr r0, [sp, #0x0] - mov r1, #0x1a - str r6, [r0, #0x0] - ldrh r2, [r4, #0x0] - mov r0, #0x1 - add r3, r6, #0x0 - bl NewMsgDataFromNarc - str r0, [r5, #0x4] - add r7, r7, #0x1 - add r4, r4, #0x2 - add r5, r5, #0x4 - cmp r7, #0xb - blt _020139EA - ldr r0, [sp, #0x0] - pop {r3-r7, pc} - nop -_02013A0C: .word UNK_020ED5C0 - - thumb_func_start FUN_02013A10 -FUN_02013A10: ; 0x02013A10 - push {r4-r6, lr} - add r6, r0, #0x0 - mov r4, #0x0 - add r5, r6, #0x0 -_02013A18: - ldr r0, [r5, #0x4] - bl DestroyMsgData - add r4, r4, #0x1 - add r5, r5, #0x4 - cmp r4, #0xb - blt _02013A18 - add r0, r6, #0x0 - bl FreeToHeap - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02013A30 -FUN_02013A30: ; 0x02013A30 - push {r3-r5, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r4, r2, #0x0 - add r0, r1, #0x0 - add r1, sp, #0x4 - add r2, sp, #0x0 - bl FUN_02013AEC - ldr r0, [sp, #0x4] - ldr r1, [sp, #0x0] - lsl r0, r0, #0x2 - add r0, r5, r0 - ldr r0, [r0, #0x4] - add r2, r4, #0x0 - bl ReadMsgDataIntoString - add sp, #0x8 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02013A58 -FUN_02013A58: ; 0x02013A58 - push {r3-r4, lr} - sub sp, #0xc - add r4, r1, #0x0 - ldr r1, _02013A94 ; =0x0000FFFF - cmp r0, r1 - beq _02013A88 - add r1, sp, #0x8 - add r2, sp, #0x4 - bl FUN_02013AEC - ldr r0, [sp, #0x8] - mov r3, #0x0 - lsl r1, r0, #0x1 - ldr r0, _02013A98 ; =UNK_020ED5C0 - ldrh r0, [r0, r1] - str r0, [sp, #0x8] - str r4, [sp, #0x0] - ldr r1, [sp, #0x8] - ldr r2, [sp, #0x4] - mov r0, #0x1a - bl ReadMsgData_NewNarc_ExistingString - add sp, #0xc - pop {r3-r4, pc} -_02013A88: - add r0, r4, #0x0 - bl StringSetEmpty - add sp, #0xc - pop {r3-r4, pc} - nop -_02013A94: .word 0x0000FFFF -_02013A98: .word UNK_020ED5C0 - - thumb_func_start FUN_02013A9C -FUN_02013A9C: ; 0x02013A9C - push {r4-r5} - ldr r4, _02013AE0 ; =UNK_020ED5C0 - mov r2, #0x0 -_02013AA2: - ldrh r3, [r4, #0x0] - cmp r0, r3 - bne _02013AD0 - mov r4, #0x0 - add r3, r4, #0x0 - cmp r2, #0x0 - bls _02013AC6 - ldr r0, _02013AE4 ; =UNK_020ED5D6 -_02013AB2: - lsl r5, r4, #0x1 - ldrh r5, [r0, r5] - add r4, r4, #0x1 - lsl r4, r4, #0x10 - add r3, r3, r5 - lsl r3, r3, #0x10 - lsr r4, r4, #0x10 - lsr r3, r3, #0x10 - cmp r4, r2 - blo _02013AB2 -_02013AC6: - add r0, r3, r1 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - pop {r4-r5} - bx lr -_02013AD0: - add r2, r2, #0x1 - add r4, r4, #0x2 - cmp r2, #0xb - blo _02013AA2 - ldr r0, _02013AE8 ; =0x0000FFFF - pop {r4-r5} - bx lr - nop -_02013AE0: .word UNK_020ED5C0 -_02013AE4: .word UNK_020ED5D6 -_02013AE8: .word 0x0000FFFF - - thumb_func_start FUN_02013AEC -FUN_02013AEC: ; 0x02013AEC - push {r3-r6} - ldr r3, _02013B20 ; =0x00000FFF - ldr r6, _02013B24 ; =UNK_020ED5D6 - and r3, r0 - mov r0, #0x0 - add r5, r0, #0x0 -_02013AF8: - ldrh r4, [r6, #0x0] - add r0, r0, r4 - cmp r3, r0 - bhs _02013B12 - str r5, [r1, #0x0] - ldr r1, _02013B24 ; =UNK_020ED5D6 - lsl r4, r5, #0x1 - ldrh r1, [r1, r4] - sub r0, r0, r1 - sub r0, r3, r0 - str r0, [r2, #0x0] - pop {r3-r6} - bx lr -_02013B12: - add r5, r5, #0x1 - add r6, r6, #0x2 - cmp r5, #0xb - blo _02013AF8 - pop {r3-r6} - bx lr - nop -_02013B20: .word 0x00000FFF -_02013B24: .word UNK_020ED5D6 - - thumb_func_start FUN_02013B28 -FUN_02013B28: ; 0x02013B28 - mov r0, #0x8 - bx lr - - thumb_func_start FUN_02013B2C -FUN_02013B2C: ; 0x02013B2C - push {r3, lr} - mov r2, #0x0 - str r2, [r0, #0x0] - ldr r3, _02013B54 ; =UNK_020ED5B4 - str r2, [r0, #0x4] -_02013B36: - ldrb r1, [r3, #0x0] - cmp r1, #0x2 - bne _02013B48 - ldr r1, _02013B58 ; =UNK_020ED5B5 - lsl r2, r2, #0x1 - ldrb r1, [r1, r2] - bl FUN_02013C18 - pop {r3, pc} -_02013B48: - add r2, r2, #0x1 - add r3, r3, #0x2 - cmp r2, #0x6 - blo _02013B36 - pop {r3, pc} - nop -_02013B54: .word UNK_020ED5B4 -_02013B58: .word UNK_020ED5B5 - - thumb_func_start FUN_02013B5C -FUN_02013B5C: ; 0x02013B5C - ldr r3, _02013B64 ; =SavArray_get - mov r1, #0x22 - bx r3 - nop -_02013B64: .word SavArray_get - - thumb_func_start FUN_02013B68 -FUN_02013B68: ; 0x02013B68 - ldr r0, [r0, #0x4] - add r2, r0, #0x0 - lsr r2, r1 - mov r0, #0x1 - and r0, r2 - bx lr - - thumb_func_start FUN_02013B74 -FUN_02013B74: ; 0x02013B74 - push {r3-r5, lr} - add r5, r0, #0x0 - mov r2, #0x0 - ldr r3, [r5, #0x4] - add r4, r2, #0x0 - mov r0, #0x1 -_02013B80: - add r1, r3, #0x0 - lsr r1, r2 - tst r1, r0 - bne _02013B8A - add r4, r4, #0x1 -_02013B8A: - add r2, r2, #0x1 - cmp r2, #0x20 - blo _02013B80 - cmp r4, #0x0 - beq _02013BC4 - bl LCRandom - add r1, r4, #0x0 - bl _u32_div_f - ldr r4, [r5, #0x4] - mov r0, #0x0 - mov r2, #0x1 -_02013BA4: - add r3, r4, #0x0 - lsr r3, r0 - tst r3, r2 - bne _02013BBE - cmp r1, #0x0 - bne _02013BBC - mov r1, #0x1 - ldr r2, [r5, #0x4] - lsl r1, r0 - orr r1, r2 - str r1, [r5, #0x4] - pop {r3-r5, pc} -_02013BBC: - sub r1, r1, #0x1 -_02013BBE: - add r0, r0, #0x1 - cmp r0, #0x20 - blo _02013BA4 -_02013BC4: - mov r0, #0x20 - pop {r3-r5, pc} - - thumb_func_start FUN_02013BC8 -FUN_02013BC8: ; 0x02013BC8 - ldr r3, [r0, #0x4] - mov r2, #0x0 - mov r0, #0x1 -_02013BCE: - add r1, r3, #0x0 - lsr r1, r2 - tst r1, r0 - bne _02013BDA - mov r0, #0x0 - bx lr -_02013BDA: - add r2, r2, #0x1 - cmp r2, #0x20 - blo _02013BCE - mov r0, #0x1 - bx lr - - thumb_func_start FUN_02013BE4 -FUN_02013BE4: ; 0x02013BE4 - push {r3-r4} - mov r3, #0x0 - ldr r4, _02013C08 ; =UNK_020ED5D6 - add r2, r3, #0x0 -_02013BEC: - ldrh r1, [r4, #0x0] - add r2, r2, #0x1 - add r4, r4, #0x2 - add r1, r3, r1 - lsl r1, r1, #0x10 - lsr r3, r1, #0x10 - cmp r2, #0x9 - blt _02013BEC - add r0, r3, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - pop {r3-r4} - bx lr - nop -_02013C08: .word UNK_020ED5D6 - - thumb_func_start FUN_02013C0C -FUN_02013C0C: ; 0x02013C0C - ldr r0, [r0, #0x0] - add r2, r0, #0x0 - lsr r2, r1 - mov r0, #0x1 - and r0, r2 - bx lr - - thumb_func_start FUN_02013C18 -FUN_02013C18: ; 0x02013C18 - mov r2, #0x1 - ldr r3, [r0, #0x0] - lsl r2, r1 - add r1, r3, #0x0 - orr r1, r2 - str r1, [r0, #0x0] - bx lr - .balign 4 - - thumb_func_start FUN_02013C28 -FUN_02013C28: ; 0x02013C28 - push {r4-r7} - mov r3, #0x0 - ldr r5, _02013C64 ; =UNK_020ED5EC - add r2, r3, #0x0 -_02013C30: - ldr r7, [r5, #0x4] - add r4, r2, #0x0 - cmp r7, #0x0 - ble _02013C54 - ldr r6, [r5, #0x0] -_02013C3A: - ldrh r1, [r6, #0x0] - cmp r0, r1 - bne _02013C4C - ldr r0, _02013C68 ; =UNK_020ED5EC + 4 - lsl r1, r3, #0x3 - ldr r0, [r0, r1] - sub r0, r0, #0x1 - pop {r4-r7} - bx lr -_02013C4C: - add r4, r4, #0x1 - add r6, r6, #0x2 - cmp r4, r7 - blt _02013C3A -_02013C54: - add r3, r3, #0x1 - add r5, #0x8 - cmp r3, #0xc - blo _02013C30 - mov r0, #0x0 - pop {r4-r7} - bx lr - nop -_02013C64: .word UNK_020ED5EC -_02013C68: .word UNK_020ED5EC + 4 - - thumb_func_start FUN_02013C6C -FUN_02013C6C: ; 0x02013C6C - push {r3-r7, lr} - ldr r3, _02013CC8 ; =UNK_020ED5EC - add r6, r1, #0x0 - mov r7, #0x0 -_02013C74: - ldr r5, [r3, #0x4] - mov r2, #0x0 - cmp r5, #0x0 - ble _02013CBC - ldr r4, [r3, #0x0] -_02013C7E: - ldrh r1, [r4, #0x0] - cmp r0, r1 - bne _02013CB4 - ldr r2, _02013CCC ; =UNK_020ED5EC + 4 - lsl r1, r7, #0x3 - ldr r2, [r2, r1] - mov r0, #0x0 - cmp r2, #0x0 - beq _02013CAC - ldr r2, _02013CC8 ; =UNK_020ED5EC - add r2, r2, r1 - ldr r2, [r2, #0x4] -_02013C96: - cmp r6, #0x0 - bne _02013CA4 - ldr r2, _02013CC8 ; =UNK_020ED5EC - lsl r0, r0, #0x1 - ldr r1, [r2, r1] - ldrh r0, [r1, r0] - pop {r3-r7, pc} -_02013CA4: - sub r6, r6, #0x1 - add r0, r0, #0x1 - cmp r2, #0x0 - bne _02013C96 -_02013CAC: - bl ErrorHandling - ldr r0, _02013CD0 ; =0x0000FFFF - pop {r3-r7, pc} -_02013CB4: - add r2, r2, #0x1 - add r4, r4, #0x2 - cmp r2, r5 - blt _02013C7E -_02013CBC: - add r7, r7, #0x1 - add r3, #0x8 - cmp r7, #0xc - blo _02013C74 - pop {r3-r7, pc} - nop -_02013CC8: .word UNK_020ED5EC -_02013CCC: .word UNK_020ED5EC + 4 -_02013CD0: .word 0x0000FFFF diff --git a/arm9/src/unk_020139D8.c b/arm9/src/unk_020139D8.c new file mode 100644 index 00000000..82c96ea9 --- /dev/null +++ b/arm9/src/unk_020139D8.c @@ -0,0 +1,291 @@ +#include "global.h" +#include "msgdata.h" +#include "heap.h" +#include "save_block_2.h" +#include "math_util.h" +#include "unk_020139D8.h" + +#pragma thumb on + +const u8 UNK_020ED5B4[][2] = { + { LANGUAGE_JAPANESE, 0 }, + { LANGUAGE_ENGLISH, 1 }, + { LANGUAGE_FRENCH, 2 }, + { LANGUAGE_ITALIAN, 3 }, + { LANGUAGE_GERMAN, 4 }, + { LANGUAGE_SPANISH, 5 }, +}; + +const u16 UNK_020ED5C0[] = { + 362, + 589, + 565, + 553, + 388, + 389, + 390, + 391, + 392, + 393, + 394 +}; + +const u16 UNK_020ED5D6[] = { + 496, + 468, + 18, + 124, + 38, + 38, + 107, + 104, + 47, + 32, + 23 +}; + +const u16 UNK_020ED580[] = { 0x04C0, 0x04F0 }; +const u16 UNK_020ED5A8[] = { 0x04A7, 0x04E1 }; +const u16 UNK_020ED5AC[] = { 0x0479, 0x0498, 0x049B, 0x049C }; +const u16 UNK_020ED5A0[] = { 0x048F, 0x0497 }; +const u16 UNK_020ED59C[] = { 0x04FC, 0x0596 }; +const u16 UNK_020ED594[] = { 0x047A, 0x048D }; +const u16 UNK_020ED58C[] = { 0x0441, 0x0599 }; +const u16 UNK_020ED590[] = { 0x042C, 0x059D }; +const u16 UNK_020ED5A4[] = { 0x04B0, 0x04FF }; +const u16 UNK_020ED598[] = { 0x04B6, 0x0505 }; +const u16 UNK_020ED584[] = { 0x024E, 0x03D2 }; +const u16 UNK_020ED588[] = { 0x04BB, 0x0500 }; + +const struct UnkStruct_020ED5EC +{ + const u16 * data; + s32 count; +} UNK_020ED5EC[] = { + { UNK_020ED58C, NELEMS(UNK_020ED58C) }, + { UNK_020ED580, NELEMS(UNK_020ED580) }, + { UNK_020ED5A8, NELEMS(UNK_020ED5A8) }, + { UNK_020ED5AC, NELEMS(UNK_020ED5AC) }, + { UNK_020ED5A0, NELEMS(UNK_020ED5A0) }, + { UNK_020ED59C, NELEMS(UNK_020ED59C) }, + { UNK_020ED588, NELEMS(UNK_020ED588) }, + { UNK_020ED584, NELEMS(UNK_020ED584) }, + { UNK_020ED590, NELEMS(UNK_020ED590) }, + { UNK_020ED5A4, NELEMS(UNK_020ED5A4) }, + { UNK_020ED598, NELEMS(UNK_020ED598) }, + { UNK_020ED594, NELEMS(UNK_020ED594) }, +}; + +struct UnkStruct_020139D8 * FUN_020139D8(u32 heap_id) +{ + struct UnkStruct_020139D8 * ret = (struct UnkStruct_020139D8 *)AllocFromHeap(heap_id, sizeof(struct UnkStruct_020139D8)); + s32 i; + for (i = 0; i < 11; i++) + { + ret->heap_id = heap_id; // inadvertently inside the loop + ret->msgDatas[i] = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, UNK_020ED5C0[i], heap_id); + } + return ret; +} + +void FUN_02013A10(struct UnkStruct_020139D8 * unk) +{ + s32 i; + for (i = 0; i < 11; i++) + { + DestroyMsgData(unk->msgDatas[i]); + } + FreeToHeap(unk); +} + +void FUN_02013A30(struct UnkStruct_020139D8 * unk, u16 a1, struct String * str) +{ + s32 sp4; + s32 sp0; + FUN_02013AEC(a1, &sp4, &sp0); + ReadMsgDataIntoString(unk->msgDatas[sp4], (u32)sp0, str); +} + +void FUN_02013A58(u16 a0, struct String * a1) +{ + s32 sp8; + s32 sp4; + if (a0 != 0xFFFF) + { + FUN_02013AEC(a0, &sp8, &sp4); + sp8 = UNK_020ED5C0[sp8]; + ReadMsgData_NewNarc_ExistingString(NARC_MSGDATA_MSG, (u32)sp8, (u32)sp4, 0, a1); + } + else + StringSetEmpty(a1); +} + +u16 FUN_02013A9C(u16 a0, u16 a1) +{ + u32 i; + u16 k; + u16 j; + for (i = 0; i < 11; i++) + { + if (a0 == UNK_020ED5C0[i]) + { + for (j = 0, k = 0; j < i; j++) + k += UNK_020ED5D6[j]; + return (u16)(k + a1); + } + } + return 0xFFFF; +} + +void FUN_02013AEC(u32 a0, s32 * a1, s32 * a2) +{ + s32 i; + s32 j; + u32 r3; + + r3 = a0 & 0xFFF; + j = 0; + + for (i = 0; i < NELEMS(UNK_020ED5D6); i++) + { + j += UNK_020ED5D6[i]; + if (r3 < j) + { + *a1 = i; + *a2 = (s32)(r3 - (j - UNK_020ED5D6[i])); + return; + } + } +} + +u32 FUN_02013B28(void) +{ + return sizeof(struct UnkStruct_02013B28); +} + +void FUN_02013B2C(struct UnkStruct_02013B28 * unk) +{ + u32 i; + unk->unk_0 = 0; + unk->unk_4 = 0; + for (i = 0; i < 6; i++) + { + if (UNK_020ED5B4[i][0] == GAME_LANGUAGE) + { + FUN_02013C18(unk, UNK_020ED5B4[i][1]); + break; + } + } +} + +struct UnkStruct_02013B28 * FUN_02013B5C(struct SaveBlock2 * sav2) +{ + return (struct UnkStruct_02013B28 *)SavArray_get(sav2, 34); +} + +BOOL FUN_02013B68(struct UnkStruct_02013B28 * unk, u32 a1) +{ + return (BOOL)((unk->unk_4 >> a1) & 1); +} + +s32 FUN_02013B74(struct UnkStruct_02013B28 * unk) +{ + u32 i; + u32 count; + u32 which_bit; + for (i = 0, count = 0; i < 32; i++) + { + if (!((unk->unk_4 >> i) & 1)) + count++; + } + if (count != 0) + { + which_bit = LCRandom() % count; + for (i = 0; i < 32; i++) + { + if (!((unk->unk_4 >> i) & 1)) + { + if (which_bit == 0) + { + unk->unk_4 |= (1 << i); + return (s32)i; + } + which_bit--; + } + } + } + return 32; +} + +BOOL FUN_02013BC8(struct UnkStruct_02013B28 * unk) +{ + u32 i; + for (i = 0; i < 32; i++) + { + if (!((unk->unk_4 >> i) & 1)) + return FALSE; + } + return TRUE; +} + +u16 FUN_02013BE4(u16 a0) +{ + s32 i; + u16 skip = 0; + for (i = 0; i < 9; i++) + skip += UNK_020ED5D6[i]; + return (u16)(skip + a0); +} + +BOOL FUN_02013C0C(struct UnkStruct_02013B28 * unk, u32 a1) +{ + return (BOOL)((unk->unk_0 >> a1) & 1); +} + +void FUN_02013C18(struct UnkStruct_02013B28 * unk, u32 a1) +{ + unk->unk_0 |= (1 << a1); +} + +s32 FUN_02013C28(u16 a0) +{ + s32 r3; + s32 r4; + + for (r3 = 0; r3 < NELEMS(UNK_020ED5EC); r3++) + { + for (r4 = 0; r4 < UNK_020ED5EC[r3].count; r4++) + { + if (a0 == UNK_020ED5EC[r3].data[r4]) + return UNK_020ED5EC[r3].count - 1; + } + } + return 0; +} + +u16 FUN_02013C6C(u16 a0, s32 a1) +{ + s32 r7; + s32 r2; + s32 r0; + + for (r7 = 0; r7 < NELEMS(UNK_020ED5EC); r7++) + { + for (r2 = 0; r2 < UNK_020ED5EC[r7].count; r2++) + { + if (a0 == UNK_020ED5EC[r7].data[r2]) + { + // ERROR: Infinite loop when reached + for (r0 = 0; /*r0 <*/ UNK_020ED5EC[r7].count; r0++) + { + if (a1 == 0) + return UNK_020ED5EC[r7].data[r0]; + a1--; + } + GF_ASSERT(0); + return 0xFFFF; + } + } + } + return a0; +} diff --git a/include/unk_020139D8.h b/include/unk_020139D8.h new file mode 100644 index 00000000..652c9caf --- /dev/null +++ b/include/unk_020139D8.h @@ -0,0 +1,34 @@ +#ifndef POKEDIAMOND_UNK_020139D8_H +#define POKEDIAMOND_UNK_020139D8_H + +struct UnkStruct_020139D8 +{ + u32 heap_id; + struct MsgData * msgDatas[11]; +}; + +struct UnkStruct_02013B28 +{ + u32 unk_0; + u32 unk_4; +}; + +struct UnkStruct_020139D8 * FUN_020139D8(u32 heap_id); +void FUN_02013A10(struct UnkStruct_020139D8 * unk); +void FUN_02013A30(struct UnkStruct_020139D8 * unk, u16 a1, struct String * str); +void FUN_02013A58(u16 a0, struct String * a1); +u16 FUN_02013A9C(u16 a0, u16 a1); +void FUN_02013AEC(u32 a0, s32 * a1, s32 * a2); +u32 FUN_02013B28(void); +void FUN_02013B2C(struct UnkStruct_02013B28 * unk); +struct UnkStruct_02013B28 * FUN_02013B5C(struct SaveBlock2 * sav2); +BOOL FUN_02013B68(struct UnkStruct_02013B28 * unk, u32 a1); +s32 FUN_02013B74(struct UnkStruct_02013B28 * unk); +BOOL FUN_02013BC8(struct UnkStruct_02013B28 * unk); +u16 FUN_02013BE4(u16 a0); +BOOL FUN_02013C0C(struct UnkStruct_02013B28 * unk, u32 a1); +void FUN_02013C18(struct UnkStruct_02013B28 * unk, u32 a1); +s32 FUN_02013C28(u16 a0); +u16 FUN_02013C6C(u16 a0, s32 a1); + +#endif //POKEDIAMOND_UNK_020139D8_H |