dsgmLib/source/DSGM_palette.c
CTurt 0f812eb0fe Revert "Lock and unlock sprite palette only when extended"
This reverts commit d3664700863220e1ad3a13f49f0e1e02448e95c0.
2014-10-27 11:03:28 +00:00

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);
}