diff --git a/include/constants/battle/battle_anim.h b/include/constants/battle/battle_anim.h index 19f775e6b4..678cdc076c 100644 --- a/include/constants/battle/battle_anim.h +++ b/include/constants/battle/battle_anim.h @@ -49,7 +49,10 @@ #define BATTLE_BG_PRIORITY_BASE 1 #define BATTLE_BG_PRIORITY_EFFECT 3 -#define BATTLE_BG_PALETTE_EFFECT (1 << 9) +#define BATTLE_BG_PALETTE_EFFECT 9 +#define BATTLE_BG_PALETTE_MON_SPRITE 8 +#define BATTLE_BG_PALETTE_FLAG_EFFECT (1 << BATTLE_BG_PALETTE_EFFECT) +#define BATTLE_BG_PALETTE_FLAG_MON_SPRITE (1 << BATTLE_BG_PALETTE_MON_SPRITE) #define BATTLE_BG_ANIM_REVERSE_NEVER 0 //< Don't reverse BG anims #define BATTLE_BG_ANIM_REVERSE_ENEMY_ONLY 1 //< Reverse BG anims only for enemy attacking player @@ -80,5 +83,9 @@ #define FLAIL_MODE_ATTACKER 0 #define FLAIL_MODE_DEFENDER 1 +#define FADE_BG_TYPE_BASE 0 +#define FADE_BG_TYPE_MON_SPRITE 1 +#define FADE_BG_TYPE_EFFECT 2 + // clang-format on #endif // POKEPLATINUM_CONSTANTS_BATTLE_ANIM_H diff --git a/include/overlay012/ov12_02226B84.h b/include/overlay012/ov12_02226B84.h index 5c3651118f..020bf2bd8d 100644 --- a/include/overlay012/ov12_02226B84.h +++ b/include/overlay012/ov12_02226B84.h @@ -11,7 +11,7 @@ void ov12_022271D8(BattleAnimSystem *param0); void BattleAnimScriptFunc_RotateMon(BattleAnimSystem *param0); void BattleAnimScriptFunc_Submission(BattleAnimSystem *param0); void ov12_0222777C(BattleAnimSystem *param0, SpriteSystem *param1, SpriteManager *param2, ManagedSprite *param3); -void ov12_02227828(BattleAnimSystem *param0); +void BattleAnimScriptFunc_FadeBg(BattleAnimSystem *param0); void ov12_0222797C(BattleAnimSystem *param0); void ov12_02227CBC(BattleAnimSystem *param0); void ov12_02227F30(BattleAnimSystem *param0); diff --git a/src/overlay012/battle_anim_system.c b/src/overlay012/battle_anim_system.c index 5b31073e5b..54df40aa57 100644 --- a/src/overlay012/battle_anim_system.c +++ b/src/overlay012/battle_anim_system.c @@ -1812,7 +1812,7 @@ static void BattleAnimScriptCmd_LoadPokemonSpriteIntoBg(BattleAnimSystem *system system->heapID, PLTTBUF_MAIN_BG, 0, - PLTT_DEST(8)); + PLTT_DEST(BATTLE_BG_PALETTE_MON_SPRITE)); Graphics_LoadTilemapToBgLayerFromOpenNARC( system->arcs[BATTLE_ANIM_SYSTEM_ARC_BATT_BG], @@ -2305,7 +2305,7 @@ static void BattleBgSwitch_SetBg(BattleBgSwitch *bgSwitch, BattleAnimSystem *sys system->heapID, 0, PALETTE_SIZE_BYTES, - PLTT_DEST(9)); + PLTT_DEST(BATTLE_BG_PALETTE_EFFECT)); Bg_ClearTilemap(system->bgConfig, bgLayer); @@ -2582,10 +2582,10 @@ static BOOL BattleBgSwitch_Fade(SysTask *task, BattleBgSwitch *bgSwitch) // set effect BG palette to black/white immediately if (bgSwitch->fadeType == BATTLE_BG_FADE_TO_BLACK) { PaletteData_StartFade(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG_F, bgSwitch->battleAnimSystem->baseBgPalettes, 0, 0, 16, GX_RGBA(0, 0, 0, 0)); - PaletteData_BlendMulti(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG, BATTLE_BG_PALETTE_EFFECT, 16, GX_RGBA(0, 0, 0, 0)); + PaletteData_BlendMulti(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG, BATTLE_BG_PALETTE_FLAG_EFFECT, 16, GX_RGBA(0, 0, 0, 0)); } else { PaletteData_StartFade(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG_F, bgSwitch->battleAnimSystem->baseBgPalettes, 0, 0, 16, GX_RGBA(31, 31, 31, 1)); - PaletteData_BlendMulti(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG, BATTLE_BG_PALETTE_EFFECT, 16, GX_RGBA(31, 31, 31, 1)); + PaletteData_BlendMulti(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG, BATTLE_BG_PALETTE_FLAG_EFFECT, 16, GX_RGBA(31, 31, 31, 1)); } bgSwitch->state++; @@ -2603,9 +2603,9 @@ static BOOL BattleBgSwitch_Fade(SysTask *task, BattleBgSwitch *bgSwitch) // Fade effect BG palette back to normal if (bgSwitch->fadeType == BATTLE_BG_FADE_TO_BLACK) { - PaletteData_StartFade(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG_F, BATTLE_BG_PALETTE_EFFECT, 0, 16, 0, GX_RGBA(0, 0, 0, 0)); + PaletteData_StartFade(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG_F, BATTLE_BG_PALETTE_FLAG_EFFECT, 0, 16, 0, GX_RGBA(0, 0, 0, 0)); } else { - PaletteData_StartFade(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG_F, BATTLE_BG_PALETTE_EFFECT, 0, 16, 0, GX_RGBA(31, 31, 31, 1)); + PaletteData_StartFade(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG_F, BATTLE_BG_PALETTE_FLAG_EFFECT, 0, 16, 0, GX_RGBA(31, 31, 31, 1)); } BattleBgSwitch_ApplyFlags(bgSwitch); @@ -2638,10 +2638,10 @@ static BOOL BattleBgRestore_Fade(SysTask *task, BattleBgSwitch *bgSwitch) // Fade effect BG palette to black/white and // set normal battle/contest BG palettes to black/white if (bgSwitch->fadeType == BATTLE_BG_FADE_TO_BLACK) { - PaletteData_StartFade(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG_F, BATTLE_BG_PALETTE_EFFECT, 0, 0, 16, GX_RGBA(0, 0, 0, 0)); + PaletteData_StartFade(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG_F, BATTLE_BG_PALETTE_FLAG_EFFECT, 0, 0, 16, GX_RGBA(0, 0, 0, 0)); PaletteData_BlendMulti(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG, bgSwitch->battleAnimSystem->baseBgPalettes, 16, GX_RGBA(0, 0, 0, 0)); } else { - PaletteData_StartFade(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG_F, BATTLE_BG_PALETTE_EFFECT, 0, 0, 16, GX_RGBA(31, 31, 31, 1)); + PaletteData_StartFade(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG_F, BATTLE_BG_PALETTE_FLAG_EFFECT, 0, 0, 16, GX_RGBA(31, 31, 31, 1)); PaletteData_BlendMulti(bgSwitch->battleAnimSystem->paletteData, PLTTBUF_MAIN_BG, bgSwitch->battleAnimSystem->baseBgPalettes, 16, GX_RGBA(31, 31, 31, 1)); } diff --git a/src/overlay012/ov12_02226998.c b/src/overlay012/ov12_02226998.c index 24582a53d2..04faf87236 100644 --- a/src/overlay012/ov12_02226998.c +++ b/src/overlay012/ov12_02226998.c @@ -50,7 +50,7 @@ static const BattleAnimScriptFunc sBattleAnimScriptFuncs[] = { BattleAnimScriptFunc_VitalThrow, BattleAnimScriptFunc_Swagger, BattleAnimScriptFunc_Memento, - ov12_02227828, + BattleAnimScriptFunc_FadeBg, ov12_0222797C, ov12_02227CBC, ov12_02226CB0, diff --git a/src/overlay012/ov12_02226B84.c b/src/overlay012/ov12_02226B84.c index 5c44d3ad2a..30063ac149 100644 --- a/src/overlay012/ov12_02226B84.c +++ b/src/overlay012/ov12_02226B84.c @@ -93,10 +93,19 @@ typedef struct { s16 unk_4E; } UnkStruct_ov12_02227620; -typedef struct { - BattleAnimSystem *unk_00; - PaletteData *unk_04; -} UnkStruct_ov12_02227808; +// ------------------------------------------------------------------- +// Fade BG +// ------------------------------------------------------------------- +typedef struct FadeBgContext { + BattleAnimSystem *battleAnimSys; + PaletteData *paletteData; +} FadeBgContext; + +#define FADE_BG_VAR_BG_TYPE 0 +#define FADE_BG_VAR_DELAY 1 +#define FADE_BG_VAR_START_VALUE 2 +#define FADE_BG_VAR_END_VALUE 3 +#define FADE_BG_VAR_COLOR 4 typedef struct { BattleAnimSystem *unk_00; @@ -1046,43 +1055,49 @@ void ov12_0222777C(BattleAnimSystem *param0, SpriteSystem *param1, SpriteManager BattleAnimSystem_StartAnimTask(v0->unk_00, ov12_02227738, v0); } -static void ov12_02227808(SysTask *param0, void *param1) +static void BattleAnimTask_FadeBg(SysTask *task, void *param) { - UnkStruct_ov12_02227808 *v0 = param1; + FadeBgContext *ctx = param; - if (PaletteData_GetSelectedBuffersMask(v0->unk_04) == 0) { - Heap_Free(v0); - BattleAnimSystem_EndAnimTask(v0->unk_00, param0); + if (PaletteData_GetSelectedBuffersMask(ctx->paletteData) == 0) { + Heap_Free(ctx); + BattleAnimSystem_EndAnimTask(ctx->battleAnimSys, task); } } -void ov12_02227828(BattleAnimSystem *param0) +void BattleAnimScriptFunc_FadeBg(BattleAnimSystem *system) { - UnkStruct_ov12_02227808 *v0; - u16 v1; + FadeBgContext *ctx = BattleAnimUtil_Alloc(system, sizeof(FadeBgContext)); - v0 = BattleAnimUtil_Alloc(param0, sizeof(UnkStruct_ov12_02227808)); + ctx->battleAnimSys = system; + ctx->paletteData = BattleAnimSystem_GetPaletteData(ctx->battleAnimSys); - v0->unk_00 = param0; - v0->unk_04 = BattleAnimSystem_GetPaletteData(v0->unk_00); - - switch (BattleAnimSystem_GetScriptVar(param0, 0)) { - case 0: - v1 = BattleAnimSystem_GetBaseBgPalettes(param0); + u16 paletteToFade; + switch (BattleAnimSystem_GetScriptVar(system, FADE_BG_VAR_BG_TYPE)) { + case FADE_BG_TYPE_BASE: + paletteToFade = BattleAnimSystem_GetBaseBgPalettes(system); break; - case 1: - v1 = (1 << 8); + case FADE_BG_TYPE_MON_SPRITE: + paletteToFade = BATTLE_BG_PALETTE_FLAG_MON_SPRITE; break; - case 2: - v1 = (1 << 9); + case FADE_BG_TYPE_EFFECT: + paletteToFade = BATTLE_BG_PALETTE_FLAG_EFFECT; break; default: - GF_ASSERT(0); + GF_ASSERT(FALSE); break; } - PaletteData_StartFade(v0->unk_04, 0x1, v1, BattleAnimSystem_GetScriptVar(param0, 1), BattleAnimSystem_GetScriptVar(param0, 2), BattleAnimSystem_GetScriptVar(param0, 3), BattleAnimSystem_GetScriptVar(param0, 4)); - BattleAnimSystem_StartAnimTask(v0->unk_00, ov12_02227808, v0); + PaletteData_StartFade( + ctx->paletteData, + PLTTBUF_MAIN_BG_F, + paletteToFade, + BattleAnimSystem_GetScriptVar(system, FADE_BG_VAR_DELAY), + BattleAnimSystem_GetScriptVar(system, FADE_BG_VAR_START_VALUE), + BattleAnimSystem_GetScriptVar(system, FADE_BG_VAR_END_VALUE), + BattleAnimSystem_GetScriptVar(system, FADE_BG_VAR_COLOR)); + + BattleAnimSystem_StartAnimTask(ctx->battleAnimSys, BattleAnimTask_FadeBg, ctx); } static void ov12_022278D0(SysTask *param0, void *param1)