Merge commit '7612e386419ef913bda5a62a5c8f234190542bb0' into merrp-merge

Conflicts:
	src/palette.c
This commit is contained in:
Hedara 2025-06-25 17:07:13 +02:00
commit 1686797a5e
2 changed files with 37 additions and 17 deletions

View File

@ -2,10 +2,12 @@
#include "palette.h"
#include "util.h"
#include "decompress.h"
#include "field_weather.h"
#include "malloc.h"
#include "menu.h"
#include "gpu_regs.h"
#include "task.h"
#include "constants/field_weather.h"
#include "constants/rgb.h"
enum
@ -718,26 +720,46 @@ static void UpdateBlendRegisters(void)
{
SetGpuReg(REG_OFFSET_BLDCNT, (u16)gPaletteFadeBlendCnt);
SetGpuReg(REG_OFFSET_BLDY, gPaletteFade.y);
// If fade-out, also adjust BLDALPHA and DISPCNT
if (!gPaletteFade.yDec)
// if TGT2 enabled, also adjust BLDALPHA and DISPCNT
if (((u16)gPaletteFadeBlendCnt) & BLDCNT_TGT2_ALL)
{
u16 bldAlpha = GetGpuReg(REG_OFFSET_BLDALPHA);
u8 tgt1 = BLDALPHA_TGT1(bldAlpha);
u8 tgt2 = BLDALPHA_TGT2(bldAlpha);
u8 bldFade;
u8 mode = (gPaletteFadeBlendCnt & BLDCNT_EFFECT_EFF_MASK) == BLDCNT_EFFECT_LIGHTEN ? FADE_FROM_WHITE : FADE_FROM_BLACK;
if (!gPaletteFade.yDec)
mode++;
switch (gPaletteFadeBlendCnt & BLDCNT_EFFECT_EFF_MASK)
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_FORCED_BLANK);
switch (mode)
{
// FADE_TO_BLACK
case BLDCNT_EFFECT_DARKEN:
bldFade = BLDALPHA_TGT1(max(0, 16 - gPaletteFade.y));
SetGpuReg(REG_OFFSET_BLDALPHA,
BLDALPHA_BLEND(min(tgt1, bldFade), min(tgt2, bldFade)));
case FADE_FROM_BLACK:
// increment each target until reaching weather's values
SetGpuReg(
REG_OFFSET_BLDALPHA,
BLDALPHA_BLEND(
min(++tgt1, gWeatherPtr->currBlendEVA),
min(++tgt2, gWeatherPtr->currBlendEVB)
)
);
break;
// FADE_TO_WHITE
case BLDCNT_EFFECT_LIGHTEN:
SetGpuReg(REG_OFFSET_BLDALPHA,
BLDALPHA_BLEND(min(++tgt1, 31), min(++tgt2, 31)));
case FADE_TO_BLACK:
bldAlpha = BLDALPHA_TGT1(max(0, 16 - gPaletteFade.y));
SetGpuReg(
REG_OFFSET_BLDALPHA,
BLDALPHA_BLEND(min(tgt1, bldAlpha), min(tgt2, bldAlpha))
);
break;
// Not handled; blend sprites will pop in,
// but the effect coming from white looks okay
// case FADE_FROM_WHITE:
// break;
case FADE_TO_WHITE:
SetGpuReg(
REG_OFFSET_BLDALPHA,
BLDALPHA_BLEND(min(++tgt1, 31), min(++tgt2, 31))
);
// cause display to show white when finished
// (otherwise blend-mode sprites will still be visible)
if (gPaletteFade.hardwareFadeFinishing && gPaletteFade.y >= 16)
@ -745,10 +767,6 @@ static void UpdateBlendRegisters(void)
break;
}
}
else
{
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_FORCED_BLANK);
}
if (gPaletteFade.hardwareFadeFinishing)
{

View File

@ -839,6 +839,8 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx)
switch (mode)
{
case FADE_FROM_BLACK:
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
break;
case FADE_FROM_WHITE:
// Restore last weather blend before fading in,
// since BLDALPHA was modified by fade-out