From 6e00e822101c4c3f68bce0789ba56133b24b586b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 16 Mar 2020 20:12:37 -0400 Subject: Port field_weather from Emerald --- asm/field_weather.s | 3016 ------------------------------------------ asm/field_weather_effects.s | 452 +++---- asm/field_weather_util.s | 295 +++++ asm/overworld.s | 8 +- data/field_weather.s | 133 -- include/field_weather.h | 2 +- include/field_weather_util.h | 6 + ld_script.txt | 5 + src/credits.c | 4 +- src/field_weather.c | 1320 ++++++++++++++++++ src/field_weather_util.c | 12 + sym_ewram.txt | 21 +- 12 files changed, 1872 insertions(+), 3402 deletions(-) create mode 100644 asm/field_weather_util.s create mode 100644 include/field_weather_util.h create mode 100644 src/field_weather.c create mode 100644 src/field_weather_util.c diff --git a/asm/field_weather.s b/asm/field_weather.s index c5204def2..2428f2984 100644 --- a/asm/field_weather.s +++ b/asm/field_weather.s @@ -5,3020 +5,4 @@ .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 index decfe4078..23b5a111c 100644 --- a/asm/field_weather_effects.s +++ b/asm/field_weather_effects.s @@ -8,7 +8,7 @@ thumb_func_start Clouds_InitVars Clouds_InitVars: @ 807B2DC push {lr} - ldr r0, _0807B314 @ =gUnknown_83C2BBC + ldr r0, _0807B314 @ =gWeatherPtr ldr r0, [r0] ldr r2, _0807B318 @ =0x000006c1 adds r1, r0, r2 @@ -36,7 +36,7 @@ _0807B310: pop {r0} bx r0 .align 2, 0 -_0807B314: .4byte gUnknown_83C2BBC +_0807B314: .4byte gWeatherPtr _0807B318: .4byte 0x000006c1 _0807B31C: .4byte 0x000006c2 _0807B320: .4byte 0x000006d2 @@ -47,7 +47,7 @@ _0807B324: .4byte 0x000006de Clouds_InitAll: @ 807B328 push {r4,lr} bl Clouds_InitVars - ldr r0, _0807B350 @ =gUnknown_83C2BBC + ldr r0, _0807B350 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807B354 @ =0x000006d2 adds r0, r1, r2 @@ -65,14 +65,14 @@ _0807B348: pop {r0} bx r0 .align 2, 0 -_0807B350: .4byte gUnknown_83C2BBC +_0807B350: .4byte gWeatherPtr _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 r0, _0807B374 @ =gWeatherPtr ldr r5, [r0] ldr r0, _0807B378 @ =0x000006cc adds r4, r5, r0 @@ -85,7 +85,7 @@ Clouds_Main: @ 807B358 beq _0807B382 b _0807B3AC .align 2, 0 -_0807B374: .4byte gUnknown_83C2BBC +_0807B374: .4byte gWeatherPtr _0807B378: .4byte 0x000006cc _0807B37C: cmp r0, 0x2 @@ -124,7 +124,7 @@ _0807B3B4: .4byte 0x000006d2 thumb_func_start Clouds_Finish Clouds_Finish: @ 807B3B8 push {r4,lr} - ldr r0, _0807B3D0 @ =gUnknown_83C2BBC + ldr r0, _0807B3D0 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807B3D4 @ =0x000006ce adds r4, r0, r1 @@ -136,7 +136,7 @@ Clouds_Finish: @ 807B3B8 movs r0, 0 b _0807B3FA .align 2, 0 -_0807B3D0: .4byte gUnknown_83C2BBC +_0807B3D0: .4byte gWeatherPtr _0807B3D4: .4byte 0x000006ce _0807B3D8: movs r0, 0 @@ -164,7 +164,7 @@ _0807B3FA: thumb_func_start Weather2_InitVars Weather2_InitVars: @ 807B400 - ldr r0, _0807B418 @ =gUnknown_83C2BBC + ldr r0, _0807B418 @ =gWeatherPtr ldr r1, [r0] ldr r0, _0807B41C @ =0x000006c1 adds r2, r1, r0 @@ -176,7 +176,7 @@ Weather2_InitVars: @ 807B400 strb r0, [r1] bx lr .align 2, 0 -_0807B418: .4byte gUnknown_83C2BBC +_0807B418: .4byte gWeatherPtr _0807B41C: .4byte 0x000006c1 _0807B420: .4byte 0x000006c2 thumb_func_end Weather2_InitVars @@ -203,7 +203,7 @@ sub_807B434: @ 807B434 thumb_func_start CreateCloudSprites CreateCloudSprites: @ 807B438 push {r4,r5,lr} - ldr r0, _0807B4B0 @ =gUnknown_83C2BBC + ldr r0, _0807B4B0 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807B4B4 @ =0x000006de adds r0, r1 @@ -213,7 +213,7 @@ CreateCloudSprites: @ 807B438 ldr r0, _0807B4B8 @ =gUnknown_83C65D4 bl LoadSpriteSheet ldr r0, _0807B4BC @ =gUnknown_83C2D00 - bl sub_807ABC0 + bl LoadCustomWeatherSpritePalette movs r5, 0 _0807B456: ldr r0, _0807B4C0 @ =gUnknown_83C65F0 @@ -225,7 +225,7 @@ _0807B456: lsrs r3, r0, 24 cmp r3, 0x40 beq _0807B4CC - ldr r0, _0807B4B0 @ =gUnknown_83C2BBC + ldr r0, _0807B4B0 @ =gWeatherPtr ldr r1, [r0] lsls r2, r5, 2 movs r0, 0xFA @@ -260,7 +260,7 @@ _0807B456: strb r0, [r4] b _0807B4DE .align 2, 0 -_0807B4B0: .4byte gUnknown_83C2BBC +_0807B4B0: .4byte gWeatherPtr _0807B4B4: .4byte 0x000006de _0807B4B8: .4byte gUnknown_83C65D4 _0807B4BC: .4byte gUnknown_83C2D00 @@ -268,7 +268,7 @@ _0807B4C0: .4byte gUnknown_83C65F0 _0807B4C4: .4byte gSprites _0807B4C8: .4byte gUnknown_83C65C8 _0807B4CC: - ldr r0, _0807B4FC @ =gUnknown_83C2BBC + ldr r0, _0807B4FC @ =gWeatherPtr ldr r1, [r0] lsls r0, r5, 2 movs r2, 0xFA @@ -283,7 +283,7 @@ _0807B4DE: lsrs r5, r0, 16 cmp r5, 0x2 bls _0807B456 - ldr r0, _0807B4FC @ =gUnknown_83C2BBC + ldr r0, _0807B4FC @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807B500 @ =0x000006de adds r0, r1 @@ -294,14 +294,14 @@ _0807B4F4: pop {r0} bx r0 .align 2, 0 -_0807B4FC: .4byte gUnknown_83C2BBC +_0807B4FC: .4byte gWeatherPtr _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 r0, _0807B550 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807B554 @ =0x000006de adds r0, r1, r2 @@ -328,7 +328,7 @@ _0807B52A: movs r0, 0x90 lsls r0, 5 bl FreeSpriteTilesByTag - ldr r0, _0807B550 @ =gUnknown_83C2BBC + ldr r0, _0807B550 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807B554 @ =0x000006de adds r0, r1 @@ -339,7 +339,7 @@ _0807B548: pop {r0} bx r0 .align 2, 0 -_0807B550: .4byte gUnknown_83C2BBC +_0807B550: .4byte gWeatherPtr _0807B554: .4byte 0x000006de thumb_func_end sub_807B504 @@ -364,7 +364,7 @@ _0807B570: thumb_func_start Drought_InitVars Drought_InitVars: @ 807B574 - ldr r0, _0807B598 @ =gUnknown_83C2BBC + ldr r0, _0807B598 @ =gWeatherPtr ldr r1, [r0] ldr r0, _0807B59C @ =0x000006cc adds r3, r1, r0 @@ -382,7 +382,7 @@ Drought_InitVars: @ 807B574 strb r2, [r1] bx lr .align 2, 0 -_0807B598: .4byte gUnknown_83C2BBC +_0807B598: .4byte gWeatherPtr _0807B59C: .4byte 0x000006cc _0807B5A0: .4byte 0x000006d2 _0807B5A4: .4byte 0x000006c2 @@ -392,7 +392,7 @@ _0807B5A4: .4byte 0x000006c2 Drought_InitAll: @ 807B5A8 push {r4,lr} bl Drought_InitVars - ldr r0, _0807B5D0 @ =gUnknown_83C2BBC + ldr r0, _0807B5D0 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807B5D4 @ =0x000006d2 adds r0, r1, r2 @@ -410,14 +410,14 @@ _0807B5C8: pop {r0} bx r0 .align 2, 0 -_0807B5D0: .4byte gUnknown_83C2BBC +_0807B5D0: .4byte gWeatherPtr _0807B5D4: .4byte 0x000006d2 thumb_func_end Drought_InitAll thumb_func_start Drought_Main Drought_Main: @ 807B5D8 push {lr} - ldr r1, _0807B5F4 @ =gUnknown_83C2BBC + ldr r1, _0807B5F4 @ =gWeatherPtr ldr r0, [r1] ldr r2, _0807B5F8 @ =0x000006cc adds r0, r2 @@ -431,7 +431,7 @@ Drought_Main: @ 807B5D8 ldr r0, [r0] mov pc, r0 .align 2, 0 -_0807B5F4: .4byte gUnknown_83C2BBC +_0807B5F4: .4byte gWeatherPtr _0807B5F8: .4byte 0x000006cc _0807B5FC: .4byte _0807B600 .align 2, 0 @@ -455,41 +455,41 @@ _0807B614: _0807B628: .4byte 0x000006c6 _0807B62C: .4byte 0x000006cc _0807B630: - bl sub_807ABF4 - ldr r0, _0807B640 @ =gUnknown_83C2BBC + bl ResetDroughtWeatherPaletteLoading + ldr r0, _0807B640 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807B644 @ =0x000006cc adds r1, r2 b _0807B69C .align 2, 0 -_0807B640: .4byte gUnknown_83C2BBC +_0807B640: .4byte gWeatherPtr _0807B644: .4byte 0x000006cc _0807B648: - bl sub_807AC14 + bl LoadDroughtWeatherPalettes lsls r0, 24 cmp r0, 0 bne _0807B6B8 - ldr r0, _0807B65C @ =gUnknown_83C2BBC + ldr r0, _0807B65C @ =gWeatherPtr ldr r1, [r0] ldr r0, _0807B660 @ =0x000006cc adds r1, r0 b _0807B69C .align 2, 0 -_0807B65C: .4byte gUnknown_83C2BBC +_0807B65C: .4byte gWeatherPtr _0807B660: .4byte 0x000006cc _0807B664: bl sub_807AC60 - ldr r0, _0807B674 @ =gUnknown_83C2BBC + ldr r0, _0807B674 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807B678 @ =0x000006cc adds r1, r2 b _0807B69C .align 2, 0 -_0807B674: .4byte gUnknown_83C2BBC +_0807B674: .4byte gWeatherPtr _0807B678: .4byte 0x000006cc _0807B67C: bl sub_807AC98 - ldr r0, _0807B6A4 @ =gUnknown_83C2BBC + ldr r0, _0807B6A4 @ =gWeatherPtr ldr r2, [r0] ldr r1, _0807B6A8 @ =0x0000073c adds r0, r2, r1 @@ -509,7 +509,7 @@ _0807B69C: strh r0, [r1] b _0807B6B8 .align 2, 0 -_0807B6A4: .4byte gUnknown_83C2BBC +_0807B6A4: .4byte gWeatherPtr _0807B6A8: .4byte 0x0000073c _0807B6AC: .4byte 0x000006d2 _0807B6B0: .4byte 0x000006cc @@ -660,7 +660,7 @@ _0807B7C2: thumb_func_start LightRain_InitVars LightRain_InitVars: @ 807B7C8 push {r4,lr} - ldr r0, _0807B818 @ =gUnknown_83C2BBC + ldr r0, _0807B818 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807B81C @ =0x000006cc adds r0, r1, r2 @@ -698,7 +698,7 @@ LightRain_InitVars: @ 807B7C8 pop {r0} bx r0 .align 2, 0 -_0807B818: .4byte gUnknown_83C2BBC +_0807B818: .4byte gWeatherPtr _0807B81C: .4byte 0x000006cc _0807B820: .4byte 0x000006d2 _0807B824: .4byte 0x000006db @@ -711,7 +711,7 @@ _0807B830: .4byte 0x000006c2 LightRain_InitAll: @ 807B834 push {r4,lr} bl LightRain_InitVars - ldr r0, _0807B85C @ =gUnknown_83C2BBC + ldr r0, _0807B85C @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807B860 @ =0x000006d2 adds r0, r1, r2 @@ -729,14 +729,14 @@ _0807B854: pop {r0} bx r0 .align 2, 0 -_0807B85C: .4byte gUnknown_83C2BBC +_0807B85C: .4byte gWeatherPtr _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 r0, _0807B880 @ =gWeatherPtr ldr r5, [r0] ldr r0, _0807B884 @ =0x000006cc adds r4, r5, r0 @@ -749,7 +749,7 @@ LightRain_Main: @ 807B864 beq _0807B88E b _0807B8B8 .align 2, 0 -_0807B880: .4byte gUnknown_83C2BBC +_0807B880: .4byte gWeatherPtr _0807B884: .4byte 0x000006cc _0807B888: cmp r0, 0x2 @@ -788,7 +788,7 @@ _0807B8C0: .4byte 0x000006d2 thumb_func_start LightRain_Finish LightRain_Finish: @ 807B8C4 push {r4,r5,lr} - ldr r0, _0807B8E0 @ =gUnknown_83C2BBC + ldr r0, _0807B8E0 @ =gWeatherPtr ldr r2, [r0] ldr r1, _0807B8E4 @ =0x000006ce adds r3, r2, r1 @@ -801,7 +801,7 @@ LightRain_Finish: @ 807B8C4 movs r0, 0 b _0807B94A .align 2, 0 -_0807B8E0: .4byte gUnknown_83C2BBC +_0807B8E0: .4byte gWeatherPtr _0807B8E4: .4byte 0x000006ce _0807B8E8: ldr r5, _0807B908 @ =0x000006d1 @@ -837,7 +837,7 @@ _0807B91C: cmp r0, 0 bne _0807B948 bl DestroyRainSprites - ldr r0, _0807B940 @ =gUnknown_83C2BBC + ldr r0, _0807B940 @ =gWeatherPtr ldr r1, [r0] ldr r5, _0807B944 @ =0x000006ce adds r1, r5 @@ -848,7 +848,7 @@ _0807B91C: b _0807B94A .align 2, 0 _0807B93C: .4byte 0x000006d9 -_0807B940: .4byte gUnknown_83C2BBC +_0807B940: .4byte gWeatherPtr _0807B944: .4byte 0x000006ce _0807B948: movs r0, 0x1 @@ -886,7 +886,7 @@ _0807B964: mov r8, r1 strh r0, [r7, 0x30] ldr r1, _0807BA14 @ =gUnknown_83C66C4 - ldr r0, _0807BA18 @ =gUnknown_83C2BBC + ldr r0, _0807BA18 @ =gWeatherPtr ldr r5, [r0] ldr r2, _0807BA1C @ =0x000006dc adds r5, r2 @@ -953,7 +953,7 @@ _0807BA08: .4byte 0x00000169 _0807BA0C: .4byte 0x41c64e6d _0807BA10: .4byte 0x00003039 _0807BA14: .4byte gUnknown_83C66C4 -_0807BA18: .4byte gUnknown_83C2BBC +_0807BA18: .4byte gWeatherPtr _0807BA1C: .4byte 0x000006dc _0807BA20: .4byte gUnknown_83C66BC thumb_func_end sub_807B950 @@ -967,7 +967,7 @@ sub_807BA24: @ 807BA24 cmp r0, 0 bne _0807BB00 ldr r3, _0807BA98 @ =gUnknown_83C66BC - ldr r4, _0807BA9C @ =gUnknown_83C2BBC + ldr r4, _0807BA9C @ =gWeatherPtr ldr r2, [r4] ldr r0, _0807BAA0 @ =0x000006dc adds r2, r0 @@ -1020,7 +1020,7 @@ sub_807BA24: @ 807BA24 b _0807BAAE .align 2, 0 _0807BA98: .4byte gUnknown_83C66BC -_0807BA9C: .4byte gUnknown_83C2BBC +_0807BA9C: .4byte gWeatherPtr _0807BAA0: .4byte 0x000006dc _0807BAA4: adds r0, r5, 0 @@ -1123,7 +1123,7 @@ sub_807BB54: @ 807BB54 lsls r5, r1, 16 lsrs r5, 16 ldr r2, _0807BBD8 @ =gUnknown_83C66C4 - ldr r0, _0807BBDC @ =gUnknown_83C2BBC + ldr r0, _0807BBDC @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807BBE0 @ =0x000006dc adds r0, r1 @@ -1184,7 +1184,7 @@ _0807BBD4: b _0807BBFC .align 2, 0 _0807BBD8: .4byte gUnknown_83C66C4 -_0807BBDC: .4byte gUnknown_83C2BBC +_0807BBDC: .4byte gWeatherPtr _0807BBE0: .4byte 0x000006dc _0807BBE4: .4byte 0x0000ffff _0807BBE8: @@ -1225,7 +1225,7 @@ CreateRainSprite: @ 807BC18 mov r6, r9 mov r5, r8 push {r5-r7} - ldr r0, _0807BCC4 @ =gUnknown_83C2BBC + ldr r0, _0807BCC4 @ =gWeatherPtr ldr r4, [r0] ldr r0, _0807BCC8 @ =0x000006da adds r2, r4, r0 @@ -1301,13 +1301,13 @@ _0807BC96: movs r1, 0x4 orrs r0, r1 strb r0, [r2] - ldr r0, _0807BCC4 @ =gUnknown_83C2BBC + ldr r0, _0807BCC4 @ =gWeatherPtr ldr r0, [r0] add r0, r10 str r4, [r0] b _0807BCE6 .align 2, 0 -_0807BCC4: .4byte gUnknown_83C2BBC +_0807BCC4: .4byte gWeatherPtr _0807BCC8: .4byte 0x000006da _0807BCCC: .4byte gUnknown_83C66A4 _0807BCD0: .4byte gUnknown_83C6608 @@ -1319,7 +1319,7 @@ _0807BCE0: movs r0, 0 str r0, [r1] _0807BCE6: - ldr r0, _0807BD1C @ =gUnknown_83C2BBC + ldr r0, _0807BD1C @ =gWeatherPtr ldr r2, [r0] ldr r6, _0807BD20 @ =0x000006da adds r1, r2, r6 @@ -1347,7 +1347,7 @@ _0807BD04: str r5, [r2, 0x1C] b _0807BD2E .align 2, 0 -_0807BD1C: .4byte gUnknown_83C2BBC +_0807BD1C: .4byte gWeatherPtr _0807BD20: .4byte 0x000006da _0807BD24: .4byte sub_807BA24 _0807BD28: .4byte sub_807BB28 @@ -1377,7 +1377,7 @@ _0807BD3E: thumb_func_start sub_807BD4C sub_807BD4C: @ 807BD4C push {r4-r7,lr} - ldr r0, _0807BD68 @ =gUnknown_83C2BBC + ldr r0, _0807BD68 @ =gWeatherPtr ldr r3, [r0] movs r0, 0xDB lsls r0, 3 @@ -1391,7 +1391,7 @@ sub_807BD4C: @ 807BD4C movs r0, 0 b _0807BDD2 .align 2, 0 -_0807BD68: .4byte gUnknown_83C2BBC +_0807BD68: .4byte gWeatherPtr _0807BD6C: .4byte 0x000006d9 _0807BD70: ldr r0, _0807BDA8 @ =0x000006d6 @@ -1453,7 +1453,7 @@ _0807BDD2: DestroyRainSprites: @ 807BDD8 push {r4-r7,lr} movs r4, 0 - ldr r0, _0807BE20 @ =gUnknown_83C2BBC + ldr r0, _0807BE20 @ =gWeatherPtr ldr r2, [r0] ldr r3, _0807BE24 @ =0x000006da adds r1, r2, r3 @@ -1489,7 +1489,7 @@ _0807BE0A: pop {r0} bx r0 .align 2, 0 -_0807BE20: .4byte gUnknown_83C2BBC +_0807BE20: .4byte gWeatherPtr _0807BE24: .4byte 0x000006da _0807BE28: .4byte 0x00001206 thumb_func_end DestroyRainSprites @@ -1497,7 +1497,7 @@ _0807BE28: .4byte 0x00001206 thumb_func_start Snow_InitVars Snow_InitVars: @ 807BE2C push {r4,lr} - ldr r0, _0807BE68 @ =gUnknown_83C2BBC + ldr r0, _0807BE68 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807BE6C @ =0x000006cc adds r0, r1, r2 @@ -1527,7 +1527,7 @@ Snow_InitVars: @ 807BE2C pop {r0} bx r0 .align 2, 0 -_0807BE68: .4byte gUnknown_83C2BBC +_0807BE68: .4byte gWeatherPtr _0807BE6C: .4byte 0x000006cc _0807BE70: .4byte 0x000006d2 _0807BE74: .4byte 0x000006c1 @@ -1540,7 +1540,7 @@ Snow_InitAll: @ 807BE7C mov r7, r8 push {r7} bl Snow_InitVars - ldr r2, _0807BEDC @ =gUnknown_83C2BBC + ldr r2, _0807BEDC @ =gWeatherPtr ldr r1, [r2] ldr r3, _0807BEE0 @ =0x000006d2 adds r0, r1, r3 @@ -1559,7 +1559,7 @@ _0807BE98: ldrb r0, [r0] cmp r4, r0 bcs _0807BECC - ldr r0, _0807BEDC @ =gUnknown_83C2BBC + ldr r0, _0807BEDC @ =gWeatherPtr ldr r5, [r0] adds r6, r5, r3 _0807BEB2: @@ -1586,7 +1586,7 @@ _0807BED2: pop {r0} bx r0 .align 2, 0 -_0807BEDC: .4byte gUnknown_83C2BBC +_0807BEDC: .4byte gWeatherPtr _0807BEE0: .4byte 0x000006d2 _0807BEE4: .4byte 0x000006e4 thumb_func_end Snow_InitAll @@ -1594,7 +1594,7 @@ _0807BEE4: .4byte 0x000006e4 thumb_func_start snowflakes_progress2 snowflakes_progress2: @ 807BEE8 push {r4,r5,lr} - ldr r0, _0807BF18 @ =gUnknown_83C2BBC + ldr r0, _0807BF18 @ =gWeatherPtr ldr r5, [r0] ldr r0, _0807BF1C @ =0x000006cc adds r4, r5, r0 @@ -1617,7 +1617,7 @@ _0807BF10: pop {r0} bx r0 .align 2, 0 -_0807BF18: .4byte gUnknown_83C2BBC +_0807BF18: .4byte gWeatherPtr _0807BF1C: .4byte 0x000006cc _0807BF20: .4byte 0x000006d2 thumb_func_end snowflakes_progress2 @@ -1625,7 +1625,7 @@ _0807BF20: .4byte 0x000006d2 thumb_func_start Snow_Finish Snow_Finish: @ 807BF24 push {r4,lr} - ldr r0, _0807BF3C @ =gUnknown_83C2BBC + ldr r0, _0807BF3C @ =gWeatherPtr ldr r2, [r0] ldr r0, _0807BF40 @ =0x000006ce adds r3, r2, r0 @@ -1637,7 +1637,7 @@ Snow_Finish: @ 807BF24 movs r0, 0 b _0807BF82 .align 2, 0 -_0807BF3C: .4byte gUnknown_83C2BBC +_0807BF3C: .4byte gWeatherPtr _0807BF40: .4byte 0x000006ce _0807BF44: ldr r4, _0807BF74 @ =0x000006e5 @@ -1654,7 +1654,7 @@ _0807BF56: lsls r0, 24 cmp r0, 0 bne _0807BF80 - ldr r0, _0807BF78 @ =gUnknown_83C2BBC + ldr r0, _0807BF78 @ =gWeatherPtr ldr r1, [r0] ldr r0, _0807BF7C @ =0x000006ce adds r1, r0 @@ -1665,7 +1665,7 @@ _0807BF56: b _0807BF82 .align 2, 0 _0807BF74: .4byte 0x000006e5 -_0807BF78: .4byte gUnknown_83C2BBC +_0807BF78: .4byte gWeatherPtr _0807BF7C: .4byte 0x000006ce _0807BF80: movs r0, 0x1 @@ -1678,7 +1678,7 @@ _0807BF82: thumb_func_start snowflakes_progress snowflakes_progress: @ 807BF88 push {r4,lr} - ldr r0, _0807BFA4 @ =gUnknown_83C2BBC + ldr r0, _0807BFA4 @ =gWeatherPtr ldr r1, [r0] ldr r0, _0807BFA8 @ =0x000006e4 adds r3, r1, r0 @@ -1691,7 +1691,7 @@ snowflakes_progress: @ 807BF88 movs r0, 0 b _0807BFF2 .align 2, 0 -_0807BFA4: .4byte gUnknown_83C2BBC +_0807BFA4: .4byte gWeatherPtr _0807BFA8: .4byte 0x000006e4 _0807BFAC: .4byte 0x000006e5 _0807BFB0: @@ -1716,7 +1716,7 @@ _0807BFB0: _0807BFD6: bl snowflake_remove _0807BFDA: - ldr r0, _0807BFF8 @ =gUnknown_83C2BBC + ldr r0, _0807BFF8 @ =gWeatherPtr ldr r0, [r0] ldr r2, _0807BFFC @ =0x000006e4 adds r1, r0, r2 @@ -1733,7 +1733,7 @@ _0807BFF2: pop {r1} bx r1 .align 2, 0 -_0807BFF8: .4byte gUnknown_83C2BBC +_0807BFF8: .4byte gWeatherPtr _0807BFFC: .4byte 0x000006e4 _0807C000: .4byte 0x000006e5 thumb_func_end snowflakes_progress @@ -1755,7 +1755,7 @@ snowflake_add: @ 807C004 adds r4, r1 lsls r4, 2 adds r4, r0 - ldr r0, _0807C060 @ =gUnknown_83C2BBC + ldr r0, _0807C060 @ =gWeatherPtr ldr r5, [r0] ldr r0, _0807C064 @ =0x000006e4 adds r6, r5, r0 @@ -1782,7 +1782,7 @@ snowflake_add: @ 807C004 .align 2, 0 _0807C058: .4byte gUnknown_83C6704 _0807C05C: .4byte gSprites -_0807C060: .4byte gUnknown_83C2BBC +_0807C060: .4byte gWeatherPtr _0807C064: .4byte 0x000006e4 _0807C068: movs r0, 0 @@ -1795,7 +1795,7 @@ _0807C06A: thumb_func_start snowflake_remove snowflake_remove: @ 807C070 push {lr} - ldr r0, _0807C084 @ =gUnknown_83C2BBC + ldr r0, _0807C084 @ =gWeatherPtr ldr r1, [r0] ldr r0, _0807C088 @ =0x000006e4 adds r2, r1, r0 @@ -1805,7 +1805,7 @@ snowflake_remove: @ 807C070 movs r0, 0 b _0807C0A0 .align 2, 0 -_0807C084: .4byte gUnknown_83C2BBC +_0807C084: .4byte gWeatherPtr _0807C088: .4byte 0x000006e4 _0807C08C: subs r0, 0x1 @@ -1911,7 +1911,7 @@ _0807C14C: .4byte gSpriteCoordOffsetX sub_807C150: @ 807C150 push {r4,lr} adds r3, r0, 0 - ldr r0, _0807C19C @ =gUnknown_83C2BBC + ldr r0, _0807C19C @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807C1A0 @ =0x000006e2 adds r4, r0, r1 @@ -1949,7 +1949,7 @@ _0807C196: pop {r0} bx r0 .align 2, 0 -_0807C19C: .4byte gUnknown_83C2BBC +_0807C19C: .4byte gWeatherPtr _0807C1A0: .4byte 0x000006e2 _0807C1A4: .4byte sub_807C1AC _0807C1A8: .4byte gSpriteCoordOffsetY @@ -2120,7 +2120,7 @@ _0807C2E0: .4byte sub_807C150 thumb_func_start sub_807C2E4 sub_807C2E4: @ 807C2E4 push {r4,r5,lr} - ldr r0, _0807C33C @ =gUnknown_83C2BBC + ldr r0, _0807C33C @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807C340 @ =0x000006cc adds r0, r1, r2 @@ -2162,7 +2162,7 @@ sub_807C2E4: @ 807C2E4 pop {r0} bx r0 .align 2, 0 -_0807C33C: .4byte gUnknown_83C2BBC +_0807C33C: .4byte gWeatherPtr _0807C340: .4byte 0x000006cc _0807C344: .4byte 0x000006d2 _0807C348: .4byte 0x000006db @@ -2175,7 +2175,7 @@ _0807C354: .4byte 0x000006ed sub_807C358: @ 807C358 push {r4,lr} bl sub_807C2E4 - ldr r0, _0807C380 @ =gUnknown_83C2BBC + ldr r0, _0807C380 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807C384 @ =0x000006d2 adds r0, r1, r2 @@ -2193,14 +2193,14 @@ _0807C378: pop {r0} bx r0 .align 2, 0 -_0807C380: .4byte gUnknown_83C2BBC +_0807C380: .4byte gWeatherPtr _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 r0, _0807C3DC @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807C3E0 @ =0x000006cc adds r0, r1, r2 @@ -2240,7 +2240,7 @@ sub_807C388: @ 807C388 pop {r0} bx r0 .align 2, 0 -_0807C3DC: .4byte gUnknown_83C2BBC +_0807C3DC: .4byte gWeatherPtr _0807C3E0: .4byte 0x000006cc _0807C3E4: .4byte 0x000006d2 _0807C3E8: .4byte 0x000006db @@ -2252,7 +2252,7 @@ _0807C3F0: .4byte 0x000006c2 sub_807C3F4: @ 807C3F4 push {r4,lr} bl sub_807C388 - ldr r0, _0807C41C @ =gUnknown_83C2BBC + ldr r0, _0807C41C @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807C420 @ =0x000006d2 adds r0, r1, r2 @@ -2270,7 +2270,7 @@ _0807C414: pop {r0} bx r0 .align 2, 0 -_0807C41C: .4byte gUnknown_83C2BBC +_0807C41C: .4byte gWeatherPtr _0807C420: .4byte 0x000006d2 thumb_func_end sub_807C3F4 @@ -2278,7 +2278,7 @@ _0807C420: .4byte 0x000006d2 Rain_Main: @ 807C424 push {r4,r5,lr} bl UpdateThunderSound - ldr r0, _0807C444 @ =gUnknown_83C2BBC + ldr r0, _0807C444 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807C448 @ =0x000006cc adds r0, r1 @@ -2293,7 +2293,7 @@ _0807C43A: ldr r0, [r0] mov pc, r0 .align 2, 0 -_0807C444: .4byte gUnknown_83C2BBC +_0807C444: .4byte gWeatherPtr _0807C448: .4byte 0x000006cc _0807C44C: .4byte _0807C450 .align 2, 0 @@ -2315,7 +2315,7 @@ _0807C450: .4byte _0807C77C _0807C48C: bl LoadRainSpriteSheet - ldr r0, _0807C4A0 @ =gUnknown_83C2BBC + ldr r0, _0807C4A0 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807C4A4 @ =0x000006cc adds r1, r2 @@ -2323,7 +2323,7 @@ _0807C48C: adds r0, 0x1 b _0807C798 .align 2, 0 -_0807C4A0: .4byte gUnknown_83C2BBC +_0807C4A0: .4byte gWeatherPtr _0807C4A4: .4byte 0x000006cc _0807C4A8: bl CreateRainSprite @@ -2332,7 +2332,7 @@ _0807C4A8: beq _0807C4B4 b _0807C79A _0807C4B4: - ldr r0, _0807C4C4 @ =gUnknown_83C2BBC + ldr r0, _0807C4C4 @ =gWeatherPtr ldr r1, [r0] ldr r3, _0807C4C8 @ =0x000006cc adds r1, r3 @@ -2340,7 +2340,7 @@ _0807C4B4: adds r0, 0x1 b _0807C798 .align 2, 0 -_0807C4C4: .4byte gUnknown_83C2BBC +_0807C4C4: .4byte gWeatherPtr _0807C4C8: .4byte 0x000006cc _0807C4CC: bl sub_807BD4C @@ -2349,7 +2349,7 @@ _0807C4CC: beq _0807C4D8 b _0807C79A _0807C4D8: - ldr r0, _0807C4F0 @ =gUnknown_83C2BBC + ldr r0, _0807C4F0 @ =gWeatherPtr ldr r1, [r0] ldr r0, _0807C4F4 @ =0x000006d2 adds r2, r1, r0 @@ -2361,11 +2361,11 @@ _0807C4D8: adds r0, 0x1 b _0807C798 .align 2, 0 -_0807C4F0: .4byte gUnknown_83C2BBC +_0807C4F0: .4byte gWeatherPtr _0807C4F4: .4byte 0x000006d2 _0807C4F8: .4byte 0x000006cc _0807C4FC: - ldr r0, _0807C514 @ =gUnknown_83C2BBC + ldr r0, _0807C514 @ =gWeatherPtr ldr r1, [r0] ldr r3, _0807C518 @ =0x000006c6 adds r0, r1, r3 @@ -2379,11 +2379,11 @@ _0807C50C: movs r0, 0x6 b _0807C798 .align 2, 0 -_0807C514: .4byte gUnknown_83C2BBC +_0807C514: .4byte gWeatherPtr _0807C518: .4byte 0x000006c6 _0807C51C: .4byte 0x000006cc _0807C520: - ldr r0, _0807C570 @ =gUnknown_83C2BBC + ldr r0, _0807C570 @ =gWeatherPtr ldr r4, [r0] ldr r2, _0807C574 @ =0x000006ea adds r1, r4, r2 @@ -2406,7 +2406,7 @@ _0807C520: adds r0, 0x1 strh r0, [r4] _0807C550: - ldr r0, _0807C570 @ =gUnknown_83C2BBC + ldr r0, _0807C570 @ =gWeatherPtr ldr r2, [r0] ldr r3, _0807C578 @ =0x000006e6 adds r1, r2, r3 @@ -2424,12 +2424,12 @@ _0807C566: adds r0, 0x1 b _0807C798 .align 2, 0 -_0807C570: .4byte gUnknown_83C2BBC +_0807C570: .4byte gWeatherPtr _0807C574: .4byte 0x000006ea _0807C578: .4byte 0x000006e6 _0807C57C: .4byte 0x000006cc _0807C580: - ldr r0, _0807C5A0 @ =gUnknown_83C2BBC + ldr r0, _0807C5A0 @ =gWeatherPtr ldr r4, [r0] ldr r1, _0807C5A4 @ =0x000006ea adds r0, r4, r1 @@ -2444,12 +2444,12 @@ _0807C580: strb r0, [r1] b _0807C608 .align 2, 0 -_0807C5A0: .4byte gUnknown_83C2BBC +_0807C5A0: .4byte gWeatherPtr _0807C5A4: .4byte 0x000006ea _0807C5A8: .4byte 0x000006eb _0807C5AC: bl Random - ldr r1, _0807C614 @ =gUnknown_83C2BBC + ldr r1, _0807C614 @ =gWeatherPtr ldr r2, [r1] movs r1, 0x1 ands r1, r0 @@ -2465,7 +2465,7 @@ _0807C5AC: _0807C5CA: movs r0, 0x13 bl sub_807A790 - ldr r0, _0807C614 @ =gUnknown_83C2BBC + ldr r0, _0807C614 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807C620 @ =0x000006eb adds r0, r1, r2 @@ -2481,7 +2481,7 @@ _0807C5CA: bl SetThunderCounter _0807C5EE: bl Random - ldr r1, _0807C614 @ =gUnknown_83C2BBC + ldr r1, _0807C614 @ =gWeatherPtr ldr r4, [r1] lsls r0, 16 lsrs r0, 16 @@ -2499,13 +2499,13 @@ _0807C608: strh r0, [r4] b _0807C79A .align 2, 0 -_0807C614: .4byte gUnknown_83C2BBC +_0807C614: .4byte gWeatherPtr _0807C618: .4byte 0x000006ec _0807C61C: .4byte 0x000006cc _0807C620: .4byte 0x000006eb _0807C624: .4byte 0x000006e6 _0807C628: - ldr r0, _0807C674 @ =gUnknown_83C2BBC + ldr r0, _0807C674 @ =gWeatherPtr ldr r4, [r0] ldr r0, _0807C678 @ =0x000006e6 adds r5, r4, r0 @@ -2543,7 +2543,7 @@ _0807C63E: movs r0, 0xA b _0807C798 .align 2, 0 -_0807C674: .4byte gUnknown_83C2BBC +_0807C674: .4byte gWeatherPtr _0807C678: .4byte 0x000006e6 _0807C67C: .4byte 0x000006ea _0807C680: .4byte 0x000006ec @@ -2568,7 +2568,7 @@ _0807C6A0: .align 2, 0 _0807C6A8: .4byte 0x000006cc _0807C6AC: - ldr r0, _0807C6C8 @ =gUnknown_83C2BBC + ldr r0, _0807C6C8 @ =gWeatherPtr ldr r2, [r0] ldr r0, _0807C6CC @ =0x000006e6 adds r1, r2, r0 @@ -2583,12 +2583,12 @@ _0807C6AC: movs r0, 0x8 b _0807C798 .align 2, 0 -_0807C6C8: .4byte gUnknown_83C2BBC +_0807C6C8: .4byte gWeatherPtr _0807C6CC: .4byte 0x000006e6 _0807C6D0: .4byte 0x000006cc _0807C6D4: bl Random - ldr r1, _0807C6F8 @ =gUnknown_83C2BBC + ldr r1, _0807C6F8 @ =gWeatherPtr ldr r2, [r1] lsls r0, 16 lsrs r0, 16 @@ -2605,11 +2605,11 @@ _0807C6D4: strh r0, [r2] b _0807C79A .align 2, 0 -_0807C6F8: .4byte gUnknown_83C2BBC +_0807C6F8: .4byte gWeatherPtr _0807C6FC: .4byte 0x000006e6 _0807C700: .4byte 0x000006cc _0807C704: - ldr r0, _0807C73C @ =gUnknown_83C2BBC + ldr r0, _0807C73C @ =gWeatherPtr ldr r5, [r0] ldr r1, _0807C740 @ =0x000006e6 adds r4, r5, r1 @@ -2634,11 +2634,11 @@ _0807C704: adds r0, 0x1 b _0807C798 .align 2, 0 -_0807C73C: .4byte gUnknown_83C2BBC +_0807C73C: .4byte gWeatherPtr _0807C740: .4byte 0x000006e6 _0807C744: .4byte 0x000006cc _0807C748: - ldr r0, _0807C770 @ =gUnknown_83C2BBC + ldr r0, _0807C770 @ =gWeatherPtr ldr r4, [r0] ldr r3, _0807C774 @ =0x000006e6 adds r1, r4, r3 @@ -2658,11 +2658,11 @@ _0807C748: adds r0, 0x1 b _0807C798 .align 2, 0 -_0807C770: .4byte gUnknown_83C2BBC +_0807C770: .4byte gWeatherPtr _0807C774: .4byte 0x000006e6 _0807C778: .4byte 0x000006cc _0807C77C: - ldr r0, _0807C7A0 @ =gUnknown_83C2BBC + ldr r0, _0807C7A0 @ =gWeatherPtr ldr r2, [r0] ldr r1, _0807C7A4 @ =0x000006c6 adds r0, r2, r1 @@ -2684,7 +2684,7 @@ _0807C79A: pop {r0} bx r0 .align 2, 0 -_0807C7A0: .4byte gUnknown_83C2BBC +_0807C7A0: .4byte gWeatherPtr _0807C7A4: .4byte 0x000006c6 _0807C7A8: .4byte 0x000006ea _0807C7AC: .4byte 0x000006cc @@ -2693,7 +2693,7 @@ _0807C7AC: .4byte 0x000006cc thumb_func_start Rain_Finish Rain_Finish: @ 807C7B0 push {r4-r6,lr} - ldr r0, _0807C7CC @ =gUnknown_83C2BBC + ldr r0, _0807C7CC @ =gWeatherPtr ldr r6, [r0] ldr r0, _0807C7D0 @ =0x000006ce adds r5, r6, r0 @@ -2706,7 +2706,7 @@ Rain_Finish: @ 807C7B0 beq _0807C7DA b _0807C84C .align 2, 0 -_0807C7CC: .4byte gUnknown_83C2BBC +_0807C7CC: .4byte gWeatherPtr _0807C7D0: .4byte 0x000006ce _0807C7D4: cmp r1, 0x2 @@ -2721,7 +2721,7 @@ _0807C7DA: strh r0, [r5] _0807C7E6: bl Rain_Main - ldr r0, _0807C824 @ =gUnknown_83C2BBC + ldr r0, _0807C824 @ =gWeatherPtr ldr r2, [r0] ldr r1, _0807C820 @ =0x000006ea adds r0, r2, r1 @@ -2749,7 +2749,7 @@ _0807C7E6: b _0807C854 .align 2, 0 _0807C820: .4byte 0x000006ea -_0807C824: .4byte gUnknown_83C2BBC +_0807C824: .4byte gWeatherPtr _0807C828: .4byte 0x000006d9 _0807C82C: .4byte 0x000006ce _0807C830: @@ -2783,7 +2783,7 @@ SetThunderCounter: @ 807C85C push {r4-r6,lr} lsls r0, 16 lsrs r6, r0, 16 - ldr r0, _0807C890 @ =gUnknown_83C2BBC + ldr r0, _0807C890 @ =gWeatherPtr ldr r4, [r0] ldr r0, _0807C894 @ =0x000006ed adds r5, r4, r0 @@ -2806,14 +2806,14 @@ _0807C88A: pop {r0} bx r0 .align 2, 0 -_0807C890: .4byte gUnknown_83C2BBC +_0807C890: .4byte gWeatherPtr _0807C894: .4byte 0x000006ed thumb_func_end SetThunderCounter thumb_func_start UpdateThunderSound UpdateThunderSound: @ 807C898 push {r4,lr} - ldr r0, _0807C8D0 @ =gUnknown_83C2BBC + ldr r0, _0807C8D0 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807C8D4 @ =0x000006ed adds r0, r1, r2 @@ -2838,13 +2838,13 @@ UpdateThunderSound: @ 807C898 bl PlaySE b _0807C8DE .align 2, 0 -_0807C8D0: .4byte gUnknown_83C2BBC +_0807C8D0: .4byte gWeatherPtr _0807C8D4: .4byte 0x000006ed _0807C8D8: movs r0, 0x51 bl PlaySE _0807C8DE: - ldr r0, _0807C8EC @ =gUnknown_83C2BBC + ldr r0, _0807C8EC @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807C8F0 @ =0x000006ed adds r0, r1 @@ -2852,7 +2852,7 @@ _0807C8DE: strb r1, [r0] b _0807C8F8 .align 2, 0 -_0807C8EC: .4byte gUnknown_83C2BBC +_0807C8EC: .4byte gWeatherPtr _0807C8F0: .4byte 0x000006ed _0807C8F4: subs r0, 0x1 @@ -2866,7 +2866,7 @@ _0807C8F8: thumb_func_start Fog1_InitVars Fog1_InitVars: @ 807C900 push {lr} - ldr r0, _0807C94C @ =gUnknown_83C2BBC + ldr r0, _0807C94C @ =gWeatherPtr ldr r3, [r0] ldr r0, _0807C950 @ =0x000006cc adds r1, r3, r0 @@ -2904,7 +2904,7 @@ _0807C948: pop {r0} bx r0 .align 2, 0 -_0807C94C: .4byte gUnknown_83C2BBC +_0807C94C: .4byte gWeatherPtr _0807C950: .4byte 0x000006cc _0807C954: .4byte 0x000006d2 _0807C958: .4byte 0x000006c2 @@ -2915,7 +2915,7 @@ _0807C95C: .4byte 0x000006fb Fog1_InitAll: @ 807C960 push {r4,lr} bl Fog1_InitVars - ldr r0, _0807C988 @ =gUnknown_83C2BBC + ldr r0, _0807C988 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807C98C @ =0x000006d2 adds r0, r1, r2 @@ -2933,14 +2933,14 @@ _0807C980: pop {r0} bx r0 .align 2, 0 -_0807C988: .4byte gUnknown_83C2BBC +_0807C988: .4byte gWeatherPtr _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 r0, _0807C9DC @ =gWeatherPtr ldr r6, [r0] ldr r0, _0807C9E0 @ =gSpriteCoordOffsetX ldr r1, _0807C9E4 @ =0x000006f2 @@ -2978,7 +2978,7 @@ _0807C9CA: beq _0807CA30 b _0807CA46 .align 2, 0 -_0807C9DC: .4byte gUnknown_83C2BBC +_0807C9DC: .4byte gWeatherPtr _0807C9E0: .4byte gSpriteCoordOffsetX _0807C9E4: .4byte 0x000006f2 _0807C9E8: .4byte 0x000006ee @@ -3002,7 +3002,7 @@ _0807CA0C: movs r2, 0 bl Weather_SetTargetBlendCoeffs _0807CA16: - ldr r0, _0807CA28 @ =gUnknown_83C2BBC + ldr r0, _0807CA28 @ =gWeatherPtr ldr r1, [r0] ldr r0, _0807CA2C @ =0x000006cc adds r1, r0 @@ -3011,7 +3011,7 @@ _0807CA16: strh r0, [r1] b _0807CA46 .align 2, 0 -_0807CA28: .4byte gUnknown_83C2BBC +_0807CA28: .4byte gWeatherPtr _0807CA2C: .4byte 0x000006cc _0807CA30: bl Weather_UpdateBlend @@ -3035,7 +3035,7 @@ _0807CA4C: .4byte 0x000006d2 thumb_func_start Fog1_Finish Fog1_Finish: @ 807CA50 push {r4,lr} - ldr r0, _0807CAA0 @ =gUnknown_83C2BBC + ldr r0, _0807CAA0 @ =gWeatherPtr ldr r2, [r0] ldr r0, _0807CAA4 @ =gSpriteCoordOffsetX ldr r1, _0807CAA8 @ =0x000006f2 @@ -3075,7 +3075,7 @@ _0807CA8A: beq _0807CABA b _0807CADE .align 2, 0 -_0807CAA0: .4byte gUnknown_83C2BBC +_0807CAA0: .4byte gWeatherPtr _0807CAA4: .4byte gSpriteCoordOffsetX _0807CAA8: .4byte 0x000006f2 _0807CAAC: .4byte 0x000006ee @@ -3121,7 +3121,7 @@ Fog1SpriteCallback: @ 807CAEC ldr r0, _0807CB38 @ =gSpriteCoordOffsetY ldrb r0, [r0] strh r0, [r3, 0x26] - ldr r0, _0807CB3C @ =gUnknown_83C2BBC + ldr r0, _0807CB3C @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807CB40 @ =0x000006ee adds r2, r0, r1 @@ -3156,7 +3156,7 @@ _0807CB30: bx r0 .align 2, 0 _0807CB38: .4byte gSpriteCoordOffsetY -_0807CB3C: .4byte gUnknown_83C2BBC +_0807CB3C: .4byte gWeatherPtr _0807CB40: .4byte 0x000006ee _0807CB44: .4byte 0x010f0000 _0807CB48: .4byte 0x000001ff @@ -3166,7 +3166,7 @@ _0807CB48: .4byte 0x000001ff CreateFog1Sprites: @ 807CB4C push {r4,r5,lr} sub sp, 0x8 - ldr r0, _0807CBC0 @ =gUnknown_83C2BBC + ldr r0, _0807CBC0 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807CBC4 @ =0x000006fb adds r0, r1 @@ -3211,7 +3211,7 @@ _0807CB70: lsrs r0, 10 adds r0, 0x20 strh r0, [r4, 0x22] - ldr r2, _0807CBC0 @ =gUnknown_83C2BBC + ldr r2, _0807CBC0 @ =gWeatherPtr ldr r0, [r2] lsls r1, r5, 2 adds r0, 0xA0 @@ -3219,13 +3219,13 @@ _0807CB70: str r4, [r0] b _0807CBE2 .align 2, 0 -_0807CBC0: .4byte gUnknown_83C2BBC +_0807CBC0: .4byte gWeatherPtr _0807CBC4: .4byte 0x000006fb _0807CBC8: .4byte gUnknown_83C67A8 _0807CBCC: .4byte gUnknown_83C6790 _0807CBD0: .4byte gSprites _0807CBD4: - ldr r2, _0807CC00 @ =gUnknown_83C2BBC + ldr r2, _0807CC00 @ =gWeatherPtr ldr r1, [r2] lsls r0, r5, 2 adds r1, 0xA0 @@ -3249,14 +3249,14 @@ _0807CBF6: pop {r0} bx r0 .align 2, 0 -_0807CC00: .4byte gUnknown_83C2BBC +_0807CC00: .4byte gWeatherPtr _0807CC04: .4byte 0x000006fb thumb_func_end CreateFog1Sprites thumb_func_start DestroyFog1Sprites DestroyFog1Sprites: @ 807CC08 push {r4,r5,lr} - ldr r0, _0807CC50 @ =gUnknown_83C2BBC + ldr r0, _0807CC50 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807CC54 @ =0x000006fb adds r0, r1, r2 @@ -3281,7 +3281,7 @@ _0807CC2C: bls _0807CC1E ldr r0, _0807CC58 @ =0x00001201 bl FreeSpriteTilesByTag - ldr r0, _0807CC50 @ =gUnknown_83C2BBC + ldr r0, _0807CC50 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807CC54 @ =0x000006fb adds r0, r1 @@ -3292,7 +3292,7 @@ _0807CC48: pop {r0} bx r0 .align 2, 0 -_0807CC50: .4byte gUnknown_83C2BBC +_0807CC50: .4byte gWeatherPtr _0807CC54: .4byte 0x000006fb _0807CC58: .4byte 0x00001201 thumb_func_end DestroyFog1Sprites @@ -3300,7 +3300,7 @@ _0807CC58: .4byte 0x00001201 thumb_func_start Ash_InitVars Ash_InitVars: @ 807CC5C push {lr} - ldr r0, _0807CCA8 @ =gUnknown_83C2BBC + ldr r0, _0807CCA8 @ =gWeatherPtr ldr r1, [r0] ldr r0, _0807CCAC @ =0x000006cc adds r2, r1, r0 @@ -3337,7 +3337,7 @@ _0807CCA4: pop {r0} bx r0 .align 2, 0 -_0807CCA8: .4byte gUnknown_83C2BBC +_0807CCA8: .4byte gWeatherPtr _0807CCAC: .4byte 0x000006cc _0807CCB0: .4byte 0x000006d2 _0807CCB4: .4byte 0x000006c2 @@ -3347,7 +3347,7 @@ _0807CCB4: .4byte 0x000006c2 Ash_InitAll: @ 807CCB8 push {r4,lr} bl Ash_InitVars - ldr r0, _0807CCE0 @ =gUnknown_83C2BBC + ldr r0, _0807CCE0 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807CCE4 @ =0x000006d2 adds r0, r1, r2 @@ -3365,14 +3365,14 @@ _0807CCD8: pop {r0} bx r0 .align 2, 0 -_0807CCE0: .4byte gUnknown_83C2BBC +_0807CCE0: .4byte gWeatherPtr _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 r2, _0807CD2C @ =gWeatherPtr ldr r1, [r2] ldr r0, _0807CD30 @ =gSpriteCoordOffsetX ldrh r0, [r0] @@ -3407,7 +3407,7 @@ _0807CD14: beq _0807CD46 b _0807CD88 .align 2, 0 -_0807CD2C: .4byte gUnknown_83C2BBC +_0807CD2C: .4byte gWeatherPtr _0807CD30: .4byte gSpriteCoordOffsetX _0807CD34: .4byte 0x000001ff _0807CD38: .4byte 0x000006fc @@ -3460,7 +3460,7 @@ _0807CD8C: thumb_func_start Ash_Finish Ash_Finish: @ 807CD94 push {r4,lr} - ldr r0, _0807CDB0 @ =gUnknown_83C2BBC + ldr r0, _0807CDB0 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807CDB4 @ =0x000006ce adds r4, r0, r1 @@ -3473,7 +3473,7 @@ Ash_Finish: @ 807CD94 beq _0807CDBE b _0807CDEE .align 2, 0 -_0807CDB0: .4byte gUnknown_83C2BBC +_0807CDB0: .4byte gWeatherPtr _0807CDB4: .4byte 0x000006ce _0807CDB8: cmp r0, 0x2 @@ -3528,7 +3528,7 @@ _0807CE08: .4byte gUnknown_83C67B0 thumb_func_start CreateAshSprites CreateAshSprites: @ 807CE0C push {r4,r5,lr} - ldr r0, _0807CE78 @ =gUnknown_83C2BBC + ldr r0, _0807CE78 @ =gWeatherPtr ldr r0, [r0] movs r1, 0xE0 lsls r1, 3 @@ -3571,7 +3571,7 @@ _0807CE20: lsls r0, 6 adds r0, 0x20 strh r0, [r4, 0x2E] - ldr r2, _0807CE78 @ =gUnknown_83C2BBC + ldr r2, _0807CE78 @ =gWeatherPtr ldr r0, [r2] lsls r1, r5, 2 adds r0, 0xF0 @@ -3579,11 +3579,11 @@ _0807CE20: str r4, [r0] b _0807CE92 .align 2, 0 -_0807CE78: .4byte gUnknown_83C2BBC +_0807CE78: .4byte gWeatherPtr _0807CE7C: .4byte gUnknown_83C67D0 _0807CE80: .4byte gSprites _0807CE84: - ldr r2, _0807CEB0 @ =gUnknown_83C2BBC + ldr r2, _0807CEB0 @ =gWeatherPtr ldr r1, [r2] lsls r0, r5, 2 adds r1, 0xF0 @@ -3607,13 +3607,13 @@ _0807CEA8: pop {r0} bx r0 .align 2, 0 -_0807CEB0: .4byte gUnknown_83C2BBC +_0807CEB0: .4byte gWeatherPtr thumb_func_end CreateAshSprites thumb_func_start DestroyAshSprites DestroyAshSprites: @ 807CEB4 push {r4,r5,lr} - ldr r0, _0807CF00 @ =gUnknown_83C2BBC + ldr r0, _0807CF00 @ =gWeatherPtr ldr r1, [r0] movs r2, 0xE0 lsls r2, 3 @@ -3639,7 +3639,7 @@ _0807CEDA: bls _0807CECC ldr r0, _0807CF04 @ =0x00001202 bl FreeSpriteTilesByTag - ldr r0, _0807CF00 @ =gUnknown_83C2BBC + ldr r0, _0807CF00 @ =gWeatherPtr ldr r0, [r0] movs r1, 0xE0 lsls r1, 3 @@ -3651,7 +3651,7 @@ _0807CEF8: pop {r0} bx r0 .align 2, 0 -_0807CF00: .4byte gUnknown_83C2BBC +_0807CF00: .4byte gWeatherPtr _0807CF04: .4byte 0x00001202 thumb_func_end DestroyAshSprites @@ -3677,7 +3677,7 @@ _0807CF24: ldrh r1, [r1] adds r0, r1 strh r0, [r3, 0x22] - ldr r0, _0807CF74 @ =gUnknown_83C2BBC + ldr r0, _0807CF74 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807CF78 @ =0x000006fc adds r2, r0, r1 @@ -3712,7 +3712,7 @@ _0807CF68: bx r0 .align 2, 0 _0807CF70: .4byte gSpriteCoordOffsetY -_0807CF74: .4byte gUnknown_83C2BBC +_0807CF74: .4byte gWeatherPtr _0807CF78: .4byte 0x000006fc _0807CF7C: .4byte 0x010f0000 _0807CF80: .4byte 0x000001ff @@ -3721,7 +3721,7 @@ _0807CF80: .4byte 0x000001ff thumb_func_start Fog2_InitVars Fog2_InitVars: @ 807CF84 push {r4,lr} - ldr r0, _0807CFF4 @ =gUnknown_83C2BBC + ldr r0, _0807CFF4 @ =gWeatherPtr ldr r3, [r0] ldr r1, _0807CFF8 @ =0x000006cc adds r0, r3, r1 @@ -3777,7 +3777,7 @@ _0807CFEE: pop {r0} bx r0 .align 2, 0 -_0807CFF4: .4byte gUnknown_83C2BBC +_0807CFF4: .4byte gWeatherPtr _0807CFF8: .4byte 0x000006cc _0807CFFC: .4byte 0x000006d2 _0807D000: .4byte 0x000006c2 @@ -3788,7 +3788,7 @@ _0807D004: .4byte 0x00000724 Fog2_InitAll: @ 807D008 push {r4,lr} bl Fog2_InitVars - ldr r0, _0807D030 @ =gUnknown_83C2BBC + ldr r0, _0807D030 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807D034 @ =0x000006d2 adds r0, r1, r2 @@ -3806,7 +3806,7 @@ _0807D028: pop {r0} bx r0 .align 2, 0 -_0807D030: .4byte gUnknown_83C2BBC +_0807D030: .4byte gWeatherPtr _0807D034: .4byte 0x000006d2 thumb_func_end Fog2_InitAll @@ -3814,7 +3814,7 @@ _0807D034: .4byte 0x000006d2 Fog2_Main: @ 807D038 push {r4,r5,lr} bl sub_807D0FC - ldr r0, _0807D058 @ =gUnknown_83C2BBC + ldr r0, _0807D058 @ =gWeatherPtr ldr r5, [r0] ldr r0, _0807D05C @ =0x000006cc adds r4, r5, r0 @@ -3827,7 +3827,7 @@ Fog2_Main: @ 807D038 beq _0807D066 b _0807D090 .align 2, 0 -_0807D058: .4byte gUnknown_83C2BBC +_0807D058: .4byte gWeatherPtr _0807D05C: .4byte 0x000006cc _0807D060: cmp r0, 0x2 @@ -3867,7 +3867,7 @@ _0807D098: .4byte 0x000006d2 Fog2_Finish: @ 807D09C push {r4,lr} bl sub_807D0FC - ldr r0, _0807D0BC @ =gUnknown_83C2BBC + ldr r0, _0807D0BC @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807D0C0 @ =0x000006ce adds r4, r0, r1 @@ -3880,7 +3880,7 @@ Fog2_Finish: @ 807D09C beq _0807D0CA b _0807D0EE .align 2, 0 -_0807D0BC: .4byte gUnknown_83C2BBC +_0807D0BC: .4byte gWeatherPtr _0807D0C0: .4byte 0x000006ce _0807D0C4: cmp r0, 0x2 @@ -3919,7 +3919,7 @@ _0807D0F4: thumb_func_start sub_807D0FC sub_807D0FC: @ 807D0FC push {r4,r5,lr} - ldr r0, _0807D174 @ =gUnknown_83C2BBC + ldr r0, _0807D174 @ =gWeatherPtr ldr r3, [r0] ldr r0, _0807D178 @ =0x0000071c adds r2, r3, r0 @@ -3981,7 +3981,7 @@ _0807D144: pop {r0} bx r0 .align 2, 0 -_0807D174: .4byte gUnknown_83C2BBC +_0807D174: .4byte gWeatherPtr _0807D178: .4byte 0x0000071c _0807D17C: .4byte 0x0000ffff _0807D180: .4byte 0x0000071e @@ -3994,7 +3994,7 @@ _0807D18C: .4byte gSpriteCoordOffsetY CreateFog2Sprites: @ 807D190 push {r4-r6,lr} sub sp, 0x8 - ldr r0, _0807D1FC @ =gUnknown_83C2BBC + ldr r0, _0807D1FC @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807D200 @ =0x00000724 adds r0, r1 @@ -4034,7 +4034,7 @@ _0807D1B4: bl __umodsi3 strh r0, [r4, 0x2E] strh r5, [r4, 0x30] - ldr r2, _0807D1FC @ =gUnknown_83C2BBC + ldr r2, _0807D1FC @ =gWeatherPtr ldr r0, [r2] lsls r1, r6, 2 movs r3, 0xA0 @@ -4044,13 +4044,13 @@ _0807D1B4: str r4, [r0] b _0807D222 .align 2, 0 -_0807D1FC: .4byte gUnknown_83C2BBC +_0807D1FC: .4byte gWeatherPtr _0807D200: .4byte 0x00000724 _0807D204: .4byte gUnknown_83C67E8 _0807D208: .4byte gUnknown_83C6804 _0807D20C: .4byte gSprites _0807D210: - ldr r2, _0807D240 @ =gUnknown_83C2BBC + ldr r2, _0807D240 @ =gWeatherPtr ldr r1, [r2] lsls r0, r6, 2 movs r3, 0xA0 @@ -4076,14 +4076,14 @@ _0807D236: pop {r0} bx r0 .align 2, 0 -_0807D240: .4byte gUnknown_83C2BBC +_0807D240: .4byte gWeatherPtr _0807D244: .4byte 0x00000724 thumb_func_end CreateFog2Sprites thumb_func_start DestroyFog2Sprites DestroyFog2Sprites: @ 807D248 push {r4,r5,lr} - ldr r0, _0807D290 @ =gUnknown_83C2BBC + ldr r0, _0807D290 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807D294 @ =0x00000724 adds r0, r1, r2 @@ -4109,7 +4109,7 @@ _0807D26E: bls _0807D260 ldr r0, _0807D298 @ =0x00001203 bl FreeSpriteTilesByTag - ldr r0, _0807D290 @ =gUnknown_83C2BBC + ldr r0, _0807D290 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807D294 @ =0x00000724 adds r0, r1 @@ -4120,7 +4120,7 @@ _0807D28A: pop {r0} bx r0 .align 2, 0 -_0807D290: .4byte gUnknown_83C2BBC +_0807D290: .4byte gWeatherPtr _0807D294: .4byte 0x00000724 _0807D298: .4byte 0x00001203 thumb_func_end DestroyFog2Sprites @@ -4129,7 +4129,7 @@ _0807D298: .4byte 0x00001203 Fog2SpriteCallback: @ 807D29C push {r4,lr} adds r3, r0, 0 - ldr r0, _0807D2EC @ =gUnknown_83C2BBC + ldr r0, _0807D2EC @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807D2F0 @ =0x0000071a adds r0, r1, r2 @@ -4168,7 +4168,7 @@ _0807D2E4: pop {r0} bx r0 .align 2, 0 -_0807D2EC: .4byte gUnknown_83C2BBC +_0807D2EC: .4byte gWeatherPtr _0807D2F0: .4byte 0x0000071a _0807D2F4: .4byte 0x010f0000 _0807D2F8: .4byte 0x000001ff @@ -4177,7 +4177,7 @@ _0807D2F8: .4byte 0x000001ff thumb_func_start Sandstorm_InitVars Sandstorm_InitVars: @ 807D2FC push {r4,lr} - ldr r0, _0807D360 @ =gUnknown_83C2BBC + ldr r0, _0807D360 @ =gWeatherPtr ldr r3, [r0] ldr r0, _0807D364 @ =0x000006cc adds r1, r3, r0 @@ -4227,7 +4227,7 @@ _0807D358: pop {r0} bx r0 .align 2, 0 -_0807D360: .4byte gUnknown_83C2BBC +_0807D360: .4byte gWeatherPtr _0807D364: .4byte 0x000006cc _0807D368: .4byte 0x000006d2 _0807D36C: .4byte 0x000006c1 @@ -4240,7 +4240,7 @@ _0807D378: .4byte 0x00000712 Sandstorm_InitAll: @ 807D37C push {r4,lr} bl Sandstorm_InitVars - ldr r0, _0807D3A4 @ =gUnknown_83C2BBC + ldr r0, _0807D3A4 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807D3A8 @ =0x000006d2 adds r0, r1, r2 @@ -4258,7 +4258,7 @@ _0807D39C: pop {r0} bx r0 .align 2, 0 -_0807D3A4: .4byte gUnknown_83C2BBC +_0807D3A4: .4byte gWeatherPtr _0807D3A8: .4byte 0x000006d2 thumb_func_end Sandstorm_InitAll @@ -4267,7 +4267,7 @@ Sandstorm_Main: @ 807D3AC push {r4,r5,lr} bl sub_807D4C4 bl sub_807D48C - ldr r0, _0807D3DC @ =gUnknown_83C2BBC + ldr r0, _0807D3DC @ =gWeatherPtr ldr r5, [r0] ldr r0, _0807D3E0 @ =0x00000712 adds r1, r5, r0 @@ -4288,7 +4288,7 @@ _0807D3C8: beq _0807D3EE b _0807D41C .align 2, 0 -_0807D3DC: .4byte gUnknown_83C2BBC +_0807D3DC: .4byte gWeatherPtr _0807D3E0: .4byte 0x00000712 _0807D3E4: .4byte 0x000006cc _0807D3E8: @@ -4331,7 +4331,7 @@ Sandstorm_Finish: @ 807D428 push {r4,lr} bl sub_807D4C4 bl sub_807D48C - ldr r0, _0807D44C @ =gUnknown_83C2BBC + ldr r0, _0807D44C @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807D450 @ =0x000006ce adds r4, r0, r1 @@ -4344,7 +4344,7 @@ Sandstorm_Finish: @ 807D428 beq _0807D45A b _0807D47E .align 2, 0 -_0807D44C: .4byte gUnknown_83C2BBC +_0807D44C: .4byte gWeatherPtr _0807D450: .4byte 0x000006ce _0807D454: cmp r0, 0x2 @@ -4383,7 +4383,7 @@ _0807D484: thumb_func_start sub_807D48C sub_807D48C: @ 807D48C push {lr} - ldr r0, _0807D4B8 @ =gUnknown_83C2BBC + ldr r0, _0807D4B8 @ =gWeatherPtr ldr r2, [r0] ldr r0, _0807D4BC @ =0x00000714 adds r3, r2, r0 @@ -4405,7 +4405,7 @@ _0807D4B2: pop {r0} bx r0 .align 2, 0 -_0807D4B8: .4byte gUnknown_83C2BBC +_0807D4B8: .4byte gWeatherPtr _0807D4BC: .4byte 0x00000714 _0807D4C0: .4byte 0x00000712 thumb_func_end sub_807D48C @@ -4413,7 +4413,7 @@ _0807D4C0: .4byte 0x00000712 thumb_func_start sub_807D4C4 sub_807D4C4: @ 807D4C4 push {r4-r6,lr} - ldr r0, _0807D528 @ =gUnknown_83C2BBC + ldr r0, _0807D528 @ =gWeatherPtr ldr r2, [r0] ldr r0, _0807D52C @ =0x00000704 adds r4, r2, r0 @@ -4463,7 +4463,7 @@ sub_807D4C4: @ 807D4C4 pop {r0} bx r0 .align 2, 0 -_0807D528: .4byte gUnknown_83C2BBC +_0807D528: .4byte gWeatherPtr _0807D52C: .4byte 0x00000704 _0807D530: .4byte gSineTable _0807D534: .4byte 0x00000712 @@ -4475,7 +4475,7 @@ _0807D540: .4byte gSpriteCoordOffsetY thumb_func_start sub_807D544 sub_807D544: @ 807D544 push {r4,r5,lr} - ldr r0, _0807D5C8 @ =gUnknown_83C2BBC + ldr r0, _0807D5C8 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807D5CC @ =0x00000716 adds r0, r1, r2 @@ -4499,7 +4499,7 @@ _0807D56A: lsrs r4, r0, 16 cmp r4, 0x13 bls _0807D55C - ldr r0, _0807D5C8 @ =gUnknown_83C2BBC + ldr r0, _0807D5C8 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807D5CC @ =0x00000716 adds r0, r1 @@ -4508,7 +4508,7 @@ _0807D56A: ldr r0, _0807D5D0 @ =0x00001204 bl FreeSpriteTilesByTag _0807D586: - ldr r0, _0807D5C8 @ =gUnknown_83C2BBC + ldr r0, _0807D5C8 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807D5D4 @ =0x00000717 adds r0, r1, r2 @@ -4532,7 +4532,7 @@ _0807D5AA: lsrs r4, r0, 16 cmp r4, 0x4 bls _0807D59C - ldr r0, _0807D5C8 @ =gUnknown_83C2BBC + ldr r0, _0807D5C8 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807D5D4 @ =0x00000717 adds r0, r1 @@ -4543,7 +4543,7 @@ _0807D5C0: pop {r0} bx r0 .align 2, 0 -_0807D5C8: .4byte gUnknown_83C2BBC +_0807D5C8: .4byte gWeatherPtr _0807D5CC: .4byte 0x00000716 _0807D5D0: .4byte 0x00001204 _0807D5D4: .4byte 0x00000717 @@ -4553,7 +4553,7 @@ _0807D5D4: .4byte 0x00000717 CreateSandstormSprites_1: @ 807D5D8 push {r4-r7,lr} sub sp, 0x4 - ldr r0, _0807D648 @ =gUnknown_83C2BBC + ldr r0, _0807D648 @ =gWeatherPtr ldr r0, [r0] ldr r1, _0807D64C @ =0x00000716 adds r0, r1 @@ -4563,7 +4563,7 @@ CreateSandstormSprites_1: @ 807D5D8 ldr r0, _0807D650 @ =gUnknown_83C6854 bl LoadSpriteSheet ldr r0, _0807D654 @ =gUnknown_83C2D20 - bl sub_807ABC0 + bl LoadCustomWeatherSpritePalette movs r7, 0 _0807D5F8: adds r0, r7, 0 @@ -4580,7 +4580,7 @@ _0807D5F8: lsrs r1, r0, 24 cmp r1, 0x40 beq _0807D660 - ldr r2, _0807D648 @ =gUnknown_83C2BBC + ldr r2, _0807D648 @ =gWeatherPtr ldr r5, [r2] lsls r0, r7, 2 movs r3, 0xC8 @@ -4603,14 +4603,14 @@ _0807D5F8: ldr r2, [sp] b _0807D672 .align 2, 0 -_0807D648: .4byte gUnknown_83C2BBC +_0807D648: .4byte gWeatherPtr _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 r2, _0807D690 @ =gWeatherPtr ldr r1, [r2] lsls r0, r7, 2 movs r3, 0xC8 @@ -4636,7 +4636,7 @@ _0807D686: pop {r0} bx r0 .align 2, 0 -_0807D690: .4byte gUnknown_83C2BBC +_0807D690: .4byte gWeatherPtr _0807D694: .4byte 0x00000716 thumb_func_end CreateSandstormSprites_1 @@ -4647,7 +4647,7 @@ CreateSandstormSprites_2: @ 807D698 mov r6, r9 mov r5, r8 push {r5-r7} - ldr r4, _0807D740 @ =gUnknown_83C2BBC + ldr r4, _0807D740 @ =gWeatherPtr ldr r0, [r4] ldr r1, _0807D744 @ =0x00000717 adds r0, r1 @@ -4724,7 +4724,7 @@ _0807D6B8: str r0, [r1, 0x1C] b _0807D76E .align 2, 0 -_0807D740: .4byte gUnknown_83C2BBC +_0807D740: .4byte gWeatherPtr _0807D744: .4byte 0x00000717 _0807D748: .4byte gUnknown_83C683C _0807D74C: .4byte gSprites @@ -4769,7 +4769,7 @@ _0807D794: .4byte 0x00000717 SandstormSpriteCallback1: @ 807D798 push {r4,lr} adds r3, r0, 0 - ldr r0, _0807D7E8 @ =gUnknown_83C2BBC + ldr r0, _0807D7E8 @ =gWeatherPtr ldr r1, [r0] movs r2, 0xE2 lsls r2, 3 @@ -4808,7 +4808,7 @@ _0807D7E0: pop {r0} bx r0 .align 2, 0 -_0807D7E8: .4byte gUnknown_83C2BBC +_0807D7E8: .4byte gWeatherPtr _0807D7EC: .4byte 0x0000070e _0807D7F0: .4byte 0x010f0000 _0807D7F4: .4byte 0x000001ff @@ -4902,7 +4902,7 @@ _0807D88C: .4byte gSineTable thumb_func_start Weather11_InitVars Weather11_InitVars: @ 807D890 - ldr r0, _0807D8B0 @ =gUnknown_83C2BBC + ldr r0, _0807D8B0 @ =gWeatherPtr ldr r1, [r0] ldr r0, _0807D8B4 @ =0x000006cc adds r2, r1, r0 @@ -4918,7 +4918,7 @@ Weather11_InitVars: @ 807D890 strb r0, [r1] bx lr .align 2, 0 -_0807D8B0: .4byte gUnknown_83C2BBC +_0807D8B0: .4byte gWeatherPtr _0807D8B4: .4byte 0x000006cc _0807D8B8: .4byte 0x000006c1 _0807D8BC: .4byte 0x000006c2 @@ -4947,7 +4947,7 @@ sub_807D8D0: @ 807D8D0 Bubbles_InitVars: @ 807D8D4 push {r4,r5,lr} bl Fog1_InitVars - ldr r0, _0807D914 @ =gUnknown_83C2BBC + ldr r0, _0807D914 @ =gWeatherPtr ldr r4, [r0] ldr r1, _0807D918 @ =0x0000072e adds r0, r4, r1 @@ -4976,7 +4976,7 @@ _0807D90C: pop {r0} bx r0 .align 2, 0 -_0807D914: .4byte gUnknown_83C2BBC +_0807D914: .4byte gWeatherPtr _0807D918: .4byte 0x0000072e _0807D91C: .4byte gUnknown_83C6870 _0807D920: .4byte gUnknown_83C6868 @@ -4987,7 +4987,7 @@ _0807D924: .4byte 0x0000072a Bubbles_InitAll: @ 807D928 push {r4,lr} bl Bubbles_InitVars - ldr r0, _0807D950 @ =gUnknown_83C2BBC + ldr r0, _0807D950 @ =gWeatherPtr ldr r1, [r0] ldr r2, _0807D954 @ =0x000006d2 adds r0, r1, r2 @@ -5005,7 +5005,7 @@ _0807D948: pop {r0} bx r0 .align 2, 0 -_0807D950: .4byte gUnknown_83C2BBC +_0807D950: .4byte gWeatherPtr _0807D954: .4byte 0x000006d2 thumb_func_end Bubbles_InitAll @@ -5013,7 +5013,7 @@ _0807D954: .4byte 0x000006d2 Bubbles_Main: @ 807D958 push {r4-r7,lr} bl Fog1_Main - ldr r0, _0807D9B8 @ =gUnknown_83C2BBC + ldr r0, _0807D9B8 @ =gWeatherPtr ldr r5, [r0] ldr r0, _0807D9BC @ =0x00000726 adds r4, r5, r0 @@ -5059,7 +5059,7 @@ _0807D9B0: pop {r0} bx r0 .align 2, 0 -_0807D9B8: .4byte gUnknown_83C2BBC +_0807D9B8: .4byte gWeatherPtr _0807D9BC: .4byte 0x00000726 _0807D9C0: .4byte 0x0000ffff _0807D9C4: .4byte gUnknown_83C6868 @@ -5129,7 +5129,7 @@ sub_807D9E8: @ 807D9E8 strh r0, [r1, 0x2E] strh r0, [r1, 0x30] strh r0, [r1, 0x32] - ldr r0, _0807DA68 @ =gUnknown_83C2BBC + ldr r0, _0807DA68 @ =gWeatherPtr ldr r1, [r0] ldr r0, _0807DA6C @ =0x0000072c adds r1, r0 @@ -5145,7 +5145,7 @@ _0807DA58: .4byte gUnknown_83C6878 _0807DA5C: .4byte gSpriteCoordOffsetY _0807DA60: .4byte gUnknown_83C68BC _0807DA64: .4byte gSprites -_0807DA68: .4byte gUnknown_83C2BBC +_0807DA68: .4byte gWeatherPtr _0807DA6C: .4byte 0x0000072c thumb_func_end sub_807D9E8 diff --git a/asm/field_weather_util.s b/asm/field_weather_util.s new file mode 100644 index 000000000..c31f35763 --- /dev/null +++ b/asm/field_weather_util.s @@ -0,0 +1,295 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start sub_807B0C4 +sub_807B0C4: @ 807B0C4 + push {lr} + adds r1, r0, 0 + adds r3, r2, 0 + ldr r0, _0807B0E8 @ =gWeather + 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 gWeather +_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 SetNextWeather + 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 SetCurrentAndNextWeather + 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 SetNextWeather + 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 SetCurrentAndNextWeather + 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/overworld.s b/asm/overworld.s index 27235fa18..504fecbf1 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,7 +4644,7 @@ _08057050: bl InitObjectEventPalettes _08057056: bl FieldEffectActiveListClear - bl sub_8079C08 + bl StartWeather bl sub_807B1B8 cmp r4, 0 bne _0805706A @@ -5400,7 +5400,7 @@ _0805769C: bl ResetCameraUpdateInfo bl InstallCameraPanAheadCallback bl FieldEffectActiveListClear - bl sub_8079C08 + bl StartWeather bl sub_807B1B8 bl SetUpFieldTasks bl mapheader_run_script_with_tag_x5 @@ -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 index d872998bf..7e40ea747 100644 --- a/data/field_weather.s +++ b/data/field_weather.s @@ -7,139 +7,6 @@ .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 diff --git a/include/field_weather.h b/include/field_weather.h index 6b62f0edd..1f2d9902e 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -17,7 +17,7 @@ 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); 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/ld_script.txt b/ld_script.txt index 4538c714e..854604f8a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -114,7 +114,10 @@ SECTIONS { src/battle_anim_status_effects.o(.text); src/title_screen.o(.text); src/reset_save_heap.o(.text); + src/field_weather.o(.text); asm/field_weather.o(.text); + src/field_weather_util.o(.text); + asm/field_weather_util.o(.text); asm/field_weather_effects.o(.text); src/field_fadetransition.o(.text); src/field_screen_effect.o(.text); @@ -446,6 +449,8 @@ SECTIONS { data/map_events.o(.rodata); src/battle_anim_status_effects.o(.rodata); src/title_screen.o(.rodata); + src/field_weather.o(.rodata); + src/field_weather_util.o(.rodata); data/field_weather.o(.rodata); src/field_screen_effect.o(.rodata); src/battle_setup.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..fb5f4eee7 --- /dev/null +++ b/src/field_weather.c @@ -0,0 +1,1320 @@ +#include "global.h" +#include "gflib.h" +#include "blend_palette.h" +#include "field_effect.h" +#include "field_weather.h" +#include "field_weather_util.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); +}; + +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; + /*0x6C6*/ u8 palProcessingState; + /*0x6C7*/ u8 fadeScreenCounter; + /*0x6C8*/ bool8 readyForInit; + /*0x6C9*/ u8 taskId; + /*0x6CA*/ 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; + /*0x6DE*/ u8 cloudSpritesCreated; + u8 filler_6DF[1]; + u16 snowflakeVisibleCounter; + u16 unknown_6E2; + u8 snowflakeSpriteCount; + u8 targetSnowflakeSpriteCount; + u16 unknown_6E6; + u16 thunderCounter; + u8 unknown_6EA; + u8 unknown_6EB; + u8 unknown_6EC; + u8 thunderTriggered; + u16 fogHScrollPosX; + u16 fogHScrollCounter; + u16 fogHScrollOffset; + u8 lightenedFogSpritePals[6]; + u8 lightenedFogSpritePalsCount; + u8 fogHSpritesCreated; + u16 ashBaseSpritesX; + u16 unknown_6FE; + u8 ashSpritesCreated; + u8 filler_701[3]; + u32 sandstormXOffset; + u32 sandstormYOffset; + u8 filler_70C[2]; + u16 sandstormBaseSpritesX; + u16 sandstormPosY; + u16 sandstormWaveIndex; + u16 sandstormWaveCounter; + u8 sandstormSpritesCreated; + u8 sandstormSwirlSpritesCreated; + u16 fogDBaseSpritesX; + u16 fogDPosY; + u16 fogDScrollXCounter; + u16 fogDScrollYCounter; + u16 fogDXOffset; + u16 fogDYOffset; + u8 fogDSpritesCreated; + u8 filler_725[1]; + u16 bubblesDelayCounter; + u16 bubblesDelayIndex; + u16 bubblesCoordsIndex; + u16 bubblesSpriteCount; + u8 bubblesSpritesCreated; + u8 filler_72F; + u16 currBlendEVA; + u16 currBlendEVB; + u16 targetBlendEVA; + u16 targetBlendEVB; + u8 blendUpdateCounter; + u8 blendFrameCounter; + u8 blendDelay; + u8 filler_73B[0x3C-0x3B]; + s16 unknown_73C; + s16 unknown_73E; + s16 unknown_740; + s16 unknown_742; + u8 filler_744[0xD-4]; + s8 loadDroughtPalsIndex; + u8 loadDroughtPalsOffset; +}; + +EWRAM_DATA struct Weather gWeather = {}; +EWRAM_DATA u8 sFieldEffectPaletteGammaTypes[32] = {}; +EWRAM_DATA const u8 *sPaletteGammaTypes = NULL; +EWRAM_DATA u16 gUnknown_20386A8 = 0; + +void Task_WeatherMain(u8 taskId); +void Task_WeatherInit(u8 taskId); +void None_Init(void); +void None_Main(void); +bool8 None_Finish(void); +void BuildGammaShiftTables(void); +void UpdateWeatherGammaShift(void); +void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex); +void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor); +void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor); +void FadeInScreenWithWeather(void); +bool8 FadeInScreen_RainShowShade(void); +bool8 FadeInScreen_Drought(void); +bool8 FadeInScreen_FogHorizontal(void); +void DoNothing(void); +void ApplyFogBlend(u8 blendCoeff, u16 blendColor); +bool8 LightenSpritePaletteInFog(u8 paletteIndex); +void Weather_SetBlendCoeffs(u8, u8); +bool8 Ash_Finish(void); +bool8 Bubbles_Finish(void); +bool8 Clouds_Finish(void); +bool8 Fog1_Finish(void); +bool8 Fog2_Finish(void); +bool8 LightRain_Finish(void); +bool8 Rain_Finish(void); +bool8 Sandstorm_Finish(void); +bool8 Snow_Finish(void); +bool8 sub_807B434(void); +bool8 sub_807B6BC(void); +bool8 sub_807D8D0(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 Fog1_InitAll(void); +void Fog1_InitVars(void); +void Fog1_Main(void); +void Fog2_InitAll(void); +void Fog2_InitVars(void); +void Fog2_Main(void); +void LightRain_InitAll(void); +void LightRain_InitVars(void); +void LightRain_Main(void); +void Rain_Main(void); +void Sandstorm_InitAll(void); +void Sandstorm_InitVars(void); +void Sandstorm_Main(void); +void Snow_InitAll(void); +void Snow_InitVars(void); +void Weather11_InitAll(void); +void Weather11_InitVars(void); +void Weather2_InitAll(void); +void Weather2_InitVars(void); +void nullsub_48(void); +void nullsub_49(void); +void snowflakes_progress2(void); +void sub_807C2E4(void); +void sub_807C358(void); +void sub_807C388(void); +void sub_807C3F4(void); + +const u32 gUnknown_83BFBE4[] = INCBIN_U32("graphics/field_effects/unk_83BFBE4.bin.lz"); +const u32 gUnknown_83C0408[] = INCBIN_U32("graphics/field_effects/unk_83C0408.bin.lz"); +const u32 gUnknown_83C0C00[] = INCBIN_U32("graphics/field_effects/unk_83C0C00.bin.lz"); +const u32 gUnknown_83C139C[] = INCBIN_U32("graphics/field_effects/unk_83C139C.bin.lz"); +const u32 gUnknown_83C1BB8[] = INCBIN_U32("graphics/field_effects/unk_83C1BB8.bin.lz"); +const u32 gUnknown_83C2380[] = INCBIN_U32("graphics/field_effects/unk_83C2380.bin.lz"); + +const u32 *const gUnknown_83C2BA4[] = { + gUnknown_83BFBE4, + gUnknown_83C0408, + gUnknown_83C0C00, + gUnknown_83C139C, + gUnknown_83C1BB8, + gUnknown_83C2380 +}; + +struct Weather *const gWeatherPtr = &gWeather; + +const struct WeatherCallbacks sWeatherFuncs[] = { + {None_Init, None_Main, None_Init, None_Finish}, + {Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish}, + {Weather2_InitVars, nullsub_48, Weather2_InitAll, sub_807B434}, + {LightRain_InitVars, LightRain_Main, LightRain_InitAll, LightRain_Finish}, + {Snow_InitVars, snowflakes_progress2, Snow_InitAll, Snow_Finish}, + {sub_807C2E4, Rain_Main, sub_807C358, Rain_Finish}, + {Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish}, + {Ash_InitVars, Ash_Main, Ash_InitAll, Ash_Finish}, + {Sandstorm_InitVars, Sandstorm_Main, Sandstorm_InitAll, Sandstorm_Finish}, + {Fog2_InitVars, Fog2_Main, Fog2_InitAll, Fog2_Finish}, + {Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish}, + {Weather11_InitVars, nullsub_49, Weather11_InitAll, sub_807D8D0}, + {Drought_InitVars, Drought_Main, Drought_InitAll, sub_807B6BC}, + {sub_807C388, Rain_Main, sub_807C3F4, Rain_Finish}, + {Bubbles_InitVars, Bubbles_Main, Bubbles_InitAll, Bubbles_Finish}, +}; + +void (*const gWeatherPalStateFuncs[])(void) = { + UpdateWeatherGammaShift, + FadeInScreenWithWeather, + DoNothing, + DoNothing +}; + +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"); + +// 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 = 0; + gWeatherPtr->snowflakeSpriteCount = 0; + gWeatherPtr->ashSpritesCreated = 0; + gWeatherPtr->fogHSpritesCreated = 0; + gWeatherPtr->fogDSpritesCreated = 0; + gWeatherPtr->sandstormSpritesCreated = 0; + gWeatherPtr->sandstormSwirlSpritesCreated = 0; + gWeatherPtr->bubblesSpritesCreated = 0; + gWeatherPtr->lightenedFogSpritePalsCount = 0; + Weather_SetBlendCoeffs(16, 0); + gWeatherPtr->currWeather = 0; + 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; +} + +void SetCurrentAndNextWeatherNoDelay(u8 weather) +{ + PlayRainStoppingSoundEffect(); + gWeatherPtr->currWeather = weather; + gWeatherPtr->nextWeather = weather; + // Overrides the normal delay during screen fading. + gWeatherPtr->readyForInit = TRUE; +} + +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; + } +} + +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(); + } + + gWeatherPalStateFuncs[gWeatherPtr->palProcessingState](); +} + + +void None_Init(void) +{ + gWeatherPtr->gammaTargetIndex = 0; + gWeatherPtr->gammaStepDelay = 0; +} + +void None_Main(void) +{ +} + +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. +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. +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); + } + } +} + +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; + } +} + +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; +} + +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; +} + +bool8 FadeInScreen_FogHorizontal(void) +{ + if (gWeatherPtr->fadeScreenCounter == 16) + return FALSE; + + gWeatherPtr->fadeScreenCounter++; + ApplyFogBlend(16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor); + return TRUE; +} + +void DoNothing(void) +{ } + +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)); + } +} + +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++; + } +} + +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; + } + } + } +} + +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); + } + } +} + +void MarkFogSpritePalToLighten(u8 paletteIndex) +{ + if (gWeatherPtr->lightenedFogSpritePalsCount < 6) + { + gWeatherPtr->lightenedFogSpritePals[gWeatherPtr->lightenedFogSpritePalsCount] = paletteIndex; + gWeatherPtr->lightenedFogSpritePalsCount++; + } +} + +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); +} + +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; +} + +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; +} + +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; +} diff --git a/src/field_weather_util.c b/src/field_weather_util.c new file mode 100644 index 000000000..ed1ce5236 --- /dev/null +++ b/src/field_weather_util.c @@ -0,0 +1,12 @@ +#include "global.h" + +const u16 gUnknown_83C2D00[] = INCBIN_U16("graphics/field_effects/unk_83C2D00.gbapal"); +const u16 gUnknown_83C2D20[] = INCBIN_U16("graphics/field_effects/unk_83C2D20.gbapal"); +const u16 gUnknown_83C2D40[] = INCBIN_U16("graphics/field_effects/unk_83C2D40.4bpp"); +const u16 gWeatherFog1Tiles[] = INCBIN_U16("graphics/field_effects/unk_83C3540.4bpp"); +const u16 gUnknown_83C3D40[] = INCBIN_U16("graphics/field_effects/unk_83C3D40.4bpp"); +const u16 gUnknown_83C4540[] = INCBIN_U16("graphics/field_effects/unk_83C4540.4bpp"); +const u16 gUnknown_83C4580[] = INCBIN_U16("graphics/field_effects/unk_83C4580.4bpp"); +const u16 gUnknown_83C45C0[] = INCBIN_U16("graphics/field_effects/unk_83C45C0.4bpp"); +const u16 gUnknown_83C55C0[] = INCBIN_U16("graphics/field_effects/unk_83C55C0.4bpp"); +const u16 gUnknown_83C5BC0[] = INCBIN_U16("graphics/field_effects/unk_83C5BC0.4bpp"); 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 -- cgit v1.2.3 From 51eac4e14bc75f2b3d925b46d63969cfabf0d48e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 16 Mar 2020 20:37:51 -0400 Subject: field_weather_util --- asm/field_weather_util.s | 287 ---------------------------------------- asm/overworld.s | 4 +- data/field_weather.s | 6 - include/blend_palette.h | 1 + include/constants/weather.h | 2 + include/field_weather.h | 116 ++++++++++++++++ include/field_weather_effects.h | 55 ++++++++ include/global.h | 2 +- src/field_weather.c | 191 +++----------------------- src/field_weather_util.c | 105 +++++++++++++++ src/title_screen.c | 16 +++ 11 files changed, 313 insertions(+), 472 deletions(-) create mode 100644 include/field_weather_effects.h diff --git a/asm/field_weather_util.s b/asm/field_weather_util.s index c31f35763..d018bae19 100644 --- a/asm/field_weather_util.s +++ b/asm/field_weather_util.s @@ -5,291 +5,4 @@ .text - thumb_func_start sub_807B0C4 -sub_807B0C4: @ 807B0C4 - push {lr} - adds r1, r0, 0 - adds r3, r2, 0 - ldr r0, _0807B0E8 @ =gWeather - 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 gWeather -_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 SetNextWeather - 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 SetCurrentAndNextWeather - 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 SetNextWeather - 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 SetCurrentAndNextWeather - 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/overworld.s b/asm/overworld.s index 504fecbf1..179d79fdc 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -4645,7 +4645,7 @@ _08057050: _08057056: bl FieldEffectActiveListClear bl StartWeather - bl sub_807B1B8 + bl ResumePausedWeather cmp r4, 0 bne _0805706A bl SetUpFieldTasks @@ -5401,7 +5401,7 @@ _0805769C: bl InstallCameraPanAheadCallback bl FieldEffectActiveListClear bl StartWeather - bl sub_807B1B8 + bl ResumePausedWeather bl SetUpFieldTasks bl mapheader_run_script_with_tag_x5 b _0805772A diff --git a/data/field_weather.s b/data/field_weather.s index 7e40ea747..acd7744cd 100644 --- a/data/field_weather.s +++ b/data/field_weather.s @@ -7,12 +7,6 @@ .section .rodata .align 2 -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 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 1f2d9902e..b4006b3ad 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -2,6 +2,119 @@ #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; + /*0x6C6*/ u8 palProcessingState; + /*0x6C7*/ u8 fadeScreenCounter; + /*0x6C8*/ bool8 readyForInit; + /*0x6C9*/ u8 taskId; + /*0x6CA*/ 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; + /*0x6DE*/ u8 cloudSpritesCreated; + u8 filler_6DF[1]; + u16 snowflakeVisibleCounter; + u16 unknown_6E2; + u8 snowflakeSpriteCount; + u8 targetSnowflakeSpriteCount; + u16 unknown_6E6; + u16 thunderCounter; + u8 unknown_6EA; + u8 unknown_6EB; + u8 unknown_6EC; + u8 thunderTriggered; + u16 fogHScrollPosX; + u16 fogHScrollCounter; + u16 fogHScrollOffset; + u8 lightenedFogSpritePals[6]; + u8 lightenedFogSpritePalsCount; + u8 fogHSpritesCreated; + u16 ashBaseSpritesX; + u16 unknown_6FE; + u8 ashSpritesCreated; + u8 filler_701[3]; + u32 sandstormXOffset; + u32 sandstormYOffset; + u8 filler_70C[2]; + u16 sandstormBaseSpritesX; + u16 sandstormPosY; + u16 sandstormWaveIndex; + u16 sandstormWaveCounter; + u8 sandstormSpritesCreated; + u8 sandstormSwirlSpritesCreated; + u16 fogDBaseSpritesX; + u16 fogDPosY; + u16 fogDScrollXCounter; + u16 fogDScrollYCounter; + u16 fogDXOffset; + u16 fogDYOffset; + u8 fogDSpritesCreated; + u8 filler_725[1]; + u16 bubblesDelayCounter; + u16 bubblesDelayIndex; + u16 bubblesCoordsIndex; + u16 bubblesSpriteCount; + u8 bubblesSpritesCreated; + u8 filler_72F; + u16 currBlendEVA; + u16 currBlendEVB; + u16 targetBlendEVA; + u16 targetBlendEVB; + u8 blendUpdateCounter; + u8 blendFrameCounter; + u8 blendDelay; + u8 filler_73B[0x3C-0x3B]; + 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); @@ -22,4 +135,7 @@ void UpdateSpritePaletteWithWeather(u8 palIdx); void ResetPreservedPalettesInWeather(void); void PreservePaletteInWeather(u8 palIdx); +void SetNextWeather(u8 weather); +void SetCurrentAndNextWeather(u8 weather); + #endif // GUARD_WEATHER_H diff --git a/include/field_weather_effects.h b/include/field_weather_effects.h new file mode 100644 index 000000000..11d3314a2 --- /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 Fog1_Finish(void); +bool8 Fog2_Finish(void); +bool8 LightRain_Finish(void); +bool8 Rain_Finish(void); +bool8 Sandstorm_Finish(void); +bool8 Snow_Finish(void); +bool8 sub_807B434(void); +bool8 sub_807B6BC(void); +bool8 sub_807D8D0(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 Fog1_InitAll(void); +void Fog1_InitVars(void); +void Fog1_Main(void); +void Fog2_InitAll(void); +void Fog2_InitVars(void); +void Fog2_Main(void); +void LightRain_InitAll(void); +void LightRain_InitVars(void); +void LightRain_Main(void); +void Rain_Main(void); +void Sandstorm_InitAll(void); +void Sandstorm_InitVars(void); +void Sandstorm_Main(void); +void Snow_InitAll(void); +void Snow_InitVars(void); +void Weather11_InitAll(void); +void Weather11_InitVars(void); +void Weather2_InitAll(void); +void Weather2_InitVars(void); +void nullsub_48(void); +void nullsub_49(void); +void snowflakes_progress2(void); +void sub_807C2E4(void); +void sub_807C358(void); +void sub_807C388(void); +void sub_807C3F4(void); + +#endif //GUARD_FIELD_WEATHER_EFFECTS_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/src/field_weather.c b/src/field_weather.c index fb5f4eee7..192ec8f44 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -4,6 +4,7 @@ #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" @@ -39,116 +40,6 @@ struct WeatherCallbacks bool8 (*finish)(void); }; -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; - /*0x6C6*/ u8 palProcessingState; - /*0x6C7*/ u8 fadeScreenCounter; - /*0x6C8*/ bool8 readyForInit; - /*0x6C9*/ u8 taskId; - /*0x6CA*/ 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; - /*0x6DE*/ u8 cloudSpritesCreated; - u8 filler_6DF[1]; - u16 snowflakeVisibleCounter; - u16 unknown_6E2; - u8 snowflakeSpriteCount; - u8 targetSnowflakeSpriteCount; - u16 unknown_6E6; - u16 thunderCounter; - u8 unknown_6EA; - u8 unknown_6EB; - u8 unknown_6EC; - u8 thunderTriggered; - u16 fogHScrollPosX; - u16 fogHScrollCounter; - u16 fogHScrollOffset; - u8 lightenedFogSpritePals[6]; - u8 lightenedFogSpritePalsCount; - u8 fogHSpritesCreated; - u16 ashBaseSpritesX; - u16 unknown_6FE; - u8 ashSpritesCreated; - u8 filler_701[3]; - u32 sandstormXOffset; - u32 sandstormYOffset; - u8 filler_70C[2]; - u16 sandstormBaseSpritesX; - u16 sandstormPosY; - u16 sandstormWaveIndex; - u16 sandstormWaveCounter; - u8 sandstormSpritesCreated; - u8 sandstormSwirlSpritesCreated; - u16 fogDBaseSpritesX; - u16 fogDPosY; - u16 fogDScrollXCounter; - u16 fogDScrollYCounter; - u16 fogDXOffset; - u16 fogDYOffset; - u8 fogDSpritesCreated; - u8 filler_725[1]; - u16 bubblesDelayCounter; - u16 bubblesDelayIndex; - u16 bubblesCoordsIndex; - u16 bubblesSpriteCount; - u8 bubblesSpritesCreated; - u8 filler_72F; - u16 currBlendEVA; - u16 currBlendEVB; - u16 targetBlendEVA; - u16 targetBlendEVB; - u8 blendUpdateCounter; - u8 blendFrameCounter; - u8 blendDelay; - u8 filler_73B[0x3C-0x3B]; - s16 unknown_73C; - s16 unknown_73E; - s16 unknown_740; - s16 unknown_742; - u8 filler_744[0xD-4]; - s8 loadDroughtPalsIndex; - u8 loadDroughtPalsOffset; -}; - EWRAM_DATA struct Weather gWeather = {}; EWRAM_DATA u8 sFieldEffectPaletteGammaTypes[32] = {}; EWRAM_DATA const u8 *sPaletteGammaTypes = NULL; @@ -172,72 +63,6 @@ void DoNothing(void); void ApplyFogBlend(u8 blendCoeff, u16 blendColor); bool8 LightenSpritePaletteInFog(u8 paletteIndex); void Weather_SetBlendCoeffs(u8, u8); -bool8 Ash_Finish(void); -bool8 Bubbles_Finish(void); -bool8 Clouds_Finish(void); -bool8 Fog1_Finish(void); -bool8 Fog2_Finish(void); -bool8 LightRain_Finish(void); -bool8 Rain_Finish(void); -bool8 Sandstorm_Finish(void); -bool8 Snow_Finish(void); -bool8 sub_807B434(void); -bool8 sub_807B6BC(void); -bool8 sub_807D8D0(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 Fog1_InitAll(void); -void Fog1_InitVars(void); -void Fog1_Main(void); -void Fog2_InitAll(void); -void Fog2_InitVars(void); -void Fog2_Main(void); -void LightRain_InitAll(void); -void LightRain_InitVars(void); -void LightRain_Main(void); -void Rain_Main(void); -void Sandstorm_InitAll(void); -void Sandstorm_InitVars(void); -void Sandstorm_Main(void); -void Snow_InitAll(void); -void Snow_InitVars(void); -void Weather11_InitAll(void); -void Weather11_InitVars(void); -void Weather2_InitAll(void); -void Weather2_InitVars(void); -void nullsub_48(void); -void nullsub_49(void); -void snowflakes_progress2(void); -void sub_807C2E4(void); -void sub_807C358(void); -void sub_807C388(void); -void sub_807C3F4(void); - -const u32 gUnknown_83BFBE4[] = INCBIN_U32("graphics/field_effects/unk_83BFBE4.bin.lz"); -const u32 gUnknown_83C0408[] = INCBIN_U32("graphics/field_effects/unk_83C0408.bin.lz"); -const u32 gUnknown_83C0C00[] = INCBIN_U32("graphics/field_effects/unk_83C0C00.bin.lz"); -const u32 gUnknown_83C139C[] = INCBIN_U32("graphics/field_effects/unk_83C139C.bin.lz"); -const u32 gUnknown_83C1BB8[] = INCBIN_U32("graphics/field_effects/unk_83C1BB8.bin.lz"); -const u32 gUnknown_83C2380[] = INCBIN_U32("graphics/field_effects/unk_83C2380.bin.lz"); - -const u32 *const gUnknown_83C2BA4[] = { - gUnknown_83BFBE4, - gUnknown_83C0408, - gUnknown_83C0C00, - gUnknown_83C139C, - gUnknown_83C1BB8, - gUnknown_83C2380 -}; struct Weather *const gWeatherPtr = &gWeather; @@ -1318,3 +1143,17 @@ 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_util.c b/src/field_weather_util.c index ed1ce5236..40c5fbe4d 100644 --- a/src/field_weather_util.c +++ b/src/field_weather_util.c @@ -1,4 +1,10 @@ #include "global.h" +#include "field_weather.h" +#include "overworld.h" +#include "constants/weather.h" + +u8 TranslateWeatherNum(u8 weather); +void UpdateRainCounter(u8 newWeather, u8 oldWeather); const u16 gUnknown_83C2D00[] = INCBIN_U16("graphics/field_effects/unk_83C2D00.gbapal"); const u16 gUnknown_83C2D20[] = INCBIN_U16("graphics/field_effects/unk_83C2D20.gbapal"); @@ -10,3 +16,102 @@ const u16 gUnknown_83C4580[] = INCBIN_U16("graphics/field_effects/unk_83C4580.4b const u16 gUnknown_83C45C0[] = INCBIN_U16("graphics/field_effects/unk_83C45C0.4bpp"); const u16 gUnknown_83C55C0[] = INCBIN_U16("graphics/field_effects/unk_83C55C0.4bpp"); const u16 gUnknown_83C5BC0[] = INCBIN_U16("graphics/field_effects/unk_83C5BC0.4bpp"); + +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); +} + +const u8 sWeatherCycleRoute119[] = + { + WEATHER_SUNNY, + WEATHER_RAIN, + WEATHER_RAIN_THUNDERSTORM, + WEATHER_RAIN, + }; +const u8 sWeatherCycleRoute123[] = + { + WEATHER_SUNNY, + WEATHER_SUNNY, + WEATHER_RAIN, + WEATHER_SUNNY, + }; + +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; +} + +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/title_screen.c b/src/title_screen.c index 0ff0a6b96..555b58e8f 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -305,6 +305,22 @@ static const u16 gUnknown_LG_83BFA10[] = { }; #endif +const u32 gUnknown_83BFBE4[] = INCBIN_U32("graphics/field_effects/unk_83BFBE4.bin.lz"); +const u32 gUnknown_83C0408[] = INCBIN_U32("graphics/field_effects/unk_83C0408.bin.lz"); +const u32 gUnknown_83C0C00[] = INCBIN_U32("graphics/field_effects/unk_83C0C00.bin.lz"); +const u32 gUnknown_83C139C[] = INCBIN_U32("graphics/field_effects/unk_83C139C.bin.lz"); +const u32 gUnknown_83C1BB8[] = INCBIN_U32("graphics/field_effects/unk_83C1BB8.bin.lz"); +const u32 gUnknown_83C2380[] = INCBIN_U32("graphics/field_effects/unk_83C2380.bin.lz"); + +const u32 *const gUnknown_83C2BA4[] = { + gUnknown_83BFBE4, + gUnknown_83C0408, + gUnknown_83C0C00, + gUnknown_83C139C, + gUnknown_83C1BB8, + gUnknown_83C2380 +}; + void CB2_InitTitleScreen(void) { switch (gMain.state) -- cgit v1.2.3 From 21e4406ab99098b6c3e42e8cfd033b41c8c225d1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 16 Mar 2020 20:46:03 -0400 Subject: remove field_weather, field_weather_util.s --- asm/field_weather.s | 8 -------- asm/field_weather_util.s | 8 -------- ld_script.txt | 2 -- 3 files changed, 18 deletions(-) delete mode 100644 asm/field_weather.s delete mode 100644 asm/field_weather_util.s diff --git a/asm/field_weather.s b/asm/field_weather.s deleted file mode 100644 index 2428f2984..000000000 --- a/asm/field_weather.s +++ /dev/null @@ -1,8 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/field_weather_util.s b/asm/field_weather_util.s deleted file mode 100644 index d018bae19..000000000 --- a/asm/field_weather_util.s +++ /dev/null @@ -1,8 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - .align 2, 0 @ Don't pad with nop diff --git a/ld_script.txt b/ld_script.txt index 854604f8a..e876d3268 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -115,9 +115,7 @@ SECTIONS { src/title_screen.o(.text); src/reset_save_heap.o(.text); src/field_weather.o(.text); - asm/field_weather.o(.text); src/field_weather_util.o(.text); - asm/field_weather_util.o(.text); asm/field_weather_effects.o(.text); src/field_fadetransition.o(.text); src/field_screen_effect.o(.text); -- cgit v1.2.3 From 7610a2dfc25a811e2918998523dd3e9b36263750 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 16 Mar 2020 21:43:49 -0400 Subject: Port field_weather_effects from emerald --- asm/field_weather_effects.s | 5232 -------------------------------- data/field_weather.s | 245 -- graphics/field_effects/unk_83C2D00.pal | 19 - graphics/field_effects/unk_83C2D20.pal | 19 - graphics/field_effects/unk_83C2D40.png | Bin 941 -> 0 bytes graphics/field_effects/unk_83C3540.png | Bin 1031 -> 0 bytes graphics/field_effects/unk_83C3D40.png | Bin 653 -> 0 bytes graphics/field_effects/unk_83C4540.png | Bin 179 -> 0 bytes graphics/field_effects/unk_83C4580.png | Bin 190 -> 0 bytes graphics/field_effects/unk_83C45C0.png | Bin 366 -> 0 bytes graphics/field_effects/unk_83C55C0.png | Bin 271 -> 0 bytes graphics/field_effects/unk_83C5BC0.png | Bin 603 -> 0 bytes graphics/weather/ash.png | Bin 0 -> 353 bytes graphics/weather/cloud.png | Bin 0 -> 640 bytes graphics/weather/fog_diagonal.png | Bin 0 -> 928 bytes graphics/weather/fog_horizontal.png | Bin 0 -> 1018 bytes graphics/weather/rain.png | Bin 0 -> 258 bytes graphics/weather/sandstorm.png | Bin 0 -> 590 bytes graphics/weather/snow0.png | Bin 0 -> 150 bytes graphics/weather/snow1.png | Bin 0 -> 145 bytes include/field_weather.h | 23 + include/field_weather_effects.h | 52 +- include/graphics.h | 2 +- ld_script.txt | 4 +- src/field_weather.c | 32 +- src/field_weather_effects.c | 2321 ++++++++++++++ src/field_weather_util.c | 11 - src/ice.c | 4 +- 28 files changed, 2396 insertions(+), 5568 deletions(-) delete mode 100644 graphics/field_effects/unk_83C2D00.pal delete mode 100644 graphics/field_effects/unk_83C2D20.pal delete mode 100644 graphics/field_effects/unk_83C2D40.png delete mode 100644 graphics/field_effects/unk_83C3540.png delete mode 100644 graphics/field_effects/unk_83C3D40.png delete mode 100644 graphics/field_effects/unk_83C4540.png delete mode 100644 graphics/field_effects/unk_83C4580.png delete mode 100644 graphics/field_effects/unk_83C45C0.png delete mode 100644 graphics/field_effects/unk_83C55C0.png delete mode 100644 graphics/field_effects/unk_83C5BC0.png create mode 100644 graphics/weather/ash.png create mode 100644 graphics/weather/cloud.png create mode 100644 graphics/weather/fog_diagonal.png create mode 100644 graphics/weather/fog_horizontal.png create mode 100644 graphics/weather/rain.png create mode 100644 graphics/weather/sandstorm.png create mode 100644 graphics/weather/snow0.png create mode 100644 graphics/weather/snow1.png create mode 100644 src/field_weather_effects.c diff --git a/asm/field_weather_effects.s b/asm/field_weather_effects.s index 23b5a111c..2428f2984 100644 --- a/asm/field_weather_effects.s +++ b/asm/field_weather_effects.s @@ -5,5236 +5,4 @@ .text - thumb_func_start Clouds_InitVars -Clouds_InitVars: @ 807B2DC - push {lr} - ldr r0, _0807B314 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_0807B354: .4byte 0x000006d2 - thumb_func_end Clouds_InitAll - - thumb_func_start Clouds_Main -Clouds_Main: @ 807B358 - push {r4,r5,lr} - ldr r0, _0807B374 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 LoadCustomWeatherSpritePalette - 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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 @ =gWeatherPtr - 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 gWeatherPtr -_0807B500: .4byte 0x000006de - thumb_func_end CreateCloudSprites - - thumb_func_start sub_807B504 -sub_807B504: @ 807B504 - push {r4,r5,lr} - ldr r0, _0807B550 @ =gWeatherPtr - 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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_0807B5D4: .4byte 0x000006d2 - thumb_func_end Drought_InitAll - - thumb_func_start Drought_Main -Drought_Main: @ 807B5D8 - push {lr} - ldr r1, _0807B5F4 @ =gWeatherPtr - 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 gWeatherPtr -_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 ResetDroughtWeatherPaletteLoading - ldr r0, _0807B640 @ =gWeatherPtr - ldr r1, [r0] - ldr r2, _0807B644 @ =0x000006cc - adds r1, r2 - b _0807B69C - .align 2, 0 -_0807B640: .4byte gWeatherPtr -_0807B644: .4byte 0x000006cc -_0807B648: - bl LoadDroughtWeatherPalettes - lsls r0, 24 - cmp r0, 0 - bne _0807B6B8 - ldr r0, _0807B65C @ =gWeatherPtr - ldr r1, [r0] - ldr r0, _0807B660 @ =0x000006cc - adds r1, r0 - b _0807B69C - .align 2, 0 -_0807B65C: .4byte gWeatherPtr -_0807B660: .4byte 0x000006cc -_0807B664: - bl sub_807AC60 - ldr r0, _0807B674 @ =gWeatherPtr - ldr r1, [r0] - ldr r2, _0807B678 @ =0x000006cc - adds r1, r2 - b _0807B69C - .align 2, 0 -_0807B674: .4byte gWeatherPtr -_0807B678: .4byte 0x000006cc -_0807B67C: - bl sub_807AC98 - ldr r0, _0807B6A4 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_0807B860: .4byte 0x000006d2 - thumb_func_end LightRain_InitAll - - thumb_func_start LightRain_Main -LightRain_Main: @ 807B864 - push {r4,r5,lr} - ldr r0, _0807B880 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 @ =gWeatherPtr - ldr r0, [r0] - add r0, r10 - str r4, [r0] - b _0807BCE6 - .align 2, 0 -_0807BCC4: .4byte gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_0807BE24: .4byte 0x000006da -_0807BE28: .4byte 0x00001206 - thumb_func_end DestroyRainSprites - - thumb_func_start Snow_InitVars -Snow_InitVars: @ 807BE2C - push {r4,lr} - ldr r0, _0807BE68 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_0807C384: .4byte 0x000006d2 - thumb_func_end sub_807C358 - - thumb_func_start sub_807C388 -sub_807C388: @ 807C388 - push {r4,r5,lr} - ldr r0, _0807C3DC @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - ldr r1, [r0] - ldr r2, _0807C4A4 @ =0x000006cc - adds r1, r2 - ldrh r0, [r1] - adds r0, 0x1 - b _0807C798 - .align 2, 0 -_0807C4A0: .4byte gWeatherPtr -_0807C4A4: .4byte 0x000006cc -_0807C4A8: - bl CreateRainSprite - lsls r0, 24 - cmp r0, 0 - beq _0807C4B4 - b _0807C79A -_0807C4B4: - ldr r0, _0807C4C4 @ =gWeatherPtr - ldr r1, [r0] - ldr r3, _0807C4C8 @ =0x000006cc - adds r1, r3 - ldrh r0, [r1] - adds r0, 0x1 - b _0807C798 - .align 2, 0 -_0807C4C4: .4byte gWeatherPtr -_0807C4C8: .4byte 0x000006cc -_0807C4CC: - bl sub_807BD4C - lsls r0, 24 - cmp r0, 0 - beq _0807C4D8 - b _0807C79A -_0807C4D8: - ldr r0, _0807C4F0 @ =gWeatherPtr - 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 gWeatherPtr -_0807C4F4: .4byte 0x000006d2 -_0807C4F8: .4byte 0x000006cc -_0807C4FC: - ldr r0, _0807C514 @ =gWeatherPtr - 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 gWeatherPtr -_0807C518: .4byte 0x000006c6 -_0807C51C: .4byte 0x000006cc -_0807C520: - ldr r0, _0807C570 @ =gWeatherPtr - 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 @ =gWeatherPtr - 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 gWeatherPtr -_0807C574: .4byte 0x000006ea -_0807C578: .4byte 0x000006e6 -_0807C57C: .4byte 0x000006cc -_0807C580: - ldr r0, _0807C5A0 @ =gWeatherPtr - 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 gWeatherPtr -_0807C5A4: .4byte 0x000006ea -_0807C5A8: .4byte 0x000006eb -_0807C5AC: - bl Random - ldr r1, _0807C614 @ =gWeatherPtr - 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 @ =gWeatherPtr - 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 @ =gWeatherPtr - 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 gWeatherPtr -_0807C618: .4byte 0x000006ec -_0807C61C: .4byte 0x000006cc -_0807C620: .4byte 0x000006eb -_0807C624: .4byte 0x000006e6 -_0807C628: - ldr r0, _0807C674 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_0807C6CC: .4byte 0x000006e6 -_0807C6D0: .4byte 0x000006cc -_0807C6D4: - bl Random - ldr r1, _0807C6F8 @ =gWeatherPtr - 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 gWeatherPtr -_0807C6FC: .4byte 0x000006e6 -_0807C700: .4byte 0x000006cc -_0807C704: - ldr r0, _0807C73C @ =gWeatherPtr - 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 gWeatherPtr -_0807C740: .4byte 0x000006e6 -_0807C744: .4byte 0x000006cc -_0807C748: - ldr r0, _0807C770 @ =gWeatherPtr - 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 gWeatherPtr -_0807C774: .4byte 0x000006e6 -_0807C778: .4byte 0x000006cc -_0807C77C: - ldr r0, _0807C7A0 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_0807C894: .4byte 0x000006ed - thumb_func_end SetThunderCounter - - thumb_func_start UpdateThunderSound -UpdateThunderSound: @ 807C898 - push {r4,lr} - ldr r0, _0807C8D0 @ =gWeatherPtr - 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 gWeatherPtr -_0807C8D4: .4byte 0x000006ed -_0807C8D8: - movs r0, 0x51 - bl PlaySE -_0807C8DE: - ldr r0, _0807C8EC @ =gWeatherPtr - ldr r0, [r0] - ldr r1, _0807C8F0 @ =0x000006ed - adds r0, r1 - movs r1, 0 - strb r1, [r0] - b _0807C8F8 - .align 2, 0 -_0807C8EC: .4byte gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_0807C98C: .4byte 0x000006d2 - thumb_func_end Fog1_InitAll - - thumb_func_start Fog1_Main -Fog1_Main: @ 807C990 - push {r4-r6,lr} - ldr r0, _0807C9DC @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 @ =gWeatherPtr - ldr r0, [r2] - lsls r1, r5, 2 - adds r0, 0xA0 - adds r0, r1 - str r4, [r0] - b _0807CBE2 - .align 2, 0 -_0807CBC0: .4byte gWeatherPtr -_0807CBC4: .4byte 0x000006fb -_0807CBC8: .4byte gUnknown_83C67A8 -_0807CBCC: .4byte gUnknown_83C6790 -_0807CBD0: .4byte gSprites -_0807CBD4: - ldr r2, _0807CC00 @ =gWeatherPtr - 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 gWeatherPtr -_0807CC04: .4byte 0x000006fb - thumb_func_end CreateFog1Sprites - - thumb_func_start DestroyFog1Sprites -DestroyFog1Sprites: @ 807CC08 - push {r4,r5,lr} - ldr r0, _0807CC50 @ =gWeatherPtr - 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 @ =gWeatherPtr - 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 gWeatherPtr -_0807CC54: .4byte 0x000006fb -_0807CC58: .4byte 0x00001201 - thumb_func_end DestroyFog1Sprites - - thumb_func_start Ash_InitVars -Ash_InitVars: @ 807CC5C - push {lr} - ldr r0, _0807CCA8 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_0807CCE4: .4byte 0x000006d2 - thumb_func_end Ash_InitAll - - thumb_func_start Ash_Main -Ash_Main: @ 807CCE8 - push {r4,r5,lr} - ldr r2, _0807CD2C @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 @ =gWeatherPtr - ldr r0, [r2] - lsls r1, r5, 2 - adds r0, 0xF0 - adds r0, r1 - str r4, [r0] - b _0807CE92 - .align 2, 0 -_0807CE78: .4byte gWeatherPtr -_0807CE7C: .4byte gUnknown_83C67D0 -_0807CE80: .4byte gSprites -_0807CE84: - ldr r2, _0807CEB0 @ =gWeatherPtr - 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 gWeatherPtr - thumb_func_end CreateAshSprites - - thumb_func_start DestroyAshSprites -DestroyAshSprites: @ 807CEB4 - push {r4,r5,lr} - ldr r0, _0807CF00 @ =gWeatherPtr - 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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 @ =gWeatherPtr - 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 gWeatherPtr -_0807D200: .4byte 0x00000724 -_0807D204: .4byte gUnknown_83C67E8 -_0807D208: .4byte gUnknown_83C6804 -_0807D20C: .4byte gSprites -_0807D210: - ldr r2, _0807D240 @ =gWeatherPtr - ldr r1, [r2] - lsls r0, r6, 2 - movs r3, 0xA0 - lsls r3, 1 - adds r1, r3 - adds r1, r0 - movs r0, 0 - str r0, [r1] -_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 gWeatherPtr -_0807D244: .4byte 0x00000724 - thumb_func_end CreateFog2Sprites - - thumb_func_start DestroyFog2Sprites -DestroyFog2Sprites: @ 807D248 - push {r4,r5,lr} - ldr r0, _0807D290 @ =gWeatherPtr - 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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 @ =gWeatherPtr - 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 @ =gWeatherPtr - 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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 LoadCustomWeatherSpritePalette - 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 @ =gWeatherPtr - ldr r5, [r2] - lsls r0, r7, 2 - movs r3, 0xC8 - lsls r3, 1 - adds r5, r3 - adds r5, r0 - lsls r4, r1, 4 - adds r4, r1 - lsls r4, 2 - ldr r0, _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 gWeatherPtr -_0807D64C: .4byte 0x00000716 -_0807D650: .4byte gUnknown_83C6854 -_0807D654: .4byte gUnknown_83C2D20 -_0807D658: .4byte gUnknown_83C683C -_0807D65C: .4byte gSprites -_0807D660: - ldr r2, _0807D690 @ =gWeatherPtr - ldr r1, [r2] - lsls r0, r7, 2 - movs r3, 0xC8 - lsls r3, 1 - adds r1, r3 - adds r1, r0 - movs r0, 0 - str r0, [r1] -_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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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 @ =gWeatherPtr - 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 gWeatherPtr -_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/data/field_weather.s b/data/field_weather.s index acd7744cd..6e86e9f25 100644 --- a/data/field_weather.s +++ b/data/field_weather.s @@ -6,248 +6,3 @@ .include "constants/constants.inc" .section .rodata .align 2 - -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_83C2D40.png b/graphics/field_effects/unk_83C2D40.png deleted file mode 100644 index b3d52b9e6..000000000 Binary files a/graphics/field_effects/unk_83C2D40.png and /dev/null differ diff --git a/graphics/field_effects/unk_83C3540.png b/graphics/field_effects/unk_83C3540.png deleted file mode 100644 index 891e395ad..000000000 Binary files a/graphics/field_effects/unk_83C3540.png and /dev/null differ diff --git a/graphics/field_effects/unk_83C3D40.png b/graphics/field_effects/unk_83C3D40.png deleted file mode 100644 index 882fc213f..000000000 Binary files a/graphics/field_effects/unk_83C3D40.png and /dev/null differ diff --git a/graphics/field_effects/unk_83C4540.png b/graphics/field_effects/unk_83C4540.png deleted file mode 100644 index 14cf009e5..000000000 Binary files a/graphics/field_effects/unk_83C4540.png and /dev/null differ diff --git a/graphics/field_effects/unk_83C4580.png b/graphics/field_effects/unk_83C4580.png deleted file mode 100644 index 6bc714152..000000000 Binary files a/graphics/field_effects/unk_83C4580.png and /dev/null differ diff --git a/graphics/field_effects/unk_83C45C0.png b/graphics/field_effects/unk_83C45C0.png deleted file mode 100644 index f5ee4ce9c..000000000 Binary files a/graphics/field_effects/unk_83C45C0.png and /dev/null differ diff --git a/graphics/field_effects/unk_83C55C0.png b/graphics/field_effects/unk_83C55C0.png deleted file mode 100644 index a367de4e7..000000000 Binary files a/graphics/field_effects/unk_83C55C0.png and /dev/null differ diff --git a/graphics/field_effects/unk_83C5BC0.png b/graphics/field_effects/unk_83C5BC0.png deleted file mode 100644 index 9896daac7..000000000 Binary files a/graphics/field_effects/unk_83C5BC0.png and /dev/null differ diff --git a/graphics/weather/ash.png b/graphics/weather/ash.png new file mode 100644 index 000000000..901605078 Binary files /dev/null and b/graphics/weather/ash.png differ diff --git a/graphics/weather/cloud.png b/graphics/weather/cloud.png new file mode 100644 index 000000000..7eb3c61d9 Binary files /dev/null and b/graphics/weather/cloud.png differ diff --git a/graphics/weather/fog_diagonal.png b/graphics/weather/fog_diagonal.png new file mode 100644 index 000000000..198c6f494 Binary files /dev/null and b/graphics/weather/fog_diagonal.png differ diff --git a/graphics/weather/fog_horizontal.png b/graphics/weather/fog_horizontal.png new file mode 100644 index 000000000..02e3cd3cb Binary files /dev/null and b/graphics/weather/fog_horizontal.png differ diff --git a/graphics/weather/rain.png b/graphics/weather/rain.png new file mode 100644 index 000000000..eaaa0b4e3 Binary files /dev/null and b/graphics/weather/rain.png differ diff --git a/graphics/weather/sandstorm.png b/graphics/weather/sandstorm.png new file mode 100644 index 000000000..aeb03f59f Binary files /dev/null and b/graphics/weather/sandstorm.png differ diff --git a/graphics/weather/snow0.png b/graphics/weather/snow0.png new file mode 100644 index 000000000..1e3553172 Binary files /dev/null and b/graphics/weather/snow0.png differ diff --git a/graphics/weather/snow1.png b/graphics/weather/snow1.png new file mode 100644 index 000000000..7277d51d4 Binary files /dev/null and b/graphics/weather/snow1.png differ diff --git a/include/field_weather.h b/include/field_weather.h index b4006b3ad..3dc17b072 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -137,5 +137,28 @@ 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 index 11d3314a2..8ff3bae9c 100644 --- a/include/field_weather_effects.h +++ b/include/field_weather_effects.h @@ -4,15 +4,15 @@ bool8 Ash_Finish(void); bool8 Bubbles_Finish(void); bool8 Clouds_Finish(void); -bool8 Fog1_Finish(void); -bool8 Fog2_Finish(void); -bool8 LightRain_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 sub_807B434(void); -bool8 sub_807B6BC(void); -bool8 sub_807D8D0(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); @@ -25,31 +25,31 @@ void Clouds_Main(void); void Drought_InitAll(void); void Drought_InitVars(void); void Drought_Main(void); -void Fog1_InitAll(void); -void Fog1_InitVars(void); -void Fog1_Main(void); -void Fog2_InitAll(void); -void Fog2_InitVars(void); -void Fog2_Main(void); -void LightRain_InitAll(void); -void LightRain_InitVars(void); -void LightRain_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 Weather11_InitAll(void); -void Weather11_InitVars(void); -void Weather2_InitAll(void); -void Weather2_InitVars(void); -void nullsub_48(void); -void nullsub_49(void); -void snowflakes_progress2(void); -void sub_807C2E4(void); -void sub_807C358(void); -void sub_807C388(void); -void sub_807C3F4(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/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 e876d3268..01e1d0eb3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -116,7 +116,7 @@ SECTIONS { src/reset_save_heap.o(.text); src/field_weather.o(.text); src/field_weather_util.o(.text); - asm/field_weather_effects.o(.text); + src/field_weather_effects.o(.text); src/field_fadetransition.o(.text); src/field_screen_effect.o(.text); src/battle_setup.o(.text); @@ -449,7 +449,7 @@ SECTIONS { src/title_screen.o(.rodata); src/field_weather.o(.rodata); src/field_weather_util.o(.rodata); - data/field_weather.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/field_weather.c b/src/field_weather.c index 192ec8f44..494e4da2f 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -62,25 +62,24 @@ bool8 FadeInScreen_FogHorizontal(void); void DoNothing(void); void ApplyFogBlend(u8 blendCoeff, u16 blendColor); bool8 LightenSpritePaletteInFog(u8 paletteIndex); -void Weather_SetBlendCoeffs(u8, u8); struct Weather *const gWeatherPtr = &gWeather; const struct WeatherCallbacks sWeatherFuncs[] = { {None_Init, None_Main, None_Init, None_Finish}, {Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish}, - {Weather2_InitVars, nullsub_48, Weather2_InitAll, sub_807B434}, - {LightRain_InitVars, LightRain_Main, LightRain_InitAll, LightRain_Finish}, - {Snow_InitVars, snowflakes_progress2, Snow_InitAll, Snow_Finish}, - {sub_807C2E4, Rain_Main, sub_807C358, Rain_Finish}, - {Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_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}, - {Fog2_InitVars, Fog2_Main, Fog2_InitAll, Fog2_Finish}, - {Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish}, - {Weather11_InitVars, nullsub_49, Weather11_InitAll, sub_807D8D0}, - {Drought_InitVars, Drought_Main, Drought_InitAll, sub_807B6BC}, - {sub_807C388, Rain_Main, sub_807C3F4, Rain_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}, }; @@ -129,6 +128,17 @@ const u8 sBasePaletteGammaTypes[32] = { }; 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) diff --git a/src/field_weather_effects.c b/src/field_weather_effects.c new file mode 100644 index 000000000..43314e6ad --- /dev/null +++ b/src/field_weather_effects.c @@ -0,0 +1,2321 @@ +#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 = 0, + .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 == FALSE) + Weather_SetBlendCoeffs(0, 16); +} + +void Clouds_InitAll(void) +{ + Clouds_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + 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 == FALSE) + 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() == FALSE) + 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 = 0, + .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 = 4614, + .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 = 0; + } + else + { + sprite->tCounter = frameVal - numFallingFrames; + sprite->invisible = TRUE; + sprite->tWaiting = 1; + } +} + +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 == FALSE) + { + 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 = 0, + .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 = 0; + SetRainStrengthFromSoundEffect(SE_T_AME); +} + +void Thunderstorm_InitAll(void) +{ + Thunderstorm_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + 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 == FALSE) + 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 = 0; + gWeatherPtr->finishStep++; + return FALSE; + } + break; + default: + return FALSE; + } + return TRUE; +} + +static void SetThunderCounter(u16 max) +{ + if (gWeatherPtr->thunderTriggered == 0) + { + gWeatherPtr->thunderCounter = Random() % max; + gWeatherPtr->thunderTriggered = 1; + } +} + +static void UpdateThunderSound(void) +{ + if (gWeatherPtr->thunderTriggered == 1) + { + if (gWeatherPtr->thunderCounter == 0) + { + if (IsSEPlaying()) + return; + + if (Random() & 1) + PlaySE(SE_T_KAMI); + else + PlaySE(SE_T_KAMI2); + + gWeatherPtr->thunderTriggered = 0; + } + 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 = 0, + .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, +}; + +void FogHorizontal_Main(void); +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 == 0) + { + gWeatherPtr->fogHScrollCounter = 0; + gWeatherPtr->fogHScrollOffset = 0; + gWeatherPtr->fogHScrollPosX = 0; + Weather_SetBlendCoeffs(0, 16); + } +} + +void FogHorizontal_InitAll(void) +{ + FogHorizontal_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + 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 = 0; + } +} + +#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 == FALSE) + 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 = 4610, + .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 == FALSE) + 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 > ARRAY_COUNT(sBubbleStartDelays) - 1) + gWeatherPtr->bubblesDelayIndex = 0; + + CreateBubbleSprite(gWeatherPtr->bubblesCoordsIndex); + if (++gWeatherPtr->bubblesCoordsIndex > ARRAY_COUNT(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 index 40c5fbe4d..d96378e23 100644 --- a/src/field_weather_util.c +++ b/src/field_weather_util.c @@ -6,17 +6,6 @@ u8 TranslateWeatherNum(u8 weather); void UpdateRainCounter(u8 newWeather, u8 oldWeather); -const u16 gUnknown_83C2D00[] = INCBIN_U16("graphics/field_effects/unk_83C2D00.gbapal"); -const u16 gUnknown_83C2D20[] = INCBIN_U16("graphics/field_effects/unk_83C2D20.gbapal"); -const u16 gUnknown_83C2D40[] = INCBIN_U16("graphics/field_effects/unk_83C2D40.4bpp"); -const u16 gWeatherFog1Tiles[] = INCBIN_U16("graphics/field_effects/unk_83C3540.4bpp"); -const u16 gUnknown_83C3D40[] = INCBIN_U16("graphics/field_effects/unk_83C3D40.4bpp"); -const u16 gUnknown_83C4540[] = INCBIN_U16("graphics/field_effects/unk_83C4540.4bpp"); -const u16 gUnknown_83C4580[] = INCBIN_U16("graphics/field_effects/unk_83C4580.4bpp"); -const u16 gUnknown_83C45C0[] = INCBIN_U16("graphics/field_effects/unk_83C45C0.4bpp"); -const u16 gUnknown_83C55C0[] = INCBIN_U16("graphics/field_effects/unk_83C55C0.4bpp"); -const u16 gUnknown_83C5BC0[] = INCBIN_U16("graphics/field_effects/unk_83C5BC0.4bpp"); - void SetSav1Weather(u32 weather) { u8 oldWeather = gSaveBlock1Ptr->weather; 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()) -- cgit v1.2.3 From 2c0a5be745c22e23c3dfa96c60a9eb13e759e0bc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 16 Mar 2020 21:48:54 -0400 Subject: Static syms in field_weather_* --- asm/field_weather_effects.s | 8 ---- src/field_weather.c | 94 ++++++++++++++++++++++----------------------- src/field_weather_util.c | 8 ++-- 3 files changed, 51 insertions(+), 59 deletions(-) delete mode 100644 asm/field_weather_effects.s diff --git a/asm/field_weather_effects.s b/asm/field_weather_effects.s deleted file mode 100644 index 2428f2984..000000000 --- a/asm/field_weather_effects.s +++ /dev/null @@ -1,8 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - .align 2, 0 @ Don't pad with nop. diff --git a/src/field_weather.c b/src/field_weather.c index 494e4da2f..d16e8f15a 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -40,32 +40,32 @@ struct WeatherCallbacks bool8 (*finish)(void); }; -EWRAM_DATA struct Weather gWeather = {}; -EWRAM_DATA u8 sFieldEffectPaletteGammaTypes[32] = {}; -EWRAM_DATA const u8 *sPaletteGammaTypes = NULL; -EWRAM_DATA u16 gUnknown_20386A8 = 0; - -void Task_WeatherMain(u8 taskId); -void Task_WeatherInit(u8 taskId); -void None_Init(void); -void None_Main(void); -bool8 None_Finish(void); -void BuildGammaShiftTables(void); -void UpdateWeatherGammaShift(void); -void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex); -void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor); -void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor); -void FadeInScreenWithWeather(void); -bool8 FadeInScreen_RainShowShade(void); -bool8 FadeInScreen_Drought(void); -bool8 FadeInScreen_FogHorizontal(void); -void DoNothing(void); -void ApplyFogBlend(u8 blendCoeff, u16 blendColor); -bool8 LightenSpritePaletteInFog(u8 paletteIndex); +static EWRAM_DATA struct Weather gWeather = {}; +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 = &gWeather; -const struct WeatherCallbacks sWeatherFuncs[] = { +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}, @@ -83,14 +83,14 @@ const struct WeatherCallbacks sWeatherFuncs[] = { {Bubbles_InitVars, Bubbles_Main, Bubbles_InitAll, Bubbles_Finish}, }; -void (*const gWeatherPalStateFuncs[])(void) = { +static void (*const gWeatherPalStateFuncs[])(void) = { UpdateWeatherGammaShift, FadeInScreenWithWeather, DoNothing, DoNothing }; -const u8 sBasePaletteGammaTypes[32] = { +static const u8 sBasePaletteGammaTypes[32] = { // background palettes GAMMA_NORMAL, GAMMA_NORMAL, @@ -196,7 +196,7 @@ void SetCurrentAndNextWeather(u8 weather) gWeatherPtr->nextWeather = weather; } -void SetCurrentAndNextWeatherNoDelay(u8 weather) +static void SetCurrentAndNextWeatherNoDelay(u8 weather) { PlayRainStoppingSoundEffect(); gWeatherPtr->currWeather = weather; @@ -205,7 +205,7 @@ void SetCurrentAndNextWeatherNoDelay(u8 weather) gWeatherPtr->readyForInit = TRUE; } -void Task_WeatherInit(u8 taskId) +static void Task_WeatherInit(u8 taskId) { // Waits until it's ok to initialize weather. // When the screen fades in, this is set to TRUE. @@ -216,7 +216,7 @@ void Task_WeatherInit(u8 taskId) } } -void Task_WeatherMain(u8 taskId) +static void Task_WeatherMain(u8 taskId) { if (gWeatherPtr->currWeather != gWeatherPtr->nextWeather) { @@ -240,17 +240,17 @@ void Task_WeatherMain(u8 taskId) } -void None_Init(void) +static void None_Init(void) { gWeatherPtr->gammaTargetIndex = 0; gWeatherPtr->gammaStepDelay = 0; } -void None_Main(void) +static void None_Main(void) { } -u8 None_Finish(void) +static u8 None_Finish(void) { return 0; } @@ -258,7 +258,7 @@ u8 None_Finish(void) // 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. -void BuildGammaShiftTables(void) +static void BuildGammaShiftTables(void) { u16 v0; u8 (*gammaTable)[32]; @@ -327,7 +327,7 @@ void BuildGammaShiftTables(void) // When the weather is changing, it gradually updates the palettes // towards the desired gamma shift. -void UpdateWeatherGammaShift(void) +static void UpdateWeatherGammaShift(void) { if (gWeatherPtr->gammaIndex == gWeatherPtr->gammaTargetIndex) { @@ -348,7 +348,7 @@ void UpdateWeatherGammaShift(void) } } -void FadeInScreenWithWeather(void) +static void FadeInScreenWithWeather(void) { if (++gWeatherPtr->unknown_6CB > 1) gWeatherPtr->unknown_6CA = 0; @@ -394,7 +394,7 @@ void FadeInScreenWithWeather(void) } } -bool8 FadeInScreen_RainShowShade(void) +static bool8 FadeInScreen_RainShowShade(void) { if (gWeatherPtr->fadeScreenCounter == 16) return FALSE; @@ -410,7 +410,7 @@ bool8 FadeInScreen_RainShowShade(void) return TRUE; } -bool8 FadeInScreen_Drought(void) +static bool8 FadeInScreen_Drought(void) { if (gWeatherPtr->fadeScreenCounter == 16) return FALSE; @@ -426,7 +426,7 @@ bool8 FadeInScreen_Drought(void) return TRUE; } -bool8 FadeInScreen_FogHorizontal(void) +static bool8 FadeInScreen_FogHorizontal(void) { if (gWeatherPtr->fadeScreenCounter == 16) return FALSE; @@ -436,10 +436,10 @@ bool8 FadeInScreen_FogHorizontal(void) return TRUE; } -void DoNothing(void) +static void DoNothing(void) { } -void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex) +static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex) { u16 curPalIndex; u16 palOffset; @@ -523,7 +523,7 @@ void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex) } } -void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor) +static void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor) { u16 palOffset; u16 curPalIndex; @@ -574,7 +574,7 @@ void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u } } -void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor) +static void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor) { struct RGBColor color; u8 rBlend; @@ -623,7 +623,7 @@ void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColo } } -void ApplyFogBlend(u8 blendCoeff, u16 blendColor) +static void ApplyFogBlend(u8 blendCoeff, u16 blendColor) { struct RGBColor color; u8 rBlend; @@ -670,7 +670,7 @@ void ApplyFogBlend(u8 blendCoeff, u16 blendColor) } } -void MarkFogSpritePalToLighten(u8 paletteIndex) +static void MarkFogSpritePalToLighten(u8 paletteIndex) { if (gWeatherPtr->lightenedFogSpritePalsCount < 6) { @@ -679,7 +679,7 @@ void MarkFogSpritePalToLighten(u8 paletteIndex) } } -bool8 LightenSpritePaletteInFog(u8 paletteIndex) +static bool8 LightenSpritePaletteInFog(u8 paletteIndex) { u16 i; @@ -899,7 +899,7 @@ void ApplyWeatherGammaShiftToPal(u8 paletteIndex) ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex); } -u8 sub_80ABF20(void) +static u8 sub_80ABF20(void) { if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_SCREEN_FADING_IN) return gWeatherPtr->unknown_6CA; @@ -937,7 +937,7 @@ bool8 LoadDroughtWeatherPalettes(void) return FALSE; } -void sub_807AC50(s8 gammaIndex) +static void sub_807AC50(s8 gammaIndex) { sub_807A790(-gammaIndex - 1); } @@ -1042,7 +1042,7 @@ bool8 Weather_UpdateBlend(void) return FALSE; } -void sub_807AF00(u8 a) +static void sub_807AF00(u8 a) { switch (a) { diff --git a/src/field_weather_util.c b/src/field_weather_util.c index d96378e23..2c3338fd9 100644 --- a/src/field_weather_util.c +++ b/src/field_weather_util.c @@ -3,8 +3,8 @@ #include "overworld.h" #include "constants/weather.h" -u8 TranslateWeatherNum(u8 weather); -void UpdateRainCounter(u8 newWeather, u8 oldWeather); +static u8 TranslateWeatherNum(u8 weather); +static void UpdateRainCounter(u8 newWeather, u8 oldWeather); void SetSav1Weather(u32 weather) { @@ -66,7 +66,7 @@ const u8 sWeatherCycleRoute123[] = WEATHER_SUNNY, }; -u8 TranslateWeatherNum(u8 weather) +static u8 TranslateWeatherNum(u8 weather) { switch (weather) { @@ -98,7 +98,7 @@ void UpdateWeatherPerDay(u16 increment) gSaveBlock1Ptr->weatherCycleStage = weatherStage; } -void UpdateRainCounter(u8 newWeather, u8 oldWeather) +static void UpdateRainCounter(u8 newWeather, u8 oldWeather) { if (newWeather != oldWeather && (newWeather == WEATHER_RAIN || newWeather == WEATHER_RAIN_THUNDERSTORM)) -- cgit v1.2.3 From e7a288189db2773f27134a6327aa9ce3312dc812 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 16 Mar 2020 22:06:03 -0400 Subject: Add missing bubble.png --- graphics/weather/bubble.png | Bin 0 -> 177 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 graphics/weather/bubble.png diff --git a/graphics/weather/bubble.png b/graphics/weather/bubble.png new file mode 100644 index 000000000..05885a11d Binary files /dev/null and b/graphics/weather/bubble.png differ -- cgit v1.2.3 From 39587fe2bcfdc8a353e2ca91ca1ed370d748613e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 17 Mar 2020 08:28:09 -0400 Subject: Address review comments --- graphics/field_effects/unk_83BFBE4.bin | Bin 8192 -> 0 bytes graphics/field_effects/unk_83C0408.bin | Bin 8192 -> 0 bytes graphics/field_effects/unk_83C0C00.bin | Bin 8192 -> 0 bytes graphics/field_effects/unk_83C139C.bin | Bin 8192 -> 0 bytes graphics/field_effects/unk_83C1BB8.bin | Bin 8192 -> 0 bytes graphics/field_effects/unk_83C2380.bin | Bin 8192 -> 0 bytes graphics/title_screen/unk_83BFBE4.bin | Bin 0 -> 8192 bytes graphics/title_screen/unk_83C0408.bin | Bin 0 -> 8192 bytes graphics/title_screen/unk_83C0C00.bin | Bin 0 -> 8192 bytes graphics/title_screen/unk_83C139C.bin | Bin 0 -> 8192 bytes graphics/title_screen/unk_83C1BB8.bin | Bin 0 -> 8192 bytes graphics/title_screen/unk_83C2380.bin | Bin 0 -> 8192 bytes include/field_weather.h | 31 ++++++++---------- src/field_weather.c | 24 +++++++------- src/field_weather_effects.c | 57 ++++++++++++++++----------------- src/field_weather_util.c | 27 ++++++++-------- src/title_screen.c | 16 ++++----- 17 files changed, 74 insertions(+), 81 deletions(-) delete mode 100644 graphics/field_effects/unk_83BFBE4.bin delete mode 100644 graphics/field_effects/unk_83C0408.bin delete mode 100644 graphics/field_effects/unk_83C0C00.bin delete mode 100644 graphics/field_effects/unk_83C139C.bin delete mode 100644 graphics/field_effects/unk_83C1BB8.bin delete mode 100644 graphics/field_effects/unk_83C2380.bin create mode 100644 graphics/title_screen/unk_83BFBE4.bin create mode 100644 graphics/title_screen/unk_83C0408.bin create mode 100644 graphics/title_screen/unk_83C0C00.bin create mode 100644 graphics/title_screen/unk_83C139C.bin create mode 100644 graphics/title_screen/unk_83C1BB8.bin create mode 100644 graphics/title_screen/unk_83C2380.bin diff --git a/graphics/field_effects/unk_83BFBE4.bin b/graphics/field_effects/unk_83BFBE4.bin deleted file mode 100644 index 54748ea04..000000000 Binary files a/graphics/field_effects/unk_83BFBE4.bin and /dev/null differ diff --git a/graphics/field_effects/unk_83C0408.bin b/graphics/field_effects/unk_83C0408.bin deleted file mode 100644 index 932da7b46..000000000 Binary files a/graphics/field_effects/unk_83C0408.bin and /dev/null differ diff --git a/graphics/field_effects/unk_83C0C00.bin b/graphics/field_effects/unk_83C0C00.bin deleted file mode 100644 index 7271feda4..000000000 Binary files a/graphics/field_effects/unk_83C0C00.bin and /dev/null differ diff --git a/graphics/field_effects/unk_83C139C.bin b/graphics/field_effects/unk_83C139C.bin deleted file mode 100644 index f983e37a5..000000000 Binary files a/graphics/field_effects/unk_83C139C.bin and /dev/null differ diff --git a/graphics/field_effects/unk_83C1BB8.bin b/graphics/field_effects/unk_83C1BB8.bin deleted file mode 100644 index bba7a0909..000000000 Binary files a/graphics/field_effects/unk_83C1BB8.bin and /dev/null differ diff --git a/graphics/field_effects/unk_83C2380.bin b/graphics/field_effects/unk_83C2380.bin deleted file mode 100644 index 9e13c930b..000000000 Binary files a/graphics/field_effects/unk_83C2380.bin and /dev/null differ diff --git a/graphics/title_screen/unk_83BFBE4.bin b/graphics/title_screen/unk_83BFBE4.bin new file mode 100644 index 000000000..54748ea04 Binary files /dev/null and b/graphics/title_screen/unk_83BFBE4.bin differ diff --git a/graphics/title_screen/unk_83C0408.bin b/graphics/title_screen/unk_83C0408.bin new file mode 100644 index 000000000..932da7b46 Binary files /dev/null and b/graphics/title_screen/unk_83C0408.bin differ diff --git a/graphics/title_screen/unk_83C0C00.bin b/graphics/title_screen/unk_83C0C00.bin new file mode 100644 index 000000000..7271feda4 Binary files /dev/null and b/graphics/title_screen/unk_83C0C00.bin differ diff --git a/graphics/title_screen/unk_83C139C.bin b/graphics/title_screen/unk_83C139C.bin new file mode 100644 index 000000000..f983e37a5 Binary files /dev/null and b/graphics/title_screen/unk_83C139C.bin differ diff --git a/graphics/title_screen/unk_83C1BB8.bin b/graphics/title_screen/unk_83C1BB8.bin new file mode 100644 index 000000000..bba7a0909 Binary files /dev/null and b/graphics/title_screen/unk_83C1BB8.bin differ diff --git a/graphics/title_screen/unk_83C2380.bin b/graphics/title_screen/unk_83C2380.bin new file mode 100644 index 000000000..9e13c930b Binary files /dev/null and b/graphics/title_screen/unk_83C2380.bin differ diff --git a/include/field_weather.h b/include/field_weather.h index 3dc17b072..432c8c100 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -31,11 +31,11 @@ struct Weather u8 gammaStepDelay; u8 gammaStepFrameCounter; u16 fadeDestColor; - /*0x6C6*/ u8 palProcessingState; - /*0x6C7*/ u8 fadeScreenCounter; - /*0x6C8*/ bool8 readyForInit; - /*0x6C9*/ u8 taskId; - /*0x6CA*/ u8 unknown_6CA; + u8 palProcessingState; + u8 fadeScreenCounter; + bool8 readyForInit; + u8 taskId; + u8 unknown_6CA; u8 unknown_6CB; u16 initStep; u16 finishStep; @@ -52,8 +52,7 @@ struct Weather u8 rainSpriteVisibleDelay; u8 isDownpour; u8 rainStrength; - /*0x6DE*/ u8 cloudSpritesCreated; - u8 filler_6DF[1]; + bool8 cloudSpritesCreated; u16 snowflakeVisibleCounter; u16 unknown_6E2; u8 snowflakeSpriteCount; @@ -63,17 +62,16 @@ struct Weather u8 unknown_6EA; u8 unknown_6EB; u8 unknown_6EC; - u8 thunderTriggered; + bool8 thunderTriggered; u16 fogHScrollPosX; u16 fogHScrollCounter; u16 fogHScrollOffset; u8 lightenedFogSpritePals[6]; u8 lightenedFogSpritePalsCount; - u8 fogHSpritesCreated; + bool8 fogHSpritesCreated; u16 ashBaseSpritesX; u16 unknown_6FE; - u8 ashSpritesCreated; - u8 filler_701[3]; + bool8 ashSpritesCreated; u32 sandstormXOffset; u32 sandstormYOffset; u8 filler_70C[2]; @@ -81,22 +79,20 @@ struct Weather u16 sandstormPosY; u16 sandstormWaveIndex; u16 sandstormWaveCounter; - u8 sandstormSpritesCreated; - u8 sandstormSwirlSpritesCreated; + bool8 sandstormSpritesCreated; + bool8 sandstormSwirlSpritesCreated; u16 fogDBaseSpritesX; u16 fogDPosY; u16 fogDScrollXCounter; u16 fogDScrollYCounter; u16 fogDXOffset; u16 fogDYOffset; - u8 fogDSpritesCreated; - u8 filler_725[1]; + bool8 fogDSpritesCreated; u16 bubblesDelayCounter; u16 bubblesDelayIndex; u16 bubblesCoordsIndex; u16 bubblesSpriteCount; - u8 bubblesSpritesCreated; - u8 filler_72F; + bool8 bubblesSpritesCreated; u16 currBlendEVA; u16 currBlendEVB; u16 targetBlendEVA; @@ -104,7 +100,6 @@ struct Weather u8 blendUpdateCounter; u8 blendFrameCounter; u8 blendDelay; - u8 filler_73B[0x3C-0x3B]; s16 unknown_73C; s16 unknown_73E; s16 unknown_740; diff --git a/src/field_weather.c b/src/field_weather.c index d16e8f15a..1185f5763 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -40,7 +40,7 @@ struct WeatherCallbacks bool8 (*finish)(void); }; -static EWRAM_DATA struct Weather gWeather = {}; +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; @@ -63,7 +63,7 @@ static void DoNothing(void); static void ApplyFogBlend(u8 blendCoeff, u16 blendColor); static bool8 LightenSpritePaletteInFog(u8 paletteIndex); -struct Weather *const gWeatherPtr = &gWeather; +struct Weather *const gWeatherPtr = &sWeather; static const struct WeatherCallbacks sWeatherFuncs[] = { {None_Init, None_Main, None_Init, None_Finish}, @@ -83,7 +83,7 @@ static const struct WeatherCallbacks sWeatherFuncs[] = { {Bubbles_InitVars, Bubbles_Main, Bubbles_InitAll, Bubbles_Finish}, }; -static void (*const gWeatherPalStateFuncs[])(void) = { +static void (*const sWeatherPalStateFuncs[])(void) = { UpdateWeatherGammaShift, FadeInScreenWithWeather, DoNothing, @@ -153,17 +153,17 @@ void StartWeather(void) gWeatherPtr->weatherPicSpritePalIndex = index; gWeatherPtr->rainSpriteCount = 0; gWeatherPtr->curRainSpriteIndex = 0; - gWeatherPtr->cloudSpritesCreated = 0; + gWeatherPtr->cloudSpritesCreated = FALSE; gWeatherPtr->snowflakeSpriteCount = 0; - gWeatherPtr->ashSpritesCreated = 0; - gWeatherPtr->fogHSpritesCreated = 0; - gWeatherPtr->fogDSpritesCreated = 0; - gWeatherPtr->sandstormSpritesCreated = 0; - gWeatherPtr->sandstormSwirlSpritesCreated = 0; - gWeatherPtr->bubblesSpritesCreated = 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 = 0; + gWeatherPtr->currWeather = WEATHER_NONE; gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE; gWeatherPtr->readyForInit = FALSE; gWeatherPtr->weatherChangeComplete = TRUE; @@ -236,7 +236,7 @@ static void Task_WeatherMain(u8 taskId) sWeatherFuncs[gWeatherPtr->currWeather].main(); } - gWeatherPalStateFuncs[gWeatherPtr->palProcessingState](); + sWeatherPalStateFuncs[gWeatherPtr->palProcessingState](); } diff --git a/src/field_weather_effects.c b/src/field_weather_effects.c index 43314e6ad..e6f4bfacf 100644 --- a/src/field_weather_effects.c +++ b/src/field_weather_effects.c @@ -38,7 +38,7 @@ static const struct OamData sCloudSpriteOamData = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -75,14 +75,14 @@ void Clouds_InitVars(void) gWeatherPtr->gammaStepDelay = 20; gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->initStep = 0; - if (gWeatherPtr->cloudSpritesCreated == FALSE) + if (!gWeatherPtr->cloudSpritesCreated) Weather_SetBlendCoeffs(0, 16); } void Clouds_InitAll(void) { Clouds_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) + while (!gWeatherPtr->weatherGfxLoaded) Clouds_Main(); } @@ -219,7 +219,7 @@ void Drought_InitVars(void) void Drought_InitAll(void) { Drought_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) + while (!gWeatherPtr->weatherGfxLoaded) Drought_Main(); } @@ -236,7 +236,7 @@ void Drought_Main(void) gWeatherPtr->initStep++; break; case 2: - if (LoadDroughtWeatherPalettes() == FALSE) + if (!LoadDroughtWeatherPalettes()) gWeatherPtr->initStep++; break; case 3: @@ -368,7 +368,7 @@ static const struct OamData sRainSpriteOamData = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x32), .x = 0, @@ -406,7 +406,7 @@ static const union AnimCmd *const sRainSpriteAnimCmds[] = { }; static const struct SpriteTemplate sRainSpriteTemplate = { - .tileTag = 4614, + .tileTag = 0x1206, .paletteTag = 0x1200, .oam = &sRainSpriteOamData, .anims = sRainSpriteAnimCmds, @@ -615,13 +615,13 @@ static void InitRainSpriteMovement(struct Sprite *sprite, u16 val) while (--frameVal != 0xFFFF) UpdateRainSprite(sprite); - sprite->tWaiting = 0; + sprite->tWaiting = FALSE; } else { sprite->tCounter = frameVal - numFallingFrames; sprite->invisible = TRUE; - sprite->tWaiting = 1; + sprite->tWaiting = TRUE; } } @@ -747,7 +747,7 @@ void Snow_InitAll(void) u16 i; Snow_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) + while (!gWeatherPtr->weatherGfxLoaded) { Snow_Main(); for (i = 0; i < gWeatherPtr->snowflakeSpriteCount; i++) @@ -806,7 +806,7 @@ static const struct OamData sSnowflakeSpriteOamData = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, @@ -983,14 +983,14 @@ void Thunderstorm_InitVars(void) gWeatherPtr->gammaTargetIndex = 3; gWeatherPtr->gammaStepDelay = 20; gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment - gWeatherPtr->thunderTriggered = 0; + gWeatherPtr->thunderTriggered = FALSE; SetRainStrengthFromSoundEffect(SE_T_AME); } void Thunderstorm_InitAll(void) { Thunderstorm_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) + while (!gWeatherPtr->weatherGfxLoaded) Thunderstorm_Main(); } @@ -1018,7 +1018,7 @@ void Downpour_InitVars(void) void Downpour_InitAll(void) { Downpour_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) + while (!gWeatherPtr->weatherGfxLoaded) Thunderstorm_Main(); } @@ -1151,7 +1151,7 @@ bool8 Thunderstorm_Finish(void) if (!UpdateVisibleRainSprites()) { DestroyRainSprites(); - gWeatherPtr->thunderTriggered = 0; + gWeatherPtr->thunderTriggered = FALSE; gWeatherPtr->finishStep++; return FALSE; } @@ -1164,16 +1164,16 @@ bool8 Thunderstorm_Finish(void) static void SetThunderCounter(u16 max) { - if (gWeatherPtr->thunderTriggered == 0) + if (!gWeatherPtr->thunderTriggered) { gWeatherPtr->thunderCounter = Random() % max; - gWeatherPtr->thunderTriggered = 1; + gWeatherPtr->thunderTriggered = TRUE; } } static void UpdateThunderSound(void) { - if (gWeatherPtr->thunderTriggered == 1) + if (gWeatherPtr->thunderTriggered == TRUE) { if (gWeatherPtr->thunderCounter == 0) { @@ -1185,7 +1185,7 @@ static void UpdateThunderSound(void) else PlaySE(SE_T_KAMI2); - gWeatherPtr->thunderTriggered = 0; + gWeatherPtr->thunderTriggered = FALSE; } else { @@ -1205,7 +1205,7 @@ static const struct OamData gOamData_839AB2C = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, - .mosaic = 0, + .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, @@ -1276,7 +1276,6 @@ static const struct SpriteTemplate sFogHorizontalSpriteTemplate = { .callback = FogHorizontalSpriteCallback, }; -void FogHorizontal_Main(void); static void CreateFogHorizontalSprites(void); static void DestroyFogHorizontalSprites(void); @@ -1286,7 +1285,7 @@ void FogHorizontal_InitVars(void) gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->gammaTargetIndex = 0; gWeatherPtr->gammaStepDelay = 20; - if (gWeatherPtr->fogHSpritesCreated == 0) + if (!gWeatherPtr->fogHSpritesCreated) { gWeatherPtr->fogHScrollCounter = 0; gWeatherPtr->fogHScrollOffset = 0; @@ -1298,7 +1297,7 @@ void FogHorizontal_InitVars(void) void FogHorizontal_InitAll(void) { FogHorizontal_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) + while (!gWeatherPtr->weatherGfxLoaded) FogHorizontal_Main(); } @@ -1420,7 +1419,7 @@ static void DestroyFogHorizontalSprites(void) } FreeSpriteTilesByTag(0x1201); - gWeatherPtr->fogHSpritesCreated = 0; + gWeatherPtr->fogHSpritesCreated = FALSE; } } @@ -1452,7 +1451,7 @@ void Ash_InitVars(void) void Ash_InitAll(void) { Ash_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) + while (!gWeatherPtr->weatherGfxLoaded) Ash_Main(); } @@ -1548,7 +1547,7 @@ static const union AnimCmd *const sAshSpriteAnimCmds[] = { }; static const struct SpriteTemplate sAshSpriteTemplate = { - .tileTag = 4610, + .tileTag = 0x1202, .paletteTag = 0x1200, .oam = &sAshSpriteOamData, .anims = sAshSpriteAnimCmds, @@ -1663,7 +1662,7 @@ void FogDiagonal_InitVars(void) void FogDiagonal_InitAll(void) { FogDiagonal_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) + while (!gWeatherPtr->weatherGfxLoaded) FogDiagonal_Main(); } @@ -2220,11 +2219,11 @@ void Bubbles_Main(void) if (++gWeatherPtr->bubblesDelayCounter > sBubbleStartDelays[gWeatherPtr->bubblesDelayIndex]) { gWeatherPtr->bubblesDelayCounter = 0; - if (++gWeatherPtr->bubblesDelayIndex > ARRAY_COUNT(sBubbleStartDelays) - 1) + if (++gWeatherPtr->bubblesDelayIndex > NELEMS(sBubbleStartDelays) - 1) gWeatherPtr->bubblesDelayIndex = 0; CreateBubbleSprite(gWeatherPtr->bubblesCoordsIndex); - if (++gWeatherPtr->bubblesCoordsIndex > ARRAY_COUNT(sBubbleStartCoords) - 1) + if (++gWeatherPtr->bubblesCoordsIndex > NELEMS(sBubbleStartCoords) - 1) gWeatherPtr->bubblesCoordsIndex = 0; } } diff --git a/src/field_weather_util.c b/src/field_weather_util.c index 2c3338fd9..459071736 100644 --- a/src/field_weather_util.c +++ b/src/field_weather_util.c @@ -51,20 +51,19 @@ void ResumePausedWeather(void) SetCurrentAndNextWeather(weather); } -const u8 sWeatherCycleRoute119[] = - { - WEATHER_SUNNY, - WEATHER_RAIN, - WEATHER_RAIN_THUNDERSTORM, - WEATHER_RAIN, - }; -const u8 sWeatherCycleRoute123[] = - { - WEATHER_SUNNY, - WEATHER_SUNNY, - WEATHER_RAIN, - WEATHER_SUNNY, - }; +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) { diff --git a/src/title_screen.c b/src/title_screen.c index 555b58e8f..e1bcf5dd2 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -305,14 +305,14 @@ static const u16 gUnknown_LG_83BFA10[] = { }; #endif -const u32 gUnknown_83BFBE4[] = INCBIN_U32("graphics/field_effects/unk_83BFBE4.bin.lz"); -const u32 gUnknown_83C0408[] = INCBIN_U32("graphics/field_effects/unk_83C0408.bin.lz"); -const u32 gUnknown_83C0C00[] = INCBIN_U32("graphics/field_effects/unk_83C0C00.bin.lz"); -const u32 gUnknown_83C139C[] = INCBIN_U32("graphics/field_effects/unk_83C139C.bin.lz"); -const u32 gUnknown_83C1BB8[] = INCBIN_U32("graphics/field_effects/unk_83C1BB8.bin.lz"); -const u32 gUnknown_83C2380[] = INCBIN_U32("graphics/field_effects/unk_83C2380.bin.lz"); - -const u32 *const gUnknown_83C2BA4[] = { +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, -- cgit v1.2.3 From 8a64f8b431b0d68453f8d4302474926adf407bb1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 17 Mar 2020 08:29:24 -0400 Subject: Remove data/field_weather.s --- data/field_weather.s | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 data/field_weather.s diff --git a/data/field_weather.s b/data/field_weather.s deleted file mode 100644 index 6e86e9f25..000000000 --- a/data/field_weather.s +++ /dev/null @@ -1,8 +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 -- cgit v1.2.3