mirror of
https://github.com/CTurt/dsgmLib.git
synced 2025-06-19 15:15:31 -04:00
70 lines
2.0 KiB
C
70 lines
2.0 KiB
C
#include "DSGM.h"
|
|
|
|
int DSGM_nextPalette[2] = { 0, 0 };
|
|
|
|
inline void DSGM_UnlockSpritePalette(u8 screen) {
|
|
switch(screen) {
|
|
case DSGM_TOP:
|
|
vramSetBankF(VRAM_F_LCD);
|
|
break;
|
|
|
|
case DSGM_BOTTOM:
|
|
vramSetBankI(VRAM_I_LCD);
|
|
break;
|
|
}
|
|
}
|
|
|
|
inline void DSGM_LockSpritePalette(u8 screen) {
|
|
switch(screen) {
|
|
case DSGM_TOP:
|
|
vramSetBankF(VRAM_F_SPRITE_EXT_PALETTE);
|
|
break;
|
|
|
|
case DSGM_BOTTOM:
|
|
vramSetBankI(VRAM_I_SUB_SPRITE_EXT_PALETTE);
|
|
break;
|
|
}
|
|
}
|
|
|
|
inline u16 *DSGM_GetPaletteData(u8 screen, DSGM_Palette *palette) {
|
|
return (screen == DSGM_TOP ? VRAM_F_EXT_SPR_PALETTE : VRAM_I_EXT_SPR_PALETTE)[palette->paletteNumber[screen]];
|
|
}
|
|
|
|
inline int DSGM_NextFreePalette(u8 screen) {
|
|
return DSGM_nextPalette[screen]++;
|
|
}
|
|
|
|
inline bool DSGM_PaletteLoaded(u8 screen, DSGM_Palette *palette) {
|
|
return palette->paletteNumber[screen] != DSGM_NO_PALETTE;
|
|
}
|
|
|
|
inline bool DSGM_PaletteIsNitro(DSGM_Palette *palette) {
|
|
return !palette->palette;
|
|
}
|
|
|
|
void DSGM_ClearPalettes(DSGM_Palette *palettes, int paletteCount) {
|
|
int i;
|
|
|
|
DSGM_nextPalette[DSGM_TOP] = 0;
|
|
DSGM_nextPalette[DSGM_BOTTOM] = 0;
|
|
|
|
for(i = 0; i < paletteCount; i++) {
|
|
palettes[i].paletteNumber[DSGM_TOP] = DSGM_NO_PALETTE;
|
|
palettes[i].paletteNumber[DSGM_BOTTOM] = DSGM_NO_PALETTE;
|
|
}
|
|
}
|
|
|
|
void DSGM_LoadPaletteFull(u8 screen, DSGM_Palette *palette) {
|
|
DSGM_UnlockSpritePalette(screen);
|
|
palette->paletteNumber[screen] = DSGM_NextFreePalette(screen);
|
|
if(DSGM_PaletteIsNitro(palette)) {
|
|
if(screen == DSGM_TOP) DSGM_ReadFileManual(VRAM_F_EXT_SPR_PALETTE[palette->paletteNumber[screen]], 0, DSGM_AUTO_LENGTH, palette->nitroFilename);
|
|
if(screen == DSGM_BOTTOM) DSGM_ReadFileManual(VRAM_I_EXT_SPR_PALETTE[palette->paletteNumber[screen]], 0, DSGM_AUTO_LENGTH, palette->nitroFilename);
|
|
}
|
|
else {
|
|
if(screen == DSGM_TOP) dmaCopy(palette->palette, VRAM_F_EXT_SPR_PALETTE[palette->paletteNumber[screen]], *palette->paletteLength);
|
|
if(screen == DSGM_BOTTOM) dmaCopy(palette->palette, VRAM_I_EXT_SPR_PALETTE[palette->paletteNumber[screen]], *palette->paletteLength);
|
|
}
|
|
DSGM_LockSpritePalette(screen);
|
|
}
|