summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2020-03-17 08:53:24 -0400
committerGitHub <noreply@github.com>2020-03-17 08:53:24 -0400
commitd52f2aa5712d042f344409d8925ed80d7109706e (patch)
treebd32fd38e0409fa6f899b6fbc02433bbccb3a237
parentf8915246a77a4453135ac3a4e6a61c098d557451 (diff)
parent8a64f8b431b0d68453f8d4302474926adf407bb1 (diff)
Merge pull request #305 from PikalaxALT/field_weather
Field weather
-rw-r--r--asm/field_weather.s3024
-rw-r--r--asm/field_weather_effects.s5240
-rw-r--r--asm/overworld.s12
-rw-r--r--data/field_weather.s392
-rw-r--r--graphics/field_effects/unk_83C2D00.pal19
-rw-r--r--graphics/field_effects/unk_83C2D20.pal19
-rw-r--r--graphics/field_effects/unk_83C3540.pngbin1031 -> 0 bytes
-rw-r--r--graphics/field_effects/unk_83C4540.pngbin179 -> 0 bytes
-rw-r--r--graphics/field_effects/unk_83C4580.pngbin190 -> 0 bytes
-rw-r--r--graphics/field_effects/unk_83C55C0.pngbin271 -> 0 bytes
-rw-r--r--graphics/title_screen/unk_83BFBE4.bin (renamed from graphics/field_effects/unk_83BFBE4.bin)bin8192 -> 8192 bytes
-rw-r--r--graphics/title_screen/unk_83C0408.bin (renamed from graphics/field_effects/unk_83C0408.bin)bin8192 -> 8192 bytes
-rw-r--r--graphics/title_screen/unk_83C0C00.bin (renamed from graphics/field_effects/unk_83C0C00.bin)bin8192 -> 8192 bytes
-rw-r--r--graphics/title_screen/unk_83C139C.bin (renamed from graphics/field_effects/unk_83C139C.bin)bin8192 -> 8192 bytes
-rw-r--r--graphics/title_screen/unk_83C1BB8.bin (renamed from graphics/field_effects/unk_83C1BB8.bin)bin8192 -> 8192 bytes
-rw-r--r--graphics/title_screen/unk_83C2380.bin (renamed from graphics/field_effects/unk_83C2380.bin)bin8192 -> 8192 bytes
-rw-r--r--graphics/weather/ash.png (renamed from graphics/field_effects/unk_83C45C0.png)bin366 -> 353 bytes
-rw-r--r--graphics/weather/bubble.pngbin0 -> 177 bytes
-rw-r--r--graphics/weather/cloud.png (renamed from graphics/field_effects/unk_83C3D40.png)bin653 -> 640 bytes
-rw-r--r--graphics/weather/fog_diagonal.png (renamed from graphics/field_effects/unk_83C2D40.png)bin941 -> 928 bytes
-rw-r--r--graphics/weather/fog_horizontal.pngbin0 -> 1018 bytes
-rw-r--r--graphics/weather/rain.pngbin0 -> 258 bytes
-rw-r--r--graphics/weather/sandstorm.png (renamed from graphics/field_effects/unk_83C5BC0.png)bin603 -> 590 bytes
-rw-r--r--graphics/weather/snow0.pngbin0 -> 150 bytes
-rw-r--r--graphics/weather/snow1.pngbin0 -> 145 bytes
-rw-r--r--include/blend_palette.h1
-rw-r--r--include/constants/weather.h2
-rw-r--r--include/field_weather.h136
-rw-r--r--include/field_weather_effects.h55
-rw-r--r--include/field_weather_util.h6
-rw-r--r--include/global.h2
-rw-r--r--include/graphics.h2
-rw-r--r--ld_script.txt9
-rw-r--r--src/credits.c4
-rw-r--r--src/field_weather.c1169
-rw-r--r--src/field_weather_effects.c2320
-rw-r--r--src/field_weather_util.c105
-rw-r--r--src/ice.c4
-rw-r--r--src/title_screen.c16
-rw-r--r--sym_ewram.txt21
40 files changed, 3828 insertions, 8730 deletions
diff --git a/asm/field_weather.s b/asm/field_weather.s
deleted file mode 100644
index c5204def2..000000000
--- a/asm/field_weather.s
+++ /dev/null
@@ -1,3024 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8079C08
-sub_8079C08: @ 8079C08
- push {r4-r6,lr}
- ldr r0, _08079CCC @ =Task_WeatherMain
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- bne _08079CC4
- movs r0, 0x90
- lsls r0, 5
- bl AllocSpritePalette
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _08079CD0 @ =gUnknown_83C2CE0
- lsls r1, r5, 5
- ldr r2, _08079CD4 @ =gPlttBufferUnfaded + 0x200
- adds r1, r2
- ldr r2, _08079CD8 @ =0x04000008
- bl CpuSet
- adds r0, r5, 0
- bl sub_8083598
- bl sub_8079EE8
- ldr r4, _08079CDC @ =gUnknown_2037F34
- ldr r1, _08079CE0 @ =0x000006d5
- adds r0, r4, r1
- strb r5, [r0]
- subs r1, 0x1
- adds r0, r4, r1
- strb r5, [r0]
- adds r1, 0x6
- adds r0, r4, r1
- strb r6, [r0]
- subs r1, 0x2
- adds r0, r4, r1
- strb r6, [r0]
- adds r1, 0x6
- adds r0, r4, r1
- strb r6, [r0]
- adds r1, 0x6
- adds r0, r4, r1
- strb r6, [r0]
- adds r1, 0x1C
- adds r0, r4, r1
- strb r6, [r0]
- subs r1, 0x5
- adds r0, r4, r1
- strb r6, [r0]
- adds r1, 0x29
- adds r0, r4, r1
- strb r6, [r0]
- subs r1, 0xE
- adds r0, r4, r1
- strb r6, [r0]
- adds r1, 0x1
- adds r0, r4, r1
- strb r6, [r0]
- adds r1, 0x17
- adds r0, r4, r1
- strb r6, [r0]
- subs r1, 0x34
- adds r0, r4, r1
- strb r6, [r0]
- movs r0, 0x10
- movs r1, 0
- bl Weather_SetBlendCoeffs
- movs r1, 0xDA
- lsls r1, 3
- adds r0, r4, r1
- strb r6, [r0]
- ldr r0, _08079CE4 @ =0x000006c6
- adds r1, r4, r0
- movs r0, 0x3
- strb r0, [r1]
- movs r1, 0xD9
- lsls r1, 3
- adds r0, r4, r1
- strb r6, [r0]
- ldr r0, _08079CE8 @ =0x000006d3
- adds r1, r4, r0
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, _08079CEC @ =Task_WeatherInit
- movs r1, 0x50
- bl CreateTask
- ldr r1, _08079CF0 @ =0x000006c9
- adds r4, r1
- strb r0, [r4]
-_08079CC4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08079CCC: .4byte Task_WeatherMain
-_08079CD0: .4byte gUnknown_83C2CE0
-_08079CD4: .4byte gPlttBufferUnfaded + 0x200
-_08079CD8: .4byte 0x04000008
-_08079CDC: .4byte gUnknown_2037F34
-_08079CE0: .4byte 0x000006d5
-_08079CE4: .4byte 0x000006c6
-_08079CE8: .4byte 0x000006d3
-_08079CEC: .4byte Task_WeatherInit
-_08079CF0: .4byte 0x000006c9
- thumb_func_end sub_8079C08
-
- thumb_func_start weather_set
-weather_set: @ 8079CF4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- beq _08079D0A
- cmp r4, 0x5
- beq _08079D0A
- cmp r4, 0xD
- beq _08079D0A
- bl PlayRainStoppingSoundEffect
-_08079D0A:
- ldr r1, _08079D4C @ =gUnknown_2037F34
- ldr r2, _08079D50 @ =0x000006d1
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, r4
- beq _08079D2E
- movs r3, 0xDA
- lsls r3, 3
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, r4
- bne _08079D2E
- ldr r0, _08079D54 @ =gUnknown_83C2BC0
- lsls r1, r4, 4
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
-_08079D2E:
- ldr r1, _08079D4C @ =gUnknown_2037F34
- ldr r2, _08079D58 @ =0x000006d3
- adds r0, r1, r2
- movs r2, 0
- strb r2, [r0]
- ldr r3, _08079D50 @ =0x000006d1
- adds r0, r1, r3
- strb r4, [r0]
- ldr r0, _08079D5C @ =0x000006ce
- adds r1, r0
- strh r2, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08079D4C: .4byte gUnknown_2037F34
-_08079D50: .4byte 0x000006d1
-_08079D54: .4byte gUnknown_83C2BC0
-_08079D58: .4byte 0x000006d3
-_08079D5C: .4byte 0x000006ce
- thumb_func_end weather_set
-
- thumb_func_start sub_8079D60
-sub_8079D60: @ 8079D60
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl PlayRainStoppingSoundEffect
- ldr r0, _08079D84 @ =gUnknown_2037F34
- movs r2, 0xDA
- lsls r2, 3
- adds r1, r0, r2
- strb r4, [r1]
- ldr r1, _08079D88 @ =0x000006d1
- adds r0, r1
- strb r4, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08079D84: .4byte gUnknown_2037F34
-_08079D88: .4byte 0x000006d1
- thumb_func_end sub_8079D60
-
- thumb_func_start sub_8079D8C
-sub_8079D8C: @ 8079D8C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl PlayRainStoppingSoundEffect
- ldr r1, _08079DB8 @ =gUnknown_2037F34
- movs r2, 0xDA
- lsls r2, 3
- adds r0, r1, r2
- strb r4, [r0]
- adds r2, 0x1
- adds r0, r1, r2
- strb r4, [r0]
- movs r0, 0xD9
- lsls r0, 3
- adds r1, r0
- movs r0, 0x1
- strb r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08079DB8: .4byte gUnknown_2037F34
- thumb_func_end sub_8079D8C
-
- thumb_func_start Task_WeatherInit
-Task_WeatherInit: @ 8079DBC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r2, _08079DFC @ =gUnknown_2037F34
- movs r1, 0xD9
- lsls r1, 3
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _08079DF4
- ldr r1, _08079E00 @ =gUnknown_83C2BC0
- movs r3, 0xDA
- lsls r3, 3
- adds r0, r2, r3
- ldrb r0, [r0]
- lsls r0, 4
- adds r1, 0x8
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- ldr r1, _08079E04 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08079E08 @ =Task_WeatherMain
- str r1, [r0]
-_08079DF4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08079DFC: .4byte gUnknown_2037F34
-_08079E00: .4byte gUnknown_83C2BC0
-_08079E04: .4byte gTasks
-_08079E08: .4byte Task_WeatherMain
- thumb_func_end Task_WeatherInit
-
- thumb_func_start Task_WeatherMain
-Task_WeatherMain: @ 8079E0C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r5, _08079E68 @ =gUnknown_2037F34
- movs r0, 0xDA
- lsls r0, 3
- adds r6, r5, r0
- ldr r1, _08079E6C @ =0x000006d1
- adds r7, r5, r1
- ldrb r0, [r6]
- ldrb r2, [r7]
- cmp r0, r2
- beq _08079E80
- ldr r0, _08079E70 @ =gUnknown_83C2BC0
- mov r8, r0
- ldrb r0, [r6]
- lsls r0, 4
- mov r1, r8
- adds r1, 0xC
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _08079E90
- ldrb r0, [r7]
- lsls r0, 4
- add r0, r8
- ldr r0, [r0]
- bl _call_via_r0
- ldr r1, _08079E74 @ =0x000006c3
- adds r0, r5, r1
- strb r4, [r0]
- ldr r2, _08079E78 @ =0x000006c6
- adds r0, r5, r2
- strb r4, [r0]
- ldrb r0, [r7]
- strb r0, [r6]
- ldr r0, _08079E7C @ =0x000006d3
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
- b _08079E90
- .align 2, 0
-_08079E68: .4byte gUnknown_2037F34
-_08079E6C: .4byte 0x000006d1
-_08079E70: .4byte gUnknown_83C2BC0
-_08079E74: .4byte 0x000006c3
-_08079E78: .4byte 0x000006c6
-_08079E7C: .4byte 0x000006d3
-_08079E80:
- ldr r0, _08079EB0 @ =gUnknown_83C2BC0
- ldrb r1, [r6]
- lsls r1, 4
- adds r0, 0x4
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
-_08079E90:
- ldr r1, _08079EB4 @ =gUnknown_83C2CB0
- ldr r0, _08079EB8 @ =gUnknown_2037F34
- ldr r2, _08079EBC @ =0x000006c6
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08079EB0: .4byte gUnknown_83C2BC0
-_08079EB4: .4byte gUnknown_83C2CB0
-_08079EB8: .4byte gUnknown_2037F34
-_08079EBC: .4byte 0x000006c6
- thumb_func_end Task_WeatherMain
-
- thumb_func_start sub_8079EC0
-sub_8079EC0: @ 8079EC0
- ldr r0, _08079ED4 @ =gUnknown_2037F34
- ldr r2, _08079ED8 @ =0x000006c1
- adds r1, r0, r2
- movs r2, 0
- strb r2, [r1]
- ldr r1, _08079EDC @ =0x000006c2
- adds r0, r1
- strb r2, [r0]
- bx lr
- .align 2, 0
-_08079ED4: .4byte gUnknown_2037F34
-_08079ED8: .4byte 0x000006c1
-_08079EDC: .4byte 0x000006c2
- thumb_func_end sub_8079EC0
-
- thumb_func_start nullsub_45
-nullsub_45: @ 8079EE0
- bx lr
- thumb_func_end nullsub_45
-
- thumb_func_start sub_8079EE4
-sub_8079EE4: @ 8079EE4
- movs r0, 0
- bx lr
- thumb_func_end sub_8079EE4
-
- thumb_func_start sub_8079EE8
-sub_8079EE8: @ 8079EE8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r1, _08079F28 @ =gUnknown_20386A4
- ldr r0, _08079F2C @ =gUnknown_83C2CC0
- str r0, [r1]
- movs r0, 0
- mov r12, r0
- ldr r1, _08079F30 @ =gUnknown_2038394
- mov r10, r1
-_08079F00:
- mov r7, r10
- mov r0, r12
- cmp r0, 0
- bne _08079F0C
- ldr r1, _08079F34 @ =0xfffffda0
- adds r7, r1
-_08079F0C:
- movs r5, 0
- movs r0, 0x1
- add r0, r12
- mov r9, r0
-_08079F14:
- lsls r1, r5, 8
- lsls r0, r5, 24
- lsrs r2, r0, 16
- mov r0, r12
- cmp r0, 0
- bne _08079F38
- adds r0, r1, 0
- lsls r0, 12
- lsrs r4, r0, 16
- b _08079F3A
- .align 2, 0
-_08079F28: .4byte gUnknown_20386A4
-_08079F2C: .4byte gUnknown_83C2CC0
-_08079F30: .4byte gUnknown_2038394
-_08079F34: .4byte 0xfffffda0
-_08079F38:
- movs r4, 0
-_08079F3A:
- movs r3, 0
- adds r1, r5, 0x1
- mov r8, r1
-_08079F40:
- subs r1, r2, r4
- lsls r1, 16
- lsrs r2, r1, 16
- lsls r0, r3, 5
- adds r0, r7
- adds r0, r5
- lsrs r1, 24
- strb r1, [r0]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x2
- bls _08079F40
- adds r6, r2, 0
- movs r0, 0xF8
- lsls r0, 5
- subs r0, r2
- cmp r0, 0
- bge _08079F68
- adds r0, 0xF
-_08079F68:
- lsls r0, 12
- lsrs r4, r0, 16
- cmp r5, 0xB
- bhi _08079FB2
- cmp r3, 0x12
- bhi _08079FD8
-_08079F74:
- adds r0, r2, r4
- lsls r0, 16
- lsrs r2, r0, 16
- subs r0, r2, r6
- lsls r0, 16
- asrs r1, r0, 16
- cmp r1, 0
- ble _08079F90
- lsrs r0, 31
- adds r0, r1, r0
- asrs r0, 1
- subs r0, r2, r0
- lsls r0, 16
- lsrs r2, r0, 16
-_08079F90:
- lsls r0, r3, 5
- adds r0, r7
- adds r1, r0, r5
- lsrs r0, r2, 8
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _08079FA6
- movs r0, 0x1F
- strb r0, [r1]
-_08079FA6:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x12
- bls _08079F74
- b _08079FD8
-_08079FB2:
- cmp r3, 0x12
- bhi _08079FD8
- movs r6, 0x1F
-_08079FB8:
- adds r1, r2, r4
- lsls r1, 16
- lsrs r2, r1, 16
- lsls r0, r3, 5
- adds r0, r7
- adds r0, r5
- lsrs r1, 24
- strb r1, [r0]
- cmp r1, 0x1F
- bls _08079FCE
- strb r6, [r0]
-_08079FCE:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x12
- bls _08079FB8
-_08079FD8:
- mov r1, r8
- lsls r0, r1, 16
- lsrs r5, r0, 16
- cmp r5, 0x1F
- bls _08079F14
- mov r1, r9
- lsls r0, r1, 16
- lsrs r0, 16
- mov r12, r0
- cmp r0, 0x1
- bls _08079F00
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8079EE8
-
- thumb_func_start sub_8079FFC
-sub_8079FFC: @ 8079FFC
- push {r4-r7,lr}
- ldr r0, _0807A028 @ =gUnknown_2037F34
- movs r1, 0xD8
- lsls r1, 3
- adds r4, r0, r1
- ldr r2, _0807A02C @ =0x000006c1
- adds r1, r0, r2
- ldrb r7, [r4]
- mov r12, r7
- movs r6, 0
- ldrsb r6, [r4, r6]
- movs r5, 0
- ldrsb r5, [r1, r5]
- adds r3, r0, 0
- cmp r6, r5
- bne _0807A034
- ldr r0, _0807A030 @ =0x000006c6
- adds r1, r3, r0
- movs r0, 0x3
- strb r0, [r1]
- b _0807A07C
- .align 2, 0
-_0807A028: .4byte gUnknown_2037F34
-_0807A02C: .4byte 0x000006c1
-_0807A030: .4byte 0x000006c6
-_0807A034:
- ldr r1, _0807A05C @ =0x000006c3
- adds r2, r3, r1
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- ldr r7, _0807A060 @ =0x000006c2
- adds r1, r3, r7
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bcc _0807A07C
- movs r0, 0
- strb r0, [r2]
- mov r0, r12
- cmp r6, r5
- bge _0807A064
- adds r0, 0x1
- b _0807A068
- .align 2, 0
-_0807A05C: .4byte 0x000006c3
-_0807A060: .4byte 0x000006c2
-_0807A064:
- mov r0, r12
- subs r0, 0x1
-_0807A068:
- strb r0, [r4]
- movs r1, 0xD8
- lsls r1, 3
- adds r0, r3, r1
- movs r2, 0
- ldrsb r2, [r0, r2]
- movs r0, 0
- movs r1, 0x20
- bl sub_807A294
-_0807A07C:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8079FFC
-
- thumb_func_start sub_807A084
-sub_807A084: @ 807A084
- push {lr}
- ldr r2, _0807A0BC @ =gUnknown_2037F34
- ldr r0, _0807A0C0 @ =0x000006cb
- adds r1, r2, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _0807A0A2
- ldr r3, _0807A0C4 @ =0x000006ca
- adds r1, r2, r3
- movs r0, 0
- strb r0, [r1]
-_0807A0A2:
- movs r1, 0xDA
- lsls r1, 3
- adds r0, r2, r1
- ldrb r0, [r0]
- subs r0, 0x3
- cmp r0, 0xA
- bhi _0807A16C
- lsls r0, 2
- ldr r1, _0807A0C8 @ =_0807A0CC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807A0BC: .4byte gUnknown_2037F34
-_0807A0C0: .4byte 0x000006cb
-_0807A0C4: .4byte 0x000006ca
-_0807A0C8: .4byte _0807A0CC
- .align 2, 0
-_0807A0CC:
- .4byte _0807A0F8
- .4byte _0807A0F8
- .4byte _0807A0F8
- .4byte _0807A144
- .4byte _0807A16C
- .4byte _0807A16C
- .4byte _0807A16C
- .4byte _0807A16C
- .4byte _0807A0F8
- .4byte _0807A120
- .4byte _0807A0F8
-_0807A0F8:
- bl sub_807A19C
- lsls r0, 24
- cmp r0, 0
- bne _0807A18C
- ldr r0, _0807A118 @ =gUnknown_2037F34
- movs r2, 0xD8
- lsls r2, 3
- adds r1, r0, r2
- movs r2, 0x3
- strb r2, [r1]
- ldr r3, _0807A11C @ =0x000006c6
- adds r0, r3
- strb r2, [r0]
- b _0807A18C
- .align 2, 0
-_0807A118: .4byte gUnknown_2037F34
-_0807A11C: .4byte 0x000006c6
-_0807A120:
- bl sub_807A1FC
- lsls r0, 24
- cmp r0, 0
- bne _0807A18C
- ldr r1, _0807A13C @ =gUnknown_2037F34
- movs r0, 0xD8
- lsls r0, 3
- adds r2, r1, r0
- movs r0, 0xFA
- strb r0, [r2]
- ldr r2, _0807A140 @ =0x000006c6
- adds r1, r2
- b _0807A188
- .align 2, 0
-_0807A13C: .4byte gUnknown_2037F34
-_0807A140: .4byte 0x000006c6
-_0807A144:
- bl sub_807A254
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- bne _0807A18C
- ldr r0, _0807A164 @ =gUnknown_2037F34
- movs r3, 0xD8
- lsls r3, 3
- adds r1, r0, r3
- strb r2, [r1]
- ldr r1, _0807A168 @ =0x000006c6
- adds r0, r1
- movs r1, 0x3
- strb r1, [r0]
- b _0807A18C
- .align 2, 0
-_0807A164: .4byte gUnknown_2037F34
-_0807A168: .4byte 0x000006c6
-_0807A16C:
- ldr r0, _0807A190 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0807A18C
- ldr r3, _0807A194 @ =0x000006c1
- adds r0, r2, r3
- ldrb r1, [r0]
- subs r3, 0x1
- adds r0, r2, r3
- strb r1, [r0]
- ldr r0, _0807A198 @ =0x000006c6
- adds r1, r2, r0
-_0807A188:
- movs r0, 0x3
- strb r0, [r1]
-_0807A18C:
- pop {r0}
- bx r0
- .align 2, 0
-_0807A190: .4byte gPaletteFade
-_0807A194: .4byte 0x000006c1
-_0807A198: .4byte 0x000006c6
- thumb_func_end sub_807A084
-
- thumb_func_start sub_807A19C
-sub_807A19C: @ 807A19C
- push {r4,lr}
- sub sp, 0x4
- ldr r2, _0807A1D8 @ =gUnknown_2037F34
- ldr r0, _0807A1DC @ =0x000006c7
- adds r4, r2, r0
- ldrb r0, [r4]
- cmp r0, 0x10
- beq _0807A1F2
- adds r1, r0, 0x1
- strb r1, [r4]
- lsls r0, r1, 24
- lsrs r0, 24
- cmp r0, 0xF
- bhi _0807A1E4
- movs r3, 0x10
- subs r3, r1
- lsls r3, 24
- lsrs r3, 24
- ldr r1, _0807A1E0 @ =0x000006c4
- adds r0, r2, r1
- ldrh r0, [r0]
- str r0, [sp]
- movs r0, 0
- movs r1, 0x20
- movs r2, 0x3
- bl sub_807A3D0
- movs r0, 0x1
- b _0807A1F4
- .align 2, 0
-_0807A1D8: .4byte gUnknown_2037F34
-_0807A1DC: .4byte 0x000006c7
-_0807A1E0: .4byte 0x000006c4
-_0807A1E4:
- movs r0, 0
- movs r1, 0x20
- movs r2, 0x3
- bl sub_807A294
- movs r0, 0x10
- strb r0, [r4]
-_0807A1F2:
- movs r0, 0
-_0807A1F4:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_807A19C
-
- thumb_func_start sub_807A1FC
-sub_807A1FC: @ 807A1FC
- push {r4,lr}
- ldr r2, _0807A230 @ =gUnknown_2037F34
- ldr r0, _0807A234 @ =0x000006c7
- adds r4, r2, r0
- ldrb r0, [r4]
- cmp r0, 0x10
- beq _0807A24C
- adds r3, r0, 0x1
- strb r3, [r4]
- lsls r0, r3, 24
- lsrs r0, 24
- cmp r0, 0xF
- bhi _0807A23C
- movs r0, 0x6
- negs r0, r0
- movs r1, 0x10
- subs r1, r3
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _0807A238 @ =0x000006c4
- adds r2, r3
- ldrh r2, [r2]
- bl sub_807A518
- movs r0, 0x1
- b _0807A24E
- .align 2, 0
-_0807A230: .4byte gUnknown_2037F34
-_0807A234: .4byte 0x000006c7
-_0807A238: .4byte 0x000006c4
-_0807A23C:
- movs r2, 0x6
- negs r2, r2
- movs r0, 0
- movs r1, 0x20
- bl sub_807A294
- movs r0, 0x10
- strb r0, [r4]
-_0807A24C:
- movs r0, 0
-_0807A24E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_807A1FC
-
- thumb_func_start sub_807A254
-sub_807A254: @ 807A254
- push {lr}
- ldr r2, _0807A27C @ =gUnknown_2037F34
- ldr r1, _0807A280 @ =0x000006c7
- adds r0, r2, r1
- ldrb r1, [r0]
- cmp r1, 0x10
- beq _0807A288
- adds r1, 0x1
- strb r1, [r0]
- movs r0, 0x10
- subs r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _0807A284 @ =0x000006c4
- adds r1, r2, r3
- ldrh r1, [r1]
- bl sub_807A5F8
- movs r0, 0x1
- b _0807A28A
- .align 2, 0
-_0807A27C: .4byte gUnknown_2037F34
-_0807A280: .4byte 0x000006c7
-_0807A284: .4byte 0x000006c4
-_0807A288:
- movs r0, 0
-_0807A28A:
- pop {r1}
- bx r1
- thumb_func_end sub_807A254
-
- thumb_func_start nullsub_46
-nullsub_46: @ 807A290
- bx lr
- thumb_func_end nullsub_46
-
- thumb_func_start sub_807A294
-sub_807A294: @ 807A294
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r3, r0, 24
- adds r4, r3, 0
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- lsls r2, 24
- asrs r0, r2, 24
- cmp r0, 0
- ble _0807A3A0
- subs r0, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r6, r3, 4
- adds r0, r1, r3
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- cmp r4, r9
- bcs _0807A3B6
- lsls r0, r2, 24
- asrs r0, 19
- str r0, [sp]
-_0807A2CE:
- ldr r0, _0807A300 @ =gUnknown_20386A4
- ldr r0, [r0]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807A30C
- lsls r1, r6, 1
- ldr r0, _0807A304 @ =gPlttBufferUnfaded
- adds r0, r1, r0
- ldr r2, _0807A308 @ =gPlttBufferFaded
- adds r1, r2
- movs r2, 0x8
- bl CpuFastSet
- adds r0, r6, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r6, r0, 16
- mov r0, r9
- lsls r0, 16
- mov r8, r0
- adds r4, 0x1
- mov r12, r4
- b _0807A38A
- .align 2, 0
-_0807A300: .4byte gUnknown_20386A4
-_0807A304: .4byte gPlttBufferUnfaded
-_0807A308: .4byte gPlttBufferFaded
-_0807A30C:
- cmp r0, 0x2
- beq _0807A320
- adds r1, r4, 0
- subs r1, 0x10
- ldr r2, _0807A324 @ =gUnknown_2037F34
- ldr r3, _0807A328 @ =0x000006d5
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r1, r0
- bne _0807A330
-_0807A320:
- ldr r0, _0807A32C @ =gUnknown_2038394
- b _0807A336
- .align 2, 0
-_0807A324: .4byte gUnknown_2037F34
-_0807A328: .4byte 0x000006d5
-_0807A32C: .4byte gUnknown_2038394
-_0807A330:
- movs r3, 0x80
- lsls r3, 2
- adds r0, r2, r3
-_0807A336:
- ldr r1, [sp]
- adds r5, r1, r0
- movs r7, 0
- mov r3, r9
- lsls r3, 16
- mov r8, r3
- adds r4, 0x1
- mov r12, r4
- ldr r0, _0807A398 @ =gPlttBufferFaded
- mov r10, r0
-_0807A34A:
- adds r2, r6, 0
- lsls r0, r2, 1
- ldr r1, _0807A39C @ =gPlttBufferUnfaded
- adds r0, r1
- ldr r1, [r0]
- lsls r0, r1, 27
- lsrs r0, 27
- adds r0, r5, r0
- ldrb r4, [r0]
- lsls r0, r1, 22
- lsrs r0, 27
- adds r0, r5, r0
- ldrb r3, [r0]
- lsls r1, 17
- lsrs r1, 27
- adds r1, r5, r1
- ldrb r1, [r1]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r2, 1
- add r2, r10
- lsls r1, 10
- lsls r3, 5
- orrs r1, r3
- orrs r1, r4
- strh r1, [r2]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0xF
- bls _0807A34A
-_0807A38A:
- mov r3, r12
- lsls r0, r3, 16
- lsrs r4, r0, 16
- cmp r0, r8
- bcc _0807A2CE
- b _0807A3B6
- .align 2, 0
-_0807A398: .4byte gPlttBufferFaded
-_0807A39C: .4byte gPlttBufferUnfaded
-_0807A3A0:
- cmp r0, 0
- blt _0807A3B6
- lsls r1, r4, 5
- ldr r0, _0807A3C8 @ =gPlttBufferUnfaded
- adds r0, r1, r0
- ldr r2, _0807A3CC @ =gPlttBufferFaded
- adds r1, r2
- mov r3, r9
- lsls r2, r3, 3
- bl CpuFastSet
-_0807A3B6:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A3C8: .4byte gPlttBufferUnfaded
-_0807A3CC: .4byte gPlttBufferFaded
- thumb_func_end sub_807A294
-
- thumb_func_start sub_807A3D0
-sub_807A3D0: @ 807A3D0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- ldr r4, [sp, 0x34]
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- mov r1, sp
- strh r4, [r1]
- ldr r1, [sp]
- lsls r3, r1, 27
- lsrs r3, 27
- str r3, [sp, 0x4]
- lsls r3, r1, 22
- lsrs r3, 27
- str r3, [sp, 0x8]
- lsls r1, 17
- lsrs r1, 27
- str r1, [sp, 0xC]
- lsls r6, r0, 4
- mov r3, r10
- adds r1, r3, r0
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- movs r1, 0xFF
- lsls r1, 24
- adds r2, r1
- lsrs r2, 24
- adds r4, r0, 0
- cmp r4, r10
- bcs _0807A4FC
- lsls r0, r2, 24
- asrs r0, 19
- str r0, [sp, 0x10]
-_0807A428:
- ldr r0, _0807A458 @ =gUnknown_20386A4
- ldr r0, [r0]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807A45C
- mov r0, sp
- ldrh r3, [r0]
- adds r0, r6, 0
- movs r1, 0x10
- mov r2, r8
- bl BlendPalette
- adds r0, r6, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r6, r0, 16
- mov r3, r10
- lsls r3, 16
- mov r9, r3
- adds r4, 0x1
- mov r12, r4
- b _0807A4F2
- .align 2, 0
-_0807A458: .4byte gUnknown_20386A4
-_0807A45C:
- cmp r0, 0x1
- bne _0807A46C
- ldr r0, _0807A468 @ =gUnknown_2038134
- ldr r1, [sp, 0x10]
- adds r5, r1, r0
- b _0807A472
- .align 2, 0
-_0807A468: .4byte gUnknown_2038134
-_0807A46C:
- ldr r0, _0807A50C @ =gUnknown_2038394
- ldr r3, [sp, 0x10]
- adds r5, r3, r0
-_0807A472:
- movs r7, 0
- mov r0, r10
- lsls r0, 16
- mov r9, r0
- adds r4, 0x1
- mov r12, r4
-_0807A47E:
- adds r4, r6, 0
- lsls r0, r4, 1
- ldr r1, _0807A510 @ =gPlttBufferUnfaded
- adds r0, r1
- ldr r1, [r0]
- lsls r0, r1, 27
- lsrs r0, 27
- adds r0, r5, r0
- ldrb r3, [r0]
- lsls r0, r1, 22
- lsrs r0, 27
- adds r0, r5, r0
- ldrb r2, [r0]
- lsls r1, 17
- lsrs r1, 27
- adds r1, r5, r1
- ldrb r1, [r1]
- ldr r6, [sp, 0x4]
- subs r0, r6, r3
- mov r6, r8
- muls r6, r0
- adds r0, r6, 0
- asrs r0, 4
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- ldr r6, [sp, 0x8]
- subs r0, r6, r2
- mov r6, r8
- muls r6, r0
- adds r0, r6, 0
- asrs r0, 4
- adds r2, r0
- lsls r2, 24
- ldr r6, [sp, 0xC]
- subs r0, r6, r1
- mov r6, r8
- muls r6, r0
- adds r0, r6, 0
- asrs r0, 4
- adds r1, r0
- lsls r1, 24
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r4, 1
- ldr r0, _0807A514 @ =gPlttBufferFaded
- adds r4, r0
- lsrs r1, 14
- lsrs r2, 19
- orrs r1, r2
- orrs r1, r3
- strh r1, [r4]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0xF
- bls _0807A47E
-_0807A4F2:
- mov r1, r12
- lsls r0, r1, 16
- lsrs r4, r0, 16
- cmp r0, r9
- bcc _0807A428
-_0807A4FC:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A50C: .4byte gUnknown_2038394
-_0807A510: .4byte gPlttBufferUnfaded
-_0807A514: .4byte gPlttBufferFaded
- thumb_func_end sub_807A3D0
-
- thumb_func_start sub_807A518
-sub_807A518: @ 807A518
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r1, 24
- lsrs r6, r1, 24
- mov r0, sp
- strh r2, [r0]
- ldr r0, [sp]
- lsls r1, r0, 27
- lsrs r1, 27
- str r1, [sp, 0x4]
- lsls r1, r0, 22
- lsrs r1, 27
- mov r10, r1
- lsls r0, 17
- lsrs r0, 27
- mov r8, r0
- movs r5, 0
- movs r4, 0
-_0807A544:
- ldr r0, _0807A56C @ =gUnknown_20386A4
- ldr r0, [r0]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807A570
- mov r0, sp
- ldrh r3, [r0]
- adds r0, r5, 0
- movs r1, 0x10
- adds r2, r6, 0
- bl BlendPalette
- adds r0, r5, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r5, r0, 16
- adds r4, 0x1
- mov r12, r4
- b _0807A5D4
- .align 2, 0
-_0807A56C: .4byte gUnknown_20386A4
-_0807A570:
- movs r7, 0
- adds r4, 0x1
- mov r12, r4
- ldr r0, _0807A5F0 @ =gPlttBufferFaded
- mov r9, r0
-_0807A57A:
- adds r4, r5, 0
- lsls r0, r4, 1
- ldr r1, _0807A5F4 @ =gPlttBufferUnfaded
- adds r0, r1
- ldr r1, [r0]
- lsls r3, r1, 27
- lsrs r3, 27
- lsls r2, r1, 22
- lsrs r2, 27
- lsls r1, 17
- lsrs r1, 27
- ldr r5, [sp, 0x4]
- subs r0, r5, r3
- muls r0, r6
- asrs r0, 4
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- mov r5, r10
- subs r0, r5, r2
- muls r0, r6
- asrs r0, 4
- adds r2, r0
- lsls r2, 24
- mov r5, r8
- subs r0, r5, r1
- muls r0, r6
- asrs r0, 4
- adds r1, r0
- lsls r1, 24
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r4, 1
- add r4, r9
- lsrs r1, 14
- lsrs r2, 19
- orrs r1, r2
- orrs r1, r3
- strh r1, [r4]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0xF
- bls _0807A57A
-_0807A5D4:
- mov r1, r12
- lsls r0, r1, 16
- lsrs r4, r0, 16
- cmp r4, 0x1F
- bls _0807A544
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A5F0: .4byte gPlttBufferFaded
-_0807A5F4: .4byte gPlttBufferUnfaded
- thumb_func_end sub_807A518
-
- thumb_func_start sub_807A5F8
-sub_807A5F8: @ 807A5F8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- adds r3, r1, 0
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r3, 16
- lsrs r3, 16
- mov r0, sp
- strh r3, [r0]
- movs r1, 0x80
- lsls r1, 1
- movs r0, 0
- adds r2, r7, 0
- bl BlendPalette
- ldr r0, [sp]
- lsls r1, r0, 27
- lsrs r1, 27
- str r1, [sp, 0x4]
- lsls r1, r0, 22
- lsrs r1, 27
- str r1, [sp, 0x8]
- lsls r0, 17
- lsrs r0, 27
- mov r10, r0
- movs r4, 0x10
-_0807A634:
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_807A748
- lsls r0, 24
- cmp r0, 0
- beq _0807A6E4
- adds r0, r4, 0x1
- lsls r1, r0, 20
- lsrs r1, 16
- mov r12, r1
- lsls r1, r4, 20
- lsrs r6, r1, 16
- mov r9, r0
- cmp r6, r12
- bcs _0807A6F8
- movs r0, 0x1C
- mov r8, r0
-_0807A658:
- lsls r5, r6, 1
- ldr r0, _0807A6DC @ =gPlttBufferUnfaded
- adds r0, r5, r0
- ldr r2, [r0]
- lsls r4, r2, 27
- lsrs r4, 27
- lsls r3, r2, 22
- lsrs r3, 27
- lsls r2, 17
- lsrs r2, 27
- mov r0, r8
- subs r1, r0, r4
- lsls r0, r1, 1
- adds r0, r1
- asrs r0, 2
- adds r4, r0
- lsls r4, 24
- lsrs r4, 24
- movs r1, 0x1F
- subs r1, r3
- lsls r0, r1, 1
- adds r0, r1
- asrs r0, 2
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r8
- subs r1, r0, r2
- lsls r0, r1, 1
- adds r0, r1
- asrs r0, 2
- adds r2, r0
- lsls r2, 24
- lsrs r2, 24
- ldr r1, [sp, 0x4]
- subs r0, r1, r4
- muls r0, r7
- asrs r0, 4
- adds r4, r0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, [sp, 0x8]
- subs r0, r1, r3
- muls r0, r7
- asrs r0, 4
- adds r3, r0
- lsls r3, 24
- mov r1, r10
- subs r0, r1, r2
- muls r0, r7
- asrs r0, 4
- adds r2, r0
- lsls r2, 24
- ldr r0, _0807A6E0 @ =gPlttBufferFaded
- adds r5, r0
- lsrs r2, 14
- lsrs r3, 19
- orrs r2, r3
- orrs r2, r4
- strh r2, [r5]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, r12
- bcc _0807A658
- b _0807A6F8
- .align 2, 0
-_0807A6DC: .4byte gPlttBufferUnfaded
-_0807A6E0: .4byte gPlttBufferFaded
-_0807A6E4:
- lsls r0, r4, 20
- lsrs r0, 16
- mov r1, sp
- ldrh r3, [r1]
- movs r1, 0x10
- adds r2, r7, 0
- bl BlendPalette
- adds r4, 0x1
- mov r9, r4
-_0807A6F8:
- mov r1, r9
- lsls r0, r1, 16
- lsrs r4, r0, 16
- cmp r4, 0x1F
- bls _0807A634
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_807A5F8
-
- thumb_func_start sub_807A714
-sub_807A714: @ 807A714
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r3, _0807A73C @ =gUnknown_2037F34
- ldr r0, _0807A740 @ =0x000006fa
- adds r1, r3, r0
- ldrb r0, [r1]
- cmp r0, 0x5
- bhi _0807A736
- ldr r4, _0807A744 @ =0x000006f4
- adds r0, r3, r4
- ldrb r3, [r1]
- adds r0, r3
- strb r2, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0807A736:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A73C: .4byte gUnknown_2037F34
-_0807A740: .4byte 0x000006fa
-_0807A744: .4byte 0x000006f4
- thumb_func_end sub_807A714
-
- thumb_func_start sub_807A748
-sub_807A748: @ 807A748
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- movs r1, 0
- ldr r2, _0807A770 @ =gUnknown_2037F34
- ldr r4, _0807A774 @ =0x000006fa
- adds r0, r2, r4
- ldrb r0, [r0]
- cmp r1, r0
- bcs _0807A786
- ldr r5, _0807A778 @ =0x000006f4
- adds r4, r2, r5
- adds r2, r0, 0
-_0807A762:
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, r3
- bne _0807A77C
- movs r0, 0x1
- b _0807A788
- .align 2, 0
-_0807A770: .4byte gUnknown_2037F34
-_0807A774: .4byte 0x000006fa
-_0807A778: .4byte 0x000006f4
-_0807A77C:
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r2
- bcc _0807A762
-_0807A786:
- movs r0, 0
-_0807A788:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_807A748
-
- thumb_func_start sub_807A790
-sub_807A790: @ 807A790
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, _0807A7BC @ =gUnknown_2037F34
- ldr r1, _0807A7C0 @ =0x000006c6
- adds r0, r5, r1
- ldrb r0, [r0]
- cmp r0, 0x3
- bne _0807A7B6
- lsls r2, r4, 24
- asrs r2, 24
- movs r0, 0
- movs r1, 0x20
- bl sub_807A294
- movs r1, 0xD8
- lsls r1, 3
- adds r0, r5, r1
- strb r4, [r0]
-_0807A7B6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A7BC: .4byte gUnknown_2037F34
-_0807A7C0: .4byte 0x000006c6
- thumb_func_end sub_807A790
-
- thumb_func_start sub_807A7C4
-sub_807A7C4: @ 807A7C4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r3, _0807A80C @ =gUnknown_2037F34
- ldr r0, _0807A810 @ =0x000006c6
- adds r2, r3, r0
- ldrb r0, [r2]
- cmp r0, 0x3
- bne _0807A804
- movs r1, 0
- strb r1, [r2]
- movs r2, 0xD8
- lsls r2, 3
- adds r0, r3, r2
- strb r4, [r0]
- adds r2, 0x1
- adds r0, r3, r2
- strb r5, [r0]
- adds r2, 0x2
- adds r0, r3, r2
- strb r1, [r0]
- ldr r1, _0807A814 @ =0x000006c2
- adds r0, r3, r1
- strb r6, [r0]
- lsls r0, r4, 24
- asrs r0, 24
- bl sub_807A790
-_0807A804:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A80C: .4byte gUnknown_2037F34
-_0807A810: .4byte 0x000006c6
-_0807A814: .4byte 0x000006c2
- thumb_func_end sub_807A7C4
-
- thumb_func_start FadeScreen
-FadeScreen: @ 807A818
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- cmp r0, 0x1
- beq _0807A850
- cmp r0, 0x1
- bgt _0807A834
- cmp r0, 0
- beq _0807A83E
- b _0807A92C
-_0807A834:
- cmp r2, 0x2
- beq _0807A844
- cmp r2, 0x3
- beq _0807A854
- b _0807A92C
-_0807A83E:
- movs r4, 0
- movs r1, 0
- b _0807A858
-_0807A844:
- ldr r4, _0807A84C @ =0x0000ffff
- movs r1, 0
- b _0807A858
- .align 2, 0
-_0807A84C: .4byte 0x0000ffff
-_0807A850:
- movs r4, 0
- b _0807A856
-_0807A854:
- ldr r4, _0807A878 @ =0x0000ffff
-_0807A856:
- movs r1, 0x1
-_0807A858:
- ldr r0, _0807A87C @ =gUnknown_2037F34
- movs r2, 0xDA
- lsls r2, 3
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x3
- blt _0807A880
- cmp r0, 0x6
- ble _0807A872
- cmp r0, 0xD
- bgt _0807A880
- cmp r0, 0xB
- blt _0807A880
-_0807A872:
- movs r2, 0x1
- b _0807A882
- .align 2, 0
-_0807A878: .4byte 0x0000ffff
-_0807A87C: .4byte gUnknown_2037F34
-_0807A880:
- movs r2, 0
-_0807A882:
- cmp r1, 0
- beq _0807A8C4
- cmp r2, 0
- beq _0807A896
- ldr r0, _0807A8B4 @ =gPlttBufferFaded
- ldr r1, _0807A8B8 @ =gPlttBufferUnfaded
- movs r2, 0x80
- lsls r2, 1
- bl CpuFastSet
-_0807A896:
- movs r0, 0x1
- negs r0, r0
- lsls r1, r5, 24
- asrs r1, 24
- str r4, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _0807A8BC @ =gUnknown_2037F34
- ldr r3, _0807A8C0 @ =0x000006c6
- adds r0, r3
- movs r1, 0x2
- strb r1, [r0]
- b _0807A92C
- .align 2, 0
-_0807A8B4: .4byte gPlttBufferFaded
-_0807A8B8: .4byte gPlttBufferUnfaded
-_0807A8BC: .4byte gUnknown_2037F34
-_0807A8C0: .4byte 0x000006c6
-_0807A8C4:
- ldr r1, _0807A8DC @ =gUnknown_2037F34
- ldr r3, _0807A8E0 @ =0x000006c4
- adds r0, r1, r3
- strh r4, [r0]
- cmp r2, 0
- beq _0807A8E8
- ldr r0, _0807A8E4 @ =0x000006c7
- adds r1, r0
- movs r0, 0
- strb r0, [r1]
- b _0807A8FA
- .align 2, 0
-_0807A8DC: .4byte gUnknown_2037F34
-_0807A8E0: .4byte 0x000006c4
-_0807A8E4: .4byte 0x000006c7
-_0807A8E8:
- movs r0, 0x1
- negs r0, r0
- lsls r1, r5, 24
- asrs r1, 24
- str r4, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_0807A8FA:
- ldr r4, _0807A934 @ =gUnknown_2037F34
- ldr r1, _0807A938 @ =0x000006c6
- adds r0, r4, r1
- movs r1, 0
- movs r5, 0x1
- strb r5, [r0]
- ldr r2, _0807A93C @ =0x000006ca
- adds r0, r4, r2
- strb r5, [r0]
- ldr r3, _0807A940 @ =0x000006cb
- adds r0, r4, r3
- strb r1, [r0]
- movs r1, 0xE6
- lsls r1, 3
- adds r0, r4, r1
- ldrb r0, [r0]
- adds r2, 0x68
- adds r1, r4, r2
- ldrb r1, [r1]
- bl Weather_SetBlendCoeffs
- movs r3, 0xD9
- lsls r3, 3
- adds r4, r3
- strb r5, [r4]
-_0807A92C:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A934: .4byte gUnknown_2037F34
-_0807A938: .4byte 0x000006c6
-_0807A93C: .4byte 0x000006ca
-_0807A940: .4byte 0x000006cb
- thumb_func_end FadeScreen
-
- thumb_func_start FieldWeather_StartFadingOutCreditsMap
-FieldWeather_StartFadingOutCreditsMap: @ 807A944
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r2, 0
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- cmp r0, 0x1
- beq _0807A97C
- cmp r0, 0x1
- bgt _0807A962
- cmp r0, 0
- beq _0807A96C
- b _0807AA56
-_0807A962:
- cmp r2, 0x2
- beq _0807A972
- cmp r2, 0x3
- beq _0807A980
- b _0807AA56
-_0807A96C:
- movs r4, 0
- movs r1, 0
- b _0807A984
-_0807A972:
- ldr r4, _0807A978 @ =0x0000ffff
- movs r1, 0
- b _0807A984
- .align 2, 0
-_0807A978: .4byte 0x0000ffff
-_0807A97C:
- movs r4, 0
- b _0807A982
-_0807A980:
- ldr r4, _0807A9A4 @ =0x0000ffff
-_0807A982:
- movs r1, 0x1
-_0807A984:
- ldr r0, _0807A9A8 @ =gUnknown_2037F34
- movs r2, 0xDA
- lsls r2, 3
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x3
- blt _0807A9AC
- cmp r0, 0x6
- ble _0807A99E
- cmp r0, 0xD
- bgt _0807A9AC
- cmp r0, 0xB
- blt _0807A9AC
-_0807A99E:
- movs r2, 0x1
- b _0807A9AE
- .align 2, 0
-_0807A9A4: .4byte 0x0000ffff
-_0807A9A8: .4byte gUnknown_2037F34
-_0807A9AC:
- movs r2, 0
-_0807A9AE:
- cmp r1, 0
- beq _0807A9F0
- cmp r2, 0
- beq _0807A9C2
- ldr r0, _0807A9E0 @ =gPlttBufferFaded
- ldr r1, _0807A9E4 @ =gPlttBufferUnfaded
- movs r2, 0x80
- lsls r2, 1
- bl CpuFastSet
-_0807A9C2:
- lsls r1, r5, 24
- asrs r1, 24
- str r4, [sp]
- adds r0, r6, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _0807A9E8 @ =gUnknown_2037F34
- ldr r3, _0807A9EC @ =0x000006c6
- adds r0, r3
- movs r1, 0x2
- strb r1, [r0]
- b _0807AA56
- .align 2, 0
-_0807A9E0: .4byte gPlttBufferFaded
-_0807A9E4: .4byte gPlttBufferUnfaded
-_0807A9E8: .4byte gUnknown_2037F34
-_0807A9EC: .4byte 0x000006c6
-_0807A9F0:
- ldr r1, _0807AA08 @ =gUnknown_2037F34
- ldr r3, _0807AA0C @ =0x000006c4
- adds r0, r1, r3
- strh r4, [r0]
- cmp r2, 0
- beq _0807AA14
- ldr r0, _0807AA10 @ =0x000006c7
- adds r1, r0
- movs r0, 0
- strb r0, [r1]
- b _0807AA24
- .align 2, 0
-_0807AA08: .4byte gUnknown_2037F34
-_0807AA0C: .4byte 0x000006c4
-_0807AA10: .4byte 0x000006c7
-_0807AA14:
- lsls r1, r5, 24
- asrs r1, 24
- str r4, [sp]
- adds r0, r6, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_0807AA24:
- ldr r4, _0807AA60 @ =gUnknown_2037F34
- ldr r1, _0807AA64 @ =0x000006c6
- adds r0, r4, r1
- movs r1, 0
- movs r5, 0x1
- strb r5, [r0]
- ldr r2, _0807AA68 @ =0x000006ca
- adds r0, r4, r2
- strb r5, [r0]
- ldr r3, _0807AA6C @ =0x000006cb
- adds r0, r4, r3
- strb r1, [r0]
- movs r1, 0xE6
- lsls r1, 3
- adds r0, r4, r1
- ldrb r0, [r0]
- adds r2, 0x68
- adds r1, r4, r2
- ldrb r1, [r1]
- bl Weather_SetBlendCoeffs
- movs r3, 0xD9
- lsls r3, 3
- adds r4, r3
- strb r5, [r4]
-_0807AA56:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807AA60: .4byte gUnknown_2037F34
-_0807AA64: .4byte 0x000006c6
-_0807AA68: .4byte 0x000006ca
-_0807AA6C: .4byte 0x000006cb
- thumb_func_end FieldWeather_StartFadingOutCreditsMap
-
- thumb_func_start IsWeatherNotFadingIn
-IsWeatherNotFadingIn: @ 807AA70
- ldr r0, _0807AA84 @ =gUnknown_2037F34
- ldr r1, _0807AA88 @ =0x000006c6
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- bx lr
- .align 2, 0
-_0807AA84: .4byte gUnknown_2037F34
-_0807AA88: .4byte 0x000006c6
- thumb_func_end IsWeatherNotFadingIn
-
- thumb_func_start UpdateSpritePaletteWithWeather
-UpdateSpritePaletteWithWeather: @ 807AA8C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 8
- movs r1, 0x80
- lsls r1, 13
- adds r0, r1
- lsrs r4, r0, 16
- ldr r5, _0807AACC @ =gUnknown_2037F34
- ldr r2, _0807AAD0 @ =0x000006c6
- adds r0, r5, r2
- ldrb r0, [r0]
- adds r1, r5, 0
- cmp r0, 0x1
- beq _0807AAD4
- cmp r0, 0x2
- beq _0807AB20
- adds r2, 0xA
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x6
- beq _0807AB58
- lsls r0, r4, 24
- lsrs r0, 24
- subs r2, 0x10
- adds r1, r2
- movs r2, 0
- ldrsb r2, [r1, r2]
- movs r1, 0x1
- bl sub_807A294
- b _0807AB68
- .align 2, 0
-_0807AACC: .4byte gUnknown_2037F34
-_0807AAD0: .4byte 0x000006c6
-_0807AAD4:
- ldr r2, _0807AB14 @ =0x000006ca
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807AB68
- adds r2, 0x6
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x6
- bne _0807AAF0
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_807A714
-_0807AAF0:
- lsls r0, r4, 20
- lsrs r4, r0, 16
- movs r2, 0
- ldr r6, _0807AB18 @ =gPlttBufferFaded
- ldr r0, _0807AB1C @ =0x000006c4
- adds r3, r5, r0
-_0807AAFC:
- adds r0, r4, r2
- lsls r0, 1
- adds r0, r6
- ldrh r1, [r3]
- strh r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0xF
- bls _0807AAFC
- b _0807AB68
- .align 2, 0
-_0807AB14: .4byte 0x000006ca
-_0807AB18: .4byte gPlttBufferFaded
-_0807AB1C: .4byte 0x000006c4
-_0807AB20:
- lsls r0, r4, 20
- lsrs r4, r0, 16
- lsls r1, r4, 1
- ldr r0, _0807AB4C @ =gPlttBufferFaded
- adds r0, r1, r0
- ldr r2, _0807AB50 @ =gPlttBufferUnfaded
- adds r1, r2
- movs r2, 0x8
- bl CpuFastSet
- ldr r0, _0807AB54 @ =gPaletteFade
- ldrh r2, [r0, 0x4]
- lsls r2, 21
- lsrs r2, 27
- ldrh r3, [r0, 0x6]
- lsls r3, 17
- lsrs r3, 17
- adds r0, r4, 0
- movs r1, 0x10
- bl BlendPalette
- b _0807AB68
- .align 2, 0
-_0807AB4C: .4byte gPlttBufferFaded
-_0807AB50: .4byte gPlttBufferUnfaded
-_0807AB54: .4byte gPaletteFade
-_0807AB58:
- lsls r0, r4, 20
- lsrs r4, r0, 16
- ldr r3, _0807AB70 @ =0x000073fc
- adds r0, r4, 0
- movs r1, 0x10
- movs r2, 0xC
- bl BlendPalette
-_0807AB68:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807AB70: .4byte 0x000073fc
- thumb_func_end UpdateSpritePaletteWithWeather
-
- thumb_func_start sub_807AB74
-sub_807AB74: @ 807AB74
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0807AB90 @ =gUnknown_2037F34
- movs r2, 0xD8
- lsls r2, 3
- adds r1, r2
- movs r2, 0
- ldrsb r2, [r1, r2]
- movs r1, 0x1
- bl sub_807A294
- pop {r0}
- bx r0
- .align 2, 0
-_0807AB90: .4byte gUnknown_2037F34
- thumb_func_end sub_807AB74
-
- thumb_func_start sub_807AB94
-sub_807AB94: @ 807AB94
- push {lr}
- ldr r1, _0807ABA8 @ =gUnknown_2037F34
- ldr r2, _0807ABAC @ =0x000006c6
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0807ABB0
- movs r0, 0
- b _0807ABB6
- .align 2, 0
-_0807ABA8: .4byte gUnknown_2037F34
-_0807ABAC: .4byte 0x000006c6
-_0807ABB0:
- ldr r2, _0807ABBC @ =0x000006ca
- adds r0, r1, r2
- ldrb r0, [r0]
-_0807ABB6:
- pop {r1}
- bx r1
- .align 2, 0
-_0807ABBC: .4byte 0x000006ca
- thumb_func_end sub_807AB94
-
- thumb_func_start sub_807ABC0
-sub_807ABC0: @ 807ABC0
- push {r4,lr}
- ldr r4, _0807ABE8 @ =gUnknown_2037F34
- ldr r1, _0807ABEC @ =0x000006d4
- adds r4, r1
- ldrb r1, [r4]
- lsls r1, 20
- movs r2, 0x80
- lsls r2, 17
- adds r1, r2
- lsrs r1, 16
- movs r2, 0x20
- bl LoadPalette
- ldrb r0, [r4]
- bl UpdateSpritePaletteWithWeather
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807ABE8: .4byte gUnknown_2037F34
-_0807ABEC: .4byte 0x000006d4
- thumb_func_end sub_807ABC0
-
- thumb_func_start nullsub_47
-nullsub_47: @ 807ABF0
- bx lr
- thumb_func_end nullsub_47
-
- thumb_func_start sub_807ABF4
-sub_807ABF4: @ 807ABF4
- ldr r0, _0807AC08 @ =gUnknown_2037F34
- ldr r2, _0807AC0C @ =0x0000074d
- adds r1, r0, r2
- movs r2, 0x1
- strb r2, [r1]
- ldr r1, _0807AC10 @ =0x0000074e
- adds r0, r1
- strb r2, [r0]
- bx lr
- .align 2, 0
-_0807AC08: .4byte gUnknown_2037F34
-_0807AC0C: .4byte 0x0000074d
-_0807AC10: .4byte 0x0000074e
- thumb_func_end sub_807ABF4
-
- thumb_func_start sub_807AC14
-sub_807AC14: @ 807AC14
- push {r4,lr}
- ldr r1, _0807AC3C @ =gUnknown_2037F34
- ldr r0, _0807AC40 @ =0x0000074d
- adds r4, r1, r0
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0x1F
- bgt _0807AC48
- ldr r0, _0807AC44 @ =0x0000074e
- adds r1, r0
- adds r0, r4, 0
- bl nullsub_47
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0x1F
- bgt _0807AC48
- movs r0, 0x1
- b _0807AC4A
- .align 2, 0
-_0807AC3C: .4byte gUnknown_2037F34
-_0807AC40: .4byte 0x0000074d
-_0807AC44: .4byte 0x0000074e
-_0807AC48:
- movs r0, 0
-_0807AC4A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_807AC14
-
- thumb_func_start sub_807AC50
-sub_807AC50: @ 807AC50
- push {lr}
- lsls r0, 24
- asrs r0, 24
- mvns r0, r0
- bl sub_807A790
- pop {r0}
- bx r0
- thumb_func_end sub_807AC50
-
- thumb_func_start sub_807AC60
-sub_807AC60: @ 807AC60
- ldr r1, _0807AC88 @ =gUnknown_2037F34
- ldr r2, _0807AC8C @ =0x0000073c
- adds r0, r1, r2
- movs r2, 0
- strh r2, [r0]
- movs r3, 0xE8
- lsls r3, 3
- adds r0, r1, r3
- strh r2, [r0]
- adds r3, 0x2
- adds r0, r1, r3
- strh r2, [r0]
- ldr r0, _0807AC90 @ =0x0000073e
- adds r1, r0
- strh r2, [r1]
- ldr r1, _0807AC94 @ =gUnknown_20386A8
- movs r0, 0x5
- strh r0, [r1]
- bx lr
- .align 2, 0
-_0807AC88: .4byte gUnknown_2037F34
-_0807AC8C: .4byte 0x0000073c
-_0807AC90: .4byte 0x0000073e
-_0807AC94: .4byte gUnknown_20386A8
- thumb_func_end sub_807AC60
-
- thumb_func_start sub_807AC98
-sub_807AC98: @ 807AC98
- push {r4-r7,lr}
- ldr r5, _0807ACB4 @ =gUnknown_2037F34
- ldr r0, _0807ACB8 @ =0x00000742
- adds r7, r5, r0
- movs r1, 0
- ldrsh r2, [r7, r1]
- cmp r2, 0x1
- beq _0807AD14
- cmp r2, 0x1
- bgt _0807ACBC
- cmp r2, 0
- beq _0807ACC2
- b _0807ADA0
- .align 2, 0
-_0807ACB4: .4byte gUnknown_2037F34
-_0807ACB8: .4byte 0x00000742
-_0807ACBC:
- cmp r2, 0x2
- beq _0807AD68
- b _0807ADA0
-_0807ACC2:
- movs r3, 0xE8
- lsls r3, 3
- adds r6, r5, r3
- ldrh r0, [r6]
- adds r0, 0x1
- strh r0, [r6]
- lsls r0, 16
- asrs r0, 16
- ldr r1, _0807AD08 @ =gUnknown_20386A8
- ldrh r1, [r1]
- cmp r0, r1
- ble _0807ADA0
- strh r2, [r6]
- ldr r0, _0807AD0C @ =0x0000073c
- adds r4, r5, r0
- ldrh r0, [r4]
- adds r1, r0, 0x1
- strh r1, [r4]
- lsls r0, 24
- asrs r0, 24
- bl sub_807AC50
- ldrh r1, [r4]
- movs r2, 0
- ldrsh r0, [r4, r2]
- cmp r0, 0x5
- ble _0807ADA0
- ldr r3, _0807AD10 @ =0x0000073e
- adds r0, r5, r3
- strh r1, [r0]
- movs r0, 0x1
- strh r0, [r7]
- movs r0, 0x3C
- strh r0, [r6]
- b _0807ADA0
- .align 2, 0
-_0807AD08: .4byte gUnknown_20386A8
-_0807AD0C: .4byte 0x0000073c
-_0807AD10: .4byte 0x0000073e
-_0807AD14:
- movs r0, 0xE8
- lsls r0, 3
- adds r2, r5, r0
- ldrh r0, [r2]
- adds r0, 0x3
- movs r1, 0x7F
- ands r0, r1
- strh r0, [r2]
- ldr r1, _0807AD5C @ =gSineTable
- movs r3, 0
- ldrsh r0, [r2, r3]
- lsls r0, 1
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- subs r0, 0x1
- asrs r0, 6
- adds r0, 0x2
- ldr r2, _0807AD60 @ =0x0000073c
- adds r6, r5, r2
- adds r2, r0, 0
- strh r0, [r6]
- ldr r3, _0807AD64 @ =0x0000073e
- adds r4, r5, r3
- movs r3, 0
- ldrsh r1, [r4, r3]
- cmp r0, r1
- beq _0807AD54
- lsls r0, r2, 24
- asrs r0, 24
- bl sub_807AC50
-_0807AD54:
- ldrh r0, [r6]
- strh r0, [r4]
- b _0807ADA0
- .align 2, 0
-_0807AD5C: .4byte gSineTable
-_0807AD60: .4byte 0x0000073c
-_0807AD64: .4byte 0x0000073e
-_0807AD68:
- movs r0, 0xE8
- lsls r0, 3
- adds r2, r5, r0
- ldrh r0, [r2]
- adds r0, 0x1
- movs r6, 0
- strh r0, [r2]
- lsls r0, 16
- asrs r0, 16
- ldr r1, _0807ADA8 @ =gUnknown_20386A8
- ldrh r1, [r1]
- cmp r0, r1
- ble _0807ADA0
- strh r6, [r2]
- ldr r1, _0807ADAC @ =0x0000073c
- adds r4, r5, r1
- ldrh r0, [r4]
- subs r0, 0x1
- strh r0, [r4]
- lsls r0, 24
- asrs r0, 24
- bl sub_807AC50
- movs r2, 0
- ldrsh r0, [r4, r2]
- cmp r0, 0x3
- bne _0807ADA0
- strh r6, [r7]
-_0807ADA0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807ADA8: .4byte gUnknown_20386A8
-_0807ADAC: .4byte 0x0000073c
- thumb_func_end sub_807AC98
-
- thumb_func_start Weather_SetBlendCoeffs
-Weather_SetBlendCoeffs: @ 807ADB0
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _0807ADE8 @ =gUnknown_2037F34
- movs r4, 0xE6
- lsls r4, 3
- adds r2, r3, r4
- strh r0, [r2]
- adds r4, 0x2
- adds r2, r3, r4
- strh r1, [r2]
- adds r4, 0x2
- adds r2, r3, r4
- strh r0, [r2]
- ldr r2, _0807ADEC @ =0x00000736
- adds r3, r2
- strh r1, [r3]
- lsls r1, 8
- orrs r1, r0
- movs r0, 0x52
- bl SetGpuReg
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807ADE8: .4byte gUnknown_2037F34
-_0807ADEC: .4byte 0x00000736
- thumb_func_end Weather_SetBlendCoeffs
-
- thumb_func_start Weather_SetTargetBlendCoeffs
-Weather_SetTargetBlendCoeffs: @ 807ADF0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _0807AE24 @ =gUnknown_2037F34
- ldr r5, _0807AE28 @ =0x00000734
- adds r4, r3, r5
- movs r5, 0
- strh r0, [r4]
- ldr r4, _0807AE2C @ =0x00000736
- adds r0, r3, r4
- strh r1, [r0]
- ldr r1, _0807AE30 @ =0x0000073a
- adds r0, r3, r1
- strb r2, [r0]
- adds r4, 0x3
- adds r0, r3, r4
- strb r5, [r0]
- movs r0, 0xE7
- lsls r0, 3
- adds r3, r0
- strb r5, [r3]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807AE24: .4byte gUnknown_2037F34
-_0807AE28: .4byte 0x00000734
-_0807AE2C: .4byte 0x00000736
-_0807AE30: .4byte 0x0000073a
- thumb_func_end Weather_SetTargetBlendCoeffs
-
- thumb_func_start Weather_UpdateBlend
-Weather_UpdateBlend: @ 807AE34
- push {r4-r6,lr}
- ldr r0, _0807AE8C @ =gUnknown_2037F34
- movs r1, 0xE6
- lsls r1, 3
- adds r3, r0, r1
- ldr r2, [r3]
- ldr r6, _0807AE90 @ =0x00000734
- adds r4, r0, r6
- ldr r1, [r4]
- adds r5, r0, 0
- cmp r2, r1
- beq _0807AEF8
- ldr r0, _0807AE94 @ =0x00000739
- adds r2, r5, r0
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- ldr r6, _0807AE98 @ =0x0000073a
- adds r1, r5, r6
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bls _0807AEC4
- movs r0, 0
- strb r0, [r2]
- movs r0, 0xE7
- lsls r0, 3
- adds r1, r5, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0807AE9C
- ldrh r1, [r3]
- adds r2, r1, 0
- ldrh r0, [r4]
- cmp r2, r0
- bcs _0807AEBC
- adds r0, r1, 0x1
- b _0807AEC2
- .align 2, 0
-_0807AE8C: .4byte gUnknown_2037F34
-_0807AE90: .4byte 0x00000734
-_0807AE94: .4byte 0x00000739
-_0807AE98: .4byte 0x0000073a
-_0807AE9C:
- ldr r1, _0807AEB4 @ =0x00000732
- adds r3, r5, r1
- ldr r2, _0807AEB8 @ =0x00000736
- adds r0, r5, r2
- ldrh r1, [r3]
- adds r2, r1, 0
- ldrh r0, [r0]
- cmp r2, r0
- bcs _0807AEBC
- adds r0, r1, 0x1
- b _0807AEC2
- .align 2, 0
-_0807AEB4: .4byte 0x00000732
-_0807AEB8: .4byte 0x00000736
-_0807AEBC:
- cmp r2, r0
- bls _0807AEC4
- subs r0, r1, 0x1
-_0807AEC2:
- strh r0, [r3]
-_0807AEC4:
- ldr r6, _0807AEF0 @ =0x00000732
- adds r0, r5, r6
- ldrh r1, [r0]
- lsls r1, 8
- movs r0, 0xE6
- lsls r0, 3
- adds r4, r5, r0
- ldrh r0, [r4]
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- ldr r1, [r4]
- ldr r2, _0807AEF4 @ =0x00000734
- adds r0, r5, r2
- ldr r0, [r0]
- cmp r1, r0
- beq _0807AEF8
- movs r0, 0
- b _0807AEFA
- .align 2, 0
-_0807AEF0: .4byte 0x00000732
-_0807AEF4: .4byte 0x00000734
-_0807AEF8:
- movs r0, 0x1
-_0807AEFA:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end Weather_UpdateBlend
-
- thumb_func_start sub_807AF00
-sub_807AF00: @ 807AF00
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- cmp r0, 0x9
- bhi _0807AF92
- lsls r0, 2
- ldr r1, _0807AF18 @ =_0807AF1C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807AF18: .4byte _0807AF1C
- .align 2, 0
-_0807AF1C:
- .4byte _0807AF44
- .4byte _0807AF4C
- .4byte _0807AF54
- .4byte _0807AF5C
- .4byte _0807AF64
- .4byte _0807AF6C
- .4byte _0807AF74
- .4byte _0807AF7C
- .4byte _0807AF84
- .4byte _0807AF8C
-_0807AF44:
- movs r0, 0x1
- bl SetWeather
- b _0807AF92
-_0807AF4C:
- movs r0, 0x2
- bl SetWeather
- b _0807AF92
-_0807AF54:
- movs r0, 0x3
- bl SetWeather
- b _0807AF92
-_0807AF5C:
- movs r0, 0x4
- bl SetWeather
- b _0807AF92
-_0807AF64:
- movs r0, 0x5
- bl SetWeather
- b _0807AF92
-_0807AF6C:
- movs r0, 0x6
- bl SetWeather
- b _0807AF92
-_0807AF74:
- movs r0, 0x9
- bl SetWeather
- b _0807AF92
-_0807AF7C:
- movs r0, 0x7
- bl SetWeather
- b _0807AF92
-_0807AF84:
- movs r0, 0x8
- bl SetWeather
- b _0807AF92
-_0807AF8C:
- movs r0, 0xB
- bl SetWeather
-_0807AF92:
- pop {r0}
- bx r0
- thumb_func_end sub_807AF00
-
- thumb_func_start GetCurrentWeather
-GetCurrentWeather: @ 807AF98
- ldr r0, _0807AFA4 @ =gUnknown_2037F34
- movs r1, 0xDA
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0807AFA4: .4byte gUnknown_2037F34
- thumb_func_end GetCurrentWeather
-
- thumb_func_start SetRainStrengthFromSoundEffect
-SetRainStrengthFromSoundEffect: @ 807AFA8
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r1, _0807AFC8 @ =gUnknown_2037F34
- ldr r3, _0807AFCC @ =0x000006c6
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _0807AFFA
- cmp r2, 0x4C
- beq _0807AFE0
- cmp r2, 0x4C
- bgt _0807AFD0
- cmp r2, 0x4A
- beq _0807AFEC
- b _0807AFFA
- .align 2, 0
-_0807AFC8: .4byte gUnknown_2037F34
-_0807AFCC: .4byte 0x000006c6
-_0807AFD0:
- cmp r2, 0x4E
- bne _0807AFFA
- ldr r0, _0807AFDC @ =0x000006dd
- adds r1, r0
- movs r0, 0
- b _0807AFF2
- .align 2, 0
-_0807AFDC: .4byte 0x000006dd
-_0807AFE0:
- ldr r3, _0807AFE8 @ =0x000006dd
- adds r1, r3
- movs r0, 0x1
- b _0807AFF2
- .align 2, 0
-_0807AFE8: .4byte 0x000006dd
-_0807AFEC:
- ldr r0, _0807B000 @ =0x000006dd
- adds r1, r0
- movs r0, 0x2
-_0807AFF2:
- strb r0, [r1]
- adds r0, r2, 0
- bl PlaySE
-_0807AFFA:
- pop {r0}
- bx r0
- .align 2, 0
-_0807B000: .4byte 0x000006dd
- thumb_func_end SetRainStrengthFromSoundEffect
-
- thumb_func_start PlayRainStoppingSoundEffect
-PlayRainStoppingSoundEffect: @ 807B004
- push {lr}
- bl IsSpecialSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _0807B042
- ldr r0, _0807B02C @ =gUnknown_2037F34
- ldr r1, _0807B030 @ =0x000006dd
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0807B034
- cmp r0, 0x1
- bgt _0807B03C
- cmp r0, 0
- bne _0807B03C
- movs r0, 0x4F
- bl PlaySE
- b _0807B042
- .align 2, 0
-_0807B02C: .4byte gUnknown_2037F34
-_0807B030: .4byte 0x000006dd
-_0807B034:
- movs r0, 0x4D
- bl PlaySE
- b _0807B042
-_0807B03C:
- movs r0, 0x4B
- bl PlaySE
-_0807B042:
- pop {r0}
- bx r0
- thumb_func_end PlayRainStoppingSoundEffect
-
- thumb_func_start sub_807B048
-sub_807B048: @ 807B048
- ldr r0, _0807B054 @ =gUnknown_2037F34
- ldr r1, _0807B058 @ =0x000006d3
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0807B054: .4byte gUnknown_2037F34
-_0807B058: .4byte 0x000006d3
- thumb_func_end sub_807B048
-
- thumb_func_start SetWeatherScreenFadeOut
-SetWeatherScreenFadeOut: @ 807B05C
- ldr r0, _0807B068 @ =gUnknown_2037F34
- ldr r1, _0807B06C @ =0x000006c6
- adds r0, r1
- movs r1, 0x2
- strb r1, [r0]
- bx lr
- .align 2, 0
-_0807B068: .4byte gUnknown_2037F34
-_0807B06C: .4byte 0x000006c6
- thumb_func_end SetWeatherScreenFadeOut
-
- thumb_func_start sub_807B070
-sub_807B070: @ 807B070
- ldr r0, _0807B07C @ =gUnknown_2037F34
- ldr r1, _0807B080 @ =0x000006c6
- adds r0, r1
- movs r1, 0x3
- strb r1, [r0]
- bx lr
- .align 2, 0
-_0807B07C: .4byte gUnknown_2037F34
-_0807B080: .4byte 0x000006c6
- thumb_func_end sub_807B070
-
- thumb_func_start PreservePaletteInWeather
-PreservePaletteInWeather: @ 807B084
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _0807B0A8 @ =gUnknown_83C2CC0
- ldr r5, _0807B0AC @ =gUnknown_2038684
- adds r1, r5, 0
- movs r2, 0x10
- bl CpuSet
- adds r4, r5
- movs r0, 0
- strb r0, [r4]
- ldr r0, _0807B0B0 @ =gUnknown_20386A4
- str r5, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B0A8: .4byte gUnknown_83C2CC0
-_0807B0AC: .4byte gUnknown_2038684
-_0807B0B0: .4byte gUnknown_20386A4
- thumb_func_end PreservePaletteInWeather
-
- thumb_func_start ResetPreservedPalettesInWeather
-ResetPreservedPalettesInWeather: @ 807B0B4
- ldr r1, _0807B0BC @ =gUnknown_20386A4
- ldr r0, _0807B0C0 @ =gUnknown_83C2CC0
- str r0, [r1]
- bx lr
- .align 2, 0
-_0807B0BC: .4byte gUnknown_20386A4
-_0807B0C0: .4byte gUnknown_83C2CC0
- thumb_func_end ResetPreservedPalettesInWeather
-
- thumb_func_start sub_807B0C4
-sub_807B0C4: @ 807B0C4
- push {lr}
- adds r1, r0, 0
- adds r3, r2, 0
- ldr r0, _0807B0E8 @ =gUnknown_2037F34
- movs r2, 0xDA
- lsls r2, 3
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0xB
- beq _0807B0F0
- cmp r0, 0xB
- bgt _0807B0EC
- cmp r0, 0x5
- bgt _0807B0FA
- cmp r0, 0x3
- blt _0807B0FA
- b _0807B0F0
- .align 2, 0
-_0807B0E8: .4byte gUnknown_2037F34
-_0807B0EC:
- cmp r0, 0xD
- bne _0807B0FA
-_0807B0F0:
- adds r0, r1, 0
- movs r1, 0
- movs r2, 0x3
- bl sub_8045314
-_0807B0FA:
- pop {r0}
- bx r0
- thumb_func_end sub_807B0C4
-
- thumb_func_start SetSav1Weather
-SetSav1Weather: @ 807B100
- push {r4,r5,lr}
- ldr r4, _0807B12C @ =gSaveBlock1Ptr
- ldr r1, [r4]
- adds r1, 0x2E
- ldrb r5, [r1]
- lsls r0, 24
- lsrs r0, 24
- bl TranslateWeatherNum
- ldr r1, [r4]
- adds r1, 0x2E
- strb r0, [r1]
- ldr r0, [r4]
- adds r0, 0x2E
- ldrb r0, [r0]
- adds r1, r5, 0
- bl UpdateRainCounter
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B12C: .4byte gSaveBlock1Ptr
- thumb_func_end SetSav1Weather
-
- thumb_func_start sav1_get_weather_probably
-sav1_get_weather_probably: @ 807B130
- ldr r0, _0807B13C @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x2E
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0807B13C: .4byte gSaveBlock1Ptr
- thumb_func_end sav1_get_weather_probably
-
- thumb_func_start SetSav1WeatherFromCurrMapHeader
-SetSav1WeatherFromCurrMapHeader: @ 807B140
- push {r4,r5,lr}
- ldr r4, _0807B16C @ =gSaveBlock1Ptr
- ldr r0, [r4]
- adds r0, 0x2E
- ldrb r5, [r0]
- ldr r0, _0807B170 @ =gMapHeader
- ldrb r0, [r0, 0x16]
- bl TranslateWeatherNum
- ldr r1, [r4]
- adds r1, 0x2E
- strb r0, [r1]
- ldr r0, [r4]
- adds r0, 0x2E
- ldrb r0, [r0]
- adds r1, r5, 0
- bl UpdateRainCounter
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B16C: .4byte gSaveBlock1Ptr
-_0807B170: .4byte gMapHeader
- thumb_func_end SetSav1WeatherFromCurrMapHeader
-
- thumb_func_start SetWeather
-SetWeather: @ 807B174
- push {lr}
- bl SetSav1Weather
- bl sav1_get_weather_probably
- lsls r0, 24
- lsrs r0, 24
- bl weather_set
- pop {r0}
- bx r0
- thumb_func_end SetWeather
-
- thumb_func_start sub_807B18C
-sub_807B18C: @ 807B18C
- push {lr}
- bl SetSav1Weather
- bl sav1_get_weather_probably
- lsls r0, 24
- lsrs r0, 24
- bl sub_8079D60
- pop {r0}
- bx r0
- thumb_func_end sub_807B18C
-
- thumb_func_start DoCurrentWeather
-DoCurrentWeather: @ 807B1A4
- push {lr}
- bl sav1_get_weather_probably
- lsls r0, 24
- lsrs r0, 24
- bl weather_set
- pop {r0}
- bx r0
- thumb_func_end DoCurrentWeather
-
- thumb_func_start sub_807B1B8
-sub_807B1B8: @ 807B1B8
- push {lr}
- bl sav1_get_weather_probably
- lsls r0, 24
- lsrs r0, 24
- bl sub_8079D60
- pop {r0}
- bx r0
- thumb_func_end sub_807B1B8
-
- thumb_func_start TranslateWeatherNum
-TranslateWeatherNum: @ 807B1CC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x15
- bhi _0807B294
- lsls r0, 2
- ldr r1, _0807B1E0 @ =_0807B1E4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807B1E0: .4byte _0807B1E4
- .align 2, 0
-_0807B1E4:
- .4byte _0807B294
- .4byte _0807B23C
- .4byte _0807B240
- .4byte _0807B244
- .4byte _0807B248
- .4byte _0807B24C
- .4byte _0807B250
- .4byte _0807B254
- .4byte _0807B258
- .4byte _0807B25C
- .4byte _0807B260
- .4byte _0807B264
- .4byte _0807B268
- .4byte _0807B26C
- .4byte _0807B270
- .4byte _0807B294
- .4byte _0807B294
- .4byte _0807B294
- .4byte _0807B294
- .4byte _0807B294
- .4byte _0807B274
- .4byte _0807B27C
-_0807B23C:
- movs r0, 0x1
- b _0807B296
-_0807B240:
- movs r0, 0x2
- b _0807B296
-_0807B244:
- movs r0, 0x3
- b _0807B296
-_0807B248:
- movs r0, 0x4
- b _0807B296
-_0807B24C:
- movs r0, 0x5
- b _0807B296
-_0807B250:
- movs r0, 0x6
- b _0807B296
-_0807B254:
- movs r0, 0x7
- b _0807B296
-_0807B258:
- movs r0, 0x8
- b _0807B296
-_0807B25C:
- movs r0, 0x9
- b _0807B296
-_0807B260:
- movs r0, 0xA
- b _0807B296
-_0807B264:
- movs r0, 0xB
- b _0807B296
-_0807B268:
- movs r0, 0xC
- b _0807B296
-_0807B26C:
- movs r0, 0xD
- b _0807B296
-_0807B270:
- movs r0, 0xE
- b _0807B296
-_0807B274:
- ldr r1, _0807B278 @ =gUnknown_83C65C0
- b _0807B27E
- .align 2, 0
-_0807B278: .4byte gUnknown_83C65C0
-_0807B27C:
- ldr r1, _0807B28C @ =gUnknown_83C65C4
-_0807B27E:
- ldr r0, _0807B290 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x2F
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- b _0807B296
- .align 2, 0
-_0807B28C: .4byte gUnknown_83C65C4
-_0807B290: .4byte gSaveBlock1Ptr
-_0807B294:
- movs r0, 0
-_0807B296:
- pop {r1}
- bx r1
- thumb_func_end TranslateWeatherNum
-
- thumb_func_start UpdateWeatherPerDay
-UpdateWeatherPerDay: @ 807B29C
- lsls r0, 16
- ldr r1, _0807B2B8 @ =gSaveBlock1Ptr
- ldr r2, [r1]
- 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
-_0807B2B8: .4byte gSaveBlock1Ptr
- thumb_func_end UpdateWeatherPerDay
-
- thumb_func_start UpdateRainCounter
-UpdateRainCounter: @ 807B2BC
- push {lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r2, r0, 24
- cmp r0, r1
- beq _0807B2D6
- cmp r2, 0x3
- beq _0807B2D0
- cmp r2, 0x5
- bne _0807B2D6
-_0807B2D0:
- movs r0, 0x28
- bl IncrementGameStat
-_0807B2D6:
- pop {r0}
- bx r0
- thumb_func_end UpdateRainCounter
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/field_weather_effects.s b/asm/field_weather_effects.s
deleted file mode 100644
index decfe4078..000000000
--- a/asm/field_weather_effects.s
+++ /dev/null
@@ -1,5240 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start Clouds_InitVars
-Clouds_InitVars: @ 807B2DC
- push {lr}
- ldr r0, _0807B314 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r2, _0807B318 @ =0x000006c1
- adds r1, r0, r2
- movs r2, 0
- strb r2, [r1]
- ldr r1, _0807B31C @ =0x000006c2
- adds r3, r0, r1
- movs r1, 0x14
- strb r1, [r3]
- ldr r3, _0807B320 @ =0x000006d2
- adds r1, r0, r3
- strb r2, [r1]
- subs r3, 0x6
- adds r1, r0, r3
- strh r2, [r1]
- ldr r1, _0807B324 @ =0x000006de
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807B310
- movs r0, 0
- movs r1, 0x10
- bl Weather_SetBlendCoeffs
-_0807B310:
- pop {r0}
- bx r0
- .align 2, 0
-_0807B314: .4byte gUnknown_83C2BBC
-_0807B318: .4byte 0x000006c1
-_0807B31C: .4byte 0x000006c2
-_0807B320: .4byte 0x000006d2
-_0807B324: .4byte 0x000006de
- thumb_func_end Clouds_InitVars
-
- thumb_func_start Clouds_InitAll
-Clouds_InitAll: @ 807B328
- push {r4,lr}
- bl Clouds_InitVars
- ldr r0, _0807B350 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B354 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807B348
- adds r4, r1, r2
-_0807B33E:
- bl Clouds_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807B33E
-_0807B348:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B350: .4byte gUnknown_83C2BBC
-_0807B354: .4byte 0x000006d2
- thumb_func_end Clouds_InitAll
-
- thumb_func_start Clouds_Main
-Clouds_Main: @ 807B358
- push {r4,r5,lr}
- ldr r0, _0807B374 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807B378 @ =0x000006cc
- adds r4, r5, r0
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807B388
- cmp r0, 0x1
- bgt _0807B37C
- cmp r0, 0
- beq _0807B382
- b _0807B3AC
- .align 2, 0
-_0807B374: .4byte gUnknown_83C2BBC
-_0807B378: .4byte 0x000006cc
-_0807B37C:
- cmp r0, 0x2
- beq _0807B394
- b _0807B3AC
-_0807B382:
- bl CreateCloudSprites
- b _0807B3A6
-_0807B388:
- movs r0, 0xC
- movs r1, 0x8
- movs r2, 0x1
- bl Weather_SetTargetBlendCoeffs
- b _0807B3A6
-_0807B394:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807B3AC
- ldr r0, _0807B3B4 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
-_0807B3A6:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807B3AC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B3B4: .4byte 0x000006d2
- thumb_func_end Clouds_Main
-
- thumb_func_start Clouds_Finish
-Clouds_Finish: @ 807B3B8
- push {r4,lr}
- ldr r0, _0807B3D0 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807B3D4 @ =0x000006ce
- adds r4, r0, r1
- ldrh r0, [r4]
- cmp r0, 0
- beq _0807B3D8
- cmp r0, 0x1
- beq _0807B3E4
- movs r0, 0
- b _0807B3FA
- .align 2, 0
-_0807B3D0: .4byte gUnknown_83C2BBC
-_0807B3D4: .4byte 0x000006ce
-_0807B3D8:
- movs r0, 0
- movs r1, 0x10
- movs r2, 0x1
- bl Weather_SetTargetBlendCoeffs
- b _0807B3F2
-_0807B3E4:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807B3F8
- bl sub_807B504
-_0807B3F2:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807B3F8:
- movs r0, 0x1
-_0807B3FA:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end Clouds_Finish
-
- thumb_func_start Weather2_InitVars
-Weather2_InitVars: @ 807B400
- ldr r0, _0807B418 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807B41C @ =0x000006c1
- adds r2, r1, r0
- movs r0, 0
- strb r0, [r2]
- ldr r0, _0807B420 @ =0x000006c2
- adds r1, r0
- movs r0, 0x14
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0807B418: .4byte gUnknown_83C2BBC
-_0807B41C: .4byte 0x000006c1
-_0807B420: .4byte 0x000006c2
- thumb_func_end Weather2_InitVars
-
- thumb_func_start Weather2_InitAll
-Weather2_InitAll: @ 807B424
- push {lr}
- bl Weather2_InitVars
- pop {r0}
- bx r0
- thumb_func_end Weather2_InitAll
-
- thumb_func_start nullsub_48
-nullsub_48: @ 807B430
- bx lr
- thumb_func_end nullsub_48
-
- thumb_func_start sub_807B434
-sub_807B434: @ 807B434
- movs r0, 0
- bx lr
- thumb_func_end sub_807B434
-
- thumb_func_start CreateCloudSprites
-CreateCloudSprites: @ 807B438
- push {r4,r5,lr}
- ldr r0, _0807B4B0 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807B4B4 @ =0x000006de
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0807B4F4
- ldr r0, _0807B4B8 @ =gUnknown_83C65D4
- bl LoadSpriteSheet
- ldr r0, _0807B4BC @ =gUnknown_83C2D00
- bl sub_807ABC0
- movs r5, 0
-_0807B456:
- ldr r0, _0807B4C0 @ =gUnknown_83C65F0
- movs r1, 0
- movs r2, 0
- movs r3, 0xFF
- bl CreateSprite
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x40
- beq _0807B4CC
- ldr r0, _0807B4B0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- lsls r2, r5, 2
- movs r0, 0xFA
- lsls r0, 1
- adds r1, r0
- adds r1, r2
- lsls r4, r3, 4
- adds r4, r3
- lsls r4, 2
- ldr r0, _0807B4C4 @ =gSprites
- adds r4, r0
- str r4, [r1]
- ldr r0, _0807B4C8 @ =gUnknown_83C65C8
- adds r2, r0
- ldrh r0, [r2]
- adds r0, 0x7
- lsls r0, 16
- asrs r0, 16
- ldrh r1, [r2, 0x2]
- adds r1, 0x7
- lsls r1, 16
- asrs r1, 16
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- bl SetSpritePosToMapCoords
- adds r4, 0x3E
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- b _0807B4DE
- .align 2, 0
-_0807B4B0: .4byte gUnknown_83C2BBC
-_0807B4B4: .4byte 0x000006de
-_0807B4B8: .4byte gUnknown_83C65D4
-_0807B4BC: .4byte gUnknown_83C2D00
-_0807B4C0: .4byte gUnknown_83C65F0
-_0807B4C4: .4byte gSprites
-_0807B4C8: .4byte gUnknown_83C65C8
-_0807B4CC:
- ldr r0, _0807B4FC @ =gUnknown_83C2BBC
- ldr r1, [r0]
- lsls r0, r5, 2
- movs r2, 0xFA
- lsls r2, 1
- adds r1, r2
- adds r1, r0
- movs r0, 0
- str r0, [r1]
-_0807B4DE:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x2
- bls _0807B456
- ldr r0, _0807B4FC @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807B500 @ =0x000006de
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0807B4F4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B4FC: .4byte gUnknown_83C2BBC
-_0807B500: .4byte 0x000006de
- thumb_func_end CreateCloudSprites
-
- thumb_func_start sub_807B504
-sub_807B504: @ 807B504
- push {r4,r5,lr}
- ldr r0, _0807B550 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B554 @ =0x000006de
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807B548
- movs r4, 0
- movs r0, 0xFA
- lsls r0, 1
- adds r5, r1, r0
-_0807B51C:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807B52A
- bl DestroySprite
-_0807B52A:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x2
- bls _0807B51C
- movs r0, 0x90
- lsls r0, 5
- bl FreeSpriteTilesByTag
- ldr r0, _0807B550 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807B554 @ =0x000006de
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0807B548:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B550: .4byte gUnknown_83C2BBC
-_0807B554: .4byte 0x000006de
- thumb_func_end sub_807B504
-
- thumb_func_start sub_807B558
-sub_807B558: @ 807B558
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- movs r1, 0x1
- ands r0, r1
- strh r0, [r2, 0x2E]
- cmp r0, 0
- beq _0807B570
- ldrh r0, [r2, 0x20]
- subs r0, 0x1
- strh r0, [r2, 0x20]
-_0807B570:
- pop {r0}
- bx r0
- thumb_func_end sub_807B558
-
- thumb_func_start Drought_InitVars
-Drought_InitVars: @ 807B574
- ldr r0, _0807B598 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807B59C @ =0x000006cc
- adds r3, r1, r0
- movs r2, 0
- movs r0, 0
- strh r0, [r3]
- ldr r3, _0807B5A0 @ =0x000006d2
- adds r0, r1, r3
- strb r2, [r0]
- subs r3, 0x11
- adds r0, r1, r3
- strb r2, [r0]
- ldr r0, _0807B5A4 @ =0x000006c2
- adds r1, r0
- strb r2, [r1]
- bx lr
- .align 2, 0
-_0807B598: .4byte gUnknown_83C2BBC
-_0807B59C: .4byte 0x000006cc
-_0807B5A0: .4byte 0x000006d2
-_0807B5A4: .4byte 0x000006c2
- thumb_func_end Drought_InitVars
-
- thumb_func_start Drought_InitAll
-Drought_InitAll: @ 807B5A8
- push {r4,lr}
- bl Drought_InitVars
- ldr r0, _0807B5D0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B5D4 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807B5C8
- adds r4, r1, r2
-_0807B5BE:
- bl Drought_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807B5BE
-_0807B5C8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B5D0: .4byte gUnknown_83C2BBC
-_0807B5D4: .4byte 0x000006d2
- thumb_func_end Drought_InitAll
-
- thumb_func_start Drought_Main
-Drought_Main: @ 807B5D8
- push {lr}
- ldr r1, _0807B5F4 @ =gUnknown_83C2BBC
- ldr r0, [r1]
- ldr r2, _0807B5F8 @ =0x000006cc
- adds r0, r2
- ldrh r0, [r0]
- adds r2, r1, 0
- cmp r0, 0x4
- bhi _0807B6B4
- lsls r0, 2
- ldr r1, _0807B5FC @ =_0807B600
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807B5F4: .4byte gUnknown_83C2BBC
-_0807B5F8: .4byte 0x000006cc
-_0807B5FC: .4byte _0807B600
- .align 2, 0
-_0807B600:
- .4byte _0807B614
- .4byte _0807B630
- .4byte _0807B648
- .4byte _0807B664
- .4byte _0807B67C
-_0807B614:
- ldr r1, [r2]
- ldr r2, _0807B628 @ =0x000006c6
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807B6B8
- ldr r0, _0807B62C @ =0x000006cc
- adds r1, r0
- b _0807B69C
- .align 2, 0
-_0807B628: .4byte 0x000006c6
-_0807B62C: .4byte 0x000006cc
-_0807B630:
- bl sub_807ABF4
- ldr r0, _0807B640 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B644 @ =0x000006cc
- adds r1, r2
- b _0807B69C
- .align 2, 0
-_0807B640: .4byte gUnknown_83C2BBC
-_0807B644: .4byte 0x000006cc
-_0807B648:
- bl sub_807AC14
- lsls r0, 24
- cmp r0, 0
- bne _0807B6B8
- ldr r0, _0807B65C @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807B660 @ =0x000006cc
- adds r1, r0
- b _0807B69C
- .align 2, 0
-_0807B65C: .4byte gUnknown_83C2BBC
-_0807B660: .4byte 0x000006cc
-_0807B664:
- bl sub_807AC60
- ldr r0, _0807B674 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B678 @ =0x000006cc
- adds r1, r2
- b _0807B69C
- .align 2, 0
-_0807B674: .4byte gUnknown_83C2BBC
-_0807B678: .4byte 0x000006cc
-_0807B67C:
- bl sub_807AC98
- ldr r0, _0807B6A4 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r1, _0807B6A8 @ =0x0000073c
- adds r0, r2, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0x6
- bne _0807B6B8
- ldr r0, _0807B6AC @ =0x000006d2
- adds r1, r2, r0
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, _0807B6B0 @ =0x000006cc
- adds r1, r2, r0
-_0807B69C:
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _0807B6B8
- .align 2, 0
-_0807B6A4: .4byte gUnknown_83C2BBC
-_0807B6A8: .4byte 0x0000073c
-_0807B6AC: .4byte 0x000006d2
-_0807B6B0: .4byte 0x000006cc
-_0807B6B4:
- bl sub_807AC98
-_0807B6B8:
- pop {r0}
- bx r0
- thumb_func_end Drought_Main
-
- thumb_func_start sub_807B6BC
-sub_807B6BC: @ 807B6BC
- movs r0, 0
- bx lr
- thumb_func_end sub_807B6BC
-
- thumb_func_start StartDroughtWeatherBlend
-StartDroughtWeatherBlend: @ 807B6C0
- push {lr}
- ldr r0, _0807B6D0 @ =task50_0807B6D4
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_0807B6D0: .4byte task50_0807B6D4
- thumb_func_end StartDroughtWeatherBlend
-
- thumb_func_start task50_0807B6D4
-task50_0807B6D4: @ 807B6D4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0807B6F8 @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bhi _0807B7C2
- lsls r0, 2
- ldr r1, _0807B6FC @ =_0807B700
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807B6F8: .4byte gTasks
-_0807B6FC: .4byte _0807B700
- .align 2, 0
-_0807B700:
- .4byte _0807B714
- .4byte _0807B740
- .4byte _0807B768
- .4byte _0807B798
- .4byte _0807B7B8
-_0807B714:
- movs r0, 0
- strh r0, [r4, 0xA]
- strh r0, [r4, 0xC]
- movs r0, 0x48
- bl GetGpuReg
- strh r0, [r4, 0xE]
- ldr r1, _0807B764 @ =0x00003f3f
- movs r0, 0x48
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0x9E
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0807B740:
- ldrh r0, [r4, 0xA]
- adds r0, 0x3
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x10
- ble _0807B752
- movs r0, 0x10
- strh r0, [r4, 0xA]
-_0807B752:
- ldrh r1, [r4, 0xA]
- movs r0, 0x54
- bl SetGpuReg
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0xF
- ble _0807B7C2
- b _0807B7B0
- .align 2, 0
-_0807B764: .4byte 0x00003f3f
-_0807B768:
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x9
- ble _0807B7C2
- strh r1, [r4, 0xC]
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bgt _0807B78E
- strh r1, [r4, 0xA]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0807B78E:
- ldrh r1, [r4, 0xA]
- movs r0, 0x54
- bl SetGpuReg
- b _0807B7C2
-_0807B798:
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldrh r1, [r4, 0xE]
- movs r0, 0x48
- bl SetGpuReg
-_0807B7B0:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _0807B7C2
-_0807B7B8:
- bl EnableBothScriptContexts
- adds r0, r5, 0
- bl DestroyTask
-_0807B7C2:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end task50_0807B6D4
-
- thumb_func_start LightRain_InitVars
-LightRain_InitVars: @ 807B7C8
- push {r4,lr}
- ldr r0, _0807B818 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B81C @ =0x000006cc
- adds r0, r1, r2
- movs r3, 0
- movs r2, 0
- strh r2, [r0]
- ldr r4, _0807B820 @ =0x000006d2
- adds r0, r1, r4
- strb r3, [r0]
- adds r4, 0x4
- adds r0, r1, r4
- strh r2, [r0]
- ldr r0, _0807B824 @ =0x000006db
- adds r2, r1, r0
- movs r0, 0x8
- strb r0, [r2]
- ldr r2, _0807B828 @ =0x000006dc
- adds r0, r1, r2
- strb r3, [r0]
- adds r4, 0x3
- adds r2, r1, r4
- movs r0, 0xA
- strb r0, [r2]
- ldr r0, _0807B82C @ =0x000006c1
- adds r2, r1, r0
- movs r0, 0x3
- strb r0, [r2]
- ldr r2, _0807B830 @ =0x000006c2
- adds r1, r2
- movs r0, 0x14
- strb r0, [r1]
- movs r0, 0x4E
- bl SetRainStrengthFromSoundEffect
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B818: .4byte gUnknown_83C2BBC
-_0807B81C: .4byte 0x000006cc
-_0807B820: .4byte 0x000006d2
-_0807B824: .4byte 0x000006db
-_0807B828: .4byte 0x000006dc
-_0807B82C: .4byte 0x000006c1
-_0807B830: .4byte 0x000006c2
- thumb_func_end LightRain_InitVars
-
- thumb_func_start LightRain_InitAll
-LightRain_InitAll: @ 807B834
- push {r4,lr}
- bl LightRain_InitVars
- ldr r0, _0807B85C @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B860 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807B854
- adds r4, r1, r2
-_0807B84A:
- bl LightRain_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807B84A
-_0807B854:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B85C: .4byte gUnknown_83C2BBC
-_0807B860: .4byte 0x000006d2
- thumb_func_end LightRain_InitAll
-
- thumb_func_start LightRain_Main
-LightRain_Main: @ 807B864
- push {r4,r5,lr}
- ldr r0, _0807B880 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807B884 @ =0x000006cc
- adds r4, r5, r0
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807B894
- cmp r0, 0x1
- bgt _0807B888
- cmp r0, 0
- beq _0807B88E
- b _0807B8B8
- .align 2, 0
-_0807B880: .4byte gUnknown_83C2BBC
-_0807B884: .4byte 0x000006cc
-_0807B888:
- cmp r0, 0x2
- beq _0807B8A0
- b _0807B8B8
-_0807B88E:
- bl LoadRainSpriteSheet
- b _0807B8B2
-_0807B894:
- bl CreateRainSprite
- lsls r0, 24
- cmp r0, 0
- bne _0807B8B8
- b _0807B8B2
-_0807B8A0:
- bl sub_807BD4C
- lsls r0, 24
- cmp r0, 0
- bne _0807B8B8
- ldr r0, _0807B8C0 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
-_0807B8B2:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807B8B8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B8C0: .4byte 0x000006d2
- thumb_func_end LightRain_Main
-
- thumb_func_start LightRain_Finish
-LightRain_Finish: @ 807B8C4
- push {r4,r5,lr}
- ldr r0, _0807B8E0 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r1, _0807B8E4 @ =0x000006ce
- adds r3, r2, r1
- ldrh r1, [r3]
- adds r4, r0, 0
- cmp r1, 0
- beq _0807B8E8
- cmp r1, 0x1
- beq _0807B91C
- movs r0, 0
- b _0807B94A
- .align 2, 0
-_0807B8E0: .4byte gUnknown_83C2BBC
-_0807B8E4: .4byte 0x000006ce
-_0807B8E8:
- ldr r5, _0807B908 @ =0x000006d1
- adds r0, r2, r5
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _0807B8FA
- cmp r0, 0x5
- beq _0807B8FA
- cmp r0, 0xD
- bne _0807B910
-_0807B8FA:
- ldr r0, [r4]
- ldr r1, _0807B90C @ =0x000006ce
- adds r0, r1
- movs r1, 0xFF
- strh r1, [r0]
- movs r0, 0
- b _0807B94A
- .align 2, 0
-_0807B908: .4byte 0x000006d1
-_0807B90C: .4byte 0x000006ce
-_0807B910:
- ldr r4, _0807B93C @ =0x000006d9
- adds r0, r2, r4
- strb r1, [r0]
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
-_0807B91C:
- bl sub_807BD4C
- lsls r0, 24
- cmp r0, 0
- bne _0807B948
- bl DestroyRainSprites
- ldr r0, _0807B940 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r5, _0807B944 @ =0x000006ce
- adds r1, r5
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- movs r0, 0
- b _0807B94A
- .align 2, 0
-_0807B93C: .4byte 0x000006d9
-_0807B940: .4byte gUnknown_83C2BBC
-_0807B944: .4byte 0x000006ce
-_0807B948:
- movs r0, 0x1
-_0807B94A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end LightRain_Finish
-
- thumb_func_start sub_807B950
-sub_807B950: @ 807B950
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- movs r1, 0x30
- ldrsh r0, [r7, r1]
- cmp r0, 0
- bne _0807B964
- ldr r0, _0807BA08 @ =0x00000169
- strh r0, [r7, 0x30]
-_0807B964:
- movs r2, 0x30
- ldrsh r1, [r7, r2]
- ldr r0, _0807BA0C @ =0x41c64e6d
- muls r0, r1
- ldr r3, _0807BA10 @ =0x00003039
- adds r0, r3
- lsls r0, 1
- lsrs r0, 17
- movs r1, 0x96
- lsls r1, 2
- bl __umodsi3
- movs r1, 0
- mov r8, r1
- strh r0, [r7, 0x30]
- ldr r1, _0807BA14 @ =gUnknown_83C66C4
- ldr r0, _0807BA18 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r2, _0807BA1C @ =0x000006dc
- adds r5, r2
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldrh r6, [r0]
- movs r3, 0x30
- ldrsh r0, [r7, r3]
- movs r1, 0x1E
- bl __modsi3
- adds r4, r0, 0
- lsls r4, 16
- asrs r4, 16
- lsls r0, r4, 3
- strh r0, [r7, 0x32]
- movs r1, 0x30
- ldrsh r0, [r7, r1]
- movs r1, 0x1E
- bl __divsi3
- lsls r0, 16
- lsls r4, 7
- strh r4, [r7, 0x32]
- asrs r0, 9
- strh r0, [r7, 0x34]
- ldr r2, _0807BA20 @ =gUnknown_83C66BC
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r2
- movs r3, 0
- ldrsh r1, [r1, r3]
- muls r1, r6
- subs r4, r1
- strh r4, [r7, 0x32]
- ldrb r1, [r5]
- lsls r1, 2
- adds r2, 0x2
- adds r1, r2
- movs r2, 0
- ldrsh r1, [r1, r2]
- muls r1, r6
- subs r0, r1
- strh r0, [r7, 0x34]
- adds r0, r7, 0
- movs r1, 0
- bl StartSpriteAnim
- mov r3, r8
- strh r3, [r7, 0x36]
- adds r2, r7, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- strh r6, [r7, 0x2E]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BA08: .4byte 0x00000169
-_0807BA0C: .4byte 0x41c64e6d
-_0807BA10: .4byte 0x00003039
-_0807BA14: .4byte gUnknown_83C66C4
-_0807BA18: .4byte gUnknown_83C2BBC
-_0807BA1C: .4byte 0x000006dc
-_0807BA20: .4byte gUnknown_83C66BC
- thumb_func_end sub_807B950
-
- thumb_func_start sub_807BA24
-sub_807BA24: @ 807BA24
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r1, 0x36
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0807BB00
- ldr r3, _0807BA98 @ =gUnknown_83C66BC
- ldr r4, _0807BA9C @ =gUnknown_83C2BBC
- ldr r2, [r4]
- ldr r0, _0807BAA0 @ =0x000006dc
- adds r2, r0
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r3
- ldrh r1, [r0]
- ldrh r0, [r5, 0x32]
- adds r1, r0
- strh r1, [r5, 0x32]
- ldrb r0, [r2]
- lsls r0, 2
- adds r3, 0x2
- adds r0, r3
- ldrh r0, [r0]
- ldrh r2, [r5, 0x34]
- adds r0, r2
- strh r0, [r5, 0x34]
- lsls r1, 16
- asrs r1, 20
- strh r1, [r5, 0x20]
- lsls r0, 16
- asrs r2, r0, 20
- strh r2, [r5, 0x22]
- movs r3, 0x38
- ldrsh r0, [r5, r3]
- adds r3, r4, 0
- cmp r0, 0
- beq _0807BAA4
- adds r0, r1, 0
- adds r0, 0x8
- lsls r0, 16
- movs r1, 0x80
- lsls r1, 17
- cmp r0, r1
- bhi _0807BAA4
- adds r1, r2, 0
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- blt _0807BAA4
- cmp r1, 0xB0
- bgt _0807BAA4
- adds r0, r5, 0
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- b _0807BAAE
- .align 2, 0
-_0807BA98: .4byte gUnknown_83C66BC
-_0807BA9C: .4byte gUnknown_83C2BBC
-_0807BAA0: .4byte 0x000006dc
-_0807BAA4:
- adds r0, r5, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
-_0807BAAE:
- strb r1, [r0]
- adds r4, r0, 0
- ldrh r0, [r5, 0x2E]
- subs r0, 0x1
- strh r0, [r5, 0x2E]
- lsls r0, 16
- cmp r0, 0
- bne _0807BB20
- ldr r0, [r3]
- ldr r1, _0807BAF4 @ =0x000006dc
- adds r0, r1
- ldrb r1, [r0]
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl StartSpriteAnim
- movs r0, 0x1
- strh r0, [r5, 0x36]
- ldr r1, _0807BAF8 @ =gSpriteCoordOffsetX
- ldrh r0, [r5, 0x20]
- ldrh r1, [r1]
- subs r0, r1
- strh r0, [r5, 0x20]
- ldr r1, _0807BAFC @ =gSpriteCoordOffsetY
- ldrh r0, [r5, 0x22]
- ldrh r1, [r1]
- subs r0, r1
- strh r0, [r5, 0x22]
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- b _0807BB20
- .align 2, 0
-_0807BAF4: .4byte 0x000006dc
-_0807BAF8: .4byte gSpriteCoordOffsetX
-_0807BAFC: .4byte gSpriteCoordOffsetY
-_0807BB00:
- adds r0, r5, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0807BB20
- adds r2, r5, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- adds r0, r5, 0
- bl sub_807B950
-_0807BB20:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_807BA24
-
- thumb_func_start sub_807BB28
-sub_807BB28: @ 807BB28
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x2E]
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0807BB48
- adds r0, r4, 0
- bl sub_807B950
- ldr r0, _0807BB44 @ =sub_807BA24
- str r0, [r4, 0x1C]
- b _0807BB4C
- .align 2, 0
-_0807BB44: .4byte sub_807BA24
-_0807BB48:
- subs r0, r1, 0x1
- strh r0, [r4, 0x2E]
-_0807BB4C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_807BB28
-
- thumb_func_start sub_807BB54
-sub_807BB54: @ 807BB54
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- lsls r5, r1, 16
- lsrs r5, 16
- ldr r2, _0807BBD8 @ =gUnknown_83C66C4
- ldr r0, _0807BBDC @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807BBE0 @ =0x000006dc
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 2
- adds r1, r0, r2
- ldrh r1, [r1]
- mov r8, r1
- adds r2, 0x2
- adds r0, r2
- ldrh r4, [r0]
- add r4, r8
- adds r0, r5, 0
- adds r1, r4, 0
- bl __divsi3
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r5, 0
- adds r1, r4, 0
- bl __modsi3
- lsls r0, 16
- lsrs r4, r0, 16
- subs r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, _0807BBE4 @ =0x0000ffff
- cmp r6, r0
- beq _0807BBB2
- adds r5, r0, 0
-_0807BBA2:
- adds r0, r7, 0
- bl sub_807B950
- subs r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, r5
- bne _0807BBA2
-_0807BBB2:
- cmp r4, r8
- bcs _0807BBE8
- subs r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, _0807BBE4 @ =0x0000ffff
- cmp r4, r0
- beq _0807BBD4
- adds r5, r0, 0
-_0807BBC4:
- adds r0, r7, 0
- bl sub_807BA24
- subs r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, r5
- bne _0807BBC4
-_0807BBD4:
- movs r0, 0
- b _0807BBFC
- .align 2, 0
-_0807BBD8: .4byte gUnknown_83C66C4
-_0807BBDC: .4byte gUnknown_83C2BBC
-_0807BBE0: .4byte 0x000006dc
-_0807BBE4: .4byte 0x0000ffff
-_0807BBE8:
- mov r1, r8
- subs r0, r4, r1
- strh r0, [r7, 0x2E]
- adds r2, r7, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x1
-_0807BBFC:
- strh r0, [r7, 0x3A]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_807BB54
-
- thumb_func_start LoadRainSpriteSheet
-LoadRainSpriteSheet: @ 807BC08
- push {lr}
- ldr r0, _0807BC14 @ =gUnknown_83C66CC
- bl LoadSpriteSheet
- pop {r0}
- bx r0
- .align 2, 0
-_0807BC14: .4byte gUnknown_83C66CC
- thumb_func_end LoadRainSpriteSheet
-
- thumb_func_start CreateRainSprite
-CreateRainSprite: @ 807BC18
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _0807BCC4 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r0, _0807BCC8 @ =0x000006da
- adds r2, r4, r0
- ldrb r0, [r2]
- cmp r0, 0x18
- bne _0807BC32
- b _0807BD38
-_0807BC32:
- ldrb r7, [r2]
- ldr r0, _0807BCCC @ =gUnknown_83C66A4
- ldr r2, _0807BCD0 @ =gUnknown_83C6608
- lsls r6, r7, 2
- adds r2, r6, r2
- movs r3, 0
- ldrsh r1, [r2, r3]
- movs r3, 0x2
- ldrsh r2, [r2, r3]
- movs r3, 0x4E
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x40
- beq _0807BCE0
- ldr r3, _0807BCD4 @ =gSprites
- lsls r4, r5, 4
- adds r1, r4, r5
- lsls r1, 2
- adds r1, r3
- movs r0, 0
- strh r0, [r1, 0x38]
- lsls r2, r7, 3
- adds r0, r2, r7
- lsls r0, 4
- adds r0, r7
- strh r0, [r1, 0x30]
- lsls r0, 16
- asrs r0, 16
- ldr r1, _0807BCD8 @ =0x00000257
- mov r10, r6
- mov r9, r3
- mov r12, r4
- mov r8, r2
- cmp r0, r1
- ble _0807BC96
- adds r2, r1, 0
-_0807BC7E:
- adds r0, r4, r5
- lsls r0, 2
- ldr r6, _0807BCD4 @ =gSprites
- adds r0, r6
- ldr r3, _0807BCDC @ =0xfffffda8
- ldrh r6, [r0, 0x30]
- adds r1, r3, r6
- strh r1, [r0, 0x30]
- lsls r1, 16
- asrs r1, 16
- cmp r1, r2
- bgt _0807BC7E
-_0807BC96:
- mov r0, r12
- adds r4, r0, r5
- lsls r4, 2
- add r4, r9
- adds r0, r4, 0
- bl sub_807B950
- mov r3, r8
- adds r1, r3, r7
- adds r0, r4, 0
- bl sub_807BB54
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0807BCC4 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- add r0, r10
- str r4, [r0]
- b _0807BCE6
- .align 2, 0
-_0807BCC4: .4byte gUnknown_83C2BBC
-_0807BCC8: .4byte 0x000006da
-_0807BCCC: .4byte gUnknown_83C66A4
-_0807BCD0: .4byte gUnknown_83C6608
-_0807BCD4: .4byte gSprites
-_0807BCD8: .4byte 0x00000257
-_0807BCDC: .4byte 0xfffffda8
-_0807BCE0:
- adds r1, r4, r6
- movs r0, 0
- str r0, [r1]
-_0807BCE6:
- ldr r0, _0807BD1C @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r6, _0807BD20 @ =0x000006da
- adds r1, r2, r6
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x18
- bne _0807BD3C
- movs r3, 0
- adds r1, r2, 0
- ldr r5, _0807BD24 @ =sub_807BA24
- ldr r4, _0807BD28 @ =sub_807BB28
-_0807BD04:
- lsls r0, r3, 2
- adds r0, r1, r0
- ldr r2, [r0]
- cmp r2, 0
- beq _0807BD2E
- movs r6, 0x3A
- ldrsh r0, [r2, r6]
- cmp r0, 0
- bne _0807BD2C
- str r5, [r2, 0x1C]
- b _0807BD2E
- .align 2, 0
-_0807BD1C: .4byte gUnknown_83C2BBC
-_0807BD20: .4byte 0x000006da
-_0807BD24: .4byte sub_807BA24
-_0807BD28: .4byte sub_807BB28
-_0807BD2C:
- str r4, [r2, 0x1C]
-_0807BD2E:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x17
- bls _0807BD04
-_0807BD38:
- movs r0, 0
- b _0807BD3E
-_0807BD3C:
- movs r0, 0x1
-_0807BD3E:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end CreateRainSprite
-
- thumb_func_start sub_807BD4C
-sub_807BD4C: @ 807BD4C
- push {r4-r7,lr}
- ldr r0, _0807BD68 @ =gUnknown_83C2BBC
- ldr r3, [r0]
- movs r0, 0xDB
- lsls r0, 3
- adds r4, r3, r0
- ldr r1, _0807BD6C @ =0x000006d9
- adds r5, r3, r1
- ldrb r0, [r4]
- ldrb r7, [r5]
- cmp r0, r7
- bne _0807BD70
- movs r0, 0
- b _0807BDD2
- .align 2, 0
-_0807BD68: .4byte gUnknown_83C2BBC
-_0807BD6C: .4byte 0x000006d9
-_0807BD70:
- ldr r0, _0807BDA8 @ =0x000006d6
- adds r2, r3, r0
- ldrh r0, [r2]
- adds r0, 0x1
- movs r6, 0
- strh r0, [r2]
- ldr r7, _0807BDAC @ =0x000006db
- adds r1, r3, r7
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1]
- cmp r0, r1
- bls _0807BDD0
- strh r6, [r2]
- ldrb r0, [r4]
- adds r1, r0, 0
- ldrb r5, [r5]
- cmp r1, r5
- bcs _0807BDB0
- adds r0, 0x1
- strb r0, [r4]
- lsls r0, r1, 2
- adds r0, r3, r0
- ldr r1, [r0]
- movs r0, 0x1
- strh r0, [r1, 0x38]
- b _0807BDD0
- .align 2, 0
-_0807BDA8: .4byte 0x000006d6
-_0807BDAC: .4byte 0x000006db
-_0807BDB0:
- subs r0, 0x1
- strb r0, [r4]
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r3, r0
- ldr r0, [r0]
- strh r6, [r0, 0x38]
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r3, r0
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
-_0807BDD0:
- movs r0, 0x1
-_0807BDD2:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_807BD4C
-
- thumb_func_start DestroyRainSprites
-DestroyRainSprites: @ 807BDD8
- push {r4-r7,lr}
- movs r4, 0
- ldr r0, _0807BE20 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r3, _0807BE24 @ =0x000006da
- adds r1, r2, r3
- adds r7, r0, 0
- ldrb r1, [r1]
- cmp r4, r1
- bcs _0807BE0A
- adds r5, r2, 0
- adds r6, r5, r3
-_0807BDF0:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807BDFE
- bl DestroySprite
-_0807BDFE:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldrb r0, [r6]
- cmp r4, r0
- bcc _0807BDF0
-_0807BE0A:
- ldr r0, [r7]
- ldr r1, _0807BE24 @ =0x000006da
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, _0807BE28 @ =0x00001206
- bl FreeSpriteTilesByTag
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BE20: .4byte gUnknown_83C2BBC
-_0807BE24: .4byte 0x000006da
-_0807BE28: .4byte 0x00001206
- thumb_func_end DestroyRainSprites
-
- thumb_func_start Snow_InitVars
-Snow_InitVars: @ 807BE2C
- push {r4,lr}
- ldr r0, _0807BE68 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807BE6C @ =0x000006cc
- adds r0, r1, r2
- movs r2, 0
- movs r3, 0
- strh r3, [r0]
- ldr r4, _0807BE70 @ =0x000006d2
- adds r0, r1, r4
- strb r2, [r0]
- ldr r0, _0807BE74 @ =0x000006c1
- adds r2, r1, r0
- movs r0, 0x3
- strb r0, [r2]
- subs r4, 0x10
- adds r2, r1, r4
- movs r0, 0x14
- strb r0, [r2]
- ldr r0, _0807BE78 @ =0x000006e5
- adds r2, r1, r0
- movs r0, 0x10
- strb r0, [r2]
- movs r2, 0xDC
- lsls r2, 3
- adds r1, r2
- strh r3, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BE68: .4byte gUnknown_83C2BBC
-_0807BE6C: .4byte 0x000006cc
-_0807BE70: .4byte 0x000006d2
-_0807BE74: .4byte 0x000006c1
-_0807BE78: .4byte 0x000006e5
- thumb_func_end Snow_InitVars
-
- thumb_func_start Snow_InitAll
-Snow_InitAll: @ 807BE7C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- bl Snow_InitVars
- ldr r2, _0807BEDC @ =gUnknown_83C2BBC
- ldr r1, [r2]
- ldr r3, _0807BEE0 @ =0x000006d2
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807BED2
- mov r8, r2
- adds r7, r1, r3
-_0807BE98:
- bl snowflakes_progress2
- movs r4, 0
- mov r1, r8
- ldr r0, [r1]
- ldr r3, _0807BEE4 @ =0x000006e4
- adds r0, r3
- ldrb r0, [r0]
- cmp r4, r0
- bcs _0807BECC
- ldr r0, _0807BEDC @ =gUnknown_83C2BBC
- ldr r5, [r0]
- adds r6, r5, r3
-_0807BEB2:
- lsls r1, r4, 2
- adds r0, r5, 0
- adds r0, 0x60
- adds r0, r1
- ldr r0, [r0]
- bl sub_807C1AC
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldrb r0, [r6]
- cmp r4, r0
- bcc _0807BEB2
-_0807BECC:
- ldrb r0, [r7]
- cmp r0, 0
- beq _0807BE98
-_0807BED2:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BEDC: .4byte gUnknown_83C2BBC
-_0807BEE0: .4byte 0x000006d2
-_0807BEE4: .4byte 0x000006e4
- thumb_func_end Snow_InitAll
-
- thumb_func_start snowflakes_progress2
-snowflakes_progress2: @ 807BEE8
- push {r4,r5,lr}
- ldr r0, _0807BF18 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807BF1C @ =0x000006cc
- adds r4, r5, r0
- ldrh r0, [r4]
- cmp r0, 0
- bne _0807BF10
- bl snowflakes_progress
- lsls r0, 24
- cmp r0, 0
- bne _0807BF10
- ldr r0, _0807BF20 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807BF10:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BF18: .4byte gUnknown_83C2BBC
-_0807BF1C: .4byte 0x000006cc
-_0807BF20: .4byte 0x000006d2
- thumb_func_end snowflakes_progress2
-
- thumb_func_start Snow_Finish
-Snow_Finish: @ 807BF24
- push {r4,lr}
- ldr r0, _0807BF3C @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r0, _0807BF40 @ =0x000006ce
- adds r3, r2, r0
- ldrh r1, [r3]
- cmp r1, 0
- beq _0807BF44
- cmp r1, 0x1
- beq _0807BF56
- movs r0, 0
- b _0807BF82
- .align 2, 0
-_0807BF3C: .4byte gUnknown_83C2BBC
-_0807BF40: .4byte 0x000006ce
-_0807BF44:
- ldr r4, _0807BF74 @ =0x000006e5
- adds r0, r2, r4
- strb r1, [r0]
- subs r4, 0x5
- adds r0, r2, r4
- strh r1, [r0]
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
-_0807BF56:
- bl snowflakes_progress
- lsls r0, 24
- cmp r0, 0
- bne _0807BF80
- ldr r0, _0807BF78 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807BF7C @ =0x000006ce
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- movs r0, 0
- b _0807BF82
- .align 2, 0
-_0807BF74: .4byte 0x000006e5
-_0807BF78: .4byte gUnknown_83C2BBC
-_0807BF7C: .4byte 0x000006ce
-_0807BF80:
- movs r0, 0x1
-_0807BF82:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end Snow_Finish
-
- thumb_func_start snowflakes_progress
-snowflakes_progress: @ 807BF88
- push {r4,lr}
- ldr r0, _0807BFA4 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807BFA8 @ =0x000006e4
- adds r3, r1, r0
- ldr r4, _0807BFAC @ =0x000006e5
- adds r2, r1, r4
- ldrb r0, [r3]
- ldrb r4, [r2]
- cmp r0, r4
- bne _0807BFB0
- movs r0, 0
- b _0807BFF2
- .align 2, 0
-_0807BFA4: .4byte gUnknown_83C2BBC
-_0807BFA8: .4byte 0x000006e4
-_0807BFAC: .4byte 0x000006e5
-_0807BFB0:
- movs r0, 0xDC
- lsls r0, 3
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x24
- bls _0807BFDA
- movs r0, 0
- strh r0, [r1]
- ldrb r0, [r3]
- ldrb r2, [r2]
- cmp r0, r2
- bcs _0807BFD6
- bl snowflake_add
- b _0807BFDA
-_0807BFD6:
- bl snowflake_remove
-_0807BFDA:
- ldr r0, _0807BFF8 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r2, _0807BFFC @ =0x000006e4
- adds r1, r0, r2
- ldr r4, _0807C000 @ =0x000006e5
- adds r0, r4
- ldrb r1, [r1]
- ldrb r0, [r0]
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
-_0807BFF2:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0807BFF8: .4byte gUnknown_83C2BBC
-_0807BFFC: .4byte 0x000006e4
-_0807C000: .4byte 0x000006e5
- thumb_func_end snowflakes_progress
-
- thumb_func_start snowflake_add
-snowflake_add: @ 807C004
- push {r4-r6,lr}
- ldr r0, _0807C058 @ =gUnknown_83C6704
- movs r1, 0
- movs r2, 0
- movs r3, 0x4E
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _0807C068
- ldr r0, _0807C05C @ =gSprites
- lsls r4, r1, 4
- adds r4, r1
- lsls r4, 2
- adds r4, r0
- ldr r0, _0807C060 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807C064 @ =0x000006e4
- adds r6, r5, r0
- ldrb r0, [r6]
- strh r0, [r4, 0x36]
- adds r0, r4, 0
- bl sub_807C0A4
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r6]
- adds r1, r0, 0x1
- strb r1, [r6]
- lsls r0, 24
- lsrs r0, 22
- adds r5, 0x60
- adds r5, r0
- str r4, [r5]
- movs r0, 0x1
- b _0807C06A
- .align 2, 0
-_0807C058: .4byte gUnknown_83C6704
-_0807C05C: .4byte gSprites
-_0807C060: .4byte gUnknown_83C2BBC
-_0807C064: .4byte 0x000006e4
-_0807C068:
- movs r0, 0
-_0807C06A:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end snowflake_add
-
- thumb_func_start snowflake_remove
-snowflake_remove: @ 807C070
- push {lr}
- ldr r0, _0807C084 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807C088 @ =0x000006e4
- adds r2, r1, r0
- ldrb r0, [r2]
- cmp r0, 0
- bne _0807C08C
- movs r0, 0
- b _0807C0A0
- .align 2, 0
-_0807C084: .4byte gUnknown_83C2BBC
-_0807C088: .4byte 0x000006e4
-_0807C08C:
- subs r0, 0x1
- strb r0, [r2]
- lsls r0, 24
- lsrs r0, 22
- adds r1, 0x60
- adds r1, r0
- ldr r0, [r1]
- bl DestroySprite
- movs r0, 0x1
-_0807C0A0:
- pop {r1}
- bx r1
- thumb_func_end snowflake_remove
-
- thumb_func_start sub_807C0A4
-sub_807C0A4: @ 807C0A4
- push {r4-r7,lr}
- adds r5, r0, 0
- bl Random
- movs r1, 0x36
- ldrsh r2, [r5, r1]
- lsls r1, r2, 2
- adds r1, r2
- movs r2, 0x7
- ands r1, r2
- lsls r4, r1, 4
- subs r4, r1
- lsls r4, 1
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1E
- bl __umodsi3
- adds r4, r0
- lsls r4, 16
- lsrs r4, 16
- ldr r1, _0807C148 @ =gSpriteCoordOffsetY
- adds r0, r5, 0
- adds r0, 0x29
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- ldrh r1, [r1]
- adds r0, r1
- movs r2, 0x3
- negs r2, r2
- adds r1, r2, 0
- subs r1, r0
- movs r7, 0
- strh r1, [r5, 0x22]
- ldr r1, _0807C14C @ =gSpriteCoordOffsetX
- adds r0, r5, 0
- adds r0, 0x28
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- ldrh r1, [r1]
- adds r0, r1
- subs r4, r0
- strh r4, [r5, 0x20]
- movs r1, 0x22
- ldrsh r0, [r5, r1]
- lsls r0, 7
- strh r0, [r5, 0x2E]
- strh r7, [r5, 0x24]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r6, r0, 0
- movs r4, 0x3
- ands r4, r6
- lsls r0, r4, 2
- adds r0, r4
- adds r0, 0x40
- strh r0, [r5, 0x30]
- strh r0, [r5, 0x3C]
- movs r1, 0x1
- bics r1, r6
- adds r0, r5, 0
- bl StartSpriteAnim
- strh r7, [r5, 0x34]
- movs r0, 0x1
- cmp r4, 0
- bne _0807C134
- movs r0, 0x2
-_0807C134:
- strh r0, [r5, 0x32]
- movs r0, 0x1F
- ands r0, r6
- adds r0, 0xD2
- strh r0, [r5, 0x3A]
- strh r7, [r5, 0x38]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C148: .4byte gSpriteCoordOffsetY
-_0807C14C: .4byte gSpriteCoordOffsetX
- thumb_func_end sub_807C0A4
-
- thumb_func_start sub_807C150
-sub_807C150: @ 807C150
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, _0807C19C @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807C1A0 @ =0x000006e2
- adds r4, r0, r1
- ldrh r0, [r4]
- cmp r0, 0x12
- bls _0807C196
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, _0807C1A4 @ =sub_807C1AC
- str r0, [r3, 0x1C]
- ldr r1, _0807C1A8 @ =gSpriteCoordOffsetY
- adds r0, r3, 0
- adds r0, 0x29
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- ldrh r1, [r1]
- adds r0, r1
- movs r1, 0xFA
- subs r1, r0
- movs r2, 0
- strh r1, [r3, 0x22]
- movs r1, 0x22
- ldrsh r0, [r3, r1]
- lsls r0, 7
- strh r0, [r3, 0x2E]
- strh r2, [r4]
-_0807C196:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C19C: .4byte gUnknown_83C2BBC
-_0807C1A0: .4byte 0x000006e2
-_0807C1A4: .4byte sub_807C1AC
-_0807C1A8: .4byte gSpriteCoordOffsetY
- thumb_func_end sub_807C150
-
- thumb_func_start sub_807C1AC
-sub_807C1AC: @ 807C1AC
- push {r4,r5,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x30]
- ldrh r1, [r4, 0x2E]
- adds r0, r1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 23
- strh r0, [r4, 0x22]
- ldrh r0, [r4, 0x32]
- ldrh r2, [r4, 0x34]
- adds r0, r2
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x34]
- ldr r1, _0807C224 @ =gSineTable
- movs r3, 0x34
- ldrsh r0, [r4, r3]
- lsls r0, 1
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bge _0807C1DE
- adds r0, 0x3F
-_0807C1DE:
- asrs r0, 6
- strh r0, [r4, 0x24]
- adds r0, r4, 0
- adds r0, 0x28
- movs r5, 0
- ldrsb r5, [r0, r5]
- ldrh r0, [r4, 0x20]
- adds r0, r5
- ldr r1, _0807C228 @ =gSpriteCoordOffsetX
- ldrh r1, [r1]
- adds r3, r1, r0
- ldr r2, _0807C22C @ =0x000001ff
- adds r0, r2, 0
- ands r3, r0
- adds r2, r3, 0
- movs r0, 0x80
- lsls r0, 1
- ands r0, r2
- cmp r0, 0
- beq _0807C210
- ldr r3, _0807C230 @ =0xffffff00
- adds r0, r3, 0
- orrs r2, r0
- lsls r0, r2, 16
- lsrs r3, r0, 16
-_0807C210:
- lsls r0, r3, 16
- asrs r0, 16
- movs r2, 0x3
- negs r2, r2
- cmp r0, r2
- bge _0807C234
- adds r1, r5
- movs r0, 0xF2
- subs r0, r1
- b _0807C23C
- .align 2, 0
-_0807C224: .4byte gSineTable
-_0807C228: .4byte gSpriteCoordOffsetX
-_0807C22C: .4byte 0x000001ff
-_0807C230: .4byte 0xffffff00
-_0807C234:
- cmp r0, 0xF2
- ble _0807C23E
- adds r0, r1, r5
- subs r0, r2, r0
-_0807C23C:
- strh r0, [r4, 0x20]
-_0807C23E:
- adds r0, r4, 0
- adds r0, 0x29
- movs r3, 0
- ldrsb r3, [r0, r3]
- ldrh r0, [r4, 0x22]
- adds r0, r3
- ldr r1, _0807C27C @ =gSpriteCoordOffsetY
- ldrh r1, [r1]
- adds r2, r1, r0
- movs r0, 0xFF
- ands r2, r0
- adds r0, r2, 0
- subs r0, 0xA4
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x6
- bhi _0807C280
- adds r1, r3
- movs r0, 0xFA
- subs r0, r1
- movs r1, 0
- strh r0, [r4, 0x22]
- movs r2, 0x22
- ldrsh r0, [r4, r2]
- lsls r0, 7
- strh r0, [r4, 0x2E]
- strh r1, [r4, 0x38]
- movs r0, 0xDC
- strh r0, [r4, 0x3A]
- b _0807C2AC
- .align 2, 0
-_0807C27C: .4byte gSpriteCoordOffsetY
-_0807C280:
- adds r0, r2, 0
- subs r0, 0xF3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x6
- bhi _0807C2AC
- movs r1, 0
- movs r0, 0xA3
- strh r0, [r4, 0x22]
- lsls r0, 7
- strh r0, [r4, 0x2E]
- strh r1, [r4, 0x38]
- movs r0, 0xDC
- strh r0, [r4, 0x3A]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0807C2E0 @ =sub_807C150
- str r0, [r4, 0x1C]
-_0807C2AC:
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- movs r3, 0x3A
- ldrsh r1, [r4, r3]
- cmp r0, r1
- bne _0807C2D8
- adds r0, r4, 0
- bl sub_807C0A4
- movs r0, 0xFA
- strh r0, [r4, 0x22]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0807C2E0 @ =sub_807C150
- str r0, [r4, 0x1C]
-_0807C2D8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C2E0: .4byte sub_807C150
- thumb_func_end sub_807C1AC
-
- thumb_func_start sub_807C2E4
-sub_807C2E4: @ 807C2E4
- push {r4,r5,lr}
- ldr r0, _0807C33C @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C340 @ =0x000006cc
- adds r0, r1, r2
- movs r3, 0
- movs r2, 0
- strh r2, [r0]
- ldr r5, _0807C344 @ =0x000006d2
- adds r4, r1, r5
- strb r3, [r4]
- adds r5, 0x4
- adds r0, r1, r5
- strh r2, [r0]
- ldr r0, _0807C348 @ =0x000006db
- adds r2, r1, r0
- movs r0, 0x4
- strb r0, [r2]
- ldr r2, _0807C34C @ =0x000006dc
- adds r0, r1, r2
- strb r3, [r0]
- adds r5, 0x3
- adds r2, r1, r5
- movs r0, 0x10
- strb r0, [r2]
- ldr r0, _0807C350 @ =0x000006c1
- adds r2, r1, r0
- movs r0, 0x3
- strb r0, [r2]
- subs r5, 0x17
- adds r2, r1, r5
- movs r0, 0x14
- strb r0, [r2]
- strb r3, [r4]
- ldr r0, _0807C354 @ =0x000006ed
- adds r1, r0
- strb r3, [r1]
- movs r0, 0x4A
- bl SetRainStrengthFromSoundEffect
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C33C: .4byte gUnknown_83C2BBC
-_0807C340: .4byte 0x000006cc
-_0807C344: .4byte 0x000006d2
-_0807C348: .4byte 0x000006db
-_0807C34C: .4byte 0x000006dc
-_0807C350: .4byte 0x000006c1
-_0807C354: .4byte 0x000006ed
- thumb_func_end sub_807C2E4
-
- thumb_func_start sub_807C358
-sub_807C358: @ 807C358
- push {r4,lr}
- bl sub_807C2E4
- ldr r0, _0807C380 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C384 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807C378
- adds r4, r1, r2
-_0807C36E:
- bl Rain_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807C36E
-_0807C378:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C380: .4byte gUnknown_83C2BBC
-_0807C384: .4byte 0x000006d2
- thumb_func_end sub_807C358
-
- thumb_func_start sub_807C388
-sub_807C388: @ 807C388
- push {r4,r5,lr}
- ldr r0, _0807C3DC @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C3E0 @ =0x000006cc
- adds r0, r1, r2
- movs r4, 0
- movs r2, 0
- strh r2, [r0]
- ldr r5, _0807C3E4 @ =0x000006d2
- adds r3, r1, r5
- strb r4, [r3]
- adds r5, 0x4
- adds r0, r1, r5
- strh r2, [r0]
- ldr r0, _0807C3E8 @ =0x000006db
- adds r2, r1, r0
- movs r0, 0x4
- strb r0, [r2]
- adds r5, 0x6
- adds r2, r1, r5
- movs r0, 0x1
- strb r0, [r2]
- ldr r0, _0807C3EC @ =0x000006d9
- adds r2, r1, r0
- movs r0, 0x18
- strb r0, [r2]
- subs r5, 0x1B
- adds r2, r1, r5
- movs r0, 0x3
- strb r0, [r2]
- ldr r0, _0807C3F0 @ =0x000006c2
- adds r1, r0
- movs r0, 0x14
- strb r0, [r1]
- strb r4, [r3]
- movs r0, 0x4C
- bl SetRainStrengthFromSoundEffect
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C3DC: .4byte gUnknown_83C2BBC
-_0807C3E0: .4byte 0x000006cc
-_0807C3E4: .4byte 0x000006d2
-_0807C3E8: .4byte 0x000006db
-_0807C3EC: .4byte 0x000006d9
-_0807C3F0: .4byte 0x000006c2
- thumb_func_end sub_807C388
-
- thumb_func_start sub_807C3F4
-sub_807C3F4: @ 807C3F4
- push {r4,lr}
- bl sub_807C388
- ldr r0, _0807C41C @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C420 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807C414
- adds r4, r1, r2
-_0807C40A:
- bl Rain_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807C40A
-_0807C414:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C41C: .4byte gUnknown_83C2BBC
-_0807C420: .4byte 0x000006d2
- thumb_func_end sub_807C3F4
-
- thumb_func_start Rain_Main
-Rain_Main: @ 807C424
- push {r4,r5,lr}
- bl UpdateThunderSound
- ldr r0, _0807C444 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807C448 @ =0x000006cc
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0xE
- bls _0807C43A
- b _0807C79A
-_0807C43A:
- lsls r0, 2
- ldr r1, _0807C44C @ =_0807C450
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807C444: .4byte gUnknown_83C2BBC
-_0807C448: .4byte 0x000006cc
-_0807C44C: .4byte _0807C450
- .align 2, 0
-_0807C450:
- .4byte _0807C48C
- .4byte _0807C4A8
- .4byte _0807C4CC
- .4byte _0807C4FC
- .4byte _0807C520
- .4byte _0807C550
- .4byte _0807C580
- .4byte _0807C5AC
- .4byte _0807C5CA
- .4byte _0807C628
- .4byte _0807C6AC
- .4byte _0807C6D4
- .4byte _0807C704
- .4byte _0807C748
- .4byte _0807C77C
-_0807C48C:
- bl LoadRainSpriteSheet
- ldr r0, _0807C4A0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C4A4 @ =0x000006cc
- adds r1, r2
- ldrh r0, [r1]
- adds r0, 0x1
- b _0807C798
- .align 2, 0
-_0807C4A0: .4byte gUnknown_83C2BBC
-_0807C4A4: .4byte 0x000006cc
-_0807C4A8:
- bl CreateRainSprite
- lsls r0, 24
- cmp r0, 0
- beq _0807C4B4
- b _0807C79A
-_0807C4B4:
- ldr r0, _0807C4C4 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r3, _0807C4C8 @ =0x000006cc
- adds r1, r3
- ldrh r0, [r1]
- adds r0, 0x1
- b _0807C798
- .align 2, 0
-_0807C4C4: .4byte gUnknown_83C2BBC
-_0807C4C8: .4byte 0x000006cc
-_0807C4CC:
- bl sub_807BD4C
- lsls r0, 24
- cmp r0, 0
- beq _0807C4D8
- b _0807C79A
-_0807C4D8:
- ldr r0, _0807C4F0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807C4F4 @ =0x000006d2
- adds r2, r1, r0
- movs r0, 0x1
- strb r0, [r2]
- ldr r2, _0807C4F8 @ =0x000006cc
- adds r1, r2
- ldrh r0, [r1]
- adds r0, 0x1
- b _0807C798
- .align 2, 0
-_0807C4F0: .4byte gUnknown_83C2BBC
-_0807C4F4: .4byte 0x000006d2
-_0807C4F8: .4byte 0x000006cc
-_0807C4FC:
- ldr r0, _0807C514 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r3, _0807C518 @ =0x000006c6
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807C50C
- b _0807C79A
-_0807C50C:
- ldr r0, _0807C51C @ =0x000006cc
- adds r1, r0
- movs r0, 0x6
- b _0807C798
- .align 2, 0
-_0807C514: .4byte gUnknown_83C2BBC
-_0807C518: .4byte 0x000006c6
-_0807C51C: .4byte 0x000006cc
-_0807C520:
- ldr r0, _0807C570 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r2, _0807C574 @ =0x000006ea
- adds r1, r4, r2
- movs r0, 0x1
- strb r0, [r1]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r5, 0xB4
- lsls r5, 1
- adds r1, r5, 0
- bl __umodsi3
- adds r0, r5
- ldr r3, _0807C578 @ =0x000006e6
- adds r1, r4, r3
- strh r0, [r1]
- ldr r0, _0807C57C @ =0x000006cc
- adds r4, r0
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807C550:
- ldr r0, _0807C570 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r3, _0807C578 @ =0x000006e6
- adds r1, r2, r3
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- beq _0807C566
- b _0807C79A
-_0807C566:
- ldr r0, _0807C57C @ =0x000006cc
- adds r1, r2, r0
- ldrh r0, [r1]
- adds r0, 0x1
- b _0807C798
- .align 2, 0
-_0807C570: .4byte gUnknown_83C2BBC
-_0807C574: .4byte 0x000006ea
-_0807C578: .4byte 0x000006e6
-_0807C57C: .4byte 0x000006cc
-_0807C580:
- ldr r0, _0807C5A0 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r1, _0807C5A4 @ =0x000006ea
- adds r0, r4, r1
- movs r5, 0x1
- strb r5, [r0]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- ands r0, r5
- ldr r2, _0807C5A8 @ =0x000006eb
- adds r1, r4, r2
- strb r0, [r1]
- b _0807C608
- .align 2, 0
-_0807C5A0: .4byte gUnknown_83C2BBC
-_0807C5A4: .4byte 0x000006ea
-_0807C5A8: .4byte 0x000006eb
-_0807C5AC:
- bl Random
- ldr r1, _0807C614 @ =gUnknown_83C2BBC
- ldr r2, [r1]
- movs r1, 0x1
- ands r1, r0
- adds r1, 0x1
- ldr r3, _0807C618 @ =0x000006ec
- adds r0, r2, r3
- strb r1, [r0]
- ldr r0, _0807C61C @ =0x000006cc
- adds r2, r0
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
-_0807C5CA:
- movs r0, 0x13
- bl sub_807A790
- ldr r0, _0807C614 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C620 @ =0x000006eb
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807C5EE
- ldr r3, _0807C618 @ =0x000006ec
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0807C5EE
- movs r0, 0x14
- bl SetThunderCounter
-_0807C5EE:
- bl Random
- ldr r1, _0807C614 @ =gUnknown_83C2BBC
- ldr r4, [r1]
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- adds r0, 0x6
- ldr r2, _0807C624 @ =0x000006e6
- adds r1, r4, r2
- strh r0, [r1]
-_0807C608:
- ldr r3, _0807C61C @ =0x000006cc
- adds r4, r3
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807C79A
- .align 2, 0
-_0807C614: .4byte gUnknown_83C2BBC
-_0807C618: .4byte 0x000006ec
-_0807C61C: .4byte 0x000006cc
-_0807C620: .4byte 0x000006eb
-_0807C624: .4byte 0x000006e6
-_0807C628:
- ldr r0, _0807C674 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r0, _0807C678 @ =0x000006e6
- adds r5, r4, r0
- ldrh r0, [r5]
- subs r0, 0x1
- strh r0, [r5]
- lsls r0, 16
- cmp r0, 0
- beq _0807C63E
- b _0807C79A
-_0807C63E:
- movs r0, 0x3
- bl sub_807A790
- ldr r2, _0807C67C @ =0x000006ea
- adds r1, r4, r2
- movs r0, 0x1
- strb r0, [r1]
- ldr r3, _0807C680 @ =0x000006ec
- adds r1, r4, r3
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- beq _0807C688
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- ands r0, r1
- adds r0, 0x3C
- strh r0, [r5]
- ldr r0, _0807C684 @ =0x000006cc
- adds r1, r4, r0
- movs r0, 0xA
- b _0807C798
- .align 2, 0
-_0807C674: .4byte gUnknown_83C2BBC
-_0807C678: .4byte 0x000006e6
-_0807C67C: .4byte 0x000006ea
-_0807C680: .4byte 0x000006ec
-_0807C684: .4byte 0x000006cc
-_0807C688:
- ldr r1, _0807C698 @ =0x000006eb
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807C6A0
- ldr r2, _0807C69C @ =0x000006cc
- adds r1, r4, r2
- b _0807C796
- .align 2, 0
-_0807C698: .4byte 0x000006eb
-_0807C69C: .4byte 0x000006cc
-_0807C6A0:
- ldr r3, _0807C6A8 @ =0x000006cc
- adds r1, r4, r3
- movs r0, 0xB
- b _0807C798
- .align 2, 0
-_0807C6A8: .4byte 0x000006cc
-_0807C6AC:
- ldr r0, _0807C6C8 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r0, _0807C6CC @ =0x000006e6
- adds r1, r2, r0
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- bne _0807C79A
- ldr r3, _0807C6D0 @ =0x000006cc
- adds r1, r2, r3
- movs r0, 0x8
- b _0807C798
- .align 2, 0
-_0807C6C8: .4byte gUnknown_83C2BBC
-_0807C6CC: .4byte 0x000006e6
-_0807C6D0: .4byte 0x000006cc
-_0807C6D4:
- bl Random
- ldr r1, _0807C6F8 @ =gUnknown_83C2BBC
- ldr r2, [r1]
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- ands r0, r1
- adds r0, 0x3C
- ldr r3, _0807C6FC @ =0x000006e6
- adds r1, r2, r3
- strh r0, [r1]
- ldr r0, _0807C700 @ =0x000006cc
- adds r2, r0
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
- b _0807C79A
- .align 2, 0
-_0807C6F8: .4byte gUnknown_83C2BBC
-_0807C6FC: .4byte 0x000006e6
-_0807C700: .4byte 0x000006cc
-_0807C704:
- ldr r0, _0807C73C @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r1, _0807C740 @ =0x000006e6
- adds r4, r5, r1
- ldrh r0, [r4]
- subs r0, 0x1
- strh r0, [r4]
- lsls r0, 16
- cmp r0, 0
- bne _0807C79A
- movs r0, 0x64
- bl SetThunderCounter
- movs r0, 0x13
- bl sub_807A790
- bl Random
- movs r1, 0xF
- ands r1, r0
- adds r1, 0x1E
- strh r1, [r4]
- ldr r2, _0807C744 @ =0x000006cc
- adds r1, r5, r2
- ldrh r0, [r1]
- adds r0, 0x1
- b _0807C798
- .align 2, 0
-_0807C73C: .4byte gUnknown_83C2BBC
-_0807C740: .4byte 0x000006e6
-_0807C744: .4byte 0x000006cc
-_0807C748:
- ldr r0, _0807C770 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r3, _0807C774 @ =0x000006e6
- adds r1, r4, r3
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- bne _0807C79A
- movs r0, 0x13
- movs r1, 0x3
- movs r2, 0x5
- bl sub_807A7C4
- ldr r0, _0807C778 @ =0x000006cc
- adds r1, r4, r0
- ldrh r0, [r1]
- adds r0, 0x1
- b _0807C798
- .align 2, 0
-_0807C770: .4byte gUnknown_83C2BBC
-_0807C774: .4byte 0x000006e6
-_0807C778: .4byte 0x000006cc
-_0807C77C:
- ldr r0, _0807C7A0 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r1, _0807C7A4 @ =0x000006c6
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x3
- bne _0807C79A
- ldr r3, _0807C7A8 @ =0x000006ea
- adds r1, r2, r3
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, _0807C7AC @ =0x000006cc
- adds r1, r2, r0
-_0807C796:
- movs r0, 0x4
-_0807C798:
- strh r0, [r1]
-_0807C79A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C7A0: .4byte gUnknown_83C2BBC
-_0807C7A4: .4byte 0x000006c6
-_0807C7A8: .4byte 0x000006ea
-_0807C7AC: .4byte 0x000006cc
- thumb_func_end Rain_Main
-
- thumb_func_start Rain_Finish
-Rain_Finish: @ 807C7B0
- push {r4-r6,lr}
- ldr r0, _0807C7CC @ =gUnknown_83C2BBC
- ldr r6, [r0]
- ldr r0, _0807C7D0 @ =0x000006ce
- adds r5, r6, r0
- ldrh r1, [r5]
- cmp r1, 0x1
- beq _0807C7E6
- cmp r1, 0x1
- bgt _0807C7D4
- cmp r1, 0
- beq _0807C7DA
- b _0807C84C
- .align 2, 0
-_0807C7CC: .4byte gUnknown_83C2BBC
-_0807C7D0: .4byte 0x000006ce
-_0807C7D4:
- cmp r1, 0x2
- beq _0807C830
- b _0807C84C
-_0807C7DA:
- ldr r2, _0807C820 @ =0x000006ea
- adds r0, r6, r2
- strb r1, [r0]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_0807C7E6:
- bl Rain_Main
- ldr r0, _0807C824 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r1, _0807C820 @ =0x000006ea
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807C854
- subs r1, 0x19
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _0807C84C
- cmp r0, 0x5
- beq _0807C84C
- cmp r0, 0xD
- beq _0807C84C
- ldr r0, _0807C828 @ =0x000006d9
- adds r1, r2, r0
- movs r0, 0
- strb r0, [r1]
- ldr r0, _0807C82C @ =0x000006ce
- adds r1, r2, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _0807C854
- .align 2, 0
-_0807C820: .4byte 0x000006ea
-_0807C824: .4byte gUnknown_83C2BBC
-_0807C828: .4byte 0x000006d9
-_0807C82C: .4byte 0x000006ce
-_0807C830:
- bl sub_807BD4C
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0807C854
- bl DestroyRainSprites
- ldr r1, _0807C850 @ =0x000006ed
- adds r0, r6, r1
- strb r4, [r0]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_0807C84C:
- movs r0, 0
- b _0807C856
- .align 2, 0
-_0807C850: .4byte 0x000006ed
-_0807C854:
- movs r0, 0x1
-_0807C856:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end Rain_Finish
-
- thumb_func_start SetThunderCounter
-SetThunderCounter: @ 807C85C
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, _0807C890 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r0, _0807C894 @ =0x000006ed
- adds r5, r4, r0
- ldrb r0, [r5]
- cmp r0, 0
- bne _0807C88A
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl __umodsi3
- movs r2, 0xDD
- lsls r2, 3
- adds r1, r4, r2
- strh r0, [r1]
- movs r0, 0x1
- strb r0, [r5]
-_0807C88A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C890: .4byte gUnknown_83C2BBC
-_0807C894: .4byte 0x000006ed
- thumb_func_end SetThunderCounter
-
- thumb_func_start UpdateThunderSound
-UpdateThunderSound: @ 807C898
- push {r4,lr}
- ldr r0, _0807C8D0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C8D4 @ =0x000006ed
- adds r0, r1, r2
- ldrb r4, [r0]
- cmp r4, 0x1
- bne _0807C8F8
- movs r0, 0xDD
- lsls r0, 3
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- bne _0807C8F4
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _0807C8F8
- bl Random
- ands r4, r0
- cmp r4, 0
- beq _0807C8D8
- movs r0, 0x50
- bl PlaySE
- b _0807C8DE
- .align 2, 0
-_0807C8D0: .4byte gUnknown_83C2BBC
-_0807C8D4: .4byte 0x000006ed
-_0807C8D8:
- movs r0, 0x51
- bl PlaySE
-_0807C8DE:
- ldr r0, _0807C8EC @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807C8F0 @ =0x000006ed
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- b _0807C8F8
- .align 2, 0
-_0807C8EC: .4byte gUnknown_83C2BBC
-_0807C8F0: .4byte 0x000006ed
-_0807C8F4:
- subs r0, 0x1
- strh r0, [r1]
-_0807C8F8:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end UpdateThunderSound
-
- thumb_func_start Fog1_InitVars
-Fog1_InitVars: @ 807C900
- push {lr}
- ldr r0, _0807C94C @ =gUnknown_83C2BBC
- ldr r3, [r0]
- ldr r0, _0807C950 @ =0x000006cc
- adds r1, r3, r0
- movs r2, 0
- movs r0, 0
- strh r0, [r1]
- ldr r1, _0807C954 @ =0x000006d2
- adds r0, r3, r1
- strb r2, [r0]
- subs r1, 0x11
- adds r0, r3, r1
- strb r2, [r0]
- ldr r2, _0807C958 @ =0x000006c2
- adds r1, r3, r2
- movs r0, 0x14
- strb r0, [r1]
- ldr r1, _0807C95C @ =0x000006fb
- adds r0, r3, r1
- ldrb r1, [r0]
- cmp r1, 0
- bne _0807C948
- adds r2, 0x2E
- adds r0, r3, r2
- strh r1, [r0]
- adds r2, 0x2
- adds r0, r3, r2
- strh r1, [r0]
- subs r2, 0x4
- adds r0, r3, r2
- strh r1, [r0]
- movs r0, 0
- movs r1, 0x10
- bl Weather_SetBlendCoeffs
-_0807C948:
- pop {r0}
- bx r0
- .align 2, 0
-_0807C94C: .4byte gUnknown_83C2BBC
-_0807C950: .4byte 0x000006cc
-_0807C954: .4byte 0x000006d2
-_0807C958: .4byte 0x000006c2
-_0807C95C: .4byte 0x000006fb
- thumb_func_end Fog1_InitVars
-
- thumb_func_start Fog1_InitAll
-Fog1_InitAll: @ 807C960
- push {r4,lr}
- bl Fog1_InitVars
- ldr r0, _0807C988 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C98C @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807C980
- adds r4, r1, r2
-_0807C976:
- bl Fog1_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807C976
-_0807C980:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C988: .4byte gUnknown_83C2BBC
-_0807C98C: .4byte 0x000006d2
- thumb_func_end Fog1_InitAll
-
- thumb_func_start Fog1_Main
-Fog1_Main: @ 807C990
- push {r4-r6,lr}
- ldr r0, _0807C9DC @ =gUnknown_83C2BBC
- ldr r6, [r0]
- ldr r0, _0807C9E0 @ =gSpriteCoordOffsetX
- ldr r1, _0807C9E4 @ =0x000006f2
- adds r2, r6, r1
- ldrh r0, [r0]
- ldrh r1, [r2]
- subs r0, r1
- movs r1, 0xFF
- ands r0, r1
- ldr r3, _0807C9E8 @ =0x000006ee
- adds r1, r6, r3
- strh r0, [r1]
- movs r0, 0xDE
- lsls r0, 3
- adds r1, r6, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x3
- bls _0807C9CA
- movs r0, 0
- strh r0, [r1]
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
-_0807C9CA:
- ldr r1, _0807C9EC @ =0x000006cc
- adds r5, r6, r1
- ldrh r4, [r5]
- cmp r4, 0
- beq _0807C9F0
- cmp r4, 0x1
- beq _0807CA30
- b _0807CA46
- .align 2, 0
-_0807C9DC: .4byte gUnknown_83C2BBC
-_0807C9E0: .4byte gSpriteCoordOffsetX
-_0807C9E4: .4byte 0x000006f2
-_0807C9E8: .4byte 0x000006ee
-_0807C9EC: .4byte 0x000006cc
-_0807C9F0:
- bl CreateFog1Sprites
- movs r3, 0xDA
- lsls r3, 3
- adds r0, r6, r3
- ldrb r0, [r0]
- cmp r0, 0x6
- bne _0807CA0C
- movs r0, 0xC
- movs r1, 0x8
- movs r2, 0x3
- bl Weather_SetTargetBlendCoeffs
- b _0807CA16
-_0807CA0C:
- movs r0, 0x4
- movs r1, 0x10
- movs r2, 0
- bl Weather_SetTargetBlendCoeffs
-_0807CA16:
- ldr r0, _0807CA28 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807CA2C @ =0x000006cc
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _0807CA46
- .align 2, 0
-_0807CA28: .4byte gUnknown_83C2BBC
-_0807CA2C: .4byte 0x000006cc
-_0807CA30:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807CA46
- ldr r1, _0807CA4C @ =0x000006d2
- adds r0, r6, r1
- strb r4, [r0]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_0807CA46:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CA4C: .4byte 0x000006d2
- thumb_func_end Fog1_Main
-
- thumb_func_start Fog1_Finish
-Fog1_Finish: @ 807CA50
- push {r4,lr}
- ldr r0, _0807CAA0 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r0, _0807CAA4 @ =gSpriteCoordOffsetX
- ldr r1, _0807CAA8 @ =0x000006f2
- adds r3, r2, r1
- ldrh r0, [r0]
- ldrh r1, [r3]
- subs r0, r1
- movs r1, 0xFF
- ands r0, r1
- ldr r4, _0807CAAC @ =0x000006ee
- adds r1, r2, r4
- strh r0, [r1]
- movs r0, 0xDE
- lsls r0, 3
- adds r1, r2, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x3
- bls _0807CA8A
- movs r0, 0
- strh r0, [r1]
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
-_0807CA8A:
- ldr r1, _0807CAB0 @ =0x000006ce
- adds r4, r2, r1
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807CAC6
- cmp r0, 0x1
- bgt _0807CAB4
- cmp r0, 0
- beq _0807CABA
- b _0807CADE
- .align 2, 0
-_0807CAA0: .4byte gUnknown_83C2BBC
-_0807CAA4: .4byte gSpriteCoordOffsetX
-_0807CAA8: .4byte 0x000006f2
-_0807CAAC: .4byte 0x000006ee
-_0807CAB0: .4byte 0x000006ce
-_0807CAB4:
- cmp r0, 0x2
- beq _0807CAD2
- b _0807CADE
-_0807CABA:
- movs r0, 0
- movs r1, 0x10
- movs r2, 0x3
- bl Weather_SetTargetBlendCoeffs
- b _0807CAD6
-_0807CAC6:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807CAE2
- b _0807CAD6
-_0807CAD2:
- bl DestroyFog1Sprites
-_0807CAD6:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807CAE2
-_0807CADE:
- movs r0, 0
- b _0807CAE4
-_0807CAE2:
- movs r0, 0x1
-_0807CAE4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end Fog1_Finish
-
- thumb_func_start Fog1SpriteCallback
-Fog1SpriteCallback: @ 807CAEC
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, _0807CB38 @ =gSpriteCoordOffsetY
- ldrb r0, [r0]
- strh r0, [r3, 0x26]
- ldr r0, _0807CB3C @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807CB40 @ =0x000006ee
- adds r2, r0, r1
- ldrh r1, [r2]
- adds r1, 0x20
- movs r4, 0x2E
- ldrsh r0, [r3, r4]
- lsls r0, 6
- adds r1, r0
- strh r1, [r3, 0x20]
- lsls r1, 16
- ldr r0, _0807CB44 @ =0x010f0000
- cmp r1, r0
- ble _0807CB30
- 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, _0807CB48 @ =0x000001ff
- ands r1, r0
- strh r1, [r3, 0x20]
-_0807CB30:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CB38: .4byte gSpriteCoordOffsetY
-_0807CB3C: .4byte gUnknown_83C2BBC
-_0807CB40: .4byte 0x000006ee
-_0807CB44: .4byte 0x010f0000
-_0807CB48: .4byte 0x000001ff
- thumb_func_end Fog1SpriteCallback
-
- thumb_func_start CreateFog1Sprites
-CreateFog1Sprites: @ 807CB4C
- push {r4,r5,lr}
- sub sp, 0x8
- ldr r0, _0807CBC0 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807CBC4 @ =0x000006fb
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807CBF6
- ldr r0, _0807CBC8 @ =gUnknown_83C67A8
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- mov r0, sp
- bl LoadSpriteSheet
- movs r5, 0
-_0807CB70:
- ldr r0, _0807CBCC @ =gUnknown_83C6790
- movs r1, 0
- movs r2, 0
- movs r3, 0xFF
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0807CBD4
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0807CBD0 @ =gSprites
- adds r4, r0
- adds r0, r5, 0
- movs r1, 0x5
- bl __umodsi3
- strh r0, [r4, 0x2E]
- lsls r0, 16
- lsrs r0, 10
- adds r0, 0x20
- strh r0, [r4, 0x20]
- adds r0, r5, 0
- movs r1, 0x5
- bl __udivsi3
- lsls r0, 16
- lsrs r0, 10
- adds r0, 0x20
- strh r0, [r4, 0x22]
- ldr r2, _0807CBC0 @ =gUnknown_83C2BBC
- ldr r0, [r2]
- lsls r1, r5, 2
- adds r0, 0xA0
- adds r0, r1
- str r4, [r0]
- b _0807CBE2
- .align 2, 0
-_0807CBC0: .4byte gUnknown_83C2BBC
-_0807CBC4: .4byte 0x000006fb
-_0807CBC8: .4byte gUnknown_83C67A8
-_0807CBCC: .4byte gUnknown_83C6790
-_0807CBD0: .4byte gSprites
-_0807CBD4:
- ldr r2, _0807CC00 @ =gUnknown_83C2BBC
- ldr r1, [r2]
- lsls r0, r5, 2
- adds r1, 0xA0
- adds r1, r0
- movs r0, 0
- str r0, [r1]
-_0807CBE2:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x13
- bls _0807CB70
- ldr r0, [r2]
- ldr r1, _0807CC04 @ =0x000006fb
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0807CBF6:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CC00: .4byte gUnknown_83C2BBC
-_0807CC04: .4byte 0x000006fb
- thumb_func_end CreateFog1Sprites
-
- thumb_func_start DestroyFog1Sprites
-DestroyFog1Sprites: @ 807CC08
- push {r4,r5,lr}
- ldr r0, _0807CC50 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807CC54 @ =0x000006fb
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807CC48
- movs r4, 0
- adds r5, r1, 0
- adds r5, 0xA0
-_0807CC1E:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807CC2C
- bl DestroySprite
-_0807CC2C:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x13
- bls _0807CC1E
- ldr r0, _0807CC58 @ =0x00001201
- bl FreeSpriteTilesByTag
- ldr r0, _0807CC50 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807CC54 @ =0x000006fb
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0807CC48:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CC50: .4byte gUnknown_83C2BBC
-_0807CC54: .4byte 0x000006fb
-_0807CC58: .4byte 0x00001201
- thumb_func_end DestroyFog1Sprites
-
- thumb_func_start Ash_InitVars
-Ash_InitVars: @ 807CC5C
- push {lr}
- ldr r0, _0807CCA8 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807CCAC @ =0x000006cc
- adds r2, r1, r0
- movs r3, 0
- movs r0, 0
- strh r0, [r2]
- ldr r2, _0807CCB0 @ =0x000006d2
- adds r0, r1, r2
- strb r3, [r0]
- subs r2, 0x11
- adds r0, r1, r2
- strb r3, [r0]
- ldr r3, _0807CCB4 @ =0x000006c2
- adds r0, r1, r3
- movs r2, 0x14
- strb r2, [r0]
- adds r3, 0x3C
- adds r0, r1, r3
- strh r2, [r0]
- movs r0, 0xE0
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0
- bne _0807CCA4
- movs r0, 0
- movs r1, 0x10
- bl Weather_SetBlendCoeffs
- movs r1, 0xFD
- lsls r1, 6
- movs r0, 0x52
- bl SetGpuReg
-_0807CCA4:
- pop {r0}
- bx r0
- .align 2, 0
-_0807CCA8: .4byte gUnknown_83C2BBC
-_0807CCAC: .4byte 0x000006cc
-_0807CCB0: .4byte 0x000006d2
-_0807CCB4: .4byte 0x000006c2
- thumb_func_end Ash_InitVars
-
- thumb_func_start Ash_InitAll
-Ash_InitAll: @ 807CCB8
- push {r4,lr}
- bl Ash_InitVars
- ldr r0, _0807CCE0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807CCE4 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807CCD8
- adds r4, r1, r2
-_0807CCCE:
- bl Ash_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807CCCE
-_0807CCD8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CCE0: .4byte gUnknown_83C2BBC
-_0807CCE4: .4byte 0x000006d2
- thumb_func_end Ash_InitAll
-
- thumb_func_start Ash_Main
-Ash_Main: @ 807CCE8
- push {r4,r5,lr}
- ldr r2, _0807CD2C @ =gUnknown_83C2BBC
- ldr r1, [r2]
- ldr r0, _0807CD30 @ =gSpriteCoordOffsetX
- ldrh r0, [r0]
- ldr r3, _0807CD34 @ =0x000001ff
- ands r3, r0
- ldr r0, _0807CD38 @ =0x000006fc
- adds r1, r0
- strh r3, [r1]
- cmp r3, 0xEF
- bls _0807CD14
- adds r4, r1, 0
- adds r1, r3, 0
-_0807CD04:
- adds r3, r1, 0
- subs r3, 0xF0
- adds r1, r3, 0
- lsls r0, r3, 16
- lsrs r0, 16
- cmp r0, 0xEF
- bhi _0807CD04
- strh r3, [r4]
-_0807CD14:
- ldr r5, [r2]
- ldr r1, _0807CD3C @ =0x000006cc
- adds r4, r5, r1
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807CD4C
- cmp r0, 0x1
- bgt _0807CD40
- cmp r0, 0
- beq _0807CD46
- b _0807CD88
- .align 2, 0
-_0807CD2C: .4byte gUnknown_83C2BBC
-_0807CD30: .4byte gSpriteCoordOffsetX
-_0807CD34: .4byte 0x000001ff
-_0807CD38: .4byte 0x000006fc
-_0807CD3C: .4byte 0x000006cc
-_0807CD40:
- cmp r0, 0x2
- beq _0807CD68
- b _0807CD88
-_0807CD46:
- bl LoadAshSpriteSheet
- b _0807CD7A
-_0807CD4C:
- movs r1, 0xE0
- lsls r1, 3
- adds r0, r5, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807CD5C
- bl CreateAshSprites
-_0807CD5C:
- movs r0, 0x10
- movs r1, 0
- movs r2, 0x1
- bl Weather_SetTargetBlendCoeffs
- b _0807CD7A
-_0807CD68:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807CD8C
- ldr r0, _0807CD84 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
-_0807CD7A:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807CD8C
- .align 2, 0
-_0807CD84: .4byte 0x000006d2
-_0807CD88:
- bl Weather_UpdateBlend
-_0807CD8C:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end Ash_Main
-
- thumb_func_start Ash_Finish
-Ash_Finish: @ 807CD94
- push {r4,lr}
- ldr r0, _0807CDB0 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807CDB4 @ =0x000006ce
- adds r4, r0, r1
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807CDCA
- cmp r0, 0x1
- bgt _0807CDB8
- cmp r0, 0
- beq _0807CDBE
- b _0807CDEE
- .align 2, 0
-_0807CDB0: .4byte gUnknown_83C2BBC
-_0807CDB4: .4byte 0x000006ce
-_0807CDB8:
- cmp r0, 0x2
- beq _0807CDE0
- b _0807CDEE
-_0807CDBE:
- movs r0, 0
- movs r1, 0x10
- movs r2, 0x1
- bl Weather_SetTargetBlendCoeffs
- b _0807CDD8
-_0807CDCA:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807CDF2
- bl DestroyAshSprites
-_0807CDD8:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807CDF2
-_0807CDE0:
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807CDEE:
- movs r0, 0
- b _0807CDF4
-_0807CDF2:
- movs r0, 0x1
-_0807CDF4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end Ash_Finish
-
- thumb_func_start LoadAshSpriteSheet
-LoadAshSpriteSheet: @ 807CDFC
- push {lr}
- ldr r0, _0807CE08 @ =gUnknown_83C67B0
- bl LoadSpriteSheet
- pop {r0}
- bx r0
- .align 2, 0
-_0807CE08: .4byte gUnknown_83C67B0
- thumb_func_end LoadAshSpriteSheet
-
- thumb_func_start CreateAshSprites
-CreateAshSprites: @ 807CE0C
- push {r4,r5,lr}
- ldr r0, _0807CE78 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- movs r1, 0xE0
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807CEA8
- movs r5, 0
-_0807CE20:
- ldr r0, _0807CE7C @ =gUnknown_83C67D0
- movs r1, 0
- movs r2, 0
- movs r3, 0x4E
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0807CE84
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0807CE80 @ =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, _0807CE78 @ =gUnknown_83C2BBC
- ldr r0, [r2]
- lsls r1, r5, 2
- adds r0, 0xF0
- adds r0, r1
- str r4, [r0]
- b _0807CE92
- .align 2, 0
-_0807CE78: .4byte gUnknown_83C2BBC
-_0807CE7C: .4byte gUnknown_83C67D0
-_0807CE80: .4byte gSprites
-_0807CE84:
- ldr r2, _0807CEB0 @ =gUnknown_83C2BBC
- ldr r1, [r2]
- lsls r0, r5, 2
- adds r1, 0xF0
- adds r1, r0
- movs r0, 0
- str r0, [r1]
-_0807CE92:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x13
- bls _0807CE20
- ldr r0, [r2]
- movs r1, 0xE0
- lsls r1, 3
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0807CEA8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CEB0: .4byte gUnknown_83C2BBC
- thumb_func_end CreateAshSprites
-
- thumb_func_start DestroyAshSprites
-DestroyAshSprites: @ 807CEB4
- push {r4,r5,lr}
- ldr r0, _0807CF00 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- movs r2, 0xE0
- lsls r2, 3
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807CEF8
- movs r4, 0
- adds r5, r1, 0
- adds r5, 0xF0
-_0807CECC:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807CEDA
- bl DestroySprite
-_0807CEDA:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x13
- bls _0807CECC
- ldr r0, _0807CF04 @ =0x00001202
- bl FreeSpriteTilesByTag
- ldr r0, _0807CF00 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- movs r1, 0xE0
- lsls r1, 3
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0807CEF8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CF00: .4byte gUnknown_83C2BBC
-_0807CF04: .4byte 0x00001202
- thumb_func_end DestroyAshSprites
-
- thumb_func_start sub_807CF08
-sub_807CF08: @ 807CF08
- 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 _0807CF24
- movs r0, 0
- strh r0, [r3, 0x30]
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
-_0807CF24:
- ldr r1, _0807CF70 @ =gSpriteCoordOffsetY
- ldrh r0, [r3, 0x2E]
- ldrh r1, [r1]
- adds r0, r1
- strh r0, [r3, 0x22]
- ldr r0, _0807CF74 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807CF78 @ =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, _0807CF7C @ =0x010f0000
- cmp r1, r0
- ble _0807CF68
- 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, _0807CF80 @ =0x000001ff
- ands r1, r0
- strh r1, [r3, 0x20]
-_0807CF68:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CF70: .4byte gSpriteCoordOffsetY
-_0807CF74: .4byte gUnknown_83C2BBC
-_0807CF78: .4byte 0x000006fc
-_0807CF7C: .4byte 0x010f0000
-_0807CF80: .4byte 0x000001ff
- thumb_func_end sub_807CF08
-
- thumb_func_start Fog2_InitVars
-Fog2_InitVars: @ 807CF84
- push {r4,lr}
- ldr r0, _0807CFF4 @ =gUnknown_83C2BBC
- ldr r3, [r0]
- ldr r1, _0807CFF8 @ =0x000006cc
- adds r0, r3, r1
- movs r1, 0
- movs r2, 0
- strh r2, [r0]
- ldr r4, _0807CFFC @ =0x000006d2
- adds r0, r3, r4
- strb r1, [r0]
- subs r4, 0x11
- adds r0, r3, r4
- strb r1, [r0]
- ldr r0, _0807D000 @ =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, _0807D004 @ =0x00000724
- adds r0, r3, r1
- ldrb r2, [r0]
- cmp r2, 0
- bne _0807CFEE
- 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
-_0807CFEE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CFF4: .4byte gUnknown_83C2BBC
-_0807CFF8: .4byte 0x000006cc
-_0807CFFC: .4byte 0x000006d2
-_0807D000: .4byte 0x000006c2
-_0807D004: .4byte 0x00000724
- thumb_func_end Fog2_InitVars
-
- thumb_func_start Fog2_InitAll
-Fog2_InitAll: @ 807D008
- push {r4,lr}
- bl Fog2_InitVars
- ldr r0, _0807D030 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D034 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807D028
- adds r4, r1, r2
-_0807D01E:
- bl Fog2_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807D01E
-_0807D028:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D030: .4byte gUnknown_83C2BBC
-_0807D034: .4byte 0x000006d2
- thumb_func_end Fog2_InitAll
-
- thumb_func_start Fog2_Main
-Fog2_Main: @ 807D038
- push {r4,r5,lr}
- bl sub_807D0FC
- ldr r0, _0807D058 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807D05C @ =0x000006cc
- adds r4, r5, r0
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807D06C
- cmp r0, 0x1
- bgt _0807D060
- cmp r0, 0
- beq _0807D066
- b _0807D090
- .align 2, 0
-_0807D058: .4byte gUnknown_83C2BBC
-_0807D05C: .4byte 0x000006cc
-_0807D060:
- cmp r0, 0x2
- beq _0807D078
- b _0807D090
-_0807D066:
- bl CreateFog2Sprites
- b _0807D08A
-_0807D06C:
- movs r0, 0xC
- movs r1, 0x8
- movs r2, 0x8
- bl Weather_SetTargetBlendCoeffs
- b _0807D08A
-_0807D078:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807D090
- ldr r0, _0807D098 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
-_0807D08A:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807D090:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D098: .4byte 0x000006d2
- thumb_func_end Fog2_Main
-
- thumb_func_start Fog2_Finish
-Fog2_Finish: @ 807D09C
- push {r4,lr}
- bl sub_807D0FC
- ldr r0, _0807D0BC @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D0C0 @ =0x000006ce
- adds r4, r0, r1
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807D0D6
- cmp r0, 0x1
- bgt _0807D0C4
- cmp r0, 0
- beq _0807D0CA
- b _0807D0EE
- .align 2, 0
-_0807D0BC: .4byte gUnknown_83C2BBC
-_0807D0C0: .4byte 0x000006ce
-_0807D0C4:
- cmp r0, 0x2
- beq _0807D0E2
- b _0807D0EE
-_0807D0CA:
- movs r0, 0
- movs r1, 0x10
- movs r2, 0x1
- bl Weather_SetTargetBlendCoeffs
- b _0807D0E6
-_0807D0D6:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807D0F2
- b _0807D0E6
-_0807D0E2:
- bl DestroyFog2Sprites
-_0807D0E6:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807D0F2
-_0807D0EE:
- movs r0, 0
- b _0807D0F4
-_0807D0F2:
- movs r0, 0x1
-_0807D0F4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end Fog2_Finish
-
- thumb_func_start sub_807D0FC
-sub_807D0FC: @ 807D0FC
- push {r4,r5,lr}
- ldr r0, _0807D174 @ =gUnknown_83C2BBC
- ldr r3, [r0]
- ldr r0, _0807D178 @ =0x0000071c
- adds r2, r3, r0
- ldrh r0, [r2]
- adds r0, 0x1
- movs r5, 0
- strh r0, [r2]
- ldr r1, _0807D17C @ =0x0000ffff
- adds r4, r1, 0
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2
- bls _0807D128
- movs r0, 0xE4
- lsls r0, 3
- adds r1, r3, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- strh r5, [r2]
-_0807D128:
- ldr r1, _0807D180 @ =0x0000071e
- adds r2, r3, r1
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
- ands r0, r4
- cmp r0, 0x4
- bls _0807D144
- ldr r0, _0807D184 @ =0x00000722
- adds r1, r3, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- strh r5, [r2]
-_0807D144:
- ldr r0, _0807D188 @ =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, _0807D18C @ =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
-_0807D174: .4byte gUnknown_83C2BBC
-_0807D178: .4byte 0x0000071c
-_0807D17C: .4byte 0x0000ffff
-_0807D180: .4byte 0x0000071e
-_0807D184: .4byte 0x00000722
-_0807D188: .4byte gSpriteCoordOffsetX
-_0807D18C: .4byte gSpriteCoordOffsetY
- thumb_func_end sub_807D0FC
-
- thumb_func_start CreateFog2Sprites
-CreateFog2Sprites: @ 807D190
- push {r4-r6,lr}
- sub sp, 0x8
- ldr r0, _0807D1FC @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D200 @ =0x00000724
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807D236
- ldr r0, _0807D204 @ =gUnknown_83C67E8
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- mov r0, sp
- bl LoadSpriteSheet
- movs r6, 0
-_0807D1B4:
- adds r0, r6, 0
- movs r1, 0x5
- bl __udivsi3
- adds r5, r0, 0
- lsls r2, r5, 22
- asrs r2, 16
- ldr r0, _0807D208 @ =gUnknown_83C6804
- movs r1, 0
- movs r3, 0xFF
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0807D210
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0807D20C @ =gSprites
- adds r4, r0
- adds r0, r6, 0
- movs r1, 0x5
- bl __umodsi3
- strh r0, [r4, 0x2E]
- strh r5, [r4, 0x30]
- ldr r2, _0807D1FC @ =gUnknown_83C2BBC
- ldr r0, [r2]
- lsls r1, r6, 2
- movs r3, 0xA0
- lsls r3, 1
- adds r0, r3
- adds r0, r1
- str r4, [r0]
- b _0807D222
- .align 2, 0
-_0807D1FC: .4byte gUnknown_83C2BBC
-_0807D200: .4byte 0x00000724
-_0807D204: .4byte gUnknown_83C67E8
-_0807D208: .4byte gUnknown_83C6804
-_0807D20C: .4byte gSprites
-_0807D210:
- ldr r2, _0807D240 @ =gUnknown_83C2BBC
- 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]
-_0807D222:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x13
- bls _0807D1B4
- ldr r0, [r2]
- ldr r1, _0807D244 @ =0x00000724
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0807D236:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D240: .4byte gUnknown_83C2BBC
-_0807D244: .4byte 0x00000724
- thumb_func_end CreateFog2Sprites
-
- thumb_func_start DestroyFog2Sprites
-DestroyFog2Sprites: @ 807D248
- push {r4,r5,lr}
- ldr r0, _0807D290 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D294 @ =0x00000724
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807D28A
- movs r4, 0
- movs r0, 0xA0
- lsls r0, 1
- adds r5, r1, r0
-_0807D260:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807D26E
- bl DestroySprite
-_0807D26E:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x13
- bls _0807D260
- ldr r0, _0807D298 @ =0x00001203
- bl FreeSpriteTilesByTag
- ldr r0, _0807D290 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D294 @ =0x00000724
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0807D28A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D290: .4byte gUnknown_83C2BBC
-_0807D294: .4byte 0x00000724
-_0807D298: .4byte 0x00001203
- thumb_func_end DestroyFog2Sprites
-
- thumb_func_start Fog2SpriteCallback
-Fog2SpriteCallback: @ 807D29C
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, _0807D2EC @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D2F0 @ =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, _0807D2F4 @ =0x010f0000
- cmp r1, r0
- ble _0807D2E4
- 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, _0807D2F8 @ =0x000001ff
- ands r1, r0
- strh r1, [r3, 0x20]
-_0807D2E4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D2EC: .4byte gUnknown_83C2BBC
-_0807D2F0: .4byte 0x0000071a
-_0807D2F4: .4byte 0x010f0000
-_0807D2F8: .4byte 0x000001ff
- thumb_func_end Fog2SpriteCallback
-
- thumb_func_start Sandstorm_InitVars
-Sandstorm_InitVars: @ 807D2FC
- push {r4,lr}
- ldr r0, _0807D360 @ =gUnknown_83C2BBC
- ldr r3, [r0]
- ldr r0, _0807D364 @ =0x000006cc
- adds r1, r3, r0
- movs r2, 0
- movs r0, 0
- strh r0, [r1]
- ldr r1, _0807D368 @ =0x000006d2
- adds r0, r3, r1
- strb r2, [r0]
- ldr r4, _0807D36C @ =0x000006c1
- adds r0, r3, r4
- strb r2, [r0]
- ldr r0, _0807D370 @ =0x000006c2
- adds r1, r3, r0
- movs r0, 0x14
- strb r0, [r1]
- ldr r1, _0807D374 @ =0x00000716
- adds r0, r3, r1
- ldrb r2, [r0]
- cmp r2, 0
- bne _0807D358
- adds r4, 0x43
- adds r1, r3, r4
- adds r4, 0x4
- adds r0, r3, r4
- str r2, [r0]
- str r2, [r1]
- ldr r0, _0807D378 @ =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 _0807D350
- movs r0, 0x80
- subs r0, r2
- strh r0, [r1]
-_0807D350:
- movs r0, 0
- movs r1, 0x10
- bl Weather_SetBlendCoeffs
-_0807D358:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D360: .4byte gUnknown_83C2BBC
-_0807D364: .4byte 0x000006cc
-_0807D368: .4byte 0x000006d2
-_0807D36C: .4byte 0x000006c1
-_0807D370: .4byte 0x000006c2
-_0807D374: .4byte 0x00000716
-_0807D378: .4byte 0x00000712
- thumb_func_end Sandstorm_InitVars
-
- thumb_func_start Sandstorm_InitAll
-Sandstorm_InitAll: @ 807D37C
- push {r4,lr}
- bl Sandstorm_InitVars
- ldr r0, _0807D3A4 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D3A8 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807D39C
- adds r4, r1, r2
-_0807D392:
- bl Sandstorm_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807D392
-_0807D39C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D3A4: .4byte gUnknown_83C2BBC
-_0807D3A8: .4byte 0x000006d2
- thumb_func_end Sandstorm_InitAll
-
- thumb_func_start Sandstorm_Main
-Sandstorm_Main: @ 807D3AC
- push {r4,r5,lr}
- bl sub_807D4C4
- bl sub_807D48C
- ldr r0, _0807D3DC @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807D3E0 @ =0x00000712
- adds r1, r5, r0
- ldrh r0, [r1]
- cmp r0, 0x5F
- bls _0807D3C8
- movs r0, 0x20
- strh r0, [r1]
-_0807D3C8:
- ldr r0, _0807D3E4 @ =0x000006cc
- adds r4, r5, r0
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807D3F8
- cmp r0, 0x1
- bgt _0807D3E8
- cmp r0, 0
- beq _0807D3EE
- b _0807D41C
- .align 2, 0
-_0807D3DC: .4byte gUnknown_83C2BBC
-_0807D3E0: .4byte 0x00000712
-_0807D3E4: .4byte 0x000006cc
-_0807D3E8:
- cmp r0, 0x2
- beq _0807D404
- b _0807D41C
-_0807D3EE:
- bl CreateSandstormSprites_1
- bl CreateSandstormSprites_2
- b _0807D416
-_0807D3F8:
- movs r0, 0x10
- movs r1, 0
- movs r2, 0
- bl Weather_SetTargetBlendCoeffs
- b _0807D416
-_0807D404:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807D41C
- ldr r0, _0807D424 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
-_0807D416:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807D41C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D424: .4byte 0x000006d2
- thumb_func_end Sandstorm_Main
-
- thumb_func_start Sandstorm_Finish
-Sandstorm_Finish: @ 807D428
- push {r4,lr}
- bl sub_807D4C4
- bl sub_807D48C
- ldr r0, _0807D44C @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D450 @ =0x000006ce
- adds r4, r0, r1
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807D466
- cmp r0, 0x1
- bgt _0807D454
- cmp r0, 0
- beq _0807D45A
- b _0807D47E
- .align 2, 0
-_0807D44C: .4byte gUnknown_83C2BBC
-_0807D450: .4byte 0x000006ce
-_0807D454:
- cmp r0, 0x2
- beq _0807D472
- b _0807D47E
-_0807D45A:
- movs r0, 0
- movs r1, 0x10
- movs r2, 0
- bl Weather_SetTargetBlendCoeffs
- b _0807D476
-_0807D466:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807D482
- b _0807D476
-_0807D472:
- bl sub_807D544
-_0807D476:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807D482
-_0807D47E:
- movs r0, 0
- b _0807D484
-_0807D482:
- movs r0, 0x1
-_0807D484:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end Sandstorm_Finish
-
- thumb_func_start sub_807D48C
-sub_807D48C: @ 807D48C
- push {lr}
- ldr r0, _0807D4B8 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r0, _0807D4BC @ =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 _0807D4B2
- ldr r1, _0807D4C0 @ =0x00000712
- adds r0, r2, r1
- ldrh r1, [r0]
- adds r1, 0x1
- movs r2, 0
- strh r1, [r0]
- strh r2, [r3]
-_0807D4B2:
- pop {r0}
- bx r0
- .align 2, 0
-_0807D4B8: .4byte gUnknown_83C2BBC
-_0807D4BC: .4byte 0x00000714
-_0807D4C0: .4byte 0x00000712
- thumb_func_end sub_807D48C
-
- thumb_func_start sub_807D4C4
-sub_807D4C4: @ 807D4C4
- push {r4-r6,lr}
- ldr r0, _0807D528 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r0, _0807D52C @ =0x00000704
- adds r4, r2, r0
- ldr r6, _0807D530 @ =gSineTable
- ldr r1, _0807D534 @ =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, _0807D538 @ =gSpriteCoordOffsetX
- ldr r0, [r4]
- lsrs r0, 8
- ldrh r1, [r1]
- adds r0, r1
- movs r1, 0xFF
- ands r0, r1
- ldr r4, _0807D53C @ =0x0000070e
- adds r1, r2, r4
- strh r0, [r1]
- ldr r1, _0807D540 @ =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
-_0807D528: .4byte gUnknown_83C2BBC
-_0807D52C: .4byte 0x00000704
-_0807D530: .4byte gSineTable
-_0807D534: .4byte 0x00000712
-_0807D538: .4byte gSpriteCoordOffsetX
-_0807D53C: .4byte 0x0000070e
-_0807D540: .4byte gSpriteCoordOffsetY
- thumb_func_end sub_807D4C4
-
- thumb_func_start sub_807D544
-sub_807D544: @ 807D544
- push {r4,r5,lr}
- ldr r0, _0807D5C8 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D5CC @ =0x00000716
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807D586
- movs r4, 0
- movs r0, 0xC8
- lsls r0, 1
- adds r5, r1, r0
-_0807D55C:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807D56A
- bl DestroySprite
-_0807D56A:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x13
- bls _0807D55C
- ldr r0, _0807D5C8 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D5CC @ =0x00000716
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, _0807D5D0 @ =0x00001204
- bl FreeSpriteTilesByTag
-_0807D586:
- ldr r0, _0807D5C8 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D5D4 @ =0x00000717
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807D5C0
- movs r4, 0
- movs r0, 0xF0
- lsls r0, 1
- adds r5, r1, r0
-_0807D59C:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807D5AA
- bl DestroySprite
-_0807D5AA:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x4
- bls _0807D59C
- ldr r0, _0807D5C8 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D5D4 @ =0x00000717
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0807D5C0:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D5C8: .4byte gUnknown_83C2BBC
-_0807D5CC: .4byte 0x00000716
-_0807D5D0: .4byte 0x00001204
-_0807D5D4: .4byte 0x00000717
- thumb_func_end sub_807D544
-
- thumb_func_start CreateSandstormSprites_1
-CreateSandstormSprites_1: @ 807D5D8
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r0, _0807D648 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D64C @ =0x00000716
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807D686
- ldr r0, _0807D650 @ =gUnknown_83C6854
- bl LoadSpriteSheet
- ldr r0, _0807D654 @ =gUnknown_83C2D20
- bl sub_807ABC0
- movs r7, 0
-_0807D5F8:
- adds r0, r7, 0
- movs r1, 0x5
- bl __udivsi3
- adds r6, r0, 0
- lsls r2, r6, 22
- asrs r2, 16
- ldr r0, _0807D658 @ =gUnknown_83C683C
- movs r1, 0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _0807D660
- ldr r2, _0807D648 @ =gUnknown_83C2BBC
- 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, _0807D65C @ =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 _0807D672
- .align 2, 0
-_0807D648: .4byte gUnknown_83C2BBC
-_0807D64C: .4byte 0x00000716
-_0807D650: .4byte gUnknown_83C6854
-_0807D654: .4byte gUnknown_83C2D20
-_0807D658: .4byte gUnknown_83C683C
-_0807D65C: .4byte gSprites
-_0807D660:
- ldr r2, _0807D690 @ =gUnknown_83C2BBC
- 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]
-_0807D672:
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0x13
- bls _0807D5F8
- ldr r0, [r2]
- ldr r1, _0807D694 @ =0x00000716
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0807D686:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D690: .4byte gUnknown_83C2BBC
-_0807D694: .4byte 0x00000716
- thumb_func_end CreateSandstormSprites_1
-
- thumb_func_start CreateSandstormSprites_2
-CreateSandstormSprites_2: @ 807D698
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r4, _0807D740 @ =gUnknown_83C2BBC
- ldr r0, [r4]
- ldr r1, _0807D744 @ =0x00000717
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807D784
- movs r7, 0
- mov r9, r4
- movs r2, 0
- mov r10, r2
-_0807D6B8:
- 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, _0807D748 @ =gUnknown_83C683C
- movs r2, 0xD0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _0807D75C
- 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, _0807D74C @ =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, _0807D750 @ =0x00006730
- strh r0, [r1, 0x36]
- ldr r1, [r4]
- ldr r0, _0807D754 @ =gUnknown_83C685C
- 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, _0807D758 @ =SandstormSpriteCallback2
- str r0, [r1, 0x1C]
- b _0807D76E
- .align 2, 0
-_0807D740: .4byte gUnknown_83C2BBC
-_0807D744: .4byte 0x00000717
-_0807D748: .4byte gUnknown_83C683C
-_0807D74C: .4byte gSprites
-_0807D750: .4byte 0x00006730
-_0807D754: .4byte gUnknown_83C685C
-_0807D758: .4byte SandstormSpriteCallback2
-_0807D75C:
- 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]
-_0807D76E:
- mov r2, r9
- ldr r0, [r2]
- ldr r1, _0807D794 @ =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 _0807D6B8
-_0807D784:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D794: .4byte 0x00000717
- thumb_func_end CreateSandstormSprites_2
-
- thumb_func_start SandstormSpriteCallback1
-SandstormSpriteCallback1: @ 807D798
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, _0807D7E8 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- movs r2, 0xE2
- lsls r2, 3
- adds r0, r1, r2
- ldrh r0, [r0]
- strh r0, [r3, 0x26]
- ldr r4, _0807D7EC @ =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, _0807D7F0 @ =0x010f0000
- cmp r1, r0
- ble _0807D7E0
- 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, _0807D7F4 @ =0x000001ff
- ands r1, r0
- strh r1, [r3, 0x20]
-_0807D7E0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D7E8: .4byte gUnknown_83C2BBC
-_0807D7EC: .4byte 0x0000070e
-_0807D7F0: .4byte 0x010f0000
-_0807D7F4: .4byte 0x000001ff
- thumb_func_end SandstormSpriteCallback1
-
- thumb_func_start SandstormSpriteCallback2
-SandstormSpriteCallback2: @ 807D7F8
- 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 _0807D812
- ldr r0, _0807D818 @ =SandstormSpriteCallback3
- str r0, [r2, 0x1C]
-_0807D812:
- pop {r0}
- bx r0
- .align 2, 0
-_0807D818: .4byte SandstormSpriteCallback3
- thumb_func_end SandstormSpriteCallback2
-
- thumb_func_start SandstormSpriteCallback3
-SandstormSpriteCallback3: @ 807D81C
- 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 _0807D83A
- movs r0, 0xD0
- strh r0, [r5, 0x22]
- movs r0, 0x4
- strh r0, [r5, 0x2E]
-_0807D83A:
- movs r0, 0x2E
- ldrsh r4, [r5, r0]
- ldr r3, _0807D88C @ =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 _0807D886
- movs r0, 0
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
-_0807D886:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D88C: .4byte gSineTable
- thumb_func_end SandstormSpriteCallback3
-
- thumb_func_start Weather11_InitVars
-Weather11_InitVars: @ 807D890
- ldr r0, _0807D8B0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807D8B4 @ =0x000006cc
- adds r2, r1, r0
- movs r0, 0
- strh r0, [r2]
- ldr r0, _0807D8B8 @ =0x000006c1
- adds r2, r1, r0
- movs r0, 0x3
- strb r0, [r2]
- ldr r0, _0807D8BC @ =0x000006c2
- adds r1, r0
- movs r0, 0x14
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0807D8B0: .4byte gUnknown_83C2BBC
-_0807D8B4: .4byte 0x000006cc
-_0807D8B8: .4byte 0x000006c1
-_0807D8BC: .4byte 0x000006c2
- thumb_func_end Weather11_InitVars
-
- thumb_func_start Weather11_InitAll
-Weather11_InitAll: @ 807D8C0
- push {lr}
- bl Weather11_InitVars
- pop {r0}
- bx r0
- thumb_func_end Weather11_InitAll
-
- thumb_func_start nullsub_49
-nullsub_49: @ 807D8CC
- bx lr
- thumb_func_end nullsub_49
-
- thumb_func_start sub_807D8D0
-sub_807D8D0: @ 807D8D0
- movs r0, 0
- bx lr
- thumb_func_end sub_807D8D0
-
- thumb_func_start Bubbles_InitVars
-Bubbles_InitVars: @ 807D8D4
- push {r4,r5,lr}
- bl Fog1_InitVars
- ldr r0, _0807D914 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r1, _0807D918 @ =0x0000072e
- adds r0, r4, r1
- ldrb r5, [r0]
- cmp r5, 0
- bne _0807D90C
- ldr r0, _0807D91C @ =gUnknown_83C6870
- bl LoadSpriteSheet
- movs r2, 0xE5
- lsls r2, 3
- adds r0, r4, r2
- strh r5, [r0]
- ldr r0, _0807D920 @ =gUnknown_83C6868
- ldrb r1, [r0]
- subs r2, 0x2
- adds r0, r4, r2
- strh r1, [r0]
- ldr r1, _0807D924 @ =0x0000072a
- adds r0, r4, r1
- strh r5, [r0]
- adds r2, 0x6
- adds r0, r4, r2
- strh r5, [r0]
-_0807D90C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D914: .4byte gUnknown_83C2BBC
-_0807D918: .4byte 0x0000072e
-_0807D91C: .4byte gUnknown_83C6870
-_0807D920: .4byte gUnknown_83C6868
-_0807D924: .4byte 0x0000072a
- thumb_func_end Bubbles_InitVars
-
- thumb_func_start Bubbles_InitAll
-Bubbles_InitAll: @ 807D928
- push {r4,lr}
- bl Bubbles_InitVars
- ldr r0, _0807D950 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D954 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807D948
- adds r4, r1, r2
-_0807D93E:
- bl Bubbles_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807D93E
-_0807D948:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D950: .4byte gUnknown_83C2BBC
-_0807D954: .4byte 0x000006d2
- thumb_func_end Bubbles_InitAll
-
- thumb_func_start Bubbles_Main
-Bubbles_Main: @ 807D958
- push {r4-r7,lr}
- bl Fog1_Main
- ldr r0, _0807D9B8 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807D9BC @ =0x00000726
- adds r4, r5, r0
- ldrh r0, [r4]
- adds r0, 0x1
- movs r6, 0
- strh r0, [r4]
- ldr r1, _0807D9C0 @ =0x0000ffff
- adds r7, r1, 0
- ldr r2, _0807D9C4 @ =gUnknown_83C6868
- 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 _0807D9B0
- strh r6, [r4]
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
- ands r0, r7
- cmp r0, 0x7
- bls _0807D998
- strh r6, [r3]
-_0807D998:
- ldr r0, _0807D9C8 @ =0x0000072a
- adds r4, r5, r0
- ldrh r0, [r4]
- bl sub_807D9E8
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- ands r0, r7
- cmp r0, 0xC
- bls _0807D9B0
- strh r6, [r4]
-_0807D9B0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D9B8: .4byte gUnknown_83C2BBC
-_0807D9BC: .4byte 0x00000726
-_0807D9C0: .4byte 0x0000ffff
-_0807D9C4: .4byte gUnknown_83C6868
-_0807D9C8: .4byte 0x0000072a
- thumb_func_end Bubbles_Main
-
- thumb_func_start Bubbles_Finish
-Bubbles_Finish: @ 807D9CC
- push {lr}
- bl Fog1_Finish
- lsls r0, 24
- cmp r0, 0
- beq _0807D9DC
- movs r0, 0x1
- b _0807D9E2
-_0807D9DC:
- bl sub_807DA70
- movs r0, 0
-_0807D9E2:
- pop {r1}
- bx r1
- thumb_func_end Bubbles_Finish
-
- thumb_func_start sub_807D9E8
-sub_807D9E8: @ 807D9E8
- push {r4,lr}
- lsls r0, 16
- ldr r1, _0807DA58 @ =gUnknown_83C6878
- lsrs r0, 14
- adds r3, r0, r1
- adds r1, 0x2
- adds r0, r1
- ldr r1, _0807DA5C @ =gSpriteCoordOffsetY
- ldrh r2, [r0]
- ldrh r0, [r1]
- subs r2, r0
- ldr r0, _0807DA60 @ =gUnknown_83C68BC
- 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 _0807DA50
- ldr r0, _0807DA64 @ =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, _0807DA68 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807DA6C @ =0x0000072c
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
-_0807DA50:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807DA58: .4byte gUnknown_83C6878
-_0807DA5C: .4byte gSpriteCoordOffsetY
-_0807DA60: .4byte gUnknown_83C68BC
-_0807DA64: .4byte gSprites
-_0807DA68: .4byte gUnknown_83C2BBC
-_0807DA6C: .4byte 0x0000072c
- thumb_func_end sub_807D9E8
-
- thumb_func_start sub_807DA70
-sub_807DA70: @ 807DA70
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _0807DAA8 @ =gSprites
-_0807DA76:
- 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, _0807DAAC @ =gUnknown_83C68BC
- cmp r1, r0
- bne _0807DA90
- adds r0, r2, r5
- bl DestroySprite
-_0807DA90:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x3F
- bls _0807DA76
- ldr r0, _0807DAB0 @ =0x00001205
- bl FreeSpriteTilesByTag
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807DAA8: .4byte gSprites
-_0807DAAC: .4byte gUnknown_83C68BC
-_0807DAB0: .4byte 0x00001205
- thumb_func_end sub_807DA70
-
- thumb_func_start unc_0807DAB4
-unc_0807DAB4: @ 807DAB4
- 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 _0807DAF4
- strh r2, [r1, 0x2E]
- movs r3, 0x30
- ldrsh r0, [r1, r3]
- cmp r0, 0
- bne _0807DAE6
- ldrh r0, [r1, 0x24]
- adds r0, 0x1
- strh r0, [r1, 0x24]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _0807DAF4
- movs r0, 0x1
- strh r0, [r1, 0x30]
- b _0807DAF4
-_0807DAE6:
- ldrh r0, [r1, 0x24]
- subs r0, 0x1
- strh r0, [r1, 0x24]
- lsls r0, 16
- cmp r0, 0
- bgt _0807DAF4
- strh r2, [r1, 0x30]
-_0807DAF4:
- 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 _0807DB0E
- adds r0, r1, 0
- bl DestroySprite
-_0807DB0E:
- pop {r0}
- bx r0
- thumb_func_end unc_0807DAB4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/overworld.s b/asm/overworld.s
index 27235fa18..179d79fdc 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -1728,7 +1728,7 @@ sub_8055864: @ 8055864
_080558D4:
lsls r0, r4, 24
lsrs r0, 24
- bl sub_807AB74
+ bl ApplyWeatherGammaShiftToPal
adds r4, 0x1
cmp r4, 0xC
ble _080558D4
@@ -4644,8 +4644,8 @@ _08057050:
bl InitObjectEventPalettes
_08057056:
bl FieldEffectActiveListClear
- bl sub_8079C08
- bl sub_807B1B8
+ bl StartWeather
+ bl ResumePausedWeather
cmp r4, 0
bne _0805706A
bl SetUpFieldTasks
@@ -5400,8 +5400,8 @@ _0805769C:
bl ResetCameraUpdateInfo
bl InstallCameraPanAheadCallback
bl FieldEffectActiveListClear
- bl sub_8079C08
- bl sub_807B1B8
+ bl StartWeather
+ bl ResumePausedWeather
bl SetUpFieldTasks
bl mapheader_run_script_with_tag_x5
b _0805772A
@@ -5451,7 +5451,7 @@ _08057712:
ldr r2, _08057738 @ =0x3fffffff
movs r0, 0
movs r1, 0
- bl FieldWeather_StartFadingOutCreditsMap
+ bl FadeSelectedPals
_0805772A:
ldrb r0, [r4]
adds r0, 0x1
diff --git a/data/field_weather.s b/data/field_weather.s
deleted file mode 100644
index d872998bf..000000000
--- a/data/field_weather.s
+++ /dev/null
@@ -1,392 +0,0 @@
-#include "constants/region_map_sections.h"
-#include "constants/flags.h"
-#include "constants/moves.h"
-#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-
-gUnknown_83BFBE4:: @ 83BFBE4
- .incbin "graphics/field_effects/unk_83BFBE4.bin.lz"
-
-gUnknown_83C0408::
- .incbin "graphics/field_effects/unk_83C0408.bin.lz"
-
-gUnknown_83C0C00::
- .incbin "graphics/field_effects/unk_83C0C00.bin.lz"
-
-gUnknown_83C139C::
- .incbin "graphics/field_effects/unk_83C139C.bin.lz"
-
-gUnknown_83C1BB8::
- .incbin "graphics/field_effects/unk_83C1BB8.bin.lz"
-
-gUnknown_83C2380::
- .incbin "graphics/field_effects/unk_83C2380.bin.lz"
-
-gUnknown_83C2BA4::
- .4byte gUnknown_83BFBE4
- .4byte gUnknown_83C0408
- .4byte gUnknown_83C0C00
- .4byte gUnknown_83C139C
- .4byte gUnknown_83C1BB8
- .4byte gUnknown_83C2380
-
-gUnknown_83C2BBC:: @ 83C2BBC
- .4byte gUnknown_2037F34
-
-gUnknown_83C2BC0:: @ 83C2BC0
- .4byte sub_8079EC0
- .4byte nullsub_45
- .4byte sub_8079EC0
- .4byte sub_8079EE4
- .4byte Clouds_InitVars
- .4byte Clouds_Main
- .4byte Clouds_InitAll
- .4byte Clouds_Finish
- .4byte Weather2_InitVars
- .4byte nullsub_48
- .4byte Weather2_InitAll
- .4byte sub_807B434
- .4byte LightRain_InitVars
- .4byte LightRain_Main
- .4byte LightRain_InitAll
- .4byte LightRain_Finish
- .4byte Snow_InitVars
- .4byte snowflakes_progress2
- .4byte Snow_InitAll
- .4byte Snow_Finish
- .4byte sub_807C2E4
- .4byte Rain_Main
- .4byte sub_807C358
- .4byte Rain_Finish
- .4byte Fog1_InitVars
- .4byte Fog1_Main
- .4byte Fog1_InitAll
- .4byte Fog1_Finish
- .4byte Ash_InitVars
- .4byte Ash_Main
- .4byte Ash_InitAll
- .4byte Ash_Finish
- .4byte Sandstorm_InitVars
- .4byte Sandstorm_Main
- .4byte Sandstorm_InitAll
- .4byte Sandstorm_Finish
- .4byte Fog2_InitVars
- .4byte Fog2_Main
- .4byte Fog2_InitAll
- .4byte Fog2_Finish
- .4byte Fog1_InitVars
- .4byte Fog1_Main
- .4byte Fog1_InitAll
- .4byte Fog1_Finish
- .4byte Weather11_InitVars
- .4byte nullsub_49
- .4byte Weather11_InitAll
- .4byte sub_807D8D0
- .4byte Drought_InitVars
- .4byte Drought_Main
- .4byte Drought_InitAll
- .4byte sub_807B6BC
- .4byte sub_807C388
- .4byte Rain_Main
- .4byte sub_807C3F4
- .4byte Rain_Finish
- .4byte Bubbles_InitVars
- .4byte Bubbles_Main
- .4byte Bubbles_InitAll
- .4byte Bubbles_Finish
-
-gUnknown_83C2CB0:: @ 83C2CB0
- .4byte sub_8079FFC
- .4byte sub_807A084
- .4byte nullsub_46
- .4byte nullsub_46
-
-gUnknown_83C2CC0:: @ 83C2CC0
- .byte 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01
-
-gUnknown_83C2CE0:: @ 83C2CE0
- .incbin "graphics/field_effects/unk_83C2CE0.gbapal"
-
-gUnknown_83C2D00:: @ 83C2D00
- .incbin "graphics/field_effects/unk_83C2D00.gbapal"
-
-gUnknown_83C2D20:: @ 83C2D20
- .incbin "graphics/field_effects/unk_83C2D20.gbapal"
-
-gUnknown_83C2D40::
- .incbin "graphics/field_effects/unk_83C2D40.4bpp"
-
-gWeatherFog1Tiles:: @ 83C3540
- .incbin "graphics/field_effects/unk_83C3540.4bpp"
-
-gUnknown_83C3D40::
- .incbin "graphics/field_effects/unk_83C3D40.4bpp"
-
-gUnknown_83C4540::
- .incbin "graphics/field_effects/unk_83C4540.4bpp"
-
-gUnknown_83C4580::
- .incbin "graphics/field_effects/unk_83C4580.4bpp"
-
-gUnknown_83C45C0::
- .incbin "graphics/field_effects/unk_83C45C0.4bpp"
-
-gUnknown_83C55C0::
- .incbin "graphics/field_effects/unk_83C55C0.4bpp"
-
-gUnknown_83C5BC0::
- .incbin "graphics/field_effects/unk_83C5BC0.4bpp"
-
-gUnknown_83C65C0:: @ 83C65C0
- .byte 0x02, 0x03, 0x05, 0x03
-
-gUnknown_83C65C4:: @ 83C65C4
- .byte 0x02, 0x02, 0x03, 0x02
-
-gUnknown_83C65C8:: @ 83C65C8
- .2byte 0x0000, 0x0042, 0x0005, 0x0049, 0x000a, 0x004e
-
-gUnknown_83C65D4:: @ 83C65D4
- obj_tiles gUnknown_83C3D40, 0x0800, 4608
-
-gUnknown_83C65DC::
- .4byte 0xc0000400, 0x00000c00
-
-gUnknown_83C65E4::
- obj_image_anim_frame 0x0000, 16
- obj_image_anim_end
-
-gUnknown_83C65EC::
- .4byte gUnknown_83C65E4
-
-gUnknown_83C65F0:: @ 83C65F0
- spr_template 4608, 4608, gUnknown_83C65DC, gUnknown_83C65EC, NULL, gDummySpriteAffineAnimTable, sub_807B558
-
-gUnknown_83C6608:: @ 83C6608
- .2byte 0x0000, 0x0000
- .2byte 0x0000, 0x00a0
- .2byte 0x0000, 0x0040
- .2byte 0x0090, 0x00e0
- .2byte 0x0090, 0x0080
- .2byte 0x0020, 0x0020
- .2byte 0x0020, 0x00c0
- .2byte 0x0020, 0x0060
- .2byte 0x0048, 0x0080
- .2byte 0x0048, 0x0020
- .2byte 0x0048, 0x00c0
- .2byte 0x00d8, 0x0060
- .2byte 0x00d8, 0x0000
- .2byte 0x0068, 0x00a0
- .2byte 0x0068, 0x0040
- .2byte 0x0068, 0x00e0
- .2byte 0x0090, 0x0000
- .2byte 0x0090, 0x00a0
- .2byte 0x0090, 0x0040
- .2byte 0x0020, 0x00e0
- .2byte 0x0020, 0x0080
- .2byte 0x0048, 0x0020
- .2byte 0x0048, 0x00c0
- .2byte 0x0030, 0x0060
-
-gUnknown_83C6668::
- .4byte 0x80008000, 0x00002400
-
-gUnknown_83C6670::
- obj_image_anim_frame 0x0000, 16
- obj_image_anim_jump 0
-
-gUnknown_83C6678::
- obj_image_anim_frame 0x0008, 3
- obj_image_anim_frame 0x0020, 2
- obj_image_anim_frame 0x0028, 2
- obj_image_anim_end
-
-gUnknown_83C6688::
- obj_image_anim_frame 0x0008, 3
- obj_image_anim_frame 0x0010, 3
- obj_image_anim_frame 0x0018, 4
- obj_image_anim_end
-
-gUnknown_83C6698::
- .4byte gUnknown_83C6670
- .4byte gUnknown_83C6678
- .4byte gUnknown_83C6688
-
-gUnknown_83C66A4:: @ 83C66A4
- spr_template 4614, 4608, gUnknown_83C6668, gUnknown_83C6698, NULL, gDummySpriteAffineAnimTable, sub_807BA24
-
-gUnknown_83C66BC:: @ 83C66BC
- .2byte 0xff98, 0x00d0
- .2byte 0xff60, 0x0140
-
-gUnknown_83C66C4:: @ 83C66C4
- .2byte 0x0012, 0x0007
- .2byte 0x000c, 0x000a
-
-gUnknown_83C66CC:: @ 83C66CC
- obj_tiles gUnknown_83C55C0, 0x0600, 4614
-
-gUnknown_83C66D4::
- .4byte 0x00000000, 0x00000400
-
-gUnknown_83C66DC::
- obj_frame_tiles gUnknown_83C4540 + 0x00, 0x0020
- obj_frame_tiles gUnknown_83C4540 + 0x20, 0x0020
-
-gUnknown_83C66EC::
- obj_image_anim_frame 0x0000, 16
- obj_image_anim_end
-
-gUnknown_83C66F4::
- obj_image_anim_frame 0x0001, 16
- obj_image_anim_end
-
-gUnknown_83C66FC::
- .4byte gUnknown_83C66EC
- .4byte gUnknown_83C66F4
-
-gUnknown_83C6704:: @ 83C6704
- spr_template 65535, 4608, gUnknown_83C66D4, gUnknown_83C66FC, gUnknown_83C66DC, gDummySpriteAffineAnimTable, sub_807C1AC
-
-gUnknown_83C671C::
- .2byte 0x0000, 0x0006, 0x0006, 0x000c, 0x0012, 0x002a, 0x012c, 0x012c
-
-gUnknown_83C672C::
- .4byte 0xc0000400, 0x00000800
-
-gUnknown_83C6734::
- obj_image_anim_frame 0x0000, 16
- obj_image_anim_end
-
-gUnknown_83C673C::
- obj_image_anim_frame 0x0020, 16
- obj_image_anim_end
-
-gUnknown_83C6744::
- obj_image_anim_frame 0x0040, 16
- obj_image_anim_end
-
-gUnknown_83C674C::
- obj_image_anim_frame 0x0060, 16
- obj_image_anim_end
-
-gUnknown_83C6754::
- obj_image_anim_frame 0x0080, 16
- obj_image_anim_end
-
-gUnknown_83C675C::
- obj_image_anim_frame 0x00a0, 16
- obj_image_anim_end
-
-gUnknown_83C6764::
- .4byte gUnknown_83C6734
- .4byte gUnknown_83C673C
- .4byte gUnknown_83C6744
- .4byte gUnknown_83C674C
- .4byte gUnknown_83C6754
- .4byte gUnknown_83C675C
-
-gUnknown_83C677C::
- obj_rot_scal_anim_frame 512, 512, 0, 0
- obj_rot_scal_anim_end
-
-gUnknown_83C678C::
- .4byte gUnknown_83C677C
-
-gUnknown_83C6790:: @ 83C6790
- spr_template 4609, 4608, gUnknown_83C672C, gUnknown_83C6764, NULL, gUnknown_83C678C, Fog1SpriteCallback
-
-gUnknown_83C67A8:: @ 83C67A8
- obj_tiles gWeatherFog1Tiles, 0x0800, 4609
-
-gUnknown_83C67B0:: @ 83C67B0
- obj_tiles gUnknown_83C45C0, 0x1000, 4610
-
-gUknown_83C67B8::
- .4byte 0xc0000400, 0x0000f400
-
-gUnknown_83C67C0::
- obj_image_anim_frame 0x0000, 60
- obj_image_anim_frame 0x0040, 60
- obj_image_anim_jump 0
-
-gUnknown_83C67CC::
- .4byte gUnknown_83C67C0
-
-gUnknown_83C67D0:: @ 83C67D0
- spr_template 4610, 4608, gUknown_83C67B8, gUnknown_83C67CC, NULL, gDummySpriteAffineAnimTable, sub_807CF08
-
-gUnknown_83C67E8:: @ 83C67E8
- obj_tiles gUnknown_83C2D40, 0x0800, 4611
-
-gUnknown_83C67F0::
- .4byte 0xc0000400, 0x00000800
-
-gUnknown_83C67F8::
- obj_image_anim_frame 0x0000, 16
- obj_image_anim_end
-
-gUnknown_83C6800::
- .4byte gUnknown_83C67F8
-
-gUnknown_83C6804:: @ 83C6804
- spr_template 4611, 4608, gUnknown_83C67F0, gUnknown_83C6800, NULL, gDummySpriteAffineAnimTable, Fog2SpriteCallback
-
-gUnknown_83C681C::
- .4byte 0xc0000400, 0x00000400
-
-gUnknown_83C6824::
- obj_image_anim_frame 0x0000, 3
- obj_image_anim_end
-
-gUnknown_83C682C::
- obj_image_anim_frame 0x0040, 3
- obj_image_anim_end
-
-gUnknown_83C6834::
- .4byte gUnknown_83C6824
- .4byte gUnknown_83C682C
-
-gUnknown_83C683C:: @ 83C683C
- spr_template 4612, 4608, gUnknown_83C681C, gUnknown_83C6834, NULL, gDummySpriteAffineAnimTable, SandstormSpriteCallback1
-
-gUnknown_83C6854:: @ 83C6854
- obj_tiles gUnknown_83C5BC0, 0x0a00, 4612
-
-gUnknown_83C685C:: @ 83C685C
- .2byte 0x0000, 0x0078, 0x0050, 0x00a0, 0x0028, 0x0000
-
-gUnknown_83C6868:: @ 83C6868
- .byte 0x28, 0x5a, 0x3c, 0x5a, 0x02, 0x3c, 0x28, 0x1e
-
-gUnknown_83C6870:: @ 83C6870
- obj_tiles gUnknown_83C4580, 0x0040, 4613
-
-gUnknown_83C6878:: @ 83C6878
- .2byte 0x0078, 0x00a0
- .2byte 0x0178, 0x00a0
- .2byte 0x0028, 0x008c
- .2byte 0x0128, 0x008c
- .2byte 0x00b4, 0x0082
- .2byte 0x01b4, 0x0082
- .2byte 0x003c, 0x00a0
- .2byte 0x01b4, 0x00a0
- .2byte 0x00dc, 0x00b4
- .2byte 0x01dc, 0x00b4
- .2byte 0x000a, 0x005a
- .2byte 0x010a, 0x005a
- .2byte 0x0100, 0x00a0
-
-gUnknown_83C68AC::
- obj_image_anim_frame 0x0000, 16
- obj_image_anim_frame 0x0001, 16
- obj_image_anim_end
-
-gUnknown_83C68B8::
- .4byte gUnknown_83C68AC
-
-gUnknown_83C68BC:: @ 83C68BC
- spr_template 4613, 4608, gOamData_AffineOff_ObjNormal_8x8, gUnknown_83C68B8, NULL, gDummySpriteAffineAnimTable, unc_0807DAB4
diff --git a/graphics/field_effects/unk_83C2D00.pal b/graphics/field_effects/unk_83C2D00.pal
deleted file mode 100644
index fe57a8c7f..000000000
--- a/graphics/field_effects/unk_83C2D00.pal
+++ /dev/null
@@ -1,19 +0,0 @@
-JASC-PAL
-0100
-16
-65 148 255
-180 222 255
-115 205 246
-131 197 255
-82 189 246
-172 238 246
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
diff --git a/graphics/field_effects/unk_83C2D20.pal b/graphics/field_effects/unk_83C2D20.pal
deleted file mode 100644
index 9516c7a19..000000000
--- a/graphics/field_effects/unk_83C2D20.pal
+++ /dev/null
@@ -1,19 +0,0 @@
-JASC-PAL
-0100
-16
-0 0 0
-255 230 139
-189 131 74
-238 197 123
-213 164 98
-164 106 49
-255 246 164
-222 205 164
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
diff --git a/graphics/field_effects/unk_83C3540.png b/graphics/field_effects/unk_83C3540.png
deleted file mode 100644
index 891e395ad..000000000
--- a/graphics/field_effects/unk_83C3540.png
+++ /dev/null
Binary files differ
diff --git a/graphics/field_effects/unk_83C4540.png b/graphics/field_effects/unk_83C4540.png
deleted file mode 100644
index 14cf009e5..000000000
--- a/graphics/field_effects/unk_83C4540.png
+++ /dev/null
Binary files differ
diff --git a/graphics/field_effects/unk_83C4580.png b/graphics/field_effects/unk_83C4580.png
deleted file mode 100644
index 6bc714152..000000000
--- a/graphics/field_effects/unk_83C4580.png
+++ /dev/null
Binary files differ
diff --git a/graphics/field_effects/unk_83C55C0.png b/graphics/field_effects/unk_83C55C0.png
deleted file mode 100644
index a367de4e7..000000000
--- a/graphics/field_effects/unk_83C55C0.png
+++ /dev/null
Binary files differ
diff --git a/graphics/field_effects/unk_83BFBE4.bin b/graphics/title_screen/unk_83BFBE4.bin
index 54748ea04..54748ea04 100644
--- a/graphics/field_effects/unk_83BFBE4.bin
+++ b/graphics/title_screen/unk_83BFBE4.bin
Binary files differ
diff --git a/graphics/field_effects/unk_83C0408.bin b/graphics/title_screen/unk_83C0408.bin
index 932da7b46..932da7b46 100644
--- a/graphics/field_effects/unk_83C0408.bin
+++ b/graphics/title_screen/unk_83C0408.bin
Binary files differ
diff --git a/graphics/field_effects/unk_83C0C00.bin b/graphics/title_screen/unk_83C0C00.bin
index 7271feda4..7271feda4 100644
--- a/graphics/field_effects/unk_83C0C00.bin
+++ b/graphics/title_screen/unk_83C0C00.bin
Binary files differ
diff --git a/graphics/field_effects/unk_83C139C.bin b/graphics/title_screen/unk_83C139C.bin
index f983e37a5..f983e37a5 100644
--- a/graphics/field_effects/unk_83C139C.bin
+++ b/graphics/title_screen/unk_83C139C.bin
Binary files differ
diff --git a/graphics/field_effects/unk_83C1BB8.bin b/graphics/title_screen/unk_83C1BB8.bin
index bba7a0909..bba7a0909 100644
--- a/graphics/field_effects/unk_83C1BB8.bin
+++ b/graphics/title_screen/unk_83C1BB8.bin
Binary files differ
diff --git a/graphics/field_effects/unk_83C2380.bin b/graphics/title_screen/unk_83C2380.bin
index 9e13c930b..9e13c930b 100644
--- a/graphics/field_effects/unk_83C2380.bin
+++ b/graphics/title_screen/unk_83C2380.bin
Binary files differ
diff --git a/graphics/field_effects/unk_83C45C0.png b/graphics/weather/ash.png
index f5ee4ce9c..901605078 100644
--- a/graphics/field_effects/unk_83C45C0.png
+++ b/graphics/weather/ash.png
Binary files differ
diff --git a/graphics/weather/bubble.png b/graphics/weather/bubble.png
new file mode 100644
index 000000000..05885a11d
--- /dev/null
+++ b/graphics/weather/bubble.png
Binary files differ
diff --git a/graphics/field_effects/unk_83C3D40.png b/graphics/weather/cloud.png
index 882fc213f..7eb3c61d9 100644
--- a/graphics/field_effects/unk_83C3D40.png
+++ b/graphics/weather/cloud.png
Binary files differ
diff --git a/graphics/field_effects/unk_83C2D40.png b/graphics/weather/fog_diagonal.png
index b3d52b9e6..198c6f494 100644
--- a/graphics/field_effects/unk_83C2D40.png
+++ b/graphics/weather/fog_diagonal.png
Binary files differ
diff --git a/graphics/weather/fog_horizontal.png b/graphics/weather/fog_horizontal.png
new file mode 100644
index 000000000..02e3cd3cb
--- /dev/null
+++ b/graphics/weather/fog_horizontal.png
Binary files differ
diff --git a/graphics/weather/rain.png b/graphics/weather/rain.png
new file mode 100644
index 000000000..eaaa0b4e3
--- /dev/null
+++ b/graphics/weather/rain.png
Binary files differ
diff --git a/graphics/field_effects/unk_83C5BC0.png b/graphics/weather/sandstorm.png
index 9896daac7..aeb03f59f 100644
--- a/graphics/field_effects/unk_83C5BC0.png
+++ b/graphics/weather/sandstorm.png
Binary files differ
diff --git a/graphics/weather/snow0.png b/graphics/weather/snow0.png
new file mode 100644
index 000000000..1e3553172
--- /dev/null
+++ b/graphics/weather/snow0.png
Binary files differ
diff --git a/graphics/weather/snow1.png b/graphics/weather/snow1.png
new file mode 100644
index 000000000..7277d51d4
--- /dev/null
+++ b/graphics/weather/snow1.png
Binary files differ
diff --git a/include/blend_palette.h b/include/blend_palette.h
index 4ece15d69..7f0826187 100644
--- a/include/blend_palette.h
+++ b/include/blend_palette.h
@@ -10,5 +10,6 @@
// Exported ROM declarations
void BlendPalette(u16, u16, u8, u16);
+void sub_8045314(u16 * palbuff, u16 blend_pal, u32 coefficient, s32 size);
#endif //GUARD_BLEND_PALETTE_H
diff --git a/include/constants/weather.h b/include/constants/weather.h
index 77be45c51..241dc5e2a 100644
--- a/include/constants/weather.h
+++ b/include/constants/weather.h
@@ -16,5 +16,7 @@
#define WEATHER_DROUGHT 12 // unused and broken in overworld
#define WEATHER_DOWNPOUR 13 // unused
#define WEATHER_UNDERWATER_BUBBLES 14 // unused
+#define WEATHER_ROUTE119_CYCLE 20 // unused
+#define WEATHER_ROUTE123_CYCLE 21 // unused
#endif // GUARD_CONSTANTS_WEATHER_H
diff --git a/include/field_weather.h b/include/field_weather.h
index 6b62f0edd..432c8c100 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -2,6 +2,114 @@
#define GUARD_WEATHER_H
#include "global.h"
+#include "constants/field_weather.h"
+
+struct Weather
+{
+ union
+ {
+ struct
+ {
+ struct Sprite *rainSprites[MAX_RAIN_SPRITES];
+ struct Sprite *snowflakeSprites[101];
+ struct Sprite *cloudSprites[NUM_CLOUD_SPRITES];
+ } s1;
+ struct
+ {
+ u8 filler0[0xA0];
+ struct Sprite *fogHSprites[NUM_FOG_HORIZONTAL_SPRITES];
+ struct Sprite *ashSprites[NUM_ASH_SPRITES];
+ struct Sprite *fogDSprites[NUM_FOG_DIAGONAL_SPRITES];
+ struct Sprite *sandstormSprites1[NUM_SANDSTORM_SPRITES];
+ struct Sprite *sandstormSprites2[NUM_SWIRL_SANDSTORM_SPRITES];
+ } s2;
+ } sprites;
+ u8 gammaShifts[19][32];
+ u8 altGammaShifts[19][32];
+ s8 gammaIndex;
+ s8 gammaTargetIndex;
+ u8 gammaStepDelay;
+ u8 gammaStepFrameCounter;
+ u16 fadeDestColor;
+ u8 palProcessingState;
+ u8 fadeScreenCounter;
+ bool8 readyForInit;
+ u8 taskId;
+ u8 unknown_6CA;
+ u8 unknown_6CB;
+ u16 initStep;
+ u16 finishStep;
+ u8 currWeather;
+ u8 nextWeather;
+ u8 weatherGfxLoaded;
+ bool8 weatherChangeComplete;
+ u8 weatherPicSpritePalIndex;
+ u8 altGammaSpritePalIndex;
+ u16 rainSpriteVisibleCounter;
+ u8 curRainSpriteIndex;
+ u8 targetRainSpriteCount;
+ u8 rainSpriteCount;
+ u8 rainSpriteVisibleDelay;
+ u8 isDownpour;
+ u8 rainStrength;
+ bool8 cloudSpritesCreated;
+ u16 snowflakeVisibleCounter;
+ u16 unknown_6E2;
+ u8 snowflakeSpriteCount;
+ u8 targetSnowflakeSpriteCount;
+ u16 unknown_6E6;
+ u16 thunderCounter;
+ u8 unknown_6EA;
+ u8 unknown_6EB;
+ u8 unknown_6EC;
+ bool8 thunderTriggered;
+ u16 fogHScrollPosX;
+ u16 fogHScrollCounter;
+ u16 fogHScrollOffset;
+ u8 lightenedFogSpritePals[6];
+ u8 lightenedFogSpritePalsCount;
+ bool8 fogHSpritesCreated;
+ u16 ashBaseSpritesX;
+ u16 unknown_6FE;
+ bool8 ashSpritesCreated;
+ u32 sandstormXOffset;
+ u32 sandstormYOffset;
+ u8 filler_70C[2];
+ u16 sandstormBaseSpritesX;
+ u16 sandstormPosY;
+ u16 sandstormWaveIndex;
+ u16 sandstormWaveCounter;
+ bool8 sandstormSpritesCreated;
+ bool8 sandstormSwirlSpritesCreated;
+ u16 fogDBaseSpritesX;
+ u16 fogDPosY;
+ u16 fogDScrollXCounter;
+ u16 fogDScrollYCounter;
+ u16 fogDXOffset;
+ u16 fogDYOffset;
+ bool8 fogDSpritesCreated;
+ u16 bubblesDelayCounter;
+ u16 bubblesDelayIndex;
+ u16 bubblesCoordsIndex;
+ u16 bubblesSpriteCount;
+ bool8 bubblesSpritesCreated;
+ u16 currBlendEVA;
+ u16 currBlendEVB;
+ u16 targetBlendEVA;
+ u16 targetBlendEVB;
+ u8 blendUpdateCounter;
+ u8 blendFrameCounter;
+ u8 blendDelay;
+ s16 unknown_73C;
+ s16 unknown_73E;
+ s16 unknown_740;
+ s16 unknown_742;
+ u8 filler_744[0xD-4];
+ s8 loadDroughtPalsIndex;
+ u8 loadDroughtPalsOffset;
+};
+
+extern struct Weather *const gWeatherPtr;
void FadeScreen(u8 mode, s8 delay);
@@ -17,9 +125,35 @@ bool8 IsWeatherNotFadingIn(void);
void SetWeatherScreenFadeOut(void);
void sub_807B070(void);
u8 GetCurrentWeather(void);
-void FieldWeather_StartFadingOutCreditsMap(u8, u8, u32);
+void delay(u8, u8, u32);
void UpdateSpritePaletteWithWeather(u8 palIdx);
void ResetPreservedPalettesInWeather(void);
void PreservePaletteInWeather(u8 palIdx);
+void SetNextWeather(u8 weather);
+void SetCurrentAndNextWeather(u8 weather);
+void Weather_SetBlendCoeffs(u8 eva, u8 evb);
+void Weather_SetTargetBlendCoeffs(u8 eva, u8 evb, int delay);
+bool8 Weather_UpdateBlend(void);
+void LoadCustomWeatherSpritePalette(const u16 *palette);
+void ResetDroughtWeatherPaletteLoading(void);
+bool8 LoadDroughtWeatherPalettes(void);
+void sub_807AC60(void);
+void sub_807AC98(void);
+void SetRainStrengthFromSoundEffect(u16 soundEffect);
+void sub_807A790(s8 gammaIndex);
+void sub_807A7C4(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay);
+
+extern const u16 gCloudsWeatherPalette[];
+extern const u16 gSandstormWeatherPalette[];
+extern const u8 gWeatherFogDiagonalTiles[];
+extern const u8 gWeatherFogHorizontalTiles[];
+extern const u8 gWeatherCloudTiles[];
+extern const u8 gWeatherSnow1Tiles[];
+extern const u8 gWeatherSnow2Tiles[];
+extern const u8 gWeatherBubbleTiles[];
+extern const u8 gWeatherAshTiles[];
+extern const u8 gWeatherRainTiles[];
+extern const u8 gWeatherSandstormTiles[];
+
#endif // GUARD_WEATHER_H
diff --git a/include/field_weather_effects.h b/include/field_weather_effects.h
new file mode 100644
index 000000000..8ff3bae9c
--- /dev/null
+++ b/include/field_weather_effects.h
@@ -0,0 +1,55 @@
+#ifndef GUARD_FIELD_WEATHER_EFFECTS_H
+#define GUARD_FIELD_WEATHER_EFFECTS_H
+
+bool8 Ash_Finish(void);
+bool8 Bubbles_Finish(void);
+bool8 Clouds_Finish(void);
+bool8 FogHorizontal_Finish(void);
+bool8 FogDiagonal_Finish(void);
+bool8 Rain_Finish(void);
+bool8 Thunderstorm_Finish(void);
+bool8 Sandstorm_Finish(void);
+bool8 Snow_Finish(void);
+bool8 Sunny_Finish(void);
+bool8 Drought_Finish(void);
+bool8 Shade_Finish(void);
+void Ash_InitAll(void);
+void Ash_InitVars(void);
+void Ash_Main(void);
+void Bubbles_InitAll(void);
+void Bubbles_InitVars(void);
+void Bubbles_Main(void);
+void Clouds_InitAll(void);
+void Clouds_InitVars(void);
+void Clouds_Main(void);
+void Drought_InitAll(void);
+void Drought_InitVars(void);
+void Drought_Main(void);
+void FogHorizontal_InitAll(void);
+void FogHorizontal_InitVars(void);
+void FogHorizontal_Main(void);
+void FogDiagonal_InitAll(void);
+void FogDiagonal_InitVars(void);
+void FogDiagonal_Main(void);
+void Rain_InitAll(void);
+void Rain_InitVars(void);
+void Rain_Main(void);
+void Thunderstorm_Main(void);
+void Sandstorm_InitAll(void);
+void Sandstorm_InitVars(void);
+void Sandstorm_Main(void);
+void Snow_InitAll(void);
+void Snow_InitVars(void);
+void Shade_InitAll(void);
+void Shade_InitVars(void);
+void Sunny_InitAll(void);
+void Sunny_InitVars(void);
+void Sunny_Main(void);
+void Shade_Main(void);
+void Snow_Main(void);
+void Thunderstorm_InitVars(void);
+void Thunderstorm_InitAll(void);
+void Downpour_InitVars(void);
+void Downpour_InitAll(void);
+
+#endif //GUARD_FIELD_WEATHER_EFFECTS_H
diff --git a/include/field_weather_util.h b/include/field_weather_util.h
new file mode 100644
index 000000000..da49d3869
--- /dev/null
+++ b/include/field_weather_util.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_FIELD_WEATHER_UTIL_H
+#define GUARD_FIELD_WEATHER_UTIL_H
+
+void SetWeather(u8 weather);
+
+#endif //GUARD_FIELD_WEATHER_UTIL_H
diff --git a/include/global.h b/include/global.h
index 8a8877143..b2fd67b4b 100644
--- a/include/global.h
+++ b/include/global.h
@@ -749,7 +749,7 @@ struct SaveBlock1
/*0x0024*/ struct WarpData escapeWarp;
/*0x002C*/ u16 savedMusic;
/*0x002E*/ u8 weather;
- /*0x002F*/ u8 filler_2F;
+ /*0x002F*/ u8 weatherCycleStage;
/*0x0030*/ u8 flashLevel;
/*0x0032*/ u16 mapLayoutId;
/*0x0034*/ u8 playerPartyCount;
diff --git a/include/graphics.h b/include/graphics.h
index 3930861f8..8978719a8 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4322,7 +4322,7 @@ extern const u32 gSubstituteDollTilemap[];
extern const u32 gSubstituteDollPal[];
// ice
-extern const u8 gWeatherFog1Tiles[];
+extern const u8 gWeatherFogHorizontalTiles[];
extern const u32 gBattleAnimFogTilemap[];
extern const u16 gUnknown_83C2CE0[];
diff --git a/ld_script.txt b/ld_script.txt
index 4538c714e..01e1d0eb3 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -114,8 +114,9 @@ SECTIONS {
src/battle_anim_status_effects.o(.text);
src/title_screen.o(.text);
src/reset_save_heap.o(.text);
- asm/field_weather.o(.text);
- asm/field_weather_effects.o(.text);
+ src/field_weather.o(.text);
+ src/field_weather_util.o(.text);
+ src/field_weather_effects.o(.text);
src/field_fadetransition.o(.text);
src/field_screen_effect.o(.text);
src/battle_setup.o(.text);
@@ -446,7 +447,9 @@ SECTIONS {
data/map_events.o(.rodata);
src/battle_anim_status_effects.o(.rodata);
src/title_screen.o(.rodata);
- data/field_weather.o(.rodata);
+ src/field_weather.o(.rodata);
+ src/field_weather_util.o(.rodata);
+ src/field_weather_effects.o(.rodata);
src/field_screen_effect.o(.rodata);
src/battle_setup.o(.rodata);
src/cable_club.o(.rodata);
diff --git a/src/credits.c b/src/credits.c
index e0d57a2a4..4d7bbd67b 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -910,7 +910,7 @@ static s32 RollCredits(void)
case CREDITSSCRCMD_MAPNEXT:
sCreditsMgr->mainseqno = CREDITSSCENE_MAPNEXT_DESTROYWINDOW;
sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
- FieldWeather_StartFadingOutCreditsMap(1, 0, 0x3FFFFFFF);
+ FadeSelectedPals(1, 0, 0x3FFFFFFF);
break;
case CREDITSSCRCMD_MAP:
sCreditsMgr->mainseqno = CREDITSSCENE_MAP_LOADMAP_CREATESPRITES;
@@ -1305,7 +1305,7 @@ static s32 RollCredits(void)
"\tldr r2, _080F3E0C @ =0x3fffffff\n"
"\tmovs r0, 0x1\n"
"\tmovs r1, 0\n"
- "\tbl FieldWeather_StartFadingOutCreditsMap\n"
+ "\tbl FadeSelectedPals\n"
"\tb _080F3E94\n"
"\t.align 2, 0\n"
"_080F3E04: .4byte sCreditsMgr\n"
diff --git a/src/field_weather.c b/src/field_weather.c
new file mode 100644
index 000000000..1185f5763
--- /dev/null
+++ b/src/field_weather.c
@@ -0,0 +1,1169 @@
+#include "global.h"
+#include "gflib.h"
+#include "blend_palette.h"
+#include "field_effect.h"
+#include "field_weather.h"
+#include "field_weather_util.h"
+#include "field_weather_effects.h"
+#include "task.h"
+#include "trig.h"
+#include "constants/field_weather.h"
+#include "constants/weather.h"
+#include "constants/songs.h"
+
+#define DROUGHT_COLOR_INDEX(color) ((((color) >> 1) & 0xF) | (((color) >> 2) & 0xF0) | (((color) >> 3) & 0xF00))
+
+enum
+{
+ GAMMA_NONE,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+};
+
+struct RGBColor
+{
+ u16 r:5;
+ u16 g:5;
+ u16 b:5;
+};
+
+struct WeatherPaletteData
+{
+ u16 gammaShiftColors[8][0x1000]; // 0x1000 is the number of bytes that make up all palettes.
+};
+
+struct WeatherCallbacks
+{
+ void (*initVars)(void);
+ void (*main)(void);
+ void (*initAll)(void);
+ bool8 (*finish)(void);
+};
+
+static EWRAM_DATA struct Weather sWeather = {};
+static EWRAM_DATA u8 sFieldEffectPaletteGammaTypes[32] = {};
+static EWRAM_DATA const u8 *sPaletteGammaTypes = NULL;
+static EWRAM_DATA u16 gUnknown_20386A8 = 0;
+
+static void Task_WeatherMain(u8 taskId);
+static void Task_WeatherInit(u8 taskId);
+static void None_Init(void);
+static void None_Main(void);
+static bool8 None_Finish(void);
+static void BuildGammaShiftTables(void);
+static void UpdateWeatherGammaShift(void);
+static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex);
+static void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor);
+static void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor);
+static void FadeInScreenWithWeather(void);
+static bool8 FadeInScreen_RainShowShade(void);
+static bool8 FadeInScreen_Drought(void);
+static bool8 FadeInScreen_FogHorizontal(void);
+static void DoNothing(void);
+static void ApplyFogBlend(u8 blendCoeff, u16 blendColor);
+static bool8 LightenSpritePaletteInFog(u8 paletteIndex);
+
+struct Weather *const gWeatherPtr = &sWeather;
+
+static const struct WeatherCallbacks sWeatherFuncs[] = {
+ {None_Init, None_Main, None_Init, None_Finish},
+ {Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish},
+ {Sunny_InitVars, Sunny_Main, Sunny_InitAll, Sunny_Finish},
+ {Rain_InitVars, Rain_Main, Rain_InitAll, Rain_Finish},
+ {Snow_InitVars, Snow_Main, Snow_InitAll, Snow_Finish},
+ {Thunderstorm_InitVars, Thunderstorm_Main, Thunderstorm_InitAll, Thunderstorm_Finish},
+ {FogHorizontal_InitVars, FogHorizontal_Main, FogHorizontal_InitAll, FogHorizontal_Finish},
+ {Ash_InitVars, Ash_Main, Ash_InitAll, Ash_Finish},
+ {Sandstorm_InitVars, Sandstorm_Main, Sandstorm_InitAll, Sandstorm_Finish},
+ {FogDiagonal_InitVars, FogDiagonal_Main, FogDiagonal_InitAll, FogDiagonal_Finish},
+ {FogHorizontal_InitVars, FogHorizontal_Main, FogHorizontal_InitAll, FogHorizontal_Finish},
+ {Shade_InitVars, Shade_Main, Shade_InitAll, Shade_Finish},
+ {Drought_InitVars, Drought_Main, Drought_InitAll, Drought_Finish},
+ {Downpour_InitVars, Thunderstorm_Main, Downpour_InitAll, Thunderstorm_Finish},
+ {Bubbles_InitVars, Bubbles_Main, Bubbles_InitAll, Bubbles_Finish},
+};
+
+static void (*const sWeatherPalStateFuncs[])(void) = {
+ UpdateWeatherGammaShift,
+ FadeInScreenWithWeather,
+ DoNothing,
+ DoNothing
+};
+
+static const u8 sBasePaletteGammaTypes[32] = {
+ // background palettes
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NONE,
+ GAMMA_NONE,
+ GAMMA_NONE,
+ // sprite palettes
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+};
+
+const u16 gUnknown_83C2CE0[] = INCBIN_U16("graphics/field_effects/unk_83C2CE0.gbapal");
+const u16 gCloudsWeatherPalette[] = INCBIN_U16("graphics/weather/cloud.gbapal");
+const u16 gSandstormWeatherPalette[] = INCBIN_U16("graphics/weather/sandstorm.gbapal");
+const u8 gWeatherFogDiagonalTiles[] = INCBIN_U8("graphics/weather/fog_diagonal.4bpp");
+const u8 gWeatherFogHorizontalTiles[] = INCBIN_U8("graphics/weather/fog_horizontal.4bpp");
+const u8 gWeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp");
+const u8 gWeatherSnow1Tiles[] = INCBIN_U8("graphics/weather/snow0.4bpp");
+const u8 gWeatherSnow2Tiles[] = INCBIN_U8("graphics/weather/snow1.4bpp");
+const u8 gWeatherBubbleTiles[] = INCBIN_U8("graphics/weather/bubble.4bpp");
+const u8 gWeatherAshTiles[] = INCBIN_U8("graphics/weather/ash.4bpp");
+const u8 gWeatherRainTiles[] = INCBIN_U8("graphics/weather/rain.4bpp");
+const u8 gWeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp");
+
+// code
+void StartWeather(void)
+{
+ if (!FuncIsActiveTask(Task_WeatherMain))
+ {
+ u8 index = AllocSpritePalette(0x1200);
+ CpuCopy32(gUnknown_83C2CE0, &gPlttBufferUnfaded[0x100 + index * 16], 32);
+ sub_8083598(index);
+ BuildGammaShiftTables();
+ gWeatherPtr->altGammaSpritePalIndex = index;
+ gWeatherPtr->weatherPicSpritePalIndex = index;
+ gWeatherPtr->rainSpriteCount = 0;
+ gWeatherPtr->curRainSpriteIndex = 0;
+ gWeatherPtr->cloudSpritesCreated = FALSE;
+ gWeatherPtr->snowflakeSpriteCount = 0;
+ gWeatherPtr->ashSpritesCreated = FALSE;
+ gWeatherPtr->fogHSpritesCreated = FALSE;
+ gWeatherPtr->fogDSpritesCreated = FALSE;
+ gWeatherPtr->sandstormSpritesCreated = FALSE;
+ gWeatherPtr->sandstormSwirlSpritesCreated = FALSE;
+ gWeatherPtr->bubblesSpritesCreated = FALSE;
+ gWeatherPtr->lightenedFogSpritePalsCount = 0;
+ Weather_SetBlendCoeffs(16, 0);
+ gWeatherPtr->currWeather = WEATHER_NONE;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ gWeatherPtr->readyForInit = FALSE;
+ gWeatherPtr->weatherChangeComplete = TRUE;
+ gWeatherPtr->taskId = CreateTask(Task_WeatherInit, 80);
+ }
+}
+
+void SetNextWeather(u8 weather)
+{
+ if (weather != WEATHER_RAIN && weather != WEATHER_RAIN_THUNDERSTORM && weather != WEATHER_DOWNPOUR)
+ {
+ PlayRainStoppingSoundEffect();
+ }
+
+ if (gWeatherPtr->nextWeather != weather && gWeatherPtr->currWeather == weather)
+ {
+ sWeatherFuncs[weather].initVars();
+ }
+
+ gWeatherPtr->weatherChangeComplete = FALSE;
+ gWeatherPtr->nextWeather = weather;
+ gWeatherPtr->finishStep = 0;
+}
+
+
+void SetCurrentAndNextWeather(u8 weather)
+{
+ PlayRainStoppingSoundEffect();
+ gWeatherPtr->currWeather = weather;
+ gWeatherPtr->nextWeather = weather;
+}
+
+static void SetCurrentAndNextWeatherNoDelay(u8 weather)
+{
+ PlayRainStoppingSoundEffect();
+ gWeatherPtr->currWeather = weather;
+ gWeatherPtr->nextWeather = weather;
+ // Overrides the normal delay during screen fading.
+ gWeatherPtr->readyForInit = TRUE;
+}
+
+static void Task_WeatherInit(u8 taskId)
+{
+ // Waits until it's ok to initialize weather.
+ // When the screen fades in, this is set to TRUE.
+ if (gWeatherPtr->readyForInit)
+ {
+ sWeatherFuncs[gWeatherPtr->currWeather].initAll();
+ gTasks[taskId].func = Task_WeatherMain;
+ }
+}
+
+static void Task_WeatherMain(u8 taskId)
+{
+ if (gWeatherPtr->currWeather != gWeatherPtr->nextWeather)
+ {
+ if (!sWeatherFuncs[gWeatherPtr->currWeather].finish()
+ /*&& gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_OUT*/)
+ {
+ // Finished cleaning up previous weather. Now transition to next weather.
+ sWeatherFuncs[gWeatherPtr->nextWeather].initVars();
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_CHANGING_WEATHER;
+ gWeatherPtr->currWeather = gWeatherPtr->nextWeather;
+ gWeatherPtr->weatherChangeComplete = TRUE;
+ }
+ }
+ else
+ {
+ sWeatherFuncs[gWeatherPtr->currWeather].main();
+ }
+
+ sWeatherPalStateFuncs[gWeatherPtr->palProcessingState]();
+}
+
+
+static void None_Init(void)
+{
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 0;
+}
+
+static void None_Main(void)
+{
+}
+
+static u8 None_Finish(void)
+{
+ return 0;
+}
+
+// Builds two tables that contain gamma shifts for palette colors.
+// It's unclear why the two tables aren't declared as const arrays, since
+// this function always builds the same two tables.
+static void BuildGammaShiftTables(void)
+{
+ u16 v0;
+ u8 (*gammaTable)[32];
+ u16 v2;
+ u16 v4;
+ u16 v5;
+ u16 gammaIndex;
+ u16 v9;
+ u32 v10;
+ u16 v11;
+ s16 dunno;
+
+ sPaletteGammaTypes = sBasePaletteGammaTypes;
+ for (v0 = 0; v0 <= 1; v0++)
+ {
+ if (v0 == 0)
+ gammaTable = gWeatherPtr->gammaShifts;
+ else
+ gammaTable = gWeatherPtr->altGammaShifts;
+
+ for (v2 = 0; v2 < 32; v2++)
+ {
+ v4 = v2 << 8;
+ if (v0 == 0)
+ v5 = (v2 << 8) / 16;
+ else
+ v5 = 0;
+ for (gammaIndex = 0; gammaIndex <= 2; gammaIndex++)
+ {
+ v4 = (v4 - v5);
+ gammaTable[gammaIndex][v2] = v4 >> 8;
+ }
+ v9 = v4;
+ v10 = 0x1f00 - v4;
+ if ((0x1f00 - v4) < 0)
+ {
+ v10 += 0xf;
+ }
+ v11 = v10 >> 4;
+ if (v2 < 12)
+ {
+ for (; gammaIndex < 19; gammaIndex++)
+ {
+ v4 += v11;
+ dunno = v4 - v9;
+ if (dunno > 0)
+ v4 -= (dunno + ((u16)dunno >> 15)) >> 1;
+ gammaTable[gammaIndex][v2] = v4 >> 8;
+ if (gammaTable[gammaIndex][v2] > 0x1f)
+ gammaTable[gammaIndex][v2] = 0x1f;
+ }
+ }
+ else
+ {
+ for (; gammaIndex < 19; gammaIndex++)
+ {
+ v4 += v11;
+ gammaTable[gammaIndex][v2] = v4 >> 8;
+ if (gammaTable[gammaIndex][v2] > 0x1f)
+ gammaTable[gammaIndex][v2] = 0x1f;
+ }
+ }
+ }
+ }
+}
+
+// When the weather is changing, it gradually updates the palettes
+// towards the desired gamma shift.
+static void UpdateWeatherGammaShift(void)
+{
+ if (gWeatherPtr->gammaIndex == gWeatherPtr->gammaTargetIndex)
+ {
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ else
+ {
+ if (++gWeatherPtr->gammaStepFrameCounter >= gWeatherPtr->gammaStepDelay)
+ {
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ if (gWeatherPtr->gammaIndex < gWeatherPtr->gammaTargetIndex)
+ gWeatherPtr->gammaIndex++;
+ else
+ gWeatherPtr->gammaIndex--;
+
+ ApplyGammaShift(0, 32, gWeatherPtr->gammaIndex);
+ }
+ }
+}
+
+static void FadeInScreenWithWeather(void)
+{
+ if (++gWeatherPtr->unknown_6CB > 1)
+ gWeatherPtr->unknown_6CA = 0;
+
+ switch (gWeatherPtr->currWeather)
+ {
+ case WEATHER_RAIN:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_DOWNPOUR:
+ case WEATHER_SNOW:
+ case WEATHER_SHADE:
+ if (FadeInScreen_RainShowShade() == FALSE)
+ {
+ gWeatherPtr->gammaIndex = 3;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ break;
+ case WEATHER_DROUGHT:
+ if (FadeInScreen_Drought() == FALSE)
+ {
+ gWeatherPtr->gammaIndex = -6;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ break;
+ case WEATHER_FOG_HORIZONTAL:
+ if (FadeInScreen_FogHorizontal() == FALSE)
+ {
+ gWeatherPtr->gammaIndex = 0;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ break;
+ case WEATHER_VOLCANIC_ASH:
+ case WEATHER_SANDSTORM:
+ case WEATHER_FOG_DIAGONAL:
+ case WEATHER_UNDERWATER:
+ default:
+ if (!gPaletteFade.active)
+ {
+ gWeatherPtr->gammaIndex = gWeatherPtr->gammaTargetIndex;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ break;
+ }
+}
+
+static bool8 FadeInScreen_RainShowShade(void)
+{
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ if (++gWeatherPtr->fadeScreenCounter >= 16)
+ {
+ ApplyGammaShift(0, 32, 3);
+ gWeatherPtr->fadeScreenCounter = 16;
+ return FALSE;
+ }
+
+ ApplyGammaShiftWithBlend(0, 32, 3, 16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
+}
+
+static bool8 FadeInScreen_Drought(void)
+{
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ if (++gWeatherPtr->fadeScreenCounter >= 16)
+ {
+ ApplyGammaShift(0, 32, -6);
+ gWeatherPtr->fadeScreenCounter = 16;
+ return FALSE;
+ }
+
+ ApplyDroughtGammaShiftWithBlend(-6, 16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
+}
+
+static bool8 FadeInScreen_FogHorizontal(void)
+{
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ gWeatherPtr->fadeScreenCounter++;
+ ApplyFogBlend(16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
+}
+
+static void DoNothing(void)
+{ }
+
+static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex)
+{
+ u16 curPalIndex;
+ u16 palOffset;
+ u8 *gammaTable;
+ u16 i;
+
+ if (gammaIndex > 0)
+ {
+ gammaIndex--;
+ palOffset = startPalIndex * 16;
+ numPalettes += startPalIndex;
+ curPalIndex = startPalIndex;
+
+ // Loop through the speficied palette range and apply necessary gamma shifts to the colors.
+ while (curPalIndex < numPalettes)
+ {
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
+ {
+ // No palette change.
+ CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
+ palOffset += 16;
+ }
+ else
+ {
+ u8 r, g, b;
+
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_ALT || curPalIndex - 16 == gWeatherPtr->altGammaSpritePalIndex)
+ gammaTable = gWeatherPtr->altGammaShifts[gammaIndex];
+ else
+ gammaTable = gWeatherPtr->gammaShifts[gammaIndex];
+
+ for (i = 0; i < 16; i++)
+ {
+ // Apply gamma shift to the original color.
+ struct RGBColor baseColor = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ r = gammaTable[baseColor.r];
+ g = gammaTable[baseColor.g];
+ b = gammaTable[baseColor.b];
+ gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
+ }
+ }
+
+ curPalIndex++;
+ }
+ }
+ else if (gammaIndex < 0)
+ {
+ // A negative gammIndex value means that the blending will come from the special Drought weather's palette tables.
+ // Dummied out in FRLG
+
+ // gammaIndex = -gammaIndex - 1;
+ // palOffset = startPalIndex * 16;
+ // numPalettes += startPalIndex;
+ // curPalIndex = startPalIndex;
+ //
+ // CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
+ // while (curPalIndex < numPalettes)
+ // {
+ // if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
+ // {
+ // // No palette change.
+ // palOffset += 16;
+ // }
+ // else
+ // {
+ //
+ // for (i = 0; i < 16; i++)
+ // {
+ // gPlttBufferFaded[palOffset] = sDroughtWeatherColors[gammaIndex][DROUGHT_COLOR_INDEX(gPlttBufferUnfaded[palOffset])];
+ // palOffset++;
+ // }
+ // }
+ //
+ // curPalIndex++;
+ // }
+ }
+ else
+ {
+ // No palette blending.
+ CpuFastCopy(gPlttBufferUnfaded + startPalIndex * 16, gPlttBufferFaded + startPalIndex * 16, numPalettes * 16 * sizeof(u16));
+ }
+}
+
+static void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor)
+{
+ u16 palOffset;
+ u16 curPalIndex;
+ u16 i;
+ struct RGBColor color = *(struct RGBColor *)&blendColor;
+ u8 rBlend = color.r;
+ u8 gBlend = color.g;
+ u8 bBlend = color.b;
+
+ palOffset = startPalIndex * 16;
+ numPalettes += startPalIndex;
+ gammaIndex--;
+ curPalIndex = startPalIndex;
+
+ while (curPalIndex < numPalettes)
+ {
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
+ {
+ // No gamma shift. Simply blend the colors.
+ BlendPalette(palOffset, 16, blendCoeff, blendColor);
+ palOffset += 16;
+ }
+ else
+ {
+ u8 *gammaTable;
+
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NORMAL)
+ gammaTable = gWeatherPtr->gammaShifts[gammaIndex];
+ else
+ gammaTable = gWeatherPtr->altGammaShifts[gammaIndex];
+
+ for (i = 0; i < 16; i++)
+ {
+ struct RGBColor baseColor = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ u8 r = gammaTable[baseColor.r];
+ u8 g = gammaTable[baseColor.g];
+ u8 b = gammaTable[baseColor.b];
+
+ // Apply gamma shift and target blend color to the original color.
+ r += ((rBlend - r) * blendCoeff) >> 4;
+ g += ((gBlend - g) * blendCoeff) >> 4;
+ b += ((bBlend - b) * blendCoeff) >> 4;
+ gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
+ }
+ }
+
+ curPalIndex++;
+ }
+}
+
+static void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor)
+{
+ struct RGBColor color;
+ u8 rBlend;
+ u8 gBlend;
+ u8 bBlend;
+ u16 curPalIndex;
+ u16 palOffset;
+ u16 i;
+
+ gammaIndex = -gammaIndex - 1;
+ color = *(struct RGBColor *)&blendColor;
+ rBlend = color.r;
+ gBlend = color.g;
+ bBlend = color.b;
+ palOffset = 0;
+ for (curPalIndex = 0; curPalIndex < 32; curPalIndex++)
+ {
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
+ {
+ // No gamma shift. Simply blend the colors.
+ BlendPalette(palOffset, 16, blendCoeff, blendColor);
+ palOffset += 16;
+ }
+ else
+ {
+ for (i = 0; i < 16; i++)
+ {
+ u32 offset;
+ struct RGBColor color1;
+ struct RGBColor color2;
+ u8 r1, g1, b1;
+ u8 r2, g2, b2;
+
+ color1 = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ r1 = color1.r;
+ g1 = color1.g;
+ b1 = color1.b;
+
+ r1 += ((rBlend - r1) * blendCoeff) >> 4;
+ g1 += ((gBlend - g1) * blendCoeff) >> 4;
+ b1 += ((bBlend - b1) * blendCoeff) >> 4;
+
+ gPlttBufferFaded[palOffset++] = (b1 << 10) | (g1 << 5) | r1;
+ }
+ }
+ }
+}
+
+static void ApplyFogBlend(u8 blendCoeff, u16 blendColor)
+{
+ struct RGBColor color;
+ u8 rBlend;
+ u8 gBlend;
+ u8 bBlend;
+ u16 curPalIndex;
+
+ BlendPalette(0, 256, blendCoeff, blendColor);
+ color = *(struct RGBColor *)&blendColor;
+ rBlend = color.r;
+ gBlend = color.g;
+ bBlend = color.b;
+
+ for (curPalIndex = 16; curPalIndex < 32; curPalIndex++)
+ {
+ if (LightenSpritePaletteInFog(curPalIndex))
+ {
+ u16 palEnd = (curPalIndex + 1) * 16;
+ u16 palOffset = curPalIndex * 16;
+
+ while (palOffset < palEnd)
+ {
+ struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ u8 r = color.r;
+ u8 g = color.g;
+ u8 b = color.b;
+
+ r += ((28 - r) * 3) >> 2;
+ g += ((31 - g) * 3) >> 2;
+ b += ((28 - b) * 3) >> 2;
+
+ r += ((rBlend - r) * blendCoeff) >> 4;
+ g += ((gBlend - g) * blendCoeff) >> 4;
+ b += ((bBlend - b) * blendCoeff) >> 4;
+
+ gPlttBufferFaded[palOffset] = (b << 10) | (g << 5) | r;
+ palOffset++;
+ }
+ }
+ else
+ {
+ BlendPalette(curPalIndex * 16, 16, blendCoeff, blendColor);
+ }
+ }
+}
+
+static void MarkFogSpritePalToLighten(u8 paletteIndex)
+{
+ if (gWeatherPtr->lightenedFogSpritePalsCount < 6)
+ {
+ gWeatherPtr->lightenedFogSpritePals[gWeatherPtr->lightenedFogSpritePalsCount] = paletteIndex;
+ gWeatherPtr->lightenedFogSpritePalsCount++;
+ }
+}
+
+static bool8 LightenSpritePaletteInFog(u8 paletteIndex)
+{
+ u16 i;
+
+ for (i = 0; i < gWeatherPtr->lightenedFogSpritePalsCount; i++)
+ {
+ if (gWeatherPtr->lightenedFogSpritePals[i] == paletteIndex)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void sub_807A790(s8 gammaIndex)
+{
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
+ {
+ ApplyGammaShift(0, 32, gammaIndex);
+ gWeatherPtr->gammaIndex = gammaIndex;
+ }
+}
+
+void sub_807A7C4(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay)
+{
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
+ {
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_CHANGING_WEATHER;
+ gWeatherPtr->gammaIndex = gammaIndex;
+ gWeatherPtr->gammaTargetIndex = gammaTargetIndex;
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ gWeatherPtr->gammaStepDelay = gammaStepDelay;
+ sub_807A790(gammaIndex);
+ }
+}
+
+void FadeScreen(u8 mode, s8 delay)
+{
+ u32 fadeColor;
+ bool8 fadeOut;
+ bool8 useWeatherPal;
+
+ switch (mode)
+ {
+ case FADE_FROM_BLACK:
+ fadeColor = RGB_BLACK;
+ fadeOut = FALSE;
+ break;
+ case FADE_FROM_WHITE:
+ fadeColor = RGB_WHITEALPHA;
+ fadeOut = FALSE;
+ break;
+ case FADE_TO_BLACK:
+ fadeColor = RGB_BLACK;
+ fadeOut = TRUE;
+ break;
+ case FADE_TO_WHITE:
+ fadeColor = RGB_WHITEALPHA;
+ fadeOut = TRUE;
+ break;
+ default:
+ return;
+ }
+
+ switch (gWeatherPtr->currWeather)
+ {
+ case WEATHER_RAIN:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_DOWNPOUR:
+ case WEATHER_SNOW:
+ case WEATHER_FOG_HORIZONTAL:
+ case WEATHER_SHADE:
+ case WEATHER_DROUGHT:
+ useWeatherPal = TRUE;
+ break;
+ default:
+ useWeatherPal = FALSE;
+ break;
+ }
+
+ if (fadeOut)
+ {
+ if (useWeatherPal)
+ CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
+
+ BeginNormalPaletteFade(0xFFFFFFFF, delay, 0, 16, fadeColor);
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
+ }
+ else
+ {
+ gWeatherPtr->fadeDestColor = fadeColor;
+ if (useWeatherPal)
+ gWeatherPtr->fadeScreenCounter = 0;
+ else
+ BeginNormalPaletteFade(0xFFFFFFFF, delay, 16, 0, fadeColor);
+
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_IN;
+ gWeatherPtr->unknown_6CA = 1;
+ gWeatherPtr->unknown_6CB = 0;
+ Weather_SetBlendCoeffs(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB);
+ gWeatherPtr->readyForInit = TRUE;
+ }
+}
+
+void FadeSelectedPals(u8 mode, s8 delay, u32 selectedPalettes)
+{
+ u32 fadeColor;
+ bool8 fadeOut;
+ bool8 useWeatherPal;
+
+ switch (mode)
+ {
+ case FADE_FROM_BLACK:
+ fadeColor = RGB_BLACK;
+ fadeOut = FALSE;
+ break;
+ case FADE_FROM_WHITE:
+ fadeColor = RGB_WHITEALPHA;
+ fadeOut = FALSE;
+ break;
+ case FADE_TO_BLACK:
+ fadeColor = RGB_BLACK;
+ fadeOut = TRUE;
+ break;
+ case FADE_TO_WHITE:
+ fadeColor = RGB_WHITEALPHA;
+ fadeOut = TRUE;
+ break;
+ default:
+ return;
+ }
+
+ switch (gWeatherPtr->currWeather)
+ {
+ case WEATHER_RAIN:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_DOWNPOUR:
+ case WEATHER_SNOW:
+ case WEATHER_FOG_HORIZONTAL:
+ case WEATHER_SHADE:
+ case WEATHER_DROUGHT:
+ useWeatherPal = TRUE;
+ break;
+ default:
+ useWeatherPal = FALSE;
+ break;
+ }
+
+ if (fadeOut)
+ {
+ if (useWeatherPal)
+ CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
+
+ BeginNormalPaletteFade(selectedPalettes, delay, 0, 16, fadeColor);
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
+ }
+ else
+ {
+ gWeatherPtr->fadeDestColor = fadeColor;
+ if (useWeatherPal)
+ gWeatherPtr->fadeScreenCounter = 0;
+ else
+ BeginNormalPaletteFade(selectedPalettes, delay, 16, 0, fadeColor);
+
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_IN;
+ gWeatherPtr->unknown_6CA = 1;
+ gWeatherPtr->unknown_6CB = 0;
+ Weather_SetBlendCoeffs(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB);
+ gWeatherPtr->readyForInit = TRUE;
+ }
+}
+
+
+bool8 IsWeatherNotFadingIn(void)
+{
+ return (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_IN);
+}
+
+void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex)
+{
+ u16 paletteIndex = 16 + spritePaletteIndex;
+ u16 i;
+
+ switch (gWeatherPtr->palProcessingState)
+ {
+ case WEATHER_PAL_STATE_SCREEN_FADING_IN:
+ if (gWeatherPtr->unknown_6CA != 0)
+ {
+ if (gWeatherPtr->currWeather == WEATHER_FOG_HORIZONTAL)
+ MarkFogSpritePalToLighten(paletteIndex);
+ paletteIndex *= 16;
+ for (i = 0; i < 16; i++)
+ gPlttBufferFaded[paletteIndex + i] = gWeatherPtr->fadeDestColor;
+ }
+ break;
+ case WEATHER_PAL_STATE_SCREEN_FADING_OUT:
+ paletteIndex *= 16;
+ CpuFastCopy(gPlttBufferFaded + paletteIndex, gPlttBufferUnfaded + paletteIndex, 32);
+ BlendPalette(paletteIndex, 16, gPaletteFade.y, gPaletteFade.blendColor);
+ break;
+ // WEATHER_PAL_STATE_CHANGING_WEATHER
+ // WEATHER_PAL_STATE_CHANGING_IDLE
+ default:
+ if (gWeatherPtr->currWeather != WEATHER_FOG_HORIZONTAL)
+ {
+ ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex);
+ }
+ else
+ {
+ paletteIndex *= 16;
+ BlendPalette(paletteIndex, 16, 12, RGB(28, 31, 28));
+ }
+ break;
+ }
+}
+
+void ApplyWeatherGammaShiftToPal(u8 paletteIndex)
+{
+ ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex);
+}
+
+static u8 sub_80ABF20(void)
+{
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_SCREEN_FADING_IN)
+ return gWeatherPtr->unknown_6CA;
+ else
+ return 0;
+}
+
+void LoadCustomWeatherSpritePalette(const u16 *palette)
+{
+ LoadPalette(palette, 0x100 + gWeatherPtr->weatherPicSpritePalIndex * 16, 32);
+ UpdateSpritePaletteWithWeather(gWeatherPtr->weatherPicSpritePalIndex);
+}
+
+static void LoadDroughtWeatherPalette(u8 *gammaIndexPtr, u8 *a1)
+{
+ // Dummied out in FRLG
+ // *gammaIndexPtr = 0x20;
+ // *a1 = 0x20;
+}
+
+void ResetDroughtWeatherPaletteLoading(void)
+{
+ gWeatherPtr->loadDroughtPalsIndex = 1;
+ gWeatherPtr->loadDroughtPalsOffset = 1;
+}
+
+bool8 LoadDroughtWeatherPalettes(void)
+{
+ if (gWeatherPtr->loadDroughtPalsIndex < 32)
+ {
+ LoadDroughtWeatherPalette(&gWeatherPtr->loadDroughtPalsIndex, &gWeatherPtr->loadDroughtPalsOffset);
+ if (gWeatherPtr->loadDroughtPalsIndex < 32)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void sub_807AC50(s8 gammaIndex)
+{
+ sub_807A790(-gammaIndex - 1);
+}
+
+void sub_807AC60(void)
+{
+ gWeatherPtr->unknown_73C = 0;
+ gWeatherPtr->unknown_740 = 0;
+ gWeatherPtr->unknown_742 = 0;
+ gWeatherPtr->unknown_73E = 0;
+ gUnknown_20386A8 = 5;
+}
+
+void sub_807AC98(void)
+{
+ switch (gWeatherPtr->unknown_742)
+ {
+ case 0:
+ if (++gWeatherPtr->unknown_740 > gUnknown_20386A8)
+ {
+ gWeatherPtr->unknown_740 = 0;
+ sub_807AC50(gWeatherPtr->unknown_73C++);
+ if (gWeatherPtr->unknown_73C > 5)
+ {
+ gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C;
+ gWeatherPtr->unknown_742 = 1;
+ gWeatherPtr->unknown_740 = 0x3C;
+ }
+ }
+ break;
+ case 1:
+ 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_807AC50(gWeatherPtr->unknown_73C);
+ gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C;
+ break;
+ case 2:
+ if (++gWeatherPtr->unknown_740 > gUnknown_20386A8)
+ {
+ gWeatherPtr->unknown_740 = 0;
+ sub_807AC50(--gWeatherPtr->unknown_73C);
+ if (gWeatherPtr->unknown_73C == 3)
+ gWeatherPtr->unknown_742 = 0;
+ }
+ break;
+ }
+}
+
+void Weather_SetBlendCoeffs(u8 eva, u8 evb)
+{
+ gWeatherPtr->currBlendEVA = eva;
+ gWeatherPtr->currBlendEVB = evb;
+ gWeatherPtr->targetBlendEVA = eva;
+ gWeatherPtr->targetBlendEVB = evb;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(eva, evb));
+}
+
+void Weather_SetTargetBlendCoeffs(u8 eva, u8 evb, int delay)
+{
+ gWeatherPtr->targetBlendEVA = eva;
+ gWeatherPtr->targetBlendEVB = evb;
+ gWeatherPtr->blendDelay = delay;
+ gWeatherPtr->blendFrameCounter = 0;
+ gWeatherPtr->blendUpdateCounter = 0;
+}
+
+bool8 Weather_UpdateBlend(void)
+{
+ if (gWeatherPtr->currBlendEVA == gWeatherPtr->targetBlendEVA
+ && gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB)
+ return TRUE;
+
+ if (++gWeatherPtr->blendFrameCounter > gWeatherPtr->blendDelay)
+ {
+ gWeatherPtr->blendFrameCounter = 0;
+ gWeatherPtr->blendUpdateCounter++;
+
+ // Update currBlendEVA and currBlendEVB on alternate frames
+ if (gWeatherPtr->blendUpdateCounter & 1)
+ {
+ if (gWeatherPtr->currBlendEVA < gWeatherPtr->targetBlendEVA)
+ gWeatherPtr->currBlendEVA++;
+ else if (gWeatherPtr->currBlendEVA > gWeatherPtr->targetBlendEVA)
+ gWeatherPtr->currBlendEVA--;
+ }
+ else
+ {
+ if (gWeatherPtr->currBlendEVB < gWeatherPtr->targetBlendEVB)
+ gWeatherPtr->currBlendEVB++;
+ else if (gWeatherPtr->currBlendEVB > gWeatherPtr->targetBlendEVB)
+ gWeatherPtr->currBlendEVB--;
+ }
+ }
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB));
+
+ if (gWeatherPtr->currBlendEVA == gWeatherPtr->targetBlendEVA
+ && gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB)
+ return TRUE;
+
+ return FALSE;
+}
+
+static void sub_807AF00(u8 a)
+{
+ switch (a)
+ {
+ case 1:
+ SetWeather(WEATHER_SUNNY_CLOUDS);
+ break;
+ case 2:
+ SetWeather(WEATHER_SUNNY);
+ break;
+ case 3:
+ SetWeather(WEATHER_RAIN);
+ break;
+ case 4:
+ SetWeather(WEATHER_SNOW);
+ break;
+ case 5:
+ SetWeather(WEATHER_RAIN_THUNDERSTORM);
+ break;
+ case 6:
+ SetWeather(WEATHER_FOG_HORIZONTAL);
+ break;
+ case 7:
+ SetWeather(WEATHER_FOG_DIAGONAL);
+ break;
+ case 8:
+ SetWeather(WEATHER_VOLCANIC_ASH);
+ break;
+ case 9:
+ SetWeather(WEATHER_SANDSTORM);
+ break;
+ case 10:
+ SetWeather(WEATHER_SHADE);
+ break;
+ }
+}
+
+u8 GetCurrentWeather(void)
+{
+ return gWeatherPtr->currWeather;
+}
+
+void SetRainStrengthFromSoundEffect(u16 soundEffect)
+{
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_OUT)
+ {
+ switch (soundEffect)
+ {
+ case SE_T_KOAME:
+ gWeatherPtr->rainStrength = 0;
+ break;
+ case SE_T_OOAME:
+ gWeatherPtr->rainStrength = 1;
+ break;
+ case SE_T_AME:
+ gWeatherPtr->rainStrength = 2;
+ break;
+ default:
+ return;
+ }
+
+ PlaySE(soundEffect);
+ }
+}
+
+void PlayRainStoppingSoundEffect(void)
+{
+ if (IsSpecialSEPlaying())
+ {
+ switch (gWeatherPtr->rainStrength)
+ {
+ case 0:
+ PlaySE(SE_T_KOAME_E);
+ break;
+ case 1:
+ PlaySE(SE_T_OOAME_E);
+ break;
+ case 2:
+ default:
+ PlaySE(SE_T_AME_E);
+ break;
+ }
+ }
+}
+
+u8 IsWeatherChangeComplete(void)
+{
+ return gWeatherPtr->weatherChangeComplete;
+}
+
+void SetWeatherScreenFadeOut(void)
+{
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
+}
+
+void sub_807B070(void)
+{
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+}
+
+void PreservePaletteInWeather(u8 preservedPalIndex)
+{
+ CpuCopy16(sBasePaletteGammaTypes, sFieldEffectPaletteGammaTypes, 32);
+ sFieldEffectPaletteGammaTypes[preservedPalIndex] = GAMMA_NONE;
+ sPaletteGammaTypes = sFieldEffectPaletteGammaTypes;
+}
+
+void ResetPreservedPalettesInWeather(void)
+{
+ sPaletteGammaTypes = sBasePaletteGammaTypes;
+}
+
+void sub_807B0C4(u16 *palbuf, u16 *unused, u32 size)
+{
+ switch (gWeatherPtr->currWeather)
+ {
+ case WEATHER_RAIN:
+ case WEATHER_SNOW:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_SHADE:
+ case WEATHER_DOWNPOUR:
+ sub_8045314(palbuf, RGB_BLACK, 3, size);
+ break;
+ }
+}
diff --git a/src/field_weather_effects.c b/src/field_weather_effects.c
new file mode 100644
index 000000000..e6f4bfacf
--- /dev/null
+++ b/src/field_weather_effects.c
@@ -0,0 +1,2320 @@
+#include "global.h"
+#include "gflib.h"
+#include "battle_anim.h"
+#include "event_object_movement.h"
+#include "field_weather.h"
+#include "field_weather_effects.h"
+#include "overworld.h"
+#include "random.h"
+#include "script.h"
+#include "constants/weather.h"
+#include "constants/songs.h"
+#include "task.h"
+#include "trig.h"
+
+//------------------------------------------------------------------------------
+// WEATHER_SUNNY_CLOUDS
+//------------------------------------------------------------------------------
+
+static void CreateCloudSprites(void);
+static void DestroyCloudSprites(void);
+static void UpdateCloudSprite(struct Sprite *);
+
+// The clouds are positioned on the map's grid.
+// These coordinates are for the lower half of Route 120.
+static const struct Coords16 sCloudSpriteMapCoords[] = {
+ { 0, 66},
+ { 5, 73},
+ {10, 78},
+};
+
+static const struct SpriteSheet sCloudSpriteSheet = {
+ .data = gWeatherCloudTiles,
+ .size = 0x0800,
+ .tag = 0x1200
+};
+
+static const struct OamData sCloudSpriteOamData = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_BLEND,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 3,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sCloudSpriteAnimCmd[] = {
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sCloudSpriteAnimCmds[] = {
+ sCloudSpriteAnimCmd,
+};
+
+static const struct SpriteTemplate sCloudSpriteTemplate = {
+ .tileTag = 0x1200,
+ .paletteTag = 0x1200,
+ .oam = &sCloudSpriteOamData,
+ .anims = sCloudSpriteAnimCmds,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateCloudSprite,
+};
+
+void Clouds_InitVars(void)
+{
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->initStep = 0;
+ if (!gWeatherPtr->cloudSpritesCreated)
+ Weather_SetBlendCoeffs(0, 16);
+}
+
+void Clouds_InitAll(void)
+{
+ Clouds_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Clouds_Main();
+}
+
+void Clouds_Main(void)
+{
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateCloudSprites();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ Weather_SetTargetBlendCoeffs(12, 8, 1);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (Weather_UpdateBlend())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+bool8 Clouds_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 1);
+ gWeatherPtr->finishStep++;
+ return TRUE;
+ case 1:
+ if (Weather_UpdateBlend())
+ {
+ DestroyCloudSprites();
+ gWeatherPtr->finishStep++;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void Sunny_InitVars(void)
+{
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+}
+
+void Sunny_InitAll(void)
+{
+ Sunny_InitVars();
+}
+
+void Sunny_Main(void)
+{
+}
+
+bool8 Sunny_Finish(void)
+{
+ return FALSE;
+}
+
+static void CreateCloudSprites(void)
+{
+ u16 i;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ if (gWeatherPtr->cloudSpritesCreated == TRUE)
+ return;
+
+ LoadSpriteSheet(&sCloudSpriteSheet);
+ LoadCustomWeatherSpritePalette(gCloudsWeatherPalette);
+ for (i = 0; i < NUM_CLOUD_SPRITES; i++)
+ {
+ spriteId = CreateSprite(&sCloudSpriteTemplate, 0, 0, 0xFF);
+ if (spriteId != MAX_SPRITES)
+ {
+ gWeatherPtr->sprites.s1.cloudSprites[i] = &gSprites[spriteId];
+ sprite = gWeatherPtr->sprites.s1.cloudSprites[i];
+ SetSpritePosToMapCoords(sCloudSpriteMapCoords[i].x + 7, sCloudSpriteMapCoords[i].y + 7, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->coordOffsetEnabled = TRUE;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s1.cloudSprites[i] = NULL;
+ }
+ }
+
+ gWeatherPtr->cloudSpritesCreated = TRUE;
+}
+
+static void DestroyCloudSprites(void)
+{
+ u16 i;
+
+ if (!gWeatherPtr->cloudSpritesCreated)
+ return;
+
+ for (i = 0; i < NUM_CLOUD_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s1.cloudSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s1.cloudSprites[i]);
+ }
+
+ FreeSpriteTilesByTag(0x1200);
+ gWeatherPtr->cloudSpritesCreated = FALSE;
+}
+
+static void UpdateCloudSprite(struct Sprite *sprite)
+{
+ // Move 1 pixel left every 2 frames.
+ sprite->data[0] = (sprite->data[0] + 1) & 1;
+ if (sprite->data[0])
+ sprite->pos1.x--;
+}
+
+//------------------------------------------------------------------------------
+// WEATHER_DROUGHT
+//------------------------------------------------------------------------------
+
+static void UpdateDroughtBlend(u8);
+
+void Drought_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 0;
+}
+
+void Drought_InitAll(void)
+{
+ Drought_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Drought_Main();
+}
+
+void Drought_Main(void)
+{
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_CHANGING_WEATHER)
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ ResetDroughtWeatherPaletteLoading();
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!LoadDroughtWeatherPalettes())
+ gWeatherPtr->initStep++;
+ break;
+ case 3:
+ sub_807AC60();
+ gWeatherPtr->initStep++;
+ break;
+ case 4:
+ sub_807AC98();
+ if (gWeatherPtr->unknown_73C == 6)
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ default:
+ sub_807AC98();
+ break;
+ }
+}
+
+bool8 Drought_Finish(void)
+{
+ return FALSE;
+}
+
+void StartDroughtWeatherBlend(void)
+{
+ CreateTask(UpdateDroughtBlend, 0x50);
+}
+
+#define tState data[0]
+#define tBlendY data[1]
+#define tBlendDelay data[2]
+#define tWinRange data[3]
+
+static void UpdateDroughtBlend(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->tState)
+ {
+ case 0:
+ task->tBlendY = 0;
+ task->tBlendDelay = 0;
+ task->tWinRange = GetGpuReg(REG_OFFSET_WININ);
+ SetGpuReg(REG_OFFSET_WININ, WIN_RANGE(63, 63));
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ task->tState++;
+ // fall through
+ case 1:
+ task->tBlendY += 3;
+ if (task->tBlendY > 16)
+ task->tBlendY = 16;
+ SetGpuReg(REG_OFFSET_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++;
+ }
+ SetGpuReg(REG_OFFSET_BLDY, task->tBlendY);
+ }
+ break;
+ case 3:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_WININ, task->tWinRange);
+ task->tState++;
+ break;
+ case 4:
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+#undef tState
+#undef tBlendY
+#undef tBlendDelay
+#undef tWinRange
+
+//------------------------------------------------------------------------------
+// WEATHER_RAIN
+//------------------------------------------------------------------------------
+
+static void LoadRainSpriteSheet(void);
+static bool8 CreateRainSprite(void);
+static void UpdateRainSprite(struct Sprite *sprite);
+static bool8 UpdateVisibleRainSprites(void);
+static void DestroyRainSprites(void);
+
+static const struct Coords16 sRainSpriteCoords[] = {
+ { 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},
+};
+
+static const struct OamData sRainSpriteOamData = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x32),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 2,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sRainSpriteFallAnimCmd[] = {
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sRainSpriteSplashAnimCmd[] = {
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(40, 2),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sRainSpriteHeavySplashAnimCmd[] = {
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(24, 4),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sRainSpriteAnimCmds[] = {
+ sRainSpriteFallAnimCmd,
+ sRainSpriteSplashAnimCmd,
+ sRainSpriteHeavySplashAnimCmd,
+};
+
+static const struct SpriteTemplate sRainSpriteTemplate = {
+ .tileTag = 0x1206,
+ .paletteTag = 0x1200,
+ .oam = &sRainSpriteOamData,
+ .anims = sRainSpriteAnimCmds,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateRainSprite,
+};
+
+// Q28.4 fixed-point format values
+static const s16 sRainSpriteMovement[][2] = {
+ {-0x68, 0xD0},
+ {-0xA0, 0x140},
+};
+
+// First byte is the number of frames a raindrop falls before it splashes.
+// Second byte is the maximum number of frames a raindrop can "wait" before
+// it appears and starts falling. (This is only for the initial raindrop spawn.)
+static const u16 sRainSpriteFallingDurations[][2] = {
+ {18, 7},
+ {12, 10},
+};
+
+static const struct SpriteSheet sRainSpriteSheet = {
+ .data = gWeatherRainTiles,
+ .size = 0x0600,
+ .tag = 0x1206,
+};
+
+void Rain_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->rainSpriteVisibleCounter = 0;
+ gWeatherPtr->rainSpriteVisibleDelay = 8;
+ gWeatherPtr->isDownpour = FALSE;
+ gWeatherPtr->targetRainSpriteCount = 10;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+ SetRainStrengthFromSoundEffect(SE_T_KOAME);
+}
+
+void Rain_InitAll(void)
+{
+ Rain_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Rain_Main();
+}
+
+void Rain_Main(void)
+{
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ LoadRainSpriteSheet();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (!CreateRainSprite())
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!UpdateVisibleRainSprites())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+bool8 Rain_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ if (gWeatherPtr->nextWeather == WEATHER_RAIN
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_THUNDERSTORM
+ || gWeatherPtr->nextWeather == WEATHER_DOWNPOUR)
+ {
+ gWeatherPtr->finishStep = 0xFF;
+ return FALSE;
+ }
+ else
+ {
+ gWeatherPtr->targetRainSpriteCount = 0;
+ gWeatherPtr->finishStep++;
+ }
+ // fall through
+ case 1:
+ if (!UpdateVisibleRainSprites())
+ {
+ DestroyRainSprites();
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+#define tCounter data[0]
+#define tRandom data[1]
+#define tPosX data[2]
+#define tPosY data[3]
+#define tState data[4]
+#define tActive data[5]
+#define tWaiting data[6]
+
+static void StartRainSpriteFall(struct Sprite *sprite)
+{
+ u32 rand;
+ u16 numFallingFrames;
+ int tileX;
+ int tileY;
+
+ if (sprite->tRandom == 0)
+ sprite->tRandom = 361;
+
+ // Standard RNG sequence.
+ rand = sprite->tRandom * 1103515245 + 12345;
+ sprite->tRandom = ((rand & 0x7FFF0000) >> 16) % 600;
+
+ numFallingFrames = sRainSpriteFallingDurations[gWeatherPtr->isDownpour][0];
+
+ tileX = sprite->tRandom % 30;
+ sprite->tPosX = tileX * 8; // Useless assignment, leftover from before fixed-point values were used
+
+ tileY = sprite->tRandom / 30;
+ sprite->tPosY = tileY * 8; // Useless assignment, leftover from before fixed-point values were used
+
+ sprite->tPosX = tileX;
+ sprite->tPosX <<= 7; // This is tileX * 8, using a fixed-point value with 4 decimal places
+
+ sprite->tPosY = tileY;
+ sprite->tPosY <<= 7; // This is tileX * 8, using a fixed-point value with 4 decimal places
+
+ // "Rewind" the rain sprites, from their ending position.
+ sprite->tPosX -= sRainSpriteMovement[gWeatherPtr->isDownpour][0] * numFallingFrames;
+ sprite->tPosY -= sRainSpriteMovement[gWeatherPtr->isDownpour][1] * numFallingFrames;
+
+ StartSpriteAnim(sprite, 0);
+ sprite->tState = 0;
+ sprite->coordOffsetEnabled = FALSE;
+ sprite->tCounter = numFallingFrames;
+}
+
+static void UpdateRainSprite(struct Sprite *sprite)
+{
+ if (sprite->tState == 0)
+ {
+ // Raindrop is in its "falling" motion.
+ sprite->tPosX += sRainSpriteMovement[gWeatherPtr->isDownpour][0];
+ sprite->tPosY += sRainSpriteMovement[gWeatherPtr->isDownpour][1];
+ sprite->pos1.x = sprite->tPosX >> 4;
+ sprite->pos1.y = sprite->tPosY >> 4;
+
+ if (sprite->tActive
+ && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248)
+ && sprite->pos1.y >= -16 && sprite->pos1.y <= 176)
+ sprite->invisible = FALSE;
+ else
+ sprite->invisible = TRUE;
+
+ if (--sprite->tCounter == 0)
+ {
+ // Make raindrop splash on the ground
+ StartSpriteAnim(sprite, gWeatherPtr->isDownpour + 1);
+ sprite->tState = 1;
+ sprite->pos1.x -= gSpriteCoordOffsetX;
+ sprite->pos1.y -= gSpriteCoordOffsetY;
+ sprite->coordOffsetEnabled = TRUE;
+ }
+ }
+ else if (sprite->animEnded)
+ {
+ // The splashing animation ended.
+ sprite->invisible = TRUE;
+ StartRainSpriteFall(sprite);
+ }
+}
+
+static void WaitRainSprite(struct Sprite *sprite)
+{
+ if (sprite->tCounter == 0)
+ {
+ StartRainSpriteFall(sprite);
+ sprite->callback = UpdateRainSprite;
+ }
+ else
+ {
+ sprite->tCounter--;
+ }
+}
+
+static void InitRainSpriteMovement(struct Sprite *sprite, u16 val)
+{
+ u16 numFallingFrames = sRainSpriteFallingDurations[gWeatherPtr->isDownpour][0];
+ u16 numAdvanceRng = val / (sRainSpriteFallingDurations[gWeatherPtr->isDownpour][1] + numFallingFrames);
+ u16 frameVal = val % (sRainSpriteFallingDurations[gWeatherPtr->isDownpour][1] + numFallingFrames);
+
+ while (--numAdvanceRng != 0xFFFF)
+ StartRainSpriteFall(sprite);
+
+ if (frameVal < numFallingFrames)
+ {
+ while (--frameVal != 0xFFFF)
+ UpdateRainSprite(sprite);
+
+ sprite->tWaiting = FALSE;
+ }
+ else
+ {
+ sprite->tCounter = frameVal - numFallingFrames;
+ sprite->invisible = TRUE;
+ sprite->tWaiting = TRUE;
+ }
+}
+
+static void LoadRainSpriteSheet(void)
+{
+ LoadSpriteSheet(&sRainSpriteSheet);
+}
+
+static bool8 CreateRainSprite(void)
+{
+ u8 spriteIndex;
+ u8 spriteId;
+
+ if (gWeatherPtr->rainSpriteCount == MAX_RAIN_SPRITES)
+ return FALSE;
+
+ spriteIndex = gWeatherPtr->rainSpriteCount;
+ spriteId = CreateSpriteAtEnd(&sRainSpriteTemplate,
+ sRainSpriteCoords[spriteIndex].x, sRainSpriteCoords[spriteIndex].y, 78);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].tActive = 0;
+ gSprites[spriteId].tRandom = spriteIndex * 145;
+ while (gSprites[spriteId].tRandom >= 600)
+ gSprites[spriteId].tRandom -= 600;
+
+ StartRainSpriteFall(&gSprites[spriteId]);
+ InitRainSpriteMovement(&gSprites[spriteId], spriteIndex * 9);
+ gSprites[spriteId].invisible = TRUE;
+ gWeatherPtr->sprites.s1.rainSprites[spriteIndex] = &gSprites[spriteId];
+ }
+ else
+ {
+ gWeatherPtr->sprites.s1.rainSprites[spriteIndex] = NULL;
+ }
+
+ if (++gWeatherPtr->rainSpriteCount == MAX_RAIN_SPRITES)
+ {
+ u16 i;
+ for (i = 0; i < MAX_RAIN_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s1.rainSprites[i])
+ {
+ if (!gWeatherPtr->sprites.s1.rainSprites[i]->tWaiting)
+ gWeatherPtr->sprites.s1.rainSprites[i]->callback = UpdateRainSprite;
+ else
+ gWeatherPtr->sprites.s1.rainSprites[i]->callback = WaitRainSprite;
+ }
+ }
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 UpdateVisibleRainSprites(void)
+{
+ if (gWeatherPtr->curRainSpriteIndex == gWeatherPtr->targetRainSpriteCount)
+ return FALSE;
+
+ if (++gWeatherPtr->rainSpriteVisibleCounter > gWeatherPtr->rainSpriteVisibleDelay)
+ {
+ gWeatherPtr->rainSpriteVisibleCounter = 0;
+ if (gWeatherPtr->curRainSpriteIndex < gWeatherPtr->targetRainSpriteCount)
+ {
+ gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->curRainSpriteIndex++]->tActive = 1;
+ }
+ else
+ {
+ gWeatherPtr->curRainSpriteIndex--;
+ gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->curRainSpriteIndex]->tActive = 0;
+ gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->curRainSpriteIndex]->invisible = TRUE;
+ }
+ }
+ return TRUE;
+}
+
+static void DestroyRainSprites(void)
+{
+ u16 i;
+
+ for (i = 0; i < gWeatherPtr->rainSpriteCount; i++)
+ {
+ if (gWeatherPtr->sprites.s1.rainSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s1.rainSprites[i]);
+ }
+ gWeatherPtr->rainSpriteCount = 0;
+ FreeSpriteTilesByTag(0x1206);
+}
+
+#undef tCounter
+#undef tRandom
+#undef tPosX
+#undef tPosY
+#undef tState
+#undef tActive
+#undef tWaiting
+
+//------------------------------------------------------------------------------
+// Snow
+//------------------------------------------------------------------------------
+
+static void UpdateSnowflakeSprite(struct Sprite *);
+static bool8 UpdateVisibleSnowflakeSprites(void);
+static bool8 CreateSnowflakeSprite(void);
+static bool8 DestroySnowflakeSprite(void);
+static void InitSnowflakeSpriteMovement(struct Sprite *);
+
+void Snow_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->targetSnowflakeSpriteCount = 16;
+ gWeatherPtr->snowflakeVisibleCounter = 0;
+}
+
+void Snow_InitAll(void)
+{
+ u16 i;
+
+ Snow_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ {
+ Snow_Main();
+ for (i = 0; i < gWeatherPtr->snowflakeSpriteCount; i++)
+ UpdateSnowflakeSprite(gWeatherPtr->sprites.s1.snowflakeSprites[i]);
+ }
+}
+
+void Snow_Main(void)
+{
+ if (gWeatherPtr->initStep == 0 && !UpdateVisibleSnowflakeSprites())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+}
+
+bool8 Snow_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ gWeatherPtr->targetSnowflakeSpriteCount = 0;
+ gWeatherPtr->snowflakeVisibleCounter = 0;
+ gWeatherPtr->finishStep++;
+ // fall through
+ case 1:
+ if (!UpdateVisibleSnowflakeSprites())
+ {
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 UpdateVisibleSnowflakeSprites(void)
+{
+ if (gWeatherPtr->snowflakeSpriteCount == gWeatherPtr->targetSnowflakeSpriteCount)
+ return FALSE;
+
+ if (++gWeatherPtr->snowflakeVisibleCounter > 36)
+ {
+ gWeatherPtr->snowflakeVisibleCounter = 0;
+ if (gWeatherPtr->snowflakeSpriteCount < gWeatherPtr->targetSnowflakeSpriteCount)
+ CreateSnowflakeSprite();
+ else
+ DestroySnowflakeSprite();
+ }
+
+ return gWeatherPtr->snowflakeSpriteCount != gWeatherPtr->targetSnowflakeSpriteCount;
+}
+
+static const struct OamData sSnowflakeSpriteOamData = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(8x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x8),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct SpriteFrameImage sSnowflakeSpriteImages[] = {
+ {gWeatherSnow1Tiles, 0x20},
+ {gWeatherSnow2Tiles, 0x20},
+};
+
+static const union AnimCmd sSnowflakeAnimCmd0[] = {
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sSnowflakeAnimCmd1[] = {
+ ANIMCMD_FRAME(1, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sSnowflakeAnimCmds[] = {
+ sSnowflakeAnimCmd0,
+ sSnowflakeAnimCmd1,
+};
+
+static const struct SpriteTemplate sSnowflakeSpriteTemplate = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x1200,
+ .oam = &sSnowflakeSpriteOamData,
+ .anims = sSnowflakeAnimCmds,
+ .images = sSnowflakeSpriteImages,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateSnowflakeSprite,
+};
+
+#define tPosY data[0]
+#define tDeltaY data[1]
+#define tWaveDelta data[2]
+#define tWaveIndex data[3]
+#define tSnowflakeId data[4]
+#define tFallCounter data[5]
+#define tFallDuration data[6]
+#define tDeltaY2 data[7]
+
+static bool8 CreateSnowflakeSprite(void)
+{
+ u8 spriteId = CreateSpriteAtEnd(&sSnowflakeSpriteTemplate, 0, 0, 78);
+ if (spriteId == MAX_SPRITES)
+ return FALSE;
+
+ gSprites[spriteId].tSnowflakeId = gWeatherPtr->snowflakeSpriteCount;
+ InitSnowflakeSpriteMovement(&gSprites[spriteId]);
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gWeatherPtr->sprites.s1.snowflakeSprites[gWeatherPtr->snowflakeSpriteCount++] = &gSprites[spriteId];
+ return TRUE;
+}
+
+static bool8 DestroySnowflakeSprite(void)
+{
+ if (gWeatherPtr->snowflakeSpriteCount)
+ {
+ DestroySprite(gWeatherPtr->sprites.s1.snowflakeSprites[--gWeatherPtr->snowflakeSpriteCount]);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void InitSnowflakeSpriteMovement(struct Sprite *sprite)
+{
+ u16 rand;
+ u16 x = ((sprite->tSnowflakeId * 5) & 7) * 30 + (Random() % 30);
+
+ sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
+ sprite->pos1.x = x - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
+ sprite->tPosY = sprite->pos1.y * 128;
+ sprite->pos2.x = 0;
+ rand = Random();
+ sprite->tDeltaY = (rand & 3) * 5 + 64;
+ sprite->tDeltaY2 = sprite->tDeltaY;
+ StartSpriteAnim(sprite, (rand & 1) ? 0 : 1);
+ sprite->tWaveIndex = 0;
+ sprite->tWaveDelta = ((rand & 3) == 0) ? 2 : 1;
+ sprite->tFallDuration = (rand & 0x1F) + 210;
+ sprite->tFallCounter = 0;
+}
+
+static void WaitSnowflakeSprite(struct Sprite *sprite)
+{
+ if (gWeatherPtr->unknown_6E2 > 18)
+ {
+ sprite->invisible = FALSE;
+ sprite->callback = UpdateSnowflakeSprite;
+ sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
+ sprite->tPosY = sprite->pos1.y * 128;
+ gWeatherPtr->unknown_6E2 = 0;
+ }
+}
+
+static void UpdateSnowflakeSprite(struct Sprite *sprite)
+{
+ s16 x;
+ s16 y;
+
+ sprite->tPosY += sprite->tDeltaY;
+ sprite->pos1.y = sprite->tPosY >> 7;
+ sprite->tWaveIndex += sprite->tWaveDelta;
+ sprite->tWaveIndex &= 0xFF;
+ sprite->pos2.x = gSineTable[sprite->tWaveIndex] / 64;
+
+ x = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF;
+ if (x & 0x100)
+ x |= -0x100;
+
+ if (x < -3)
+ sprite->pos1.x = 242 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
+ else if (x > 242)
+ sprite->pos1.x = -3 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
+
+ y = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF;
+ if (y > 163 && y < 171)
+ {
+ sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
+ sprite->tPosY = sprite->pos1.y * 128;
+ sprite->tFallCounter = 0;
+ sprite->tFallDuration = 220;
+ }
+ else if (y > 242 && y < 250)
+ {
+ sprite->pos1.y = 163;
+ sprite->tPosY = sprite->pos1.y * 128;
+ sprite->tFallCounter = 0;
+ sprite->tFallDuration = 220;
+ sprite->invisible = TRUE;
+ sprite->callback = WaitSnowflakeSprite;
+ }
+
+ if (++sprite->tFallCounter == sprite->tFallDuration)
+ {
+ InitSnowflakeSpriteMovement(sprite);
+ sprite->pos1.y = 250;
+ sprite->invisible = TRUE;
+ sprite->callback = WaitSnowflakeSprite;
+ }
+}
+
+#undef tPosY
+#undef tDeltaY
+#undef tWaveDelta
+#undef tWaveIndex
+#undef tSnowflakeId
+#undef tFallCounter
+#undef tFallDuration
+#undef tDeltaY2
+
+//------------------------------------------------------------------------------
+// WEATHER_RAIN_THUNDERSTORM
+//------------------------------------------------------------------------------
+
+void Thunderstorm_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->rainSpriteVisibleCounter = 0;
+ gWeatherPtr->rainSpriteVisibleDelay = 4;
+ gWeatherPtr->isDownpour = FALSE;
+ gWeatherPtr->targetRainSpriteCount = 16;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
+ gWeatherPtr->thunderTriggered = FALSE;
+ SetRainStrengthFromSoundEffect(SE_T_AME);
+}
+
+void Thunderstorm_InitAll(void)
+{
+ Thunderstorm_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Thunderstorm_Main();
+}
+
+//------------------------------------------------------------------------------
+// WEATHER_DOWNPOUR
+//------------------------------------------------------------------------------
+
+static void UpdateThunderSound(void);
+static void SetThunderCounter(u16);
+
+void Downpour_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->rainSpriteVisibleCounter = 0;
+ gWeatherPtr->rainSpriteVisibleDelay = 4;
+ gWeatherPtr->isDownpour = TRUE;
+ gWeatherPtr->targetRainSpriteCount = 24;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
+ SetRainStrengthFromSoundEffect(SE_T_OOAME);
+}
+
+void Downpour_InitAll(void)
+{
+ Downpour_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Thunderstorm_Main();
+}
+
+void Thunderstorm_Main(void)
+{
+ UpdateThunderSound();
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ LoadRainSpriteSheet();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (!CreateRainSprite())
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!UpdateVisibleRainSprites())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ case 3:
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_CHANGING_WEATHER)
+ gWeatherPtr->initStep = 6;
+ break;
+ case 4:
+ gWeatherPtr->unknown_6EA = 1;
+ gWeatherPtr->unknown_6E6 = (Random() % 360) + 360;
+ gWeatherPtr->initStep++;
+ // fall through
+ case 5:
+ if (--gWeatherPtr->unknown_6E6 == 0)
+ gWeatherPtr->initStep++;
+ break;
+ case 6:
+ gWeatherPtr->unknown_6EA = 1;
+ gWeatherPtr->unknown_6EB = Random() % 2;
+ gWeatherPtr->initStep++;
+ break;
+ case 7:
+ gWeatherPtr->unknown_6EC = (Random() & 1) + 1;
+ gWeatherPtr->initStep++;
+ // fall through
+ case 8:
+ sub_807A790(19);
+ if (gWeatherPtr->unknown_6EB == 0 && gWeatherPtr->unknown_6EC == 1)
+ SetThunderCounter(20);
+
+ gWeatherPtr->unknown_6E6 = (Random() % 3) + 6;
+ gWeatherPtr->initStep++;
+ break;
+ case 9:
+ if (--gWeatherPtr->unknown_6E6 == 0)
+ {
+ sub_807A790(3);
+ gWeatherPtr->unknown_6EA = 1;
+ if (--gWeatherPtr->unknown_6EC != 0)
+ {
+ gWeatherPtr->unknown_6E6 = (Random() % 16) + 60;
+ gWeatherPtr->initStep = 10;
+ }
+ else if (gWeatherPtr->unknown_6EB == 0)
+ {
+ gWeatherPtr->initStep = 4;
+ }
+ else
+ {
+ gWeatherPtr->initStep = 11;
+ }
+ }
+ break;
+ case 10:
+ if (--gWeatherPtr->unknown_6E6 == 0)
+ gWeatherPtr->initStep = 8;
+ break;
+ case 11:
+ gWeatherPtr->unknown_6E6 = (Random() % 16) + 60;
+ gWeatherPtr->initStep++;
+ break;
+ case 12:
+ if (--gWeatherPtr->unknown_6E6 == 0)
+ {
+ SetThunderCounter(100);
+ sub_807A790(19);
+ gWeatherPtr->unknown_6E6 = (Random() & 0xF) + 30;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ case 13:
+ if (--gWeatherPtr->unknown_6E6 == 0)
+ {
+ sub_807A7C4(19, 3, 5);
+ gWeatherPtr->initStep++;
+ }
+ break;
+ case 14:
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
+ {
+ gWeatherPtr->unknown_6EA = 1;
+ gWeatherPtr->initStep = 4;
+ }
+ break;
+ }
+}
+
+bool8 Thunderstorm_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ gWeatherPtr->unknown_6EA = 0;
+ gWeatherPtr->finishStep++;
+ // fall through
+ case 1:
+ Thunderstorm_Main();
+ if (gWeatherPtr->unknown_6EA)
+ {
+ if (gWeatherPtr->nextWeather == WEATHER_RAIN
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_THUNDERSTORM
+ || gWeatherPtr->nextWeather == WEATHER_DOWNPOUR)
+ return FALSE;
+
+ gWeatherPtr->targetRainSpriteCount = 0;
+ gWeatherPtr->finishStep++;
+ }
+ break;
+ case 2:
+ if (!UpdateVisibleRainSprites())
+ {
+ DestroyRainSprites();
+ gWeatherPtr->thunderTriggered = FALSE;
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ }
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void SetThunderCounter(u16 max)
+{
+ if (!gWeatherPtr->thunderTriggered)
+ {
+ gWeatherPtr->thunderCounter = Random() % max;
+ gWeatherPtr->thunderTriggered = TRUE;
+ }
+}
+
+static void UpdateThunderSound(void)
+{
+ if (gWeatherPtr->thunderTriggered == TRUE)
+ {
+ if (gWeatherPtr->thunderCounter == 0)
+ {
+ if (IsSEPlaying())
+ return;
+
+ if (Random() & 1)
+ PlaySE(SE_T_KAMI);
+ else
+ PlaySE(SE_T_KAMI2);
+
+ gWeatherPtr->thunderTriggered = FALSE;
+ }
+ else
+ {
+ gWeatherPtr->thunderCounter--;
+ }
+ }
+}
+
+//------------------------------------------------------------------------------
+// WEATHER_FOG_HORIZONTAL and WEATHER_UNDERWATER
+//------------------------------------------------------------------------------
+
+// unused data
+static const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300};
+
+static const struct OamData gOamData_839AB2C = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_BLEND,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd gSpriteAnim_839AB34[] = {
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB3C[] = {
+ ANIMCMD_FRAME(32, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB44[] = {
+ ANIMCMD_FRAME(64, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB4C[] = {
+ ANIMCMD_FRAME(96, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB54[] = {
+ ANIMCMD_FRAME(128, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB5C[] = {
+ ANIMCMD_FRAME(160, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gSpriteAnimTable_839AB64[] = {
+ gSpriteAnim_839AB34,
+ gSpriteAnim_839AB3C,
+ gSpriteAnim_839AB44,
+ gSpriteAnim_839AB4C,
+ gSpriteAnim_839AB54,
+ gSpriteAnim_839AB5C,
+};
+
+static const union AffineAnimCmd gSpriteAffineAnim_839AB7C[] = {
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] = {
+ gSpriteAffineAnim_839AB7C,
+};
+
+static void FogHorizontalSpriteCallback(struct Sprite *);
+static const struct SpriteTemplate sFogHorizontalSpriteTemplate = {
+ .tileTag = 0x1201,
+ .paletteTag = 0x1200,
+ .oam = &gOamData_839AB2C,
+ .anims = gSpriteAnimTable_839AB64,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_839AB8C,
+ .callback = FogHorizontalSpriteCallback,
+};
+
+static void CreateFogHorizontalSprites(void);
+static void DestroyFogHorizontalSprites(void);
+
+void FogHorizontal_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ if (!gWeatherPtr->fogHSpritesCreated)
+ {
+ gWeatherPtr->fogHScrollCounter = 0;
+ gWeatherPtr->fogHScrollOffset = 0;
+ gWeatherPtr->fogHScrollPosX = 0;
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void FogHorizontal_InitAll(void)
+{
+ FogHorizontal_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ FogHorizontal_Main();
+}
+
+void FogHorizontal_Main(void)
+{
+ gWeatherPtr->fogHScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->fogHScrollOffset) & 0xFF;
+ if (++gWeatherPtr->fogHScrollCounter > 3)
+ {
+ gWeatherPtr->fogHScrollCounter = 0;
+ gWeatherPtr->fogHScrollOffset++;
+ }
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateFogHorizontalSprites();
+ if (gWeatherPtr->currWeather == WEATHER_FOG_HORIZONTAL)
+ Weather_SetTargetBlendCoeffs(12, 8, 3);
+ else
+ Weather_SetTargetBlendCoeffs(4, 16, 0);
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (Weather_UpdateBlend())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+bool8 FogHorizontal_Finish(void)
+{
+ gWeatherPtr->fogHScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->fogHScrollOffset) & 0xFF;
+ if (++gWeatherPtr->fogHScrollCounter > 3)
+ {
+ gWeatherPtr->fogHScrollCounter = 0;
+ gWeatherPtr->fogHScrollOffset++;
+ }
+
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 3);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (Weather_UpdateBlend())
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ DestroyFogHorizontalSprites();
+ gWeatherPtr->finishStep++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+#define tSpriteColumn data[0]
+
+static void FogHorizontalSpriteCallback(struct Sprite *sprite)
+{
+ sprite->pos2.y = (u8)gSpriteCoordOffsetY;
+ sprite->pos1.x = gWeatherPtr->fogHScrollPosX + 32 + sprite->tSpriteColumn * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = 480 + gWeatherPtr->fogHScrollPosX - (4 - sprite->tSpriteColumn) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+static void CreateFogHorizontalSprites(void)
+{
+ u16 i;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ if (!gWeatherPtr->fogHSpritesCreated)
+ {
+ struct SpriteSheet fogHorizontalSpriteSheet = {
+ .data = gWeatherFogHorizontalTiles,
+ .size = 0x0800,
+ .tag = 0x1201,
+ };
+ LoadSpriteSheet(&fogHorizontalSpriteSheet);
+ for (i = 0; i < NUM_FOG_HORIZONTAL_SPRITES; i++)
+ {
+ spriteId = CreateSpriteAtEnd(&sFogHorizontalSpriteTemplate, 0, 0, 0xFF);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->tSpriteColumn = i % 5;
+ sprite->pos1.x = (i % 5) * 64 + 32;
+ sprite->pos1.y = (i / 5) * 64 + 32;
+ gWeatherPtr->sprites.s2.fogHSprites[i] = sprite;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.fogHSprites[i] = NULL;
+ }
+ }
+
+ gWeatherPtr->fogHSpritesCreated = TRUE;
+ }
+}
+
+static void DestroyFogHorizontalSprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->fogHSpritesCreated)
+ {
+ for (i = 0; i < NUM_FOG_HORIZONTAL_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s2.fogHSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.fogHSprites[i]);
+ }
+
+ FreeSpriteTilesByTag(0x1201);
+ gWeatherPtr->fogHSpritesCreated = FALSE;
+ }
+}
+
+#undef tSpriteColumn
+
+//------------------------------------------------------------------------------
+// WEATHER_VOLCANIC_ASH
+//------------------------------------------------------------------------------
+
+static void LoadAshSpriteSheet(void);
+static void CreateAshSprites(void);
+static void DestroyAshSprites(void);
+static void UpdateAshSprite(struct Sprite *);
+
+void Ash_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->unknown_6FE = 20;
+ if (!gWeatherPtr->ashSpritesCreated)
+ {
+ Weather_SetBlendCoeffs(0, 16);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(64, 63)); // These aren't valid blend coefficients!
+ }
+}
+
+void Ash_InitAll(void)
+{
+ Ash_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Ash_Main();
+}
+
+void Ash_Main(void)
+{
+ gWeatherPtr->ashBaseSpritesX = gSpriteCoordOffsetX & 0x1FF;
+ while (gWeatherPtr->ashBaseSpritesX >= 240)
+ gWeatherPtr->ashBaseSpritesX -= 240;
+
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ LoadAshSpriteSheet();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (!gWeatherPtr->ashSpritesCreated)
+ CreateAshSprites();
+
+ Weather_SetTargetBlendCoeffs(16, 0, 1);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (Weather_UpdateBlend())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ default:
+ Weather_UpdateBlend();
+ break;
+ }
+}
+
+bool8 Ash_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 1);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (Weather_UpdateBlend())
+ {
+ DestroyAshSprites();
+ gWeatherPtr->finishStep++;
+ }
+ break;
+ case 2:
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static const struct SpriteSheet sAshSpriteSheet = {
+ .data = gWeatherAshTiles,
+ .size = 0x1000,
+ .tag = 0x1202,
+};
+
+static void LoadAshSpriteSheet(void)
+{
+ LoadSpriteSheet(&sAshSpriteSheet);
+}
+
+static const struct OamData sAshSpriteOamData = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_BLEND,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 15,
+};
+
+static const union AnimCmd sAshSpriteAnimCmd0[] = {
+ ANIMCMD_FRAME(0, 60),
+ ANIMCMD_FRAME(64, 60),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const sAshSpriteAnimCmds[] = {
+ sAshSpriteAnimCmd0,
+};
+
+static const struct SpriteTemplate sAshSpriteTemplate = {
+ .tileTag = 0x1202,
+ .paletteTag = 0x1200,
+ .oam = &sAshSpriteOamData,
+ .anims = sAshSpriteAnimCmds,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateAshSprite,
+};
+
+#define tOffsetY data[0]
+#define tCounterY data[1]
+#define tSpriteColumn data[2]
+#define tSpriteRow data[3]
+
+static void CreateAshSprites(void)
+{
+ u8 i;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ if (!gWeatherPtr->ashSpritesCreated)
+ {
+ for (i = 0; i < NUM_ASH_SPRITES; i++)
+ {
+ spriteId = CreateSpriteAtEnd(&sAshSpriteTemplate, 0, 0, 0x4E);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->tCounterY = 0;
+ sprite->tSpriteColumn = (u8)(i % 5);
+ sprite->tSpriteRow = (u8)(i / 5);
+ sprite->tOffsetY = sprite->tSpriteRow * 64 + 32;
+ gWeatherPtr->sprites.s2.ashSprites[i] = sprite;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
+ }
+ }
+
+ gWeatherPtr->ashSpritesCreated = TRUE;
+ }
+}
+
+static void DestroyAshSprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->ashSpritesCreated)
+ {
+ for (i = 0; i < NUM_ASH_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.ashSprites[i]);
+ }
+
+ FreeSpriteTilesByTag(0x1202);
+ gWeatherPtr->ashSpritesCreated = FALSE;
+ }
+}
+
+static void UpdateAshSprite(struct Sprite *sprite)
+{
+ if (++sprite->tCounterY > 5)
+ {
+ sprite->tCounterY = 0;
+ sprite->tOffsetY++;
+ }
+
+ sprite->pos1.y = gSpriteCoordOffsetY + sprite->tOffsetY;
+ sprite->pos1.x = gWeatherPtr->ashBaseSpritesX + 32 + sprite->tSpriteColumn * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->ashBaseSpritesX + 480 - (4 - sprite->tSpriteColumn) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+#undef tOffsetY
+#undef tCounterY
+#undef tSpriteColumn
+#undef tSpriteRow
+
+//------------------------------------------------------------------------------
+// WEATHER_FOG_DIAGONAL
+//------------------------------------------------------------------------------
+
+static void UpdateFogDiagonalMovement(void);
+static void CreateFogDiagonalSprites(void);
+static void DestroyFogDiagonalSprites(void);
+static void UpdateFogDiagonalSprite(struct Sprite *);
+
+void FogDiagonal_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = 0;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->fogHScrollCounter = 0;
+ gWeatherPtr->fogHScrollOffset = 1;
+ if (!gWeatherPtr->fogDSpritesCreated)
+ {
+ gWeatherPtr->fogDScrollXCounter = 0;
+ gWeatherPtr->fogDScrollYCounter = 0;
+ gWeatherPtr->fogDXOffset = 0;
+ gWeatherPtr->fogDYOffset = 0;
+ gWeatherPtr->fogDBaseSpritesX = 0;
+ gWeatherPtr->fogDPosY = 0;
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void FogDiagonal_InitAll(void)
+{
+ FogDiagonal_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ FogDiagonal_Main();
+}
+
+void FogDiagonal_Main(void)
+{
+ UpdateFogDiagonalMovement();
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateFogDiagonalSprites();
+ 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;
+ }
+}
+
+bool8 FogDiagonal_Finish(void)
+{
+ UpdateFogDiagonalMovement();
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 1);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ DestroyFogDiagonalSprites();
+ gWeatherPtr->finishStep++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void UpdateFogDiagonalMovement(void)
+{
+ if (++gWeatherPtr->fogDScrollXCounter > 2)
+ {
+ gWeatherPtr->fogDXOffset++;
+ gWeatherPtr->fogDScrollXCounter = 0;
+ }
+
+ if (++gWeatherPtr->fogDScrollYCounter > 4)
+ {
+ gWeatherPtr->fogDYOffset++;
+ gWeatherPtr->fogDScrollYCounter = 0;
+ }
+
+ gWeatherPtr->fogDBaseSpritesX = (gSpriteCoordOffsetX - gWeatherPtr->fogDXOffset) & 0xFF;
+ gWeatherPtr->fogDPosY = gSpriteCoordOffsetY + gWeatherPtr->fogDYOffset;
+}
+
+static const struct SpriteSheet gFogDiagonalSpriteSheet = {
+ .data = gWeatherFogDiagonalTiles,
+ .size = 0x0800,
+ .tag = 0x1203,
+};
+
+static const struct OamData sFogDiagonalSpriteOamData = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_BLEND,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+};
+
+static const union AnimCmd sFogDiagonalSpriteAnimCmd0[] = {
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sFogDiagonalSpriteAnimCmds[] = {
+ sFogDiagonalSpriteAnimCmd0,
+};
+
+static const struct SpriteTemplate sFogDiagonalSpriteTemplate = {
+ .tileTag = 0x1203,
+ .paletteTag = 0x1200,
+ .oam = &sFogDiagonalSpriteOamData,
+ .anims = sFogDiagonalSpriteAnimCmds,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateFogDiagonalSprite,
+};
+
+#define tSpriteColumn data[0]
+#define tSpriteRow data[1]
+
+static void CreateFogDiagonalSprites(void)
+{
+ u16 i;
+ struct SpriteSheet fogDiagonalSpriteSheet;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ if (!gWeatherPtr->fogDSpritesCreated)
+ {
+ fogDiagonalSpriteSheet = gFogDiagonalSpriteSheet;
+ LoadSpriteSheet(&fogDiagonalSpriteSheet);
+ for (i = 0; i < NUM_FOG_DIAGONAL_SPRITES; i++)
+ {
+ spriteId = CreateSpriteAtEnd(&sFogDiagonalSpriteTemplate, 0, (i / 5) * 64, 0xFF);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->tSpriteColumn = i % 5;
+ sprite->tSpriteRow = i / 5;
+ gWeatherPtr->sprites.s2.fogDSprites[i] = sprite;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.fogDSprites[i] = NULL;
+ }
+ }
+
+ gWeatherPtr->fogDSpritesCreated = TRUE;
+ }
+}
+
+static void DestroyFogDiagonalSprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->fogDSpritesCreated)
+ {
+ for (i = 0; i < NUM_FOG_DIAGONAL_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s2.fogDSprites[i])
+ DestroySprite(gWeatherPtr->sprites.s2.fogDSprites[i]);
+ }
+
+ FreeSpriteTilesByTag(0x1203);
+ gWeatherPtr->fogDSpritesCreated = FALSE;
+ }
+}
+
+static void UpdateFogDiagonalSprite(struct Sprite *sprite)
+{
+ sprite->pos2.y = gWeatherPtr->fogDPosY;
+ sprite->pos1.x = gWeatherPtr->fogDBaseSpritesX + 32 + sprite->tSpriteColumn * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->fogDBaseSpritesX + 480 - (4 - sprite->tSpriteColumn) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+#undef tSpriteColumn
+#undef tSpriteRow
+
+//------------------------------------------------------------------------------
+// WEATHER_SANDSTORM
+//------------------------------------------------------------------------------
+
+static void UpdateSandstormWaveIndex(void);
+static void UpdateSandstormMovement(void);
+static void CreateSandstormSprites(void);
+static void CreateSwirlSandstormSprites(void);
+static void DestroySandstormSprites(void);
+static void UpdateSandstormSprite(struct Sprite *);
+static void WaitSandSwirlSpriteEntrance(struct Sprite *);
+static void UpdateSandstormSwirlSprite(struct Sprite *);
+
+#define MIN_SANDSTORM_WAVE_INDEX 0x20
+
+void Sandstorm_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = 0;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ if (!gWeatherPtr->sandstormSpritesCreated)
+ {
+ gWeatherPtr->sandstormXOffset = gWeatherPtr->sandstormYOffset = 0;
+ gWeatherPtr->sandstormWaveIndex = 8;
+ gWeatherPtr->sandstormWaveCounter = 0;
+ // Dead code. How does the compiler not optimize this out?
+ if (gWeatherPtr->sandstormWaveIndex >= 0x80 - MIN_SANDSTORM_WAVE_INDEX)
+ gWeatherPtr->sandstormWaveIndex = 0x80 - gWeatherPtr->sandstormWaveIndex;
+
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void Sandstorm_InitAll(void)
+{
+ Sandstorm_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Sandstorm_Main();
+}
+
+void Sandstorm_Main(void)
+{
+ UpdateSandstormMovement();
+ UpdateSandstormWaveIndex();
+ if (gWeatherPtr->sandstormWaveIndex >= 0x80 - MIN_SANDSTORM_WAVE_INDEX)
+ gWeatherPtr->sandstormWaveIndex = MIN_SANDSTORM_WAVE_INDEX;
+
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateSandstormSprites();
+ CreateSwirlSandstormSprites();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ Weather_SetTargetBlendCoeffs(16, 0, 0);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (Weather_UpdateBlend())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+bool8 Sandstorm_Finish(void)
+{
+ UpdateSandstormMovement();
+ UpdateSandstormWaveIndex();
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 0);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (Weather_UpdateBlend())
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ DestroySandstormSprites();
+ gWeatherPtr->finishStep++;
+ break;
+ default:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void UpdateSandstormWaveIndex(void)
+{
+ if (gWeatherPtr->sandstormWaveCounter++ > 4)
+ {
+ gWeatherPtr->sandstormWaveIndex++;
+ gWeatherPtr->sandstormWaveCounter = 0;
+ }
+}
+
+static void UpdateSandstormMovement(void)
+{
+ gWeatherPtr->sandstormXOffset -= gSineTable[gWeatherPtr->sandstormWaveIndex] * 4;
+ gWeatherPtr->sandstormYOffset -= gSineTable[gWeatherPtr->sandstormWaveIndex];
+ gWeatherPtr->sandstormBaseSpritesX = (gSpriteCoordOffsetX + (gWeatherPtr->sandstormXOffset >> 8)) & 0xFF;
+ gWeatherPtr->sandstormPosY = gSpriteCoordOffsetY + (gWeatherPtr->sandstormYOffset >> 8);
+}
+
+static void DestroySandstormSprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->sandstormSpritesCreated)
+ {
+ for (i = 0; i < NUM_SANDSTORM_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s2.sandstormSprites1[i])
+ DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites1[i]);
+ }
+
+ gWeatherPtr->sandstormSpritesCreated = FALSE;
+ FreeSpriteTilesByTag(0x1204);
+ }
+
+ if (gWeatherPtr->sandstormSwirlSpritesCreated)
+ {
+ for (i = 0; i < NUM_SWIRL_SANDSTORM_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s2.sandstormSprites2[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites2[i]);
+ }
+
+ gWeatherPtr->sandstormSwirlSpritesCreated = FALSE;
+ }
+}
+
+static const struct OamData sSandstormSpriteOamData = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_BLEND,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+};
+
+static const union AnimCmd sSandstormSpriteAnimCmd0[] = {
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sSandstormSpriteAnimCmd1[] = {
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sSandstormSpriteAnimCmds[] = {
+ sSandstormSpriteAnimCmd0,
+ sSandstormSpriteAnimCmd1,
+};
+
+static const struct SpriteTemplate sSandstormSpriteTemplate = {
+ .tileTag = 0x1204,
+ .paletteTag = 0x1200,
+ .oam = &sSandstormSpriteOamData,
+ .anims = sSandstormSpriteAnimCmds,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateSandstormSprite,
+};
+
+static const struct SpriteSheet sSandstormSpriteSheet = {
+ .data = gWeatherSandstormTiles,
+ .size = 0x0a00,
+ .tag = 0x1204,
+};
+
+// Regular sandstorm sprites
+#define tSpriteColumn data[0]
+#define tSpriteRow data[1]
+
+// Swirly sandstorm sprites
+#define tRadius data[0]
+#define tWaveIndex data[1]
+#define tRadiusCounter data[2]
+#define tEntranceDelay data[3]
+
+static void CreateSandstormSprites(void)
+{
+ u16 i;
+ u8 spriteId;
+
+ if (!gWeatherPtr->sandstormSpritesCreated)
+ {
+ LoadSpriteSheet(&sSandstormSpriteSheet);
+ LoadCustomWeatherSpritePalette(gSandstormWeatherPalette);
+ for (i = 0; i < NUM_SANDSTORM_SPRITES; i++)
+ {
+ spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, 0, (i / 5) * 64, 1);
+ if (spriteId != MAX_SPRITES)
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites1[i] = &gSprites[spriteId];
+ gWeatherPtr->sprites.s2.sandstormSprites1[i]->tSpriteColumn = i % 5;
+ gWeatherPtr->sprites.s2.sandstormSprites1[i]->tSpriteRow = i / 5;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites1[i] = NULL;
+ }
+ }
+
+ gWeatherPtr->sandstormSpritesCreated = TRUE;
+ }
+}
+
+static const u16 sSwirlEntranceDelays[] = {0, 120, 80, 160, 40, 0};
+
+static void CreateSwirlSandstormSprites(void)
+{
+ u16 i;
+ u8 spriteId;
+
+ if (!gWeatherPtr->sandstormSwirlSpritesCreated)
+ {
+ for (i = 0; i < NUM_SWIRL_SANDSTORM_SPRITES; i++)
+ {
+ spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, i * 48 + 24, 208, 1);
+ if (spriteId != MAX_SPRITES)
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites2[i] = &gSprites[spriteId];
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->oam.size = ST_OAM_SIZE_2;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->tSpriteRow = i * 51;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->tRadius = 8;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->tRadiusCounter = 0;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[4] = 0x6730; // unused value
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->tEntranceDelay = sSwirlEntranceDelays[i];
+ StartSpriteAnim(gWeatherPtr->sprites.s2.sandstormSprites2[i], 1);
+ CalcCenterToCornerVec(gWeatherPtr->sprites.s2.sandstormSprites2[i], SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), ST_OAM_AFFINE_OFF);
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->callback = WaitSandSwirlSpriteEntrance;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites2[i] = NULL;
+ }
+
+ gWeatherPtr->sandstormSwirlSpritesCreated = TRUE;
+ }
+ }
+}
+
+static void UpdateSandstormSprite(struct Sprite *sprite)
+{
+ sprite->pos2.y = gWeatherPtr->sandstormPosY;
+ sprite->pos1.x = gWeatherPtr->sandstormBaseSpritesX + 32 + sprite->tSpriteColumn * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->sandstormBaseSpritesX + 480 - (4 - sprite->tSpriteColumn) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+static void WaitSandSwirlSpriteEntrance(struct Sprite *sprite)
+{
+ if (--sprite->tEntranceDelay == -1)
+ sprite->callback = UpdateSandstormSwirlSprite;
+}
+
+static void UpdateSandstormSwirlSprite(struct Sprite *sprite)
+{
+ u32 x, y;
+
+ if (--sprite->pos1.y < -48)
+ {
+ sprite->pos1.y = 208;
+ sprite->tRadius = 4;
+ }
+
+ x = sprite->tRadius * gSineTable[sprite->tWaveIndex];
+ y = sprite->tRadius * gSineTable[sprite->tWaveIndex + 0x40];
+ sprite->pos2.x = x >> 8;
+ sprite->pos2.y = y >> 8;
+ sprite->tWaveIndex = (sprite->tWaveIndex + 10) & 0xFF;
+ if (++sprite->tRadiusCounter > 8)
+ {
+ sprite->tRadiusCounter = 0;
+ sprite->tRadius++;
+ }
+}
+
+#undef tSpriteColumn
+#undef tSpriteRow
+
+#undef tRadius
+#undef tWaveIndex
+#undef tRadiusCounter
+#undef tEntranceDelay
+
+//------------------------------------------------------------------------------
+// WEATHER_SHADE
+//------------------------------------------------------------------------------
+
+void Shade_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+}
+
+void Shade_InitAll(void)
+{
+ Shade_InitVars();
+}
+
+void Shade_Main(void)
+{
+}
+
+bool8 Shade_Finish(void)
+{
+ return FALSE;
+}
+
+//------------------------------------------------------------------------------
+// WEATHER_UNDERWATER_BUBBLES
+//------------------------------------------------------------------------------
+
+static void CreateBubbleSprite(u16);
+static void DestroyBubbleSprites(void);
+static void UpdateBubbleSprite(struct Sprite *);
+
+static const u8 sBubbleStartDelays[] = {40, 90, 60, 90, 2, 60, 40, 30};
+
+static const struct SpriteSheet sWeatherBubbleSpriteSheet = {
+ .data = gWeatherBubbleTiles,
+ .size = 0x0040,
+ .tag = 0x1205,
+};
+
+static const s16 sBubbleStartCoords[][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},
+};
+
+void Bubbles_InitVars(void)
+{
+ FogHorizontal_InitVars();
+ if (!gWeatherPtr->bubblesSpritesCreated)
+ {
+ LoadSpriteSheet(&sWeatherBubbleSpriteSheet);
+ gWeatherPtr->bubblesDelayIndex = 0;
+ gWeatherPtr->bubblesDelayCounter = sBubbleStartDelays[0];
+ gWeatherPtr->bubblesCoordsIndex = 0;
+ gWeatherPtr->bubblesSpriteCount = 0;
+ }
+}
+
+void Bubbles_InitAll(void)
+{
+ Bubbles_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Bubbles_Main();
+}
+
+void Bubbles_Main(void)
+{
+ FogHorizontal_Main();
+ if (++gWeatherPtr->bubblesDelayCounter > sBubbleStartDelays[gWeatherPtr->bubblesDelayIndex])
+ {
+ gWeatherPtr->bubblesDelayCounter = 0;
+ if (++gWeatherPtr->bubblesDelayIndex > NELEMS(sBubbleStartDelays) - 1)
+ gWeatherPtr->bubblesDelayIndex = 0;
+
+ CreateBubbleSprite(gWeatherPtr->bubblesCoordsIndex);
+ if (++gWeatherPtr->bubblesCoordsIndex > NELEMS(sBubbleStartCoords) - 1)
+ gWeatherPtr->bubblesCoordsIndex = 0;
+ }
+}
+
+bool8 Bubbles_Finish(void)
+{
+ if (!FogHorizontal_Finish())
+ {
+ DestroyBubbleSprites();
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static const union AnimCmd sBubbleSpriteAnimCmd0[] = {
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_FRAME(1, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sBubbleSpriteAnimCmds[] = {
+ sBubbleSpriteAnimCmd0,
+};
+
+static const struct SpriteTemplate sBubbleSpriteTemplate = {
+ .tileTag = 0x1205,
+ .paletteTag = 0x1200,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sBubbleSpriteAnimCmds,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateBubbleSprite,
+};
+
+#define tScrollXCounter data[0]
+#define tScrollXDir data[1]
+#define tCounter data[2]
+
+static void CreateBubbleSprite(u16 coordsIndex)
+{
+ s16 x = sBubbleStartCoords[coordsIndex][0];
+ s16 y = sBubbleStartCoords[coordsIndex][1] - gSpriteCoordOffsetY;
+ u8 spriteId = CreateSpriteAtEnd(&sBubbleSpriteTemplate, x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = 1;
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gSprites[spriteId].tScrollXCounter = 0;
+ gSprites[spriteId].tScrollXDir = 0;
+ gSprites[spriteId].tCounter = 0;
+ gWeatherPtr->bubblesSpriteCount++;
+ }
+}
+
+static void DestroyBubbleSprites(void)
+{
+ u16 i;
+
+ for (i = 0; i < MAX_SPRITES; i++)
+ {
+ if (gSprites[i].template == &sBubbleSpriteTemplate)
+ DestroySprite(&gSprites[i]);
+ }
+
+ FreeSpriteTilesByTag(0x1205);
+}
+
+static void UpdateBubbleSprite(struct Sprite *sprite)
+{
+ ++sprite->tScrollXCounter;
+ if (++sprite->tScrollXCounter > 8) // double increment
+ {
+ sprite->tScrollXCounter = 0;
+ if (sprite->tScrollXDir == 0)
+ {
+ if (++sprite->pos2.x > 4)
+ sprite->tScrollXDir = 1;
+ }
+ else
+ {
+ if (--sprite->pos2.x <= 0)
+ sprite->tScrollXDir = 0;
+ }
+ }
+
+ sprite->pos1.y -= 3;
+ if (++sprite->tCounter >= 120)
+ DestroySprite(sprite);
+}
+
+#undef tScrollXCounter
+#undef tScrollXDir
+#undef tCounter
diff --git a/src/field_weather_util.c b/src/field_weather_util.c
new file mode 100644
index 000000000..459071736
--- /dev/null
+++ b/src/field_weather_util.c
@@ -0,0 +1,105 @@
+#include "global.h"
+#include "field_weather.h"
+#include "overworld.h"
+#include "constants/weather.h"
+
+static u8 TranslateWeatherNum(u8 weather);
+static void UpdateRainCounter(u8 newWeather, u8 oldWeather);
+
+void SetSav1Weather(u32 weather)
+{
+ u8 oldWeather = gSaveBlock1Ptr->weather;
+ gSaveBlock1Ptr->weather = TranslateWeatherNum(weather);
+ UpdateRainCounter(gSaveBlock1Ptr->weather, oldWeather);
+}
+
+u8 GetSav1Weather(void)
+{
+ return gSaveBlock1Ptr->weather;
+}
+
+void SetSav1WeatherFromCurrMapHeader(void)
+{
+ u8 oldWeather = gSaveBlock1Ptr->weather;
+ gSaveBlock1Ptr->weather = TranslateWeatherNum(gMapHeader.weather);
+ UpdateRainCounter(gSaveBlock1Ptr->weather, oldWeather);
+}
+
+void SetWeather(u32 weather)
+{
+ SetSav1Weather(weather);
+ SetNextWeather(GetSav1Weather());
+}
+
+void SetWeather_Unused(u32 weather)
+{
+ SetSav1Weather(weather);
+ SetCurrentAndNextWeather(GetSav1Weather());
+}
+
+void DoCurrentWeather(void)
+{
+ u8 weather = GetSav1Weather();
+
+ SetNextWeather(weather);
+}
+
+void ResumePausedWeather(void)
+{
+ u8 weather = GetSav1Weather();
+
+ SetCurrentAndNextWeather(weather);
+}
+
+static const u8 sWeatherCycleRoute119[] = {
+ WEATHER_SUNNY,
+ WEATHER_RAIN,
+ WEATHER_RAIN_THUNDERSTORM,
+ WEATHER_RAIN,
+};
+
+static const u8 sWeatherCycleRoute123[] = {
+ WEATHER_SUNNY,
+ WEATHER_SUNNY,
+ WEATHER_RAIN,
+ WEATHER_SUNNY,
+};
+
+static u8 TranslateWeatherNum(u8 weather)
+{
+ switch (weather)
+ {
+ case WEATHER_NONE: return WEATHER_NONE;
+ case WEATHER_SUNNY_CLOUDS: return WEATHER_SUNNY_CLOUDS;
+ case WEATHER_SUNNY: return WEATHER_SUNNY;
+ case WEATHER_RAIN: return WEATHER_RAIN;
+ case WEATHER_SNOW: return WEATHER_SNOW;
+ case WEATHER_RAIN_THUNDERSTORM: return WEATHER_RAIN_THUNDERSTORM;
+ case WEATHER_FOG_HORIZONTAL: return WEATHER_FOG_HORIZONTAL;
+ case WEATHER_VOLCANIC_ASH: return WEATHER_VOLCANIC_ASH;
+ case WEATHER_SANDSTORM: return WEATHER_SANDSTORM;
+ case WEATHER_FOG_DIAGONAL: return WEATHER_FOG_DIAGONAL;
+ case WEATHER_UNDERWATER: return WEATHER_UNDERWATER;
+ case WEATHER_SHADE: return WEATHER_SHADE;
+ case WEATHER_DROUGHT: return WEATHER_DROUGHT;
+ case WEATHER_DOWNPOUR: return WEATHER_DOWNPOUR;
+ case WEATHER_UNDERWATER_BUBBLES: return WEATHER_UNDERWATER_BUBBLES;
+ case WEATHER_ROUTE119_CYCLE: return sWeatherCycleRoute119[gSaveBlock1Ptr->weatherCycleStage];
+ case WEATHER_ROUTE123_CYCLE: return sWeatherCycleRoute123[gSaveBlock1Ptr->weatherCycleStage];
+ default: return WEATHER_NONE;
+ }
+}
+
+void UpdateWeatherPerDay(u16 increment)
+{
+ u16 weatherStage = gSaveBlock1Ptr->weatherCycleStage + increment;
+ weatherStage %= 4;
+ gSaveBlock1Ptr->weatherCycleStage = weatherStage;
+}
+
+static void UpdateRainCounter(u8 newWeather, u8 oldWeather)
+{
+ if (newWeather != oldWeather
+ && (newWeather == WEATHER_RAIN || newWeather == WEATHER_RAIN_THUNDERSTORM))
+ IncrementGameStat(GAME_STAT_GOT_RAINED_ON);
+}
diff --git a/src/ice.c b/src/ice.c
index 6843538f9..8b4269a95 100644
--- a/src/ice.c
+++ b/src/ice.c
@@ -944,7 +944,7 @@ void AnimTask_Haze1(u8 taskId)
SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
sub_80752A0(&animBg);
- LoadBgTiles(animBg.bgId, gWeatherFog1Tiles, 0x800, animBg.tilesOffset);
+ LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset);
AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimFogTilemap);
LoadPalette(&gUnknown_83C2CE0, animBg.paletteId * 16, 32);
if (IsContest())
@@ -1042,7 +1042,7 @@ void AnimTask_LoadMistTiles(u8 taskId)
SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
sub_80752A0(&animBg);
- LoadBgTiles(animBg.bgId, gWeatherFog1Tiles, 0x800, animBg.tilesOffset);
+ LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset);
AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimFogTilemap);
LoadPalette(&gUnknown_83C2CE0, animBg.paletteId * 16, 32);
if (IsContest())
diff --git a/src/title_screen.c b/src/title_screen.c
index 0ff0a6b96..e1bcf5dd2 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -305,6 +305,22 @@ static const u16 gUnknown_LG_83BFA10[] = {
};
#endif
+static const u32 gUnknown_83BFBE4[] = INCBIN_U32("graphics/title_screen/unk_83BFBE4.bin.lz");
+static const u32 gUnknown_83C0408[] = INCBIN_U32("graphics/title_screen/unk_83C0408.bin.lz");
+static const u32 gUnknown_83C0C00[] = INCBIN_U32("graphics/title_screen/unk_83C0C00.bin.lz");
+static const u32 gUnknown_83C139C[] = INCBIN_U32("graphics/title_screen/unk_83C139C.bin.lz");
+static const u32 gUnknown_83C1BB8[] = INCBIN_U32("graphics/title_screen/unk_83C1BB8.bin.lz");
+static const u32 gUnknown_83C2380[] = INCBIN_U32("graphics/title_screen/unk_83C2380.bin.lz");
+
+static const u32 *const gUnknown_83C2BA4[] = {
+ gUnknown_83BFBE4,
+ gUnknown_83C0408,
+ gUnknown_83C0C00,
+ gUnknown_83C139C,
+ gUnknown_83C1BB8,
+ gUnknown_83C2380
+};
+
void CB2_InitTitleScreen(void)
{
switch (gMain.state)
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 531ae1434..3da5bb78f 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -117,27 +117,8 @@ gPlayerAvatar: @ 2037078
.include "src/battle_anim_mons.o"
.align 2
.include "src/title_screen.o"
-
.align 2
- @ .include "src/field_weather.o"
-gUnknown_2037F34: @ 2037F34
- .space 0x200
-
-gUnknown_2038134: @ 2038134
- .space 0x260
-
-gUnknown_2038394: @ 2038394
- .space 0x2F0
-
-gUnknown_2038684: @ 2038684
- .space 0x20
-
-gUnknown_20386A4: @ 20386A4
- .space 0x4
-
-gUnknown_20386A8: @ 20386A8
- .space 0x4
-
+ .include "src/field_weather.o"
.align 2
.include "src/battle_setup.o"
.align 2