summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
authorRémi Calixte <remicalixte.rmc@gmail.com>2021-06-27 12:23:19 +0200
committerRémi Calixte <remicalixte.rmc@gmail.com>2021-06-27 12:23:19 +0200
commitba803600ac7ceef20799ee7b0c4da0409cbbbea1 (patch)
treef842473c94b523334ed49a45d493c3f4fa21266c /arm9/src
parent9000931f5c47a0b6e8ee6f2ac0069db61868bd32 (diff)
partially document unk_020030E8.c
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/unk_020030E8.c409
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, &param0->pltt[r4], &param2);
+ FUN_02003368(i, &paletteData->pltt[i], &param2);
- FUN_020033A4(&param0->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,
- &param0->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, &param0->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(&param0->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(&param0->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);
}