summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-09-20 11:12:52 -0500
committercamthesaxman <cameronghall@cox.net>2017-09-20 11:12:52 -0500
commit1f74ac11c84c3e62854effebe5eda240991567f2 (patch)
treef0f4410a6cc0e167649fe78fa9e15e85c0d7d7d8 /src
parent93d274828bb6efea08e0ef451ec2a832d4cfc8f0 (diff)
decompile sub_807D1BC
Diffstat (limited to 'src')
-rw-r--r--src/field_weather.c147
1 files changed, 97 insertions, 50 deletions
diff --git a/src/field_weather.c b/src/field_weather.c
index 366d57824..8807362e2 100644
--- a/src/field_weather.c
+++ b/src/field_weather.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "blend_palette.h"
#include "field_weather.h"
#include "palette.h"
#include "sprite.h"
@@ -61,8 +62,9 @@ extern u8 (*gUnknown_08396FC8[][4])(void);
extern u8 (*gUnknown_083970B8[])(void);
extern u8 *gUnknown_030006DC;
extern u8 gUnknown_083970C8;
-extern u8 (*gUnknown_0202FC48)[32];
-extern u8 gUnknown_0202F9E8[32];
+//extern u8 (*gUnknown_0202FC48)[32];
+extern u8 gUnknown_0202FC48[][32];
+extern u8 gUnknown_0202F9E8[][32];
void sub_807C828(void)
@@ -188,9 +190,10 @@ void sub_807CB10(void)
for (v0 = 0; v0 <= 1; v0++)
{
if (v0 == 0)
- v1 = &gUnknown_0202F9E8;
+ v1 = (void *)&gUnknown_0202F9E8;
else
- v1 = &gUnknown_0202F9E8 + 19;
+ //v1 = (void *)(&gUnknown_0202F9E8 + 19);
+ v1 = &gUnknown_0202F9E8[19];
for (v2 = 0; (u16)v2 <= 0x1f; v2++)
{
@@ -369,22 +372,22 @@ struct Struct2000000
void sub_807CEBC(u8 a, u8 b, s8 c)
{
u16 r4;
- u16 r5;
+ u16 palOffset;
u8 *r6;
- u16 r7;
+ u16 i;
if (c > 0)
{
c = c - 1;
- r5 = a * 16;
+ palOffset = a * 16;
b += a;
r4 = a;
while (r4 < b)
{
if (gUnknown_030006DC[r4] == 0)
{
- CpuFastCopy(gPlttBufferUnfaded + r5, gPlttBufferFaded + r5, 16 * sizeof(u16));
- r5 += 16;
+ CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
+ palOffset += 16;
}
else
{
@@ -396,80 +399,124 @@ void sub_807CEBC(u8 a, u8 b, s8 c)
r6 = gUnknown_0202F7E8.unknown_200[c];
if (r4 == 16 || r4 > 0x1B)
{
- for (r7 = 0; r7 < 16; r7++)
+ for (i = 0; i < 16; i++)
{
- if (gPlttBufferUnfaded[r5] == 0x2D9F)
+ if (gPlttBufferUnfaded[palOffset] == 0x2D9F)
{
- r5++;
+ palOffset++;
}
else
{
- struct RGBColor r1 = *(struct RGBColor *)&gPlttBufferUnfaded[r5];
- r = r6[r1.r];
- g = r6[r1.g];
- b = r6[r1.b];
+ struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
- gPlttBufferFaded[r5++] = (b << 10) | (g << 5) | r;
+ r = r6[color.r];
+ g = r6[color.g];
+ b = r6[color.b];
+ gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
}
}
}
else
{
- for (r7 = 0; r7 < 16; r7++)
+ for (i = 0; i < 16; i++)
{
- struct RGBColor r1 = *(struct RGBColor *)&gPlttBufferUnfaded[r5];
- r = r6[r1.r];
- g = r6[r1.g];
- b = r6[r1.b];
+ struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
- gPlttBufferFaded[r5++] = (b << 10) | (g << 5) | r;
+ r = r6[color.r];
+ g = r6[color.g];
+ b = r6[color.b];
+ gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
}
}
}
r4++;
}
}
- else
+ else if (c < 0)
{
- if (c < 0)
+ c = -c - 1;
+ palOffset = a * 16;
+ b += a;
+ r4 = a;
+ while (r4 < b)
{
- c = -c - 1;
- r5 = a * 16;
- b += a;
- r4 = a;
- while (r4 < b)
+ if (gUnknown_030006DC[r4] == 0)
{
- if (gUnknown_030006DC[r4] == 0)
+ CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
+ palOffset += 16;
+ }
+ else
+ {
+ if (r4 == 16 || r4 > 0x1B)
{
- CpuFastCopy(gPlttBufferUnfaded + r5, gPlttBufferFaded + r5, 16 * sizeof(u16));
- r5 += 16;
+ for (i = 0; i < 16; i++)
+ {
+ if (gPlttBufferUnfaded[palOffset] != 0x2D9F)
+ gPlttBufferFaded[palOffset] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[palOffset])];
+ palOffset++;
+ }
}
else
{
- if (r4 == 16 || r4 > 0x1B)
+ for (i = 0; i < 16; i++)
{
- for (r7 = 0; r7 < 16; r7++)
- {
- if (gPlttBufferUnfaded[r5] != 0x2D9F)
- gPlttBufferFaded[r5] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[r5])];
- r5++;
- }
- }
- else
- {
- for (r7 = 0; r7 < 16; r7++)
- {
- gPlttBufferFaded[r5] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[r5])];
- r5++;
- }
+ gPlttBufferFaded[palOffset] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[palOffset])];
+ palOffset++;
}
}
- r4++;
}
+ r4++;
+ }
+ }
+ else
+ {
+ CpuFastCopy(gPlttBufferUnfaded + a * 16, gPlttBufferFaded + a * 16, b * 16 * sizeof(u16));
+ }
+}
+
+void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e)
+{
+ u16 palOffset;
+ u16 r4;
+ u16 i;
+ struct RGBColor color = *(struct RGBColor *)&e;
+ u8 r_ = color.r;
+ u8 g_ = color.g;
+ u8 b_ = color.b;
+
+ palOffset = a1 * 16;
+ a2 += a1;
+ c = c - 1;
+ r4 = a1;
+ while (r4 < a2)
+ {
+ if (gUnknown_030006DC[r4] == 0)
+ {
+ BlendPalette(palOffset, 16, d, e);
+ palOffset += 16;
}
else
{
- CpuFastCopy(gPlttBufferUnfaded + a * 16, gPlttBufferFaded + a * 16, b * 16 * sizeof(u16));
+ u8 *r5;
+
+ if (gUnknown_030006DC[r4] == 1)
+ r5 = gUnknown_0202F9E8[c];
+ else
+ r5 = gUnknown_0202FC48[c];
+
+ for (i = 0; i < 16; i++)
+ {
+ struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ u8 r = r5[color.r];
+ u8 g = r5[color.g];
+ u8 b = r5[color.b];
+
+ r += ((r_ - r) * d) >> 4;
+ g += ((g_ - g) * d) >> 4;
+ b += ((b_ - b) * d) >> 4;
+ gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
+ }
}
+ r4++;
}
}