mirror of
https://github.com/pret/pmd-red.git
synced 2026-07-16 08:51:35 -05:00
241 lines
5.7 KiB
C
241 lines
5.7 KiB
C
#include "global.h"
|
|
#include "globaldata.h"
|
|
#include "bg_palette_buffer.h"
|
|
#include "structs/axdata.h"
|
|
#include "code_8009804.h"
|
|
#include "cpu.h"
|
|
#include "def_filearchives.h"
|
|
#include "file_system.h"
|
|
#include "text_1.h"
|
|
|
|
struct FontData
|
|
{
|
|
s32 size;
|
|
u8 dataArray[0];
|
|
};
|
|
|
|
EWRAM_DATA RGB gFontPalette[128] = {0};
|
|
static EWRAM_DATA u8 sUnknown_202D238[4] = {0};
|
|
static EWRAM_DATA s32 sUnknown_202D23C = 0;
|
|
static EWRAM_DATA struct unkStruct_202D240 sUnknown_202D240[8] = {0};
|
|
/*static [.s file not finished yet]*/ EWRAM_DATA u32 gUnknown_202D2A0 = 0;
|
|
|
|
static EWRAM_INIT bool8 sUnknown_203B090 = FALSE; // Only written to.
|
|
|
|
#define OAM_DUMMY 0xA000A0 // y set to 160 (DISPLAY_HEIGHT)
|
|
|
|
// arm9.bin::0200A178
|
|
void InitGraphics(void)
|
|
{
|
|
s32 i;
|
|
OpenedFile *file;
|
|
u32 *dest;
|
|
const RGB *rgbColors;
|
|
struct FontData *font;
|
|
#ifdef NONMATCHING
|
|
const FileArchive *sysFileArchieve;
|
|
#else
|
|
register const FileArchive *sysFileArchieve asm("r4");
|
|
#endif // NONMATCHING
|
|
|
|
sUnknown_203B090 = TRUE;
|
|
dest = (u32 *)VRAM;
|
|
for (i = 0; i < VRAM_SIZE / sizeof(*dest); i++) {
|
|
*dest++ = 0;
|
|
}
|
|
|
|
dest = (u32 *)PLTT;
|
|
for (i = 0; i < PLTT_SIZE / sizeof(*dest); i++) {
|
|
*dest++ = 0;
|
|
}
|
|
|
|
dest = (u32 *)OAM;
|
|
for (i = 0; i < OAM_SIZE / sizeof(*dest); i++) {
|
|
*dest++ = OAM_DUMMY;
|
|
}
|
|
|
|
sysFileArchieve = &gSystemFileArchive;
|
|
file = OpenFileAndGetFileDataPtr("font", sysFileArchieve);
|
|
font = (struct FontData *)(file->data);
|
|
i = font->size;
|
|
CpuCopy((u32 *)(VRAM + 0x4f00), font->dataArray, i * 32);
|
|
CloseFile(file);
|
|
|
|
file = OpenFileAndGetFileDataPtr("fontsp", sysFileArchieve);
|
|
font = (struct FontData *)(file->data);
|
|
i = font->size;
|
|
CpuCopy((u32 *)(VRAM + 0x17e00), font->dataArray, i * 32);
|
|
CloseFile(file);
|
|
|
|
// TODO: Lots missing here from NDS.
|
|
|
|
InitFontPalette();
|
|
file = OpenFileAndGetFileDataPtr("fontsppa", sysFileArchieve);
|
|
rgbColors = (RGB *)file->data;
|
|
|
|
for (i = 0; i < 16; rgbColors++, i++) {
|
|
SetBGPaletteBufferColorArray(0x1F0 + i, rgbColors);
|
|
}
|
|
CloseFile(file);
|
|
TransferBGPaletteBuffer();
|
|
}
|
|
|
|
// arm9.bin::0200A100
|
|
void InitFontPalette(void)
|
|
{
|
|
OpenedFile *fontpalFile;
|
|
s32 i;
|
|
RGB *ptr;
|
|
|
|
fontpalFile = OpenFileAndGetFileDataPtr("fontpal", &gSystemFileArchive);
|
|
CpuCopy(gFontPalette, fontpalFile->data, sizeof(gFontPalette));
|
|
|
|
if (sub_80063B0() == 1)
|
|
ptr = &gFontPalette[0];
|
|
else
|
|
ptr = &gFontPalette[16];
|
|
|
|
for (i = 0; i < 16; ptr++, i++)
|
|
SetBGPaletteBufferColorArray(i + 240, ptr);
|
|
|
|
CloseFile(fontpalFile);
|
|
}
|
|
|
|
// arm9.bin::0200A00C
|
|
void vram_related_8009804(void)
|
|
{
|
|
u32 i;
|
|
u32 *dest;
|
|
|
|
dest = (u32 *)VRAM;
|
|
for (i = 0; i < 0x13C0; i++)
|
|
*dest++ = 0;
|
|
|
|
dest = (u32 *)(VRAM + 0x7000);
|
|
for (i = 0; i < 0x400; i++)
|
|
*dest++ = 0;
|
|
|
|
dest = (u32 *)(VRAM + 0x8000);
|
|
for (i = 0; i < 0x2000; i++)
|
|
*dest++ = 0;
|
|
|
|
dest = (u32 *)OBJ_VRAM0;
|
|
for (i = 0; i < 0x1F80; i++)
|
|
*dest++ = 0;
|
|
|
|
dest = (u32 *)PLTT;
|
|
for (i = 0; i < 120; i++)
|
|
*dest++ = 0;
|
|
|
|
dest = (u32 *)OBJ_PLTT;
|
|
for (i = 0; i < 120; i++)
|
|
*dest++ = 0;
|
|
|
|
dest = (u32 *)OAM;
|
|
for (i = 0; i < OAM_SIZE / sizeof(*dest); i++)
|
|
*dest++ = OAM_DUMMY;
|
|
}
|
|
|
|
// Extra func in NDS here:
|
|
// arm9.bin::02009FC4
|
|
|
|
// arm9.bin::02009F70
|
|
void sub_80098A0(void)
|
|
{
|
|
sUnknown_202D23C = 0;
|
|
sUnknown_202D238[0] = 0;
|
|
sUnknown_202D238[1] = 0;
|
|
sUnknown_202D238[2] = 0;
|
|
sUnknown_202D238[3] = 0;
|
|
}
|
|
|
|
// arm9.bin::02009F18
|
|
void sub_80098BC(u32 *r0, const u32 *r1, u32 r2)
|
|
{
|
|
if (sUnknown_202D23C < 8) {
|
|
sUnknown_202D240[sUnknown_202D23C].unk0 = r0;
|
|
sUnknown_202D240[sUnknown_202D23C].unk4 = r1;
|
|
sUnknown_202D240[sUnknown_202D23C].size = r2;
|
|
sUnknown_202D23C++;
|
|
}
|
|
}
|
|
|
|
// The below func has a sibling in the NDS version.
|
|
// arm9.bin::02009F04 and arm9.bin::02009EF0
|
|
|
|
void sub_80098F8(u32 r0)
|
|
{
|
|
sUnknown_202D238[r0] = 1;
|
|
}
|
|
|
|
// arm9.bin::02009BE0
|
|
void sub_8009908(void)
|
|
{
|
|
s32 i;
|
|
|
|
for (i = 0; i < sUnknown_202D23C; i++)
|
|
CpuCopy(sUnknown_202D240[i].unk0, sUnknown_202D240[i].unk4, sUnknown_202D240[i].size);
|
|
|
|
sUnknown_202D23C = 0;
|
|
if (sUnknown_202D238[0] != 0) {
|
|
sUnknown_202D238[0] = 0;
|
|
CpuCopy(BG_SCREEN_ADDR(12), gBgTilemaps[0], BG_SCREEN_SIZE);
|
|
}
|
|
if (sUnknown_202D238[1] != 0) {
|
|
sUnknown_202D238[1] = 0;
|
|
CpuCopy(BG_SCREEN_ADDR(13), gBgTilemaps[1], BG_SCREEN_SIZE);
|
|
}
|
|
if (sUnknown_202D238[2] != 0) {
|
|
sUnknown_202D238[2] = 0;
|
|
CpuCopy(BG_SCREEN_ADDR(14), gBgTilemaps[2], BG_SCREEN_SIZE);
|
|
}
|
|
if (sUnknown_202D238[3] != 0) {
|
|
sUnknown_202D238[3] = 0;
|
|
CpuCopy(BG_SCREEN_ADDR(15), gBgTilemaps[3], BG_SCREEN_SIZE);
|
|
}
|
|
}
|
|
|
|
void sub_80099C0(void)
|
|
{
|
|
CpuCopy(BG_SCREEN_ADDR(12), gBgTilemaps[0], BG_SCREEN_SIZE);
|
|
CpuCopy(BG_SCREEN_ADDR(13), gBgTilemaps[1], BG_SCREEN_SIZE);
|
|
}
|
|
|
|
void SetFontsBaseColor(RGB a0)
|
|
{
|
|
s32 i;
|
|
|
|
for (i = 0; i < 8; i++)
|
|
gFontPalette[16 * i + 1] = a0;
|
|
}
|
|
|
|
UNUSED static void sub_8009A10(struct unkStruct_8009A1C_ptr *a0, u32 palId, u32 vramDstOffset, u32 r3)
|
|
{
|
|
sub_8009A1C(a0->ptr, palId, vramDstOffset, r3);
|
|
}
|
|
|
|
void sub_8009A1C(const EfoFileData *r0, u32 palId, u32 vramDstOffset, u32 r3)
|
|
{
|
|
s32 i;
|
|
u32 *dst, *src;
|
|
|
|
gUnknown_202D2A0 = r3;
|
|
src = r0->spriteData;
|
|
dst = (void *)(VRAM) + vramDstOffset;
|
|
|
|
for (i = 0; i <= r0->animCount; i++) {
|
|
*dst++ = *src++;
|
|
*dst++ = *src++;
|
|
*dst++ = *src++;
|
|
*dst++ = *src++;
|
|
*dst++ = *src++;
|
|
*dst++ = *src++;
|
|
*dst++ = *src++;
|
|
*dst++ = *src++;
|
|
}
|
|
|
|
for (i = 0; i < 16; i++) {
|
|
SetBGPaletteBufferColorArray(i + 0xE0, &r0->unk10->pal[i + palId * 16]);
|
|
}
|
|
}
|