summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/unk_0201BCBC.s58
-rw-r--r--arm9/src/text.c49
-rw-r--r--include/text.h16
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