diff options
-rw-r--r-- | asm/field_weather.s | 664 | ||||
-rw-r--r-- | src/field_weather.c | 214 |
2 files changed, 209 insertions, 669 deletions
diff --git a/asm/field_weather.s b/asm/field_weather.s index 3a0a70325..f01767efc 100644 --- a/asm/field_weather.s +++ b/asm/field_weather.s @@ -5,670 +5,6 @@ .text - thumb_func_start sub_807E5C0 -sub_807E5C0: @ 807E5C0 - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x36 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _0807E69C - ldr r3, _0807E634 @ =gUnknown_0839AABC - ldr r4, _0807E638 @ =gUnknown_08396FC4 - ldr r2, [r4] - ldr r0, _0807E63C @ =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 _0807E640 - adds r0, r1, 0 - adds r0, 0x8 - lsls r0, 16 - movs r1, 0x80 - lsls r1, 17 - cmp r0, r1 - bhi _0807E640 - adds r1, r2, 0 - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - blt _0807E640 - cmp r1, 0xB0 - bgt _0807E640 - adds r0, r5, 0 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - b _0807E64A - .align 2, 0 -_0807E634: .4byte gUnknown_0839AABC -_0807E638: .4byte gUnknown_08396FC4 -_0807E63C: .4byte 0x000006dc -_0807E640: - adds r0, r5, 0 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 -_0807E64A: - 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 _0807E6BC - ldr r0, [r3] - ldr r1, _0807E690 @ =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, _0807E694 @ =gSpriteCoordOffsetX - ldrh r0, [r5, 0x20] - ldrh r1, [r1] - subs r0, r1 - strh r0, [r5, 0x20] - ldr r1, _0807E698 @ =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 _0807E6BC - .align 2, 0 -_0807E690: .4byte 0x000006dc -_0807E694: .4byte gSpriteCoordOffsetX -_0807E698: .4byte gSpriteCoordOffsetY -_0807E69C: - adds r0, r5, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0807E6BC - 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_807E4EC -_0807E6BC: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_807E5C0 - - thumb_func_start sub_807E6C4 -sub_807E6C4: @ 807E6C4 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x2E] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _0807E6E4 - adds r0, r4, 0 - bl sub_807E4EC - ldr r0, _0807E6E0 @ =sub_807E5C0 - str r0, [r4, 0x1C] - b _0807E6E8 - .align 2, 0 -_0807E6E0: .4byte sub_807E5C0 -_0807E6E4: - subs r0, r1, 0x1 - strh r0, [r4, 0x2E] -_0807E6E8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_807E6C4 - - thumb_func_start sub_807E6F0 -sub_807E6F0: @ 807E6F0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - lsls r5, r1, 16 - lsrs r5, 16 - ldr r2, _0807E774 @ =gUnknown_0839AAC4 - ldr r0, _0807E778 @ =gUnknown_08396FC4 - ldr r0, [r0] - ldr r1, _0807E77C @ =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, _0807E780 @ =0x0000ffff - cmp r6, r0 - beq _0807E74E - adds r5, r0, 0 -_0807E73E: - adds r0, r7, 0 - bl sub_807E4EC - subs r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, r5 - bne _0807E73E -_0807E74E: - cmp r4, r8 - bcs _0807E784 - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, _0807E780 @ =0x0000ffff - cmp r4, r0 - beq _0807E770 - adds r5, r0, 0 -_0807E760: - adds r0, r7, 0 - bl sub_807E5C0 - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r5 - bne _0807E760 -_0807E770: - movs r0, 0 - b _0807E798 - .align 2, 0 -_0807E774: .4byte gUnknown_0839AAC4 -_0807E778: .4byte gUnknown_08396FC4 -_0807E77C: .4byte 0x000006dc -_0807E780: .4byte 0x0000ffff -_0807E784: - 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 -_0807E798: - strh r0, [r7, 0x3A] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_807E6F0 - - thumb_func_start sub_807E7A4 -sub_807E7A4: @ 807E7A4 - push {lr} - ldr r0, _0807E7B0 @ =gUnknown_0839AACC - bl LoadSpriteSheet - pop {r0} - bx r0 - .align 2, 0 -_0807E7B0: .4byte gUnknown_0839AACC - thumb_func_end sub_807E7A4 - - thumb_func_start sub_807E7B4 -sub_807E7B4: @ 807E7B4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _0807E860 @ =gUnknown_08396FC4 - ldr r4, [r0] - ldr r0, _0807E864 @ =0x000006da - adds r2, r4, r0 - ldrb r0, [r2] - cmp r0, 0x18 - bne _0807E7CE - b _0807E8D4 -_0807E7CE: - ldrb r7, [r2] - ldr r0, _0807E868 @ =gSpriteTemplate_839AAA4 - ldr r2, _0807E86C @ =gUnknown_0839AA08 - 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 _0807E87C - ldr r3, _0807E870 @ =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, _0807E874 @ =0x00000257 - mov r10, r6 - mov r9, r3 - mov r12, r4 - mov r8, r2 - cmp r0, r1 - ble _0807E832 - adds r2, r1, 0 -_0807E81A: - adds r0, r4, r5 - lsls r0, 2 - ldr r6, _0807E870 @ =gSprites - adds r0, r6 - ldr r3, _0807E878 @ =0xfffffda8 - ldrh r6, [r0, 0x30] - adds r1, r3, r6 - strh r1, [r0, 0x30] - lsls r1, 16 - asrs r1, 16 - cmp r1, r2 - bgt _0807E81A -_0807E832: - mov r0, r12 - adds r4, r0, r5 - lsls r4, 2 - add r4, r9 - adds r0, r4, 0 - bl sub_807E4EC - mov r3, r8 - adds r1, r3, r7 - adds r0, r4, 0 - bl sub_807E6F0 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _0807E860 @ =gUnknown_08396FC4 - ldr r0, [r0] - add r0, r10 - str r4, [r0] - b _0807E882 - .align 2, 0 -_0807E860: .4byte gUnknown_08396FC4 -_0807E864: .4byte 0x000006da -_0807E868: .4byte gSpriteTemplate_839AAA4 -_0807E86C: .4byte gUnknown_0839AA08 -_0807E870: .4byte gSprites -_0807E874: .4byte 0x00000257 -_0807E878: .4byte 0xfffffda8 -_0807E87C: - adds r1, r4, r6 - movs r0, 0 - str r0, [r1] -_0807E882: - ldr r0, _0807E8B8 @ =gUnknown_08396FC4 - ldr r2, [r0] - ldr r6, _0807E8BC @ =0x000006da - adds r1, r2, r6 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x18 - bne _0807E8D8 - movs r3, 0 - adds r1, r2, 0 - ldr r5, _0807E8C0 @ =sub_807E5C0 - ldr r4, _0807E8C4 @ =sub_807E6C4 -_0807E8A0: - lsls r0, r3, 2 - adds r0, r1, r0 - ldr r2, [r0] - cmp r2, 0 - beq _0807E8CA - movs r6, 0x3A - ldrsh r0, [r2, r6] - cmp r0, 0 - bne _0807E8C8 - str r5, [r2, 0x1C] - b _0807E8CA - .align 2, 0 -_0807E8B8: .4byte gUnknown_08396FC4 -_0807E8BC: .4byte 0x000006da -_0807E8C0: .4byte sub_807E5C0 -_0807E8C4: .4byte sub_807E6C4 -_0807E8C8: - str r4, [r2, 0x1C] -_0807E8CA: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x17 - bls _0807E8A0 -_0807E8D4: - movs r0, 0 - b _0807E8DA -_0807E8D8: - movs r0, 0x1 -_0807E8DA: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_807E7B4 - - thumb_func_start sub_807E8E8 -sub_807E8E8: @ 807E8E8 - push {r4-r7,lr} - ldr r0, _0807E904 @ =gUnknown_08396FC4 - ldr r3, [r0] - movs r0, 0xDB - lsls r0, 3 - adds r4, r3, r0 - ldr r1, _0807E908 @ =0x000006d9 - adds r5, r3, r1 - ldrb r0, [r4] - ldrb r7, [r5] - cmp r0, r7 - bne _0807E90C - movs r0, 0 - b _0807E96E - .align 2, 0 -_0807E904: .4byte gUnknown_08396FC4 -_0807E908: .4byte 0x000006d9 -_0807E90C: - ldr r0, _0807E944 @ =0x000006d6 - adds r2, r3, r0 - ldrh r0, [r2] - adds r0, 0x1 - movs r6, 0 - strh r0, [r2] - ldr r7, _0807E948 @ =0x000006db - adds r1, r3, r7 - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r1] - cmp r0, r1 - bls _0807E96C - strh r6, [r2] - ldrb r0, [r4] - adds r1, r0, 0 - ldrb r5, [r5] - cmp r1, r5 - bcs _0807E94C - 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 _0807E96C - .align 2, 0 -_0807E944: .4byte 0x000006d6 -_0807E948: .4byte 0x000006db -_0807E94C: - 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] -_0807E96C: - movs r0, 0x1 -_0807E96E: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_807E8E8 - - thumb_func_start sub_807E974 -sub_807E974: @ 807E974 - push {r4-r7,lr} - movs r4, 0 - ldr r0, _0807E9BC @ =gUnknown_08396FC4 - ldr r2, [r0] - ldr r3, _0807E9C0 @ =0x000006da - adds r1, r2, r3 - adds r7, r0, 0 - ldrb r1, [r1] - cmp r4, r1 - bcs _0807E9A6 - adds r5, r2, 0 - adds r6, r5, r3 -_0807E98C: - lsls r0, r4, 2 - adds r0, r5, r0 - ldr r0, [r0] - cmp r0, 0 - beq _0807E99A - bl DestroySprite -_0807E99A: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - ldrb r0, [r6] - cmp r4, r0 - bcc _0807E98C -_0807E9A6: - ldr r0, [r7] - ldr r1, _0807E9C0 @ =0x000006da - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r0, _0807E9C4 @ =0x00001206 - bl FreeSpriteTilesByTag - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807E9BC: .4byte gUnknown_08396FC4 -_0807E9C0: .4byte 0x000006da -_0807E9C4: .4byte 0x00001206 - thumb_func_end sub_807E974 - - thumb_func_start sub_807E9C8 -sub_807E9C8: @ 807E9C8 - push {r4,lr} - ldr r0, _0807EA04 @ =gUnknown_08396FC4 - ldr r1, [r0] - ldr r2, _0807EA08 @ =0x000006cc - adds r0, r1, r2 - movs r2, 0 - movs r3, 0 - strh r3, [r0] - ldr r4, _0807EA0C @ =0x000006d2 - adds r0, r1, r4 - strb r2, [r0] - ldr r0, _0807EA10 @ =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, _0807EA14 @ =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 -_0807EA04: .4byte gUnknown_08396FC4 -_0807EA08: .4byte 0x000006cc -_0807EA0C: .4byte 0x000006d2 -_0807EA10: .4byte 0x000006c1 -_0807EA14: .4byte 0x000006e5 - thumb_func_end sub_807E9C8 - - thumb_func_start sub_807EA18 -sub_807EA18: @ 807EA18 - push {r4-r7,lr} - mov r7, r8 - push {r7} - bl sub_807E9C8 - ldr r2, _0807EA78 @ =gUnknown_08396FC4 - ldr r1, [r2] - ldr r3, _0807EA7C @ =0x000006d2 - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, 0 - bne _0807EA6E - mov r8, r2 - adds r7, r1, r3 -_0807EA34: - bl snowflakes_progress2 - movs r4, 0 - mov r1, r8 - ldr r0, [r1] - ldr r3, _0807EA80 @ =0x000006e4 - adds r0, r3 - ldrb r0, [r0] - cmp r4, r0 - bcs _0807EA68 - ldr r0, _0807EA78 @ =gUnknown_08396FC4 - ldr r5, [r0] - adds r6, r5, r3 -_0807EA4E: - lsls r1, r4, 2 - adds r0, r5, 0 - adds r0, 0x60 - adds r0, r1 - ldr r0, [r0] - bl sub_807ED48 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - ldrb r0, [r6] - cmp r4, r0 - bcc _0807EA4E -_0807EA68: - ldrb r0, [r7] - cmp r0, 0 - beq _0807EA34 -_0807EA6E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807EA78: .4byte gUnknown_08396FC4 -_0807EA7C: .4byte 0x000006d2 -_0807EA80: .4byte 0x000006e4 - thumb_func_end sub_807EA18 - - thumb_func_start snowflakes_progress2 -snowflakes_progress2: @ 807EA84 - push {r4,r5,lr} - ldr r0, _0807EAB4 @ =gUnknown_08396FC4 - ldr r5, [r0] - ldr r0, _0807EAB8 @ =0x000006cc - adds r4, r5, r0 - ldrh r0, [r4] - cmp r0, 0 - bne _0807EAAC - bl snowflakes_progress - lsls r0, 24 - cmp r0, 0 - bne _0807EAAC - ldr r0, _0807EABC @ =0x000006d2 - adds r1, r5, r0 - movs r0, 0x1 - strb r0, [r1] - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] -_0807EAAC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807EAB4: .4byte gUnknown_08396FC4 -_0807EAB8: .4byte 0x000006cc -_0807EABC: .4byte 0x000006d2 - thumb_func_end snowflakes_progress2 - thumb_func_start sub_807EAC0 sub_807EAC0: @ 807EAC0 push {r4,lr} diff --git a/src/field_weather.c b/src/field_weather.c index fff4ac673..0027f2bc1 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -26,7 +26,8 @@ struct Struct2000000 struct Weather { - u8 filler_000[0x1F4]; + struct Sprite *unknown_0[24]; + struct Sprite *unknown_60[0x65]; // snowflakes? struct Sprite *unknown_1F4[3]; u8 unknown_200[2][32]; u8 filler_240[0x460-0x240]; @@ -61,9 +62,12 @@ struct Weather u8 unknown_6DC; u8 unknown_6DD; u8 unknown_6DE; - u8 filler_6DF[5]; + u8 filler_6DF[1]; + u16 unknown_6E0; + u8 filler_6E2[2]; u8 unknown_6E4; - u8 filler_6E5[0xF]; + u8 unknown_6E5; + u8 filler_6E6[0xE]; u8 unknown_6F4[6]; u8 unknown_6FA; u8 unknown_6FB; @@ -113,6 +117,8 @@ extern const struct SpriteTemplate gSpriteTemplate_839A9F0; extern const u16 gUnknown_08397108[]; //extern const s16 gUnknown_0839A9C8[][2]; extern const struct Coords16 gUnknown_0839A9C8[]; +extern const struct SpriteSheet gUnknown_0839AACC; +extern const struct SpriteTemplate gSpriteTemplate_839AAA4; const u8 DroughtPaletteData_0[] = INCBIN_U8("graphics/weather/drought0.bin.lz"); const u8 DroughtPaletteData_1[] = INCBIN_U8("graphics/weather/drought1.bin.lz"); @@ -1437,7 +1443,8 @@ bool8 sub_807E460(void) return FALSE; } -extern const struct Coords16 gUnknown_0839AAC4[]; +//extern const struct Coords16 gUnknown_0839AAC4[]; +extern const u16 gUnknown_0839AAC4[][2]; //extern const struct Coords16 gUnknown_0839AABC[]; extern const s16 gUnknown_0839AABC[][2]; @@ -1452,7 +1459,8 @@ void sub_807E4EC(struct Sprite *sprite) sprite->data1 = 361; randVal = sprite->data1 * 1103515245 + 12345; sprite->data1 = ((randVal & 0x7FFF0000) >> 16) % 600; - r6 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC].x; + + r6 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][0]; r4 = sprite->data1 % 30; sprite->data2 = r4 * 8; // useless assignment @@ -1468,8 +1476,204 @@ void sub_807E4EC(struct Sprite *sprite) sprite->data2 -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0] * r6; sprite->data3 -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1] * r6; + StartSpriteAnim(sprite, 0); sprite->data4 = 0; sprite->coordOffsetEnabled = FALSE; sprite->data0 = r6; } + +void sub_807E5C0(struct Sprite *sprite) +{ + if (sprite->data4 == 0) + { + sprite->data2 += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0]; + sprite->data3 += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1]; + sprite->pos1.x = sprite->data2 >> 4; + sprite->pos1.y = sprite->data3 >> 4; + + if (sprite->data5 != 0 + && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248) + && sprite->pos1.y >= -16 && sprite->pos1.y <= 176) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + + sprite->data0--; + if (sprite->data0 == 0) + { + StartSpriteAnim(sprite, gUnknown_08396FC4->unknown_6DC + 1); + sprite->data4 = 1; + sprite->pos1.x -= gSpriteCoordOffsetX; + sprite->pos1.y -= gSpriteCoordOffsetY; + sprite->coordOffsetEnabled = TRUE; + } + } + else if (sprite->animEnded) + { + sprite->invisible = TRUE; + sub_807E4EC(sprite); + } +} + +void sub_807E6C4(struct Sprite *sprite) +{ + if (sprite->data0 == 0) + { + sub_807E4EC(sprite); + sprite->callback = sub_807E5C0; + } + else + { + sprite->data0--; + } +} + +void sub_807E6F0(struct Sprite *sprite, u16 b) +{ + u16 r8 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][0]; + u16 r6 = b / (gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][1] + r8); + u16 r4 = b % (gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][1] + r8); + + while (--r6 != 0xFFFF) + sub_807E4EC(sprite); + if (r4 < r8) + { + while (--r4 != 0xFFFF) + sub_807E5C0(sprite); + sprite->data6 = 0; + } + else + { + sprite->data0 = r4 - r8; + sprite->invisible = TRUE; + sprite->data6 = 1; + } +} + +void sub_807E7A4(void) +{ + LoadSpriteSheet(&gUnknown_0839AACC); +} + +extern const struct Coords16 gUnknown_0839AA08[]; + +bool8 sub_807E7B4(void) +{ + u8 r7; + u8 spriteId; + + if (gUnknown_08396FC4->unknown_6DA == 24) + return FALSE; + + r7 = gUnknown_08396FC4->unknown_6DA; + spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AAA4, + gUnknown_0839AA08[r7].x, gUnknown_0839AA08[r7].y, 78); + if (spriteId != 64) + { + gSprites[spriteId].data5 = 0; + gSprites[spriteId].data1 = r7 * 145; + while (gSprites[spriteId].data1 >= 600) + gSprites[spriteId].data1 -= 600; + sub_807E4EC(&gSprites[spriteId]); + sub_807E6F0(&gSprites[spriteId], r7 * 9); + gSprites[spriteId].invisible = TRUE; + gUnknown_08396FC4->unknown_0[r7] = &gSprites[spriteId]; + } + else + { + gUnknown_08396FC4->unknown_0[r7] = NULL; + } + + if (++gUnknown_08396FC4->unknown_6DA == 24) + { + u16 i; + + for (i = 0; i < 24; i++) + { + if (gUnknown_08396FC4->unknown_0[i] != NULL) + { + if (gUnknown_08396FC4->unknown_0[i]->data6 == 0) + gUnknown_08396FC4->unknown_0[i]->callback = sub_807E5C0; + else + gUnknown_08396FC4->unknown_0[i]->callback = sub_807E6C4; + } + } + return FALSE; + } + return TRUE; +} + +bool8 sub_807E8E8(void) +{ + if (gUnknown_08396FC4->unknown_6D8 == gUnknown_08396FC4->unknown_6D9) + return FALSE; + + if (++gUnknown_08396FC4->unknown_6D6 > gUnknown_08396FC4->unknown_6DB) + { + gUnknown_08396FC4->unknown_6D6 = 0; + if (gUnknown_08396FC4->unknown_6D8 < gUnknown_08396FC4->unknown_6D9) + { + gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8++]->data5 = 1; + } + else + { + gUnknown_08396FC4->unknown_6D8--; + gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8]->data5 = 0; + gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8]->invisible = TRUE; + } + } + return TRUE; +} + +void sub_807E974(void) +{ + u16 i; + + for (i = 0; i < gUnknown_08396FC4->unknown_6DA; i++) + { + if (gUnknown_08396FC4->unknown_0[i] != NULL) + DestroySprite(gUnknown_08396FC4->unknown_0[i]); + } + gUnknown_08396FC4->unknown_6DA = 0; + FreeSpriteTilesByTag(0x1206); +} + +void sub_807E9C8(void) +{ + gUnknown_08396FC4->unknown_6CC = 0; + gUnknown_08396FC4->unknown_6D2 = 0; + gUnknown_08396FC4->unknown_6C1 = 3; + gUnknown_08396FC4->unknown_6C2 = 20; + gUnknown_08396FC4->unknown_6E5 = 16; + gUnknown_08396FC4->unknown_6E0 = 0; +} + +void snowflakes_progress2(void); +void sub_807ED48(struct Sprite *); + +void sub_807EA18(void) +{ + sub_807E9C8(); + while (gUnknown_08396FC4->unknown_6D2 == 0) + { + u16 i; + + snowflakes_progress2(); + for (i = 0; i < gUnknown_08396FC4->unknown_6E4; i++) + { + sub_807ED48(gUnknown_08396FC4->unknown_60[i]); + } + } +} + +u8 snowflakes_progress(void); + +void snowflakes_progress2(void) +{ + if (gUnknown_08396FC4->unknown_6CC == 0 && snowflakes_progress() == 0) + { + gUnknown_08396FC4->unknown_6D2 = 1; + gUnknown_08396FC4->unknown_6CC++; + } +} |