summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-11-25 23:33:16 -0600
committercamthesaxman <cameronghall@cox.net>2017-11-25 23:33:16 -0600
commita8c22a9f1de634d75d8ddc117bcd2fda59aac522 (patch)
treead01315c48f3b13fe317fb7a1e792985009bac5b
parent37418d05c404aec70745e238796c11b464da33ef (diff)
finish decompiling field_weather_2
-rw-r--r--asm/field_weather.s1960
-rw-r--r--data/field_weather.s63
-rw-r--r--include/field_weather.h32
-rw-r--r--ld_script.txt2
-rw-r--r--src/field/field_weather.c32
-rw-r--r--src/field/field_weather_2.c712
-rw-r--r--src/field/overworld.c4
-rw-r--r--src/field/scrcmd.c2
8 files changed, 756 insertions, 2051 deletions
diff --git a/asm/field_weather.s b/asm/field_weather.s
deleted file mode 100644
index aedcfe582..000000000
--- a/asm/field_weather.s
+++ /dev/null
@@ -1,1960 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_807F9AC
-sub_807F9AC: @ 807F9AC
- push {r4,r5,lr}
- ldr r0, _0807FA18 @ =gWeatherPtr
- ldr r0, [r0]
- movs r1, 0xE0
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807FA48
- movs r5, 0
-_0807F9C0:
- ldr r0, _0807FA1C @ =gSpriteTemplate_839ABD0
- movs r1, 0
- movs r2, 0
- movs r3, 0x4E
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0807FA24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0807FA20 @ =gSprites
- adds r4, r0
- movs r0, 0
- strh r0, [r4, 0x30]
- adds r0, r5, 0
- movs r1, 0x5
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x32]
- adds r0, r5, 0
- movs r1, 0x5
- bl __udivsi3
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x34]
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- lsls r0, 6
- adds r0, 0x20
- strh r0, [r4, 0x2E]
- ldr r2, _0807FA18 @ =gWeatherPtr
- ldr r0, [r2]
- lsls r1, r5, 2
- adds r0, 0xF0
- adds r0, r1
- str r4, [r0]
- b _0807FA32
- .align 2, 0
-_0807FA18: .4byte gWeatherPtr
-_0807FA1C: .4byte gSpriteTemplate_839ABD0
-_0807FA20: .4byte gSprites
-_0807FA24:
- ldr r2, _0807FA50 @ =gWeatherPtr
- ldr r1, [r2]
- lsls r0, r5, 2
- adds r1, 0xF0
- adds r1, r0
- movs r0, 0
- str r0, [r1]
-_0807FA32:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x13
- bls _0807F9C0
- ldr r0, [r2]
- movs r1, 0xE0
- lsls r1, 3
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0807FA48:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807FA50: .4byte gWeatherPtr
- thumb_func_end sub_807F9AC
-
- thumb_func_start sub_807FA54
-sub_807FA54: @ 807FA54
- push {r4,r5,lr}
- ldr r0, _0807FAA0 @ =gWeatherPtr
- ldr r1, [r0]
- movs r2, 0xE0
- lsls r2, 3
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807FA98
- movs r4, 0
- adds r5, r1, 0
- adds r5, 0xF0
-_0807FA6C:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807FA7A
- bl DestroySprite
-_0807FA7A:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x13
- bls _0807FA6C
- ldr r0, _0807FAA4 @ =0x00001202
- bl FreeSpriteTilesByTag
- ldr r0, _0807FAA0 @ =gWeatherPtr
- ldr r0, [r0]
- movs r1, 0xE0
- lsls r1, 3
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0807FA98:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807FAA0: .4byte gWeatherPtr
-_0807FAA4: .4byte 0x00001202
- thumb_func_end sub_807FA54
-
- thumb_func_start sub_807FAA8
-sub_807FAA8: @ 807FAA8
- push {r4,lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x30]
- adds r0, 0x1
- strh r0, [r3, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5
- ble _0807FAC4
- movs r0, 0
- strh r0, [r3, 0x30]
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
-_0807FAC4:
- ldr r1, _0807FB10 @ =gSpriteCoordOffsetY
- ldrh r0, [r3, 0x2E]
- ldrh r1, [r1]
- adds r0, r1
- strh r0, [r3, 0x22]
- ldr r0, _0807FB14 @ =gWeatherPtr
- ldr r0, [r0]
- ldr r1, _0807FB18 @ =0x000006fc
- adds r2, r0, r1
- ldrh r1, [r2]
- adds r1, 0x20
- movs r4, 0x32
- ldrsh r0, [r3, r4]
- lsls r0, 6
- adds r1, r0
- strh r1, [r3, 0x20]
- lsls r1, 16
- ldr r0, _0807FB1C @ =0x010f0000
- cmp r1, r0
- ble _0807FB08
- movs r0, 0xF0
- lsls r0, 1
- adds r1, r0, 0
- ldrh r2, [r2]
- adds r1, r2
- movs r4, 0x32
- ldrsh r2, [r3, r4]
- movs r0, 0x4
- subs r0, r2
- lsls r0, 6
- subs r1, r0
- ldr r0, _0807FB20 @ =0x000001ff
- ands r1, r0
- strh r1, [r3, 0x20]
-_0807FB08:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807FB10: .4byte gSpriteCoordOffsetY
-_0807FB14: .4byte gWeatherPtr
-_0807FB18: .4byte 0x000006fc
-_0807FB1C: .4byte 0x010f0000
-_0807FB20: .4byte 0x000001ff
- thumb_func_end sub_807FAA8
-
- thumb_func_start sub_807FB24
-sub_807FB24: @ 807FB24
- push {r4,lr}
- ldr r0, _0807FB94 @ =gWeatherPtr
- ldr r3, [r0]
- ldr r1, _0807FB98 @ =0x000006cc
- adds r0, r3, r1
- movs r1, 0
- movs r2, 0
- strh r2, [r0]
- ldr r4, _0807FB9C @ =0x000006d2
- adds r0, r3, r4
- strb r1, [r0]
- subs r4, 0x11
- adds r0, r3, r4
- strb r1, [r0]
- ldr r0, _0807FBA0 @ =0x000006c2
- adds r1, r3, r0
- movs r0, 0x14
- strb r0, [r1]
- movs r1, 0xDE
- lsls r1, 3
- adds r0, r3, r1
- strh r2, [r0]
- adds r4, 0x31
- adds r1, r3, r4
- movs r0, 0x1
- strh r0, [r1]
- ldr r1, _0807FBA4 @ =0x00000724
- adds r0, r3, r1
- ldrb r2, [r0]
- cmp r2, 0
- bne _0807FB8E
- adds r4, 0x2A
- adds r0, r3, r4
- strh r2, [r0]
- subs r1, 0x6
- adds r0, r3, r1
- strh r2, [r0]
- adds r4, 0x4
- adds r0, r3, r4
- strh r2, [r0]
- adds r1, 0x4
- adds r0, r3, r1
- strh r2, [r0]
- subs r4, 0x8
- adds r0, r3, r4
- strh r2, [r0]
- subs r1, 0x8
- adds r0, r3, r1
- strh r2, [r0]
- movs r0, 0
- movs r1, 0x10
- bl Weather_SetBlendCoeffs
-_0807FB8E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807FB94: .4byte gWeatherPtr
-_0807FB98: .4byte 0x000006cc
-_0807FB9C: .4byte 0x000006d2
-_0807FBA0: .4byte 0x000006c2
-_0807FBA4: .4byte 0x00000724
- thumb_func_end sub_807FB24
-
- thumb_func_start sub_807FBA8
-sub_807FBA8: @ 807FBA8
- push {r4,lr}
- bl sub_807FB24
- ldr r0, _0807FBD0 @ =gWeatherPtr
- ldr r1, [r0]
- ldr r2, _0807FBD4 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807FBC8
- adds r4, r1, r2
-_0807FBBE:
- bl sub_807FBD8
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807FBBE
-_0807FBC8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807FBD0: .4byte gWeatherPtr
-_0807FBD4: .4byte 0x000006d2
- thumb_func_end sub_807FBA8
-
- thumb_func_start sub_807FBD8
-sub_807FBD8: @ 807FBD8
- push {r4,r5,lr}
- bl sub_807FC9C
- ldr r0, _0807FBF8 @ =gWeatherPtr
- ldr r5, [r0]
- ldr r0, _0807FBFC @ =0x000006cc
- adds r4, r5, r0
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807FC0C
- cmp r0, 0x1
- bgt _0807FC00
- cmp r0, 0
- beq _0807FC06
- b _0807FC30
- .align 2, 0
-_0807FBF8: .4byte gWeatherPtr
-_0807FBFC: .4byte 0x000006cc
-_0807FC00:
- cmp r0, 0x2
- beq _0807FC18
- b _0807FC30
-_0807FC06:
- bl sub_807FD30
- b _0807FC2A
-_0807FC0C:
- movs r0, 0xC
- movs r1, 0x8
- movs r2, 0x8
- bl Weather_SetTargetBlendCoeffs
- b _0807FC2A
-_0807FC18:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807FC30
- ldr r0, _0807FC38 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
-_0807FC2A:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807FC30:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807FC38: .4byte 0x000006d2
- thumb_func_end sub_807FBD8
-
- thumb_func_start sub_807FC3C
-sub_807FC3C: @ 807FC3C
- push {r4,lr}
- bl sub_807FC9C
- ldr r0, _0807FC5C @ =gWeatherPtr
- ldr r0, [r0]
- ldr r1, _0807FC60 @ =0x000006ce
- adds r4, r0, r1
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807FC76
- cmp r0, 0x1
- bgt _0807FC64
- cmp r0, 0
- beq _0807FC6A
- b _0807FC8E
- .align 2, 0
-_0807FC5C: .4byte gWeatherPtr
-_0807FC60: .4byte 0x000006ce
-_0807FC64:
- cmp r0, 0x2
- beq _0807FC82
- b _0807FC8E
-_0807FC6A:
- movs r0, 0
- movs r1, 0x10
- movs r2, 0x1
- bl Weather_SetTargetBlendCoeffs
- b _0807FC86
-_0807FC76:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807FC92
- b _0807FC86
-_0807FC82:
- bl sub_807FDE8
-_0807FC86:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807FC92
-_0807FC8E:
- movs r0, 0
- b _0807FC94
-_0807FC92:
- movs r0, 0x1
-_0807FC94:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_807FC3C
-
- thumb_func_start sub_807FC9C
-sub_807FC9C: @ 807FC9C
- push {r4,r5,lr}
- ldr r0, _0807FD14 @ =gWeatherPtr
- ldr r3, [r0]
- ldr r0, _0807FD18 @ =0x0000071c
- adds r2, r3, r0
- ldrh r0, [r2]
- adds r0, 0x1
- movs r5, 0
- strh r0, [r2]
- ldr r1, _0807FD1C @ =0x0000ffff
- adds r4, r1, 0
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2
- bls _0807FCC8
- movs r0, 0xE4
- lsls r0, 3
- adds r1, r3, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- strh r5, [r2]
-_0807FCC8:
- ldr r1, _0807FD20 @ =0x0000071e
- adds r2, r3, r1
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
- ands r0, r4
- cmp r0, 0x4
- bls _0807FCE4
- ldr r0, _0807FD24 @ =0x00000722
- adds r1, r3, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- strh r5, [r2]
-_0807FCE4:
- ldr r0, _0807FD28 @ =gSpriteCoordOffsetX
- movs r2, 0xE4
- lsls r2, 3
- adds r1, r3, r2
- ldrh r0, [r0]
- ldrh r1, [r1]
- subs r0, r1
- movs r1, 0xFF
- ands r0, r1
- subs r2, 0x8
- adds r1, r3, r2
- strh r0, [r1]
- ldr r1, _0807FD2C @ =gSpriteCoordOffsetY
- adds r2, 0xA
- adds r0, r3, r2
- ldrh r0, [r0]
- ldrh r1, [r1]
- adds r0, r1
- subs r2, 0x8
- adds r1, r3, r2
- strh r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807FD14: .4byte gWeatherPtr
-_0807FD18: .4byte 0x0000071c
-_0807FD1C: .4byte 0x0000ffff
-_0807FD20: .4byte 0x0000071e
-_0807FD24: .4byte 0x00000722
-_0807FD28: .4byte gSpriteCoordOffsetX
-_0807FD2C: .4byte gSpriteCoordOffsetY
- thumb_func_end sub_807FC9C
-
- thumb_func_start sub_807FD30
-sub_807FD30: @ 807FD30
- push {r4-r6,lr}
- sub sp, 0x8
- 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 @ =gWeatherFog1SpriteSheet
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- mov r0, sp
- bl LoadSpriteSheet
- movs r6, 0
-_0807FD54:
- adds r0, r6, 0
- movs r1, 0x5
- bl __udivsi3
- adds r5, r0, 0
- lsls r2, r5, 22
- asrs r2, 16
- ldr r0, _0807FDA8 @ =gSpriteTemplate_839AC04
- movs r1, 0
- movs r3, 0xFF
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0807FDB0
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0807FDAC @ =gSprites
- adds r4, r0
- adds r0, r6, 0
- movs r1, 0x5
- bl __umodsi3
- strh r0, [r4, 0x2E]
- strh r5, [r4, 0x30]
- ldr r2, _0807FD9C @ =gWeatherPtr
- ldr r0, [r2]
- lsls r1, r6, 2
- movs r3, 0xA0
- lsls r3, 1
- adds r0, r3
- adds r0, r1
- str r4, [r0]
- b _0807FDC2
- .align 2, 0
-_0807FD9C: .4byte gWeatherPtr
-_0807FDA0: .4byte 0x00000724
-_0807FDA4: .4byte gWeatherFog1SpriteSheet
-_0807FDA8: .4byte gSpriteTemplate_839AC04
-_0807FDAC: .4byte gSprites
-_0807FDB0:
- ldr r2, _0807FDE0 @ =gWeatherPtr
- ldr r1, [r2]
- lsls r0, r6, 2
- movs r3, 0xA0
- lsls r3, 1
- adds r1, r3
- adds r1, r0
- movs r0, 0
- str r0, [r1]
-_0807FDC2:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x13
- bls _0807FD54
- ldr r0, [r2]
- ldr r1, _0807FDE4 @ =0x00000724
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0807FDD6:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_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 @ =gWeatherPtr
- ldr r1, [r0]
- ldr r2, _0807FE34 @ =0x00000724
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807FE2A
- movs r4, 0
- movs r0, 0xA0
- lsls r0, 1
- adds r5, r1, r0
-_0807FE00:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807FE0E
- bl DestroySprite
-_0807FE0E:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x13
- bls _0807FE00
- ldr r0, _0807FE38 @ =0x00001203
- bl FreeSpriteTilesByTag
- ldr r0, _0807FE30 @ =gWeatherPtr
- ldr r0, [r0]
- ldr r1, _0807FE34 @ =0x00000724
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0807FE2A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807FE30: .4byte gWeatherPtr
-_0807FE34: .4byte 0x00000724
-_0807FE38: .4byte 0x00001203
- thumb_func_end sub_807FDE8
-
- thumb_func_start sub_807FE3C
-sub_807FE3C: @ 807FE3C
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, _0807FE8C @ =gWeatherPtr
- ldr r1, [r0]
- ldr r2, _0807FE90 @ =0x0000071a
- adds r0, r1, r2
- ldrh r0, [r0]
- strh r0, [r3, 0x26]
- movs r4, 0xE3
- lsls r4, 3
- adds r2, r1, r4
- ldrh r1, [r2]
- adds r1, 0x20
- movs r4, 0x2E
- ldrsh r0, [r3, r4]
- lsls r0, 6
- adds r1, r0
- strh r1, [r3, 0x20]
- lsls r1, 16
- ldr r0, _0807FE94 @ =0x010f0000
- cmp r1, r0
- ble _0807FE84
- movs r0, 0xF0
- lsls r0, 1
- adds r1, r0, 0
- ldrh r2, [r2]
- adds r1, r2
- movs r4, 0x2E
- ldrsh r2, [r3, r4]
- movs r0, 0x4
- subs r0, r2
- lsls r0, 6
- subs r1, r0
- ldr r0, _0807FE98 @ =0x000001ff
- ands r1, r0
- strh r1, [r3, 0x20]
-_0807FE84:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807FE8C: .4byte gWeatherPtr
-_0807FE90: .4byte 0x0000071a
-_0807FE94: .4byte 0x010f0000
-_0807FE98: .4byte 0x000001ff
- thumb_func_end sub_807FE3C
-
- thumb_func_start sub_807FE9C
-sub_807FE9C: @ 807FE9C
- push {r4,lr}
- ldr r0, _0807FF00 @ =gWeatherPtr
- ldr r3, [r0]
- ldr r0, _0807FF04 @ =0x000006cc
- adds r1, r3, r0
- movs r2, 0
- movs r0, 0
- strh r0, [r1]
- ldr r1, _0807FF08 @ =0x000006d2
- adds r0, r3, r1
- strb r2, [r0]
- ldr r4, _0807FF0C @ =0x000006c1
- adds r0, r3, r4
- strb r2, [r0]
- ldr r0, _0807FF10 @ =0x000006c2
- adds r1, r3, r0
- movs r0, 0x14
- strb r0, [r1]
- ldr r1, _0807FF14 @ =0x00000716
- adds r0, r3, r1
- ldrb r2, [r0]
- cmp r2, 0
- bne _0807FEF8
- adds r4, 0x43
- adds r1, r3, r4
- adds r4, 0x4
- adds r0, r3, r4
- str r2, [r0]
- str r2, [r1]
- ldr r0, _0807FF18 @ =0x00000712
- adds r1, r3, r0
- movs r0, 0x8
- strh r0, [r1]
- adds r4, 0xC
- adds r0, r3, r4
- strh r2, [r0]
- ldrh r2, [r1]
- cmp r2, 0x5F
- bls _0807FEF0
- movs r0, 0x80
- subs r0, r2
- strh r0, [r1]
-_0807FEF0:
- movs r0, 0
- movs r1, 0x10
- bl Weather_SetBlendCoeffs
-_0807FEF8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807FF00: .4byte gWeatherPtr
-_0807FF04: .4byte 0x000006cc
-_0807FF08: .4byte 0x000006d2
-_0807FF0C: .4byte 0x000006c1
-_0807FF10: .4byte 0x000006c2
-_0807FF14: .4byte 0x00000716
-_0807FF18: .4byte 0x00000712
- thumb_func_end sub_807FE9C
-
- thumb_func_start sub_807FF1C
-sub_807FF1C: @ 807FF1C
- push {r4,lr}
- bl sub_807FE9C
- ldr r0, _0807FF44 @ =gWeatherPtr
- ldr r1, [r0]
- ldr r2, _0807FF48 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807FF3C
- adds r4, r1, r2
-_0807FF32:
- bl sub_807FF4C
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807FF32
-_0807FF3C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807FF44: .4byte gWeatherPtr
-_0807FF48: .4byte 0x000006d2
- thumb_func_end sub_807FF1C
-
- thumb_func_start sub_807FF4C
-sub_807FF4C: @ 807FF4C
- push {r4,r5,lr}
- bl sub_8080064
- bl sub_808002C
- ldr r0, _0807FF7C @ =gWeatherPtr
- ldr r5, [r0]
- ldr r0, _0807FF80 @ =0x00000712
- adds r1, r5, r0
- ldrh r0, [r1]
- cmp r0, 0x5F
- bls _0807FF68
- movs r0, 0x20
- strh r0, [r1]
-_0807FF68:
- ldr r0, _0807FF84 @ =0x000006cc
- adds r4, r5, r0
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807FF98
- cmp r0, 0x1
- bgt _0807FF88
- cmp r0, 0
- beq _0807FF8E
- b _0807FFBC
- .align 2, 0
-_0807FF7C: .4byte gWeatherPtr
-_0807FF80: .4byte 0x00000712
-_0807FF84: .4byte 0x000006cc
-_0807FF88:
- cmp r0, 0x2
- beq _0807FFA4
- b _0807FFBC
-_0807FF8E:
- bl sub_8080178
- bl sub_8080238
- b _0807FFB6
-_0807FF98:
- movs r0, 0x10
- movs r1, 0
- movs r2, 0
- bl Weather_SetTargetBlendCoeffs
- b _0807FFB6
-_0807FFA4:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807FFBC
- ldr r0, _0807FFC4 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
-_0807FFB6:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807FFBC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807FFC4: .4byte 0x000006d2
- thumb_func_end sub_807FF4C
-
- thumb_func_start sub_807FFC8
-sub_807FFC8: @ 807FFC8
- push {r4,lr}
- bl sub_8080064
- bl sub_808002C
- ldr r0, _0807FFEC @ =gWeatherPtr
- ldr r0, [r0]
- ldr r1, _0807FFF0 @ =0x000006ce
- adds r4, r0, r1
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _08080006
- cmp r0, 0x1
- bgt _0807FFF4
- cmp r0, 0
- beq _0807FFFA
- b _0808001E
- .align 2, 0
-_0807FFEC: .4byte gWeatherPtr
-_0807FFF0: .4byte 0x000006ce
-_0807FFF4:
- cmp r0, 0x2
- beq _08080012
- b _0808001E
-_0807FFFA:
- movs r0, 0
- movs r1, 0x10
- movs r2, 0
- bl Weather_SetTargetBlendCoeffs
- b _08080016
-_08080006:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _08080022
- b _08080016
-_08080012:
- bl sub_80800E4
-_08080016:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _08080022
-_0808001E:
- movs r0, 0
- b _08080024
-_08080022:
- movs r0, 0x1
-_08080024:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_807FFC8
-
- thumb_func_start sub_808002C
-sub_808002C: @ 808002C
- push {lr}
- ldr r0, _08080058 @ =gWeatherPtr
- ldr r2, [r0]
- ldr r0, _0808005C @ =0x00000714
- adds r3, r2, r0
- ldrh r0, [r3]
- adds r1, r0, 0x1
- strh r1, [r3]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x4
- bls _08080052
- ldr r1, _08080060 @ =0x00000712
- adds r0, r2, r1
- ldrh r1, [r0]
- adds r1, 0x1
- movs r2, 0
- strh r1, [r0]
- strh r2, [r3]
-_08080052:
- pop {r0}
- bx r0
- .align 2, 0
-_08080058: .4byte gWeatherPtr
-_0808005C: .4byte 0x00000714
-_08080060: .4byte 0x00000712
- thumb_func_end sub_808002C
-
- thumb_func_start sub_8080064
-sub_8080064: @ 8080064
- push {r4-r6,lr}
- ldr r0, _080800C8 @ =gWeatherPtr
- ldr r2, [r0]
- ldr r0, _080800CC @ =0x00000704
- adds r4, r2, r0
- ldr r6, _080800D0 @ =gSineTable
- ldr r1, _080800D4 @ =0x00000712
- adds r5, r2, r1
- ldrh r0, [r5]
- lsls r0, 1
- adds r0, r6
- movs r3, 0
- ldrsh r1, [r0, r3]
- lsls r1, 2
- ldr r0, [r4]
- subs r0, r1
- str r0, [r4]
- movs r0, 0xE1
- lsls r0, 3
- adds r3, r2, r0
- ldrh r0, [r5]
- lsls r0, 1
- adds r0, r6
- movs r5, 0
- ldrsh r1, [r0, r5]
- ldr r0, [r3]
- subs r0, r1
- str r0, [r3]
- ldr r1, _080800D8 @ =gSpriteCoordOffsetX
- ldr r0, [r4]
- lsrs r0, 8
- ldrh r1, [r1]
- adds r0, r1
- movs r1, 0xFF
- ands r0, r1
- ldr r4, _080800DC @ =0x0000070e
- adds r1, r2, r4
- strh r0, [r1]
- ldr r1, _080800E0 @ =gSpriteCoordOffsetY
- ldr r0, [r3]
- lsrs r0, 8
- ldrh r1, [r1]
- adds r0, r1
- movs r5, 0xE2
- lsls r5, 3
- adds r2, r5
- strh r0, [r2]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080800C8: .4byte gWeatherPtr
-_080800CC: .4byte 0x00000704
-_080800D0: .4byte gSineTable
-_080800D4: .4byte 0x00000712
-_080800D8: .4byte gSpriteCoordOffsetX
-_080800DC: .4byte 0x0000070e
-_080800E0: .4byte gSpriteCoordOffsetY
- thumb_func_end sub_8080064
-
- thumb_func_start sub_80800E4
-sub_80800E4: @ 80800E4
- push {r4,r5,lr}
- ldr r0, _08080168 @ =gWeatherPtr
- ldr r1, [r0]
- ldr r2, _0808016C @ =0x00000716
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _08080126
- movs r4, 0
- movs r0, 0xC8
- lsls r0, 1
- adds r5, r1, r0
-_080800FC:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0808010A
- bl DestroySprite
-_0808010A:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x13
- bls _080800FC
- ldr r0, _08080168 @ =gWeatherPtr
- ldr r0, [r0]
- ldr r1, _0808016C @ =0x00000716
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, _08080170 @ =0x00001204
- bl FreeSpriteTilesByTag
-_08080126:
- ldr r0, _08080168 @ =gWeatherPtr
- ldr r1, [r0]
- ldr r2, _08080174 @ =0x00000717
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _08080160
- movs r4, 0
- movs r0, 0xF0
- lsls r0, 1
- adds r5, r1, r0
-_0808013C:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0808014A
- bl DestroySprite
-_0808014A:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x4
- bls _0808013C
- ldr r0, _08080168 @ =gWeatherPtr
- ldr r0, [r0]
- ldr r1, _08080174 @ =0x00000717
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_08080160:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08080168: .4byte gWeatherPtr
-_0808016C: .4byte 0x00000716
-_08080170: .4byte 0x00001204
-_08080174: .4byte 0x00000717
- thumb_func_end sub_80800E4
-
- thumb_func_start sub_8080178
-sub_8080178: @ 8080178
- push {r4-r7,lr}
- sub sp, 0x4
- 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 @ =gWeatherSandstormSpriteSheet
- bl LoadSpriteSheet
- ldr r0, _080801F4 @ =gUnknown_08397128
- bl sub_807D8C0
- movs r7, 0
-_08080198:
- adds r0, r7, 0
- movs r1, 0x5
- bl __udivsi3
- adds r6, r0, 0
- lsls r2, r6, 22
- asrs r2, 16
- ldr r0, _080801F8 @ =gSpriteTemplate_839AC3C
- movs r1, 0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _08080200
- ldr r2, _080801E8 @ =gWeatherPtr
- ldr r5, [r2]
- lsls r0, r7, 2
- movs r3, 0xC8
- lsls r3, 1
- adds r5, r3
- adds r5, r0
- lsls r4, r1, 4
- adds r4, r1
- lsls r4, 2
- ldr r0, _080801FC @ =gSprites
- adds r4, r0
- str r4, [r5]
- adds r0, r7, 0
- movs r1, 0x5
- str r2, [sp]
- bl __umodsi3
- strh r0, [r4, 0x2E]
- ldr r0, [r5]
- strh r6, [r0, 0x30]
- ldr r2, [sp]
- b _08080212
- .align 2, 0
-_080801E8: .4byte gWeatherPtr
-_080801EC: .4byte 0x00000716
-_080801F0: .4byte gWeatherSandstormSpriteSheet
-_080801F4: .4byte gUnknown_08397128
-_080801F8: .4byte gSpriteTemplate_839AC3C
-_080801FC: .4byte gSprites
-_08080200:
- ldr r2, _08080230 @ =gWeatherPtr
- ldr r1, [r2]
- lsls r0, r7, 2
- movs r3, 0xC8
- lsls r3, 1
- adds r1, r3
- adds r1, r0
- movs r0, 0
- str r0, [r1]
-_08080212:
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0x13
- bls _08080198
- ldr r0, [r2]
- ldr r1, _08080234 @ =0x00000716
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_08080226:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08080230: .4byte gWeatherPtr
-_08080234: .4byte 0x00000716
- thumb_func_end sub_8080178
-
- thumb_func_start sub_8080238
-sub_8080238: @ 8080238
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r4, _080802E0 @ =gWeatherPtr
- ldr r0, [r4]
- ldr r1, _080802E4 @ =0x00000717
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08080324
- movs r7, 0
- mov r9, r4
- movs r2, 0
- mov r10, r2
-_08080258:
- lsls r0, r7, 1
- mov r8, r0
- adds r6, r0, r7
- lsls r5, r6, 4
- adds r1, r5, 0
- adds r1, 0x18
- lsls r1, 16
- asrs r1, 16
- ldr r0, _080802E8 @ =gSpriteTemplate_839AC3C
- movs r2, 0xD0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _080802FC
- mov r2, r9
- ldr r4, [r2]
- lsls r0, r7, 2
- movs r2, 0xF0
- lsls r2, 1
- adds r4, r2
- adds r4, r0
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- ldr r0, _080802EC @ =gSprites
- adds r2, r0
- str r2, [r4]
- ldrb r1, [r2, 0x3]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x3]
- ldr r1, [r4]
- adds r0, r6, r5
- strh r0, [r1, 0x30]
- ldr r1, [r4]
- movs r0, 0x8
- strh r0, [r1, 0x2E]
- ldr r0, [r4]
- mov r1, r10
- strh r1, [r0, 0x32]
- ldr r1, [r4]
- ldr r0, _080802F0 @ =0x00006730
- strh r0, [r1, 0x36]
- ldr r1, [r4]
- ldr r0, _080802F4 @ =gUnknown_0839AC5C
- add r0, r8
- ldrh r0, [r0]
- strh r0, [r1, 0x34]
- ldr r0, [r4]
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r0, [r4]
- movs r1, 0
- movs r2, 0x2
- movs r3, 0
- bl CalcCenterToCornerVec
- ldr r1, [r4]
- ldr r0, _080802F8 @ =sub_8080398
- str r0, [r1, 0x1C]
- b _0808030E
- .align 2, 0
-_080802E0: .4byte gWeatherPtr
-_080802E4: .4byte 0x00000717
-_080802E8: .4byte gSpriteTemplate_839AC3C
-_080802EC: .4byte gSprites
-_080802F0: .4byte 0x00006730
-_080802F4: .4byte gUnknown_0839AC5C
-_080802F8: .4byte sub_8080398
-_080802FC:
- mov r2, r9
- ldr r0, [r2]
- lsls r1, r7, 2
- movs r2, 0xF0
- lsls r2, 1
- adds r0, r2
- adds r0, r1
- mov r1, r10
- str r1, [r0]
-_0808030E:
- mov r2, r9
- ldr r0, [r2]
- ldr r1, _08080334 @ =0x00000717
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0x4
- bls _08080258
-_08080324:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08080334: .4byte 0x00000717
- thumb_func_end sub_8080238
-
- thumb_func_start sub_8080338
-sub_8080338: @ 8080338
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, _08080388 @ =gWeatherPtr
- ldr r1, [r0]
- movs r2, 0xE2
- lsls r2, 3
- adds r0, r1, r2
- ldrh r0, [r0]
- strh r0, [r3, 0x26]
- ldr r4, _0808038C @ =0x0000070e
- adds r2, r1, r4
- ldrh r1, [r2]
- adds r1, 0x20
- movs r4, 0x2E
- ldrsh r0, [r3, r4]
- lsls r0, 6
- adds r1, r0
- strh r1, [r3, 0x20]
- lsls r1, 16
- ldr r0, _08080390 @ =0x010f0000
- cmp r1, r0
- ble _08080380
- movs r0, 0xF0
- lsls r0, 1
- adds r1, r0, 0
- ldrh r2, [r2]
- adds r1, r2
- movs r4, 0x2E
- ldrsh r2, [r3, r4]
- movs r0, 0x4
- subs r0, r2
- lsls r0, 6
- subs r1, r0
- ldr r0, _08080394 @ =0x000001ff
- ands r1, r0
- strh r1, [r3, 0x20]
-_08080380:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08080388: .4byte gWeatherPtr
-_0808038C: .4byte 0x0000070e
-_08080390: .4byte 0x010f0000
-_08080394: .4byte 0x000001ff
- thumb_func_end sub_8080338
-
- thumb_func_start sub_8080398
-sub_8080398: @ 8080398
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x34]
- subs r0, 0x1
- strh r0, [r2, 0x34]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _080803B2
- ldr r0, _080803B8 @ =sub_80803BC
- str r0, [r2, 0x1C]
-_080803B2:
- pop {r0}
- bx r0
- .align 2, 0
-_080803B8: .4byte sub_80803BC
- thumb_func_end sub_8080398
-
- thumb_func_start sub_80803BC
-sub_80803BC: @ 80803BC
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0x22]
- subs r0, 0x1
- strh r0, [r5, 0x22]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x30
- negs r1, r1
- cmp r0, r1
- bge _080803DA
- movs r0, 0xD0
- strh r0, [r5, 0x22]
- movs r0, 0x4
- strh r0, [r5, 0x2E]
-_080803DA:
- movs r0, 0x2E
- ldrsh r4, [r5, r0]
- ldr r3, _0808042C @ =gSineTable
- movs r2, 0x30
- ldrsh r1, [r5, r2]
- lsls r0, r1, 1
- adds r0, r3
- movs r2, 0
- ldrsh r0, [r0, r2]
- adds r2, r4, 0
- muls r2, r0
- adds r1, 0x40
- lsls r1, 1
- adds r1, r3
- movs r3, 0
- ldrsh r0, [r1, r3]
- muls r0, r4
- lsrs r2, 8
- strh r2, [r5, 0x24]
- lsrs r0, 8
- strh r0, [r5, 0x26]
- ldrh r0, [r5, 0x30]
- adds r0, 0xA
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r5, 0x30]
- ldrh r0, [r5, 0x32]
- adds r0, 0x1
- strh r0, [r5, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x8
- ble _08080426
- movs r0, 0
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
-_08080426:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808042C: .4byte gSineTable
- thumb_func_end sub_80803BC
-
- thumb_func_start sub_8080430
-sub_8080430: @ 8080430
- ldr r0, _08080450 @ =gWeatherPtr
- ldr r1, [r0]
- ldr r0, _08080454 @ =0x000006cc
- adds r2, r1, r0
- movs r0, 0
- strh r0, [r2]
- ldr r0, _08080458 @ =0x000006c1
- adds r2, r1, r0
- movs r0, 0x3
- strb r0, [r2]
- ldr r0, _0808045C @ =0x000006c2
- adds r1, r0
- movs r0, 0x14
- strb r0, [r1]
- bx lr
- .align 2, 0
-_08080450: .4byte gWeatherPtr
-_08080454: .4byte 0x000006cc
-_08080458: .4byte 0x000006c1
-_0808045C: .4byte 0x000006c2
- thumb_func_end sub_8080430
-
- thumb_func_start sub_8080460
-sub_8080460: @ 8080460
- push {lr}
- bl sub_8080430
- pop {r0}
- bx r0
- thumb_func_end sub_8080460
-
- thumb_func_start nullsub_56
-nullsub_56: @ 808046C
- bx lr
- thumb_func_end nullsub_56
-
- thumb_func_start sub_8080470
-sub_8080470: @ 8080470
- movs r0, 0
- bx lr
- thumb_func_end sub_8080470
-
- thumb_func_start sub_8080474
-sub_8080474: @ 8080474
- push {r4,r5,lr}
- bl Fog2_InitVars
- 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 @ =gWeatherBubbleSpriteSheet
- bl LoadSpriteSheet
- movs r2, 0xE5
- lsls r2, 3
- adds r0, r4, r2
- strh r5, [r0]
- ldr r0, _080804C0 @ =gUnknown_0839AC68
- ldrb r1, [r0]
- subs r2, 0x2
- adds r0, r4, r2
- strh r1, [r0]
- ldr r1, _080804C4 @ =0x0000072a
- adds r0, r4, r1
- strh r5, [r0]
- adds r2, 0x6
- adds r0, r4, r2
- strh r5, [r0]
-_080804AC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080804B4: .4byte gWeatherPtr
-_080804B8: .4byte 0x0000072e
-_080804BC: .4byte gWeatherBubbleSpriteSheet
-_080804C0: .4byte gUnknown_0839AC68
-_080804C4: .4byte 0x0000072a
- thumb_func_end sub_8080474
-
- thumb_func_start sub_80804C8
-sub_80804C8: @ 80804C8
- push {r4,lr}
- bl sub_8080474
- ldr r0, _080804F0 @ =gWeatherPtr
- ldr r1, [r0]
- ldr r2, _080804F4 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _080804E8
- adds r4, r1, r2
-_080804DE:
- bl sub_80804F8
- ldrb r0, [r4]
- cmp r0, 0
- beq _080804DE
-_080804E8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080804F0: .4byte gWeatherPtr
-_080804F4: .4byte 0x000006d2
- thumb_func_end sub_80804C8
-
- thumb_func_start sub_80804F8
-sub_80804F8: @ 80804F8
- push {r4-r7,lr}
- bl Fog2_Main
- ldr r0, _08080558 @ =gWeatherPtr
- ldr r5, [r0]
- ldr r0, _0808055C @ =0x00000726
- adds r4, r5, r0
- ldrh r0, [r4]
- adds r0, 0x1
- movs r6, 0
- strh r0, [r4]
- ldr r1, _08080560 @ =0x0000ffff
- adds r7, r1, 0
- ldr r2, _08080564 @ =gUnknown_0839AC68
- movs r1, 0xE5
- lsls r1, 3
- adds r3, r5, r1
- ldrh r1, [r3]
- adds r1, r2
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1]
- cmp r0, r1
- bls _08080550
- strh r6, [r4]
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
- ands r0, r7
- cmp r0, 0x7
- bls _08080538
- strh r6, [r3]
-_08080538:
- ldr r0, _08080568 @ =0x0000072a
- adds r4, r5, r0
- ldrh r0, [r4]
- bl sub_8080588
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- ands r0, r7
- cmp r0, 0xC
- bls _08080550
- strh r6, [r4]
-_08080550:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08080558: .4byte gWeatherPtr
-_0808055C: .4byte 0x00000726
-_08080560: .4byte 0x0000ffff
-_08080564: .4byte gUnknown_0839AC68
-_08080568: .4byte 0x0000072a
- thumb_func_end sub_80804F8
-
- thumb_func_start sub_808056C
-sub_808056C: @ 808056C
- push {lr}
- bl Fog2_Finish
- lsls r0, 24
- cmp r0, 0
- beq _0808057C
- movs r0, 0x1
- b _08080582
-_0808057C:
- bl sub_8080610
- movs r0, 0
-_08080582:
- pop {r1}
- bx r1
- thumb_func_end sub_808056C
-
- thumb_func_start sub_8080588
-sub_8080588: @ 8080588
- push {r4,lr}
- lsls r0, 16
- ldr r1, _080805F8 @ =gUnknown_0839AC78
- lsrs r0, 14
- adds r3, r0, r1
- adds r1, 0x2
- adds r0, r1
- ldr r1, _080805FC @ =gSpriteCoordOffsetY
- ldrh r2, [r0]
- ldrh r0, [r1]
- subs r2, r0
- ldr r0, _08080600 @ =gSpriteTemplate_839ACBC
- movs r4, 0
- ldrsh r1, [r3, r4]
- lsls r2, 16
- asrs r2, 16
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _080805F0
- ldr r0, _08080604 @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1, 0x5]
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r3]
- movs r0, 0
- strh r0, [r1, 0x2E]
- strh r0, [r1, 0x30]
- strh r0, [r1, 0x32]
- ldr r0, _08080608 @ =gWeatherPtr
- ldr r1, [r0]
- ldr r0, _0808060C @ =0x0000072c
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
-_080805F0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080805F8: .4byte gUnknown_0839AC78
-_080805FC: .4byte gSpriteCoordOffsetY
-_08080600: .4byte gSpriteTemplate_839ACBC
-_08080604: .4byte gSprites
-_08080608: .4byte gWeatherPtr
-_0808060C: .4byte 0x0000072c
- thumb_func_end sub_8080588
-
- thumb_func_start sub_8080610
-sub_8080610: @ 8080610
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _08080648 @ =gSprites
-_08080616:
- lsls r0, r4, 4
- adds r0, r4
- lsls r2, r0, 2
- adds r0, r5, 0
- adds r0, 0x14
- adds r0, r2, r0
- ldr r1, [r0]
- ldr r0, _0808064C @ =gSpriteTemplate_839ACBC
- cmp r1, r0
- bne _08080630
- adds r0, r2, r5
- bl DestroySprite
-_08080630:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x3F
- bls _08080616
- ldr r0, _08080650 @ =0x00001205
- bl FreeSpriteTilesByTag
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08080648: .4byte gSprites
-_0808064C: .4byte gSpriteTemplate_839ACBC
-_08080650: .4byte 0x00001205
- thumb_func_end sub_8080610
-
- thumb_func_start unc_0807DAB4
-unc_0807DAB4: @ 8080654
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x2E]
- movs r2, 0
- adds r0, 0x2
- strh r0, [r1, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x8
- ble _08080694
- strh r2, [r1, 0x2E]
- movs r3, 0x30
- ldrsh r0, [r1, r3]
- cmp r0, 0
- bne _08080686
- ldrh r0, [r1, 0x24]
- adds r0, 0x1
- strh r0, [r1, 0x24]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _08080694
- movs r0, 0x1
- strh r0, [r1, 0x30]
- b _08080694
-_08080686:
- ldrh r0, [r1, 0x24]
- subs r0, 0x1
- strh r0, [r1, 0x24]
- lsls r0, 16
- cmp r0, 0
- bgt _08080694
- strh r2, [r1, 0x30]
-_08080694:
- ldrh r0, [r1, 0x22]
- subs r0, 0x3
- strh r0, [r1, 0x22]
- ldrh r0, [r1, 0x32]
- adds r0, 0x1
- strh r0, [r1, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x77
- ble _080806AE
- adds r0, r1, 0
- bl DestroySprite
-_080806AE:
- pop {r0}
- bx r0
- thumb_func_end unc_0807DAB4
-
- thumb_func_start SetSav1Weather
-SetSav1Weather: @ 80806B4
- push {r4,r5,lr}
- ldr r4, _080806D4 @ =gSaveBlock1
- adds r4, 0x2E
- ldrb r5, [r4]
- lsls r0, 24
- lsrs r0, 24
- bl TranslateWeatherNum
- strb r0, [r4]
- ldrb r0, [r4]
- adds r1, r5, 0
- bl UpdateRainCounter
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080806D4: .4byte gSaveBlock1
- thumb_func_end SetSav1Weather
-
- thumb_func_start GetSav1Weather
-GetSav1Weather: @ 80806D8
- ldr r0, _080806E0 @ =gSaveBlock1
- adds r0, 0x2E
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_080806E0: .4byte gSaveBlock1
- thumb_func_end GetSav1Weather
-
- thumb_func_start sub_80806E4
-sub_80806E4: @ 80806E4
- push {r4,r5,lr}
- ldr r4, _08080704 @ =gSaveBlock1
- adds r4, 0x2E
- ldrb r5, [r4]
- ldr r0, _08080708 @ =gMapHeader
- ldrb r0, [r0, 0x16]
- bl TranslateWeatherNum
- strb r0, [r4]
- ldrb r0, [r4]
- adds r1, r5, 0
- bl UpdateRainCounter
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08080704: .4byte gSaveBlock1
-_08080708: .4byte gMapHeader
- thumb_func_end sub_80806E4
-
- thumb_func_start SetWeather
-SetWeather: @ 808070C
- push {lr}
- bl SetSav1Weather
- bl GetSav1Weather
- lsls r0, 24
- lsrs r0, 24
- bl DoWeatherEffect
- pop {r0}
- bx r0
- thumb_func_end SetWeather
-
- thumb_func_start SetWeather_Unused
-SetWeather_Unused: @ 8080724
- push {lr}
- bl SetSav1Weather
- bl GetSav1Weather
- lsls r0, 24
- lsrs r0, 24
- bl sub_807C988
- pop {r0}
- bx r0
- thumb_func_end SetWeather_Unused
-
- thumb_func_start DoCurrentWeather
-DoCurrentWeather: @ 808073C
- push {lr}
- bl GetSav1Weather
- lsls r0, 24
- lsrs r0, 24
- bl DoWeatherEffect
- pop {r0}
- bx r0
- thumb_func_end DoCurrentWeather
-
- thumb_func_start sub_8080750
-sub_8080750: @ 8080750
- push {lr}
- bl GetSav1Weather
- lsls r0, 24
- lsrs r0, 24
- bl sub_807C988
- pop {r0}
- bx r0
- thumb_func_end sub_8080750
-
- thumb_func_start TranslateWeatherNum
-TranslateWeatherNum: @ 8080764
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x15
- bhi _0808082C
- lsls r0, 2
- ldr r1, _08080778 @ =_0808077C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08080778: .4byte _0808077C
- .align 2, 0
-_0808077C:
- .4byte _0808082C
- .4byte _080807D4
- .4byte _080807D8
- .4byte _080807DC
- .4byte _080807E0
- .4byte _080807E4
- .4byte _080807E8
- .4byte _080807EC
- .4byte _080807F0
- .4byte _080807F4
- .4byte _080807F8
- .4byte _080807FC
- .4byte _08080800
- .4byte _08080804
- .4byte _08080808
- .4byte _0808082C
- .4byte _0808082C
- .4byte _0808082C
- .4byte _0808082C
- .4byte _0808082C
- .4byte _0808080C
- .4byte _08080814
-_080807D4:
- movs r0, 0x1
- b _0808082E
-_080807D8:
- movs r0, 0x2
- b _0808082E
-_080807DC:
- movs r0, 0x3
- b _0808082E
-_080807E0:
- movs r0, 0x4
- b _0808082E
-_080807E4:
- movs r0, 0x5
- b _0808082E
-_080807E8:
- movs r0, 0x6
- b _0808082E
-_080807EC:
- movs r0, 0x7
- b _0808082E
-_080807F0:
- movs r0, 0x8
- b _0808082E
-_080807F4:
- movs r0, 0x9
- b _0808082E
-_080807F8:
- movs r0, 0xA
- b _0808082E
-_080807FC:
- movs r0, 0xB
- b _0808082E
-_08080800:
- movs r0, 0xC
- b _0808082E
-_08080804:
- movs r0, 0xD
- b _0808082E
-_08080808:
- movs r0, 0xE
- b _0808082E
-_0808080C:
- ldr r1, _08080810 @ =gUnknown_0839ACD4
- b _08080816
- .align 2, 0
-_08080810: .4byte gUnknown_0839ACD4
-_08080814:
- ldr r1, _08080824 @ =gUnknown_0839ACD8
-_08080816:
- ldr r0, _08080828 @ =gSaveBlock1
- adds r0, 0x2F
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- b _0808082E
- .align 2, 0
-_08080824: .4byte gUnknown_0839ACD8
-_08080828: .4byte gSaveBlock1
-_0808082C:
- movs r0, 0
-_0808082E:
- pop {r1}
- bx r1
- thumb_func_end TranslateWeatherNum
-
- thumb_func_start UpdateWeatherPerDay
-UpdateWeatherPerDay: @ 8080834
- lsls r0, 16
- ldr r2, _08080850 @ =gSaveBlock1
- adds r2, 0x2F
- lsrs r0, 16
- ldrb r1, [r2]
- adds r0, r1
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r0
- lsrs r1, 16
- strb r1, [r2]
- bx lr
- .align 2, 0
-_08080850: .4byte gSaveBlock1
- thumb_func_end UpdateWeatherPerDay
-
- thumb_func_start UpdateRainCounter
-UpdateRainCounter: @ 8080854
- push {lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r2, r0, 24
- cmp r0, r1
- beq _0808086E
- cmp r2, 0x3
- beq _08080868
- cmp r2, 0x5
- bne _0808086E
-_08080868:
- movs r0, 0x28
- bl IncrementGameStat
-_0808086E:
- pop {r0}
- bx r0
- thumb_func_end UpdateRainCounter
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/field_weather.s b/data/field_weather.s
deleted file mode 100644
index f6f794092..000000000
--- a/data/field_weather.s
+++ /dev/null
@@ -1,63 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 1
-gUnknown_0839AC5C:: @ 839AC5C
- .2byte 0
- .2byte 120
- .2byte 80
- .2byte 160
- .2byte 40
- .2byte 0
-
-gUnknown_0839AC68:: @ 839AC68
- .byte 40
- .byte 90
- .byte 60
- .byte 90
- .byte 2
- .byte 60
- .byte 40
- .byte 30
-
- .align 2
-gWeatherBubbleSpriteSheet:: @ 839AC70
- obj_tiles gWeatherBubbleTiles, 0x40, 0x1205
-
- .align 1
-gUnknown_0839AC78:: @ 839AC78
- .2byte 120, 160
- .2byte 376, 160
- .2byte 40, 140
- .2byte 296, 140
- .2byte 180, 130
- .2byte 436, 130
- .2byte 60, 160
- .2byte 436, 160
- .2byte 220, 180
- .2byte 476, 180
- .2byte 10, 90
- .2byte 266, 90
- .2byte 256, 160
-
- .align 2
-gSpriteAnim_839ACAC:: @ 839ACAC
- obj_image_anim_frame 0, 16
- obj_image_anim_frame 1, 16
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_839ACB8:: @ 839ACB8
- .4byte gSpriteAnim_839ACAC
-
- .align 2
-gSpriteTemplate_839ACBC:: @ 839ACBC
- spr_template 4613, 4608, gOamData_837DF24, gSpriteAnimTable_839ACB8, NULL, gDummySpriteAffineAnimTable, unc_0807DAB4
-
-gUnknown_0839ACD4:: @ 839ACD4
- .byte 2, 3, 5, 3
-
-gUnknown_0839ACD8:: @ 839ACD8
- .byte 2, 2, 3, 2
diff --git a/include/field_weather.h b/include/field_weather.h
index c099a4977..7c5c94cd8 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -16,8 +16,12 @@ struct Sprite;
// TODO: This might be a union
struct Weather2
{
- /*0x00*/ u8 filler0[0xA0];
- /*0xA0*/ struct Sprite *fogSprites[20];
+ /*0x000*/ u8 filler0[0xA0];
+ /*0x0A0*/ struct Sprite *fogSprites[20];
+ /*0x0F0*/ struct Sprite *fog1Sprites[20];
+ /*0x140*/ struct Sprite *unknown_140[20];
+ /*0x190*/ struct Sprite *unknown_190[20];
+ /*0x1E0*/ struct Sprite *unknown_1E0[5];
};
struct Weather
@@ -78,12 +82,28 @@ struct Weather
u16 unknown_6FC;
u16 unknown_6FE;
u8 unknown_700;
- u8 filler_701[0x15];
+ u8 filler_701[3];
+ u32 unknown_704;
+ u32 unknown_708;
+ u8 filler_70C[2];
+ u16 unknown_70E;
+ u16 unknown_710;
+ u16 unknown_712;
+ u16 unknown_714;
u8 unknown_716;
u8 unknown_717;
- u8 filler_718[0xc];
+ u16 unknown_718;
+ u16 unknown_71A;
+ u16 unknown_71C;
+ u16 unknown_71E;
+ u16 unknown_720;
+ u16 unknown_722;
u8 unknown_724;
- u8 filler_725[9];
+ u8 filler_725[1];
+ u16 unknown_726;
+ u16 unknown_728;
+ u16 unknown_72A;
+ u16 unknown_72C;
u8 unknown_72E;
u8 filler_72F;
u16 currBlendEVA;
@@ -139,7 +159,7 @@ void PlayRainSoundEffect(void);
// ...
void SetSav1Weather(u32);
u8 GetSav1Weather(void);
-void sub_80806E4(void);
+void SetSav1WeatherFromCurrMapHeader(void);
// ...
void DoCurrentWeather(void);
void sub_8080750();
diff --git a/ld_script.txt b/ld_script.txt
index 2436f5e4b..9dbd64a55 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -112,7 +112,6 @@ SECTIONS {
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);
src/battle/battle_setup.o(.text);
@@ -372,7 +371,6 @@ SECTIONS {
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);
src/engine/cable_club.o(.rodata);
diff --git a/src/field/field_weather.c b/src/field/field_weather.c
index edb186b95..0cd54d9a4 100644
--- a/src/field/field_weather.c
+++ b/src/field/field_weather.c
@@ -31,7 +31,7 @@ struct WeatherCallbacks
void (*initVars)(void);
void (*main)(void);
void (*initAll)(void);
- u8 (*finish)(void);
+ bool8 (*finish)(void);
};
extern struct Weather gWeather;
@@ -67,63 +67,63 @@ struct Weather *const gWeatherPtr = &gWeather;
void None_Init(void);
void None_Main(void);
-u8 None_Finish(void);
+bool8 None_Finish(void);
void Clouds_InitVars(void);
void Clouds_Main(void);
void Clouds_InitAll(void);
-u8 Clouds_Finish(void);
+bool8 Clouds_Finish(void);
void sub_807DF9C(void);
void nullsub_55(void);
void sub_807DFC0(void);
-u8 sub_807DFD0(void);
+bool8 sub_807DFD0(void);
void LightRain_InitVars(void);
void LightRain_Main(void);
void LightRain_InitAll(void);
-u8 LightRain_Finish(void);
+bool8 LightRain_Finish(void);
void Snow_InitVars(void);
void Snow_Main(void);
void Snow_InitAll(void);
-u8 Snow_Finish(void);
+bool8 Snow_Finish(void);
void MedRain_InitVars(void);
void Rain_Main(void);
void MedRain_InitAll(void);
-u8 Rain_Finish(void);
+bool8 Rain_Finish(void);
void Fog2_InitVars(void);
void Fog2_Main(void);
void Fog2_InitAll(void);
-u8 Fog2_Finish(void);
+bool8 Fog2_Finish(void);
void Fog1_InitVars(void);
void sub_807F888(void);
void sub_807F858(void);
-u8 sub_807F934(void);
+bool8 sub_807F934(void);
void sub_807FE9C(void);
void sub_807FF4C(void);
void sub_807FF1C(void);
-u8 sub_807FFC8(void);
+bool8 sub_807FFC8(void);
void sub_807FB24(void);
void sub_807FBD8(void);
void sub_807FBA8(void);
-u8 sub_807FC3C(void);
+bool8 sub_807FC3C(void);
void Fog2_InitVars(void);
void Fog2_Main(void);
void Fog2_InitAll(void);
-u8 Fog2_Finish(void);
+bool8 Fog2_Finish(void);
void sub_8080430(void);
void nullsub_56(void);
void sub_8080460(void);
-u8 sub_8080470(void);
+bool8 sub_8080470(void);
void sub_807E110(void);
void sub_807E174(void);
void sub_807E144(void);
-u8 sub_807E258(void);
+bool8 sub_807E258(void);
void HeavyRain_InitVars(void);
void Rain_Main(void);
void HeavyRain_InitAll(void);
-u8 Rain_Finish(void);
+bool8 Rain_Finish(void);
void sub_8080474(void);
void sub_80804F8(void);
void sub_80804C8(void);
-u8 sub_808056C(void);
+bool8 sub_808056C(void);
static const struct WeatherCallbacks sWeatherFuncs[] =
{
diff --git a/src/field/field_weather_2.c b/src/field/field_weather_2.c
index d2ef34f6f..1ae2d6e56 100644
--- a/src/field/field_weather_2.c
+++ b/src/field/field_weather_2.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "field_map_obj.h"
#include "field_weather.h"
+#include "overworld.h"
#include "rng.h"
#include "script.h"
#include "songs.h"
@@ -1556,7 +1557,197 @@ const struct SpriteTemplate gSpriteTemplate_839ABD0 =
.callback = sub_807FAA8,
};
-const struct SpriteSheet gWeatherFog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1203};
+void sub_807F9AC(void)
+{
+ u8 i;
+
+ if (gWeatherPtr->unknown_700 == 0)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839ABD0, 0, 0, 0x4E);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+
+ sprite->data[1] = 0;
+ sprite->data[2] = (u8)(i % 5);
+ sprite->data[3] = (u8)(i / 5);
+ sprite->data[0] = sprite->data[3] * 64 + 32;
+ ((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] = sprite;
+ }
+ else
+ {
+ ((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] = NULL;
+ }
+ }
+ gWeatherPtr->unknown_700 = 1;
+ }
+}
+
+void sub_807FA54(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->unknown_700 != 0)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ if (((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] != NULL)
+ DestroySprite(((struct Weather2 *)gWeatherPtr)->fog1Sprites[i]);
+ }
+ FreeSpriteTilesByTag(0x1202);
+ gWeatherPtr->unknown_700 = 0;
+ }
+}
+
+void sub_807FAA8(struct Sprite *sprite)
+{
+ sprite->data[1]++;
+ if (sprite->data[1] > 5)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ sprite->pos1.y = gSpriteCoordOffsetY + sprite->data[0];
+ sprite->pos1.x = gWeatherPtr->unknown_6FC + 32 + sprite->data[2] * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->unknown_6FC + 0x1E0 - (4 - sprite->data[2]) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+void sub_807FB24(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = 0;
+ gWeatherPtr->unknown_6C1 = 0;
+ gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->unknown_6F0 = 0;
+ gWeatherPtr->unknown_6F2 = 1;
+ if (gWeatherPtr->unknown_724 == 0)
+ {
+ gWeatherPtr->unknown_71C = 0;
+ gWeatherPtr->unknown_71E = 0;
+ gWeatherPtr->unknown_720 = 0;
+ gWeatherPtr->unknown_722 = 0;
+ gWeatherPtr->unknown_718 = 0;
+ gWeatherPtr->unknown_71A = 0;
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void sub_807FBD8(void);
+
+void sub_807FBA8(void)
+{
+ sub_807FB24();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ sub_807FBD8();
+}
+
+void sub_807FC9C(void);
+void sub_807FD30(void);
+
+void sub_807FBD8(void)
+{
+ sub_807FC9C();
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ sub_807FD30();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ Weather_SetTargetBlendCoeffs(12, 8, 8);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ break;
+ }
+}
+
+void sub_807FDE8(void);
+
+bool8 sub_807FC3C(void)
+{
+ sub_807FC9C();
+ switch (gWeatherPtr->unknown_6CE)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 1);
+ gWeatherPtr->unknown_6CE++;
+ break;
+ case 1:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->unknown_6CE++;
+ break;
+ case 2:
+ sub_807FDE8();
+ gWeatherPtr->unknown_6CE++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void sub_807FC9C(void)
+{
+ if (++gWeatherPtr->unknown_71C > 2)
+ {
+ gWeatherPtr->unknown_720++;
+ gWeatherPtr->unknown_71C = 0;
+ }
+
+ if (++gWeatherPtr->unknown_71E > 4)
+ {
+ gWeatherPtr->unknown_722++;
+ gWeatherPtr->unknown_71E = 0;
+ }
+
+ gWeatherPtr->unknown_718 = (gSpriteCoordOffsetX - gWeatherPtr->unknown_720) & 0xFF;
+ gWeatherPtr->unknown_71A = gSpriteCoordOffsetY + gWeatherPtr->unknown_722;
+}
+
+extern const struct SpriteTemplate gSpriteTemplate_839AC04; // defined below
+
+void sub_807FD30(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->unknown_724 == 0)
+ {
+ struct SpriteSheet fog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1203};
+
+ LoadSpriteSheet(&fog1SpriteSheet);
+ for (i = 0; i < 20; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC04, 0, (i / 5) * 64, 0xFF);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+
+ sprite->data[0] = i % 5;
+ sprite->data[1] = i / 5;
+ ((struct Weather2 *)gWeatherPtr)->unknown_140[i] = sprite;
+ }
+ else
+ {
+ ((struct Weather2 *)gWeatherPtr)->unknown_140[i] = NULL;
+ }
+ }
+ gWeatherPtr->unknown_724 = 1;
+ }
+}
const struct OamData gOamData_839ABF0 =
{
@@ -1598,6 +1789,161 @@ const struct SpriteTemplate gSpriteTemplate_839AC04 =
.callback = sub_807FE3C,
};
+void sub_807FDE8(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->unknown_724 != 0)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ if (((struct Weather2 *)gWeatherPtr)->unknown_140[i] != NULL)
+ DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_140[i]);
+ }
+ FreeSpriteTilesByTag(0x1203);
+ gWeatherPtr->unknown_724 = 0;
+ }
+}
+
+void sub_807FE3C(struct Sprite *sprite)
+{
+ sprite->pos2.y = gWeatherPtr->unknown_71A;
+ sprite->pos1.x = gWeatherPtr->unknown_718 + 32 + sprite->data[0] * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->unknown_718 + 0x1E0 - (4 - sprite->data[0]) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+void sub_807FE9C(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = 0;
+ gWeatherPtr->unknown_6C1 = 0;
+ gWeatherPtr->unknown_6C2 = 20;
+ if (gWeatherPtr->unknown_716 == 0)
+ {
+ gWeatherPtr->unknown_704 = gWeatherPtr->unknown_708 = 0;
+ gWeatherPtr->unknown_712 = 8;
+ gWeatherPtr->unknown_714 = 0;
+ // Dead code. How does the compiler not optimize this out?
+ if (gWeatherPtr->unknown_712 > 0x5F)
+ gWeatherPtr->unknown_712 = 0x80 - gWeatherPtr->unknown_712;
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void sub_807FF4C(void);
+
+void sub_807FF1C(void)
+{
+ sub_807FE9C();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ sub_807FF4C();
+}
+
+void sub_808002C(void);
+void sub_8080064(void);
+void sub_8080178(void);
+void sub_8080238(void);
+
+void sub_807FF4C(void)
+{
+ sub_8080064();
+ sub_808002C();
+ if (gWeatherPtr->unknown_712 > 0x5F)
+ gWeatherPtr->unknown_712 = 32;
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ sub_8080178();
+ sub_8080238();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ Weather_SetTargetBlendCoeffs(16, 0, 0);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ break;
+ }
+}
+
+void sub_80800E4(void);
+
+bool8 sub_807FFC8(void)
+{
+ sub_8080064();
+ sub_808002C();
+ switch (gWeatherPtr->unknown_6CE)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 0);
+ gWeatherPtr->unknown_6CE++;
+ break;
+ case 1:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->unknown_6CE++;
+ break;
+ case 2:
+ sub_80800E4();
+ gWeatherPtr->unknown_6CE++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void sub_808002C(void)
+{
+ if (gWeatherPtr->unknown_714++ > 4)
+ {
+ gWeatherPtr->unknown_712++;
+ gWeatherPtr->unknown_714 = 0;
+ }
+}
+
+void sub_8080064(void)
+{
+ gWeatherPtr->unknown_704 -= gSineTable[gWeatherPtr->unknown_712] * 4;
+ gWeatherPtr->unknown_708 -= gSineTable[gWeatherPtr->unknown_712];
+ gWeatherPtr->unknown_70E = (gSpriteCoordOffsetX + (gWeatherPtr->unknown_704 >> 8)) & 0xFF;
+ gWeatherPtr->unknown_710 = gSpriteCoordOffsetY + (gWeatherPtr->unknown_708 >> 8);
+}
+
+void sub_80800E4(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->unknown_716 != 0)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ if (((struct Weather2 *)gWeatherPtr)->unknown_190[i] != NULL)
+ DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_190[i]);
+ }
+ gWeatherPtr->unknown_716 = 0;
+ FreeSpriteTilesByTag(0x1204);
+ }
+
+ if (gWeatherPtr->unknown_717 != 0)
+ {
+ for (i = 0; i < 5; i++)
+ {
+ if (((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] != NULL)
+ DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]);
+ }
+ gWeatherPtr->unknown_717 = 0;
+ }
+}
+
const struct OamData gOamData_839AC1C =
{
.y = 0,
@@ -1647,3 +1993,367 @@ const struct SpriteTemplate gSpriteTemplate_839AC3C =
const struct SpriteSheet gWeatherSandstormSpriteSheet = {gWeatherSandstormTiles, sizeof(gWeatherSandstormTiles), 0x1204};
+void sub_8080178(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->unknown_716 == 0)
+ {
+ LoadSpriteSheet(&gWeatherSandstormSpriteSheet);
+ sub_807D8C0(gUnknown_08397128);
+ for (i = 0; i < 20; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC3C, 0, (i / 5) * 64, 1);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ ((struct Weather2 *)gWeatherPtr)->unknown_190[i] = &gSprites[spriteId];
+ ((struct Weather2 *)gWeatherPtr)->unknown_190[i]->data[0] = i % 5;
+ ((struct Weather2 *)gWeatherPtr)->unknown_190[i]->data[1] = i / 5;
+ }
+ else
+ {
+ ((struct Weather2 *)gWeatherPtr)->unknown_190[i] = NULL;
+ }
+ }
+ gWeatherPtr->unknown_716 = 1;
+ }
+}
+
+const u16 gUnknown_0839AC5C[] = {0, 120, 80, 160, 40, 0};
+
+void sub_8080398(struct Sprite *);
+
+void sub_8080238(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->unknown_717 == 0)
+ {
+ for (i = 0; i < 5; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC3C, i * 48 + 0x18, 0xD0, 1);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] = &gSprites[spriteId];
+ ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->oam.size = 2;
+ ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[1] = i * 51;
+ ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[0] = 8;
+ ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[2] = 0;
+ ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[4] = 0x6730;
+ ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[3] = gUnknown_0839AC5C[i];
+ StartSpriteAnim(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i], 1);
+ CalcCenterToCornerVec(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i], 0, 2, 0);
+ ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->callback = sub_8080398;
+ }
+ else
+ {
+ ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] = NULL;
+ }
+ gWeatherPtr->unknown_717 = 1;
+ }
+ }
+}
+
+void sub_8080338(struct Sprite *sprite)
+{
+ sprite->pos2.y = gWeatherPtr->unknown_710;
+ sprite->pos1.x = gWeatherPtr->unknown_70E + 32 + sprite->data[0] * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->unknown_70E + 0x1E0 - (4 - sprite->data[0]) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+void sub_80803BC(struct Sprite *);
+
+void sub_8080398(struct Sprite *sprite)
+{
+ if (--sprite->data[3] == -1)
+ sprite->callback = sub_80803BC;
+}
+
+void sub_80803BC(struct Sprite *sprite)
+{
+ u32 x;
+ u32 y;
+
+ if (--sprite->pos1.y < -48)
+ {
+ sprite->pos1.y = 208;
+ sprite->data[0] = 4;
+ }
+ x = sprite->data[0] * gSineTable[sprite->data[1]];
+ y = sprite->data[0] * gSineTable[sprite->data[1] + 64];
+ sprite->pos2.x = x >> 8;
+ sprite->pos2.y = y >> 8;
+ sprite->data[1] = (sprite->data[1] + 10) & 0xFF;
+ if (++sprite->data[2] > 8)
+ {
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+}
+
+void sub_8080430(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->unknown_6C1 = 3;
+ gWeatherPtr->unknown_6C2 = 20;
+}
+
+void sub_8080460(void)
+{
+ sub_8080430();
+}
+
+void nullsub_56(void)
+{
+}
+
+bool8 sub_8080470(void)
+{
+ return FALSE;
+}
+
+const u8 gUnknown_0839AC68[] = {40, 90, 60, 90, 2, 60, 40, 30};
+
+const struct SpriteSheet gWeatherBubbleSpriteSheet = {gWeatherBubbleTiles, sizeof(gWeatherBubbleTiles), 0x1205};
+
+void sub_8080474(void)
+{
+ Fog2_InitVars();
+ if (gWeatherPtr->unknown_72E == 0)
+ {
+ LoadSpriteSheet(&gWeatherBubbleSpriteSheet);
+ gWeatherPtr->unknown_728 = 0;
+ gWeatherPtr->unknown_726 = gUnknown_0839AC68[0];
+ gWeatherPtr->unknown_72A = 0;
+ gWeatherPtr->unknown_72C = 0;
+ }
+}
+
+void sub_80804F8(void);
+
+void sub_80804C8(void)
+{
+ sub_8080474();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ sub_80804F8();
+}
+
+void sub_8080588(u16);
+
+void sub_80804F8(void)
+{
+ Fog2_Main();
+ if (++gWeatherPtr->unknown_726 > gUnknown_0839AC68[gWeatherPtr->unknown_728])
+ {
+ gWeatherPtr->unknown_726 = 0;
+ if (++gWeatherPtr->unknown_728 > 7)
+ gWeatherPtr->unknown_728 = 0;
+ sub_8080588(gWeatherPtr->unknown_72A);
+ if (++gWeatherPtr->unknown_72A > 12)
+ gWeatherPtr->unknown_72A = 0;
+ }
+}
+
+void sub_8080610(void);
+
+bool8 sub_808056C(void)
+{
+ if (!Fog2_Finish())
+ {
+ sub_8080610();
+ return FALSE;
+ }
+ return TRUE;
+}
+
+const s16 gUnknown_0839AC78[][2] =
+{
+ {120, 160},
+ {376, 160},
+ { 40, 140},
+ {296, 140},
+ {180, 130},
+ {436, 130},
+ { 60, 160},
+ {436, 160},
+ {220, 180},
+ {476, 180},
+ { 10, 90},
+ {266, 90},
+ {256, 160},
+};
+
+const union AnimCmd gSpriteAnim_839ACAC[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_FRAME(1, 16),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_839ACB8[] =
+{
+ gSpriteAnim_839ACAC,
+};
+
+extern const struct OamData gOamData_837DF24;
+
+void unc_0807DAB4(struct Sprite *);
+const struct SpriteTemplate gSpriteTemplate_839ACBC =
+{
+ .tileTag = 4613,
+ .paletteTag = 4608,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_839ACB8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = unc_0807DAB4,
+};
+
+void sub_8080588(u16 a)
+{
+ s16 x = gUnknown_0839AC78[a][0];
+ s16 y = gUnknown_0839AC78[a][1] - gSpriteCoordOffsetY;
+ u8 spriteId = CreateSpriteAtEnd(
+ &gSpriteTemplate_839ACBC,
+ x,
+ y,
+ 0);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = 1;
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].data[2] = 0;
+ gWeatherPtr->unknown_72C++;
+ }
+}
+
+void sub_8080610(void)
+{
+ u16 i;
+
+ for (i = 0; i < 64; i++)
+ {
+ if (gSprites[i].template == &gSpriteTemplate_839ACBC)
+ DestroySprite(&gSprites[i]);
+ }
+ FreeSpriteTilesByTag(0x1205);
+}
+
+void unc_0807DAB4(struct Sprite *sprite)
+{
+ ++sprite->data[0];
+ if (++sprite->data[0] > 8) // double increment
+ {
+ sprite->data[0] = 0;
+ if (sprite->data[1] == 0)
+ {
+ if (++sprite->pos2.x > 4)
+ sprite->data[1] = 1;
+ }
+ else
+ {
+ if (--sprite->pos2.x <= 0)
+ sprite->data[1] = 0;
+ }
+ }
+ sprite->pos1.y -= 3;
+ if (++sprite->data[2] > 0x77)
+ DestroySprite(sprite);
+}
+
+u8 TranslateWeatherNum(u8);
+void UpdateRainCounter(u8, u8);
+
+void SetSav1Weather(u32 weather)
+{
+ u8 oldWeather = gSaveBlock1.weather;
+
+ gSaveBlock1.weather = TranslateWeatherNum(weather);
+ UpdateRainCounter(gSaveBlock1.weather, oldWeather);
+}
+
+u8 GetSav1Weather(void)
+{
+ return gSaveBlock1.weather;
+}
+
+void SetSav1WeatherFromCurrMapHeader(void)
+{
+ u8 oldWeather = gSaveBlock1.weather;
+
+ gSaveBlock1.weather = TranslateWeatherNum(gMapHeader.weather);
+ UpdateRainCounter(gSaveBlock1.weather, oldWeather);
+}
+
+void SetWeather(u32 weather)
+{
+ SetSav1Weather(weather);
+ DoWeatherEffect(GetSav1Weather());
+}
+
+void SetWeather_Unused(u32 weather)
+{
+ SetSav1Weather(weather);
+ sub_807C988(GetSav1Weather());
+}
+
+void DoCurrentWeather(void)
+{
+ DoWeatherEffect(GetSav1Weather());
+}
+
+void sub_8080750(void)
+{
+ sub_807C988(GetSav1Weather());
+}
+
+static const u8 sWeatherCycle1[] = {2, 3, 5, 3};
+static const u8 sWeatherCycle2[] = {2, 2, 3, 2};
+
+u8 TranslateWeatherNum(u8 weather)
+{
+ switch (weather)
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ case 3: return 3;
+ case 4: return 4;
+ case 5: return 5;
+ case 6: return 6;
+ case 7: return 7;
+ case 8: return 8;
+ case 9: return 9;
+ case 10: return 10;
+ case 11: return 11;
+ case 12: return 12;
+ case 13: return 13;
+ case 14: return 14;
+ case 20: return sWeatherCycle1[gSaveBlock1.filler_2F];
+ case 21: return sWeatherCycle2[gSaveBlock1.filler_2F];
+ default: return 0;
+ }
+}
+
+void UpdateWeatherPerDay(u16 increment)
+{
+ u16 weatherStage = gSaveBlock1.filler_2F + increment;
+ weatherStage %= 4;
+ gSaveBlock1.filler_2F = weatherStage;
+}
+
+void UpdateRainCounter(u8 newWeather, u8 oldWeather)
+{
+ if (newWeather != oldWeather
+ && (newWeather == WEATHER_RAIN_LIGHT || newWeather == WEATHER_RAIN_MED))
+ IncrementGameStat(0x28);
+}
diff --git a/src/field/overworld.c b/src/field/overworld.c
index 387745f94..02a5fba10 100644
--- a/src/field/overworld.c
+++ b/src/field/overworld.c
@@ -602,7 +602,7 @@ void sub_80538F0(u8 mapGroup, u8 mapNum)
prev_quest_postbuffer_cursor_backup_reset();
sub_8082BD0(mapGroup, mapNum);
DoTimeBasedEvents();
- sub_80806E4();
+ SetSav1WeatherFromCurrMapHeader();
ChooseAmbientCrySpecies();
SetDefaultFlashLevel();
Overworld_ClearSavedMusic();
@@ -638,7 +638,7 @@ void sub_8053994(u32 a1)
sub_8082BD0(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum);
if (a1 != 1)
DoTimeBasedEvents();
- sub_80806E4();
+ SetSav1WeatherFromCurrMapHeader();
ChooseAmbientCrySpecies();
if (v2)
FlagClear(SYS_USE_FLASH);
diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c
index 28584d4d0..8b2960038 100644
--- a/src/field/scrcmd.c
+++ b/src/field/scrcmd.c
@@ -692,7 +692,7 @@ bool8 ScrCmd_setweather(struct ScriptContext *ctx)
bool8 ScrCmd_resetweather(struct ScriptContext *ctx)
{
- sub_80806E4();
+ SetSav1WeatherFromCurrMapHeader();
return FALSE;
}