diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2017-11-25 13:29:59 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-25 13:29:59 -0600 |
commit | 20c5936f0c9fd15d34fce0409e8835282ea2fcaf (patch) | |
tree | b6f63c6ed83b72741af2e30d990cb4f931d8fc8d | |
parent | cc03fa4c4046c4ab4dc11234ca1dde1f888fa9bf (diff) | |
parent | c9a21f43bd074e532c745560b1d7d412f6ea8456 (diff) |
Merge pull request #474 from camthesaxman/decompile_field_weather
split field_weather.c and convert more data
-rw-r--r-- | asm/cable_car.s | 24 | ||||
-rw-r--r-- | asm/field_weather.s | 184 | ||||
-rw-r--r-- | data/field_weather.s | 395 | ||||
-rw-r--r-- | include/field_weather.h | 92 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/field/field_weather.c | 1640 | ||||
-rw-r--r-- | src/field/field_weather_2.c | 1511 | ||||
-rw-r--r-- | sym_ewram.txt | 2 |
8 files changed, 2037 insertions, 1813 deletions
diff --git a/asm/cable_car.s b/asm/cable_car.s index 8283a58aa..abafe5500 100644 --- a/asm/cable_car.s +++ b/asm/cable_car.s @@ -206,7 +206,7 @@ _08123384: bl ResetPaletteFade bl sub_807C828 movs r4, 0 - ldr r0, _081233D4 @ =gUnknown_08396FC4 + ldr r0, _081233D4 @ =gWeatherPtr ldr r0, [r0] adds r1, r0, 0 adds r1, 0xF0 @@ -234,7 +234,7 @@ _081233A4: adds r0, 0x1 b _0812370C .align 2, 0 -_081233D4: .4byte gUnknown_08396FC4 +_081233D4: .4byte gWeatherPtr _081233D8: .4byte gSpriteCoordOffsetX _081233DC: .4byte gSpriteCoordOffsetY _081233E0: .4byte gMain @@ -326,7 +326,7 @@ _081234A0: _081234B4: .4byte gUnknown_02039274 _081234B8: .4byte 0x0000043c _081234BC: - ldr r0, _081234FC @ =gUnknown_08396FC4 + ldr r0, _081234FC @ =gWeatherPtr ldr r0, [r0] adds r1, r0, 0 adds r1, 0xF0 @@ -361,7 +361,7 @@ _081234E6: adds r0, 0x1 b _0812370C .align 2, 0 -_081234FC: .4byte gUnknown_08396FC4 +_081234FC: .4byte gWeatherPtr _08123500: .4byte 0x0000043c _08123504: ldr r0, _08123578 @ =0x0600e800 @@ -630,7 +630,7 @@ sub_8123740: @ 8123740 movs r0, 0 bl sub_807C9B4 add r7, sp, 0x4 - ldr r0, _08123858 @ =gUnknown_08396FC4 + ldr r0, _08123858 @ =gWeatherPtr ldr r0, [r0] adds r1, r0, 0 adds r1, 0xF0 @@ -754,7 +754,7 @@ _081237E0: bx r0 .align 2, 0 _08123854: .4byte gSpriteCoordOffsetX -_08123858: .4byte gUnknown_08396FC4 +_08123858: .4byte gWeatherPtr _0812385C: .4byte gSharedMem _08123860: .4byte 0x040000d4 _08123864: .4byte 0x85000400 @@ -821,7 +821,7 @@ _081238D0: beq _081238DC b _081239D6 _081238DC: - ldr r0, _08123920 @ =gUnknown_08396FC4 + ldr r0, _08123920 @ =gWeatherPtr ldr r0, [r0] adds r2, r0, 0 adds r2, 0xF0 @@ -857,9 +857,9 @@ _0812390C: strb r0, [r1, 0x1] b _081239D6 .align 2, 0 -_08123920: .4byte gUnknown_08396FC4 +_08123920: .4byte gWeatherPtr _08123924: - ldr r0, _08123938 @ =gUnknown_08396FC4 + ldr r0, _08123938 @ =gWeatherPtr ldr r2, [r0] movs r1, 0xDA lsls r1, 3 @@ -870,7 +870,7 @@ _08123924: strb r0, [r3, 0x1] b _081239D6 .align 2, 0 -_08123938: .4byte gUnknown_08396FC4 +_08123938: .4byte gWeatherPtr _0812393C: ldrh r1, [r3, 0x6] ldrh r0, [r3, 0x4] @@ -1239,7 +1239,7 @@ _08123C10: .4byte 0x00000944 _08123C14: .4byte gUnknown_02039274 _08123C18: .4byte gSpriteCoordOffsetX _08123C1C: - ldr r0, _08123C38 @ =gUnknown_08396FC4 + ldr r0, _08123C38 @ =gWeatherPtr ldr r4, [r0] ldr r2, _08123C3C @ =0x000006fc adds r4, r2 @@ -1254,7 +1254,7 @@ _08123C26: pop {r0} bx r0 .align 2, 0 -_08123C38: .4byte gUnknown_08396FC4 +_08123C38: .4byte gWeatherPtr _08123C3C: .4byte 0x000006fc thumb_func_end sub_8123AF8 diff --git a/asm/field_weather.s b/asm/field_weather.s index d42926db8..507b67fd8 100644 --- a/asm/field_weather.s +++ b/asm/field_weather.s @@ -9,14 +9,14 @@ sub_807F6E8: @ 807F6E8 push {r4,r5,lr} sub sp, 0x8 - ldr r0, _0807F75C @ =gUnknown_08396FC4 + ldr r0, _0807F75C @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807F760 @ =0x000006fb adds r0, r1 ldrb r0, [r0] cmp r0, 0 bne _0807F792 - ldr r0, _0807F764 @ =gUnknown_0839ABA8 + ldr r0, _0807F764 @ =gWeatherFog1SpriteSheet ldr r1, [r0, 0x4] ldr r0, [r0] str r0, [sp] @@ -54,7 +54,7 @@ _0807F70C: lsrs r0, 10 adds r0, 0x20 strh r0, [r4, 0x22] - ldr r2, _0807F75C @ =gUnknown_08396FC4 + ldr r2, _0807F75C @ =gWeatherPtr ldr r0, [r2] lsls r1, r5, 2 adds r0, 0xA0 @@ -62,13 +62,13 @@ _0807F70C: str r4, [r0] b _0807F77E .align 2, 0 -_0807F75C: .4byte gUnknown_08396FC4 +_0807F75C: .4byte gWeatherPtr _0807F760: .4byte 0x000006fb -_0807F764: .4byte gUnknown_0839ABA8 +_0807F764: .4byte gWeatherFog1SpriteSheet _0807F768: .4byte gSpriteTemplate_839AB90 _0807F76C: .4byte gSprites _0807F770: - ldr r2, _0807F79C @ =gUnknown_08396FC4 + ldr r2, _0807F79C @ =gWeatherPtr ldr r1, [r2] lsls r0, r5, 2 adds r1, 0xA0 @@ -92,14 +92,14 @@ _0807F792: pop {r0} bx r0 .align 2, 0 -_0807F79C: .4byte gUnknown_08396FC4 +_0807F79C: .4byte gWeatherPtr _0807F7A0: .4byte 0x000006fb thumb_func_end sub_807F6E8 thumb_func_start sub_807F7A4 sub_807F7A4: @ 807F7A4 push {r4,r5,lr} - ldr r0, _0807F7EC @ =gUnknown_08396FC4 + ldr r0, _0807F7EC @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807F7F0 @ =0x000006fb adds r0, r1, r2 @@ -124,7 +124,7 @@ _0807F7C8: bls _0807F7BA ldr r0, _0807F7F4 @ =0x00001201 bl FreeSpriteTilesByTag - ldr r0, _0807F7EC @ =gUnknown_08396FC4 + ldr r0, _0807F7EC @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807F7F0 @ =0x000006fb adds r0, r1 @@ -135,7 +135,7 @@ _0807F7E4: pop {r0} bx r0 .align 2, 0 -_0807F7EC: .4byte gUnknown_08396FC4 +_0807F7EC: .4byte gWeatherPtr _0807F7F0: .4byte 0x000006fb _0807F7F4: .4byte 0x00001201 thumb_func_end sub_807F7A4 @@ -143,7 +143,7 @@ _0807F7F4: .4byte 0x00001201 thumb_func_start sub_807F7F8 sub_807F7F8: @ 807F7F8 push {lr} - ldr r0, _0807F844 @ =gUnknown_08396FC4 + ldr r0, _0807F844 @ =gWeatherPtr ldr r1, [r0] ldr r0, _0807F848 @ =0x000006cc adds r2, r1, r0 @@ -181,7 +181,7 @@ _0807F840: pop {r0} bx r0 .align 2, 0 -_0807F844: .4byte gUnknown_08396FC4 +_0807F844: .4byte gWeatherPtr _0807F848: .4byte 0x000006cc _0807F84C: .4byte 0x000006d2 _0807F850: .4byte 0x000006c2 @@ -192,7 +192,7 @@ _0807F854: .4byte REG_BLDALPHA sub_807F858: @ 807F858 push {r4,lr} bl sub_807F7F8 - ldr r0, _0807F880 @ =gUnknown_08396FC4 + ldr r0, _0807F880 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807F884 @ =0x000006d2 adds r0, r1, r2 @@ -210,14 +210,14 @@ _0807F878: pop {r0} bx r0 .align 2, 0 -_0807F880: .4byte gUnknown_08396FC4 +_0807F880: .4byte gWeatherPtr _0807F884: .4byte 0x000006d2 thumb_func_end sub_807F858 thumb_func_start sub_807F888 sub_807F888: @ 807F888 push {r4,r5,lr} - ldr r2, _0807F8CC @ =gUnknown_08396FC4 + ldr r2, _0807F8CC @ =gWeatherPtr ldr r1, [r2] ldr r0, _0807F8D0 @ =gSpriteCoordOffsetX ldrh r0, [r0] @@ -252,7 +252,7 @@ _0807F8B4: beq _0807F8E6 b _0807F928 .align 2, 0 -_0807F8CC: .4byte gUnknown_08396FC4 +_0807F8CC: .4byte gWeatherPtr _0807F8D0: .4byte gSpriteCoordOffsetX _0807F8D4: .4byte 0x000001ff _0807F8D8: .4byte 0x000006fc @@ -305,7 +305,7 @@ _0807F92C: thumb_func_start sub_807F934 sub_807F934: @ 807F934 push {r4,lr} - ldr r0, _0807F950 @ =gUnknown_08396FC4 + ldr r0, _0807F950 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807F954 @ =0x000006ce adds r4, r0, r1 @@ -318,7 +318,7 @@ sub_807F934: @ 807F934 beq _0807F95E b _0807F98C .align 2, 0 -_0807F950: .4byte gUnknown_08396FC4 +_0807F950: .4byte gWeatherPtr _0807F954: .4byte 0x000006ce _0807F958: cmp r0, 0x2 @@ -364,18 +364,18 @@ _0807F996: thumb_func_start sub_807F99C sub_807F99C: @ 807F99C push {lr} - ldr r0, _0807F9A8 @ =gUnknown_0839ABB0 + ldr r0, _0807F9A8 @ =gWeatherAshSpriteSheet bl LoadSpriteSheet pop {r0} bx r0 .align 2, 0 -_0807F9A8: .4byte gUnknown_0839ABB0 +_0807F9A8: .4byte gWeatherAshSpriteSheet thumb_func_end sub_807F99C thumb_func_start sub_807F9AC sub_807F9AC: @ 807F9AC push {r4,r5,lr} - ldr r0, _0807FA18 @ =gUnknown_08396FC4 + ldr r0, _0807FA18 @ =gWeatherPtr ldr r0, [r0] movs r1, 0xE0 lsls r1, 3 @@ -418,7 +418,7 @@ _0807F9C0: lsls r0, 6 adds r0, 0x20 strh r0, [r4, 0x2E] - ldr r2, _0807FA18 @ =gUnknown_08396FC4 + ldr r2, _0807FA18 @ =gWeatherPtr ldr r0, [r2] lsls r1, r5, 2 adds r0, 0xF0 @@ -426,11 +426,11 @@ _0807F9C0: str r4, [r0] b _0807FA32 .align 2, 0 -_0807FA18: .4byte gUnknown_08396FC4 +_0807FA18: .4byte gWeatherPtr _0807FA1C: .4byte gSpriteTemplate_839ABD0 _0807FA20: .4byte gSprites _0807FA24: - ldr r2, _0807FA50 @ =gUnknown_08396FC4 + ldr r2, _0807FA50 @ =gWeatherPtr ldr r1, [r2] lsls r0, r5, 2 adds r1, 0xF0 @@ -454,13 +454,13 @@ _0807FA48: pop {r0} bx r0 .align 2, 0 -_0807FA50: .4byte gUnknown_08396FC4 +_0807FA50: .4byte gWeatherPtr thumb_func_end sub_807F9AC thumb_func_start sub_807FA54 sub_807FA54: @ 807FA54 push {r4,r5,lr} - ldr r0, _0807FAA0 @ =gUnknown_08396FC4 + ldr r0, _0807FAA0 @ =gWeatherPtr ldr r1, [r0] movs r2, 0xE0 lsls r2, 3 @@ -486,7 +486,7 @@ _0807FA7A: bls _0807FA6C ldr r0, _0807FAA4 @ =0x00001202 bl FreeSpriteTilesByTag - ldr r0, _0807FAA0 @ =gUnknown_08396FC4 + ldr r0, _0807FAA0 @ =gWeatherPtr ldr r0, [r0] movs r1, 0xE0 lsls r1, 3 @@ -498,7 +498,7 @@ _0807FA98: pop {r0} bx r0 .align 2, 0 -_0807FAA0: .4byte gUnknown_08396FC4 +_0807FAA0: .4byte gWeatherPtr _0807FAA4: .4byte 0x00001202 thumb_func_end sub_807FA54 @@ -524,7 +524,7 @@ _0807FAC4: ldrh r1, [r1] adds r0, r1 strh r0, [r3, 0x22] - ldr r0, _0807FB14 @ =gUnknown_08396FC4 + ldr r0, _0807FB14 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807FB18 @ =0x000006fc adds r2, r0, r1 @@ -559,7 +559,7 @@ _0807FB08: bx r0 .align 2, 0 _0807FB10: .4byte gSpriteCoordOffsetY -_0807FB14: .4byte gUnknown_08396FC4 +_0807FB14: .4byte gWeatherPtr _0807FB18: .4byte 0x000006fc _0807FB1C: .4byte 0x010f0000 _0807FB20: .4byte 0x000001ff @@ -568,7 +568,7 @@ _0807FB20: .4byte 0x000001ff thumb_func_start sub_807FB24 sub_807FB24: @ 807FB24 push {r4,lr} - ldr r0, _0807FB94 @ =gUnknown_08396FC4 + ldr r0, _0807FB94 @ =gWeatherPtr ldr r3, [r0] ldr r1, _0807FB98 @ =0x000006cc adds r0, r3, r1 @@ -624,7 +624,7 @@ _0807FB8E: pop {r0} bx r0 .align 2, 0 -_0807FB94: .4byte gUnknown_08396FC4 +_0807FB94: .4byte gWeatherPtr _0807FB98: .4byte 0x000006cc _0807FB9C: .4byte 0x000006d2 _0807FBA0: .4byte 0x000006c2 @@ -635,7 +635,7 @@ _0807FBA4: .4byte 0x00000724 sub_807FBA8: @ 807FBA8 push {r4,lr} bl sub_807FB24 - ldr r0, _0807FBD0 @ =gUnknown_08396FC4 + ldr r0, _0807FBD0 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807FBD4 @ =0x000006d2 adds r0, r1, r2 @@ -653,7 +653,7 @@ _0807FBC8: pop {r0} bx r0 .align 2, 0 -_0807FBD0: .4byte gUnknown_08396FC4 +_0807FBD0: .4byte gWeatherPtr _0807FBD4: .4byte 0x000006d2 thumb_func_end sub_807FBA8 @@ -661,7 +661,7 @@ _0807FBD4: .4byte 0x000006d2 sub_807FBD8: @ 807FBD8 push {r4,r5,lr} bl sub_807FC9C - ldr r0, _0807FBF8 @ =gUnknown_08396FC4 + ldr r0, _0807FBF8 @ =gWeatherPtr ldr r5, [r0] ldr r0, _0807FBFC @ =0x000006cc adds r4, r5, r0 @@ -674,7 +674,7 @@ sub_807FBD8: @ 807FBD8 beq _0807FC06 b _0807FC30 .align 2, 0 -_0807FBF8: .4byte gUnknown_08396FC4 +_0807FBF8: .4byte gWeatherPtr _0807FBFC: .4byte 0x000006cc _0807FC00: cmp r0, 0x2 @@ -714,7 +714,7 @@ _0807FC38: .4byte 0x000006d2 sub_807FC3C: @ 807FC3C push {r4,lr} bl sub_807FC9C - ldr r0, _0807FC5C @ =gUnknown_08396FC4 + ldr r0, _0807FC5C @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807FC60 @ =0x000006ce adds r4, r0, r1 @@ -727,7 +727,7 @@ sub_807FC3C: @ 807FC3C beq _0807FC6A b _0807FC8E .align 2, 0 -_0807FC5C: .4byte gUnknown_08396FC4 +_0807FC5C: .4byte gWeatherPtr _0807FC60: .4byte 0x000006ce _0807FC64: cmp r0, 0x2 @@ -766,7 +766,7 @@ _0807FC94: thumb_func_start sub_807FC9C sub_807FC9C: @ 807FC9C push {r4,r5,lr} - ldr r0, _0807FD14 @ =gUnknown_08396FC4 + ldr r0, _0807FD14 @ =gWeatherPtr ldr r3, [r0] ldr r0, _0807FD18 @ =0x0000071c adds r2, r3, r0 @@ -828,7 +828,7 @@ _0807FCE4: pop {r0} bx r0 .align 2, 0 -_0807FD14: .4byte gUnknown_08396FC4 +_0807FD14: .4byte gWeatherPtr _0807FD18: .4byte 0x0000071c _0807FD1C: .4byte 0x0000ffff _0807FD20: .4byte 0x0000071e @@ -841,14 +841,14 @@ _0807FD2C: .4byte gSpriteCoordOffsetY sub_807FD30: @ 807FD30 push {r4-r6,lr} sub sp, 0x8 - ldr r0, _0807FD9C @ =gUnknown_08396FC4 + ldr r0, _0807FD9C @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807FDA0 @ =0x00000724 adds r0, r1 ldrb r0, [r0] cmp r0, 0 bne _0807FDD6 - ldr r0, _0807FDA4 @ =gUnknown_0839ABE8 + ldr r0, _0807FDA4 @ =gWeatherFog0SpriteSheet ldr r1, [r0, 0x4] ldr r0, [r0] str r0, [sp] @@ -881,7 +881,7 @@ _0807FD54: bl __umodsi3 strh r0, [r4, 0x2E] strh r5, [r4, 0x30] - ldr r2, _0807FD9C @ =gUnknown_08396FC4 + ldr r2, _0807FD9C @ =gWeatherPtr ldr r0, [r2] lsls r1, r6, 2 movs r3, 0xA0 @@ -891,13 +891,13 @@ _0807FD54: str r4, [r0] b _0807FDC2 .align 2, 0 -_0807FD9C: .4byte gUnknown_08396FC4 +_0807FD9C: .4byte gWeatherPtr _0807FDA0: .4byte 0x00000724 -_0807FDA4: .4byte gUnknown_0839ABE8 +_0807FDA4: .4byte gWeatherFog0SpriteSheet _0807FDA8: .4byte gSpriteTemplate_839AC04 _0807FDAC: .4byte gSprites _0807FDB0: - ldr r2, _0807FDE0 @ =gUnknown_08396FC4 + ldr r2, _0807FDE0 @ =gWeatherPtr ldr r1, [r2] lsls r0, r6, 2 movs r3, 0xA0 @@ -923,14 +923,14 @@ _0807FDD6: pop {r0} bx r0 .align 2, 0 -_0807FDE0: .4byte gUnknown_08396FC4 +_0807FDE0: .4byte gWeatherPtr _0807FDE4: .4byte 0x00000724 thumb_func_end sub_807FD30 thumb_func_start sub_807FDE8 sub_807FDE8: @ 807FDE8 push {r4,r5,lr} - ldr r0, _0807FE30 @ =gUnknown_08396FC4 + ldr r0, _0807FE30 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807FE34 @ =0x00000724 adds r0, r1, r2 @@ -956,7 +956,7 @@ _0807FE0E: bls _0807FE00 ldr r0, _0807FE38 @ =0x00001203 bl FreeSpriteTilesByTag - ldr r0, _0807FE30 @ =gUnknown_08396FC4 + ldr r0, _0807FE30 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807FE34 @ =0x00000724 adds r0, r1 @@ -967,7 +967,7 @@ _0807FE2A: pop {r0} bx r0 .align 2, 0 -_0807FE30: .4byte gUnknown_08396FC4 +_0807FE30: .4byte gWeatherPtr _0807FE34: .4byte 0x00000724 _0807FE38: .4byte 0x00001203 thumb_func_end sub_807FDE8 @@ -976,7 +976,7 @@ _0807FE38: .4byte 0x00001203 sub_807FE3C: @ 807FE3C push {r4,lr} adds r3, r0, 0 - ldr r0, _0807FE8C @ =gUnknown_08396FC4 + ldr r0, _0807FE8C @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807FE90 @ =0x0000071a adds r0, r1, r2 @@ -1015,7 +1015,7 @@ _0807FE84: pop {r0} bx r0 .align 2, 0 -_0807FE8C: .4byte gUnknown_08396FC4 +_0807FE8C: .4byte gWeatherPtr _0807FE90: .4byte 0x0000071a _0807FE94: .4byte 0x010f0000 _0807FE98: .4byte 0x000001ff @@ -1024,7 +1024,7 @@ _0807FE98: .4byte 0x000001ff thumb_func_start sub_807FE9C sub_807FE9C: @ 807FE9C push {r4,lr} - ldr r0, _0807FF00 @ =gUnknown_08396FC4 + ldr r0, _0807FF00 @ =gWeatherPtr ldr r3, [r0] ldr r0, _0807FF04 @ =0x000006cc adds r1, r3, r0 @@ -1074,7 +1074,7 @@ _0807FEF8: pop {r0} bx r0 .align 2, 0 -_0807FF00: .4byte gUnknown_08396FC4 +_0807FF00: .4byte gWeatherPtr _0807FF04: .4byte 0x000006cc _0807FF08: .4byte 0x000006d2 _0807FF0C: .4byte 0x000006c1 @@ -1087,7 +1087,7 @@ _0807FF18: .4byte 0x00000712 sub_807FF1C: @ 807FF1C push {r4,lr} bl sub_807FE9C - ldr r0, _0807FF44 @ =gUnknown_08396FC4 + ldr r0, _0807FF44 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807FF48 @ =0x000006d2 adds r0, r1, r2 @@ -1105,7 +1105,7 @@ _0807FF3C: pop {r0} bx r0 .align 2, 0 -_0807FF44: .4byte gUnknown_08396FC4 +_0807FF44: .4byte gWeatherPtr _0807FF48: .4byte 0x000006d2 thumb_func_end sub_807FF1C @@ -1114,7 +1114,7 @@ sub_807FF4C: @ 807FF4C push {r4,r5,lr} bl sub_8080064 bl sub_808002C - ldr r0, _0807FF7C @ =gUnknown_08396FC4 + ldr r0, _0807FF7C @ =gWeatherPtr ldr r5, [r0] ldr r0, _0807FF80 @ =0x00000712 adds r1, r5, r0 @@ -1135,7 +1135,7 @@ _0807FF68: beq _0807FF8E b _0807FFBC .align 2, 0 -_0807FF7C: .4byte gUnknown_08396FC4 +_0807FF7C: .4byte gWeatherPtr _0807FF80: .4byte 0x00000712 _0807FF84: .4byte 0x000006cc _0807FF88: @@ -1178,7 +1178,7 @@ sub_807FFC8: @ 807FFC8 push {r4,lr} bl sub_8080064 bl sub_808002C - ldr r0, _0807FFEC @ =gUnknown_08396FC4 + ldr r0, _0807FFEC @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807FFF0 @ =0x000006ce adds r4, r0, r1 @@ -1191,7 +1191,7 @@ sub_807FFC8: @ 807FFC8 beq _0807FFFA b _0808001E .align 2, 0 -_0807FFEC: .4byte gUnknown_08396FC4 +_0807FFEC: .4byte gWeatherPtr _0807FFF0: .4byte 0x000006ce _0807FFF4: cmp r0, 0x2 @@ -1230,7 +1230,7 @@ _08080024: thumb_func_start sub_808002C sub_808002C: @ 808002C push {lr} - ldr r0, _08080058 @ =gUnknown_08396FC4 + ldr r0, _08080058 @ =gWeatherPtr ldr r2, [r0] ldr r0, _0808005C @ =0x00000714 adds r3, r2, r0 @@ -1252,7 +1252,7 @@ _08080052: pop {r0} bx r0 .align 2, 0 -_08080058: .4byte gUnknown_08396FC4 +_08080058: .4byte gWeatherPtr _0808005C: .4byte 0x00000714 _08080060: .4byte 0x00000712 thumb_func_end sub_808002C @@ -1260,7 +1260,7 @@ _08080060: .4byte 0x00000712 thumb_func_start sub_8080064 sub_8080064: @ 8080064 push {r4-r6,lr} - ldr r0, _080800C8 @ =gUnknown_08396FC4 + ldr r0, _080800C8 @ =gWeatherPtr ldr r2, [r0] ldr r0, _080800CC @ =0x00000704 adds r4, r2, r0 @@ -1310,7 +1310,7 @@ sub_8080064: @ 8080064 pop {r0} bx r0 .align 2, 0 -_080800C8: .4byte gUnknown_08396FC4 +_080800C8: .4byte gWeatherPtr _080800CC: .4byte 0x00000704 _080800D0: .4byte gSineTable _080800D4: .4byte 0x00000712 @@ -1322,7 +1322,7 @@ _080800E0: .4byte gSpriteCoordOffsetY thumb_func_start sub_80800E4 sub_80800E4: @ 80800E4 push {r4,r5,lr} - ldr r0, _08080168 @ =gUnknown_08396FC4 + ldr r0, _08080168 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0808016C @ =0x00000716 adds r0, r1, r2 @@ -1346,7 +1346,7 @@ _0808010A: lsrs r4, r0, 16 cmp r4, 0x13 bls _080800FC - ldr r0, _08080168 @ =gUnknown_08396FC4 + ldr r0, _08080168 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0808016C @ =0x00000716 adds r0, r1 @@ -1355,7 +1355,7 @@ _0808010A: ldr r0, _08080170 @ =0x00001204 bl FreeSpriteTilesByTag _08080126: - ldr r0, _08080168 @ =gUnknown_08396FC4 + ldr r0, _08080168 @ =gWeatherPtr ldr r1, [r0] ldr r2, _08080174 @ =0x00000717 adds r0, r1, r2 @@ -1379,7 +1379,7 @@ _0808014A: lsrs r4, r0, 16 cmp r4, 0x4 bls _0808013C - ldr r0, _08080168 @ =gUnknown_08396FC4 + ldr r0, _08080168 @ =gWeatherPtr ldr r0, [r0] ldr r1, _08080174 @ =0x00000717 adds r0, r1 @@ -1390,7 +1390,7 @@ _08080160: pop {r0} bx r0 .align 2, 0 -_08080168: .4byte gUnknown_08396FC4 +_08080168: .4byte gWeatherPtr _0808016C: .4byte 0x00000716 _08080170: .4byte 0x00001204 _08080174: .4byte 0x00000717 @@ -1400,14 +1400,14 @@ _08080174: .4byte 0x00000717 sub_8080178: @ 8080178 push {r4-r7,lr} sub sp, 0x4 - ldr r0, _080801E8 @ =gUnknown_08396FC4 + ldr r0, _080801E8 @ =gWeatherPtr ldr r0, [r0] ldr r1, _080801EC @ =0x00000716 adds r0, r1 ldrb r0, [r0] cmp r0, 0 bne _08080226 - ldr r0, _080801F0 @ =gUnknown_0839AC54 + ldr r0, _080801F0 @ =gWeatherSandstormSpriteSheet bl LoadSpriteSheet ldr r0, _080801F4 @ =gUnknown_08397128 bl sub_807D8C0 @@ -1427,7 +1427,7 @@ _08080198: lsrs r1, r0, 24 cmp r1, 0x40 beq _08080200 - ldr r2, _080801E8 @ =gUnknown_08396FC4 + ldr r2, _080801E8 @ =gWeatherPtr ldr r5, [r2] lsls r0, r7, 2 movs r3, 0xC8 @@ -1450,14 +1450,14 @@ _08080198: ldr r2, [sp] b _08080212 .align 2, 0 -_080801E8: .4byte gUnknown_08396FC4 +_080801E8: .4byte gWeatherPtr _080801EC: .4byte 0x00000716 -_080801F0: .4byte gUnknown_0839AC54 +_080801F0: .4byte gWeatherSandstormSpriteSheet _080801F4: .4byte gUnknown_08397128 _080801F8: .4byte gSpriteTemplate_839AC3C _080801FC: .4byte gSprites _08080200: - ldr r2, _08080230 @ =gUnknown_08396FC4 + ldr r2, _08080230 @ =gWeatherPtr ldr r1, [r2] lsls r0, r7, 2 movs r3, 0xC8 @@ -1483,7 +1483,7 @@ _08080226: pop {r0} bx r0 .align 2, 0 -_08080230: .4byte gUnknown_08396FC4 +_08080230: .4byte gWeatherPtr _08080234: .4byte 0x00000716 thumb_func_end sub_8080178 @@ -1494,7 +1494,7 @@ sub_8080238: @ 8080238 mov r6, r9 mov r5, r8 push {r5-r7} - ldr r4, _080802E0 @ =gUnknown_08396FC4 + ldr r4, _080802E0 @ =gWeatherPtr ldr r0, [r4] ldr r1, _080802E4 @ =0x00000717 adds r0, r1 @@ -1571,7 +1571,7 @@ _08080258: str r0, [r1, 0x1C] b _0808030E .align 2, 0 -_080802E0: .4byte gUnknown_08396FC4 +_080802E0: .4byte gWeatherPtr _080802E4: .4byte 0x00000717 _080802E8: .4byte gSpriteTemplate_839AC3C _080802EC: .4byte gSprites @@ -1616,7 +1616,7 @@ _08080334: .4byte 0x00000717 sub_8080338: @ 8080338 push {r4,lr} adds r3, r0, 0 - ldr r0, _08080388 @ =gUnknown_08396FC4 + ldr r0, _08080388 @ =gWeatherPtr ldr r1, [r0] movs r2, 0xE2 lsls r2, 3 @@ -1655,7 +1655,7 @@ _08080380: pop {r0} bx r0 .align 2, 0 -_08080388: .4byte gUnknown_08396FC4 +_08080388: .4byte gWeatherPtr _0808038C: .4byte 0x0000070e _08080390: .4byte 0x010f0000 _08080394: .4byte 0x000001ff @@ -1749,7 +1749,7 @@ _0808042C: .4byte gSineTable thumb_func_start sub_8080430 sub_8080430: @ 8080430 - ldr r0, _08080450 @ =gUnknown_08396FC4 + ldr r0, _08080450 @ =gWeatherPtr ldr r1, [r0] ldr r0, _08080454 @ =0x000006cc adds r2, r1, r0 @@ -1765,7 +1765,7 @@ sub_8080430: @ 8080430 strb r0, [r1] bx lr .align 2, 0 -_08080450: .4byte gUnknown_08396FC4 +_08080450: .4byte gWeatherPtr _08080454: .4byte 0x000006cc _08080458: .4byte 0x000006c1 _0808045C: .4byte 0x000006c2 @@ -1794,14 +1794,14 @@ sub_8080470: @ 8080470 sub_8080474: @ 8080474 push {r4,r5,lr} bl sub_807F49C - ldr r0, _080804B4 @ =gUnknown_08396FC4 + ldr r0, _080804B4 @ =gWeatherPtr ldr r4, [r0] ldr r1, _080804B8 @ =0x0000072e adds r0, r4, r1 ldrb r5, [r0] cmp r5, 0 bne _080804AC - ldr r0, _080804BC @ =gUnknown_0839AC70 + ldr r0, _080804BC @ =gWeatherBubbleSpriteSheet bl LoadSpriteSheet movs r2, 0xE5 lsls r2, 3 @@ -1823,9 +1823,9 @@ _080804AC: pop {r0} bx r0 .align 2, 0 -_080804B4: .4byte gUnknown_08396FC4 +_080804B4: .4byte gWeatherPtr _080804B8: .4byte 0x0000072e -_080804BC: .4byte gUnknown_0839AC70 +_080804BC: .4byte gWeatherBubbleSpriteSheet _080804C0: .4byte gUnknown_0839AC68 _080804C4: .4byte 0x0000072a thumb_func_end sub_8080474 @@ -1834,7 +1834,7 @@ _080804C4: .4byte 0x0000072a sub_80804C8: @ 80804C8 push {r4,lr} bl sub_8080474 - ldr r0, _080804F0 @ =gUnknown_08396FC4 + ldr r0, _080804F0 @ =gWeatherPtr ldr r1, [r0] ldr r2, _080804F4 @ =0x000006d2 adds r0, r1, r2 @@ -1852,7 +1852,7 @@ _080804E8: pop {r0} bx r0 .align 2, 0 -_080804F0: .4byte gUnknown_08396FC4 +_080804F0: .4byte gWeatherPtr _080804F4: .4byte 0x000006d2 thumb_func_end sub_80804C8 @@ -1860,7 +1860,7 @@ _080804F4: .4byte 0x000006d2 sub_80804F8: @ 80804F8 push {r4-r7,lr} bl sub_807F52C - ldr r0, _08080558 @ =gUnknown_08396FC4 + ldr r0, _08080558 @ =gWeatherPtr ldr r5, [r0] ldr r0, _0808055C @ =0x00000726 adds r4, r5, r0 @@ -1906,7 +1906,7 @@ _08080550: pop {r0} bx r0 .align 2, 0 -_08080558: .4byte gUnknown_08396FC4 +_08080558: .4byte gWeatherPtr _0808055C: .4byte 0x00000726 _08080560: .4byte 0x0000ffff _08080564: .4byte gUnknown_0839AC68 @@ -1976,7 +1976,7 @@ sub_8080588: @ 8080588 strh r0, [r1, 0x2E] strh r0, [r1, 0x30] strh r0, [r1, 0x32] - ldr r0, _08080608 @ =gUnknown_08396FC4 + ldr r0, _08080608 @ =gWeatherPtr ldr r1, [r0] ldr r0, _0808060C @ =0x0000072c adds r1, r0 @@ -1992,7 +1992,7 @@ _080805F8: .4byte gUnknown_0839AC78 _080805FC: .4byte gSpriteCoordOffsetY _08080600: .4byte gSpriteTemplate_839ACBC _08080604: .4byte gSprites -_08080608: .4byte gUnknown_08396FC4 +_08080608: .4byte gWeatherPtr _0808060C: .4byte 0x0000072c thumb_func_end sub_8080588 diff --git a/data/field_weather.s b/data/field_weather.s index 1b0076451..9ca3eef3a 100644 --- a/data/field_weather.s +++ b/data/field_weather.s @@ -3,399 +3,6 @@ .section .rodata - .align 2 -gUnknown_08396FC4:: @ 8396FC4 - .4byte gUnknown_0202F7E8 - - .align 2 -gUnknown_08396FC8:: @ 8396FC8 - .4byte sub_807CAE8, nullsub_38, sub_807CAE8, sub_807CB0C - .4byte sub_807DE78, sub_807DEF4, sub_807DEC4, sub_807DF54 - .4byte sub_807DF9C, nullsub_55, sub_807DFC0, sub_807DFD0 - .4byte sub_807E364, sub_807E400, sub_807E3D0, sub_807E460 - .4byte sub_807E9C8, snowflakes_progress2, sub_807EA18, sub_807EAC0 - .4byte sub_807EE80, sub_807EFC0, sub_807EEF4, sub_807F34C - .4byte sub_807F49C, sub_807F52C, sub_807F4FC, sub_807F5EC - .4byte sub_807F7F8, sub_807F888, sub_807F858, sub_807F934 - .4byte sub_807FE9C, sub_807FF4C, sub_807FF1C, sub_807FFC8 - .4byte sub_807FB24, sub_807FBD8, sub_807FBA8, sub_807FC3C - .4byte sub_807F49C, sub_807F52C, sub_807F4FC, sub_807F5EC - .4byte sub_8080430, nullsub_56, sub_8080460, sub_8080470 - .4byte sub_807E110, sub_807E174, sub_807E144, sub_807E258 - .4byte sub_807EF24, sub_807EFC0, sub_807EF90, sub_807F34C - .4byte sub_8080474, sub_80804F8, sub_80804C8, sub_808056C - - .align 2 -gUnknown_083970B8:: @ 83970B8 - .4byte sub_807CC24 - .4byte sub_807CCAC - .4byte nullsub_39 - .4byte nullsub_39 - -gUnknown_083970C8:: @ 83970C8 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - .byte 0 - .byte 0 - .byte 2 - .byte 1 - .byte 2 - .byte 2 - .byte 2 - .byte 2 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - .byte 2 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - .byte 1 - - .align 2 -gUnknown_083970E8:: @ 83970E8 - .incbin "graphics/weather/0.gbapal" - - .align 2 -gUnknown_08397108:: @ 8397108 - .incbin "graphics/weather/1.gbapal" - - .align 2 -gUnknown_08397128:: @ 8397128 - .incbin "graphics/weather/2.gbapal" - - .align 2 -WeatherFog0Tiles: @ 8397148 - .incbin "graphics/weather/fog0.4bpp" - - .align 2 -gWeatherFog1Tiles:: @ 8397948 - .incbin "graphics/weather/fog1.4bpp" - - .align 2 -WeatherCloudTiles: @ 8398148 - .incbin "graphics/weather/cloud.4bpp" - - .align 2 -gSpriteImage_8398948:: @ 8398948 - .incbin "graphics/weather/snow0.4bpp" - - .align 2 -gSpriteImage_8398968:: @ 8398968 - .incbin "graphics/weather/snow1.4bpp" - - .align 2 -WeatherBubbleTiles: @ 8398988 - .incbin "graphics/weather/bubble.4bpp" - - .align 2 -WeatherAshTiles: @ 83989C8 - .incbin "graphics/weather/ash.4bpp" - - .align 2 -WeatherRainTiles: @ 83999C8 - .incbin "graphics/weather/rain.4bpp" - - .align 2 -WeatherSandstormTiles: @ 8399FC8 - .incbin "graphics/weather/sandstorm.4bpp" - - .align 1 -gUnknown_0839A9C8:: @ 839A9C8 - .2byte 0, 66 - .2byte 5, 73 - .2byte 10, 78 - - .align 2 -gUnknown_0839A9D4:: @ 839A9D4 - obj_tiles WeatherCloudTiles, 0x800, 0x1200 - - .align 2 -gOamData_839A9DC:: @ 839A9DC - .2byte 0x0400 - .2byte 0xC000 - .2byte 0x0C00 - - .align 2 -gSpriteAnim_839A9E4:: @ 839A9E4 - obj_image_anim_frame 0, 16 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_839A9EC:: @ 839A9EC - .4byte gSpriteAnim_839A9E4 - - .align 2 -gSpriteTemplate_839A9F0:: @ 839A9F0 - spr_template 4608, 4609, gOamData_839A9DC, gSpriteAnimTable_839A9EC, NULL, gDummySpriteAffineAnimTable, sub_807E0F4 - - .align 1 -gUnknown_0839AA08:: @ 839AA08 - .2byte 0, 0 - .2byte 0, 160 - .2byte 0, 64 - .2byte 144, 224 - .2byte 144, 128 - .2byte 32, 32 - .2byte 32, 192 - .2byte 32, 96 - .2byte 72, 128 - .2byte 72, 32 - .2byte 72, 192 - .2byte 216, 96 - .2byte 216, 0 - .2byte 104, 160 - .2byte 104, 64 - .2byte 104, 224 - .2byte 144, 0 - .2byte 144, 160 - .2byte 144, 64 - .2byte 32, 224 - .2byte 32, 128 - .2byte 72, 32 - .2byte 72, 192 - .2byte 48, 96 - - .align 2 -gOamData_839AA68:: @ 839AA68 - .2byte 0x8000 - .2byte 0x8000 - .2byte 0x2400 - - .align 2 -gSpriteAnim_839AA70:: @ 839AA70 - obj_image_anim_frame 0, 16 - obj_image_anim_jump 0 - - .align 2 -gSpriteAnim_839AA78:: @ 839AA78 - obj_image_anim_frame 8, 3 - obj_image_anim_frame 32, 2 - obj_image_anim_frame 40, 2 - obj_image_anim_end - - .align 2 -gSpriteAnim_839AA88:: @ 839AA88 - obj_image_anim_frame 8, 3 - obj_image_anim_frame 16, 3 - obj_image_anim_frame 24, 4 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_839AA98:: @ 839AA98 - .4byte gSpriteAnim_839AA70 - .4byte gSpriteAnim_839AA78 - .4byte gSpriteAnim_839AA88 - - .align 2 -gSpriteTemplate_839AAA4:: @ 839AAA4 - spr_template 4614, 4608, gOamData_839AA68, gSpriteAnimTable_839AA98, NULL, gDummySpriteAffineAnimTable, sub_807E5C0 - - .align 1 -gUnknown_0839AABC:: @ 839AABC - .2byte -104, 208 - .2byte -160, 320 - - .align 1 -gUnknown_0839AAC4:: @ 839AAC4 - .2byte 18, 7, 12, 10 - - .align 2 -gUnknown_0839AACC:: @ 839AACC - obj_tiles WeatherRainTiles, 0x600, 0x1206 - - .align 2 -gOamData_839AAD4:: @ 839AAD4 - .2byte 0x0000 - .2byte 0x0000 - .2byte 0x0400 - - .align 2 -gSpriteImageTable_839AADC:: @ 839AADC - obj_frame_tiles gSpriteImage_8398948, 0x20 - obj_frame_tiles gSpriteImage_8398968, 0x20 - - .align 2 -gSpriteAnim_839AAEC:: @ 839AAEC - obj_image_anim_frame 0, 16 - obj_image_anim_end - - .align 2 -gSpriteAnim_839AAF4:: @ 839AAF4 - obj_image_anim_frame 1, 16 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_839AAFC:: @ 839AAFC - .4byte gSpriteAnim_839AAEC - .4byte gSpriteAnim_839AAF4 - - .align 2 -gSpriteTemplate_839AB04:: @ 839AB04 - spr_template 0xFFFF, 4608, gOamData_839AAD4, gSpriteAnimTable_839AAFC, gSpriteImageTable_839AADC, gDummySpriteAffineAnimTable, sub_807ED48 - -@ unused data - .2byte 0 - .2byte 6 - .2byte 6 - .2byte 12 - .2byte 18 - .2byte 42 - .2byte 300 - .2byte 300 - - .align 2 -gOamData_839AB2C:: @ 839AB2C - .2byte 0x0400 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gSpriteAnim_839AB34:: @ 839AB34 - obj_image_anim_frame 0, 16 - obj_image_anim_end - - .align 2 -gSpriteAnim_839AB3C:: @ 839AB3C - obj_image_anim_frame 32, 16 - obj_image_anim_end - - .align 2 -gSpriteAnim_839AB44:: @ 839AB44 - obj_image_anim_frame 64, 16 - obj_image_anim_end - - .align 2 -gSpriteAnim_839AB4C:: @ 839AB4C - obj_image_anim_frame 96, 16 - obj_image_anim_end - - .align 2 -gSpriteAnim_839AB54:: @ 839AB54 - obj_image_anim_frame 128, 16 - obj_image_anim_end - - .align 2 -gSpriteAnim_839AB5C:: @ 839AB5C - obj_image_anim_frame 160, 16 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_839AB64:: @ 839AB64 - .4byte gSpriteAnim_839AB34 - .4byte gSpriteAnim_839AB3C - .4byte gSpriteAnim_839AB44 - .4byte gSpriteAnim_839AB4C - .4byte gSpriteAnim_839AB54 - .4byte gSpriteAnim_839AB5C - - .align 2 -gSpriteAffineAnim_839AB7C:: @ 839AB7C - obj_rot_scal_anim_frame 0x200, 0x200, 0, 0 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_839AB8C:: @ 839AB8C - .4byte gSpriteAffineAnim_839AB7C - - .align 2 -gSpriteTemplate_839AB90:: @ 839AB90 - spr_template 4609, 4608, gOamData_839AB2C, gSpriteAnimTable_839AB64, NULL, gSpriteAffineAnimTable_839AB8C, sub_807F688 - - .align 2 -gUnknown_0839ABA8:: @ 839ABA8 - obj_tiles gWeatherFog1Tiles, 0x800, 0x1201 - - .align 2 -gUnknown_0839ABB0:: @ 839ABB0 - obj_tiles WeatherAshTiles, 0x1000, 0x1202 - - .align 2 -gOamData_839ABB8:: @ 839ABB8 - .2byte 0x0400 - .2byte 0xC000 - .2byte 0xF400 - - .align 2 -gSpriteAnim_839ABC0:: @ 839ABC0 - obj_image_anim_frame 0, 60 - obj_image_anim_frame 64, 60 - obj_image_anim_jump 0 - - .align 2 -gSpriteAnimTable_839ABCC:: @ 839ABCC - .4byte gSpriteAnim_839ABC0 - - .align 2 -gSpriteTemplate_839ABD0:: @ 839ABD0 - spr_template 4610, 4608, gOamData_839ABB8, gSpriteAnimTable_839ABCC, NULL, gDummySpriteAffineAnimTable, sub_807FAA8 - - .align 2 -gUnknown_0839ABE8:: @ 839ABE8 - obj_tiles WeatherFog0Tiles, 0x800, 0x1203 - - .align 2 -gOamData_839ABF0:: @ 839ABF0 - .2byte 0x0400 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gSpriteAnim_839ABF8:: @ 839ABF8 - obj_image_anim_frame 0, 16 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_839AC00:: @ 839AC00 - .4byte gSpriteAnim_839ABF8 - - .align 2 -gSpriteTemplate_839AC04:: @ 839AC04 - spr_template 4611, 4608, gOamData_839ABF0, gSpriteAnimTable_839AC00, NULL, gDummySpriteAffineAnimTable, sub_807FE3C - - .align 2 -gOamData_839AC1C:: @ 839AC1C - .2byte 0x0400 - .2byte 0xC000 - .2byte 0x0400 - - .align 2 -gSpriteAnim_839AC24:: @ 839AC24 - obj_image_anim_frame 0, 3 - obj_image_anim_end - - .align 2 -gSpriteAnim_839AC2C:: @ 839AC2C - obj_image_anim_frame 64, 3 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_839AC34:: @ 839AC34 - .4byte gSpriteAnim_839AC24 - .4byte gSpriteAnim_839AC2C - - .align 2 -gSpriteTemplate_839AC3C:: @ 839AC3C - spr_template 4612, 4609, gOamData_839AC1C, gSpriteAnimTable_839AC34, NULL, gDummySpriteAffineAnimTable, sub_8080338 - - .align 2 -gUnknown_0839AC54:: @ 839AC54 - obj_tiles WeatherSandstormTiles, 0xA00, 0x1204 - .align 1 gUnknown_0839AC5C:: @ 839AC5C .2byte 0 @@ -416,7 +23,7 @@ gUnknown_0839AC68:: @ 839AC68 .byte 30 .align 2 -gUnknown_0839AC70:: @ 839AC70 +gWeatherBubbleSpriteSheet:: @ 839AC70 obj_tiles WeatherBubbleTiles, 0x40, 0x1205 .align 1 diff --git a/include/field_weather.h b/include/field_weather.h index b711f91d6..e99b64344 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -1,6 +1,97 @@ #ifndef GUARD_WEATHER_H #define GUARD_WEATHER_H +#define WEATHER_CLOUDS 1 +#define WEATHER_RAIN_LIGHT 3 +#define WEATHER_SNOW 4 +#define WEATHER_RAIN_MED 5 +#define WEATHER_DROUGHT 12 +#define WEATHER_RAIN_HEAVY 13 + +struct Sprite; + +struct Weather +{ + struct Sprite *unknown_0[24]; + struct Sprite *snowflakeSprites[0x65]; // snowflakes? + struct Sprite *cloudSprites[3]; + u8 unknown_200[2][32]; + u8 filler_240[0x460-0x240]; + u8 unk460[2][32]; + u8 filler4A0[0x6B6-0x4A0]; + s8 unknown_6B6; + u8 filler_6B7[0xC0-0xB7]; + s8 unknown_6C0; + s8 unknown_6C1; + u8 unknown_6C2; + u8 unknown_6C3; + u16 unknown_6C4; + u8 unknown_6C6; + u8 unknown_6C7; + u8 unknown_6C8; + u8 unknown_6C9; + u8 unknown_6CA; + u8 unknown_6CB; + u16 unknown_6CC; + u16 unknown_6CE; + u8 currWeather; + u8 unknown_6D1; + u8 unknown_6D2; + u8 unknown_6D3; + u8 unknown_6D4; + u8 unknown_6D5; + u16 unknown_6D6; + u8 unknown_6D8; + u8 unknown_6D9; + u8 unknown_6DA; + u8 unknown_6DB; + u8 unknown_6DC; + u8 rainStrength; + u8 unknown_6DE; + u8 filler_6DF[1]; + u16 unknown_6E0; + u16 unknown_6E2; + u8 unknown_6E4; + u8 unknown_6E5; + u16 unknown_6E6; + u16 unknown_6E8; + u8 unknown_6EA; + u8 unknown_6EB; + u8 unknown_6EC; + u8 unknown_6ED; + u16 unknown_6EE; + u16 unknown_6F0; + u16 unknown_6F2; + u8 unknown_6F4[6]; + u8 unknown_6FA; + u8 unknown_6FB; + u8 filler_6FC[4]; + u8 unknown_700; + u8 filler_701[0x15]; + u8 unknown_716; + u8 unknown_717; + u8 filler_718[0xc]; + u8 unknown_724; + u8 filler_725[9]; + u8 unknown_72E; + u8 filler_72F; + u16 unknown_730; + u16 unknown_732; + u16 unknown_734; + u16 unknown_736; + u8 unknown_738; + u8 unknown_739; + u8 unknown_73A; + u8 filler_73B[0x3C-0x3B]; + s16 unknown_73C; + s16 unknown_73E; + s16 unknown_740; + s16 unknown_742; + u8 filler_744[0xD-4]; + s8 unknown_74D; + u8 unknown_74E; +}; + void sub_807C828(void); void DoWeatherEffect(u8 effect); void sub_807C988(u8 effect); @@ -9,7 +100,6 @@ void sub_807C9E4(u8); void sub_807CA34(u8); void sub_807CAE8(void); void nullsub_38(void); -u32 sub_807CB0C(void); void sub_807CB10(void); void sub_807CC24(void); void sub_807CCAC(void); diff --git a/ld_script.txt b/ld_script.txt index 67b7d23e2..2436f5e4b 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -111,6 +111,7 @@ SECTIONS { src/battle/battle_anim_807B69C.o(.text); src/scene/title_screen.o(.text); src/field/field_weather.o(.text); + src/field/field_weather_2.o(.text); asm/field_weather.o(.text); src/field/field_fadetransition.o(.text); src/field/field_screen_effect.o(.text); @@ -370,6 +371,7 @@ SECTIONS { src/battle/battle_anim_807B69C.o(.rodata); src/scene/title_screen.o(.rodata); src/field/field_weather.o(.rodata); + src/field/field_weather_2.o(.rodata); data/field_weather.o(.rodata); src/field/field_screen_effect.o(.rodata); src/battle/battle_setup.o(.rodata); diff --git a/src/field/field_weather.c b/src/field/field_weather.c index acd8b81ff..2d4711b81 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -26,110 +26,18 @@ struct WeatherPaletteData u16 data[0][0x1000]; // unknown length }; -struct Weather +struct WeatherCallbacks { - struct Sprite *unknown_0[24]; - struct Sprite *unknown_60[0x65]; // snowflakes? - struct Sprite *unknown_1F4[3]; - u8 unknown_200[2][32]; - u8 filler_240[0x460-0x240]; - u8 unk460[2][32]; - u8 filler4A0[0x6B6-0x4A0]; - s8 unknown_6B6; - u8 filler_6B7[0xC0-0xB7]; - s8 unknown_6C0; - s8 unknown_6C1; - u8 unknown_6C2; - u8 unknown_6C3; - u16 unknown_6C4; - u8 unknown_6C6; - u8 unknown_6C7; - u8 unknown_6C8; - u8 unknown_6C9; - u8 unknown_6CA; - u8 unknown_6CB; - u16 unknown_6CC; - u16 unknown_6CE; - u8 unknown_6D0; - u8 unknown_6D1; - u8 unknown_6D2; - u8 unknown_6D3; - u8 unknown_6D4; - u8 unknown_6D5; - u16 unknown_6D6; - u8 unknown_6D8; - u8 unknown_6D9; - u8 unknown_6DA; - u8 unknown_6DB; - u8 unknown_6DC; - u8 unknown_6DD; - u8 unknown_6DE; - u8 filler_6DF[1]; - u16 unknown_6E0; - u16 unknown_6E2; - u8 unknown_6E4; - u8 unknown_6E5; - u16 unknown_6E6; - u16 unknown_6E8; - u8 unknown_6EA; - u8 unknown_6EB; - u8 unknown_6EC; - u8 unknown_6ED; - u16 unknown_6EE; - u16 unknown_6F0; - u16 unknown_6F2; - u8 unknown_6F4[6]; - u8 unknown_6FA; - u8 unknown_6FB; - u8 filler_6FC[4]; - u8 unknown_700; - u8 filler_701[0x15]; - u8 unknown_716; - u8 unknown_717; - u8 filler_718[0xc]; - u8 unknown_724; - u8 filler_725[9]; - u8 unknown_72E; - u8 filler_72F; - u16 unknown_730; - u16 unknown_732; - u16 unknown_734; - u16 unknown_736; - u8 unknown_738; - u8 unknown_739; - u8 unknown_73A; - u8 filler_73B[0x3C-0x3B]; - s16 unknown_73C; - s16 unknown_73E; - s16 unknown_740; - s16 unknown_742; - u8 filler_744[0xD-4]; - s8 unknown_74D; - u8 unknown_74E; + void (*func0)(void); + void (*func1)(void); + void (*func2)(void); + u8 (*func3)(void); }; -#define gWeather gUnknown_0202F7E8 -extern struct Weather gUnknown_0202F7E8; +extern struct Weather gWeather; extern u8 gUnknown_0202FF38[]; extern u16 gUnknown_0202FF58; -extern u8 *gUnknown_083970E8; -extern u8 (*gUnknown_08396FC8[][4])(void); -extern u8 (*gUnknown_083970B8[])(void); IWRAM_DATA const u8 *gUnknown_030006DC; -extern const u8 gUnknown_083970C8[]; - -// This is a pointer to gWeather. All code sub_807DE78 and below uses this pointer, -// while everything above accesses gWeather directly. -extern struct Weather *const gUnknown_08396FC4; - -extern const struct SpriteSheet gUnknown_0839A9D4; -extern const struct SpriteTemplate gSpriteTemplate_839A9F0; -extern const u16 gUnknown_08397108[]; -//extern const s16 gUnknown_0839A9C8[][2]; -extern const struct Coords16 gUnknown_0839A9C8[]; -extern const struct SpriteSheet gUnknown_0839AACC; -extern const struct SpriteTemplate gSpriteTemplate_839AAA4; -extern const struct SpriteTemplate gSpriteTemplate_839AB04; const u8 DroughtPaletteData_0[] = INCBIN_U8("graphics/weather/drought0.bin.lz"); const u8 DroughtPaletteData_1[] = INCBIN_U8("graphics/weather/drought1.bin.lz"); @@ -151,71 +59,202 @@ const u8 *const gUnknown_08396FA8[] = gSharedMem, }; +// This is a pointer to gWeather. All code in this file accesses gWeather directly, +// while code in other field weather files accesses gWeather through this pointer. +// This is likely the result of compiler optimization, since using the pointer in +// this file produces the same result as accessing gWeather directly. +struct Weather *const gWeatherPtr = &gWeather; + +void sub_807CAE8(void); +void nullsub_38(void); +u8 sub_807CB0C(void); +void sub_807DE78(void); +void sub_807DEF4(void); +void sub_807DEC4(void); +u8 sub_807DF54(void); +void sub_807DF9C(void); +void nullsub_55(void); +void sub_807DFC0(void); +u8 sub_807DFD0(void); +void LightRain_InitVars(void); +void sub_807E400(void); +void sub_807E3D0(void); +u8 sub_807E460(void); +void Snow_InitVars(void); +void snowflakes_progress2(void); +void sub_807EA18(void); +u8 sub_807EAC0(void); +void sub_807EE80(void); +void sub_807EFC0(void); +void sub_807EEF4(void); +u8 sub_807F34C(void); +void sub_807F49C(void); +void sub_807F52C(void); +void sub_807F4FC(void); +u8 sub_807F5EC(void); +void sub_807F7F8(void); +void sub_807F888(void); +void sub_807F858(void); +u8 sub_807F934(void); +void sub_807FE9C(void); +void sub_807FF4C(void); +void sub_807FF1C(void); +u8 sub_807FFC8(void); +void sub_807FB24(void); +void sub_807FBD8(void); +void sub_807FBA8(void); +u8 sub_807FC3C(void); +void sub_807F49C(void); +void sub_807F52C(void); +void sub_807F4FC(void); +u8 sub_807F5EC(void); +void sub_8080430(void); +void nullsub_56(void); +void sub_8080460(void); +u8 sub_8080470(void); +void sub_807E110(void); +void sub_807E174(void); +void sub_807E144(void); +u8 sub_807E258(void); +void sub_807EF24(void); +void sub_807EFC0(void); +void sub_807EF90(void); +u8 sub_807F34C(void); +void sub_8080474(void); +void sub_80804F8(void); +void sub_80804C8(void); +u8 sub_808056C(void); + +const struct WeatherCallbacks gUnknown_08396FC8[] = +{ + {sub_807CAE8, nullsub_38, sub_807CAE8, sub_807CB0C}, + {sub_807DE78, sub_807DEF4, sub_807DEC4, sub_807DF54}, + {sub_807DF9C, nullsub_55, sub_807DFC0, sub_807DFD0}, + {LightRain_InitVars, sub_807E400, sub_807E3D0, sub_807E460}, // light rain + {Snow_InitVars, snowflakes_progress2, sub_807EA18, sub_807EAC0}, // snow + {sub_807EE80, sub_807EFC0, sub_807EEF4, sub_807F34C}, + {sub_807F49C, sub_807F52C, sub_807F4FC, sub_807F5EC}, + {sub_807F7F8, sub_807F888, sub_807F858, sub_807F934}, + {sub_807FE9C, sub_807FF4C, sub_807FF1C, sub_807FFC8}, + {sub_807FB24, sub_807FBD8, sub_807FBA8, sub_807FC3C}, + {sub_807F49C, sub_807F52C, sub_807F4FC, sub_807F5EC}, + {sub_8080430, nullsub_56, sub_8080460, sub_8080470}, + {sub_807E110, sub_807E174, sub_807E144, sub_807E258}, + {sub_807EF24, sub_807EFC0, sub_807EF90, sub_807F34C}, + {sub_8080474, sub_80804F8, sub_80804C8, sub_808056C}, +}; + +void (*const gUnknown_083970B8[])(void) = +{ + sub_807CC24, + sub_807CCAC, + nullsub_39, + nullsub_39, +}; + +const u8 gUnknown_083970C8[] = +{ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 2, + 1, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 1, + 2, + 1, + 1, + 1, + 1, + 1, +}; + +const u16 gUnknown_083970E8[] = INCBIN_U16("graphics/weather/0.gbapal"); + void sub_807C828(void) { u8 index; - if (!FuncIsActiveTask(&sub_807CA34)) + if (!FuncIsActiveTask(sub_807CA34)) { index = AllocSpritePalette(0x1200); - CpuCopy32(&gUnknown_083970E8, &gPlttBufferUnfaded[0x100 + index * 16], 32); + CpuCopy32(gUnknown_083970E8, &gPlttBufferUnfaded[0x100 + index * 16], 32); sub_807CB10(); - gWeather.unknown_6D5 = index; - gWeather.unknown_6D4 = AllocSpritePalette(0x1201); - gWeather.unknown_6DA = 0; - gWeather.unknown_6D8 = 0; - gWeather.unknown_6DE = 0; - gWeather.unknown_6E4 = 0; - gWeather.unknown_700 = 0; - gWeather.unknown_6FB = 0; - gWeather.unknown_724 = 0; - gWeather.unknown_716 = 0; - gWeather.unknown_717 = 0; - gWeather.unknown_72E = 0; - gWeather.unknown_6FA = 0; + gWeatherPtr->unknown_6D5 = index; + gWeatherPtr->unknown_6D4 = AllocSpritePalette(0x1201); + gWeatherPtr->unknown_6DA = 0; + gWeatherPtr->unknown_6D8 = 0; + gWeatherPtr->unknown_6DE = 0; + gWeatherPtr->unknown_6E4 = 0; + gWeatherPtr->unknown_700 = 0; + gWeatherPtr->unknown_6FB = 0; + gWeatherPtr->unknown_724 = 0; + gWeatherPtr->unknown_716 = 0; + gWeatherPtr->unknown_717 = 0; + gWeatherPtr->unknown_72E = 0; + gWeatherPtr->unknown_6FA = 0; sub_807DB64(16, 0); - gWeather.unknown_6D0 = 0; - gWeather.unknown_6C6 = 3; - gWeather.unknown_6C8 = 0; - gWeather.unknown_6D3 = 1; - gWeather.unknown_6C9 = CreateTask(sub_807C9E4, 80); + gWeatherPtr->currWeather = 0; + gWeatherPtr->unknown_6C6 = 3; + gWeatherPtr->unknown_6C8 = 0; + gWeatherPtr->unknown_6D3 = 1; + gWeatherPtr->unknown_6C9 = CreateTask(sub_807C9E4, 80); } } void DoWeatherEffect(u8 effect) { - if (effect != 3 && effect != 5 && effect != 13) + if (effect != WEATHER_RAIN_LIGHT && effect != WEATHER_RAIN_MED && effect != WEATHER_RAIN_HEAVY) { PlayRainSoundEffect(); } - if (gWeather.unknown_6D1 != effect && gWeather.unknown_6D0 == effect) + if (gWeatherPtr->unknown_6D1 != effect && gWeatherPtr->currWeather == effect) { - gUnknown_08396FC8[effect][0](); + gUnknown_08396FC8[effect].func0(); } - gWeather.unknown_6D3 = 0; - gWeather.unknown_6D1 = effect; - gWeather.unknown_6CE = 0; + gWeatherPtr->unknown_6D3 = 0; + gWeatherPtr->unknown_6D1 = effect; + gWeatherPtr->unknown_6CE = 0; } void sub_807C988(u8 effect) { PlayRainSoundEffect(); - gWeather.unknown_6D0 = effect; - gWeather.unknown_6D1 = effect; + gWeatherPtr->currWeather = effect; + gWeatherPtr->unknown_6D1 = effect; } void sub_807C9B4(u8 effect) { PlayRainSoundEffect(); - gWeather.unknown_6D0 = effect; - gWeather.unknown_6D1 = effect; - gWeather.unknown_6C8 = 1; + gWeatherPtr->currWeather = effect; + gWeatherPtr->unknown_6D1 = effect; + gWeatherPtr->unknown_6C8 = 1; } void sub_807C9E4(u8 taskId) { - if (gWeather.unknown_6C8) + if (gWeatherPtr->unknown_6C8) { - gUnknown_08396FC8[gWeather.unknown_6D0][2](); + gUnknown_08396FC8[gWeatherPtr->currWeather].func2(); gTasks[taskId].func = sub_807CA34; } } @@ -223,36 +262,36 @@ void sub_807C9E4(u8 taskId) void sub_807CA34(u8 task) { u8 v1; - if (gWeather.unknown_6D0 != gWeather.unknown_6D1) + if (gWeatherPtr->currWeather != gWeatherPtr->unknown_6D1) { - v1 = gUnknown_08396FC8[gWeather.unknown_6D0][3](); + v1 = gUnknown_08396FC8[gWeatherPtr->currWeather].func3(); if (!v1) { - gUnknown_08396FC8[gWeather.unknown_6D1][0](); - gWeather.unknown_6C3 = 0; // compiler reuses v1 - gWeather.unknown_6C6 = 0; // compiler reuses v1 - gWeather.unknown_6D0 = gWeather.unknown_6D1; - gWeather.unknown_6D3 = 1; + gUnknown_08396FC8[gWeatherPtr->unknown_6D1].func0(); + gWeatherPtr->unknown_6C3 = 0; // compiler reuses v1 + gWeatherPtr->unknown_6C6 = 0; // compiler reuses v1 + gWeatherPtr->currWeather = gWeatherPtr->unknown_6D1; + gWeatherPtr->unknown_6D3 = 1; } } else { - gUnknown_08396FC8[gWeather.unknown_6D0][1](); + gUnknown_08396FC8[gWeatherPtr->currWeather].func1(); } - gUnknown_083970B8[gWeather.unknown_6C6](); + gUnknown_083970B8[gWeatherPtr->unknown_6C6](); } void sub_807CAE8(void) { - gWeather.unknown_6C1 = 0; - gWeather.unknown_6C2 = 0; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 0; } void nullsub_38(void) { } -u32 sub_807CB0C(void) +u8 sub_807CB0C(void) { return 0; } @@ -274,9 +313,9 @@ void sub_807CB10(void) for (v0 = 0; v0 <= 1; v0++) { if (v0 == 0) - v1 = gWeather.unknown_200; + v1 = gWeatherPtr->unknown_200; else - v1 = gWeather.unk460; + v1 = gWeatherPtr->unk460; for (v2 = 0; (u16)v2 <= 0x1f; v2++) { @@ -332,53 +371,53 @@ void sub_807CB10(void) void sub_807CC24(void) { - if (gWeather.unknown_6C0 == gWeather.unknown_6C1) + if (gWeatherPtr->unknown_6C0 == gWeatherPtr->unknown_6C1) { - gWeather.unknown_6C6 = 3; + gWeatherPtr->unknown_6C6 = 3; } else { - if (++gWeather.unknown_6C3 >= gWeather.unknown_6C2) + if (++gWeatherPtr->unknown_6C3 >= gWeatherPtr->unknown_6C2) { - gWeather.unknown_6C3 = 0; - if (gWeather.unknown_6C0 < gWeather.unknown_6C1) - gWeather.unknown_6C0++; + gWeatherPtr->unknown_6C3 = 0; + if (gWeatherPtr->unknown_6C0 < gWeatherPtr->unknown_6C1) + gWeatherPtr->unknown_6C0++; else - gWeather.unknown_6C0--; - sub_807CEBC(0, 0x20, gWeather.unknown_6C0); + gWeatherPtr->unknown_6C0--; + sub_807CEBC(0, 0x20, gWeatherPtr->unknown_6C0); } } } void sub_807CCAC(void) { - if (++gWeather.unknown_6CB > 1) - gWeather.unknown_6CA = 0; - switch (gWeather.unknown_6D0) + if (++gWeatherPtr->unknown_6CB > 1) + gWeatherPtr->unknown_6CA = 0; + switch (gWeatherPtr->currWeather) { - case 3: - case 4: - case 5: + case WEATHER_RAIN_LIGHT: + case WEATHER_RAIN_MED: + case WEATHER_RAIN_HEAVY: + case WEATHER_SNOW: case 11: - case 13: if (sub_807CDC4() == 0) { - gWeather.unknown_6C0 = 3; - gWeather.unknown_6C6 = 3; + gWeatherPtr->unknown_6C0 = 3; + gWeatherPtr->unknown_6C6 = 3; } break; case 12: if (sub_807CE24() == 0) { - gWeather.unknown_6C0 = -6; - gWeather.unknown_6C6 = 3; + gWeatherPtr->unknown_6C0 = -6; + gWeatherPtr->unknown_6C6 = 3; } break; case 6: if (sub_807CE7C() == 0) { - gWeather.unknown_6C0 = 0; - gWeather.unknown_6C6 = 3; + gWeatherPtr->unknown_6C0 = 0; + gWeatherPtr->unknown_6C6 = 3; } break; case 7: @@ -388,8 +427,8 @@ void sub_807CCAC(void) default: if (!gPaletteFade.active) { - gWeather.unknown_6C0 = gWeather.unknown_6C1; - gWeather.unknown_6C6 = 3; + gWeatherPtr->unknown_6C0 = gWeatherPtr->unknown_6C1; + gWeatherPtr->unknown_6C6 = 3; } break; } @@ -397,38 +436,38 @@ void sub_807CCAC(void) u8 sub_807CDC4(void) { - if (gWeather.unknown_6C7 == 0x10) + if (gWeatherPtr->unknown_6C7 == 0x10) return 0; - if (++gWeather.unknown_6C7 >= 0x10) + if (++gWeatherPtr->unknown_6C7 >= 0x10) { sub_807CEBC(0, 0x20, 3); - gWeather.unknown_6C7 = 0x10; + gWeatherPtr->unknown_6C7 = 0x10; return 0; } - sub_807D1BC(0, 0x20, 3, 0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4); + sub_807D1BC(0, 0x20, 3, 0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4); return 1; } u8 sub_807CE24(void) { - if (gWeather.unknown_6C7 == 0x10) + if (gWeatherPtr->unknown_6C7 == 0x10) return 0; - if (++gWeather.unknown_6C7 >= 0x10) + if (++gWeatherPtr->unknown_6C7 >= 0x10) { sub_807CEBC(0, 0x20, -6); - gWeather.unknown_6C7 = 0x10; + gWeatherPtr->unknown_6C7 = 0x10; return 0; } - sub_807D304(-6, 0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4); + sub_807D304(-6, 0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4); return 1; } u8 sub_807CE7C(void) { - if (gWeather.unknown_6C7 == 0x10) + if (gWeatherPtr->unknown_6C7 == 0x10) return 0; - ++gWeather.unknown_6C7; - sub_807D424(0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4); + ++gWeatherPtr->unknown_6C7; + sub_807D424(0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4); return 1; } @@ -460,10 +499,10 @@ void sub_807CEBC(u8 a, u8 b, s8 c) { u8 r, g, b; - if (gUnknown_030006DC[r4] == 2 || r4 - 16 == gWeather.unknown_6D5) - r6 = gWeather.unk460[c]; + if (gUnknown_030006DC[r4] == 2 || r4 - 16 == gWeatherPtr->unknown_6D5) + r6 = gWeatherPtr->unk460[c]; else - r6 = gWeather.unknown_200[c]; + r6 = gWeatherPtr->unknown_200[c]; if (r4 == 16 || r4 > 0x1B) { for (i = 0; i < 16; i++) @@ -567,9 +606,9 @@ void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e) u8 *r5; if (gUnknown_030006DC[r4] == 1) - r5 = gWeather.unknown_200[c]; + r5 = gWeatherPtr->unknown_200[c]; else - r5 = gWeather.unk460[c]; + r5 = gWeatherPtr->unk460[c]; for (i = 0; i < 16; i++) { @@ -695,10 +734,10 @@ void sub_807D424(u8 a, u16 b) void sub_807D540(u8 a) { - if (gWeather.unknown_6FA < 6) + if (gWeatherPtr->unknown_6FA < 6) { - gWeather.unknown_6F4[gWeather.unknown_6FA] = a; - gWeather.unknown_6FA++; + gWeatherPtr->unknown_6F4[gWeatherPtr->unknown_6FA] = a; + gWeatherPtr->unknown_6FA++; } } @@ -706,9 +745,9 @@ bool8 sub_807D574(u8 a) { u16 i; - for (i = 0; i < gWeather.unknown_6FA; i++) + for (i = 0; i < gWeatherPtr->unknown_6FA; i++) { - if (gWeather.unknown_6F4[i] == a) + if (gWeatherPtr->unknown_6F4[i] == a) return TRUE; } return FALSE; @@ -716,22 +755,22 @@ bool8 sub_807D574(u8 a) void sub_807D5BC(s8 a) { - if (gWeather.unknown_6C6 == 3) + if (gWeatherPtr->unknown_6C6 == 3) { sub_807CEBC(0, 32, a); - gWeather.unknown_6C0 = a; + gWeatherPtr->unknown_6C0 = a; } } void sub_807D5F0(u8 a, u8 b, u8 c) { - if (gWeather.unknown_6C6 == 3) + if (gWeatherPtr->unknown_6C6 == 3) { - gWeather.unknown_6C6 = 0; - gWeather.unknown_6C0 = a; - gWeather.unknown_6C1 = b; - gWeather.unknown_6C3 = 0; - gWeather.unknown_6C2 = c; + gWeatherPtr->unknown_6C6 = 0; + gWeatherPtr->unknown_6C0 = a; + gWeatherPtr->unknown_6C1 = b; + gWeatherPtr->unknown_6C3 = 0; + gWeatherPtr->unknown_6C2 = c; sub_807D5BC(a); } } @@ -764,15 +803,15 @@ void fade_screen(u8 a, u8 b) return; } - switch (gWeather.unknown_6D0) + switch (gWeatherPtr->currWeather) { - case 3: - case 4: - case 5: + case WEATHER_RAIN_LIGHT: + case WEATHER_RAIN_MED: + case WEATHER_RAIN_HEAVY: + case WEATHER_SNOW: case 6: case 11: case 12: - case 13: r2 = 1; break; default: @@ -785,26 +824,26 @@ void fade_screen(u8 a, u8 b) if (r2 != 0) CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); BeginNormalPaletteFade(0xFFFFFFFF, b, 0, 16, r4); - gWeather.unknown_6C6 = 2; + gWeatherPtr->unknown_6C6 = 2; } else { - gWeather.unknown_6C4 = r4; + gWeatherPtr->unknown_6C4 = r4; if (r2 != 0) - gWeather.unknown_6C7 = 0; + gWeatherPtr->unknown_6C7 = 0; else BeginNormalPaletteFade(0xFFFFFFFF, b, 16, 0, r4); - gWeather.unknown_6C6 = 1; - gWeather.unknown_6CA = 1; - gWeather.unknown_6CB = 0; - sub_807DB64(gWeather.unknown_730, gWeather.unknown_732); - gWeather.unknown_6C8 = 1; + gWeatherPtr->unknown_6C6 = 1; + gWeatherPtr->unknown_6CA = 1; + gWeatherPtr->unknown_6CB = 0; + sub_807DB64(gWeatherPtr->unknown_730, gWeatherPtr->unknown_732); + gWeatherPtr->unknown_6C8 = 1; } } bool8 sub_807D770(void) { - return gWeather.unknown_6C6 ^ 1 ? TRUE : FALSE; + return gWeatherPtr->unknown_6C6 ^ 1 ? TRUE : FALSE; } void sub_807D78C(u8 a) @@ -812,16 +851,16 @@ void sub_807D78C(u8 a) u16 r4 = 16 + a; u16 i; - switch (gWeather.unknown_6C6) + switch (gWeatherPtr->unknown_6C6) { case 1: - if (gWeather.unknown_6CA != 0) + if (gWeatherPtr->unknown_6CA != 0) { - if (gWeather.unknown_6D0 == 6) + if (gWeatherPtr->currWeather == 6) sub_807D540(r4); r4 *= 16; for (i = 0; i < 16; i++) - gPlttBufferFaded[r4 + i] = gWeather.unknown_6C4; + gPlttBufferFaded[r4 + i] = gWeatherPtr->unknown_6C4; } break; case 2: @@ -830,9 +869,9 @@ void sub_807D78C(u8 a) BlendPalette(r4, 16, gPaletteFade.y, gPaletteFade.blendColor); break; default: - if (gWeather.unknown_6D0 != 6) + if (gWeatherPtr->currWeather != 6) { - sub_807CEBC(r4, 1, gWeather.unknown_6C0); + sub_807CEBC(r4, 1, gWeatherPtr->unknown_6C0); } else { @@ -845,21 +884,21 @@ void sub_807D78C(u8 a) void sub_807D874(u8 a) { - sub_807CEBC(a, 1, gWeather.unknown_6C0); + sub_807CEBC(a, 1, gWeatherPtr->unknown_6C0); } u8 unref_sub_807D894(void) { - if (gWeather.unknown_6C6 == 1) - return gWeather.unknown_6CA; + if (gWeatherPtr->unknown_6C6 == 1) + return gWeatherPtr->unknown_6CA; else return 0; } void sub_807D8C0(const u16 *palette) { - LoadPalette(palette, 0x100 + gWeather.unknown_6D4 * 16, 32); - sub_807D78C(gWeather.unknown_6D4); + LoadPalette(palette, 0x100 + gWeatherPtr->unknown_6D4 * 16, 32); + sub_807D78C(gWeatherPtr->unknown_6D4); } void sub_807D8F0(u8 *a, u8 *b) @@ -893,16 +932,16 @@ void sub_807D8F0(u8 *a, u8 *b) void sub_807D9A8(void) { - gWeather.unknown_74D = 1; - gWeather.unknown_74E = 1; + gWeatherPtr->unknown_74D = 1; + gWeatherPtr->unknown_74E = 1; } bool8 sub_807D9C8(void) { - if (gWeather.unknown_74D < 32) + if (gWeatherPtr->unknown_74D < 32) { - sub_807D8F0(&gWeather.unknown_74D, &gWeather.unknown_74E); - if (gWeather.unknown_74D < 32) + sub_807D8F0(&gWeatherPtr->unknown_74D, &gWeatherPtr->unknown_74E); + if (gWeatherPtr->unknown_74D < 32) return TRUE; } return FALSE; @@ -915,44 +954,44 @@ void sub_807DA04(s8 a) void sub_807DA14(void) { - gWeather.unknown_73C = 0; - gWeather.unknown_740 = 0; - gWeather.unknown_742 = 0; - gWeather.unknown_73E = 0; + gWeatherPtr->unknown_73C = 0; + gWeatherPtr->unknown_740 = 0; + gWeatherPtr->unknown_742 = 0; + gWeatherPtr->unknown_73E = 0; gUnknown_0202FF58 = 5; } void sub_807DA4C(void) { - switch (gWeather.unknown_742) + switch (gWeatherPtr->unknown_742) { case 0: - if (++gWeather.unknown_740 > gUnknown_0202FF58) + if (++gWeatherPtr->unknown_740 > gUnknown_0202FF58) { - gWeather.unknown_740 = 0; - sub_807DA04(gWeather.unknown_73C++); - if (gWeather.unknown_73C > 5) + gWeatherPtr->unknown_740 = 0; + sub_807DA04(gWeatherPtr->unknown_73C++); + if (gWeatherPtr->unknown_73C > 5) { - gWeather.unknown_73E = gWeather.unknown_73C; - gWeather.unknown_742 = 1; - gWeather.unknown_740 = 0x3C; + gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C; + gWeatherPtr->unknown_742 = 1; + gWeatherPtr->unknown_740 = 0x3C; } } break; case 1: - gWeather.unknown_740 = (gWeather.unknown_740 + 3) & 0x7F; - gWeather.unknown_73C = ((gSineTable[gWeather.unknown_740] - 1) >> 6) + 2; - if (gWeather.unknown_73C != gWeather.unknown_73E) - sub_807DA04(gWeather.unknown_73C); - gWeather.unknown_73E = gWeather.unknown_73C; + gWeatherPtr->unknown_740 = (gWeatherPtr->unknown_740 + 3) & 0x7F; + gWeatherPtr->unknown_73C = ((gSineTable[gWeatherPtr->unknown_740] - 1) >> 6) + 2; + if (gWeatherPtr->unknown_73C != gWeatherPtr->unknown_73E) + sub_807DA04(gWeatherPtr->unknown_73C); + gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C; break; case 2: - if (++gWeather.unknown_740 > gUnknown_0202FF58) + if (++gWeatherPtr->unknown_740 > gUnknown_0202FF58) { - gWeather.unknown_740 = 0; - sub_807DA04(--gWeather.unknown_73C); - if (gWeather.unknown_73C == 3) - gWeather.unknown_742 = 0; + gWeatherPtr->unknown_740 = 0; + sub_807DA04(--gWeatherPtr->unknown_73C); + if (gWeatherPtr->unknown_73C == 3) + gWeatherPtr->unknown_742 = 0; } break; } @@ -960,49 +999,49 @@ void sub_807DA4C(void) void sub_807DB64(u8 a, u8 b) { - gWeather.unknown_730 = a; - gWeather.unknown_732 = b; - gWeather.unknown_734 = a; - gWeather.unknown_736 = b; + gWeatherPtr->unknown_730 = a; + gWeatherPtr->unknown_732 = b; + gWeatherPtr->unknown_734 = a; + gWeatherPtr->unknown_736 = b; REG_BLDALPHA = (b << 8) | a; } void sub_807DBA4(u8 a, u8 b, int c) { - gWeather.unknown_734 = a; - gWeather.unknown_736 = b; - gWeather.unknown_73A = c; - gWeather.unknown_739 = 0; - gWeather.unknown_738 = 0; + gWeatherPtr->unknown_734 = a; + gWeatherPtr->unknown_736 = b; + gWeatherPtr->unknown_73A = c; + gWeatherPtr->unknown_739 = 0; + gWeatherPtr->unknown_738 = 0; } bool8 sub_807DBE8(void) { - if (gWeather.unknown_730 == gWeather.unknown_734 - && gWeather.unknown_732 == gWeather.unknown_736) + if (gWeatherPtr->unknown_730 == gWeatherPtr->unknown_734 + && gWeatherPtr->unknown_732 == gWeatherPtr->unknown_736) return TRUE; - if (++gWeather.unknown_739 > gWeather.unknown_73A) + if (++gWeatherPtr->unknown_739 > gWeatherPtr->unknown_73A) { - gWeather.unknown_739 = 0; - gWeather.unknown_738++; - if (gWeather.unknown_738 & 1) + gWeatherPtr->unknown_739 = 0; + gWeatherPtr->unknown_738++; + if (gWeatherPtr->unknown_738 & 1) { - if (gWeather.unknown_730 < gWeather.unknown_734) - gWeather.unknown_730++; - else if (gWeather.unknown_730 > gWeather.unknown_734) - gWeather.unknown_730--; + if (gWeatherPtr->unknown_730 < gWeatherPtr->unknown_734) + gWeatherPtr->unknown_730++; + else if (gWeatherPtr->unknown_730 > gWeatherPtr->unknown_734) + gWeatherPtr->unknown_730--; } else { - if (gWeather.unknown_732 < gWeather.unknown_736) - gWeather.unknown_732++; - else if (gWeather.unknown_732 > gWeather.unknown_736) - gWeather.unknown_732--; + if (gWeatherPtr->unknown_732 < gWeatherPtr->unknown_736) + gWeatherPtr->unknown_732++; + else if (gWeatherPtr->unknown_732 > gWeatherPtr->unknown_736) + gWeatherPtr->unknown_732--; } } - REG_BLDALPHA = (gWeather.unknown_732 << 8) | gWeather.unknown_730; - if (gWeather.unknown_730 == gWeather.unknown_734 - && gWeather.unknown_732 == gWeather.unknown_736) + REG_BLDALPHA = (gWeatherPtr->unknown_732 << 8) | gWeatherPtr->unknown_730; + if (gWeatherPtr->unknown_730 == gWeatherPtr->unknown_734 + && gWeatherPtr->unknown_732 == gWeatherPtr->unknown_736) return TRUE; return FALSE; } @@ -1046,23 +1085,23 @@ void unref_sub_807DCB4(u8 a) u8 weather_get_current(void) { - return gWeather.unknown_6D0; + return gWeatherPtr->currWeather; } -void sub_807DD5C(u16 sndEff) +void SetRainStrengthFromSoundEffect(u16 sndEff) { - if (gUnknown_0202F7E8.unknown_6C6 != 2) + if (gWeatherPtr->unknown_6C6 != 2) { switch (sndEff) { case SE_T_KOAME: - gUnknown_0202F7E8.unknown_6DD = 0; + gWeatherPtr->rainStrength = 0; break; case SE_T_OOAME: - gUnknown_0202F7E8.unknown_6DD = 1; + gWeatherPtr->rainStrength = 1; break; case SE_T_AME: - gUnknown_0202F7E8.unknown_6DD = 2; + gWeatherPtr->rainStrength = 2; break; default: return; @@ -1075,17 +1114,17 @@ void PlayRainSoundEffect(void) { if (IsSpecialSEPlaying()) { - switch (gUnknown_0202F7E8.unknown_6DD) + switch (gWeatherPtr->rainStrength) { case 0: - PlaySE(0x56); + PlaySE(SE_T_KOAME_E); break; case 1: - PlaySE(0x54); + PlaySE(SE_T_OOAME_E); break; case 2: default: - PlaySE(0x52); + PlaySE(SE_T_AME_E); break; } } @@ -1093,17 +1132,17 @@ void PlayRainSoundEffect(void) u8 sub_807DDFC(void) { - return gUnknown_0202F7E8.unknown_6D3; + return gWeatherPtr->unknown_6D3; } void sub_807DE10(void) { - gUnknown_0202F7E8.unknown_6C6 = 2; + gWeatherPtr->unknown_6C6 = 2; } void unref_sub_807DE24(void) { - gUnknown_0202F7E8.unknown_6C6 = 3; + gWeatherPtr->unknown_6C6 = 3; } void sub_807DE38(u8 a) @@ -1117,1028 +1156,3 @@ void sub_807DE68(void) { gUnknown_030006DC = gUnknown_083970C8; } - -void sub_807DE78(void) -{ - gUnknown_08396FC4->unknown_6C1 = 0; - gUnknown_08396FC4->unknown_6C2 = 20; - gUnknown_08396FC4->unknown_6D2 = 0; - gUnknown_08396FC4->unknown_6CC = 0; - if (gUnknown_08396FC4->unknown_6DE == 0) - sub_807DB64(0, 16); -} - -void sub_807DEF4(void); - -void sub_807DEC4(void) -{ - sub_807DE78(); - while (gUnknown_08396FC4->unknown_6D2 == 0) - sub_807DEF4(); -} - -void sub_807DFD4(void); - -void sub_807DEF4(void) -{ - switch (gUnknown_08396FC4->unknown_6CC) - { - case 0: - sub_807DFD4(); - gUnknown_08396FC4->unknown_6CC++; - break; - case 1: - sub_807DBA4(12, 8, 1); - gUnknown_08396FC4->unknown_6CC++; - break; - case 2: - if (sub_807DBE8()) - { - gUnknown_08396FC4->unknown_6D2 = 1; - gUnknown_08396FC4->unknown_6CC++; - } - break; - } -} - -void sub_807E0A0(void); - -bool8 sub_807DF54(void) -{ - switch (gUnknown_08396FC4->unknown_6CE) - { - case 0: - sub_807DBA4(0, 16, 1); - gUnknown_08396FC4->unknown_6CE++; - return TRUE; - case 1: - if (sub_807DBE8()) - { - sub_807E0A0(); - gUnknown_08396FC4->unknown_6CE++; - } - return TRUE; - } - return FALSE; -} - -void sub_807DF9C(void) -{ - gUnknown_08396FC4->unknown_6C1 = 0; - gUnknown_08396FC4->unknown_6C2 = 20; -} - -void sub_807DFC0(void) -{ - sub_807DF9C(); -} - -void nullsub_55(void) -{ -} - -int sub_807DFD0(void) -{ - return 0; -} - -void sub_807DFD4(void) -{ - u16 i; - - if (gUnknown_08396FC4->unknown_6DE == 1) - return; - LoadSpriteSheet(&gUnknown_0839A9D4); - sub_807D8C0(gUnknown_08397108); - for (i = 0; i < 3; i++) - { - u8 spriteId = CreateSprite(&gSpriteTemplate_839A9F0, 0, 0, 0xFF); - - if (spriteId != 64) - { - struct Sprite *sprite; - - gUnknown_08396FC4->unknown_1F4[i] = &gSprites[spriteId]; - sprite = gUnknown_08396FC4->unknown_1F4[i]; - sub_80603CC(gUnknown_0839A9C8[i].x + 7, gUnknown_0839A9C8[i].y + 7, &sprite->pos1.x, &sprite->pos1.y); - sprite->coordOffsetEnabled = TRUE; - } - else - { - gUnknown_08396FC4->unknown_1F4[i] = NULL; - } - } - gUnknown_08396FC4->unknown_6DE = 1; -} - -void sub_807E0A0(void) -{ - u16 i; - - if (gUnknown_08396FC4->unknown_6DE == 0) - return; - for (i = 0; i < 3; i++) - { - if (gUnknown_08396FC4->unknown_1F4[i] != NULL) - DestroySprite(gUnknown_08396FC4->unknown_1F4[i]); - } - FreeSpriteTilesByTag(0x1200); - gUnknown_08396FC4->unknown_6DE = 0; -} - -void sub_807E0F4(struct Sprite *sprite) -{ - sprite->data[0] = (sprite->data[0] + 1) & 1; - if (sprite->data[0] != 0) - sprite->pos1.x--; -} - -void sub_807E110(void) -{ - gUnknown_08396FC4->unknown_6CC = 0; - gUnknown_08396FC4->unknown_6D2 = 0; - gUnknown_08396FC4->unknown_6C1 = 0; - gUnknown_08396FC4->unknown_6C2 = 0; -} - -void sub_807E174(void); - -void sub_807E144(void) -{ - sub_807E110(); - while (gUnknown_08396FC4->unknown_6D2 == 0) - sub_807E174(); -} - -void sub_807E174(void) -{ - switch (gUnknown_08396FC4->unknown_6CC) - { - case 0: - if (gUnknown_08396FC4->unknown_6C6 != 0) - gUnknown_08396FC4->unknown_6CC++; - break; - case 1: - sub_807D9A8(); - gUnknown_08396FC4->unknown_6CC++; - break; - case 2: - if (sub_807D9C8() == FALSE) - gUnknown_08396FC4->unknown_6CC++; - break; - case 3: - sub_807DA14(); - gUnknown_08396FC4->unknown_6CC++; - break; - case 4: - sub_807DA4C(); - if (gUnknown_08396FC4->unknown_73C == 6) - { - gUnknown_08396FC4->unknown_6D2 = 1; - gUnknown_08396FC4->unknown_6CC++; - } - break; - default: - sub_807DA4C(); - break; - } -} - -int sub_807E258(void) -{ - return 0; -} - -void task50_0807B6D4(u8); - -void sub_807E25C(void) -{ - CreateTask(task50_0807B6D4, 0x50); -} - -#define tState data[0] -#define tBlendY data[1] -#define tBlendDelay data[2] -#define tWinRange data[3] - -void task50_0807B6D4(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - switch (task->tState) - { - case 0: - task->tBlendY = 0; - task->tBlendDelay = 0; - task->tWinRange = REG_WININ; - REG_WININ = WIN_RANGE(63, 63); - REG_BLDCNT = 0x9E; - REG_BLDY = 0; - task->tState++; - // fall through - case 1: - task->tBlendY += 3; - if (task->tBlendY > 16) - task->tBlendY = 16; - REG_BLDY = task->tBlendY; - if (task->tBlendY >= 16) - task->tState++; - break; - case 2: - task->tBlendDelay++; - if (task->tBlendDelay > 9) - { - task->tBlendDelay = 0; - task->tBlendY--; - if (task->tBlendY <= 0) - { - task->tBlendY = 0; - task->tState++; - } - REG_BLDY = task->tBlendY; - } - break; - case 3: - REG_BLDCNT = 0; - REG_BLDY = 0; - REG_WININ = task->tWinRange; - task->tState++; - break; - case 4: - EnableBothScriptContexts(); - DestroyTask(taskId); - break; - } -} - -#undef tState -#undef tBlendY -#undef tBlendDelay -#undef tWinRange - -void sub_807E364(void) -{ - gUnknown_08396FC4->unknown_6CC = 0; - gUnknown_08396FC4->unknown_6D2 = 0; - gUnknown_08396FC4->unknown_6D6 = 0; - gUnknown_08396FC4->unknown_6DB = 8; - gUnknown_08396FC4->unknown_6DC = 0; - gUnknown_08396FC4->unknown_6D9 = 10; - gUnknown_08396FC4->unknown_6C1 = 3; - gUnknown_08396FC4->unknown_6C2 = 20; - sub_807DD5C(SE_T_KOAME); -} - -void sub_807E400(void); - -void sub_807E3D0(void) -{ - sub_807E364(); - while (gUnknown_08396FC4->unknown_6D2 == 0) - sub_807E400(); -} - -void sub_807E7A4(void); -u8 sub_807E7B4(void); -u8 sub_807E8E8(void); - -void sub_807E400(void) -{ - switch (gUnknown_08396FC4->unknown_6CC) - { - case 0: - sub_807E7A4(); - gUnknown_08396FC4->unknown_6CC++; - break; - case 1: - if (sub_807E7B4() == 0) - gUnknown_08396FC4->unknown_6CC++; - break; - case 2: - if (sub_807E8E8() == FALSE) - { - gUnknown_08396FC4->unknown_6D2 = 1; - gUnknown_08396FC4->unknown_6CC++; - } - break; - } -} - -void sub_807E974(void); - -bool8 sub_807E460(void) -{ - switch (gUnknown_08396FC4->unknown_6CE) - { - case 0: - if (gUnknown_08396FC4->unknown_6D1 == 3 - || gUnknown_08396FC4->unknown_6D1 == 5 - || gUnknown_08396FC4->unknown_6D1 == 13) - { - gUnknown_08396FC4->unknown_6CE = 0xFF; - return FALSE; - } - else - { - gUnknown_08396FC4->unknown_6D9 = 0; - gUnknown_08396FC4->unknown_6CE++; - } - // fall through - case 1: - if (sub_807E8E8() == FALSE) - { - sub_807E974(); - gUnknown_08396FC4->unknown_6CE++; - return FALSE; - } - return TRUE; - } - return FALSE; -} - -//extern const struct Coords16 gUnknown_0839AAC4[]; -extern const u16 gUnknown_0839AAC4[][2]; -//extern const struct Coords16 gUnknown_0839AABC[]; -extern const s16 gUnknown_0839AABC[][2]; - -void sub_807E4EC(struct Sprite *sprite) -{ - u32 randVal; - u16 r6; - s32 r4; - s32 r0; - - if (sprite->data[1] == 0) - sprite->data[1] = 361; - randVal = sprite->data[1] * 1103515245 + 12345; - sprite->data[1] = ((randVal & 0x7FFF0000) >> 16) % 600; - - r6 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][0]; - - r4 = sprite->data[1] % 30; - sprite->data[2] = r4 * 8; // useless assignment - - r0 = sprite->data[1] / 30; - sprite->data[3] = r0 * 8; // useless assignment - - sprite->data[2] = r4; - sprite->data[2] <<= 7; - - sprite->data[3] = r0; - sprite->data[3] <<= 7; - - sprite->data[2] -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0] * r6; - sprite->data[3] -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1] * r6; - - StartSpriteAnim(sprite, 0); - sprite->data[4] = 0; - sprite->coordOffsetEnabled = FALSE; - sprite->data[0] = r6; -} - -void sub_807E5C0(struct Sprite *sprite) -{ - if (sprite->data[4] == 0) - { - sprite->data[2] += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0]; - sprite->data[3] += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1]; - sprite->pos1.x = sprite->data[2] >> 4; - sprite->pos1.y = sprite->data[3] >> 4; - - if (sprite->data[5] != 0 - && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248) - && sprite->pos1.y >= -16 && sprite->pos1.y <= 176) - sprite->invisible = FALSE; - else - sprite->invisible = TRUE; - - sprite->data[0]--; - if (sprite->data[0] == 0) - { - StartSpriteAnim(sprite, gUnknown_08396FC4->unknown_6DC + 1); - sprite->data[4] = 1; - sprite->pos1.x -= gSpriteCoordOffsetX; - sprite->pos1.y -= gSpriteCoordOffsetY; - sprite->coordOffsetEnabled = TRUE; - } - } - else if (sprite->animEnded) - { - sprite->invisible = TRUE; - sub_807E4EC(sprite); - } -} - -void sub_807E6C4(struct Sprite *sprite) -{ - if (sprite->data[0] == 0) - { - sub_807E4EC(sprite); - sprite->callback = sub_807E5C0; - } - else - { - sprite->data[0]--; - } -} - -void sub_807E6F0(struct Sprite *sprite, u16 b) -{ - u16 r8 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][0]; - u16 r6 = b / (gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][1] + r8); - u16 r4 = b % (gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][1] + r8); - - while (--r6 != 0xFFFF) - sub_807E4EC(sprite); - if (r4 < r8) - { - while (--r4 != 0xFFFF) - sub_807E5C0(sprite); - sprite->data[6] = 0; - } - else - { - sprite->data[0] = r4 - r8; - sprite->invisible = TRUE; - sprite->data[6] = 1; - } -} - -void sub_807E7A4(void) -{ - LoadSpriteSheet(&gUnknown_0839AACC); -} - -extern const struct Coords16 gUnknown_0839AA08[]; - -bool8 sub_807E7B4(void) -{ - u8 r7; - u8 spriteId; - - if (gUnknown_08396FC4->unknown_6DA == 24) - return FALSE; - - r7 = gUnknown_08396FC4->unknown_6DA; - spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AAA4, - gUnknown_0839AA08[r7].x, gUnknown_0839AA08[r7].y, 78); - if (spriteId != 64) - { - gSprites[spriteId].data[5] = 0; - gSprites[spriteId].data[1] = r7 * 145; - while (gSprites[spriteId].data[1] >= 600) - gSprites[spriteId].data[1] -= 600; - sub_807E4EC(&gSprites[spriteId]); - sub_807E6F0(&gSprites[spriteId], r7 * 9); - gSprites[spriteId].invisible = TRUE; - gUnknown_08396FC4->unknown_0[r7] = &gSprites[spriteId]; - } - else - { - gUnknown_08396FC4->unknown_0[r7] = NULL; - } - - if (++gUnknown_08396FC4->unknown_6DA == 24) - { - u16 i; - - for (i = 0; i < 24; i++) - { - if (gUnknown_08396FC4->unknown_0[i] != NULL) - { - if (gUnknown_08396FC4->unknown_0[i]->data[6] == 0) - gUnknown_08396FC4->unknown_0[i]->callback = sub_807E5C0; - else - gUnknown_08396FC4->unknown_0[i]->callback = sub_807E6C4; - } - } - return FALSE; - } - return TRUE; -} - -bool8 sub_807E8E8(void) -{ - if (gUnknown_08396FC4->unknown_6D8 == gUnknown_08396FC4->unknown_6D9) - return FALSE; - - if (++gUnknown_08396FC4->unknown_6D6 > gUnknown_08396FC4->unknown_6DB) - { - gUnknown_08396FC4->unknown_6D6 = 0; - if (gUnknown_08396FC4->unknown_6D8 < gUnknown_08396FC4->unknown_6D9) - { - gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8++]->data[5] = 1; - } - else - { - gUnknown_08396FC4->unknown_6D8--; - gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8]->data[5] = 0; - gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8]->invisible = TRUE; - } - } - return TRUE; -} - -void sub_807E974(void) -{ - u16 i; - - for (i = 0; i < gUnknown_08396FC4->unknown_6DA; i++) - { - if (gUnknown_08396FC4->unknown_0[i] != NULL) - DestroySprite(gUnknown_08396FC4->unknown_0[i]); - } - gUnknown_08396FC4->unknown_6DA = 0; - FreeSpriteTilesByTag(0x1206); -} - -void sub_807E9C8(void) -{ - gUnknown_08396FC4->unknown_6CC = 0; - gUnknown_08396FC4->unknown_6D2 = 0; - gUnknown_08396FC4->unknown_6C1 = 3; - gUnknown_08396FC4->unknown_6C2 = 20; - gUnknown_08396FC4->unknown_6E5 = 16; - gUnknown_08396FC4->unknown_6E0 = 0; -} - -void snowflakes_progress2(void); -void sub_807ED48(struct Sprite *); - -void sub_807EA18(void) -{ - sub_807E9C8(); - while (gUnknown_08396FC4->unknown_6D2 == 0) - { - u16 i; - - snowflakes_progress2(); - for (i = 0; i < gUnknown_08396FC4->unknown_6E4; i++) - { - sub_807ED48(gUnknown_08396FC4->unknown_60[i]); - } - } -} - -u8 snowflakes_progress(void); - -void snowflakes_progress2(void) -{ - if (gUnknown_08396FC4->unknown_6CC == 0 && snowflakes_progress() == FALSE) - { - gUnknown_08396FC4->unknown_6D2 = 1; - gUnknown_08396FC4->unknown_6CC++; - } -} - -bool8 sub_807EAC0(void) -{ - switch (gUnknown_08396FC4->unknown_6CE) - { - case 0: - gUnknown_08396FC4->unknown_6E5 = 0; - gUnknown_08396FC4->unknown_6E0 = 0; - gUnknown_08396FC4->unknown_6CE++; - // fall through - case 1: - if (snowflakes_progress() == FALSE) - { - gUnknown_08396FC4->unknown_6CE++; - return FALSE; - } - return TRUE; - } - return FALSE; -} - -bool8 snowflake_add(void); -bool8 snowflake_remove(void); - -bool8 snowflakes_progress(void) -{ - if (gUnknown_08396FC4->unknown_6E4 == gUnknown_08396FC4->unknown_6E5) - return FALSE; - - gUnknown_08396FC4->unknown_6E0++; - if (gUnknown_08396FC4->unknown_6E0 > 36) - { - gUnknown_08396FC4->unknown_6E0 = 0; - if (gUnknown_08396FC4->unknown_6E4 < gUnknown_08396FC4->unknown_6E5) - snowflake_add(); - else - snowflake_remove(); - } - return (gUnknown_08396FC4->unknown_6E4 != gUnknown_08396FC4->unknown_6E5); -} - -void sub_807EC40(struct Sprite *); - -bool8 snowflake_add(void) -{ - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AB04, 0, 0, 78); - - if (spriteId == 64) - return FALSE; - gSprites[spriteId].data[4] = gUnknown_08396FC4->unknown_6E4; - sub_807EC40(&gSprites[spriteId]); - gSprites[spriteId].coordOffsetEnabled = TRUE; - gUnknown_08396FC4->unknown_60[gUnknown_08396FC4->unknown_6E4++] = &gSprites[spriteId]; - return TRUE; -} - -bool8 snowflake_remove(void) -{ - if (gUnknown_08396FC4->unknown_6E4 != 0) - { - DestroySprite(gUnknown_08396FC4->unknown_60[--gUnknown_08396FC4->unknown_6E4]); - return TRUE; - } - return FALSE; -} - -void sub_807EC40(struct Sprite *sprite) -{ - u16 r4 = ((sprite->data[4] * 5) & 7) * 30 + (Random() % 30); - u16 r6; - - sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->pos1.x = r4 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); - sprite->data[0] = sprite->pos1.y * 128; - sprite->pos2.x = 0; - r6 = Random(); - sprite->data[1] = (r6 & 3) * 5 + 64; - sprite->data[7] = (r6 & 3) * 5 + 64; - StartSpriteAnim(sprite, (r6 & 1) ? 0 : 1); - sprite->data[3] = 0; - sprite->data[2] = ((r6 & 3) == 0) ? 2 : 1; - sprite->data[6] = (r6 & 0x1F) + 210; - sprite->data[5] = 0; -} - -void sub_807ECEC(struct Sprite *sprite) -{ - if (gUnknown_08396FC4->unknown_6E2 > 18) - { - sprite->invisible = FALSE; - sprite->callback = sub_807ED48; - sprite->pos1.y = 0xFA - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->data[0] = sprite->pos1.y * 128; - gUnknown_08396FC4->unknown_6E2 = 0; - } -} - -void sub_807ED48(struct Sprite *sprite) -{ - s16 r3; - s16 r2; - - sprite->data[0] += sprite->data[1]; - sprite->pos1.y = sprite->data[0] >> 7; - sprite->data[3] = (sprite->data[3] + sprite->data[2]) & 0xFF; - sprite->pos2.x = gSineTable[sprite->data[3]] / 64; - - r3 = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF; - if (r3 & 0x100) - r3 = -0x100 | r3; // hmm... what is this? - if (r3 < -3) - sprite->pos1.x = 242 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); - else if (r3 > 242) - sprite->pos1.x = -3 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); - - r2 = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF; - if (r2 > 163 && r2 < 171) - { - sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->data[0] = sprite->pos1.y * 128; - sprite->data[5] = 0; - sprite->data[6] = 220; - } - else if (r2 > 242 && r2 < 250) - { - sprite->pos1.y = 163; - sprite->data[0] = sprite->pos1.y * 128; - sprite->data[5] = 0; - sprite->data[6] = 220; - sprite->invisible = TRUE; - sprite->callback = sub_807ECEC; - } - - sprite->data[5]++; - if (sprite->data[5] == sprite->data[6]) - { - sub_807EC40(sprite); - sprite->pos1.y = 250; - sprite->invisible = TRUE; - sprite->callback = sub_807ECEC; - } -} - -void sub_807EE80(void) -{ - gUnknown_08396FC4->unknown_6CC = 0; - gUnknown_08396FC4->unknown_6D2 = 0; - gUnknown_08396FC4->unknown_6D6 = 0; - gUnknown_08396FC4->unknown_6DB = 4; - gUnknown_08396FC4->unknown_6DC = 0; - gUnknown_08396FC4->unknown_6D9 = 16; - gUnknown_08396FC4->unknown_6C1 = 3; - gUnknown_08396FC4->unknown_6C2 = 20; - gUnknown_08396FC4->unknown_6D2 = 0; // duplicate assignment - gUnknown_08396FC4->unknown_6ED = 0; - sub_807DD5C(0x51); -} - -void sub_807EFC0(void); - -void sub_807EEF4(void) -{ - sub_807EE80(); - while (gUnknown_08396FC4->unknown_6D2 == 0) - sub_807EFC0(); -} - -void sub_807EF24(void) -{ - gUnknown_08396FC4->unknown_6CC = 0; - gUnknown_08396FC4->unknown_6D2 = 0; - gUnknown_08396FC4->unknown_6D6 = 0; - gUnknown_08396FC4->unknown_6DB = 4; - gUnknown_08396FC4->unknown_6DC = 1; - gUnknown_08396FC4->unknown_6D9 = 24; - gUnknown_08396FC4->unknown_6C1 = 3; - gUnknown_08396FC4->unknown_6C2 = 20; - gUnknown_08396FC4->unknown_6D2 = 0; // duplicate assignment - sub_807DD5C(0x53); -} - -void sub_807EF90(void) -{ - sub_807EF24(); - while (gUnknown_08396FC4->unknown_6D2 == 0) - sub_807EFC0(); -} - -void sub_807F434(void); -void sub_807F3F8(u16); - -void sub_807EFC0(void) -{ - sub_807F434(); - switch (gUnknown_08396FC4->unknown_6CC) - { - case 0: - sub_807E7A4(); - gUnknown_08396FC4->unknown_6CC++; - break; - case 1: - if (sub_807E7B4()) - break; - gUnknown_08396FC4->unknown_6CC++; - break; - case 2: - if (sub_807E8E8()) - break; - gUnknown_08396FC4->unknown_6D2 = 1; - gUnknown_08396FC4->unknown_6CC++; - break; - case 3: - if (gUnknown_08396FC4->unknown_6C6 == 0) - break; - gUnknown_08396FC4->unknown_6CC = 6; - break; - case 4: - gUnknown_08396FC4->unknown_6EA = 1; - gUnknown_08396FC4->unknown_6E6 = (Random() % 360) + 360; - gUnknown_08396FC4->unknown_6CC++; - // fall through - case 5: - if (--gUnknown_08396FC4->unknown_6E6 != 0) - break; - gUnknown_08396FC4->unknown_6CC++; - break; - case 6: - gUnknown_08396FC4->unknown_6EA = 1; - gUnknown_08396FC4->unknown_6EB = Random() % 2; - gUnknown_08396FC4->unknown_6CC++; - break; - case 7: - gUnknown_08396FC4->unknown_6EC = (Random() & 1) + 1; - gUnknown_08396FC4->unknown_6CC++; - // fall through - case 8: - sub_807D5BC(19); - if (gUnknown_08396FC4->unknown_6EB == 0 && gUnknown_08396FC4->unknown_6EC == 1) - sub_807F3F8(20); - gUnknown_08396FC4->unknown_6E6 = (Random() % 3) + 6; - gUnknown_08396FC4->unknown_6CC++; - break; - case 9: - if (--gUnknown_08396FC4->unknown_6E6 != 0) - break; - sub_807D5BC(3); - gUnknown_08396FC4->unknown_6EA = 1; - if (--gUnknown_08396FC4->unknown_6EC != 0) - { - gUnknown_08396FC4->unknown_6E6 = (Random() % 16) + 60; - gUnknown_08396FC4->unknown_6CC = 10; - } - else if (gUnknown_08396FC4->unknown_6EB == 0) - { - gUnknown_08396FC4->unknown_6CC = 4; - } - else - { - gUnknown_08396FC4->unknown_6CC = 11; - } - break; - case 10: - if (--gUnknown_08396FC4->unknown_6E6 != 0) - break; - gUnknown_08396FC4->unknown_6CC = 8; - break; - case 11: - gUnknown_08396FC4->unknown_6E6 = (Random() % 16) + 60; - gUnknown_08396FC4->unknown_6CC++; - break; - case 12: - if (--gUnknown_08396FC4->unknown_6E6 != 0) - break; - sub_807F3F8(100); - sub_807D5BC(19); - // Why use "% 16" everywhere else and "& 0xF" here. So dumb. - gUnknown_08396FC4->unknown_6E6 = (Random() & 0xF) + 30; - gUnknown_08396FC4->unknown_6CC++; - break; - case 13: - if (--gUnknown_08396FC4->unknown_6E6 != 0) - break; - sub_807D5F0(19, 3, 5); - gUnknown_08396FC4->unknown_6CC++; - break; - case 14: - if (gUnknown_08396FC4->unknown_6C6 != 3) - break; - gUnknown_08396FC4->unknown_6EA = 1; - gUnknown_08396FC4->unknown_6CC = 4; - break; - } -} - -bool8 sub_807F34C(void) -{ - switch (gUnknown_08396FC4->unknown_6CE) - { - case 0: - gUnknown_08396FC4->unknown_6EA = 0; - gUnknown_08396FC4->unknown_6CE++; - // fall through - case 1: - sub_807EFC0(); - if (gUnknown_08396FC4->unknown_6EA != 0) - { - if (gUnknown_08396FC4->unknown_6D1 == 3 - || gUnknown_08396FC4->unknown_6D1 == 5 - || gUnknown_08396FC4->unknown_6D1 == 13) - return FALSE; - gUnknown_08396FC4->unknown_6D9 = 0; - gUnknown_08396FC4->unknown_6CE++; - } - break; - case 2: - if (sub_807E8E8()) - break; - sub_807E974(); - gUnknown_08396FC4->unknown_6ED = 0; - gUnknown_08396FC4->unknown_6CE++; - return FALSE; - default: - return FALSE; - } - return TRUE; -} - -void sub_807F3F8(u16 a) -{ - if (gUnknown_08396FC4->unknown_6ED == 0) - { - gUnknown_08396FC4->unknown_6E8 = Random() % 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->data[0] * 64; - if (sprite->pos1.x > 0x10F) - { - sprite->pos1.x = 480 + gUnknown_08396FC4->unknown_6EE - (4 - sprite->data[0]) * 64; - sprite->pos1.x &= 0x1FF; - } -} diff --git a/src/field/field_weather_2.c b/src/field/field_weather_2.c new file mode 100644 index 000000000..fa97df459 --- /dev/null +++ b/src/field/field_weather_2.c @@ -0,0 +1,1511 @@ +#include "global.h" +#include "field_map_obj.h" +#include "field_weather.h" +#include "rng.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" + +extern struct Weather *const gWeatherPtr; + +//extern const s16 gUnknown_0839A9C8[][2]; +extern const struct SpriteSheet gWeatherCloudSpriteSheet; +extern const struct SpriteTemplate gSpriteTemplate_839A9F0; +extern const struct SpriteTemplate gSpriteTemplate_839AAA4; +extern const struct SpriteTemplate gSpriteTemplate_839AB04; + +const u16 gUnknown_08397108[] = INCBIN_U16("graphics/weather/1.gbapal"); +const u16 gUnknown_08397128[] = INCBIN_U16("graphics/weather/2.gbapal"); +const u8 WeatherFog0Tiles[] = INCBIN_U8("graphics/weather/fog0.4bpp"); +const u8 gWeatherFog1Tiles[] = INCBIN_U8("graphics/weather/fog1.4bpp"); +const u8 WeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp"); +const u8 gSpriteImage_8398948[] = INCBIN_U8("graphics/weather/snow0.4bpp"); +const u8 gSpriteImage_8398968[] = INCBIN_U8("graphics/weather/snow1.4bpp"); +const u8 WeatherBubbleTiles[] = INCBIN_U8("graphics/weather/bubble.4bpp"); +const u8 WeatherAshTiles[] = INCBIN_U8("graphics/weather/ash.4bpp"); +const u8 WeatherRainTiles[] = INCBIN_U8("graphics/weather/rain.4bpp"); +const u8 WeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp"); + +const struct Coords16 gUnknown_0839A9C8[] = +{ + { 0, 66}, + { 5, 73}, + {10, 78}, +}; + +const struct SpriteSheet gWeatherCloudSpriteSheet = {WeatherCloudTiles, 0x800, 0x1200}; + +const struct OamData gOamData_839A9DC = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839A9E4[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839A9EC[] = +{ + gSpriteAnim_839A9E4, +}; + +void sub_807E0F4(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839A9F0 = +{ + .tileTag = 4608, + .paletteTag = 4609, + .oam = &gOamData_839A9DC, + .anims = gSpriteAnimTable_839A9EC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807E0F4, +}; + +extern void sub_807D5BC(s8 a); +extern void sub_807D8C0(const u16 *palette); +extern void sub_807D9A8(void); +extern bool8 sub_807D9C8(void); +extern void sub_807DA14(void); +extern void sub_807DA4C(void); +extern void sub_807DBA4(u8 a, u8 b, int c); +extern bool8 sub_807DBE8(void); +extern void SetRainStrengthFromSoundEffect(u16 sndEff); +extern void sub_807D5F0(u8 a, u8 b, u8 c); + +//------------------------------------------------------------------------------ +// Clouds +//------------------------------------------------------------------------------ + +void sub_807DE78(void) +{ + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6CC = 0; + if (gWeatherPtr->unknown_6DE == 0) + sub_807DB64(0, 16); +} + +void sub_807DEF4(void); + +void sub_807DEC4(void) +{ + sub_807DE78(); + while (gWeatherPtr->unknown_6D2 == 0) + sub_807DEF4(); +} + +void sub_807DFD4(void); + +void sub_807DEF4(void) +{ + switch (gWeatherPtr->unknown_6CC) + { + case 0: + sub_807DFD4(); + gWeatherPtr->unknown_6CC++; + break; + case 1: + sub_807DBA4(12, 8, 1); + gWeatherPtr->unknown_6CC++; + break; + case 2: + if (sub_807DBE8()) + { + gWeatherPtr->unknown_6D2 = 1; + gWeatherPtr->unknown_6CC++; + } + break; + } +} + +void sub_807E0A0(void); + +bool8 sub_807DF54(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + sub_807DBA4(0, 16, 1); + gWeatherPtr->unknown_6CE++; + return TRUE; + case 1: + if (sub_807DBE8()) + { + sub_807E0A0(); + gWeatherPtr->unknown_6CE++; + } + return TRUE; + } + return FALSE; +} + +void sub_807DF9C(void) +{ + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; +} + +void sub_807DFC0(void) +{ + sub_807DF9C(); +} + +void nullsub_55(void) +{ +} + +int sub_807DFD0(void) +{ + return 0; +} + +void sub_807DFD4(void) +{ + u16 i; + + if (gWeatherPtr->unknown_6DE == 1) + return; + LoadSpriteSheet(&gWeatherCloudSpriteSheet); + sub_807D8C0(gUnknown_08397108); + for (i = 0; i < 3; i++) + { + u8 spriteId = CreateSprite(&gSpriteTemplate_839A9F0, 0, 0, 0xFF); + + if (spriteId != 64) + { + struct Sprite *sprite; + + gWeatherPtr->cloudSprites[i] = &gSprites[spriteId]; + sprite = gWeatherPtr->cloudSprites[i]; + sub_80603CC(gUnknown_0839A9C8[i].x + 7, gUnknown_0839A9C8[i].y + 7, &sprite->pos1.x, &sprite->pos1.y); + sprite->coordOffsetEnabled = TRUE; + } + else + { + gWeatherPtr->cloudSprites[i] = NULL; + } + } + gWeatherPtr->unknown_6DE = 1; +} + +void sub_807E0A0(void) +{ + u16 i; + + if (gWeatherPtr->unknown_6DE == 0) + return; + for (i = 0; i < 3; i++) + { + if (gWeatherPtr->cloudSprites[i] != NULL) + DestroySprite(gWeatherPtr->cloudSprites[i]); + } + FreeSpriteTilesByTag(0x1200); + gWeatherPtr->unknown_6DE = 0; +} + +void sub_807E0F4(struct Sprite *sprite) +{ + sprite->data[0] = (sprite->data[0] + 1) & 1; + if (sprite->data[0] != 0) + sprite->pos1.x--; +} + +void sub_807E110(void) +{ + gWeatherPtr->unknown_6CC = 0; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 0; +} + +void sub_807E174(void); + +void sub_807E144(void) +{ + sub_807E110(); + while (gWeatherPtr->unknown_6D2 == 0) + sub_807E174(); +} + +void sub_807E174(void) +{ + switch (gWeatherPtr->unknown_6CC) + { + case 0: + if (gWeatherPtr->unknown_6C6 != 0) + gWeatherPtr->unknown_6CC++; + break; + case 1: + sub_807D9A8(); + gWeatherPtr->unknown_6CC++; + break; + case 2: + if (sub_807D9C8() == FALSE) + gWeatherPtr->unknown_6CC++; + break; + case 3: + sub_807DA14(); + gWeatherPtr->unknown_6CC++; + break; + case 4: + sub_807DA4C(); + if (gWeatherPtr->unknown_73C == 6) + { + gWeatherPtr->unknown_6D2 = 1; + gWeatherPtr->unknown_6CC++; + } + break; + default: + sub_807DA4C(); + break; + } +} + +int sub_807E258(void) +{ + return 0; +} + +void task50_0807B6D4(u8); + +void sub_807E25C(void) +{ + CreateTask(task50_0807B6D4, 0x50); +} + +#define tState data[0] +#define tBlendY data[1] +#define tBlendDelay data[2] +#define tWinRange data[3] + +void task50_0807B6D4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->tState) + { + case 0: + task->tBlendY = 0; + task->tBlendDelay = 0; + task->tWinRange = REG_WININ; + REG_WININ = WIN_RANGE(63, 63); + REG_BLDCNT = 0x9E; + REG_BLDY = 0; + task->tState++; + // fall through + case 1: + task->tBlendY += 3; + if (task->tBlendY > 16) + task->tBlendY = 16; + REG_BLDY = task->tBlendY; + if (task->tBlendY >= 16) + task->tState++; + break; + case 2: + task->tBlendDelay++; + if (task->tBlendDelay > 9) + { + task->tBlendDelay = 0; + task->tBlendY--; + if (task->tBlendY <= 0) + { + task->tBlendY = 0; + task->tState++; + } + REG_BLDY = task->tBlendY; + } + break; + case 3: + REG_BLDCNT = 0; + REG_BLDY = 0; + REG_WININ = task->tWinRange; + task->tState++; + break; + case 4: + EnableBothScriptContexts(); + DestroyTask(taskId); + break; + } +} + +#undef tState +#undef tBlendY +#undef tBlendDelay +#undef tWinRange + +//------------------------------------------------------------------------------ +// Light Rain +//------------------------------------------------------------------------------ + +void LightRain_InitVars(void) +{ + gWeatherPtr->unknown_6CC = 0; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6D6 = 0; + gWeatherPtr->unknown_6DB = 8; + gWeatherPtr->unknown_6DC = 0; + gWeatherPtr->unknown_6D9 = 10; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; + SetRainStrengthFromSoundEffect(SE_T_KOAME); +} + +void sub_807E400(void); + +void sub_807E3D0(void) +{ + LightRain_InitVars(); + while (gWeatherPtr->unknown_6D2 == 0) + sub_807E400(); +} + +void sub_807E7A4(void); +u8 sub_807E7B4(void); +u8 sub_807E8E8(void); + +void sub_807E400(void) +{ + switch (gWeatherPtr->unknown_6CC) + { + case 0: + sub_807E7A4(); + gWeatherPtr->unknown_6CC++; + break; + case 1: + if (sub_807E7B4() == 0) + gWeatherPtr->unknown_6CC++; + break; + case 2: + if (sub_807E8E8() == FALSE) + { + gWeatherPtr->unknown_6D2 = 1; + gWeatherPtr->unknown_6CC++; + } + break; + } +} + +void sub_807E974(void); + +bool8 sub_807E460(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + if (gWeatherPtr->unknown_6D1 == 3 + || gWeatherPtr->unknown_6D1 == 5 + || gWeatherPtr->unknown_6D1 == 13) + { + gWeatherPtr->unknown_6CE = 0xFF; + return FALSE; + } + else + { + gWeatherPtr->unknown_6D9 = 0; + gWeatherPtr->unknown_6CE++; + } + // fall through + case 1: + if (sub_807E8E8() == FALSE) + { + sub_807E974(); + gWeatherPtr->unknown_6CE++; + return FALSE; + } + return TRUE; + } + return FALSE; +} + +// defined below +extern const s16 gUnknown_0839AABC[][2]; +extern const u16 gUnknown_0839AAC4[][2]; + +void sub_807E4EC(struct Sprite *sprite) +{ + u32 randVal; + u16 r6; + s32 r4; + s32 r0; + + if (sprite->data[1] == 0) + sprite->data[1] = 361; + randVal = sprite->data[1] * 1103515245 + 12345; + sprite->data[1] = ((randVal & 0x7FFF0000) >> 16) % 600; + + r6 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0]; + + r4 = sprite->data[1] % 30; + sprite->data[2] = r4 * 8; // useless assignment + + r0 = sprite->data[1] / 30; + sprite->data[3] = r0 * 8; // useless assignment + + sprite->data[2] = r4; + sprite->data[2] <<= 7; + + sprite->data[3] = r0; + sprite->data[3] <<= 7; + + sprite->data[2] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0] * r6; + sprite->data[3] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1] * r6; + + StartSpriteAnim(sprite, 0); + sprite->data[4] = 0; + sprite->coordOffsetEnabled = FALSE; + sprite->data[0] = r6; +} + +void sub_807E5C0(struct Sprite *sprite) +{ + if (sprite->data[4] == 0) + { + sprite->data[2] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0]; + sprite->data[3] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1]; + sprite->pos1.x = sprite->data[2] >> 4; + sprite->pos1.y = sprite->data[3] >> 4; + + if (sprite->data[5] != 0 + && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248) + && sprite->pos1.y >= -16 && sprite->pos1.y <= 176) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + + sprite->data[0]--; + if (sprite->data[0] == 0) + { + StartSpriteAnim(sprite, gWeatherPtr->unknown_6DC + 1); + sprite->data[4] = 1; + sprite->pos1.x -= gSpriteCoordOffsetX; + sprite->pos1.y -= gSpriteCoordOffsetY; + sprite->coordOffsetEnabled = TRUE; + } + } + else if (sprite->animEnded) + { + sprite->invisible = TRUE; + sub_807E4EC(sprite); + } +} + +void sub_807E6C4(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + sub_807E4EC(sprite); + sprite->callback = sub_807E5C0; + } + else + { + sprite->data[0]--; + } +} + +void sub_807E6F0(struct Sprite *sprite, u16 b) +{ + u16 r8 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0]; + u16 r6 = b / (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8); + u16 r4 = b % (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8); + + while (--r6 != 0xFFFF) + sub_807E4EC(sprite); + if (r4 < r8) + { + while (--r4 != 0xFFFF) + sub_807E5C0(sprite); + sprite->data[6] = 0; + } + else + { + sprite->data[0] = r4 - r8; + sprite->invisible = TRUE; + sprite->data[6] = 1; + } +} + +extern const struct SpriteSheet gUnknown_0839AACC; // defined below + +void sub_807E7A4(void) +{ + LoadSpriteSheet(&gUnknown_0839AACC); +} + +const struct Coords16 gUnknown_0839AA08[] = +{ + { 0, 0}, + { 0, 160}, + { 0, 64}, + {144, 224}, + {144, 128}, + { 32, 32}, + { 32, 192}, + { 32, 96}, + { 72, 128}, + { 72, 32}, + { 72, 192}, + {216, 96}, + {216, 0}, + {104, 160}, + {104, 64}, + {104, 224}, + {144, 0}, + {144, 160}, + {144, 64}, + { 32, 224}, + { 32, 128}, + { 72, 32}, + { 72, 192}, + { 48, 96}, +}; + +const struct OamData gOamData_839AA68 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 2, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839AA70[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_839AA78[] = +{ + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(40, 2), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AA88[] = +{ + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(24, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AA98[] = +{ + gSpriteAnim_839AA70, + gSpriteAnim_839AA78, + gSpriteAnim_839AA88, +}; + +const struct SpriteTemplate gSpriteTemplate_839AAA4 = +{ + .tileTag = 4614, + .paletteTag = 4608, + .oam = &gOamData_839AA68, + .anims = gSpriteAnimTable_839AA98, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807E5C0, +}; + + +const s16 gUnknown_0839AABC[][2] = +{ + {-104, 208}, + {-160, 320}, +}; + +const u16 gUnknown_0839AAC4[][2] = +{ + {18, 7}, + {12, 10}, +}; + +const struct SpriteSheet gUnknown_0839AACC = {WeatherRainTiles, sizeof(WeatherRainTiles), 0x1206}; + +const struct OamData gOamData_839AAD4 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct SpriteFrameImage gSpriteImageTable_839AADC[] = +{ + {gSpriteImage_8398948, sizeof(gSpriteImage_8398948)}, + {gSpriteImage_8398968, sizeof(gSpriteImage_8398968)}, +}; + +const union AnimCmd gSpriteAnim_839AAEC[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AAF4[] = +{ + ANIMCMD_FRAME(1, 16), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AAFC[] = +{ + gSpriteAnim_839AAEC, + gSpriteAnim_839AAF4, +}; + +void sub_807ED48(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839AB04 = +{ + .tileTag = 0xFFFF, + .paletteTag = 4608, + .oam = &gOamData_839AAD4, + .anims = gSpriteAnimTable_839AAFC, + .images = gSpriteImageTable_839AADC, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807ED48, +}; + +// unused data +const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300}; + +const struct OamData gOamData_839AB2C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839AB34[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AB3C[] = +{ + ANIMCMD_FRAME(32, 16), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AB44[] = +{ + ANIMCMD_FRAME(64, 16), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AB4C[] = +{ + ANIMCMD_FRAME(96, 16), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AB54[] = +{ + ANIMCMD_FRAME(128, 16), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AB5C[] = +{ + ANIMCMD_FRAME(160, 16), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AB64[] = +{ + gSpriteAnim_839AB34, + gSpriteAnim_839AB3C, + gSpriteAnim_839AB44, + gSpriteAnim_839AB4C, + gSpriteAnim_839AB54, + gSpriteAnim_839AB5C, +}; + +const union AffineAnimCmd gSpriteAffineAnim_839AB7C[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] = +{ + gSpriteAffineAnim_839AB7C, +}; + +void sub_807F688(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839AB90 = +{ + .tileTag = 4609, + .paletteTag = 4608, + .oam = &gOamData_839AB2C, + .anims = gSpriteAnimTable_839AB64, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_839AB8C, + .callback = sub_807F688, +}; + +const struct SpriteSheet gWeatherFog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1201}; +const struct SpriteSheet gWeatherAshSpriteSheet = {WeatherAshTiles, sizeof(WeatherAshTiles), 0x1202}; + +const struct OamData gOamData_839ABB8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 15, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839ABC0[] = +{ + ANIMCMD_FRAME(0, 60), + ANIMCMD_FRAME(64, 60), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_839ABCC[] = +{ + gSpriteAnim_839ABC0, +}; + +void sub_807FAA8(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839ABD0 = +{ + .tileTag = 4610, + .paletteTag = 4608, + .oam = &gOamData_839ABB8, + .anims = gSpriteAnimTable_839ABCC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807FAA8, +}; + +const struct SpriteSheet gWeatherFog0SpriteSheet = {WeatherFog0Tiles, sizeof(WeatherFog0Tiles), 0x1203}; + +const struct OamData gOamData_839ABF0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839ABF8[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AC00[] = +{ + gSpriteAnim_839ABF8, +}; + +void sub_807FE3C(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839AC04 = +{ + .tileTag = 4611, + .paletteTag = 4608, + .oam = &gOamData_839ABF0, + .anims = gSpriteAnimTable_839AC00, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807FE3C, +}; + +const struct OamData gOamData_839AC1C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839AC24[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AC2C[] = +{ + ANIMCMD_FRAME(64, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AC34[] = +{ + gSpriteAnim_839AC24, + gSpriteAnim_839AC2C, +}; + +void sub_8080338(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839AC3C = +{ + .tileTag = 4612, + .paletteTag = 4609, + .oam = &gOamData_839AC1C, + .anims = gSpriteAnimTable_839AC34, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8080338, +}; + +const struct SpriteSheet gWeatherSandstormSpriteSheet = {WeatherSandstormTiles, sizeof(WeatherSandstormTiles), 0x1204}; + +bool8 sub_807E7B4(void) +{ + u8 r7; + u8 spriteId; + + if (gWeatherPtr->unknown_6DA == 24) + return FALSE; + + r7 = gWeatherPtr->unknown_6DA; + spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AAA4, + gUnknown_0839AA08[r7].x, gUnknown_0839AA08[r7].y, 78); + if (spriteId != 64) + { + gSprites[spriteId].data[5] = 0; + gSprites[spriteId].data[1] = r7 * 145; + while (gSprites[spriteId].data[1] >= 600) + gSprites[spriteId].data[1] -= 600; + sub_807E4EC(&gSprites[spriteId]); + sub_807E6F0(&gSprites[spriteId], r7 * 9); + gSprites[spriteId].invisible = TRUE; + gWeatherPtr->unknown_0[r7] = &gSprites[spriteId]; + } + else + { + gWeatherPtr->unknown_0[r7] = NULL; + } + + if (++gWeatherPtr->unknown_6DA == 24) + { + u16 i; + + for (i = 0; i < 24; i++) + { + if (gWeatherPtr->unknown_0[i] != NULL) + { + if (gWeatherPtr->unknown_0[i]->data[6] == 0) + gWeatherPtr->unknown_0[i]->callback = sub_807E5C0; + else + gWeatherPtr->unknown_0[i]->callback = sub_807E6C4; + } + } + return FALSE; + } + return TRUE; +} + +bool8 sub_807E8E8(void) +{ + if (gWeatherPtr->unknown_6D8 == gWeatherPtr->unknown_6D9) + return FALSE; + + if (++gWeatherPtr->unknown_6D6 > gWeatherPtr->unknown_6DB) + { + gWeatherPtr->unknown_6D6 = 0; + if (gWeatherPtr->unknown_6D8 < gWeatherPtr->unknown_6D9) + { + gWeatherPtr->unknown_0[gWeatherPtr->unknown_6D8++]->data[5] = 1; + } + else + { + gWeatherPtr->unknown_6D8--; + gWeatherPtr->unknown_0[gWeatherPtr->unknown_6D8]->data[5] = 0; + gWeatherPtr->unknown_0[gWeatherPtr->unknown_6D8]->invisible = TRUE; + } + } + return TRUE; +} + +void sub_807E974(void) +{ + u16 i; + + for (i = 0; i < gWeatherPtr->unknown_6DA; i++) + { + if (gWeatherPtr->unknown_0[i] != NULL) + DestroySprite(gWeatherPtr->unknown_0[i]); + } + gWeatherPtr->unknown_6DA = 0; + FreeSpriteTilesByTag(0x1206); +} + +//------------------------------------------------------------------------------ +// Snow +//------------------------------------------------------------------------------ + +void Snow_InitVars(void) +{ + gWeatherPtr->unknown_6CC = 0; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->unknown_6E5 = 16; + gWeatherPtr->unknown_6E0 = 0; +} + +void snowflakes_progress2(void); +void sub_807ED48(struct Sprite *); + +void sub_807EA18(void) +{ + Snow_InitVars(); + while (gWeatherPtr->unknown_6D2 == 0) + { + u16 i; + + snowflakes_progress2(); + for (i = 0; i < gWeatherPtr->unknown_6E4; i++) + { + sub_807ED48(gWeatherPtr->snowflakeSprites[i]); + } + } +} + +u8 snowflakes_progress(void); + +void snowflakes_progress2(void) +{ + if (gWeatherPtr->unknown_6CC == 0 && snowflakes_progress() == FALSE) + { + gWeatherPtr->unknown_6D2 = 1; + gWeatherPtr->unknown_6CC++; + } +} + +bool8 sub_807EAC0(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + gWeatherPtr->unknown_6E5 = 0; + gWeatherPtr->unknown_6E0 = 0; + gWeatherPtr->unknown_6CE++; + // fall through + case 1: + if (snowflakes_progress() == FALSE) + { + gWeatherPtr->unknown_6CE++; + return FALSE; + } + return TRUE; + } + return FALSE; +} + +bool8 snowflake_add(void); +bool8 snowflake_remove(void); + +bool8 snowflakes_progress(void) +{ + if (gWeatherPtr->unknown_6E4 == gWeatherPtr->unknown_6E5) + return FALSE; + + gWeatherPtr->unknown_6E0++; + if (gWeatherPtr->unknown_6E0 > 36) + { + gWeatherPtr->unknown_6E0 = 0; + if (gWeatherPtr->unknown_6E4 < gWeatherPtr->unknown_6E5) + snowflake_add(); + else + snowflake_remove(); + } + return (gWeatherPtr->unknown_6E4 != gWeatherPtr->unknown_6E5); +} + +void sub_807EC40(struct Sprite *); + +bool8 snowflake_add(void) +{ + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AB04, 0, 0, 78); + + if (spriteId == 64) + return FALSE; + gSprites[spriteId].data[4] = gWeatherPtr->unknown_6E4; + sub_807EC40(&gSprites[spriteId]); + gSprites[spriteId].coordOffsetEnabled = TRUE; + gWeatherPtr->snowflakeSprites[gWeatherPtr->unknown_6E4++] = &gSprites[spriteId]; + return TRUE; +} + +bool8 snowflake_remove(void) +{ + if (gWeatherPtr->unknown_6E4 != 0) + { + DestroySprite(gWeatherPtr->snowflakeSprites[--gWeatherPtr->unknown_6E4]); + return TRUE; + } + return FALSE; +} + +void sub_807EC40(struct Sprite *sprite) +{ + u16 r4 = ((sprite->data[4] * 5) & 7) * 30 + (Random() % 30); + u16 r6; + + sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); + sprite->pos1.x = r4 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); + sprite->data[0] = sprite->pos1.y * 128; + sprite->pos2.x = 0; + r6 = Random(); + sprite->data[1] = (r6 & 3) * 5 + 64; + sprite->data[7] = (r6 & 3) * 5 + 64; + StartSpriteAnim(sprite, (r6 & 1) ? 0 : 1); + sprite->data[3] = 0; + sprite->data[2] = ((r6 & 3) == 0) ? 2 : 1; + sprite->data[6] = (r6 & 0x1F) + 210; + sprite->data[5] = 0; +} + +void sub_807ECEC(struct Sprite *sprite) +{ + if (gWeatherPtr->unknown_6E2 > 18) + { + sprite->invisible = FALSE; + sprite->callback = sub_807ED48; + sprite->pos1.y = 0xFA - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); + sprite->data[0] = sprite->pos1.y * 128; + gWeatherPtr->unknown_6E2 = 0; + } +} + +void sub_807ED48(struct Sprite *sprite) +{ + s16 r3; + s16 r2; + + sprite->data[0] += sprite->data[1]; + sprite->pos1.y = sprite->data[0] >> 7; + sprite->data[3] = (sprite->data[3] + sprite->data[2]) & 0xFF; + sprite->pos2.x = gSineTable[sprite->data[3]] / 64; + + r3 = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF; + if (r3 & 0x100) + r3 = -0x100 | r3; // hmm... what is this? + if (r3 < -3) + sprite->pos1.x = 242 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); + else if (r3 > 242) + sprite->pos1.x = -3 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); + + r2 = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF; + if (r2 > 163 && r2 < 171) + { + sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); + sprite->data[0] = sprite->pos1.y * 128; + sprite->data[5] = 0; + sprite->data[6] = 220; + } + else if (r2 > 242 && r2 < 250) + { + sprite->pos1.y = 163; + sprite->data[0] = sprite->pos1.y * 128; + sprite->data[5] = 0; + sprite->data[6] = 220; + sprite->invisible = TRUE; + sprite->callback = sub_807ECEC; + } + + sprite->data[5]++; + if (sprite->data[5] == sprite->data[6]) + { + sub_807EC40(sprite); + sprite->pos1.y = 250; + sprite->invisible = TRUE; + sprite->callback = sub_807ECEC; + } +} + +//------------------------------------------------------------------------------ +// Medium Rain +//------------------------------------------------------------------------------ + +void sub_807EE80(void) +{ + gWeatherPtr->unknown_6CC = 0; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6D6 = 0; + gWeatherPtr->unknown_6DB = 4; + gWeatherPtr->unknown_6DC = 0; + gWeatherPtr->unknown_6D9 = 16; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->unknown_6D2 = 0; // duplicate assignment + gWeatherPtr->unknown_6ED = 0; + SetRainStrengthFromSoundEffect(SE_T_AME); +} + +void sub_807EFC0(void); + +void sub_807EEF4(void) +{ + sub_807EE80(); + while (gWeatherPtr->unknown_6D2 == 0) + sub_807EFC0(); +} + +//------------------------------------------------------------------------------ +// Heavy Rain +//------------------------------------------------------------------------------ + +void sub_807EF24(void) +{ + gWeatherPtr->unknown_6CC = 0; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6D6 = 0; + gWeatherPtr->unknown_6DB = 4; + gWeatherPtr->unknown_6DC = 1; + gWeatherPtr->unknown_6D9 = 24; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->unknown_6D2 = 0; // duplicate assignment + SetRainStrengthFromSoundEffect(SE_T_OOAME); +} + +void sub_807EF90(void) +{ + sub_807EF24(); + while (gWeatherPtr->unknown_6D2 == 0) + sub_807EFC0(); +} + +void sub_807F434(void); +void sub_807F3F8(u16); + +void sub_807EFC0(void) +{ + sub_807F434(); + switch (gWeatherPtr->unknown_6CC) + { + case 0: + sub_807E7A4(); + gWeatherPtr->unknown_6CC++; + break; + case 1: + if (sub_807E7B4()) + break; + gWeatherPtr->unknown_6CC++; + break; + case 2: + if (sub_807E8E8()) + break; + gWeatherPtr->unknown_6D2 = 1; + gWeatherPtr->unknown_6CC++; + break; + case 3: + if (gWeatherPtr->unknown_6C6 == 0) + break; + gWeatherPtr->unknown_6CC = 6; + break; + case 4: + gWeatherPtr->unknown_6EA = 1; + gWeatherPtr->unknown_6E6 = (Random() % 360) + 360; + gWeatherPtr->unknown_6CC++; + // fall through + case 5: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + gWeatherPtr->unknown_6CC++; + break; + case 6: + gWeatherPtr->unknown_6EA = 1; + gWeatherPtr->unknown_6EB = Random() % 2; + gWeatherPtr->unknown_6CC++; + break; + case 7: + gWeatherPtr->unknown_6EC = (Random() & 1) + 1; + gWeatherPtr->unknown_6CC++; + // fall through + case 8: + sub_807D5BC(19); + if (gWeatherPtr->unknown_6EB == 0 && gWeatherPtr->unknown_6EC == 1) + sub_807F3F8(20); + gWeatherPtr->unknown_6E6 = (Random() % 3) + 6; + gWeatherPtr->unknown_6CC++; + break; + case 9: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + sub_807D5BC(3); + gWeatherPtr->unknown_6EA = 1; + if (--gWeatherPtr->unknown_6EC != 0) + { + gWeatherPtr->unknown_6E6 = (Random() % 16) + 60; + gWeatherPtr->unknown_6CC = 10; + } + else if (gWeatherPtr->unknown_6EB == 0) + { + gWeatherPtr->unknown_6CC = 4; + } + else + { + gWeatherPtr->unknown_6CC = 11; + } + break; + case 10: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + gWeatherPtr->unknown_6CC = 8; + break; + case 11: + gWeatherPtr->unknown_6E6 = (Random() % 16) + 60; + gWeatherPtr->unknown_6CC++; + break; + case 12: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + sub_807F3F8(100); + sub_807D5BC(19); + // Why use "% 16" everywhere else and "& 0xF" here. So dumb. + gWeatherPtr->unknown_6E6 = (Random() & 0xF) + 30; + gWeatherPtr->unknown_6CC++; + break; + case 13: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + sub_807D5F0(19, 3, 5); + gWeatherPtr->unknown_6CC++; + break; + case 14: + if (gWeatherPtr->unknown_6C6 != 3) + break; + gWeatherPtr->unknown_6EA = 1; + gWeatherPtr->unknown_6CC = 4; + break; + } +} + +bool8 sub_807F34C(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + gWeatherPtr->unknown_6EA = 0; + gWeatherPtr->unknown_6CE++; + // fall through + case 1: + sub_807EFC0(); + if (gWeatherPtr->unknown_6EA != 0) + { + if (gWeatherPtr->unknown_6D1 == 3 + || gWeatherPtr->unknown_6D1 == 5 + || gWeatherPtr->unknown_6D1 == 13) + return FALSE; + gWeatherPtr->unknown_6D9 = 0; + gWeatherPtr->unknown_6CE++; + } + break; + case 2: + if (sub_807E8E8()) + break; + sub_807E974(); + gWeatherPtr->unknown_6ED = 0; + gWeatherPtr->unknown_6CE++; + return FALSE; + default: + return FALSE; + } + return TRUE; +} + +void sub_807F3F8(u16 a) +{ + if (gWeatherPtr->unknown_6ED == 0) + { + gWeatherPtr->unknown_6E8 = Random() % a; + gWeatherPtr->unknown_6ED = 1; + } +} + +void sub_807F434(void) +{ + if (gWeatherPtr->unknown_6ED == 1) + { + if (gWeatherPtr->unknown_6E8 == 0) + { + if (IsSEPlaying()) + return; + if (Random() & 1) + PlaySE(SE_T_KAMI); + else + PlaySE(SE_T_KAMI2); + gWeatherPtr->unknown_6ED = 0; + } + else + { + gWeatherPtr->unknown_6E8--; + } + } +} + +void sub_807F49C(void) +{ + gWeatherPtr->unknown_6CC = 0; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; + if (gWeatherPtr->unknown_6FB == 0) + { + gWeatherPtr->unknown_6F0 = 0; + gWeatherPtr->unknown_6F2 = 0; + gWeatherPtr->unknown_6EE = 0; + sub_807DB64(0, 16); + } +} + +void sub_807F52C(void); + +void sub_807F4FC(void) +{ + sub_807F49C(); + while (gWeatherPtr->unknown_6D2 == 0) + sub_807F52C(); +} + +void sub_807F6E8(void); + +void sub_807F52C(void) +{ + gWeatherPtr->unknown_6EE = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; + if (++gWeatherPtr->unknown_6F0 > 3) + { + gWeatherPtr->unknown_6F0 = 0; + gWeatherPtr->unknown_6F2++; + } + switch (gWeatherPtr->unknown_6CC) + { + case 0: + sub_807F6E8(); + if (gWeatherPtr->currWeather == 6) + sub_807DBA4(12, 8, 3); + else + sub_807DBA4(4, 16, 0); + gWeatherPtr->unknown_6CC++; + break; + case 1: + if (sub_807DBE8()) + { + gWeatherPtr->unknown_6D2 = 1; + gWeatherPtr->unknown_6CC++; + } + break; + } +} + +void sub_807F7A4(void); + +bool8 sub_807F5EC(void) +{ + gWeatherPtr->unknown_6EE = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; + if (++gWeatherPtr->unknown_6F0 > 3) + { + gWeatherPtr->unknown_6F0 = 0; + gWeatherPtr->unknown_6F2++; + } + switch (gWeatherPtr->unknown_6CE) + { + case 0: + sub_807DBA4(0, 16, 3); + gWeatherPtr->unknown_6CE++; + break; + case 1: + if (!sub_807DBE8()) + break; + gWeatherPtr->unknown_6CE++; + break; + case 2: + sub_807F7A4(); + gWeatherPtr->unknown_6CE++; + break; + default: + return FALSE; + } + return TRUE; +} + +void sub_807F688(struct Sprite *sprite) +{ + sprite->pos2.y = (u8)gSpriteCoordOffsetY; + sprite->pos1.x = gWeatherPtr->unknown_6EE + 32 + sprite->data[0] * 64; + if (sprite->pos1.x > 0x10F) + { + sprite->pos1.x = 480 + gWeatherPtr->unknown_6EE - (4 - sprite->data[0]) * 64; + sprite->pos1.x &= 0x1FF; + } +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 09351240f..b3bf568ac 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -350,7 +350,7 @@ gPartyMenuType: @ 202E8FA @ field_weather .align 2 -gUnknown_0202F7E8: @ 202F7E8 +gWeather: @ 202F7E8 .space 0x200 gUnknown_0202F9E8: @ 202F9E8 |