diff options
-rw-r--r-- | asm/field_weather.s | 352 | ||||
-rw-r--r-- | src/field_weather.c | 121 |
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; + } +} |