diff options
-rw-r--r-- | arm9/asm/unk_0201BCBC.s | 58 | ||||
-rw-r--r-- | arm9/src/text.c | 49 | ||||
-rw-r--r-- | include/text.h | 16 |
3 files changed, 51 insertions, 72 deletions
diff --git a/arm9/asm/unk_0201BCBC.s b/arm9/asm/unk_0201BCBC.s index 5d1a9d7f..5fd08f38 100644 --- a/arm9/asm/unk_0201BCBC.s +++ b/arm9/asm/unk_0201BCBC.s @@ -11,64 +11,6 @@ .text - thumb_func_start FUN_0201BFDC -FUN_0201BFDC: ; 0x0201BFDC - push {r4, lr} - ldr r0, _0201C044 ; =UNK_021C570C - add r4, r1, #0x0 - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _0201C042 - add r0, r4, #0x0 - add r0, #0x29 - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _0201C036 - mov r0, #0x0 - strh r0, [r4, #0x2a] - ldrb r0, [r4, #0x11] - ldrb r1, [r4, #0x12] - ldrb r2, [r4, #0x13] - bl GenerateFontHalfRowLookupTable - add r0, r4, #0x0 - bl RenderFont - cmp r0, #0x0 - beq _0201C014 - cmp r0, #0x1 - beq _0201C02C - cmp r0, #0x3 - beq _0201C01A - pop {r4, pc} -_0201C014: - ldr r0, [r4, #0x4] - bl CopyWindowToVram -_0201C01A: - ldr r2, [r4, #0x18] - cmp r2, #0x0 - beq _0201C042 - ldrh r1, [r4, #0x2a] - add r0, r4, #0x0 - blx r2 - add r4, #0x29 - strb r0, [r4, #0x0] - pop {r4, pc} -_0201C02C: - add r4, #0x28 - ldrb r0, [r4, #0x0] - bl FUN_0201BCFC - pop {r4, pc} -_0201C036: - ldrh r1, [r4, #0x2a] - ldr r2, [r4, #0x18] - add r0, r4, #0x0 - blx r2 - add r4, #0x29 - strb r0, [r4, #0x0] -_0201C042: - pop {r4, pc} - .balign 4 -_0201C044: .word UNK_021C570C - thumb_func_start RenderFont RenderFont: ; 0x0201C048 push {r4, lr} diff --git a/arm9/src/text.c b/arm9/src/text.c index 58bfa220..04f443e9 100644 --- a/arm9/src/text.c +++ b/arm9/src/text.c @@ -16,7 +16,6 @@ extern void FUN_0201C238(struct TextPrinter *printer); extern u32 RenderFont(struct TextPrinter *printer); extern void FUN_0201C1A8(struct TextPrinter *printer); -extern FUN_0201BFDC(); //no idea what this is extern void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor); extern void CopyWindowToVram(u32 windowId); @@ -91,7 +90,7 @@ THUMB_FUNC void FUN_0201BD7C(u32 param0) FUN_0201BCFC(param0); } -THUMB_FUNC u16 AddTextPrinterParameterized(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, void (*callback)(struct TextPrinterTemplate *, u16)) +THUMB_FUNC u16 AddTextPrinterParameterized(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16)) { struct TextPrinterTemplate printerTemplate; @@ -114,7 +113,7 @@ THUMB_FUNC u16 AddTextPrinterParameterized(u32 windowId, u8 fontId, const u16 *s return AddTextPrinter(&printerTemplate, speed, callback); } -THUMB_FUNC u16 AddTextPrinterParameterized2(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, void (*callback)(struct TextPrinterTemplate *, u16)) +THUMB_FUNC u16 AddTextPrinterParameterized2(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u8 (*callback)(struct TextPrinterTemplate *, u16)) { struct TextPrinterTemplate printerTemplate; @@ -137,7 +136,7 @@ THUMB_FUNC u16 AddTextPrinterParameterized2(u32 windowId, u8 fontId, const u16 * return AddTextPrinter(&printerTemplate, speed, callback); } -THUMB_FUNC u16 AddTextPrinterParameterized3(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, void (*callback)(struct TextPrinterTemplate *, u16)) +THUMB_FUNC u16 AddTextPrinterParameterized3(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, u8 (*callback)(struct TextPrinterTemplate *, u16)) { struct TextPrinterTemplate printerTemplate; @@ -160,7 +159,7 @@ THUMB_FUNC u16 AddTextPrinterParameterized3(u32 windowId, u8 fontId, const u16 * return AddTextPrinter(&printerTemplate, speed, callback); } -THUMB_FUNC u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 speed, void (*callback)(struct TextPrinterTemplate *, u16)) +THUMB_FUNC u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16)) { if (!gFonts) return 0xff; @@ -172,7 +171,7 @@ THUMB_FUNC u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 s printer->textSpeedBottom = (u8)speed; printer->delayCounter = 0; printer->scrollDistance = 0; - printer->japanese = 0; + printer->Unk29 = 0; for (s32 i = 0; i < 7; i++) { @@ -188,7 +187,7 @@ THUMB_FUNC u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 s { printer->textSpeedBottom += 0xff; printer->textSpeedTop = 1; - printer->minLetterSpacing = FUN_0201BCC8(FUN_0201BFDC, printer, 1); + printer->minLetterSpacing = FUN_0201BCC8(RunTextPrinter, printer, 1); return printer->minLetterSpacing; } else @@ -213,3 +212,39 @@ THUMB_FUNC u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 s return 8; } } + +THUMB_FUNC void RunTextPrinter(u32 param0, struct TextPrinter *printer) +{ +#pragma unused(param0) + if (UNK_021C570C[0] == 0) + { + if (printer->Unk29 == 0) + { + printer->Unk2A = 0; + GenerateFontHalfRowLookupTable(printer->printerTemplate.fgColor, printer->printerTemplate.bgColor, printer->printerTemplate.shadowColor); + u32 temp = RenderFont(printer); + switch (temp) + { + case 0: + CopyWindowToVram(printer->printerTemplate.windowId); + //fallthrough + case 3: + if (printer->callback == NULL) + { + return; + } + printer->Unk29 = printer->callback(&printer->printerTemplate, printer->Unk2A); //TODO check + return; + case 1: + FUN_0201BCFC(printer->minLetterSpacing); + return; + default: + return; + } + } + else + { + printer->Unk29 = printer->callback(&printer->printerTemplate, printer->Unk2A); + } + } +} diff --git a/include/text.h b/include/text.h index fab36565..06b7f52a 100644 --- a/include/text.h +++ b/include/text.h @@ -28,7 +28,7 @@ struct TextPrinter { struct TextPrinterTemplate printerTemplate; - void (*callback)(struct TextPrinterTemplate *, u16); // 0x10 + u8 (*callback)(struct TextPrinterTemplate *, u16); // 0x10 u8 subStructFields[7]; // always cast to struct TextPrinterSubStruct... so why bother u8 active; @@ -38,8 +38,9 @@ struct TextPrinter u8 delayCounter; u8 scrollDistance; u8 minLetterSpacing; // 0x20 - u8 japanese; - u8 padding[6]; + u8 Unk29; // used to be japanese, not sure about that anymore + u16 Unk2A; + u8 padding[4]; }; struct FontInfo @@ -61,9 +62,10 @@ BOOL FUN_0201BD44(u32 param0); void FUN_0201BD5C(void); u8 FUN_0201BD70(u32 param0); void FUN_0201BD7C(u32 param0); -u16 AddTextPrinterParameterized(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, void (*callback)(struct TextPrinterTemplate *, u16)); -u16 AddTextPrinterParameterized2(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, void (*callback)(struct TextPrinterTemplate *, u16)); -u16 AddTextPrinterParameterized3(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, void (*callback)(struct TextPrinterTemplate *, u16)); -u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 speed, void (*callback)(struct TextPrinterTemplate *, u16)); +u16 AddTextPrinterParameterized(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16)); +u16 AddTextPrinterParameterized2(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u8 (*callback)(struct TextPrinterTemplate *, u16)); +u16 AddTextPrinterParameterized3(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, u8 (*callback)(struct TextPrinterTemplate *, u16)); +u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16)); +void RunTextPrinter(u32 param0, struct TextPrinter *printer); #endif //POKEDIAMOND_TEXT_H |