diff options
author | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-06-27 12:23:19 +0200 |
---|---|---|
committer | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-06-27 12:23:19 +0200 |
commit | ba803600ac7ceef20799ee7b0c4da0409cbbbea1 (patch) | |
tree | f842473c94b523334ed49a45d493c3f4fa21266c /arm9/src | |
parent | 9000931f5c47a0b6e8ee6f2ac0069db61868bd32 (diff) |
partially document unk_020030E8.c
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/unk_020030E8.c | 409 |
1 files changed, 203 insertions, 206 deletions
diff --git a/arm9/src/unk_020030E8.c b/arm9/src/unk_020030E8.c index 74abf49b..d9e410dc 100644 --- a/arm9/src/unk_020030E8.c +++ b/arm9/src/unk_020030E8.c @@ -10,34 +10,34 @@ extern void *FUN_02022308(); extern void *FUN_02022310(); extern int abs(int); -THUMB_FUNC void FUN_02003108(struct PaletteData *param0, u32 param1, u16 param2, u32 param3) +THUMB_FUNC void FUN_02003108(struct PaletteData *paletteData, u32 index, u16 offset, u32 size) { - GF_ASSERT(param2 * 2 + param3 <= param0->pltt[param1].bufSize); + GF_ASSERT(offset * 2 + size <= paletteData->pltt[index].bufSize); - u16 *r1; - switch (param1) + u16 *ptr; + switch (index) { case 0: - r1 = FUN_020222E8(); + ptr = FUN_020222E8(); break; case 1: - r1 = FUN_020222F8(); + ptr = FUN_020222F8(); break; case 2: - r1 = FUN_02022308(); + ptr = FUN_02022308(); break; case 3: - r1 = FUN_02022310(); + ptr = FUN_02022310(); break; default: GF_ASSERT(FALSE); return; } - PaletteData_LoadPalette(param0, r1 + param2, param1, param2, (u16)param3); + PaletteData_LoadPalette(paletteData, ptr + offset, index, offset, (u16)size); } -THUMB_FUNC void FUN_0200317C( +THUMB_FUNC void CopyPaletteFromNarc( NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest) { NNSG2dPaletteData *pltData; @@ -55,63 +55,63 @@ THUMB_FUNC void FUN_0200317C( FreeToHeap(ptr); } -THUMB_FUNC void FUN_020031B8( - struct PaletteData *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5) +THUMB_FUNC void PaletteData_CopyPalette( + struct PaletteData *paletteData, u32 srcIdx, u16 srcOffset, u32 destIdx, u16 destOffset, u16 size) { MI_CpuCopy16( - param0->pltt[param1].unfadedBuf + param2, param0->pltt[param3].unfadedBuf + param4, param5); + paletteData->pltt[srcIdx].unfadedBuf + srcOffset, paletteData->pltt[destIdx].unfadedBuf + destOffset, size); MI_CpuCopy16( - param0->pltt[param1].unfadedBuf + param2, param0->pltt[param3].fadedBuf + param4, param5); + paletteData->pltt[srcIdx].unfadedBuf + srcOffset, paletteData->pltt[destIdx].fadedBuf + destOffset, size); } -THUMB_FUNC u16 *FUN_020031FC(struct PaletteData *param0, u32 param1) +THUMB_FUNC u16 *PaletteData_GetUnfadedBuf(struct PaletteData *paletteData, u32 index) { - return param0->pltt[param1].unfadedBuf; + return paletteData->pltt[index].unfadedBuf; } -THUMB_FUNC u16 *FUN_02003204(struct PaletteData *param0, u32 param1) +THUMB_FUNC u16 *PaletteData_GetFadedBuf(struct PaletteData *paletteData, u32 index) { - return param0->pltt[param1].fadedBuf; + return paletteData->pltt[index].fadedBuf; } -THUMB_FUNC u32 FUN_02003210(struct PaletteData *param0, +THUMB_FUNC u32 FUN_02003210(struct PaletteData *paletteData, u16 param1, u16 param2, - s16 param3, - u8 param6, - u8 param7, - u16 param8) + s16 delay, + u8 startY, + u8 targetY, + u16 color) { u16 stc = param2; u32 r6 = 0; - for (u8 r4 = 0; r4 < 14; r4++) + for (u8 i = 0; i < 14; i++) { - if (FUN_02003314(param1, r4) != 1) + if (IsPaletteSelected(param1, i) != 1) { continue; } - if (FUN_02003314(param0->unk118_2, r4) != 0) + if (IsPaletteSelected(paletteData->activeFadePalettes, i) != 0) { continue; } - FUN_02003368(r4, ¶m0->pltt[r4], ¶m2); + FUN_02003368(i, &paletteData->pltt[i], ¶m2); - FUN_020033A4(¶m0->pltt[r4].unk0c, param2, param3, param6, param7, param8); + FUN_020033A4(&paletteData->pltt[i].fadeCtrl, param2, delay, startY, targetY, color); - FUN_02003328(param0, r4); + FUN_02003328(paletteData, i); - if (r4 >= 4) + if (i >= 4) { - FUN_0200359C(param0, r4, 0x100); + FUN_0200359C(paletteData, i, 0x100); } else { - FUN_0200359C(param0, r4, 0x10); + FUN_0200359C(paletteData, i, 0x10); } param2 = stc; @@ -120,17 +120,17 @@ THUMB_FUNC u32 FUN_02003210(struct PaletteData *param0, if (r6 == 1) { - param0->unk118_2 |= param1; - if (param0->unk11a_e == 0) + paletteData->activeFadePalettes |= param1; + if (paletteData->unk11a_e == 0) { - param0->unk11a_e = 1; + paletteData->unk11a_e = 1; - param0->unk118_0 = 1; - param0->unk11c = 0; + paletteData->unk118_0 = 1; + paletteData->unk11c = 0; // wtf is that? FUN_0200CA44((void (*)(u32, struct TextPrinter *))FUN_02003464, - (struct TextPrinter *)param0, + (struct TextPrinter *)paletteData, (u32)(-2)); } } @@ -138,10 +138,10 @@ THUMB_FUNC u32 FUN_02003210(struct PaletteData *param0, return r6; } -THUMB_FUNC u8 FUN_02003314(u16 param0, u16 param1) +THUMB_FUNC u8 IsPaletteSelected(u16 selectedPalettes, u16 index) { u32 r3 = 1; - if ((param0 & (1 << param1)) == 0) + if ((selectedPalettes & (1 << index)) == 0) { r3 = 0; } @@ -151,7 +151,7 @@ THUMB_FUNC u8 FUN_02003314(u16 param0, u16 param1) THUMB_FUNC void FUN_02003328(struct PaletteData *param0, u16 param1) { - if (FUN_02003314(param0->unk11a_0, param1) != 1) + if (IsPaletteSelected(param0->unk11a_0, param1) != 1) { param0->unk11a_0 |= 1 << param1; } @@ -178,37 +178,37 @@ THUMB_FUNC void FUN_02003368(s32 param0, struct Palette *param1, u16 *param2) *param2 &= r4; } -THUMB_FUNC void FUN_020033A4(struct PaletteControl *param0, - u16 param1, - s16 param2, - u8 param3, - u8 param4, - u16 param5) +THUMB_FUNC void FUN_020033A4(struct PaletteFadeControl *paletteFade, + u16 selectedPalettes, + s16 delay, + u8 startY, + u8 targetY, + u16 color) { - if (param2 < 0) + if (delay < 0) { - param0->unk06_0 = abs(param2) + 2; - param0->unk02_0 = 0; + paletteFade->deltaY = abs(delay) + 2; + paletteFade->delay = 0; } else { - param0->unk06_0 = 2; - param0->unk02_0 = param2; + paletteFade->deltaY = 2; + paletteFade->delay = delay; } - param0->unk00 = param1; - param0->unk02_6 = param3; - param0->unk02_b = param4; - param0->unk04_0 = param5; + paletteFade->selectedPalettes = selectedPalettes; + paletteFade->y = startY; + paletteFade->targetY = targetY; + paletteFade->blendColor = color; - param0->unk06_4 = param0->unk02_0; + paletteFade->delayCounter = paletteFade->delay; - if (param3 < param4) + if (startY < targetY) { - param0->unk04_f = 0; + paletteFade->yDec = 0; return; } - param0->unk04_f = 1; + paletteFade->yDec = 1; } THUMB_FUNC void FUN_02003464(u32 param0, struct PaletteData *param1) @@ -217,7 +217,7 @@ THUMB_FUNC void FUN_02003464(u32 param0, struct PaletteData *param1) { param1->unk11c = 0; param1->unk11a_0 = 0; - param1->unk118_2 = 0; + param1->activeFadePalettes = 0; param1->unk11a_e = 0; FUN_0200CAB4((s32)param0); return; @@ -225,11 +225,11 @@ THUMB_FUNC void FUN_02003464(u32 param0, struct PaletteData *param1) if (param1->unk118_0 == 1) { - param1->unk11a_0 = param1->unk118_2; + param1->unk11a_0 = param1->activeFadePalettes; FUN_02003500(param1); FUN_02003520(param1); - if (param1->unk118_2 == 0) + if (param1->activeFadePalettes == 0) { param1->unk11a_e = 0; FUN_0200CAB4((s32)param0); @@ -253,232 +253,233 @@ THUMB_FUNC void FUN_02003520(struct PaletteData *param0) } } -THUMB_FUNC void FUN_02003540(struct PaletteData *param0, u8 param1, u32 param2) +THUMB_FUNC void FUN_02003540(struct PaletteData *paletteData, u8 index, u32 param2) { - if (FUN_02003314(param0->unk118_2, param1) != 0) + if (IsPaletteSelected(paletteData->activeFadePalettes, index) != 0) { - if (param0->pltt[param1].unk0c.unk06_4 < param0->pltt[param1].unk0c.unk02_0) + if (paletteData->pltt[index].fadeCtrl.delayCounter < paletteData->pltt[index].fadeCtrl.delay) { - param0->pltt[param1].unk0c.unk06_4++; + paletteData->pltt[index].fadeCtrl.delayCounter++; return; } - param0->pltt[param1].unk0c.unk06_4 = 0; - FUN_0200359C(param0, param1, param2); + paletteData->pltt[index].fadeCtrl.delayCounter = 0; + FUN_0200359C(paletteData, index, param2); } } -THUMB_FUNC void FUN_0200359C(struct PaletteData *param0, u32 param1, u32 param2) +THUMB_FUNC void FUN_0200359C(struct PaletteData *paletteData, u32 index, u32 param2) { - for (u32 r6 = 0; r6 < 0x10; r6++) + for (u32 i = 0; i < 0x10; i++) { - if (FUN_02003314(param0->pltt[param1].unk0c.unk00, (u16)r6) != 0) + if (IsPaletteSelected(paletteData->pltt[index].fadeCtrl.selectedPalettes, (u16)i) != 0) { - FUN_020035F8(param0->pltt[param1].unfadedBuf + param2 * r6, - param0->pltt[param1].fadedBuf + param2 * r6, - ¶m0->pltt[param1].unk0c, + FUN_020035F8(paletteData->pltt[index].unfadedBuf + param2 * i, + paletteData->pltt[index].fadedBuf + param2 * i, + &paletteData->pltt[index].fadeCtrl, param2); } } - FUN_02003684(param0, (u8)param1, ¶m0->pltt[param1].unk0c); + FUN_02003684(paletteData, (u8)index, &paletteData->pltt[index].fadeCtrl); } THUMB_FUNC void FUN_020035F8( - u16 *param0, u16 *param1, struct PaletteControl *param2, u32 param3) + u16 *src, u16 *dest, struct PaletteFadeControl *fadeCtrl, u32 numEntries) { - for (u32 i = 0; i < param3; i++) + for (u32 i = 0; i < numEntries; i++) { - u8 lo = (u8)((param0[i] & 0x1f) + - ((((param2->unk04_0 & 0x1f) - (param0[i] & 0x1f)) * param2->unk02_6) >> 4)); + u8 lo = (u8)((src[i] & 0x1f) + + ((((fadeCtrl->blendColor & 0x1f) - (src[i] & 0x1f)) * fadeCtrl->y) >> 4)); - u8 hi = (u8)(((param0[i] >> 10) & 0x1f) + - (((((param2->unk04_0 >> 10) & 0x1f) - ((param0[i] >> 10) & 0x1f)) * - param2->unk02_6) >> + u8 hi = (u8)(((src[i] >> 10) & 0x1f) + + (((((fadeCtrl->blendColor >> 10) & 0x1f) - ((src[i] >> 10) & 0x1f)) * + fadeCtrl->y) >> 4)); - u8 mid = (u8)(((param0[i] >> 5) & 0x1f) + - (((((param2->unk04_0 >> 5) & 0x1f) - ((param0[i] >> 5) & 0x1f)) * - param2->unk02_6) >> + u8 mid = (u8)(((src[i] >> 5) & 0x1f) + + (((((fadeCtrl->blendColor >> 5) & 0x1f) - ((src[i] >> 5) & 0x1f)) * + fadeCtrl->y) >> 4)); - param1[i] = (u16)((hi << 10) | (mid << 5) | lo); + dest[i] = (u16)((hi << 10) | (mid << 5) | lo); } } THUMB_FUNC void FUN_02003684( - struct PaletteData *param0, u8 param1, struct PaletteControl *param2) + struct PaletteData *paletteData, u8 index, struct PaletteFadeControl *fadeCtrl) { - s16 r4; - if (param2->unk02_6 == param2->unk02_b) + if (fadeCtrl->y == fadeCtrl->targetY) { - if ((param0->unk118_2 & (1 << param1)) == 0) + if ((paletteData->activeFadePalettes & (1 << index)) == 0) { return; } - param0->unk118_2 ^= (1 << param1); + paletteData->activeFadePalettes ^= (1 << index); return; } - if (param2->unk04_f == 0) + + s16 val; + if (fadeCtrl->yDec == 0) { - r4 = (s16)param2->unk02_6; - r4 += param2->unk06_0; - if (r4 > param2->unk02_b) + val = (s16)fadeCtrl->y; + val += fadeCtrl->deltaY; + if (val > fadeCtrl->targetY) { - r4 = (s16)param2->unk02_b; + val = (s16)fadeCtrl->targetY; } - param2->unk02_6 = r4; + fadeCtrl->y = val; return; } - r4 = (s16)param2->unk02_6; - r4 -= param2->unk06_0; - if (r4 < param2->unk02_b) + val = (s16)fadeCtrl->y; + val -= fadeCtrl->deltaY; + if (val < fadeCtrl->targetY) { - r4 = (s16)param2->unk02_b; + val = (s16)fadeCtrl->targetY; } - param2->unk02_6 = r4; + fadeCtrl->y = val; } -THUMB_FUNC void FUN_0200372C(struct PaletteData *param0) +THUMB_FUNC void FUN_0200372C(struct PaletteData *paletteData) { - if (param0->unk11a_f == 0 && param0->unk118_0 != 1) + if (paletteData->unk11a_f == 0 && paletteData->unk118_0 != 1) { return; } - for (s32 r5 = 0; r5 < 14; r5++) + for (s32 i = 0; i < 14; i++) { - if (param0->unk11a_f != 0 || - (param0->pltt[r5].fadedBuf != 0 && FUN_02003314(param0->unk11a_0, (u16)r5) != 0)) + if (paletteData->unk11a_f != 0 || + (paletteData->pltt[i].fadedBuf != 0 && IsPaletteSelected(paletteData->unk11a_0, (u16)i) != 0)) { - DC_FlushRange(param0->pltt[r5].fadedBuf, param0->pltt[r5].bufSize); + DC_FlushRange(paletteData->pltt[i].fadedBuf, paletteData->pltt[i].bufSize); - switch (r5) + switch (i) { case 0: - GX_LoadBGPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GX_LoadBGPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); break; case 1: - GXS_LoadBGPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GXS_LoadBGPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); break; case 2: - GX_LoadOBJPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GX_LoadOBJPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); break; case 3: - GXS_LoadOBJPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GXS_LoadOBJPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); break; case 4: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); GX_EndLoadBGExtPltt(); break; case 5: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x2000, param0->pltt[r5].bufSize); + GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x2000, paletteData->pltt[i].bufSize); GX_EndLoadBGExtPltt(); break; case 6: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x4000, param0->pltt[r5].bufSize); + GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x4000, paletteData->pltt[i].bufSize); GX_EndLoadBGExtPltt(); break; case 7: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x6000, param0->pltt[r5].bufSize); + GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x6000, paletteData->pltt[i].bufSize); GX_EndLoadBGExtPltt(); break; case 8: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); GXS_EndLoadBGExtPltt(); break; case 9: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x2000, param0->pltt[r5].bufSize); + GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x2000, paletteData->pltt[i].bufSize); GXS_EndLoadBGExtPltt(); break; case 10: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x4000, param0->pltt[r5].bufSize); + GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x4000, paletteData->pltt[i].bufSize); GXS_EndLoadBGExtPltt(); break; case 11: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x6000, param0->pltt[r5].bufSize); + GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x6000, paletteData->pltt[i].bufSize); GXS_EndLoadBGExtPltt(); break; case 12: GX_BeginLoadOBJExtPltt(); - GX_LoadOBJExtPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GX_LoadOBJExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); GX_EndLoadOBJExtPltt(); break; case 13: GXS_BeginLoadOBJExtPltt(); - GXS_LoadOBJExtPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GXS_LoadOBJExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); GXS_EndLoadOBJExtPltt(); break; } } } - param0->unk11a_0 = param0->unk118_2; - if (param0->unk11a_0 == 0) + paletteData->unk11a_0 = paletteData->activeFadePalettes; + if (paletteData->unk11a_0 == 0) { - param0->unk118_0 = 0; + paletteData->unk118_0 = 0; } } -THUMB_FUNC u16 FUN_020038E4(struct PaletteData *param0) +THUMB_FUNC u16 FUN_020038E4(struct PaletteData *paletteData) { - return param0->unk118_2; + return paletteData->activeFadePalettes; } -THUMB_FUNC void FUN_020038F0(struct PaletteData *param0, u32 param1) +THUMB_FUNC void FUN_020038F0(struct PaletteData *paletteData, u32 param1) { - param0->unk11a_f = param1; + paletteData->unk11a_f = param1; } -THUMB_FUNC void FUN_02003914( - struct PaletteData *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5) +THUMB_FUNC void PaletteData_FillPalette( + struct PaletteData *paletteData, u32 index, u32 selection, u16 value, u16 startOffset, u16 endOffset) { - GF_ASSERT(param5 * 2 <= param0->pltt[param1].bufSize); - if (param2 - 1 <= 1) + GF_ASSERT(endOffset * 2 <= paletteData->pltt[index].bufSize); + if (selection == 1 || selection == 2) { - MI_CpuFill16(¶m0->pltt[param1].unfadedBuf[param4], param3, (u32)((param5 - param4) * 2)); + MI_CpuFill16(&paletteData->pltt[index].unfadedBuf[startOffset], value, (u32)((endOffset - startOffset) * 2)); } - if (param2 == 0 || param2 == 2) + if (selection == 0 || selection == 2) { - MI_CpuFill16(¶m0->pltt[param1].fadedBuf[param4], param3, (u32)((param5 - param4) * 2)); + MI_CpuFill16(&paletteData->pltt[index].fadedBuf[startOffset], value, (u32)((endOffset - startOffset) * 2)); } } #ifdef NONMATCHING -THUMB_FUNC void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) +THUMB_FUNC void BlendPalette(u16 *src, u16 *dest, u16 numEntries, u8 coeff, u16 blendColor) { - s32 r12 = ((u32)(param4 << 0x1b)) >> 0x1b; - s32 lr = ((u32)(param4 << 0x16)) >> 0x1b; - s32 st8 = ((u32)(param4 << 0x11)) >> 0x1b; + s32 r12 = ((u32)(blendColor << 0x1b)) >> 0x1b; + s32 lr = ((u32)(blendColor << 0x16)) >> 0x1b; + s32 st8 = ((u32)(blendColor << 0x11)) >> 0x1b; s32 lo, mid, hi; - for (u16 i = 0; i < param2; i++) + for (u16 i = 0; i < numEntries; i++) { - lo = (((u32)(param0[i] << 0x1b)) >> 0x1b); - mid = (((u32)(param0[i] << 0x16)) >> 0x1b); - hi = (((u32)(param0[i] << 0x11)) >> 0x1b); + lo = (((u32)(src[i] << 0x1b)) >> 0x1b); + mid = (((u32)(src[i] << 0x16)) >> 0x1b); + hi = (((u32)(src[i] << 0x11)) >> 0x1b); - param1[i] = (lo + ((r12 - lo) * param3) >> 4) | (mid + ((lr - mid) * param3) >> 4) << 5 | - (hi + ((st8 - hi) * param3) >> 4) << 10; + dest[i] = (lo + ((r12 - lo) * coeff) >> 4) | (mid + ((lr - mid) * coeff) >> 4) << 5 | + (hi + ((st8 - hi) * coeff) >> 4) << 10; } } #else -asm void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) +asm void BlendPalette(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) { // clang-format off push {r4-r7, lr} @@ -544,97 +545,93 @@ _020039E2: } #endif -THUMB_FUNC void FUN_020039E8( - struct PaletteData *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5) +THUMB_FUNC void BlendPaletteUnfaded( + struct PaletteData *paletteData, u32 index, u16 offset, u16 numEntries, u8 coeff, u16 blendColor) { BOOL r0 = FALSE; - if (param0->pltt[param1].unfadedBuf != 0 && param0->pltt[param1].fadedBuf != 0) + if (paletteData->pltt[index].unfadedBuf != 0 && paletteData->pltt[index].fadedBuf != 0) { r0 = TRUE; } GF_ASSERT(r0); - FUN_02003974(param0->pltt[param1].unfadedBuf + param2, - param0->pltt[param1].fadedBuf + param2, - param3, - param4, - param5); + BlendPalette(paletteData->pltt[index].unfadedBuf + offset, + paletteData->pltt[index].fadedBuf + offset, + numEntries, + coeff, + blendColor); } -THUMB_FUNC void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) +THUMB_FUNC void BlendPalettes(u16 *src, u16 *dest, u16 selectedPalettes, u8 coeff, u16 blendColor) { - while (param2 != 0) + while (selectedPalettes != 0) { - if ((param2 & 1) != 0) + if ((selectedPalettes & 1) != 0) { - FUN_02003974(param0, param1, 0x10, param3, param4); + BlendPalette(src, dest, 0x10, coeff, blendColor); } - param2 >>= 1; - param1 += 0x10; - param0 += 0x10; + selectedPalettes >>= 1; + dest += 0x10; + src += 0x10; } } -THUMB_FUNC void FUN_02003A64( - struct PaletteData *param0, u32 param1, u16 param2, u8 param3, u16 param4) +THUMB_FUNC void BlendPalettesUnfaded( + struct PaletteData *paletteData, u32 index, u16 selectedPalettes, u8 coeff, u16 blendColor) { u32 r4 = 0; BOOL r0 = FALSE; - if (param0->pltt[param1].unfadedBuf != 0 && param0->pltt[param1].fadedBuf != 0) + if (paletteData->pltt[index].unfadedBuf != 0 && paletteData->pltt[index].fadedBuf != 0) { r0 = TRUE; } GF_ASSERT(r0); - while (param2 != 0) + while (selectedPalettes != 0) { - if ((param2 & 1) != 0) + if ((selectedPalettes & 1) != 0) { - FUN_020039E8(param0, param1, (u16)r4, 0x10, param3, param4); + BlendPaletteUnfaded(paletteData, index, (u16)r4, 0x10, coeff, blendColor); } - param2 >>= 1; + selectedPalettes >>= 1; r4 += 0x10; } } #ifdef NONMATCHING -THUMB_FUNC void FUN_02003AC4(u16 *param0, u32 param1, u32 param2, u32 param3, u32 param4) +THUMB_FUNC void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 gTone, u32 bTone) { - s32 r4, lo, mid, hi, add; - for (r4 = 0; r4 < param1; r4++) + s32 r, g, b, i; + u32 gray; + + for (i = 0; i < count; i++) { - lo = ((param0[r4]) & 0x1f); - mid = ((param0[r4] >> 5) & 0x1f); - hi = ((param0[r4] >> 10) & 0x1f); + r = (*palette >> 0) & 0x1F; + g = (*palette >> 5) & 0x1F; + b = (*palette >> 10) & 0x1F; - add = (lo * 0x4c + mid * 0x97 + hi * 0x1d) >> 8; + gray = (r *76 + g * 151 + b * 29) >> 8; - lo = (u16)(add * param2) >> 8; - mid = (u16)(add * param3) >> 8; - hi = (u16)(add * param4) >> 8; + r = (u16)((rTone * gray)) >> 8; + g = (u16)((gTone * gray)) >> 8; + b = (u16)((bTone * gray)) >> 8; - if (lo > 0x1f) - { - lo = 0x1f; - } - if (mid > 0x1f) - { - mid = 0x1f; - } - if (hi > 0x1f) - { - hi = 0x1f; - } + if (r > 31) + r = 31; + if (g > 31) + g = 31; + if (b > 31) + b = 31; - param0[r4] = (hi << 10) | (mid << 5) | lo; + *palette++ = (b << 10) | (g << 5) | (r << 0); } } #else -asm void FUN_02003AC4(u16 *param0, u32 param1, u32 param2, u32 param3, u32 param4) +asm void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 gTone, u32 bTone) { // clang-format off push {r3-r7, lr} @@ -707,28 +704,28 @@ _02003B3C: } #endif -THUMB_FUNC void FUN_02003B40(struct PaletteData *param0, +THUMB_FUNC void FUN_02003B40(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, - u32 param4, - u32 param5, - u16 param6, - u32 param7, - u32 param8, - u32 param9) + u32 index, + u32 size, + u16 offset, + u32 rTone, + u32 gTone, + u32 bTone) { NNSG2dPaletteData *pltData; void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); GF_ASSERT(ptr != NULL); - if (param5 == 0) + if (size == 0) { - param5 = pltData->szByte; + size = pltData->szByte; } - FUN_02003AC4(pltData->pRawData, 0x10, param7, param8, param9); - PaletteData_LoadPalette(param0, pltData->pRawData, param4, param6, (u16)param5); + TintPalette_CustomTone(pltData->pRawData, 0x10, rTone, gTone, bTone); + PaletteData_LoadPalette(paletteData, pltData->pRawData, index, offset, (u16)size); FreeToHeap(ptr); } |