diff options
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/palette.c | 85 |
1 files changed, 8 insertions, 77 deletions
diff --git a/arm9/src/palette.c b/arm9/src/palette.c index 525574e7..75dd4d90 100644 --- a/arm9/src/palette.c +++ b/arm9/src/palette.c @@ -485,90 +485,21 @@ THUMB_FUNC void PaletteData_FillPalette(struct PaletteData *paletteData, } } -#ifdef NONMATCHING THUMB_FUNC void BlendPalette(u16 *src, u16 *dest, u16 numEntries, u8 coeff, u16 blendColor) { - s32 r12 = ((u32)(blendColor << 0x1b)) >> 0x1b; - s32 lr = ((u32)(blendColor << 0x16)) >> 0x1b; - s32 st8 = ((u32)(blendColor << 0x11)) >> 0x1b; - s32 lo, mid, hi; - + s32 r2 = ((struct PlttData *)&blendColor)->r; + s32 g2 = ((struct PlttData *)&blendColor)->g; + s32 b2 = ((struct PlttData *)&blendColor)->b; for (u16 i = 0; i < numEntries; i++) { - lo = (((u32)(src[i] << 0x1b)) >> 0x1b); - mid = (((u32)(src[i] << 0x16)) >> 0x1b); - hi = (((u32)(src[i] << 0x11)) >> 0x1b); + s32 r = ((struct PlttData *)&src[i])->r; + s32 g = ((struct PlttData *)&src[i])->g; + s32 b = ((struct PlttData *)&src[i])->b; - dest[i] = (lo + ((r12 - lo) * coeff) >> 4) | (mid + ((lr - mid) * coeff) >> 4) << 5 | - (hi + ((st8 - hi) * coeff) >> 4) << 10; + dest[i] = ((r + (((r2 - r) * coeff) >> 4)) << 0) | ((g + (((g2 - g) * coeff) >> 4)) << 5) | + ((b + (((b2 - b) * coeff) >> 4)) << 10); } } -#else -asm void BlendPalette(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) -{ - // clang-format off - push {r4-r7, lr} - sub sp, #0xc - str r0, [sp, #0x0] - add r0, sp, #0x10 - ldrh r0, [r0, #0x10] - str r1, [sp, #0x4] - add r7, r2, #0x0 - lsl r1, r0, #0x1b - lsr r1, r1, #0x1b - mov r12, r1 - lsl r1, r0, #0x16 - lsl r0, r0, #0x11 - lsr r1, r1, #0x1b - lsr r0, r0, #0x1b - mov r2, #0x0 - mov lr, r1 - str r0, [sp, #0x8] - cmp r7, #0x0 - bls _020039E2 -_0200399A: - ldr r0, [sp, #0x0] - lsl r6, r2, #0x1 - ldrh r4, [r0, r6] - lsl r0, r4, #0x1b - lsr r1, r0, #0x1b - lsl r0, r4, #0x16 - lsl r4, r4, #0x11 - lsr r5, r4, #0x1b - ldr r4, [sp, #0x8] - lsr r0, r0, #0x1b - sub r4, r4, r5 - mul r4, r3 - asr r4, r4, #0x4 - add r4, r5, r4 - lsl r5, r4, #0xa - mov r4, r12 - sub r4, r4, r1 - mul r4, r3 - asr r4, r4, #0x4 - add r1, r1, r4 - mov r4, lr - sub r4, r4, r0 - mul r4, r3 - asr r4, r4, #0x4 - add r0, r0, r4 - lsl r0, r0, #0x5 - orr r0, r1 - add r1, r5, #0x0 - orr r1, r0 - ldr r0, [sp, #0x4] - strh r1, [r0, r6] - add r0, r2, #0x1 - lsl r0, r0, #0x10 - lsr r2, r0, #0x10 - cmp r2, r7 - blo _0200399A -_020039E2: - add sp, #0xc - pop {r4-r7, pc} - // clang-format on -} -#endif THUMB_FUNC void BlendPaletteUnfaded(struct PaletteData *paletteData, u32 index, |