diff --git a/include/palette.h b/include/palette.h index 15c92cc2a7ad..6de7ec096e14 100644 --- a/include/palette.h +++ b/include/palette.h @@ -35,20 +35,20 @@ enum struct PaletteFadeControl { u32 multipurpose1; - u8 delayCounter:6; + u16 delayCounter:6; u16 y:5; // blend coefficient u16 targetY:5; // target blend coefficient u16 blendColor:15; bool16 active:1; - u16 multipurpose2:6; - bool16 yDec:1; // whether blend coefficient is decreasing - bool16 bufferTransferDisabled:1; - u16 mode:2; - bool16 shouldResetBlendRegisters:1; - bool16 hardwareFadeFinishing:1; - u16 softwareFadeFinishingCounter:5; - bool16 softwareFadeFinishing:1; - bool16 objPaletteToggle:1; + u8 multipurpose2:6; + bool8 yDec:1; // whether blend coefficient is decreasing + bool8 bufferTransferDisabled:1; + u8 mode:2; + bool8 shouldResetBlendRegisters:1; + bool8 hardwareFadeFinishing:1; + u8 softwareFadeFinishingCounter:5; + bool8 softwareFadeFinishing:1; + bool8 objPaletteToggle:1; u8 deltaY:4; // rate of change of blend coefficient }; @@ -58,7 +58,7 @@ extern u8 ALIGNED(4) gPaletteDecompressionBuffer[]; extern u16 ALIGNED(4) gPlttBufferUnfaded[PLTT_BUFFER_SIZE]; extern u16 ALIGNED(4) gPlttBufferFaded[PLTT_BUFFER_SIZE]; -void LoadCompressedPalette(const u32 *src, u16 offset, u16 size); +void LoadCompressedPalette(const void *src, u16 offset, u16 size); void LoadPalette(const void *src, u16 offset, u16 size); void FillPalette(u16 value, u16 offset, u16 size); void TransferPlttBuffer(void); diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c index 6b48215a7a1a..aa22a5d63a00 100644 --- a/src/battle_anim_ice.c +++ b/src/battle_anim_ice.c @@ -1010,7 +1010,7 @@ void AnimTask_HazeScrollingFog(u8 taskId) GetBattleAnimBg1Data(&animBg); LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset); AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimFogTilemap, FALSE); - LoadPalette(&gFogPalette, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); + LoadPalette(gFogPalette, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); gTasks[taskId].func = AnimTask_HazeScrollingFog_Step; } @@ -1115,7 +1115,7 @@ void AnimTask_MistBallFog(u8 taskId) GetBattleAnimBg1Data(&animBg); LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset); AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimFogTilemap, FALSE); - LoadPalette(&gFogPalette, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); + LoadPalette(gFogPalette, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); gTasks[taskId].data[15] = -1; gTasks[taskId].func = AnimTask_MistBallFog_Step; diff --git a/src/item_menu.c b/src/item_menu.c index 3fd931c32209..47e30c4ca2e9 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -2450,7 +2450,7 @@ static void LoadBagMenuTextWindows(void) LoadUserWindowBorderGfx(0, 1, BG_PLTT_ID(14)); LoadMessageBoxGfx(0, 10, BG_PLTT_ID(13)); ListMenuLoadStdPalAt(BG_PLTT_ID(12), 1); - LoadPalette(&gStandardMenuPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); for (i = 0; i <= WIN_POCKET_NAME; i++) { FillWindowPixelBuffer(i, PIXEL_FILL(0)); diff --git a/src/palette.c b/src/palette.c index 0986df5528f2..55ab5fbadc13 100644 --- a/src/palette.c +++ b/src/palette.c @@ -81,7 +81,7 @@ static const u8 sRoundedDownGrayscaleMap[] = { 31, 31 }; -void LoadCompressedPalette(const u32 *src, u16 offset, u16 size) +void LoadCompressedPalette(const void *src, u16 offset, u16 size) { LZDecompressWram(src, gPaletteDecompressionBuffer); CpuCopy16(gPaletteDecompressionBuffer, &gPlttBufferUnfaded[offset], size); @@ -156,50 +156,48 @@ static void ReadPlttIntoBuffers(void) bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor) { u8 temp; - u16 color = blendColor; if (gPaletteFade.active) { return FALSE; } - else + + gPaletteFade.deltaY = 2; + + if (delay < 0) { - gPaletteFade.deltaY = 2; + gPaletteFade.deltaY += abs(delay); + delay = 0; + } - if (delay < 0) - { - gPaletteFade.deltaY += (delay * -1); - delay = 0; - } + gPaletteFade_selectedPalettes = selectedPalettes; + gPaletteFade.delayCounter = delay; + gPaletteFade_delay = delay; + gPaletteFade.y = startY; + gPaletteFade.targetY = targetY; + gPaletteFade.blendColor = blendColor; + gPaletteFade.active = TRUE; + gPaletteFade.mode = NORMAL_FADE; - gPaletteFade_selectedPalettes = selectedPalettes; - gPaletteFade.delayCounter = delay; - gPaletteFade_delay = delay; - gPaletteFade.y = startY; - gPaletteFade.targetY = targetY; - gPaletteFade.blendColor = color; - gPaletteFade.active = TRUE; - gPaletteFade.mode = NORMAL_FADE; + if (startY < targetY) + gPaletteFade.yDec = 0; + else + gPaletteFade.yDec = 1; - if (startY < targetY) - gPaletteFade.yDec = 0; - else - gPaletteFade.yDec = 1; + UpdatePaletteFade(); - UpdatePaletteFade(); + temp = gPaletteFade.bufferTransferDisabled; + gPaletteFade.bufferTransferDisabled = FALSE; - temp = gPaletteFade.bufferTransferDisabled; - gPaletteFade.bufferTransferDisabled = FALSE; - CpuCopy32(gPlttBufferFaded, (void *)PLTT, PLTT_SIZE); - sPlttBufferTransferPending = FALSE; - if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active) - UpdateBlendRegisters(); - gPaletteFade.bufferTransferDisabled = temp; - return TRUE; - } + CpuCopy32(gPlttBufferFaded, (void *)PLTT, PLTT_SIZE); + sPlttBufferTransferPending = FALSE; + if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active) + UpdateBlendRegisters(); + gPaletteFade.bufferTransferDisabled = temp; + return TRUE; } -static bool8 UNUSED BeginPlttFade(u32 selectedPalettes, u8 delay, u8 startY, u8 targetY, u16 blendColor) +static bool8 UNUSED BeginPlttFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor) { ReadPlttIntoBuffers(); return BeginNormalPaletteFade(selectedPalettes, delay, startY, targetY, blendColor); @@ -235,8 +233,6 @@ static void UNUSED PaletteStruct_Run(u8 a1, u32 *unkFlags) static void PaletteStruct_Copy(struct PaletteStruct *palStruct, u32 *unkFlags) { - s32 srcIndex; - s32 srcCount; u8 i = 0; u16 srcOffset = palStruct->srcIndex * palStruct->template->size; @@ -266,10 +262,7 @@ static void PaletteStruct_Copy(struct PaletteStruct *palStruct, u32 *unkFlags) palStruct->countdown1 = palStruct->template->time1; palStruct->srcIndex++; - srcIndex = palStruct->srcIndex; - srcCount = palStruct->template->srcCount; - - if (srcIndex >= srcCount) + if (palStruct->srcIndex >= palStruct->template->srcCount) { if (palStruct->countdown2) palStruct->countdown2--; @@ -315,22 +308,18 @@ static void PaletteStruct_TryEnd(struct PaletteStruct *pal) { if (pal->countdown2 == 0) { - s32 state = pal->template->state; - - if (state == 0) + switch (pal->template->state) { + case 0: pal->srcIndex = 0; pal->countdown1 = pal->template->time1; pal->countdown2 = pal->template->time2; pal->destOffset = pal->baseDestOffset; - } - else - { - if (state < 0) - return; - if (state > 2) - return; + break; + case 1: + case 2: PaletteStruct_ResetById(pal->template->id); + break; } } else @@ -367,7 +356,6 @@ void ResetPaletteFadeControl(void) gPaletteFade.targetY = 0; gPaletteFade.blendColor = 0; gPaletteFade.active = FALSE; - gPaletteFade.multipurpose2 = 0; // assign same value twice gPaletteFade.yDec = 0; gPaletteFade.bufferTransferDisabled = FALSE; gPaletteFade.shouldResetBlendRegisters = FALSE; @@ -407,86 +395,75 @@ static u8 UpdateNormalPaletteFade(void) { u16 paletteOffset; u16 selectedPalettes; + s8 val; if (!gPaletteFade.active) return PALETTE_FADE_STATUS_DONE; if (IsSoftwarePaletteFadeFinishing()) - { - return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE; - } - else - { - if (!gPaletteFade.objPaletteToggle) - { - if (gPaletteFade.delayCounter < gPaletteFade_delay) - { - gPaletteFade.delayCounter++; - return 2; - } - gPaletteFade.delayCounter = 0; - } - - paletteOffset = 0; + return gPaletteFade.active; - if (!gPaletteFade.objPaletteToggle) - { - selectedPalettes = gPaletteFade_selectedPalettes; - } - else + if (!gPaletteFade.objPaletteToggle) + { + if (gPaletteFade.delayCounter < gPaletteFade_delay) { - selectedPalettes = gPaletteFade_selectedPalettes >> 16; - paletteOffset = OBJ_PLTT_OFFSET; - } - - while (selectedPalettes) - { - if (selectedPalettes & 1) - BlendPalette( - paletteOffset, - 16, - gPaletteFade.y, - gPaletteFade.blendColor); - selectedPalettes >>= 1; - paletteOffset += 16; + gPaletteFade.delayCounter++; + return 2; } + gPaletteFade.delayCounter = 0; + } - gPaletteFade.objPaletteToggle ^= 1; + paletteOffset = 0; - if (!gPaletteFade.objPaletteToggle) - { - if (gPaletteFade.y == gPaletteFade.targetY) - { - gPaletteFade_selectedPalettes = 0; - gPaletteFade.softwareFadeFinishing = TRUE; - } - else - { - s8 val; + if (!gPaletteFade.objPaletteToggle) + { + selectedPalettes = gPaletteFade_selectedPalettes; + } + else + { + selectedPalettes = gPaletteFade_selectedPalettes >> 16; + paletteOffset = OBJ_PLTT_OFFSET; + } - if (!gPaletteFade.yDec) - { - val = gPaletteFade.y; - val += gPaletteFade.deltaY; - if (val > gPaletteFade.targetY) - val = gPaletteFade.targetY; - gPaletteFade.y = val; - } - else - { - val = gPaletteFade.y; - val -= gPaletteFade.deltaY; - if (val < gPaletteFade.targetY) - val = gPaletteFade.targetY; - gPaletteFade.y = val; - } - } - } + while (selectedPalettes) + { + if (selectedPalettes & 1) + BlendPalette(paletteOffset, 16, gPaletteFade.y, gPaletteFade.blendColor); + selectedPalettes >>= 1; + paletteOffset += 16; + } + gPaletteFade.objPaletteToggle ^= 1; + if (gPaletteFade.objPaletteToggle) // gPaletteFade.active cannot change since the last time it was checked. So this // is equivalent to `return PALETTE_FADE_STATUS_ACTIVE;` - return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE; + return gPaletteFade.active; + + if (gPaletteFade.y == gPaletteFade.targetY) + { + gPaletteFade_selectedPalettes = 0; + gPaletteFade.softwareFadeFinishing = TRUE; } + else if (!gPaletteFade.yDec) + { + val = gPaletteFade.y; + val += gPaletteFade.deltaY; + if (val > gPaletteFade.targetY) + val = gPaletteFade.targetY; + gPaletteFade.y = val; + } + else + { + val = gPaletteFade.y; + val -= gPaletteFade.deltaY; + if (val < gPaletteFade.targetY) + val = gPaletteFade.targetY; + gPaletteFade.y = val; + } + + // gPaletteFade.active cannot change since the last time it was checked. So this + // is equivalent to `return PALETTE_FADE_STATUS_ACTIVE;` + return gPaletteFade.active; } void InvertPlttBuffer(u32 selectedPalettes) @@ -554,7 +531,7 @@ void BeginFastPaletteFade(u8 submode) static void BeginFastPaletteFadeInternal(u8 submode) { gPaletteFade.y = 31; - gPaletteFade_submode = submode & 0x3F; + gPaletteFade_submode = submode; gPaletteFade.active = TRUE; gPaletteFade.mode = FAST_FADE; @@ -693,7 +670,7 @@ static u8 UpdateFastPaletteFade(void) if (gPaletteFade.objPaletteToggle) // gPaletteFade.active cannot change since the last time it was checked. So this // is equivalent to `return PALETTE_FADE_STATUS_ACTIVE;` - return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE; + return gPaletteFade.active; if (gPaletteFade.y - gPaletteFade.deltaY < 0) gPaletteFade.y = 0; @@ -722,7 +699,7 @@ static u8 UpdateFastPaletteFade(void) // gPaletteFade.active cannot change since the last time it was checked. So this // is equivalent to `return PALETTE_FADE_STATUS_ACTIVE;` - return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE; + return gPaletteFade.active; } void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 shouldResetBlendRegisters) @@ -767,8 +744,10 @@ static u8 UpdateHardwarePaletteFade(void) } else { - s32 y = gPaletteFade.y--; - if (y - 1 < gPaletteFade.targetY) + // s8 y = --gPaletteFade.y doesn't match; + s8 y = gPaletteFade.y--; + y--; + if (y < gPaletteFade.targetY) { gPaletteFade.hardwareFadeFinishing++; gPaletteFade.y++; @@ -787,7 +766,7 @@ static u8 UpdateHardwarePaletteFade(void) // gPaletteFade.active cannot change since the last time it was checked. So this // is equivalent to `return PALETTE_FADE_STATUS_ACTIVE;` - return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE; + return gPaletteFade.active; } static void UpdateBlendRegisters(void) @@ -1006,7 +985,6 @@ static void Task_BlendPalettesGradually(u8 taskId) { u32 palettes; s16 *data; - s16 target; data = gTasks[taskId].data; palettes = GetWordTaskArg(taskId, tPalettes); @@ -1015,24 +993,22 @@ static void Task_BlendPalettesGradually(u8 taskId) { tDelayTimer = 0; BlendPalettes(palettes, tCoeff, tColor); - target = tCoeffTarget; - if (tCoeff == target) + + if (tCoeff == tCoeffTarget) { DestroyTask(taskId); + return; } - else + + tCoeff += tCoeffDelta; + if (tCoeffDelta >= 0) { - tCoeff += tCoeffDelta; - if (tCoeffDelta >= 0) - { - if (tCoeff < target) - return; - } - else if (tCoeff > target) - { - return; - } - tCoeff = target; + if (tCoeff >= tCoeffTarget) + tCoeff = tCoeffTarget; + } + else if (tCoeff <= tCoeffTarget) + { + tCoeff = tCoeffTarget; } } } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 2952814c7da8..a254e3783e76 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1352,7 +1352,7 @@ static bool8 DecompressGraphics(void) break; case 6: LoadCompressedPalette(gSummaryScreen_Pal, BG_PLTT_ID(0), 8 * PLTT_SIZE_4BPP); - LoadPalette(&gPPTextPalette, BG_PLTT_ID(8) + 1, PLTT_SIZEOF(16 - 1)); + LoadPalette(gPPTextPalette, BG_PLTT_ID(8) + 1, PLTT_SIZEOF(16 - 1)); sMonSummaryScreen->switchCounter++; break; case 7: