Allowed map headers to specify light palettes.
This commit is contained in:
parent
5045958c96
commit
127749369d
@ -24,7 +24,7 @@ gTileset_Petalburg:: @ 83DF71C
|
||||
gTileset_Rustboro:: @ 83DF734
|
||||
.byte TRUE @ is compressed
|
||||
.byte TRUE @ is secondary tileset
|
||||
.2byte 0 @ padding
|
||||
.2byte 1 << 6 @ 1 << 6
|
||||
.4byte gTilesetTiles_Rustboro
|
||||
.4byte gTilesetPalettes_Rustboro
|
||||
.4byte gMetatiles_Rustboro
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
115 197 164
|
||||
248 224 120
|
||||
255 255 255
|
||||
238 238 213
|
||||
205 205 164
|
||||
|
||||
@ -29,6 +29,7 @@ struct Tileset
|
||||
{
|
||||
/*0x00*/ bool8 isCompressed;
|
||||
/*0x01*/ bool8 isSecondary;
|
||||
/*0x02*/ u16 lightPalettes;
|
||||
/*0x04*/ void *tiles;
|
||||
/*0x08*/ void *palettes;
|
||||
/*0x0c*/ u16 *metatiles;
|
||||
|
||||
@ -76,6 +76,8 @@ void BeginHardwarePaletteFade(u8, u8, u8, u8, u8);
|
||||
void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color);
|
||||
void BlendPalettesUnfaded(u32, u8, u16);
|
||||
void BlendPalettesGradually(u32 selectedPalettes, s8 delay, u8 coeff, u8 coeffTarget, u16 color, u8 priority, u8 id);
|
||||
void TimePalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor);
|
||||
void TimePalettes(u32 palettes, u8 coeff, u16 color);
|
||||
void TintPalette_GrayScale(u16 *palette, u16 count);
|
||||
void TintPalette_GrayScale2(u16 *palette, u16 count);
|
||||
void TintPalette_SepiaTone(u16 *palette, u16 count);
|
||||
|
||||
@ -884,8 +884,14 @@ void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size)
|
||||
}
|
||||
else if (tileset->isSecondary == TRUE)
|
||||
{
|
||||
u8 i;
|
||||
LoadPalette(((u16*)tileset->palettes) + (NUM_PALS_IN_PRIMARY * 16), destOffset, size);
|
||||
FieldmapPaletteDummy(destOffset, size >> 1);
|
||||
for (i = NUM_PALS_IN_PRIMARY; i < NUM_PALS_TOTAL; i++) {
|
||||
if (tileset->lightPalettes & (1 << i)) {
|
||||
u16 index = i * 16;
|
||||
gPlttBufferFaded[index] = gPlttBufferUnfaded[index] |= 0x8000;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -1521,13 +1521,14 @@ void BlendPalettesWithTime(u32 palettes) {
|
||||
palettes &= ~(1 << (i + 16));
|
||||
}
|
||||
palettes &= ~0xE000; // Don't blend tile palettes [13,15]
|
||||
palettes &= ~(1 << 6);
|
||||
gTimeOfDay = gTimeOfDay > TIME_OF_DAY_MAX ? TIME_OF_DAY_MAX : gTimeOfDay;
|
||||
BlendPalettes(palettes, sTimeOfDayBlendVars[gTimeOfDay].coeff, sTimeOfDayBlendVars[gTimeOfDay].blendColor);
|
||||
gTimeOfDay = min(TIME_OF_DAY_MAX, gTimeOfDay);
|
||||
if (!palettes)
|
||||
return;
|
||||
TimePalettes(palettes, sTimeOfDayBlendVars[gTimeOfDay].coeff, sTimeOfDayBlendVars[gTimeOfDay].blendColor);
|
||||
}
|
||||
}
|
||||
|
||||
u8 UpdateSpritePaletteWithTime(u8 paletteNum) {
|
||||
u8 UpdateSpritePaletteWithTime(u8 paletteNum) { // TODO: Optimize this
|
||||
BlendPalettesWithTime(1 << (paletteNum + 16));
|
||||
return paletteNum;
|
||||
}
|
||||
|
||||
@ -457,7 +457,7 @@ static u8 GetPaletteNumByUid(u16 uid)
|
||||
}
|
||||
|
||||
// Like normal palette fade, but respects sprite/tile palettes immune to time of day fading
|
||||
static u8 UpdateTimeOfDayPaletteFade(void) // Like normal, but respects sprite palettes immune to fading
|
||||
static u8 UpdateTimeOfDayPaletteFade(void)
|
||||
{
|
||||
u8 paletteNum;
|
||||
u16 paletteOffset;
|
||||
@ -496,13 +496,13 @@ static u8 UpdateTimeOfDayPaletteFade(void) // Like normal, but respects sprite p
|
||||
if (gPaletteFade.yDec) {
|
||||
if (gPaletteFade.objPaletteToggle) { // sprite palettes
|
||||
if (gPaletteFade.y >= gPaletteFade.targetY || GetSpritePaletteTagByPaletteNum(paletteNum) & 0x8000)
|
||||
BlendPalette(paletteOffset, 16, gPaletteFade.y, gPaletteFade.blendColor);
|
||||
TimePalette(paletteOffset, 16, gPaletteFade.y, gPaletteFade.blendColor);
|
||||
// tile palettes
|
||||
} else if (gPaletteFade.y >= gPaletteFade.targetY || (paletteNum >= 13 && paletteNum <= 15)) {
|
||||
BlendPalette(paletteOffset, 16, gPaletteFade.y, gPaletteFade.blendColor);
|
||||
TimePalette(paletteOffset, 16, gPaletteFade.y, gPaletteFade.blendColor);
|
||||
}
|
||||
} else {
|
||||
BlendPalette(paletteOffset, 16, gPaletteFade.y, gPaletteFade.blendColor);
|
||||
TimePalette(paletteOffset, 16, gPaletteFade.y, gPaletteFade.blendColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -978,6 +978,42 @@ void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color)
|
||||
}
|
||||
}
|
||||
|
||||
// Like BlendPalette, but ignores blendColor if the transparency high bit is set
|
||||
void TimePalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor) {
|
||||
u16 i;
|
||||
s8 r, g, b;
|
||||
struct PlttData *data2 = (struct PlttData *)&blendColor;
|
||||
for (i = 0; i < numEntries; i++) {
|
||||
u16 index = i + palOffset;
|
||||
struct PlttData *data1 = (struct PlttData *)&gPlttBufferUnfaded[index];
|
||||
if (i == 0) {
|
||||
if (data1->unused_15) { // Use transparency color to blend
|
||||
data2 = data1;
|
||||
gPlttBufferFaded[index] = gPlttBufferUnfaded[index];
|
||||
}
|
||||
else if (data2->unused_15) // Set transparency/blending color
|
||||
gPlttBufferUnfaded[index] = gPlttBufferFaded[index] = blendColor;
|
||||
continue;
|
||||
}
|
||||
r = data1->r;
|
||||
g = data1->g;
|
||||
b = data1->b;
|
||||
gPlttBufferFaded[index] = RGB(r + (((data2->r - r) * coeff) >> 4),
|
||||
g + (((data2->g - g) * coeff) >> 4),
|
||||
b + (((data2->b - b) * coeff) >> 4));
|
||||
}
|
||||
}
|
||||
|
||||
// Apply time effect to a series of palettes
|
||||
void TimePalettes(u32 palettes, u8 coeff, u16 color) {
|
||||
u16 paletteOffset;
|
||||
for (paletteOffset = 0; palettes; paletteOffset += 16) {
|
||||
if (palettes & 1)
|
||||
TimePalette(paletteOffset, 16, coeff, color);
|
||||
palettes >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color)
|
||||
{
|
||||
void *src = gPlttBufferUnfaded;
|
||||
@ -1123,8 +1159,8 @@ static bool32 IsBlendPalettesGraduallyTaskActive(u8 id)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < NUM_TASKS; i++)
|
||||
if ((gTasks[i].isActive == TRUE)
|
||||
&& (gTasks[i].func == Task_BlendPalettesGradually)
|
||||
if ((gTasks[i].isActive == TRUE)
|
||||
&& (gTasks[i].func == Task_BlendPalettesGradually)
|
||||
&& (gTasks[i].tId == id))
|
||||
return TRUE;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user