2018-12-29 11:50:00 +01:00
|
|
|
#include "global.h"
|
|
|
|
#include "contest_painting_effects.h"
|
|
|
|
#include "contest_painting.h"
|
|
|
|
#include "constants/rgb.h"
|
|
|
|
|
2019-02-02 12:44:00 +01:00
|
|
|
// IWRAM common
|
|
|
|
u8 gUnknown_03006164;
|
|
|
|
u16 (*gUnknown_03006168)[][32];
|
|
|
|
u8 gUnknown_0300616C;
|
|
|
|
u8 gUnknown_03006170;
|
|
|
|
u8 gUnknown_03006174;
|
|
|
|
u8 gUnknown_03006178;
|
|
|
|
u8 gUnknown_0300617C;
|
|
|
|
u8 gUnknown_03006180;
|
|
|
|
u16 gUnknown_03006184;
|
|
|
|
u16 gUnknown_03006188;
|
2018-12-29 11:50:00 +01:00
|
|
|
|
|
|
|
// this file's functions
|
|
|
|
void sub_8125230(void);
|
|
|
|
void sub_81252E8(void);
|
|
|
|
void sub_81254E0(void);
|
|
|
|
void sub_8125630(void);
|
|
|
|
void sub_8125448(void);
|
|
|
|
void sub_81257F8(void);
|
|
|
|
void sub_81258A0(void);
|
|
|
|
void sub_81256C8(void);
|
|
|
|
void sub_8125250(void);
|
|
|
|
void sub_81253A4(u8);
|
|
|
|
void sub_81250B8(u8);
|
|
|
|
void sub_8125170(u8);
|
|
|
|
void sub_8125954(u16);
|
|
|
|
u16 ConvertColorToGrayscale(u16*);
|
|
|
|
u16 sub_8125E18(u16*, u16*, u16*);
|
|
|
|
u16 ConvertCoolColor(u16*, u8);
|
|
|
|
u16 ConvertToBlackOrWhite(u16*);
|
|
|
|
u16 sub_8125C98(u16*, u16*);
|
|
|
|
u16 InvertColor(u16*);
|
|
|
|
u16 sub_8125F38(u16*, u16*, u16*);
|
|
|
|
u16 sub_8125CF4(u16*, u16*);
|
|
|
|
u16 GetCoolColorFromPersonality(u8);
|
|
|
|
|
2018-12-29 12:27:24 +01:00
|
|
|
void sub_8124F2C(struct Unk030061A0 *info)
|
2018-12-29 11:50:00 +01:00
|
|
|
{
|
|
|
|
gUnknown_03006168 = info->var_4;
|
|
|
|
gUnknown_0300617C = info->var_1F;
|
|
|
|
gUnknown_03006164 = info->var_19;
|
|
|
|
gUnknown_03006178 = info->var_1A;
|
|
|
|
gUnknown_03006174 = info->var_1B;
|
|
|
|
gUnknown_0300616C = info->var_1C;
|
|
|
|
gUnknown_03006180 = info->var_1D;
|
|
|
|
gUnknown_03006170 = info->var_1E;
|
|
|
|
switch (info->var_0)
|
|
|
|
{
|
|
|
|
case 2:
|
|
|
|
sub_8125230();
|
|
|
|
break;
|
|
|
|
case 8:
|
|
|
|
sub_81252E8();
|
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
sub_81254E0();
|
|
|
|
sub_81253A4(gUnknown_0300617C);
|
|
|
|
break;
|
|
|
|
case 10:
|
|
|
|
sub_81254E0();
|
|
|
|
sub_8125630();
|
|
|
|
sub_8125448();
|
|
|
|
case 31:
|
|
|
|
sub_8125630();
|
|
|
|
break;
|
|
|
|
case 11:
|
|
|
|
sub_81254E0();
|
|
|
|
sub_81257F8();
|
|
|
|
sub_81257F8();
|
|
|
|
sub_81258A0();
|
|
|
|
sub_8125448();
|
|
|
|
break;
|
|
|
|
case 13:
|
|
|
|
sub_81256C8();
|
|
|
|
break;
|
|
|
|
case 30:
|
|
|
|
sub_81254E0();
|
|
|
|
break;
|
|
|
|
case 32:
|
|
|
|
sub_81257F8();
|
|
|
|
break;
|
|
|
|
case 33:
|
|
|
|
sub_81258A0();
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
sub_8125250();
|
|
|
|
sub_81250B8(3);
|
|
|
|
break;
|
|
|
|
case 36:
|
|
|
|
sub_81254E0();
|
|
|
|
sub_81257F8();
|
|
|
|
sub_81258A0();
|
|
|
|
sub_8125448();
|
|
|
|
sub_81252E8();
|
|
|
|
sub_81252E8();
|
|
|
|
sub_81250B8(2);
|
|
|
|
sub_8125170(4);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81250B8(u8 a0) // it changes palette someway somehow... .__.
|
|
|
|
{
|
|
|
|
u8 i, j;
|
|
|
|
|
|
|
|
for (i = 0; i < gUnknown_0300616C; i++)
|
|
|
|
{
|
|
|
|
u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
|
|
|
|
u16* pal = &var2[gUnknown_03006164];
|
|
|
|
for (j = 0; j < gUnknown_03006174; j++, pal++)
|
|
|
|
{
|
|
|
|
if (!(0x8000 & *pal))
|
|
|
|
{
|
|
|
|
u8 val = (31 & *pal);
|
|
|
|
val += a0;
|
|
|
|
if (val > 31)
|
|
|
|
val = 31;
|
|
|
|
|
|
|
|
*pal = RGB2(val, val, val);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8125170(u8 a0)
|
|
|
|
{
|
|
|
|
u8 i, j;
|
|
|
|
|
|
|
|
for (i = 0; i < gUnknown_0300616C; i++)
|
|
|
|
{
|
|
|
|
u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
|
|
|
|
u16* pal = &var2[gUnknown_03006164];
|
|
|
|
for (j = 0; j < gUnknown_03006174; j++, pal++)
|
|
|
|
{
|
|
|
|
if (!(0x8000 & *pal))
|
|
|
|
{
|
|
|
|
u8 val = (31 & *pal);
|
|
|
|
if (val > 31 - a0)
|
|
|
|
val = 31 - (a0 >> 1);
|
|
|
|
|
|
|
|
*pal = RGB2(val, val, val);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8125230(void)
|
|
|
|
{
|
|
|
|
u32 i;
|
|
|
|
for (i = 0; i < 3200; i++)
|
|
|
|
sub_8125954(i);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8125250(void)
|
|
|
|
{
|
|
|
|
u8 i, j;
|
|
|
|
|
|
|
|
for (i = 0; i < gUnknown_0300616C; i++)
|
|
|
|
{
|
|
|
|
u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
|
|
|
|
u16* color = &var2[gUnknown_03006164];
|
|
|
|
for (j = 0; j < gUnknown_03006174; j++, color++)
|
|
|
|
{
|
|
|
|
if (!(0x8000 & *color))
|
|
|
|
{
|
|
|
|
*color = ConvertColorToGrayscale(color);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81252E8(void)
|
|
|
|
{
|
|
|
|
u8 i, j;
|
|
|
|
|
|
|
|
for (i = 0; i < gUnknown_03006174; i++)
|
|
|
|
{
|
|
|
|
u16* var0 = &(*gUnknown_03006168)[0][gUnknown_03006178 * gUnknown_03006180];
|
|
|
|
u16* palette = &var0[gUnknown_03006164 + i];
|
|
|
|
u16 color = *palette;
|
|
|
|
|
|
|
|
j = 1;
|
|
|
|
palette += gUnknown_03006180;
|
|
|
|
while (j < gUnknown_0300616C - 1)
|
|
|
|
{
|
|
|
|
if (!(0x8000 & *palette))
|
|
|
|
{
|
|
|
|
*palette = sub_8125E18(&color, palette, palette + gUnknown_03006180);
|
|
|
|
color = *palette;
|
|
|
|
}
|
|
|
|
|
|
|
|
j++;
|
|
|
|
palette += gUnknown_03006180;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81253A4(u8 arg0)
|
|
|
|
{
|
|
|
|
u8 i, j;
|
|
|
|
|
|
|
|
for (i = 0; i < gUnknown_0300616C; i++)
|
|
|
|
{
|
|
|
|
u16* var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
|
|
|
|
u16* color = &var0[gUnknown_03006164];
|
|
|
|
for (j = 0; j < gUnknown_03006174; j++, color++)
|
|
|
|
{
|
|
|
|
if (!(0x8000 & *color))
|
|
|
|
{
|
|
|
|
*color = ConvertCoolColor(color, arg0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8125448(void)
|
|
|
|
{
|
|
|
|
u8 i, j;
|
|
|
|
|
|
|
|
for (i = 0; i < gUnknown_0300616C; i++)
|
|
|
|
{
|
|
|
|
u16* var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
|
|
|
|
u16* color = &var0[gUnknown_03006164];
|
|
|
|
for (j = 0; j < gUnknown_03006174; j++, color++)
|
|
|
|
{
|
|
|
|
if (!(0x8000 & *color))
|
|
|
|
{
|
|
|
|
*color = ConvertToBlackOrWhite(color);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81254E0(void)
|
|
|
|
{
|
|
|
|
u8 i, j;
|
|
|
|
u16 *palette;
|
|
|
|
|
|
|
|
for (i = 0; i < gUnknown_0300616C; i++)
|
|
|
|
{
|
|
|
|
u16 *var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
|
|
|
|
palette = &var0[gUnknown_03006164];
|
|
|
|
*palette = sub_8125C98(palette, palette + 1);
|
|
|
|
for (j = 1, palette = palette + 1; j < gUnknown_03006174 - 1; j++, palette++)
|
|
|
|
{
|
|
|
|
*palette = sub_8125C98(palette, palette + 1);
|
|
|
|
*palette = sub_8125C98(palette, palette - 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
*palette = sub_8125C98(palette, palette - 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (j = 0; j < gUnknown_03006174; j++)
|
|
|
|
{
|
|
|
|
u16 *var0 = &(*gUnknown_03006168)[0][gUnknown_03006178 * gUnknown_03006180];
|
|
|
|
palette = &var0[gUnknown_03006164 + j];
|
|
|
|
*palette = sub_8125C98(palette, palette + gUnknown_03006180);
|
|
|
|
for (i = 1, palette = palette + gUnknown_03006180; i < gUnknown_0300616C - 1; i++, palette += gUnknown_03006180)
|
|
|
|
{
|
|
|
|
*palette = sub_8125C98(palette, palette + gUnknown_03006180);
|
|
|
|
*palette = sub_8125C98(palette, palette - gUnknown_03006180);
|
|
|
|
}
|
|
|
|
|
|
|
|
*palette = sub_8125C98(palette, palette - gUnknown_03006180);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8125630(void)
|
|
|
|
{
|
|
|
|
u8 i, j;
|
|
|
|
|
|
|
|
for (i = 0; i < gUnknown_0300616C; i++)
|
|
|
|
{
|
|
|
|
u16 *var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
|
|
|
|
u16 *color = &var0[gUnknown_03006164];
|
|
|
|
for (j = 0; j < gUnknown_03006174; j++, color++)
|
|
|
|
{
|
|
|
|
if (!(0x8000 & *color))
|
|
|
|
{
|
|
|
|
*color = InvertColor(color);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81256C8(void)
|
|
|
|
{
|
|
|
|
u8 i, j;
|
|
|
|
u16 *palette;
|
|
|
|
u16 color;
|
|
|
|
|
|
|
|
palette = (*gUnknown_03006168)[0];
|
|
|
|
for (i = 0; i < 64; i++)
|
|
|
|
{
|
|
|
|
for (j = 0; j < 64; j++, palette++)
|
|
|
|
{
|
|
|
|
if (!(0x8000 & *palette))
|
|
|
|
{
|
|
|
|
*palette = InvertColor(palette);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (j = 0; j < 64; j++)
|
|
|
|
{
|
|
|
|
palette = &(*gUnknown_03006168)[0][j];
|
|
|
|
color = *palette;
|
|
|
|
*palette = 0x8000;
|
|
|
|
for (i = 1, palette += 64; i < 63; i++, palette += 64)
|
|
|
|
{
|
|
|
|
if (!(0x8000 & *palette))
|
|
|
|
{
|
|
|
|
*palette = sub_8125F38(&color, palette, palette + 64);
|
|
|
|
color = *palette;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
*palette = 0x8000;
|
|
|
|
palette = &(*gUnknown_03006168)[0][j];
|
|
|
|
color = *palette;
|
|
|
|
*palette = 0x8000;
|
|
|
|
for (i = 1, palette += 64; i < 63; i++, palette += 64)
|
|
|
|
{
|
|
|
|
if (!(0x8000 & *palette))
|
|
|
|
{
|
|
|
|
*palette = sub_8125F38(&color, palette, palette + 64);
|
|
|
|
color = *palette;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
*palette = 0x8000;
|
|
|
|
}
|
|
|
|
|
|
|
|
palette = (*gUnknown_03006168)[0];
|
|
|
|
for (i = 0; i < 64; i++)
|
|
|
|
{
|
|
|
|
for (j = 0; j < 64; j++, palette++)
|
|
|
|
{
|
|
|
|
if (!(0x8000 & *palette))
|
|
|
|
{
|
|
|
|
*palette = InvertColor(palette);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81257F8(void)
|
|
|
|
{
|
|
|
|
u8 i, j;
|
|
|
|
|
|
|
|
for (i = 0; i < gUnknown_0300616C; i++)
|
|
|
|
{
|
|
|
|
u16 *var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
|
|
|
|
u16 *palette = &var0[gUnknown_03006164];
|
|
|
|
u16 color = *palette;
|
|
|
|
for (j = 1, palette++; j < gUnknown_03006174 - 1; j++, palette++)
|
|
|
|
{
|
|
|
|
if (!(0x8000 & *palette))
|
|
|
|
{
|
|
|
|
*palette = sub_8125CF4(&color, palette);
|
|
|
|
color = *palette;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81258A0(void)
|
|
|
|
{
|
|
|
|
u8 i, j;
|
|
|
|
|
|
|
|
for (i = 0; i < gUnknown_03006174; i++)
|
|
|
|
{
|
|
|
|
u16* var0 = &(*gUnknown_03006168)[0][gUnknown_03006178 * gUnknown_03006180];
|
|
|
|
u16* palette = &var0[gUnknown_03006164 + i];
|
|
|
|
u16 color = *palette;
|
|
|
|
for (j = 1, palette += gUnknown_03006180; j < gUnknown_0300616C - 1; j++, palette += gUnknown_03006180)
|
|
|
|
{
|
|
|
|
if (!(0x8000 & *palette))
|
|
|
|
{
|
|
|
|
*palette = sub_8125CF4(&color, palette);
|
|
|
|
color = *palette;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
struct Unk8125954
|
|
|
|
{
|
|
|
|
u8 unk0;
|
|
|
|
u8 unk1;
|
|
|
|
u16 unk2;
|
|
|
|
};
|
|
|
|
|
|
|
|
extern const u8 gUnknown_085A1F94[][3];
|
|
|
|
|
|
|
|
void sub_8125954(u16 arg0)
|
|
|
|
{
|
|
|
|
u8 i;
|
|
|
|
u8 r5, r9;
|
|
|
|
struct Unk8125954 unkStruct[6];
|
|
|
|
|
|
|
|
unkStruct[0].unk0 = gUnknown_085A1F94[arg0][0];
|
|
|
|
unkStruct[0].unk1 = gUnknown_085A1F94[arg0][1];
|
|
|
|
unkStruct[0].unk2 = (gUnknown_085A1F94[arg0][2] >> 3) & 7;
|
|
|
|
|
|
|
|
r9 = (gUnknown_085A1F94[arg0][2] >> 1) & 3;
|
|
|
|
r5 = gUnknown_085A1F94[arg0][2] & 1;
|
|
|
|
for (i = 1; i < unkStruct[0].unk2; i++)
|
|
|
|
{
|
|
|
|
if (!r5)
|
|
|
|
{
|
|
|
|
unkStruct[i].unk0 = unkStruct[0].unk0 - i;
|
|
|
|
unkStruct[i].unk1 = unkStruct[0].unk1 + i;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
unkStruct[i].unk0 = unkStruct[0].unk0 + 1;
|
|
|
|
unkStruct[i].unk1 = unkStruct[0].unk1 - 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (unkStruct[i].unk0 > 63 || unkStruct[i].unk1 > 63)
|
|
|
|
{
|
|
|
|
unkStruct[0].unk2 = i - 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
unkStruct[i].unk2 = unkStruct[0].unk2 - i;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0; i < unkStruct[0].unk2; i++)
|
|
|
|
{
|
|
|
|
u16 *pal = &(*gUnknown_03006168)[unkStruct[i].unk1 * 2][unkStruct[i].unk0];
|
|
|
|
|
|
|
|
if (!(0x8000 & *pal))
|
|
|
|
{
|
|
|
|
u16 r = (*pal) & 0x1F;
|
|
|
|
u16 g = (*pal >> 5) & 0x1F;
|
|
|
|
u16 b = (*pal >> 10) & 0x1F;
|
|
|
|
|
|
|
|
switch (r9)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
case 1:
|
|
|
|
switch (((gUnknown_085A1F94[arg0][2] >> 3) & 7) % 3)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
if (r >= unkStruct[i].unk2)
|
|
|
|
r -= unkStruct[i].unk2;
|
|
|
|
else
|
|
|
|
r = 0;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if (g >= unkStruct[i].unk2)
|
|
|
|
g -= unkStruct[i].unk2;
|
|
|
|
else
|
|
|
|
g = 0;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
if (b >= unkStruct[i].unk2)
|
|
|
|
b -= unkStruct[i].unk2;
|
|
|
|
else
|
|
|
|
b = 0;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
case 3:
|
|
|
|
r += unkStruct[i].unk2;
|
|
|
|
g += unkStruct[i].unk2;
|
|
|
|
b += unkStruct[i].unk2;
|
|
|
|
if (r > 31)
|
|
|
|
r = 31;
|
|
|
|
if (g > 31)
|
|
|
|
g = 31;
|
|
|
|
if (b > 31)
|
|
|
|
b = 31;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
*pal = RGB2(r, g, b);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 ConvertColorToGrayscale(u16 *color)
|
|
|
|
{
|
|
|
|
s32 clr = *color;
|
|
|
|
s32 r = clr & 0x1F;
|
|
|
|
s32 g = (clr >> 5) & 0x1F;
|
|
|
|
s32 b = (clr >> 10) & 0x1F;
|
|
|
|
s32 gray = (r * Q_8_8(0.3) + g * Q_8_8(0.59) + b * Q_8_8(0.1133)) >> 8;
|
|
|
|
return RGB2(gray, gray, gray);
|
|
|
|
}
|
|
|
|
|
|
|
|
// The dark colors are the colored edges of the Cool painting effect.
|
|
|
|
// Everything else is white.
|
|
|
|
u16 ConvertCoolColor(u16 *color, u8 personality)
|
|
|
|
{
|
|
|
|
u16 red = *color & 0x1F;
|
|
|
|
u16 green = (*color >> 5) & 0x1F;
|
|
|
|
u16 blue = (*color >> 10) & 0x1F;
|
|
|
|
|
|
|
|
if (red < 17 && green < 17 && blue < 17)
|
|
|
|
return GetCoolColorFromPersonality(personality);
|
|
|
|
else
|
|
|
|
return RGB_WHITE;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Based on the given value, which comes from the first 8 bits of
|
|
|
|
// the mon's personality value, return a color.
|
|
|
|
u16 GetCoolColorFromPersonality(u8 personality)
|
|
|
|
{
|
|
|
|
u16 red = 0;
|
|
|
|
u16 green = 0;
|
|
|
|
u16 blue = 0;
|
|
|
|
u8 strength = (personality / 6) % 3;
|
|
|
|
u8 colorType = personality % 6;
|
|
|
|
|
|
|
|
switch (colorType)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
// Teal color
|
|
|
|
green = 21 - strength;
|
|
|
|
blue = green;
|
|
|
|
red = 0;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
// Yellow color
|
|
|
|
blue = 0;
|
|
|
|
red = 21 - strength;
|
|
|
|
green = red;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
// Purple color
|
|
|
|
blue = 21 - strength;
|
|
|
|
green = 0;
|
|
|
|
red = blue;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
// Red color
|
|
|
|
blue = 0;
|
|
|
|
green = 0;
|
|
|
|
red = 23 - strength;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
// Blue color
|
|
|
|
blue = 23 - strength;
|
|
|
|
green = 0;
|
|
|
|
red = 0;
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
// Green color
|
|
|
|
blue = 0;
|
|
|
|
green = 23 - strength;
|
|
|
|
red = 0;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return RGB2(red, green, blue);
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 ConvertToBlackOrWhite(u16 *color)
|
|
|
|
{
|
|
|
|
u16 red = *color & 0x1F;
|
|
|
|
u16 green = (*color >> 5) & 0x1F;
|
|
|
|
u16 blue = (*color >> 10) & 0x1F;
|
|
|
|
|
|
|
|
if (red < 17 && green < 17 && blue < 17)
|
|
|
|
return RGB_BLACK;
|
|
|
|
else
|
|
|
|
return RGB_WHITE;
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 sub_8125C98(u16 *colorA, u16 *colorB)
|
|
|
|
{
|
|
|
|
if (*colorA)
|
|
|
|
{
|
|
|
|
if (*colorA & 0x8000)
|
|
|
|
return 0x8000;
|
|
|
|
if (*colorB & 0x8000)
|
|
|
|
return RGB_BLACK;
|
|
|
|
|
|
|
|
return *colorA;
|
|
|
|
}
|
|
|
|
|
|
|
|
return RGB_BLACK;
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 InvertColor(u16 *color)
|
|
|
|
{
|
|
|
|
u16 red = *color & 0x1F;
|
|
|
|
u16 green = (*color >> 5) & 0x1F;
|
|
|
|
u16 blue = (*color >> 10) & 0x1F;
|
|
|
|
|
|
|
|
red = 31 - red;
|
|
|
|
green = 31 - green;
|
|
|
|
blue = 31 - blue;
|
|
|
|
|
|
|
|
return RGB2(red, green, blue);
|
|
|
|
}
|
2018-12-29 12:10:06 +01:00
|
|
|
|
|
|
|
u16 sub_8125CF4(u16 *a0, u16 *a1)
|
|
|
|
{
|
|
|
|
u16 sp0[2][3];
|
|
|
|
u16 spC[3];
|
|
|
|
u8 r4;
|
|
|
|
u16 r2;
|
|
|
|
u16 r, g, b;
|
|
|
|
|
|
|
|
if (*a0 == *a1)
|
|
|
|
return *a1;
|
|
|
|
|
|
|
|
sp0[0][0] = (*a0 >> 0) & 0x1F;
|
|
|
|
sp0[0][1] = (*a0 >> 5) & 0x1F;
|
|
|
|
sp0[0][2] = (*a0 >> 10) & 0x1F;
|
|
|
|
sp0[1][0] = (*a1 >> 0) & 0x1F;
|
|
|
|
sp0[1][1] = (*a1 >> 5) & 0x1F;
|
|
|
|
sp0[1][2] = (*a1 >> 10) & 0x1F;
|
|
|
|
|
|
|
|
if (sp0[0][0] > 25 && sp0[0][1] > 25 && sp0[0][2] > 25)
|
|
|
|
return *a1;
|
|
|
|
if (sp0[1][0] > 25 && sp0[1][1] > 25 && sp0[1][2] > 25)
|
|
|
|
return *a1;
|
|
|
|
|
|
|
|
for (r4 = 0; r4 < 3; r4++)
|
|
|
|
{
|
|
|
|
if (sp0[0][r4] > sp0[1][r4])
|
|
|
|
spC[r4] = sp0[0][r4] - sp0[1][r4];
|
|
|
|
else
|
|
|
|
spC[r4] = sp0[1][r4] - sp0[0][r4];
|
|
|
|
}
|
|
|
|
|
|
|
|
if (spC[0] >= spC[1])
|
|
|
|
{
|
|
|
|
if (spC[0] >= spC[2])
|
|
|
|
r2 = spC[0];
|
|
|
|
else if (spC[1] >= spC[2])
|
|
|
|
r2 = spC[1];
|
|
|
|
else
|
|
|
|
r2 = spC[2];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (spC[1] >= spC[2])
|
|
|
|
r2 = spC[1];
|
|
|
|
else if (spC[2] >= spC[0])
|
|
|
|
r2 = spC[2];
|
|
|
|
else
|
|
|
|
r2 = spC[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
r = (sp0[1][0] * (31 - r2 / 2)) / 31;
|
|
|
|
g = (sp0[1][1] * (31 - r2 / 2)) / 31;
|
|
|
|
b = (sp0[1][2] * (31 - r2 / 2)) / 31;
|
|
|
|
return RGB2(r, g, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 sub_8125E18(u16 * a0, u16 * a1, u16 * a2)
|
|
|
|
{
|
|
|
|
u16 red, green, blue;
|
|
|
|
u16 avg0, avg1, avg2;
|
|
|
|
u16 diff1, diff2;
|
|
|
|
u32 minimum;
|
|
|
|
u16 factor;
|
|
|
|
|
|
|
|
if (*a0 == *a1 && *a2 == *a1)
|
|
|
|
return *a1;
|
|
|
|
|
|
|
|
red = (*a1 >> 0) & 0x1F;
|
|
|
|
green = (*a1 >> 5) & 0x1F;
|
|
|
|
blue = (*a1 >> 10) & 0x1F;
|
|
|
|
|
|
|
|
avg0 = (((*a0 >> 0) & 0x1F) + ((*a0 >> 5) & 0x1F) + ((*a0 >> 10) & 0x1F)) / 3;
|
|
|
|
avg1 = (((*a1 >> 0) & 0x1F) + ((*a1 >> 5) & 0x1F) + ((*a1 >> 10) & 0x1F)) / 3;
|
|
|
|
avg2 = (((*a2 >> 0) & 0x1F) + ((*a2 >> 5) & 0x1F) + ((*a2 >> 10) & 0x1F)) / 3;
|
|
|
|
|
|
|
|
if (avg0 == avg1 && avg2 == avg1)
|
|
|
|
return *a1;
|
|
|
|
|
|
|
|
if (avg0 > avg1)
|
|
|
|
diff1 = avg0 - avg1;
|
|
|
|
else
|
|
|
|
diff1 = avg1 - avg0;
|
|
|
|
|
|
|
|
if (avg2 > avg1)
|
|
|
|
diff2 = avg2 - avg1;
|
|
|
|
else
|
|
|
|
diff2 = avg1 - avg2;
|
|
|
|
|
|
|
|
if (diff1 >= diff2)
|
|
|
|
minimum = diff1;
|
|
|
|
else
|
|
|
|
minimum = diff2;
|
|
|
|
|
|
|
|
factor = 31 - minimum / 2;
|
|
|
|
red = red * factor / 31;
|
|
|
|
green = green * factor / 31;
|
|
|
|
blue = blue * factor / 31;
|
|
|
|
return RGB2(red, green, blue);
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 sub_8125F38(u16 *a0, u16 *a1, u16 *a2)
|
|
|
|
{
|
|
|
|
u16 red, green, blue;
|
|
|
|
u16 avg0, avg1, avg2;
|
|
|
|
u16 diff1, diff2;
|
|
|
|
u32 minimum;
|
|
|
|
u16 factor;
|
|
|
|
|
|
|
|
if (*a0 == *a1 && *a2 == *a1)
|
|
|
|
return *a1;
|
|
|
|
|
|
|
|
red = (*a1 >> 0) & 0x1F;
|
|
|
|
green = (*a1 >> 5) & 0x1F;
|
|
|
|
blue = (*a1 >> 10) & 0x1F;
|
|
|
|
|
|
|
|
avg0 = (((*a0 >> 0) & 0x1F) + ((*a0 >> 5) & 0x1F) + ((*a0 >> 10) & 0x1F)) / 3;
|
|
|
|
avg1 = (((*a1 >> 0) & 0x1F) + ((*a1 >> 5) & 0x1F) + ((*a1 >> 10) & 0x1F)) / 3;
|
|
|
|
avg2 = (((*a2 >> 0) & 0x1F) + ((*a2 >> 5) & 0x1F) + ((*a2 >> 10) & 0x1F)) / 3;
|
|
|
|
|
|
|
|
if (avg0 == avg1 && avg2 == avg1)
|
|
|
|
return *a1;
|
|
|
|
|
|
|
|
if (avg0 > avg1)
|
|
|
|
diff1 = avg0 - avg1;
|
|
|
|
else
|
|
|
|
diff1 = avg1 - avg0;
|
|
|
|
|
|
|
|
if (avg2 > avg1)
|
|
|
|
diff2 = avg2 - avg1;
|
|
|
|
else
|
|
|
|
diff2 = avg1 - avg2;
|
|
|
|
|
|
|
|
if (diff1 >= diff2)
|
|
|
|
minimum = diff1;
|
|
|
|
else
|
|
|
|
minimum = diff2;
|
|
|
|
|
|
|
|
factor = 31 - minimum;
|
|
|
|
red = red * factor / 31;
|
|
|
|
green = green * factor / 31;
|
|
|
|
blue = blue * factor / 31;
|
|
|
|
return RGB2(red, green, blue);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2018-12-29 12:27:24 +01:00
|
|
|
void sub_8126058(struct Unk030061A0 *arg0)
|
2018-12-29 12:10:06 +01:00
|
|
|
{
|
|
|
|
u16 i, j, k;
|
|
|
|
u8 r5 = arg0->var_1D >> 3;
|
|
|
|
u8 var_24 = arg0->var_1E >> 3;
|
|
|
|
u16 (*var_2C)[][32] = arg0->var_4;
|
|
|
|
u32 var_28 = arg0->var_10;
|
|
|
|
|
|
|
|
if (arg0->var_16 == 2)
|
|
|
|
{
|
|
|
|
for (i = 0; i < var_24; i++)
|
|
|
|
{
|
|
|
|
for (j = 0; j < r5; j++)
|
|
|
|
{
|
|
|
|
for (k = 0; k < 8; k++)
|
|
|
|
{
|
|
|
|
(*var_2C)[][];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*/
|