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