Merge commit '7612e386419ef913bda5a62a5c8f234190542bb0' into merrp-merge
Conflicts: src/palette.c
This commit is contained in:
commit
1686797a5e
@ -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)
|
||||
{
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user