summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/contest_painting.c4
-rw-r--r--src/contest_painting_effects.c421
2 files changed, 418 insertions, 7 deletions
diff --git a/src/contest_painting.c b/src/contest_painting.c
index 6bc6203c1..0c5cdcd49 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -23,7 +23,7 @@ u16 (*gUnknown_03005E10)[][32];
struct Unk03005E20 gUnknown_03005E20;
u8 gUnknown_03005E40[0x4C];
struct ContestEntry *gUnknown_03005E8C;
-u16 (*gUnknown_03005E90)[];
+u16 *gUnknown_03005E90;
static const u16 gPictureFramePalettes[][16] =
{
@@ -634,7 +634,7 @@ static u8 sub_8106EE0(u8 arg0)
static void sub_8106F4C(void)
{
- gUnknown_03005E90 = &ewram15E00.unk2017e00;
+ gUnknown_03005E90 = ewram15E00.unk2017e00;
gUnknown_03005E10 = &ewram15E00.unk2015e00;
}
diff --git a/src/contest_painting_effects.c b/src/contest_painting_effects.c
index 7a7fc9c4a..57706aea7 100644
--- a/src/contest_painting_effects.c
+++ b/src/contest_painting_effects.c
@@ -4,14 +4,15 @@
extern u16 (*gUnknown_03005DEC)[][32];
extern u8 gUnknown_083E7A50[][3];
-extern u8 gUnknown_03005E00;
+extern u8 gUnknown_03005DE8;
+extern u8 gUnknown_03005DF0;
extern u8 gUnknown_03005DFC;
extern u8 gUnknown_03005DF8;
-extern u8 gUnknown_03005DF0;
-extern u8 gUnknown_03005E04;
extern u8 gUnknown_03005DF4;
-
-extern u8 gUnknown_03005DE8;
+extern u8 gUnknown_03005E00;
+extern u8 gUnknown_03005E04;
+extern u16 * gUnknown_03005E08;
+extern u16 gUnknown_03005E0C;
// this file's functions
void sub_80FCAA4(void);
@@ -36,6 +37,19 @@ u16 InvertColor(u16*);
u16 sub_80FD7AC(u16*, u16*, u16*);
u16 sub_80FD568(u16*, u16*);
u16 GetCoolColorFromPersonality(u8);
+void sub_80FDC18(bool8);
+void sub_80FDAE4(void);
+void sub_80FDF88(void);
+void sub_80FDBE4(void);
+void sub_80FDED8(void);
+void sub_80FDBA8(void);
+void sub_80FDE28(void);
+void sub_80FDB8C(void);
+void sub_80FDD70(void);
+u16 sub_80FE038(u16 *);
+u16 sub_80FE17C(u16 *);
+u16 sub_80FE1B0(u16 *);
+u16 sub_80FE0AC(u16 *);
void sub_80FC7A0(struct Unk03005E20* info)
{
@@ -1121,3 +1135,400 @@ void sub_80FD8CC(struct Unk03005E20 * a0)
"\tpop {r0}\n"
"\tbx r0");
}
+
+void sub_80FDA18(struct Unk03005E20 *arg0)
+{
+ gUnknown_03005E0C = arg0->var_18 * 16;
+ gUnknown_03005E08 = &arg0->var_8[gUnknown_03005E0C];
+ gUnknown_03005DEC = arg0->var_4;
+ gUnknown_03005DE8 = arg0->var_19;
+ gUnknown_03005DFC = arg0->var_1A;
+ gUnknown_03005DF8 = arg0->var_1B;
+ gUnknown_03005DF0 = arg0->var_1C;
+ gUnknown_03005E04 = arg0->var_1D;
+ gUnknown_03005DF4 = arg0->var_1E;
+
+ switch (arg0->var_14)
+ {
+ case 0:
+ sub_80FDC18(FALSE);
+ break;
+ case 1:
+ sub_80FDC18(TRUE);
+ break;
+ case 2:
+ sub_80FDAE4();
+ sub_80FDF88();
+ break;
+ case 3:
+ sub_80FDBE4();
+ sub_80FDED8();
+ break;
+ case 4:
+ sub_80FDBA8();
+ sub_80FDE28();
+ break;
+ case 5:
+ sub_80FDB8C();
+ sub_80FDD70();
+ break;
+ }
+}
+
+void sub_80FDAE4(void)
+{
+ gUnknown_03005E08[0] = RGB2(0, 0, 0);
+ gUnknown_03005E08[1] = RGB2(6, 6, 6);
+ gUnknown_03005E08[2] = RGB2(29, 29, 29);
+ gUnknown_03005E08[3] = RGB2(11, 11, 11);
+ gUnknown_03005E08[4] = RGB2(29, 6, 6);
+ gUnknown_03005E08[5] = RGB2(6, 29, 6);
+ gUnknown_03005E08[6] = RGB2(6, 6, 29);
+ gUnknown_03005E08[7] = RGB2(29, 29, 6);
+ gUnknown_03005E08[8] = RGB2(29, 6, 29);
+ gUnknown_03005E08[9] = RGB2(6, 29, 29);
+ gUnknown_03005E08[10] = RGB2(29, 11, 6);
+ gUnknown_03005E08[11] = RGB2(11, 29, 6);
+ gUnknown_03005E08[12] = RGB2(6, 11, 29);
+ gUnknown_03005E08[13] = RGB2(29, 6, 11);
+ gUnknown_03005E08[14] = RGB2(6, 29, 11);
+ gUnknown_03005E08[15] = RGB2(11, 6, 29);
+}
+
+void sub_80FDB8C(void)
+{
+ gUnknown_03005E08[0] = RGB2(0, 0, 0);
+ gUnknown_03005E08[1] = RGB2(0, 0, 0);
+ gUnknown_03005E08[2] = RGB2(31, 31, 31);
+}
+
+void sub_80FDBA8(void)
+{
+ u8 i;
+
+ gUnknown_03005E08[0] = RGB2(0, 0, 0);
+ gUnknown_03005E08[1] = RGB2(0, 0, 0);
+ for (i = 0; i < 14; i++)
+ gUnknown_03005E08[i + 2] = RGB2(2 * (i + 2), 2 * (i + 2), 2 * (i + 2));
+}
+
+void sub_80FDBE4(void)
+{
+ u8 i;
+
+ gUnknown_03005E08[0] = RGB2(0, 0, 0);
+ for (i = 0; i < 32; i++)
+ gUnknown_03005E08[i + 1] = RGB2(i, i, i);
+}
+
+void sub_80FDC18(bool8 arg0)
+{
+ u8 i, j;
+ u16 maxIndex;
+
+ maxIndex = 0xDF;
+ if (!arg0)
+ maxIndex = 0xFF;
+
+ for (j = 0; j < maxIndex; j++)
+ gUnknown_03005E08[j] = 0;
+
+ gUnknown_03005E08[maxIndex] = RGB2(15, 15, 15);
+ for (i = 0; i < gUnknown_03005DF0; i++)
+ {
+ u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
+ u16* pal = &var2[gUnknown_03005DE8];
+ for (j = 0; j < gUnknown_03005DF8; j++, pal++)
+ {
+ if (*pal & 0x8000)
+ {
+ *pal = gUnknown_03005E0C;
+ }
+ else
+ {
+ u16 color = sub_80FE038(pal);
+ u8 curIndex = 1;
+ if (curIndex < maxIndex)
+ {
+ if (gUnknown_03005E08[curIndex] == RGB_BLACK)
+ {
+ gUnknown_03005E08[curIndex] = color;
+ *pal = gUnknown_03005E0C + curIndex;
+ }
+ else
+ {
+ while (curIndex < maxIndex)
+ {
+ if (gUnknown_03005E08[curIndex] == RGB_BLACK)
+ {
+ gUnknown_03005E08[curIndex] = color;
+ *pal = gUnknown_03005E0C + curIndex;
+ break;
+ }
+
+ if (gUnknown_03005E08[curIndex] == color)
+ {
+ *pal = gUnknown_03005E0C + curIndex;
+ break;
+ }
+
+ curIndex++;
+ }
+ }
+ }
+
+ if (curIndex == maxIndex)
+ {
+ curIndex = maxIndex;
+ *pal = curIndex;
+ }
+ }
+ }
+ }
+}
+
+void sub_80FDD70(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_03005DF0; i++)
+ {
+ u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
+ u16* pal = &var2[gUnknown_03005DE8];
+ for (j = 0; j < gUnknown_03005DF8; j++, pal++)
+ {
+ if (*pal & 0x8000)
+ {
+ *pal = gUnknown_03005E0C;
+ }
+ else
+ {
+ if (ConvertToBlackOrWhite(pal) == RGB_BLACK)
+ *pal = gUnknown_03005E0C + 1;
+ else
+ *pal = gUnknown_03005E0C + 2;
+ }
+ }
+ }
+}
+
+void sub_80FDE28(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_03005DF0; i++)
+ {
+ u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
+ u16* pal = &var2[gUnknown_03005DE8];
+ for (j = 0; j < gUnknown_03005DF8; j++, pal++)
+ {
+ if (*pal & 0x8000)
+ *pal = gUnknown_03005E0C;
+ else
+ *pal = sub_80FE17C(pal) + gUnknown_03005E0C;
+ }
+ }
+}
+
+void sub_80FDED8(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_03005DF0; i++)
+ {
+ u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
+ u16* pal = &var2[gUnknown_03005DE8];
+ for (j = 0; j < gUnknown_03005DF8; j++, pal++)
+ {
+ if (*pal & 0x8000)
+ *pal = gUnknown_03005E0C;
+ else
+ *pal = sub_80FE1B0(pal) + gUnknown_03005E0C;
+ }
+ }
+}
+
+void sub_80FDF88(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_03005DF0; i++)
+ {
+ u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
+ u16* pal = &var2[gUnknown_03005DE8];
+ for (j = 0; j < gUnknown_03005DF8; j++, pal++)
+ {
+ if (*pal & 0x8000)
+ *pal = gUnknown_03005E0C;
+ else
+ *pal = sub_80FE0AC(pal) + gUnknown_03005E0C;
+ }
+ }
+}
+
+u16 sub_80FE038(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ if (red & 3)
+ red = (red & 0x1C) + 4;
+ if (green & 3)
+ green = (green & 0x1C) + 4;
+ if (blue & 3)
+ blue = (blue & 0x1C) + 4;
+
+ if (red < 6)
+ red = 6;
+ if (red > 30)
+ red = 30;
+
+ if (green < 6)
+ green = 6;
+ if (green > 30)
+ green = 30;
+
+ if (blue < 6)
+ blue = 6;
+ if (blue > 30)
+ blue = 30;
+
+ return RGB2(red, green, blue);
+}
+
+u16 sub_80FE0AC(u16* color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ if (red < 12 && green < 11 && blue < 11)
+ return 1;
+
+ if (red > 19 && green > 19 && blue > 19)
+ return 2;
+
+ if (red > 19)
+ {
+ if (green > 19)
+ {
+ if (blue > 14)
+ return 2;
+ else
+ return 7;
+ }
+ else if (blue > 19)
+ {
+ if (green > 14)
+ return 2;
+ else
+ return 8;
+ }
+ }
+
+ if (green > 19 && blue > 19)
+ {
+ if (red > 14)
+ return 2;
+ else
+ return 9;
+ }
+
+ if (red > 19)
+ {
+ if (green > 11)
+ {
+ if (blue > 11)
+ {
+ if (green < blue)
+ return 8;
+ else
+ return 7;
+ }
+ else
+ {
+ return 10;
+ }
+ }
+ else if (blue > 11)
+ {
+ return 13;
+ }
+ else
+ {
+ return 4;
+ }
+ }
+
+ if (green > 19)
+ {
+ if (red > 11)
+ {
+ if (blue > 11)
+ {
+ if (red < blue)
+ return 9;
+ else
+ return 7;
+ }
+ else
+ {
+ return 11;
+ }
+ }
+ else
+ {
+ if (blue > 11)
+ return 14;
+ else
+ return 5;
+ }
+ }
+
+ if (blue > 19)
+ {
+ if (red > 11)
+ {
+ if (green > 11)
+ {
+ if (red < green)
+ return 9;
+ else
+ return 8;
+ }
+ }
+ else if (green > 11)
+ {
+ return 12;
+ }
+
+ if (blue > 11)
+ return 15;
+ else
+ return 6;
+ }
+
+ return 3;
+}
+
+u16 sub_80FE17C(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+ u16 average = ((red + green + blue) / 3) & 0x1E;
+ if (average == 0)
+ return 1;
+ else
+ return average / 2;
+}
+
+u16 sub_80FE1B0(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+ u16 average = (red + green + blue) / 3;
+ return average + 1;
+}