Fixed bugged interaction between reflections & light sprites.

This commit is contained in:
Ariel Antonitis 2021-04-19 22:07:47 -04:00
parent def9d39fbb
commit a80de91463
2 changed files with 16 additions and 13 deletions

View file

@ -1943,6 +1943,7 @@ void UpdateLightSprite(struct Sprite *sprite) {
DestroySprite(sprite); DestroySprite(sprite);
FieldEffectFreeTilesIfUnused(sheetTileStart); FieldEffectFreeTilesIfUnused(sheetTileStart);
FieldEffectFreePaletteIfUnused(paletteNum); FieldEffectFreePaletteIfUnused(paletteNum);
Weather_SetBlendCoeffs(7, 12); // TODO: Restore original blend coeffs at dawn
return; return;
} }

View file

@ -97,39 +97,41 @@ static void LoadObjectReflectionPalette(struct ObjectEvent *objectEvent, struct
// Apply a blue tint effect to a palette // Apply a blue tint effect to a palette
static void ApplyPondFilter(u8 paletteNum, u16 *dest) { static void ApplyPondFilter(u8 paletteNum, u16 *dest) {
u8 i, val, r, g, b; u8 i;
// CpuCopy16(gPlttBufferUnfaded + 0x100 + paletteNum * 16, dest, 32); s32 r, g, b;
u16 *src = gPlttBufferUnfaded + 0x100 + paletteNum * 16; u16 *src = gPlttBufferUnfaded + 0x100 + paletteNum * 16;
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
r = src[i] & 0x1F; u32 color = *src++;
g = (src[i] >> 5) & 0x1F; r = (color << 27) >> 27;
b = (src[i] >> 10) & 0x1F; g = (color << 22) >> 27;
b = (color << 17) >> 27;
b += 10; b += 10;
if (b > 31) if (b > 31)
b = 31; b = 31;
*dest++ = (b << 10) | (g << 5) | r; *dest++ = r | (g << 5) | (b << 10);
} }
} }
// Apply a ice tint effect to a palette // Apply a ice tint effect to a palette
static void ApplyIceFilter(u8 paletteNum, u16 *dest) { static void ApplyIceFilter(u8 paletteNum, u16 *dest) {
u8 i, val, r, g, b; u8 i;
// CpuCopy16(gPlttBufferUnfaded + 0x100 + paletteNum * 16, dest, 32); s32 r, g, b;
u16 *src = gPlttBufferUnfaded + 0x100 + paletteNum * 16; u16 *src = gPlttBufferUnfaded + 0x100 + paletteNum * 16;
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
r = src[i] & 0x1F; u32 color = *src++;
r = (color << 27) >> 27;
g = (color << 22) >> 27;
b = (color << 17) >> 27;
r -= 5; r -= 5;
if (r > 31) if (r < 0)
r = 0; r = 0;
g = (src[i] >> 5) & 0x1F;
g += 3; g += 3;
if (g > 31) if (g > 31)
g = 31; g = 31;
b = (src[i] >> 10) & 0x1F;
b += 16; b += 16;
if (b > 31) if (b > 31)
b = 31; b = 31;
*dest++ = (b << 10) | (g << 5) | r; *dest++ = r | (g << 5) | (b << 10);
} }
} }