mirror of
https://github.com/pret/pokeheartgold.git
synced 2026-06-01 05:01:11 -05:00
85 lines
3.0 KiB
C
85 lines
3.0 KiB
C
#include "message_printer.h"
|
|
|
|
#include "global.h"
|
|
|
|
#include "filesystem_files_def.h"
|
|
#include "gf_gfx_loader.h"
|
|
|
|
static const u16 _020F5C24[][2] = {
|
|
{ 0x0140, 0x0008 },
|
|
{ 0x0160, 0x0010 },
|
|
{ 0x01A0, 0x0010 },
|
|
{ 0x01E0, 0x0010 },
|
|
{ 0x0220, 0x0010 },
|
|
{ 0x0260, 0x0010 },
|
|
{ 0x02A0, 0x0010 },
|
|
};
|
|
|
|
MessagePrinter *MessagePrinter_New(u32 foreground, u32 shadow, u32 background, HeapID heapId) {
|
|
MessagePrinter *messagePrinter = AllocFromHeap(heapId, sizeof(MessagePrinter));
|
|
if (messagePrinter != NULL) {
|
|
messagePrinter->charData = GfGfxLoader_GetCharData(NARC_graphic_font, 5, TRUE, &messagePrinter->ppCharData, heapId);
|
|
int i;
|
|
u8 *ptr = messagePrinter->ppCharData->pRawData;
|
|
for (i = 0; i < messagePrinter->ppCharData->szByte; i++) {
|
|
switch (ptr[i]) {
|
|
case 0x00:
|
|
ptr[i] = ((background << 4) | background);
|
|
break;
|
|
case 0x01:
|
|
ptr[i] = ((background << 4) | foreground);
|
|
break;
|
|
case 0x02:
|
|
ptr[i] = ((background << 4) | shadow);
|
|
break;
|
|
case 0x10:
|
|
ptr[i] = ((foreground << 4) | background);
|
|
break;
|
|
case 0x11:
|
|
ptr[i] = ((foreground << 4) | foreground);
|
|
break;
|
|
case 0x12:
|
|
ptr[i] = ((foreground << 4) | shadow);
|
|
break;
|
|
case 0x20:
|
|
ptr[i] = ((shadow << 4) | background);
|
|
break;
|
|
case 0x21:
|
|
ptr[i] = ((shadow << 4) | foreground);
|
|
break;
|
|
case 0x22:
|
|
ptr[i] = ((shadow << 4) | shadow);
|
|
break;
|
|
}
|
|
}
|
|
messagePrinter->backgroundColor = background;
|
|
}
|
|
return messagePrinter;
|
|
}
|
|
|
|
void MessagePrinter_Delete(MessagePrinter *messagePrinter) {
|
|
if (messagePrinter != NULL) {
|
|
if (messagePrinter->charData != NULL) {
|
|
FreeToHeap(messagePrinter->charData);
|
|
}
|
|
FreeToHeap(messagePrinter);
|
|
}
|
|
}
|
|
|
|
void sub_0200CDAC(MessagePrinter *messagePrinter, u8 glyphId, Window *window, u32 x, u32 y) {
|
|
BlitBitmapRectToWindow(window, messagePrinter->ppCharData->pRawData + _020F5C24[glyphId][0], 0, 0, _020F5C24[glyphId][1], 8, x, y, _020F5C24[glyphId][1], 8);
|
|
}
|
|
|
|
void PrintUIntOnWindow(MessagePrinter *messagePrinter, u32 num, u32 ndigits, PrintingMode mode, Window *window, u32 x, u32 y) {
|
|
ConvertUIntToDecimalString(messagePrinter->string, num, mode, ndigits);
|
|
u32 i;
|
|
for (i = 0; messagePrinter->string[i] != EOS; i++) {
|
|
if (messagePrinter->string[i] >= CHAR_JP_0 && messagePrinter->string[i] <= CHAR_JP_9) {
|
|
BlitBitmapRectToWindow(window, messagePrinter->ppCharData->pRawData + (messagePrinter->string[i] - CHAR_JP_0) * 32, 0, 0, 8, 8, x, y, 8, 8);
|
|
} else {
|
|
FillWindowPixelRect(window, messagePrinter->backgroundColor, x, y, 8, 8);
|
|
}
|
|
x += 8;
|
|
}
|
|
}
|