mirror of https://github.com/zeldaret/tmc.git
44 lines
1.2 KiB
C
Executable File
44 lines
1.2 KiB
C
Executable File
#include "global.h"
|
|
|
|
extern void LoadPalettes(const u8*, int, int);
|
|
|
|
extern u32 gUsedPalettes;
|
|
extern u16 gPaletteBuffer[];
|
|
|
|
typedef struct {
|
|
u16 paletteId;
|
|
u8 destPaletteNum;
|
|
u8 numPalettes;
|
|
} PaletteGroup;
|
|
|
|
extern const PaletteGroup* gPaletteGroups[];
|
|
extern const u8 gGlobalGfxAndPalettes[];
|
|
|
|
void LoadPaletteGroup(u32 group) {
|
|
const PaletteGroup* paletteGroup = gPaletteGroups[group];
|
|
while (1) {
|
|
u32 destPaletteNum = paletteGroup->destPaletteNum;
|
|
u32 numPalettes = paletteGroup->numPalettes & 0xF;
|
|
if (numPalettes == 0) {
|
|
numPalettes = 16;
|
|
}
|
|
LoadPalettes(&gGlobalGfxAndPalettes[paletteGroup->paletteId * 32], destPaletteNum, numPalettes);
|
|
if ((paletteGroup->numPalettes & 0x80) == 0) {
|
|
break;
|
|
}
|
|
paletteGroup++;
|
|
}
|
|
}
|
|
|
|
void LoadPalettes(const u8* src, int destPaletteNum, int numPalettes) {
|
|
u16* dest;
|
|
u32 size = numPalettes * 32;
|
|
u32 usedPalettesMask = 1 << destPaletteNum;
|
|
while (--numPalettes > 0) {
|
|
usedPalettesMask |= (usedPalettesMask << 1);
|
|
}
|
|
gUsedPalettes |= usedPalettesMask;
|
|
dest = &gPaletteBuffer[destPaletteNum * 16];
|
|
DmaCopy32(3, src, dest, size);
|
|
}
|