diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-08-12 01:26:29 -0400 |
---|---|---|
committer | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-08-12 01:26:29 -0400 |
commit | 1a8fe435e7deabf06029c8e50201136518e3af73 (patch) | |
tree | 9746f2f4f4901e81496465da485d0f5c8a647586 /src/palette.c | |
parent | bb0cad7c072703f5a540e8c22c8e137267331f4d (diff) |
split out src/ directory into categorized subdirectories.
Diffstat (limited to 'src/palette.c')
-rw-r--r-- | src/palette.c | 834 |
1 files changed, 0 insertions, 834 deletions
diff --git a/src/palette.c b/src/palette.c deleted file mode 100644 index 94a4f8092..000000000 --- a/src/palette.c +++ /dev/null @@ -1,834 +0,0 @@ -#include "global.h" -#include "palette.h" -#include "blend_palette.h" -#include "decompress.h" - -enum -{ - NORMAL_FADE, - FAST_FADE, - HARDWARE_FADE, -}; - -// These are structs for some unused palette system. -// The full functionality of this system is unknown. - -struct PaletteStructTemplate -{ - u16 uid; - u16 *src; - u16 pst_field_8_0:1; - u16 pst_field_8_1:9; - u16 size:5; - u16 pst_field_9_7:1; - u8 pst_field_A; - u8 srcCount:5; - u8 pst_field_B_5:3; - u8 pst_field_C; -}; - -struct PaletteStruct -{ - const struct PaletteStructTemplate *base; - u32 ps_field_4_0:1; - u16 ps_field_4_1:1; - u32 baseDestOffset:9; - u16 destOffset:10; - u16 srcIndex:7; - u8 ps_field_8; - u8 ps_field_9; -}; - -EWRAM_DATA u16 gPlttBufferUnfaded[0x200] = {0}; -EWRAM_DATA u16 gPlttBufferFaded[0x200] = {0}; -EWRAM_DATA static struct PaletteStruct sPaletteStructs[0x10] = {0}; -EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; -EWRAM_DATA u32 gFiller_202F394 = 0; -EWRAM_DATA static u32 sPlttBufferTransferPending = 0; -EWRAM_DATA static u8 sPaletteDecompressionBuffer[0x400] = {0}; - -static const struct PaletteStructTemplate sDummyPaletteStructTemplate = -{ - 0xFFFF, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0 -}; - -static void unused_sub_8073DFC(struct PaletteStruct *, u32 *); -static void unused_sub_8073F60(struct PaletteStruct *, u32 *); -static void unused_sub_8074020(struct PaletteStruct *); -static u8 GetPaletteNumByUid(u16); -static u8 UpdateNormalPaletteFade(void); -static void BeginFastPaletteFadeInternal(u8); -static u8 UpdateFastPaletteFade(void); -static u8 UpdateHardwarePaletteFade(void); -static void UpdateBlendRegisters(void); -static bool8 IsSoftwarePaletteFadeFinishing(void); - -void LoadCompressedPalette(const void *src, u16 offset, u16 size) -{ - sub_800D238(src, sPaletteDecompressionBuffer); - CpuCopy16(sPaletteDecompressionBuffer, gPlttBufferUnfaded + offset, size); - CpuCopy16(sPaletteDecompressionBuffer, gPlttBufferFaded + offset, size); -} - -void LoadPalette(const void *src, u16 offset, u16 size) -{ - CpuCopy16(src, gPlttBufferUnfaded + offset, size); - CpuCopy16(src, gPlttBufferFaded + offset, size); -} - -void FillPalette(u16 value, u16 offset, u16 size) -{ - CpuFill16(value, gPlttBufferUnfaded + offset, size); - CpuFill16(value, gPlttBufferFaded + offset, size); -} - -void TransferPlttBuffer(void) -{ - if (!gPaletteFade.bufferTransferDisabled) - { - void *src = gPlttBufferFaded; - void *dest = (void *)PLTT; - DmaCopy16(3, src, dest, PLTT_SIZE); - sPlttBufferTransferPending = 0; - if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active) - UpdateBlendRegisters(); - } -} - -u8 UpdatePaletteFade(void) -{ - u8 result; - u8 dummy = 0; - - if (sPlttBufferTransferPending) - return -1; - - if (gPaletteFade.mode == NORMAL_FADE) - result = UpdateNormalPaletteFade(); - else if (gPaletteFade.mode == FAST_FADE) - result = UpdateFastPaletteFade(); - else - result = UpdateHardwarePaletteFade(); - - sPlttBufferTransferPending = gPaletteFade.multipurpose1 | dummy; - - return result; -} - -void ResetPaletteFade(void) -{ - u8 i; - - for (i = 0; i < 16; i++) - ResetPaletteStruct(i); - - ResetPaletteFadeControl(); -} - -void ReadPlttIntoBuffers(void) -{ - u16 i; - u16 *pltt = (u16 *)PLTT; - - for (i = 0; i < PLTT_SIZE / 2; i++) - { - gPlttBufferUnfaded[i] = pltt[i]; - gPlttBufferFaded[i] = pltt[i]; - } -} - -bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor) -{ - u8 temp; - register u32 _blendColor asm("r8") = blendColor; - - if (gPaletteFade.active) - { - return FALSE; - } - else - { - gPaletteFade.deltaY = 2; - - 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 = 1; - gPaletteFade.mode = NORMAL_FADE; - - if (startY < targetY) - gPaletteFade.yDec = 0; - else - gPaletteFade.yDec = 1; - - UpdatePaletteFade(); - - temp = gPaletteFade.bufferTransferDisabled; - gPaletteFade.bufferTransferDisabled = 0; - CpuCopy32(gPlttBufferFaded, (void *)PLTT, PLTT_SIZE); - sPlttBufferTransferPending = 0; - if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active) - UpdateBlendRegisters(); - gPaletteFade.bufferTransferDisabled = temp; - return TRUE; - } -} - -bool8 unref_sub_8073D3C(u32 a1, u8 a2, u8 a3, u8 a4, u16 a5) -{ - ReadPlttIntoBuffers(); - return BeginNormalPaletteFade(a1, a2, a3, a4, a5); -} - -void unref_sub_8073D84(u8 a1, u32 *a2) -{ - u8 i; - - for (i = 0; i < 16; i++) - { - struct PaletteStruct *palstruct = &sPaletteStructs[i]; - if (palstruct->ps_field_4_0) - { - if (palstruct->base->pst_field_8_0 == a1) - { - u8 val1 = palstruct->srcIndex; - u8 val2 = palstruct->base->srcCount; - if (val1 == val2) - { - unused_sub_8074020(palstruct); - if (!palstruct->ps_field_4_0) - continue; - } - if (palstruct->ps_field_8 == 0) - unused_sub_8073DFC(palstruct, a2); - else - palstruct->ps_field_8--; - - unused_sub_8073F60(palstruct, a2); - } - } - } -} - -static void unused_sub_8073DFC(struct PaletteStruct *a1, u32 *a2) -{ - s32 srcIndex; - s32 srcCount; - u8 i = 0; - u16 srcOffset = a1->srcIndex * a1->base->size; - - if (!a1->base->pst_field_8_0) - { - while (i < a1->base->size) - { - gPlttBufferUnfaded[a1->destOffset] = a1->base->src[srcOffset]; - gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset]; - i++; - a1->destOffset++; - srcOffset++; - } - } - else - { - while (i < a1->base->size) - { - gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset]; - i++; - a1->destOffset++; - srcOffset++; - } - } - - a1->destOffset = a1->baseDestOffset; - a1->ps_field_8 = a1->base->pst_field_A; - a1->srcIndex++; - - srcIndex = a1->srcIndex; - srcCount = a1->base->srcCount; - - if (srcIndex >= srcCount) - { - if (a1->ps_field_9) - a1->ps_field_9--; - a1->srcIndex = 0; - } - - *a2 |= 1 << (a1->baseDestOffset >> 4); -} - -static void unused_sub_8073F60(struct PaletteStruct *a1, u32 *a2) -{ - if (gPaletteFade.active && ((1 << (a1->baseDestOffset >> 4)) & gPaletteFade_selectedPalettes)) - { - if (!a1->base->pst_field_8_0) - { - if (gPaletteFade.delayCounter != gPaletteFade_delay) - { - BlendPalette( - a1->baseDestOffset, - a1->base->size, - gPaletteFade.y, - gPaletteFade.blendColor); - } - } - else - { - if (!gPaletteFade.delayCounter) - { - if (a1->ps_field_8 != a1->base->pst_field_A) - { - u32 srcOffset = a1->srcIndex * a1->base->size; - u8 i; - - for (i = 0; i < a1->base->size; i++) - gPlttBufferFaded[a1->baseDestOffset + i] = a1->base->src[srcOffset + i]; - } - } - } - } -} - -static void unused_sub_8074020(struct PaletteStruct *a1) -{ - if (!a1->ps_field_9) - { - s32 val = a1->base->pst_field_B_5; - - if (!val) - { - a1->srcIndex = 0; - a1->ps_field_8 = a1->base->pst_field_A; - a1->ps_field_9 = a1->base->pst_field_C; - a1->destOffset = a1->baseDestOffset; - } - else - { - if (val < 0) - return; - if (val > 2) - return; - ResetPaletteStructByUid(a1->base->uid); - } - } - else - { - a1->ps_field_9--; - } -} - -void ResetPaletteStructByUid(u16 a1) -{ - u8 paletteNum = GetPaletteNumByUid(a1); - if (paletteNum != 16) - ResetPaletteStruct(paletteNum); -} - -void ResetPaletteStruct(u8 paletteNum) -{ - sPaletteStructs[paletteNum].base = &sDummyPaletteStructTemplate; - sPaletteStructs[paletteNum].ps_field_4_0 = 0; - sPaletteStructs[paletteNum].baseDestOffset = 0; - sPaletteStructs[paletteNum].destOffset = 0; - sPaletteStructs[paletteNum].srcIndex = 0; - sPaletteStructs[paletteNum].ps_field_4_1 = 0; - sPaletteStructs[paletteNum].ps_field_8 = 0; - sPaletteStructs[paletteNum].ps_field_9 = 0; -} - -void ResetPaletteFadeControl() -{ - gPaletteFade.multipurpose1 = 0; - gPaletteFade.multipurpose2 = 0; - gPaletteFade.delayCounter = 0; - gPaletteFade.y = 0; - gPaletteFade.targetY = 0; - gPaletteFade.blendColor = 0; - gPaletteFade.active = 0; - gPaletteFade.multipurpose2 = 0; // assign same value twice - gPaletteFade.yDec = 0; - gPaletteFade.bufferTransferDisabled = 0; - gPaletteFade.shouldResetBlendRegisters = 0; - gPaletteFade.hardwareFadeFinishing = 0; - gPaletteFade.softwareFadeFinishing = 0; - gPaletteFade.softwareFadeFinishingCounter = 0; - gPaletteFade.objPaletteToggle = 0; - gPaletteFade.deltaY = 2; -} - -void unref_sub_8074168(u16 uid) -{ - u8 paletteNum = GetPaletteNumByUid(uid); - if (paletteNum != 16) - sPaletteStructs[paletteNum].ps_field_4_1 = 1; -} - -void unref_sub_8074194(u16 uid) -{ - u8 paletteNum = GetPaletteNumByUid(uid); - if (paletteNum != 16) - sPaletteStructs[paletteNum].ps_field_4_1 = 0; -} - -static u8 GetPaletteNumByUid(u16 uid) -{ - u8 i; - - for (i = 0; i < 16; i++) - if (sPaletteStructs[i].base->uid == uid) - return i; - - return 16; -} - -static u8 UpdateNormalPaletteFade() -{ - u16 paletteOffset; - u16 selectedPalettes; - - if (!gPaletteFade.active) - return 0; - - if (IsSoftwarePaletteFadeFinishing()) - { - return gPaletteFade.active; - } - else - { - if (!gPaletteFade.objPaletteToggle) - { - if (gPaletteFade.delayCounter < gPaletteFade_delay) - { - gPaletteFade.delayCounter++; - return 2; - } - gPaletteFade.delayCounter = 0; - } - - paletteOffset = 0; - - if (!gPaletteFade.objPaletteToggle) - { - selectedPalettes = gPaletteFade_selectedPalettes; - } - else - { - selectedPalettes = gPaletteFade_selectedPalettes >> 16; - paletteOffset = 256; - } - - while (selectedPalettes) - { - if (selectedPalettes & 1) - BlendPalette( - paletteOffset, - 16, - gPaletteFade.y, - gPaletteFade.blendColor); - selectedPalettes >>= 1; - paletteOffset += 16; - } - - gPaletteFade.objPaletteToggle ^= 1; - - if (!gPaletteFade.objPaletteToggle) - { - if (gPaletteFade.y == gPaletteFade.targetY) - { - gPaletteFade_selectedPalettes = 0; - gPaletteFade.softwareFadeFinishing = 1; - } - else - { - s8 val; - - 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; - } - } - } - - return gPaletteFade.active; - } -} - -void InvertPlttBuffer(u32 selectedPalettes) -{ - u16 paletteOffset = 0; - - while (selectedPalettes) - { - if (selectedPalettes & 1) - { - u8 i; - for (i = 0; i < 16; i++) - gPlttBufferFaded[paletteOffset + i] = ~gPlttBufferFaded[paletteOffset + i]; - } - selectedPalettes >>= 1; - paletteOffset += 16; - } -} - -void TintPlttBuffer(u32 selectedPalettes, s8 r, s8 g, s8 b) -{ - u16 paletteOffset = 0; - - while (selectedPalettes) - { - if (selectedPalettes & 1) - { - u8 i; - for (i = 0; i < 16; i++) - { - struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[paletteOffset + i]; - data->r += r; - data->g += g; - data->b += b; - } - } - selectedPalettes >>= 1; - paletteOffset += 16; - } -} - -void UnfadePlttBuffer(u32 selectedPalettes) -{ - u16 paletteOffset = 0; - - while (selectedPalettes) - { - if (selectedPalettes & 1) - { - u8 i; - for (i = 0; i < 16; i++) - gPlttBufferFaded[paletteOffset + i] = gPlttBufferUnfaded[paletteOffset + i]; - } - selectedPalettes >>= 1; - paletteOffset += 16; - } -} - -void BeginFastPaletteFade(u8 submode) -{ - gPaletteFade.deltaY = 2; - BeginFastPaletteFadeInternal(submode); -} - -static void BeginFastPaletteFadeInternal(u8 submode) -{ - gPaletteFade.y = 31; - gPaletteFade_submode = submode & 0x3F; - gPaletteFade.active = 1; - gPaletteFade.mode = FAST_FADE; - - if (submode == FAST_FADE_IN_FROM_BLACK) - CpuFill16(RGB_BLACK, gPlttBufferFaded, PLTT_SIZE); - - if (submode == FAST_FADE_IN_FROM_WHITE) - CpuFill16(RGB_WHITE, gPlttBufferFaded, PLTT_SIZE); - - UpdatePaletteFade(); -} - -static u8 UpdateFastPaletteFade(void) -{ - u16 i; - u16 paletteOffsetStart; - u16 paletteOffsetEnd; - s8 r0; - s8 g0; - s8 b0; - s8 r; - s8 g; - s8 b; - - if (!gPaletteFade.active) - return 0; - - if (IsSoftwarePaletteFadeFinishing()) - return gPaletteFade.active; - - if (gPaletteFade.objPaletteToggle) - { - paletteOffsetStart = 256; - paletteOffsetEnd = 512; - } - else - { - paletteOffsetStart = 0; - paletteOffsetEnd = 256; - } - - switch (gPaletteFade_submode) - { - case FAST_FADE_IN_FROM_WHITE: - for (i = paletteOffsetStart; i < paletteOffsetEnd; i++) - { - struct PlttData *unfaded; - struct PlttData *faded; - - unfaded = (struct PlttData *)&gPlttBufferUnfaded[i]; - r0 = unfaded->r; - g0 = unfaded->g; - b0 = unfaded->b; - - faded = (struct PlttData *)&gPlttBufferFaded[i]; - r = faded->r - 2; - g = faded->g - 2; - b = faded->b - 2; - - if (r < r0) - r = r0; - if (g < g0) - g = g0; - if (b < b0) - b = b0; - - gPlttBufferFaded[i] = RGB(r, g, b); - } - break; - case FAST_FADE_OUT_TO_WHTIE: - for (i = paletteOffsetStart; i < paletteOffsetEnd; i++) - { - struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[i]; - r = data->r + 2; - g = data->g + 2; - b = data->b + 2; - - if (r > 31) - r = 31; - if (g > 31) - g = 31; - if (b > 31) - b = 31; - - gPlttBufferFaded[i] = RGB(r, g, b); - } - break; - case FAST_FADE_IN_FROM_BLACK: - for (i = paletteOffsetStart; i < paletteOffsetEnd; i++) - { - struct PlttData *unfaded; - struct PlttData *faded; - - unfaded = (struct PlttData *)&gPlttBufferUnfaded[i]; - r0 = unfaded->r; - g0 = unfaded->g; - b0 = unfaded->b; - - faded = (struct PlttData *)&gPlttBufferFaded[i]; - r = faded->r + 2; - g = faded->g + 2; - b = faded->b + 2; - - if (r > r0) - r = r0; - if (g > g0) - g = g0; - if (b > b0) - b = b0; - - gPlttBufferFaded[i] = RGB(r, g, b); - } - break; - case FAST_FADE_OUT_TO_BLACK: - for (i = paletteOffsetStart; i < paletteOffsetEnd; i++) - { - struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[i]; - r = data->r - 2; - g = data->g - 2; - b = data->b - 2; - - if (r < 0) - r = 0; - if (g < 0) - g = 0; - if (b < 0) - b = 0; - - gPlttBufferFaded[i] = RGB(r, g, b); - } - } - - gPaletteFade.objPaletteToggle ^= 1; - - if (gPaletteFade.objPaletteToggle) - return gPaletteFade.active; - - if (gPaletteFade.y - gPaletteFade.deltaY < 0) - gPaletteFade.y = 0; - else - gPaletteFade.y -= gPaletteFade.deltaY; - - if (gPaletteFade.y == 0) - { - switch (gPaletteFade_submode) - { - case FAST_FADE_IN_FROM_WHITE: - case FAST_FADE_IN_FROM_BLACK: - CpuCopy32(gPlttBufferUnfaded, gPlttBufferFaded, PLTT_SIZE); - break; - case FAST_FADE_OUT_TO_WHTIE: - CpuFill32(0xFFFFFFFF, gPlttBufferFaded, PLTT_SIZE); - break; - case FAST_FADE_OUT_TO_BLACK: - CpuFill32(0x00000000, gPlttBufferFaded, PLTT_SIZE); - break; - } - - gPaletteFade.mode = NORMAL_FADE; - gPaletteFade.softwareFadeFinishing = 1; - } - - return gPaletteFade.active; -} - -void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 shouldResetBlendRegisters) -{ - gPaletteFade_blendCnt = blendCnt; - gPaletteFade.delayCounter = delay; - gPaletteFade_delay = delay; - gPaletteFade.y = y; - gPaletteFade.targetY = targetY; - gPaletteFade.active = 1; - gPaletteFade.mode = HARDWARE_FADE; - gPaletteFade.shouldResetBlendRegisters = shouldResetBlendRegisters & 1; - gPaletteFade.hardwareFadeFinishing = 0; - - if (y < targetY) - gPaletteFade.yDec = 0; - else - gPaletteFade.yDec = 1; -} - -static u8 UpdateHardwarePaletteFade(void) -{ - if (!gPaletteFade.active) - return 0; - - if (gPaletteFade.delayCounter < gPaletteFade_delay) - { - gPaletteFade.delayCounter++; - return 2; - } - - gPaletteFade.delayCounter = 0; - - if (!gPaletteFade.yDec) - { - gPaletteFade.y++; - if (gPaletteFade.y > gPaletteFade.targetY) - { - gPaletteFade.hardwareFadeFinishing++; - gPaletteFade.y--; - } - } - else - { - s32 y = gPaletteFade.y--; - if (y - 1 < gPaletteFade.targetY) - { - gPaletteFade.hardwareFadeFinishing++; - gPaletteFade.y++; - } - } - - if (gPaletteFade.hardwareFadeFinishing) - { - if (gPaletteFade.shouldResetBlendRegisters) - { - gPaletteFade_blendCnt = 0; - gPaletteFade.y = 0; - } - gPaletteFade.shouldResetBlendRegisters = 0; - } - - return gPaletteFade.active; -} - -static void UpdateBlendRegisters(void) -{ - REG_BLDCNT = gPaletteFade_blendCnt; - REG_BLDY = gPaletteFade.y; - if (gPaletteFade.hardwareFadeFinishing) - { - gPaletteFade.hardwareFadeFinishing = 0; - gPaletteFade.mode = 0; - gPaletteFade_blendCnt = 0; - gPaletteFade.y = 0; - gPaletteFade.active = 0; - } -} - -static bool8 IsSoftwarePaletteFadeFinishing(void) -{ - if (gPaletteFade.softwareFadeFinishing) - { - if (gPaletteFade.softwareFadeFinishingCounter == 4) - { - gPaletteFade.active = 0; - gPaletteFade.softwareFadeFinishing = 0; - gPaletteFade.softwareFadeFinishingCounter = 0; - } - else - { - gPaletteFade.softwareFadeFinishingCounter++; - } - - return TRUE; - } - else - { - return FALSE; - } -} - -void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color) -{ - u16 paletteOffset; - - for (paletteOffset = 0; selectedPalettes; paletteOffset += 16) - { - if (selectedPalettes & 1) - BlendPalette(paletteOffset, 16, coeff, color); - selectedPalettes >>= 1; - } -} - -void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color) -{ - void *src = gPlttBufferUnfaded; - void *dest = gPlttBufferFaded; - DmaCopy32(3, src, dest, PLTT_SIZE); - BlendPalettes(selectedPalettes, coeff, color); -} |