diff options
-rw-r--r-- | arm9/asm/unk_02002F08.s | 287 | ||||
-rw-r--r-- | arm9/src/font.c | 10 | ||||
-rw-r--r-- | arm9/src/unk_02002F08.c | 139 | ||||
-rw-r--r-- | arm9/src/unk_02021934.c | 8 | ||||
-rw-r--r-- | include/font.h | 4 | ||||
-rw-r--r-- | include/string16.h | 4 | ||||
-rw-r--r-- | include/unk_02002F08.h | 38 |
7 files changed, 191 insertions, 299 deletions
diff --git a/arm9/asm/unk_02002F08.s b/arm9/asm/unk_02002F08.s deleted file mode 100644 index 10ad89e0..00000000 --- a/arm9/asm/unk_02002F08.s +++ /dev/null @@ -1,287 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern UNK_02106FC8 - - .text - - thumb_func_start FUN_02002F08 -FUN_02002F08: ; 0x02002F08 - push {r4-r6, lr} - lsl r4, r0, #0x2 - ldr r0, _02002F3C ; =UNK_02106FC8 - add r5, r1, #0x0 - ldr r0, [r0, #0x0] - add r6, r2, #0x0 - add r0, r0, r4 - add r0, #0x94 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _02002F22 - bl GF_AssertFail -_02002F22: - add r0, r5, #0x0 - bl String_c_str - add r1, r0, #0x0 - ldr r0, _02002F3C ; =UNK_02106FC8 - add r2, r6, #0x0 - ldr r0, [r0, #0x0] - add r0, r0, r4 - add r0, #0x94 - ldr r0, [r0, #0x0] - bl StringGetWidth - pop {r4-r6, pc} - .balign 4 -_02002F3C: .word UNK_02106FC8 - - thumb_func_start FUN_02002F40 -FUN_02002F40: ; 0x02002F40 - push {r4, lr} - add r4, r3, #0x0 - bl FUN_02002E14 - cmp r0, r4 - bhs _02002F52 - sub r0, r4, r0 - lsr r0, r0, #0x1 - pop {r4, pc} -_02002F52: - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02002F58 -FUN_02002F58: ; 0x02002F58 - push {r3-r7, lr} - ldrh r2, [r0, #0x0] - ldr r1, _02002F8C ; =0x0000FFFF - mov r5, #0x1 - cmp r2, r1 - beq _02002F88 - mov r6, #0xe - lsl r6, r6, #0xc - add r7, r1, #0x0 - sub r4, r1, #0x1 -_02002F6C: - cmp r2, r4 - bne _02002F76 - bl MsgArray_SkipControlCode - b _02002F82 -_02002F76: - cmp r2, r6 - bne _02002F80 - add r5, r5, #0x1 - add r0, r0, #0x2 - b _02002F82 -_02002F80: - add r0, r0, #0x2 -_02002F82: - ldrh r2, [r0, #0x0] - cmp r2, r7 - bne _02002F6C -_02002F88: - add r0, r5, #0x0 - pop {r3-r7, pc} - .balign 4 -_02002F8C: .word 0x0000FFFF - - thumb_func_start FUN_02002F90 -FUN_02002F90: ; 0x02002F90 - push {r3, lr} - bl String_c_str - bl FUN_02002F58 - pop {r3, pc} - - thumb_func_start FUN_02002F9C -FUN_02002F9C: ; 0x02002F9C - push {r3-r5, lr} - lsl r4, r0, #0x2 - ldr r0, _02002FCC ; =UNK_02106FC8 - add r5, r1, #0x0 - ldr r0, [r0, #0x0] - add r0, r0, r4 - add r0, #0x94 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _02002FB4 - bl GF_AssertFail -_02002FB4: - add r0, r5, #0x0 - bl String_c_str - add r1, r0, #0x0 - ldr r0, _02002FCC ; =UNK_02106FC8 - ldr r0, [r0, #0x0] - add r0, r0, r4 - add r0, #0x94 - ldr r0, [r0, #0x0] - bl StringGetWidth_SingleLine_HandleClearToControlCode - pop {r3-r5, pc} - .balign 4 -_02002FCC: .word UNK_02106FC8 - - thumb_func_start FUN_02002FD0 -FUN_02002FD0: ; 0x02002FD0 - push {r4, lr} - mov r1, #0x12 - lsl r1, r1, #0x4 - bl AllocFromHeap - mov r2, #0x12 - mov r1, #0x0 - lsl r2, r2, #0x4 - add r4, r0, #0x0 - bl MI_CpuFill8 - add r0, r4, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02002FEC -FUN_02002FEC: ; 0x02002FEC - ldr r3, _02002FF0 ; =FreeToHeap - bx r3 - .balign 4 -_02002FF0: .word FreeToHeap - - thumb_func_start FUN_02002FF4 -FUN_02002FF4: ; 0x02002FF4 - push {r3-r4} - mov r4, #0x14 - mul r4, r1 - str r2, [r0, r4] - add r1, r0, r4 - ldr r0, [sp, #0x8] - str r3, [r1, #0x4] - str r0, [r1, #0x8] - pop {r3-r4} - bx lr - - thumb_func_start FUN_02003008 -FUN_02003008: ; 0x02003008 - push {r3-r7, lr} - sub sp, #0x8 - add r4, r2, #0x0 - add r5, r0, #0x0 - add r6, r1, #0x0 - str r3, [sp, #0x4] - add r0, r3, #0x0 - add r1, r4, #0x0 - bl AllocFromHeap - add r7, r0, #0x0 - ldr r0, [sp, #0x4] - add r1, r4, #0x0 - bl AllocFromHeap - add r3, r0, #0x0 - add r0, r5, #0x0 - add r1, r6, #0x0 - add r2, r7, #0x0 - str r4, [sp, #0x0] - bl FUN_02002FF4 - add sp, #0x8 - pop {r3-r7, pc} - - thumb_func_start FUN_02003038 -FUN_02003038: ; 0x02003038 - push {r3-r5, lr} - add r4, r0, #0x0 - mov r0, #0x14 - add r5, r1, #0x0 - mul r5, r0 - ldr r0, [r4, r5] - bl FreeToHeap - add r0, r4, r5 - ldr r0, [r0, #0x4] - bl FreeToHeap - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02003054 -FUN_02003054: ; 0x02003054 - push {r3-r7, lr} - add r5, r0, #0x0 - add r0, sp, #0x8 - ldrh r7, [r0, #0x10] - add r6, r2, #0x0 - mov r0, #0x14 - mul r6, r0 - str r1, [sp, #0x0] - add r0, r1, #0x0 - ldr r1, [r5, r6] - lsl r4, r3, #0x1 - add r1, r1, r4 - add r2, r7, #0x0 - bl MIi_CpuCopy16 - add r1, r5, r6 - ldr r1, [r1, #0x4] - ldr r0, [sp, #0x0] - add r1, r1, r4 - add r2, r7, #0x0 - bl MIi_CpuCopy16 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02003084 -FUN_02003084: ; 0x02003084 - push {r4-r6, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r0, r1, #0x0 - add r1, r2, #0x0 - add r2, sp, #0x4 - ldr r4, [sp, #0x1c] - bl GfGfxLoader_GetPlttData - add r6, r0, #0x0 - bne _0200309E - bl GF_AssertFail -_0200309E: - cmp r4, #0x0 - bne _020030A6 - ldr r0, [sp, #0x4] - ldr r4, [r0, #0x8] -_020030A6: - add r0, sp, #0x8 - ldrh r0, [r0, #0x18] - ldr r2, [sp, #0x18] - mov r1, #0x14 - mul r1, r2 - add r1, r5, r1 - lsl r0, r0, #0x1 - ldr r1, [r1, #0x8] - add r0, r4, r0 - cmp r0, r1 - bls _020030C0 - bl GF_AssertFail -_020030C0: - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #0x0] - ldr r1, [sp, #0x4] - add r3, sp, #0x8 - ldr r2, [r1, #0xc] - ldrh r1, [r3, #0x1c] - ldrh r3, [r3, #0x18] - add r0, r5, #0x0 - lsl r1, r1, #0x1 - add r1, r2, r1 - ldr r2, [sp, #0x18] - bl FUN_02003054 - add r0, r6, #0x0 - bl FreeToHeap - add sp, #0x8 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_020030E8 -FUN_020030E8: ; 0x020030E8 - push {r4, lr} - sub sp, #0x10 - ldr r4, [sp, #0x18] - str r4, [sp, #0x0] - ldr r4, [sp, #0x1c] - str r4, [sp, #0x4] - add r4, sp, #0x8 - ldrh r4, [r4, #0x18] - str r4, [sp, #0x8] - mov r4, #0x0 - str r4, [sp, #0xc] - bl FUN_02003084 - add sp, #0x10 - pop {r4, pc} - .balign 4 diff --git a/arm9/src/font.c b/arm9/src/font.c index 98885671..e09b0341 100644 --- a/arm9/src/font.c +++ b/arm9/src/font.c @@ -20,11 +20,11 @@ const struct FontInfo gFontInfos[5] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }; -extern u32 FUN_02021590(u32, u16, u32, u16, u32); -extern void FUN_020215E0(u32, u32, u32); -extern void FUN_020215C8(u32 param0); -extern void FUN_02021750(void *, u32); -extern u32 FUN_020218D8(void *, u16 *str, u32); +extern struct UnkStruct_0202199C *FUN_02021590(u32, u16, u32, u16, u32); +extern void FUN_020215E0(struct UnkStruct_0202199C *, u32, u32); +extern void FUN_020215C8(struct UnkStruct_0202199C *param0); +extern void FUN_02021750(struct UnkStruct_0202199C *, u32); +extern u32 FUN_020218D8(struct UnkStruct_0202199C *, u16 *str, u32); THUMB_FUNC void FUN_02002C14() { diff --git a/arm9/src/unk_02002F08.c b/arm9/src/unk_02002F08.c new file mode 100644 index 00000000..b81da622 --- /dev/null +++ b/arm9/src/unk_02002F08.c @@ -0,0 +1,139 @@ +#include "global.h" +#include "unk_02002F08.h" +#include "font.h" +#include "gf_gfx_loader.h" +#include "string16.h" +#include "unk_0201B8B8.h" + +THUMB_FUNC s32 FUN_02002F08(u32 param0, struct String *str, u32 param2) +{ + GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL); + + return StringGetWidth(UNK_02106FC8->unk94[param0], String_c_str(str), param2); +} + +THUMB_FUNC u32 FUN_02002F40(u32 param0, struct String *str, u32 param2, u32 param3) +{ + u32 r0 = FUN_02002E14(param0, str, param2); + if (r0 < param3) + { + return (param3 - r0) / 2; + } + + return 0; +} + +THUMB_FUNC u32 FUN_02002F58(const u16 *str) +{ + u32 r5 = 1; + while (*str != EOS) + { + if (*str == 0xFFFE) + { + str = MsgArray_SkipControlCode(str); + continue; + } + + if (*str == 0xE000) + { + r5++; + str++; + continue; + } + + str++; + } + + return r5; +} + +THUMB_FUNC u32 FUN_02002F90(struct String *str) +{ + return FUN_02002F58(String_c_str(str)); +} + +THUMB_FUNC s32 FUN_02002F9C(u32 param0, struct String *str) +{ + GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL); + + return StringGetWidth_SingleLine_HandleClearToControlCode( + UNK_02106FC8->unk94[param0], String_c_str(str)); +} + +THUMB_FUNC struct UnkStruct_02002F08 *FUN_02002FD0(u32 heap_id) +{ + struct UnkStruct_02002F08 *ptr = AllocFromHeap(heap_id, sizeof(struct UnkStruct_02002F08)); + MI_CpuFill8(ptr, 0, sizeof(struct UnkStruct_02002F08)); + + return ptr; +} + +THUMB_FUNC void FUN_02002FEC(struct UnkStruct_02002F08 *ptr) +{ + FreeToHeap(ptr); +} + +THUMB_FUNC void FUN_02002FF4( + struct UnkStruct_02002F08 *param0, u32 param1, void *param2, void *param3, u32 size) +{ + param0->unk000[param1].unk00 = param2; + param0->unk000[param1].unk04 = param3; + param0->unk000[param1].unk08 = size; +} + +THUMB_FUNC void FUN_02003008(struct UnkStruct_02002F08 *param0, u32 param1, u32 size, u32 heap_id) +{ + void *ptr = AllocFromHeap(heap_id, size); + void *ptr2 = AllocFromHeap(heap_id, size); + + FUN_02002FF4(param0, param1, ptr, ptr2, size); +} + +THUMB_FUNC void FUN_02003038(struct UnkStruct_02002F08 *param0, u32 param1) +{ + FreeToHeap(param0->unk000[param1].unk00); + FreeToHeap(param0->unk000[param1].unk04); +} + +THUMB_FUNC void FUN_02003054( + struct UnkStruct_02002F08 *param0, const void *param1, u32 param2, u32 offset, u16 size) +{ + MIi_CpuCopy16(param1, param0->unk000[param2].unk00 + offset, size); + MIi_CpuCopy16(param1, param0->unk000[param2].unk04 + offset, size); +} + +THUMB_FUNC void FUN_02003084(struct UnkStruct_02002F08 *param0, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 param4, + u32 size, + u16 offset, + u16 param7) +{ + NNSG2dPaletteData *pltData; + void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); + + GF_ASSERT(ptr != NULL); + + if (size == 0) + { + size = pltData->szByte; + } + + GF_ASSERT(size + offset * 2 <= param0->unk000[param4].unk08); + + FUN_02003054(param0, pltData->pRawData + param7 * 2, param4, offset, (u16)size); + FreeToHeap(ptr); +} + +THUMB_FUNC void FUN_020030E8(struct UnkStruct_02002F08 *param0, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 param4, + u32 size, + u16 offset) +{ + FUN_02003084(param0, narcId, memberId, heap_id, param4, size, offset, 0); +} diff --git a/arm9/src/unk_02021934.c b/arm9/src/unk_02021934.c index ebc600fa..b12e2d8f 100644 --- a/arm9/src/unk_02021934.c +++ b/arm9/src/unk_02021934.c @@ -10,9 +10,9 @@ void StrAddChar(struct String * str, u16 val); -int StringGetWidth(struct UnkStruct_0202199C * r7, const u16 * arr, u32 r6) +s32 StringGetWidth(struct UnkStruct_0202199C * r7, const u16 * arr, u32 r6) { - int ret = 0; + s32 ret = 0; u32 r4 = 0; while (*arr != 0xFFFF) { @@ -38,9 +38,9 @@ int StringGetWidth(struct UnkStruct_0202199C * r7, const u16 * arr, u32 r6) return ret; } -int StringGetWidth_SingleLine_HandleClearToControlCode(struct UnkStruct_0202199C * r6, const u16 * arr) +s32 StringGetWidth_SingleLine_HandleClearToControlCode(struct UnkStruct_0202199C * r6, const u16 * arr) { - int ret = 0; + s32 ret = 0; while (*arr != 0xFFFF) { if (*arr == 0xFFFE) diff --git a/include/font.h b/include/font.h index 3818fb7b..6617f8ef 100644 --- a/include/font.h +++ b/include/font.h @@ -10,9 +10,11 @@ struct UnkStruct_02002C14 u8 width; u8 height; void *unk84[4]; - void *unk94[4]; + struct UnkStruct_0202199C *unk94[4]; }; +extern struct UnkStruct_02002C14 *UNK_02106FC8; + void FUN_02002C14(); void FUN_02002C50(u32 param0, u32 param1); void FUN_02002C84(s32 param0, u32 param1); diff --git a/include/string16.h b/include/string16.h index bc276ea7..69ea4e30 100644 --- a/include/string16.h +++ b/include/string16.h @@ -25,8 +25,8 @@ BOOL StringCompare(struct String *, struct String *); void CopyU16ArrayToStringN(struct String *, u16 *, u32); // copy void StringSetEmpty(struct String *); // set empty struct String * StringDup(struct String *, u32 heap_id); -int StringGetWidth(struct UnkStruct_0202199C * r7, const u16 * arr, u32 r6); -int StringGetWidth_SingleLine_HandleClearToControlCode(struct UnkStruct_0202199C * r6, const u16 * arr); +s32 StringGetWidth(struct UnkStruct_0202199C * r7, const u16 * arr, u32 r6); +s32 StringGetWidth_SingleLine_HandleClearToControlCode(struct UnkStruct_0202199C * r6, const u16 * arr); void String_dtor(struct String * str); void StringCopy(struct String * dest, struct String * src); void String16_FormatInteger(struct String * str, int num, u32 ndigits, int strConvMode, BOOL whichCharset); diff --git a/include/unk_02002F08.h b/include/unk_02002F08.h new file mode 100644 index 00000000..773d9246 --- /dev/null +++ b/include/unk_02002F08.h @@ -0,0 +1,38 @@ +#ifndef POKEDIAMOND_UNK_02002F08_H +#define POKEDIAMOND_UNK_02002F08_H + +#include "global.h" +#include "gf_gfx_loader.h" +#include "string16.h" + + +struct UnkStruct_02002F08 +{ + struct + { + u16 *unk00; + u16 *unk04; + u32 unk08; + u32 unk0c; + u32 unk10; + } unk000[14]; + + u32 unk118; + u32 unk11c; +}; + +s32 FUN_02002F08(u32 param0, struct String *str, u32 param2); +u32 FUN_02002F40(u32 param0, struct String *str, u32 param2, u32 param3); +u32 FUN_02002F58(const u16 *str); +u32 FUN_02002F90(struct String *str); +s32 FUN_02002F9C(u32 param0, struct String *str); +struct UnkStruct_02002F08 *FUN_02002FD0(u32 heap_id); +void FUN_02002FEC(struct UnkStruct_02002F08 *ptr); +void FUN_02002FF4(struct UnkStruct_02002F08 *param0, u32 param1, void *param2, void *param3, u32 size); +void FUN_02003008(struct UnkStruct_02002F08 *param0, u32 param1, u32 size, u32 heap_id); +void FUN_02003038(struct UnkStruct_02002F08 *param0, u32 param1); +void FUN_02003054(struct UnkStruct_02002F08 *param0, const void *param1, u32 param2, u32 offset, u16 size); +void FUN_02003084(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 size, u16 offset, u16 param7); +void FUN_020030E8(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 size, u16 offset); + +#endif //POKEDIAMOND_UNK_02002F08_H |