summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-09-22 20:29:41 -0500
committercamthesaxman <cameronghall@cox.net>2017-09-22 20:29:41 -0500
commitba06c424c974f18f9c4af85eb0ffe8adc6056941 (patch)
treec0cf975b0dee6ba8b25fa76c9bf596d0b6cb64e0
parentd40d0ee267a4ac1401ff6b4fe600159a21bd2cb3 (diff)
decompile sub_807F434 - sub_807F688
-rw-r--r--asm/field_weather.s352
-rw-r--r--src/field_weather.c121
2 files changed, 120 insertions, 353 deletions
diff --git a/asm/field_weather.s b/asm/field_weather.s
index 4b28daca1..d42926db8 100644
--- a/asm/field_weather.s
+++ b/asm/field_weather.s
@@ -5,358 +5,6 @@
.text
- thumb_func_start sub_807F434
-sub_807F434: @ 807F434
- push {r4,lr}
- ldr r0, _0807F46C @ =gUnknown_08396FC4
- ldr r1, [r0]
- ldr r2, _0807F470 @ =0x000006ed
- adds r0, r1, r2
- ldrb r4, [r0]
- cmp r4, 0x1
- bne _0807F494
- movs r0, 0xDD
- lsls r0, 3
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- bne _0807F490
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _0807F494
- bl Random
- ands r4, r0
- cmp r4, 0
- beq _0807F474
- movs r0, 0x57
- bl PlaySE
- b _0807F47A
- .align 2, 0
-_0807F46C: .4byte gUnknown_08396FC4
-_0807F470: .4byte 0x000006ed
-_0807F474:
- movs r0, 0x58
- bl PlaySE
-_0807F47A:
- ldr r0, _0807F488 @ =gUnknown_08396FC4
- ldr r0, [r0]
- ldr r1, _0807F48C @ =0x000006ed
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- b _0807F494
- .align 2, 0
-_0807F488: .4byte gUnknown_08396FC4
-_0807F48C: .4byte 0x000006ed
-_0807F490:
- subs r0, 0x1
- strh r0, [r1]
-_0807F494:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_807F434
-
- thumb_func_start sub_807F49C
-sub_807F49C: @ 807F49C
- push {lr}
- ldr r0, _0807F4E8 @ =gUnknown_08396FC4
- ldr r3, [r0]
- ldr r0, _0807F4EC @ =0x000006cc
- adds r1, r3, r0
- movs r2, 0
- movs r0, 0
- strh r0, [r1]
- ldr r1, _0807F4F0 @ =0x000006d2
- adds r0, r3, r1
- strb r2, [r0]
- subs r1, 0x11
- adds r0, r3, r1
- strb r2, [r0]
- ldr r2, _0807F4F4 @ =0x000006c2
- adds r1, r3, r2
- movs r0, 0x14
- strb r0, [r1]
- ldr r1, _0807F4F8 @ =0x000006fb
- adds r0, r3, r1
- ldrb r1, [r0]
- cmp r1, 0
- bne _0807F4E4
- adds r2, 0x2E
- adds r0, r3, r2
- strh r1, [r0]
- adds r2, 0x2
- adds r0, r3, r2
- strh r1, [r0]
- subs r2, 0x4
- adds r0, r3, r2
- strh r1, [r0]
- movs r0, 0
- movs r1, 0x10
- bl sub_807DB64
-_0807F4E4:
- pop {r0}
- bx r0
- .align 2, 0
-_0807F4E8: .4byte gUnknown_08396FC4
-_0807F4EC: .4byte 0x000006cc
-_0807F4F0: .4byte 0x000006d2
-_0807F4F4: .4byte 0x000006c2
-_0807F4F8: .4byte 0x000006fb
- thumb_func_end sub_807F49C
-
- thumb_func_start sub_807F4FC
-sub_807F4FC: @ 807F4FC
- push {r4,lr}
- bl sub_807F49C
- ldr r0, _0807F524 @ =gUnknown_08396FC4
- ldr r1, [r0]
- ldr r2, _0807F528 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807F51C
- adds r4, r1, r2
-_0807F512:
- bl sub_807F52C
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807F512
-_0807F51C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807F524: .4byte gUnknown_08396FC4
-_0807F528: .4byte 0x000006d2
- thumb_func_end sub_807F4FC
-
- thumb_func_start sub_807F52C
-sub_807F52C: @ 807F52C
- push {r4-r6,lr}
- ldr r0, _0807F578 @ =gUnknown_08396FC4
- ldr r6, [r0]
- ldr r0, _0807F57C @ =gSpriteCoordOffsetX
- ldr r1, _0807F580 @ =0x000006f2
- adds r2, r6, r1
- ldrh r0, [r0]
- ldrh r1, [r2]
- subs r0, r1
- movs r1, 0xFF
- ands r0, r1
- ldr r3, _0807F584 @ =0x000006ee
- adds r1, r6, r3
- strh r0, [r1]
- movs r0, 0xDE
- lsls r0, 3
- adds r1, r6, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x3
- bls _0807F566
- movs r0, 0
- strh r0, [r1]
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
-_0807F566:
- ldr r1, _0807F588 @ =0x000006cc
- adds r5, r6, r1
- ldrh r4, [r5]
- cmp r4, 0
- beq _0807F58C
- cmp r4, 0x1
- beq _0807F5CC
- b _0807F5E2
- .align 2, 0
-_0807F578: .4byte gUnknown_08396FC4
-_0807F57C: .4byte gSpriteCoordOffsetX
-_0807F580: .4byte 0x000006f2
-_0807F584: .4byte 0x000006ee
-_0807F588: .4byte 0x000006cc
-_0807F58C:
- bl sub_807F6E8
- movs r3, 0xDA
- lsls r3, 3
- adds r0, r6, r3
- ldrb r0, [r0]
- cmp r0, 0x6
- bne _0807F5A8
- movs r0, 0xC
- movs r1, 0x8
- movs r2, 0x3
- bl sub_807DBA4
- b _0807F5B2
-_0807F5A8:
- movs r0, 0x4
- movs r1, 0x10
- movs r2, 0
- bl sub_807DBA4
-_0807F5B2:
- ldr r0, _0807F5C4 @ =gUnknown_08396FC4
- ldr r1, [r0]
- ldr r0, _0807F5C8 @ =0x000006cc
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _0807F5E2
- .align 2, 0
-_0807F5C4: .4byte gUnknown_08396FC4
-_0807F5C8: .4byte 0x000006cc
-_0807F5CC:
- bl sub_807DBE8
- lsls r0, 24
- cmp r0, 0
- beq _0807F5E2
- ldr r1, _0807F5E8 @ =0x000006d2
- adds r0, r6, r1
- strb r4, [r0]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_0807F5E2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807F5E8: .4byte 0x000006d2
- thumb_func_end sub_807F52C
-
- thumb_func_start sub_807F5EC
-sub_807F5EC: @ 807F5EC
- push {r4,lr}
- ldr r0, _0807F63C @ =gUnknown_08396FC4
- ldr r2, [r0]
- ldr r0, _0807F640 @ =gSpriteCoordOffsetX
- ldr r1, _0807F644 @ =0x000006f2
- adds r3, r2, r1
- ldrh r0, [r0]
- ldrh r1, [r3]
- subs r0, r1
- movs r1, 0xFF
- ands r0, r1
- ldr r4, _0807F648 @ =0x000006ee
- adds r1, r2, r4
- strh r0, [r1]
- movs r0, 0xDE
- lsls r0, 3
- adds r1, r2, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x3
- bls _0807F626
- movs r0, 0
- strh r0, [r1]
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
-_0807F626:
- ldr r1, _0807F64C @ =0x000006ce
- adds r4, r2, r1
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807F662
- cmp r0, 0x1
- bgt _0807F650
- cmp r0, 0
- beq _0807F656
- b _0807F67A
- .align 2, 0
-_0807F63C: .4byte gUnknown_08396FC4
-_0807F640: .4byte gSpriteCoordOffsetX
-_0807F644: .4byte 0x000006f2
-_0807F648: .4byte 0x000006ee
-_0807F64C: .4byte 0x000006ce
-_0807F650:
- cmp r0, 0x2
- beq _0807F66E
- b _0807F67A
-_0807F656:
- movs r0, 0
- movs r1, 0x10
- movs r2, 0x3
- bl sub_807DBA4
- b _0807F672
-_0807F662:
- bl sub_807DBE8
- lsls r0, 24
- cmp r0, 0
- beq _0807F67E
- b _0807F672
-_0807F66E:
- bl sub_807F7A4
-_0807F672:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807F67E
-_0807F67A:
- movs r0, 0
- b _0807F680
-_0807F67E:
- movs r0, 0x1
-_0807F680:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_807F5EC
-
- thumb_func_start sub_807F688
-sub_807F688: @ 807F688
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, _0807F6D4 @ =gSpriteCoordOffsetY
- ldrb r0, [r0]
- strh r0, [r3, 0x26]
- ldr r0, _0807F6D8 @ =gUnknown_08396FC4
- ldr r0, [r0]
- ldr r1, _0807F6DC @ =0x000006ee
- adds r2, r0, r1
- ldrh r1, [r2]
- adds r1, 0x20
- movs r4, 0x2E
- ldrsh r0, [r3, r4]
- lsls r0, 6
- adds r1, r0
- strh r1, [r3, 0x20]
- lsls r1, 16
- ldr r0, _0807F6E0 @ =0x010f0000
- cmp r1, r0
- ble _0807F6CC
- movs r0, 0xF0
- lsls r0, 1
- adds r1, r0, 0
- ldrh r2, [r2]
- adds r1, r2
- movs r4, 0x2E
- ldrsh r2, [r3, r4]
- movs r0, 0x4
- subs r0, r2
- lsls r0, 6
- subs r1, r0
- ldr r0, _0807F6E4 @ =0x000001ff
- ands r1, r0
- strh r1, [r3, 0x20]
-_0807F6CC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807F6D4: .4byte gSpriteCoordOffsetY
-_0807F6D8: .4byte gUnknown_08396FC4
-_0807F6DC: .4byte 0x000006ee
-_0807F6E0: .4byte 0x010f0000
-_0807F6E4: .4byte 0x000001ff
- thumb_func_end sub_807F688
-
thumb_func_start sub_807F6E8
sub_807F6E8: @ 807F6E8
push {r4,r5,lr}
diff --git a/src/field_weather.c b/src/field_weather.c
index 08eee454c..c4fb4872f 100644
--- a/src/field_weather.c
+++ b/src/field_weather.c
@@ -74,7 +74,9 @@ struct Weather
u8 unknown_6EB;
u8 unknown_6EC;
u8 unknown_6ED;
- u8 filler_6EE[0xF4-0xEE];
+ u16 unknown_6EE;
+ u16 unknown_6F0;
+ u16 unknown_6F2;
u8 unknown_6F4[6];
u8 unknown_6FA;
u8 unknown_6FB;
@@ -2024,3 +2026,120 @@ void sub_807F3F8(u16 a)
gUnknown_08396FC4->unknown_6ED = 1;
}
}
+
+void sub_807F434(void)
+{
+ if (gUnknown_08396FC4->unknown_6ED == 1)
+ {
+ if (gUnknown_08396FC4->unknown_6E8 == 0)
+ {
+ if (IsSEPlaying())
+ return;
+ if (Random() & 1)
+ PlaySE(0x57);
+ else
+ PlaySE(0x58);
+ gUnknown_08396FC4->unknown_6ED = 0;
+ }
+ else
+ {
+ gUnknown_08396FC4->unknown_6E8--;
+ }
+ }
+}
+
+void sub_807F49C(void)
+{
+ gUnknown_08396FC4->unknown_6CC = 0;
+ gUnknown_08396FC4->unknown_6D2 = 0;
+ gUnknown_08396FC4->unknown_6C1 = 0;
+ gUnknown_08396FC4->unknown_6C2 = 20;
+ if (gUnknown_08396FC4->unknown_6FB == 0)
+ {
+ gUnknown_08396FC4->unknown_6F0 = 0;
+ gUnknown_08396FC4->unknown_6F2 = 0;
+ gUnknown_08396FC4->unknown_6EE = 0;
+ sub_807DB64(0, 16);
+ }
+}
+
+void sub_807F52C(void);
+
+void sub_807F4FC(void)
+{
+ sub_807F49C();
+ while (gUnknown_08396FC4->unknown_6D2 == 0)
+ sub_807F52C();
+}
+
+void sub_807F6E8(void);
+
+void sub_807F52C(void)
+{
+ gUnknown_08396FC4->unknown_6EE = (gSpriteCoordOffsetX - gUnknown_08396FC4->unknown_6F2) & 0xFF;
+ if (++gUnknown_08396FC4->unknown_6F0 > 3)
+ {
+ gUnknown_08396FC4->unknown_6F0 = 0;
+ gUnknown_08396FC4->unknown_6F2++;
+ }
+ switch (gUnknown_08396FC4->unknown_6CC)
+ {
+ case 0:
+ sub_807F6E8();
+ if (gUnknown_08396FC4->unknown_6D0 == 6)
+ sub_807DBA4(12, 8, 3);
+ else
+ sub_807DBA4(4, 16, 0);
+ gUnknown_08396FC4->unknown_6CC++;
+ break;
+ case 1:
+ if (sub_807DBE8())
+ {
+ gUnknown_08396FC4->unknown_6D2 = 1;
+ gUnknown_08396FC4->unknown_6CC++;
+ }
+ break;
+ }
+}
+
+void sub_807F7A4(void);
+
+bool8 sub_807F5EC(void)
+{
+ gUnknown_08396FC4->unknown_6EE = (gSpriteCoordOffsetX - gUnknown_08396FC4->unknown_6F2) & 0xFF;
+ if (++gUnknown_08396FC4->unknown_6F0 > 3)
+ {
+ gUnknown_08396FC4->unknown_6F0 = 0;
+ gUnknown_08396FC4->unknown_6F2++;
+ }
+ switch (gUnknown_08396FC4->unknown_6CE)
+ {
+ case 0:
+ sub_807DBA4(0, 16, 3);
+ gUnknown_08396FC4->unknown_6CE++;
+ break;
+ case 1:
+ if (!sub_807DBE8())
+ break;
+ gUnknown_08396FC4->unknown_6CE++;
+ break;
+ case 2:
+ sub_807F7A4();
+ gUnknown_08396FC4->unknown_6CE++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void sub_807F688(struct Sprite *sprite)
+{
+ sprite->pos2.y = (u8)gSpriteCoordOffsetY;
+ sprite->pos1.x = gUnknown_08396FC4->unknown_6EE + 32 + sprite->data0 * 64;
+ if (sprite->pos1.x > 0x10F)
+ {
+ sprite->pos1.x = 480 + gUnknown_08396FC4->unknown_6EE - (4 - sprite->data0) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}