summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_weather.s171
-rw-r--r--include/field_weather.h3
-rw-r--r--src/field_weather.c147
3 files changed, 99 insertions, 222 deletions
diff --git a/asm/field_weather.s b/asm/field_weather.s
index 399bf65d1..eaa99d63e 100644
--- a/asm/field_weather.s
+++ b/asm/field_weather.s
@@ -5,177 +5,6 @@
.text
- thumb_func_start sub_807D1BC
-sub_807D1BC: @ 807D1BC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- ldr r4, [sp, 0x34]
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- mov r1, sp
- strh r4, [r1]
- ldr r1, [sp]
- lsls r3, r1, 27
- lsrs r3, 27
- str r3, [sp, 0x4]
- lsls r3, r1, 22
- lsrs r3, 27
- str r3, [sp, 0x8]
- lsls r1, 17
- lsrs r1, 27
- str r1, [sp, 0xC]
- lsls r6, r0, 4
- mov r3, r10
- adds r1, r3, r0
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- movs r1, 0xFF
- lsls r1, 24
- adds r2, r1
- lsrs r2, 24
- adds r4, r0, 0
- cmp r4, r10
- bcs _0807D2E8
- lsls r0, r2, 24
- asrs r0, 19
- str r0, [sp, 0x10]
-_0807D214:
- ldr r0, _0807D244 @ =gUnknown_030006DC
- ldr r0, [r0]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807D248
- mov r0, sp
- ldrh r3, [r0]
- adds r0, r6, 0
- movs r1, 0x10
- mov r2, r8
- bl BlendPalette
- adds r0, r6, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r6, r0, 16
- mov r3, r10
- lsls r3, 16
- mov r9, r3
- adds r4, 0x1
- mov r12, r4
- b _0807D2DE
- .align 2, 0
-_0807D244: .4byte gUnknown_030006DC
-_0807D248:
- cmp r0, 0x1
- bne _0807D258
- ldr r0, _0807D254 @ =gUnknown_0202F9E8
- ldr r1, [sp, 0x10]
- adds r5, r1, r0
- b _0807D25E
- .align 2, 0
-_0807D254: .4byte gUnknown_0202F9E8
-_0807D258:
- ldr r0, _0807D2F8 @ =gUnknown_0202FC48
- ldr r3, [sp, 0x10]
- adds r5, r3, r0
-_0807D25E:
- movs r7, 0
- mov r0, r10
- lsls r0, 16
- mov r9, r0
- adds r4, 0x1
- mov r12, r4
-_0807D26A:
- adds r4, r6, 0
- lsls r0, r4, 1
- ldr r1, _0807D2FC @ =gPlttBufferUnfaded
- adds r0, r1
- ldr r1, [r0]
- lsls r0, r1, 27
- lsrs r0, 27
- adds r0, r5, r0
- ldrb r3, [r0]
- lsls r0, r1, 22
- lsrs r0, 27
- adds r0, r5, r0
- ldrb r2, [r0]
- lsls r1, 17
- lsrs r1, 27
- adds r1, r5, r1
- ldrb r1, [r1]
- ldr r6, [sp, 0x4]
- subs r0, r6, r3
- mov r6, r8
- muls r6, r0
- adds r0, r6, 0
- asrs r0, 4
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- ldr r6, [sp, 0x8]
- subs r0, r6, r2
- mov r6, r8
- muls r6, r0
- adds r0, r6, 0
- asrs r0, 4
- adds r2, r0
- lsls r2, 24
- ldr r6, [sp, 0xC]
- subs r0, r6, r1
- mov r6, r8
- muls r6, r0
- adds r0, r6, 0
- asrs r0, 4
- adds r1, r0
- lsls r1, 24
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r4, 1
- ldr r0, _0807D300 @ =gPlttBufferFaded
- adds r4, r0
- lsrs r1, 14
- lsrs r2, 19
- orrs r1, r2
- orrs r1, r3
- strh r1, [r4]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0xF
- bls _0807D26A
-_0807D2DE:
- mov r1, r12
- lsls r0, r1, 16
- lsrs r4, r0, 16
- cmp r0, r9
- bcc _0807D214
-_0807D2E8:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D2F8: .4byte gUnknown_0202FC48
-_0807D2FC: .4byte gPlttBufferUnfaded
-_0807D300: .4byte gPlttBufferFaded
- thumb_func_end sub_807D1BC
-
thumb_func_start sub_807D304
sub_807D304: @ 807D304
push {r4-r7,lr}
diff --git a/include/field_weather.h b/include/field_weather.h
index 409f76028..bfa848d4f 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -20,7 +20,8 @@ void nullsub_39(void);
// ASM
void sub_807CEBC(u8, u8, s8);
-void sub_807D1BC(u8, u8, u8, u8, u16);
+//void sub_807D1BC(u8, u8, u8, u8, u16);
+void sub_807D1BC(u8 a, u8 a2, s8 c, u8 d, u16 e);
void sub_807D304(int, u8, u16);
void sub_807D424(u8, u16);
// ...
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++;
}
}