#include "game_types.h"

/* Text_Init @ 0x08013800 (real 84B) -- text system init: DMA + draws + triangle loop. Mirrors src/matched/Text_Init.c. */
/* DMAs the config block, draws the line/tile/gradient layers, then stamps
   13 triangle entries from table 0x081ADB14 (DrawTriangle + flag byte +
   0x02001C60 link each). */
extern void DMA_TransferWord(int src, int dst, int ctrl);
extern void Image_DrawLineV(int *p);
extern void Image_DrawTileAt(int *p);
extern void Image_DrawGradient(int *p);
extern void Image_DrawTriangle(int a, int b, int c);

void Text_Init(void)
{
    int *tab = (int *)0x081ADB14;
    int i = 13;
    DMA_TransferWord(0x08012BE8, 0x020015E0, 0x04000100);
    Image_DrawLineV((int *)0x02001D30);
    Image_DrawTileAt((int *)0x02002D70);
    Image_DrawGradient((int *)0x0091F600);
    do {
        int a = tab[0];
        int b = tab[1];
        unsigned c = ((unsigned char *)tab)[8];
        Image_DrawTriangle(a, b, c);
        ((unsigned char *)a)[11] =
            (unsigned char)*(unsigned short *)((char *)tab + 10);
        ((int *)a)[6] = 0x02001C60;
        tab = (int *)((char *)tab + 12);
    } while (--i != 0);
}
