diff options
author | Phlosioneer <mattmdrr2@gmail.com> | 2019-04-07 01:56:36 -0400 |
---|---|---|
committer | Phlosioneer <mattmdrr2@gmail.com> | 2019-04-07 01:56:36 -0400 |
commit | d84d94e29a1424dd1d12ff821957bb6b1bc847d6 (patch) | |
tree | c5ba0778afca66a91f71815cd53fe9abef1bdac6 /src/contest_painting_effects.c | |
parent | ad2a97935e1c1f4362f0dffa58ef437d191bab4e (diff) | |
parent | c3cfd6065825ec8ddd5e1782998071518efaa322 (diff) |
Merge branch 'master' into pokenav-decomp-again
Diffstat (limited to 'src/contest_painting_effects.c')
-rw-r--r-- | src/contest_painting_effects.c | 701 |
1 files changed, 646 insertions, 55 deletions
diff --git a/src/contest_painting_effects.c b/src/contest_painting_effects.c index 142ad7bc9..a791df65c 100644 --- a/src/contest_painting_effects.c +++ b/src/contest_painting_effects.c @@ -3,6 +3,13 @@ #include "contest_painting.h" #include "constants/rgb.h" +struct Unk8125954 +{ + u8 unk0; + u8 unk1; + u16 unk2; +}; + // IWRAM common u8 gUnknown_03006164; u16 (*gUnknown_03006168)[][32]; @@ -12,32 +19,46 @@ u8 gUnknown_03006174; u8 gUnknown_03006178; u8 gUnknown_0300617C; u8 gUnknown_03006180; -u16 gUnknown_03006184; +u16 *gUnknown_03006184; u16 gUnknown_03006188; -// 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); +static void sub_8125230(void); +static void sub_81252E8(void); +static void sub_81254E0(void); +static void sub_8125630(void); +static void sub_8125448(void); +static void sub_81257F8(void); +static void sub_81258A0(void); +static void sub_81256C8(void); +static void sub_8125250(void); +static void sub_81253A4(u8); +static void sub_81250B8(u8); +static void sub_8125170(u8); +static void sub_8125954(u16); +static u16 ConvertColorToGrayscale(u16*); +static u16 sub_8125E18(u16*, u16*, u16*); +static u16 ConvertCoolColor(u16*, u8); +static u16 ConvertToBlackOrWhite(u16*); +static u16 sub_8125C98(u16*, u16*); +static u16 InvertColor(u16*); +static u16 sub_8125F38(u16*, u16*, u16*); +static u16 sub_8125CF4(u16*, u16*); +static u16 GetCoolColorFromPersonality(u8); +static void sub_81263A4(bool8); +static void sub_8126270(void); +static void sub_8126714(void); +static void sub_8126370(void); +static void sub_8126664(void); +static void sub_8126334(void); +static void sub_81265B4(void); +static void sub_8126318(void); +static void sub_81264FC(void); +static u16 sub_81267C4(u16*); +static u16 sub_8126908(u16*); +static u16 sub_812693C(u16*); +static u16 sub_8126838(u16*); + +extern const u8 gUnknown_085A1F94[][3]; void sub_8124F2C(struct Unk030061A0 *info) { @@ -104,7 +125,7 @@ void sub_8124F2C(struct Unk030061A0 *info) } } -void sub_81250B8(u8 a0) // it changes palette someway somehow... .__. +static void sub_81250B8(u8 a0) // it changes palette someway somehow... .__. { u8 i, j; @@ -127,7 +148,7 @@ void sub_81250B8(u8 a0) // it changes palette someway somehow... .__. } } -void sub_8125170(u8 a0) +static void sub_8125170(u8 a0) { u8 i, j; @@ -149,14 +170,14 @@ void sub_8125170(u8 a0) } } -void sub_8125230(void) +static void sub_8125230(void) { u32 i; for (i = 0; i < 3200; i++) sub_8125954(i); } -void sub_8125250(void) +static void sub_8125250(void) { u8 i, j; @@ -174,7 +195,7 @@ void sub_8125250(void) } } -void sub_81252E8(void) +static void sub_81252E8(void) { u8 i, j; @@ -200,7 +221,7 @@ void sub_81252E8(void) } } -void sub_81253A4(u8 arg0) +static void sub_81253A4(u8 arg0) { u8 i, j; @@ -218,7 +239,7 @@ void sub_81253A4(u8 arg0) } } -void sub_8125448(void) +static void sub_8125448(void) { u8 i, j; @@ -236,7 +257,7 @@ void sub_8125448(void) } } -void sub_81254E0(void) +static void sub_81254E0(void) { u8 i, j; u16 *palette; @@ -270,7 +291,7 @@ void sub_81254E0(void) } } -void sub_8125630(void) +static void sub_8125630(void) { u8 i, j; @@ -288,7 +309,7 @@ void sub_8125630(void) } } -void sub_81256C8(void) +static void sub_81256C8(void) { u8 i, j; u16 *palette; @@ -349,7 +370,7 @@ void sub_81256C8(void) } } -void sub_81257F8(void) +static void sub_81257F8(void) { u8 i, j; @@ -369,7 +390,7 @@ void sub_81257F8(void) } } -void sub_81258A0(void) +static void sub_81258A0(void) { u8 i, j; @@ -389,16 +410,7 @@ void sub_81258A0(void) } } -struct Unk8125954 -{ - u8 unk0; - u8 unk1; - u16 unk2; -}; - -extern const u8 gUnknown_085A1F94[][3]; - -void sub_8125954(u16 arg0) +static void sub_8125954(u16 arg0) { u8 i; u8 r5, r9; @@ -487,7 +499,7 @@ void sub_8125954(u16 arg0) } } -u16 ConvertColorToGrayscale(u16 *color) +static u16 ConvertColorToGrayscale(u16 *color) { s32 clr = *color; s32 r = clr & 0x1F; @@ -499,7 +511,7 @@ u16 ConvertColorToGrayscale(u16 *color) // The dark colors are the colored edges of the Cool painting effect. // Everything else is white. -u16 ConvertCoolColor(u16 *color, u8 personality) +static u16 ConvertCoolColor(u16 *color, u8 personality) { u16 red = *color & 0x1F; u16 green = (*color >> 5) & 0x1F; @@ -513,7 +525,7 @@ u16 ConvertCoolColor(u16 *color, u8 personality) // 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) +static u16 GetCoolColorFromPersonality(u8 personality) { u16 red = 0; u16 green = 0; @@ -564,7 +576,7 @@ u16 GetCoolColorFromPersonality(u8 personality) return RGB2(red, green, blue); } -u16 ConvertToBlackOrWhite(u16 *color) +static u16 ConvertToBlackOrWhite(u16 *color) { u16 red = *color & 0x1F; u16 green = (*color >> 5) & 0x1F; @@ -576,7 +588,7 @@ u16 ConvertToBlackOrWhite(u16 *color) return RGB_WHITE; } -u16 sub_8125C98(u16 *colorA, u16 *colorB) +static u16 sub_8125C98(u16 *colorA, u16 *colorB) { if (*colorA) { @@ -591,7 +603,7 @@ u16 sub_8125C98(u16 *colorA, u16 *colorB) return RGB_BLACK; } -u16 InvertColor(u16 *color) +static u16 InvertColor(u16 *color) { u16 red = *color & 0x1F; u16 green = (*color >> 5) & 0x1F; @@ -604,7 +616,7 @@ u16 InvertColor(u16 *color) return RGB2(red, green, blue); } -u16 sub_8125CF4(u16 *a0, u16 *a1) +static u16 sub_8125CF4(u16 *a0, u16 *a1) { u16 sp0[2][3]; u16 spC[3]; @@ -660,7 +672,7 @@ u16 sub_8125CF4(u16 *a0, u16 *a1) return RGB2(r, g, b); } -u16 sub_8125E18(u16 * a0, u16 * a1, u16 * a2) +static u16 sub_8125E18(u16 * a0, u16 * a1, u16 * a2) { u16 red, green, blue; u16 avg0, avg1, avg2; @@ -704,7 +716,7 @@ u16 sub_8125E18(u16 * a0, u16 * a1, u16 * a2) return RGB2(red, green, blue); } -u16 sub_8125F38(u16 *a0, u16 *a1, u16 *a2) +static u16 sub_8125F38(u16 *a0, u16 *a1, u16 *a2) { u16 red, green, blue; u16 avg0, avg1, avg2; @@ -772,3 +784,582 @@ void sub_8126058(struct Unk030061A0 *arg0) } } */ + +NAKED +void sub_8126058(struct Unk030061A0 *arg0) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0xC\n\ + ldrb r1, [r0, 0x1D]\n\ + lsrs r5, r1, 3\n\ + ldrb r1, [r0, 0x1E]\n\ + lsrs r1, 3\n\ + str r1, [sp, 0x8]\n\ + ldr r1, [r0, 0x4]\n\ + str r1, [sp]\n\ + ldr r2, [r0, 0x10]\n\ + str r2, [sp, 0x4]\n\ + ldrh r0, [r0, 0x16]\n\ + cmp r0, 0x2\n\ + bne _08126108\n\ + movs r1, 0\n\ + ldr r0, [sp, 0x8]\n\ + cmp r1, r0\n\ + bcc _08126086\n\ + b _08126194\n\ +_08126086:\n\ + movs r0, 0\n\ + adds r2, r1, 0x1\n\ + mov r10, r2\n\ + cmp r0, r5\n\ + bcs _081260FA\n\ + adds r2, r1, 0\n\ + muls r2, r5\n\ + mov r9, r2\n\ + lsls r1, 3\n\ + mov r8, r1\n\ +_0812609A:\n\ + movs r4, 0\n\ + lsls r6, r0, 4\n\ + adds r7, r0, 0x1\n\ + add r0, r9\n\ + lsls r0, 6\n\ + ldr r1, [sp, 0x4]\n\ + adds r1, r0\n\ + mov r12, r1\n\ +_081260AA:\n\ + lsls r0, r4, 3\n\ + mov r2, r12\n\ + adds r3, r2, r0\n\ + mov r1, r8\n\ + adds r0, r1, r4\n\ + lsls r0, 3\n\ + muls r0, r5\n\ + lsls r0, 1\n\ + ldr r2, [sp]\n\ + adds r0, r2, r0\n\ + adds r2, r0, r6\n\ + ldrh r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + ldrh r1, [r2]\n\ + orrs r0, r1\n\ + strh r0, [r3]\n\ + ldrh r0, [r2, 0x6]\n\ + lsls r0, 8\n\ + ldrh r1, [r2, 0x4]\n\ + orrs r0, r1\n\ + strh r0, [r3, 0x2]\n\ + ldrh r0, [r2, 0xA]\n\ + lsls r0, 8\n\ + ldrh r1, [r2, 0x8]\n\ + orrs r0, r1\n\ + strh r0, [r3, 0x4]\n\ + ldrh r0, [r2, 0xE]\n\ + lsls r0, 8\n\ + ldrh r1, [r2, 0xC]\n\ + orrs r0, r1\n\ + strh r0, [r3, 0x6]\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + cmp r4, 0x7\n\ + bls _081260AA\n\ + lsls r0, r7, 16\n\ + lsrs r0, 16\n\ + cmp r0, r5\n\ + bcc _0812609A\n\ +_081260FA:\n\ + mov r1, r10\n\ + lsls r0, r1, 16\n\ + lsrs r1, r0, 16\n\ + ldr r2, [sp, 0x8]\n\ + cmp r1, r2\n\ + bcc _08126086\n\ + b _08126194\n\ +_08126108:\n\ + movs r1, 0\n\ + ldr r0, [sp, 0x8]\n\ + cmp r1, r0\n\ + bcs _08126194\n\ +_08126110:\n\ + movs r0, 0\n\ + adds r2, r1, 0x1\n\ + mov r10, r2\n\ + cmp r0, r5\n\ + bcs _08126188\n\ + adds r2, r1, 0\n\ + muls r2, r5\n\ + mov r9, r2\n\ + lsls r1, 3\n\ + mov r8, r1\n\ +_08126124:\n\ + movs r4, 0\n\ + lsls r6, r0, 4\n\ + adds r7, r0, 0x1\n\ + add r0, r9\n\ + lsls r0, 5\n\ + ldr r1, [sp, 0x4]\n\ + adds r1, r0\n\ + mov r12, r1\n\ +_08126134:\n\ + lsls r0, r4, 2\n\ + mov r2, r12\n\ + adds r3, r2, r0\n\ + mov r1, r8\n\ + adds r0, r1, r4\n\ + lsls r0, 3\n\ + muls r0, r5\n\ + lsls r0, 1\n\ + ldr r2, [sp]\n\ + adds r0, r2, r0\n\ + adds r2, r0, r6\n\ + ldrh r1, [r2, 0x2]\n\ + lsls r1, 4\n\ + ldrh r0, [r2]\n\ + orrs r1, r0\n\ + ldrh r0, [r2, 0x4]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrh r0, [r2, 0x6]\n\ + lsls r0, 12\n\ + orrs r1, r0\n\ + strh r1, [r3]\n\ + ldrh r1, [r2, 0xA]\n\ + lsls r1, 4\n\ + ldrh r0, [r2, 0x8]\n\ + orrs r1, r0\n\ + ldrh r0, [r2, 0xC]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrh r0, [r2, 0xE]\n\ + lsls r0, 12\n\ + orrs r1, r0\n\ + strh r1, [r3, 0x2]\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + cmp r4, 0x7\n\ + bls _08126134\n\ + lsls r0, r7, 16\n\ + lsrs r0, 16\n\ + cmp r0, r5\n\ + bcc _08126124\n\ +_08126188:\n\ + mov r1, r10\n\ + lsls r0, r1, 16\n\ + lsrs r1, r0, 16\n\ + ldr r2, [sp, 0x8]\n\ + cmp r1, r2\n\ + bcc _08126110\n\ +_08126194:\n\ + add sp, 0xC\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0"); +} + +void sub_81261A4(struct Unk030061A0 *arg0) +{ + gUnknown_03006188 = arg0->var_18 * 16; + gUnknown_03006184 = &arg0->var_8[gUnknown_03006188]; + gUnknown_03006168 = arg0->var_4; + gUnknown_03006164 = arg0->var_19; + gUnknown_03006178 = arg0->var_1A; + gUnknown_03006174 = arg0->var_1B; + gUnknown_0300616C = arg0->var_1C; + gUnknown_03006180 = arg0->var_1D; + gUnknown_03006170 = arg0->var_1E; + + switch (arg0->var_14) + { + case 0: + sub_81263A4(FALSE); + break; + case 1: + sub_81263A4(TRUE); + break; + case 2: + sub_8126270(); + sub_8126714(); + break; + case 3: + sub_8126370(); + sub_8126664(); + break; + case 4: + sub_8126334(); + sub_81265B4(); + break; + case 5: + sub_8126318(); + sub_81264FC(); + break; + } +} + +static void sub_8126270(void) +{ + gUnknown_03006184[0] = RGB2(0, 0, 0); + gUnknown_03006184[1] = RGB2(6, 6, 6); + gUnknown_03006184[2] = RGB2(29, 29, 29); + gUnknown_03006184[3] = RGB2(11, 11, 11); + gUnknown_03006184[4] = RGB2(29, 6, 6); + gUnknown_03006184[5] = RGB2(6, 29, 6); + gUnknown_03006184[6] = RGB2(6, 6, 29); + gUnknown_03006184[7] = RGB2(29, 29, 6); + gUnknown_03006184[8] = RGB2(29, 6, 29); + gUnknown_03006184[9] = RGB2(6, 29, 29); + gUnknown_03006184[10] = RGB2(29, 11, 6); + gUnknown_03006184[11] = RGB2(11, 29, 6); + gUnknown_03006184[12] = RGB2(6, 11, 29); + gUnknown_03006184[13] = RGB2(29, 6, 11); + gUnknown_03006184[14] = RGB2(6, 29, 11); + gUnknown_03006184[15] = RGB2(11, 6, 29); +} + +static void sub_8126318(void) +{ + gUnknown_03006184[0] = RGB2(0, 0, 0); + gUnknown_03006184[1] = RGB2(0, 0, 0); + gUnknown_03006184[2] = RGB2(31, 31, 31); +} + +static void sub_8126334(void) +{ + u8 i; + + gUnknown_03006184[0] = RGB2(0, 0, 0); + gUnknown_03006184[1] = RGB2(0, 0, 0); + for (i = 0; i < 14; i++) + gUnknown_03006184[i + 2] = RGB2(2 * (i + 2), 2 * (i + 2), 2 * (i + 2)); +} + +static void sub_8126370(void) +{ + u8 i; + + gUnknown_03006184[0] = RGB2(0, 0, 0); + for (i = 0; i < 32; i++) + gUnknown_03006184[i + 1] = RGB2(i, i, i); +} + +static void sub_81263A4(bool8 arg0) +{ + u8 i, j; + u16 maxIndex; + + maxIndex = 0xDF; + if (!arg0) + maxIndex = 0xFF; + + for (j = 0; j < maxIndex; j++) + gUnknown_03006184[j] = 0; + + gUnknown_03006184[maxIndex] = RGB2(15, 15, 15); + 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 (*pal & 0x8000) + { + *pal = gUnknown_03006188; + } + else + { + u16 color = sub_81267C4(pal); + u8 curIndex = 1; + if (curIndex < maxIndex) + { + if (gUnknown_03006184[curIndex] == RGB_BLACK) + { + gUnknown_03006184[curIndex] = color; + *pal = gUnknown_03006188 + curIndex; + } + else + { + while (curIndex < maxIndex) + { + if (gUnknown_03006184[curIndex] == RGB_BLACK) + { + gUnknown_03006184[curIndex] = color; + *pal = gUnknown_03006188 + curIndex; + break; + } + + if (gUnknown_03006184[curIndex] == color) + { + *pal = gUnknown_03006188 + curIndex; + break; + } + + curIndex++; + } + } + } + + if (curIndex == maxIndex) + { + curIndex = maxIndex; + *pal = curIndex; + } + } + } + } +} + +static void sub_81264FC(void) +{ + 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 (*pal & 0x8000) + { + *pal = gUnknown_03006188; + } + else + { + if (ConvertToBlackOrWhite(pal) == RGB_BLACK) + *pal = gUnknown_03006188 + 1; + else + *pal = gUnknown_03006188 + 2; + } + } + } +} + +static void sub_81265B4(void) +{ + 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 (*pal & 0x8000) + *pal = gUnknown_03006188; + else + *pal = sub_8126908(pal) + gUnknown_03006188; + } + } +} + +static void sub_8126664(void) +{ + 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 (*pal & 0x8000) + *pal = gUnknown_03006188; + else + *pal = sub_812693C(pal) + gUnknown_03006188; + } + } +} + +static void sub_8126714(void) +{ + 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 (*pal & 0x8000) + *pal = gUnknown_03006188; + else + *pal = sub_8126838(pal) + gUnknown_03006188; + } + } +} + +static u16 sub_81267C4(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); +} + +static u16 sub_8126838(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; +} + +static u16 sub_8126908(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; +} + +static u16 sub_812693C(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; +} |