mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-03-24 11:15:26 -05:00
120 lines
5.1 KiB
C
120 lines
5.1 KiB
C
#ifndef POKEPLATINUM_PALETTE_H
|
|
#define POKEPLATINUM_PALETTE_H
|
|
|
|
#include "constants/heap.h"
|
|
|
|
#define SLOTS_PER_PALETTE 16
|
|
#define PALETTE_SIZE (SLOTS_PER_PALETTE)
|
|
#define PALETTE_SIZE_EXT (SLOTS_PER_PALETTE * 16)
|
|
#define PALETTE_SIZE_BYTES (PALETTE_SIZE * sizeof(u16))
|
|
#define PLTT_OFFSET(i) ((i) * PALETTE_SIZE_BYTES)
|
|
|
|
enum PaletteBufferID {
|
|
PLTTBUF_MAIN_BG = 0,
|
|
PLTTBUF_SUB_BG,
|
|
PLTTBUF_MAIN_OBJ,
|
|
PLTTBUF_SUB_OBJ,
|
|
PLTTBUF_EX_BEGIN,
|
|
|
|
PLTTBUF_MAIN_EX_BG_0 = PLTTBUF_EX_BEGIN,
|
|
PLTTBUF_MAIN_EX_BG_1,
|
|
PLTTBUF_MAIN_EX_BG_2,
|
|
PLTTBUF_MAIN_EX_BG_3,
|
|
PLTTBUF_SUB_EX_BG_0,
|
|
PLTTBUF_SUB_EX_BG_1,
|
|
PLTTBUF_SUB_EX_BG_2,
|
|
PLTTBUF_SUB_EX_BG_3,
|
|
PLTTBUF_MAIN_EX_OBJ,
|
|
PLTTBUF_SUB_EX_OBJ,
|
|
|
|
PLTTBUF_MAX,
|
|
};
|
|
|
|
#define PLTTBUF_MAIN_BG_F (1 << PLTTBUF_MAIN_BG)
|
|
#define PLTTBUF_SUB_BG_F (1 << PLTTBUF_SUB_BG)
|
|
#define PLTTBUF_MAIN_OBJ_F (1 << PLTTBUF_MAIN_OBJ)
|
|
#define PLTTBUF_SUB_OBJ_F (1 << PLTTBUF_SUB_OBJ)
|
|
#define PLTTBUF_MAIN_EX_BG_0_F (1 << PLTTBUF_MAIN_EX_BG_0)
|
|
#define PLTTBUF_MAIN_EX_BG_1_F (1 << PLTTBUF_MAIN_EX_BG_1)
|
|
#define PLTTBUF_MAIN_EX_BG_2_F (1 << PLTTBUF_MAIN_EX_BG_2)
|
|
#define PLTTBUF_MAIN_EX_BG_3_F (1 << PLTTBUF_MAIN_EX_BG_3)
|
|
#define PLTTBUF_SUB_EX_BG_0_F (1 << PLTTBUF_SUB_EX_BG_0)
|
|
#define PLTTBUF_SUB_EX_BG_1_F (1 << PLTTBUF_SUB_EX_BG_1)
|
|
#define PLTTBUF_SUB_EX_BG_2_F (1 << PLTTBUF_SUB_EX_BG_2)
|
|
#define PLTTBUF_SUB_EX_BG_3_F (1 << PLTTBUF_SUB_EX_BG_3)
|
|
#define PLTTBUF_MAIN_EX_OBJ_F (1 << PLTTBUF_MAIN_EX_OBJ)
|
|
#define PLTTBUF_SUB_EX_OBJ_F (1 << PLTTBUF_SUB_EX_OBJ)
|
|
#define PLTTBUF_ALL_F ((1 << PLTTBUF_MAX) - 1)
|
|
|
|
enum PaletteSelector {
|
|
PLTTSEL_FADED,
|
|
PLTTSEL_UNFADED,
|
|
PLTTSEL_BOTH,
|
|
};
|
|
|
|
typedef struct RgbColor {
|
|
u16 r : 5;
|
|
u16 g : 5;
|
|
u16 b : 5;
|
|
u16 unused : 1;
|
|
} RgbColor;
|
|
|
|
typedef struct PaletteFadeControl {
|
|
u16 unfadedMask;
|
|
u16 wait : 6;
|
|
u16 cur : 5;
|
|
u16 end : 5;
|
|
u16 target : 15;
|
|
u16 sign : 1;
|
|
u16 step : 4;
|
|
u16 waitStep : 6;
|
|
u16 unused : 6;
|
|
} PaletteFadeControl;
|
|
|
|
typedef struct PaletteBuffer {
|
|
u16 *unfaded;
|
|
u16 *faded;
|
|
u32 size;
|
|
PaletteFadeControl selected;
|
|
} PaletteBuffer;
|
|
|
|
typedef struct PaletteData {
|
|
PaletteBuffer buffers[14];
|
|
u16 selectedFlag : 2;
|
|
u16 selectedBuffers : 14;
|
|
u16 fadedBuffers : 14;
|
|
u16 fadeInProgress : 1;
|
|
u16 autoTransparent : 1;
|
|
u8 forceExit;
|
|
} PaletteData;
|
|
|
|
void LoadPaletteFromFile(u32 narcID, u32 narcMemberIdx, u32 heapID, u32 size, u16 start, void *dest);
|
|
void BlendPalette(const u16 *src, u16 *dest, u16 size, u8 fraction, u16 target);
|
|
void BlendPalettes(const u16 *sources, u16 *dests, u16 toBlend, u8 fraction, u16 target);
|
|
void TintPalette(u16 *palette, int numColorsToTint, int tintR, int tintG, int tintB);
|
|
|
|
PaletteData *PaletteData_New(enum HeapId heapID);
|
|
void PaletteData_Free(PaletteData *paletteData);
|
|
void PaletteData_InitBuffer(PaletteData *paletteData, enum PaletteBufferID bufferID, void *unfaded, void *faded, u32 size);
|
|
void PaletteData_AllocBuffer(PaletteData *paletteData, enum PaletteBufferID bufferID, u32 size, u32 heapID);
|
|
void PaletteData_FreeBuffer(PaletteData *paletteData, enum PaletteBufferID bufferID);
|
|
void PaletteData_LoadBuffer(PaletteData *paletteData, const void *src, enum PaletteBufferID bufferID, u16 destStart, u16 srcSize);
|
|
void PaletteData_LoadBufferFromFile(PaletteData *paletteData, u32 narcID, u32 narcMemberIdx, u32 heapID, enum PaletteBufferID bufferID, u32 srcSize, u16 destStart, u16 srcStart);
|
|
void PaletteData_LoadBufferFromFileStart(PaletteData *paletteData, u32 narcID, u32 narcMemberIdx, u32 heapID, enum PaletteBufferID bufferID, u32 srcSize, u16 destStart);
|
|
void PaletteData_LoadBufferFromFileStartWithTint(PaletteData *paletteData, u32 narcID, u32 narcMemberIdx, u32 heapID, enum PaletteBufferID bufferID, u32 size, u16 start, int r, int g, int b);
|
|
void PaletteData_LoadBufferFromHardware(PaletteData *paletteData, enum PaletteBufferID bufferID, u16 start, u32 size);
|
|
void PaletteData_CopyBuffer(PaletteData *palette, enum PaletteBufferID srcBufferID, u16 srcStart, enum PaletteBufferID destBufferID, u16 destStart, u16 size);
|
|
u16 *PaletteData_GetUnfadedBuffer(PaletteData *palette, enum PaletteBufferID bufferID);
|
|
u16 *PaletteData_GetFadedBuffer(PaletteData *palette, enum PaletteBufferID bufferID);
|
|
u8 PaletteData_StartFade(PaletteData *paletteData, u16 buffersToFade, u16 palettesToFade, s8 wait, u8 cur, u8 end, u16 target);
|
|
void PaletteData_CommitFadedBuffers(PaletteData *paletteData);
|
|
u16 PaletteData_GetSelectedBuffersMask(PaletteData *paletteData);
|
|
void PaletteData_SetAutoTransparent(PaletteData *paletteData, int val);
|
|
void PaletteData_SelectAll(PaletteData *paletteData, u8 val);
|
|
void PaletteData_FillBufferRange(PaletteData *paletteData, enum PaletteBufferID bufferID, enum PaletteSelector selector, u16 fillVal, u16 start, u16 end);
|
|
u16 PaletteData_GetBufferIndexColor(PaletteData *paletteData, enum PaletteBufferID bufferID, enum PaletteSelector selector, u16 index);
|
|
void PaletteData_Blend(PaletteData *paletteData, enum PaletteBufferID bufferID, u16 index, u16 size, u8 fraction, u16 target);
|
|
void PaletteData_BlendMulti(PaletteData *paletteData, enum PaletteBufferID bufferID, u16 toBlend, u8 fraction, u16 target);
|
|
|
|
#endif // POKEPLATINUM_PALETTE_H
|