Path: blob/master/RSDKv5/RSDK/Graphics/Legacy/PaletteLegacy.hpp
1188 views
1namespace Legacy2{3#define LEGACY_PALETTE_COUNT (0x8)4#define LEGACY_PALETTE_COLOR_COUNT (0x100)56struct Color {7uint8 r;8uint8 g;9uint8 b;10uint8 a;11};1213// Palettes (as RGB565 Colors)14extern uint16 fullPalette[LEGACY_PALETTE_COUNT][LEGACY_PALETTE_COLOR_COUNT];15extern uint16 *activePalette; // Pointers to the 256 color set thats active1617extern uint8 gfxLineBuffer[SCREEN_YSIZE * 2]; // Pointers to active palette18extern int32 GFX_LINESIZE;19extern int32 GFX_LINESIZE_MINUSONE;20extern int32 GFX_LINESIZE_DOUBLE;21extern int32 GFX_FRAMEBUFFERSIZE;22extern int32 GFX_FBUFFERMINUSONE;2324extern int32 fadeMode;25extern uint8 fadeA;26extern uint8 fadeR;27extern uint8 fadeG;28extern uint8 fadeB;2930extern int32 paletteMode;3132void LoadPalette(const char *filePath, int32 paletteID, int32 startPaletteIndex, int32 startIndex, int32 endIndex);3334inline void SetActivePalette(uint8 newActivePal, int32 startLine, int32 endLine)35{36if (newActivePal < LEGACY_PALETTE_COUNT)37for (int32 l = startLine; l < endLine && l < SCREEN_YSIZE; l++) gfxLineBuffer[l] = newActivePal;3839activePalette = fullPalette[gfxLineBuffer[0]];40}4142inline void SetPaletteEntry(uint8 paletteIndex, uint8 index, uint8 r, uint8 g, uint8 b)43{44if (paletteIndex != 0xFF) {45fullPalette[paletteIndex][index] = PACK_RGB888(r, g, b);46}47else {48activePalette[index] = PACK_RGB888(r, g, b);49}50}5152inline void SetPaletteEntryPacked(uint8 paletteIndex, uint8 index, uint32 color)53{54fullPalette[paletteIndex][index] = PACK_RGB888((uint8)(color >> 16), (uint8)(color >> 8), (uint8)(color >> 0));55}5657inline uint32 GetPaletteEntryPacked(uint8 bankID, uint8 index)58{59// 0xF800 = 1111 1000 0000 0000 = R60// 0x7E0 = 0000 0111 1110 0000 = G61// 0x1F = 0000 0000 0001 1111 = B62uint16 clr = fullPalette[bankID & 7][index];6364int32 R = (clr & 0xF800) << 8;65int32 G = (clr & 0x7E0) << 5;66int32 B = (clr & 0x1F) << 3;67return R | G | B;68}6970inline void CopyPalette(uint8 sourcePalette, uint8 srcPaletteStart, uint8 destinationPalette, uint8 destPaletteStart, uint8 count)71{72if (sourcePalette < LEGACY_PALETTE_COUNT && destinationPalette < LEGACY_PALETTE_COUNT) {73for (int32 i = 0; i < count; ++i) {74fullPalette[destinationPalette][destPaletteStart + i] = fullPalette[sourcePalette][srcPaletteStart + i];75}76}77}7879inline void RotatePalette(int32 palID, uint8 startIndex, uint8 endIndex, bool right)80{81if (right) {82uint16 startClr = fullPalette[palID][endIndex];83for (int32 i = endIndex; i > startIndex; --i) {84fullPalette[palID][i] = fullPalette[palID][i - 1];85}86fullPalette[palID][startIndex] = startClr;87}88else {89uint16 startClr = fullPalette[palID][startIndex];90for (int32 i = startIndex; i < endIndex; ++i) {91fullPalette[palID][i] = fullPalette[palID][i + 1];92}93fullPalette[palID][endIndex] = startClr;94}95}9697inline void SetFade(uint8 R, uint8 G, uint8 B, uint16 A)98{99fadeMode = 1;100fadeR = R;101fadeG = G;102fadeB = B;103fadeA = A > 0xFF ? 0xFF : A;104}105106void SetPaletteFade(uint8 destPaletteID, uint8 srcPaletteA, uint8 srcPaletteB, uint16 blendAmount, int32 startIndex, int32 endIndex);107108namespace v3109{110111inline void CopyPalette(uint8 sourcePalette, uint8 destinationPalette)112{113if (sourcePalette < LEGACY_PALETTE_COUNT && destinationPalette < LEGACY_PALETTE_COUNT) {114for (int32 i = 0; i < LEGACY_PALETTE_COLOR_COUNT; ++i) {115fullPalette[destinationPalette][i] = fullPalette[sourcePalette][i];116}117}118}119120inline void RotatePalette(uint8 startIndex, uint8 endIndex, bool right)121{122if (right) {123uint16 startClr = activePalette[endIndex];124for (int32 i = endIndex; i > startIndex; --i) {125activePalette[i] = activePalette[i - 1];126}127activePalette[startIndex] = startClr;128}129else {130uint16 startClr = activePalette[startIndex];131for (int32 i = startIndex; i < endIndex; ++i) {132activePalette[i] = activePalette[i + 1];133}134activePalette[endIndex] = startClr;135}136}137138void SetLimitedFade(uint8 paletteID, uint8 R, uint8 G, uint8 B, uint16 blendAmount, int32 startIndex, int32 endIndex);139} // namespace v3140141} // namespace Legacy142143