diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-04 21:16:08 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-04 21:16:08 -0400 |
commit | a1f10189b67e39a6ff1eac39686e83282e7c16d3 (patch) | |
tree | 05a505aacb31dfd49d138c7a8d91baf54d21e47e | |
parent | b3b439fd8ab05eed4be632e2f265b79f1ce2173e (diff) |
Finish decomp of intro
-rw-r--r-- | asm/intro.s | 685 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/intro.c | 252 |
3 files changed, 250 insertions, 688 deletions
diff --git a/asm/intro.s b/asm/intro.s deleted file mode 100644 index 275119991..000000000 --- a/asm/intro.s +++ /dev/null @@ -1,685 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80EE704 -sub_80EE704: @ 80EE704 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080EE740 - cmp r0, 0x1 - bgt _080EE71A - cmp r0, 0 - beq _080EE726 - b _080EE846 -_080EE71A: - cmp r0, 0x2 - beq _080EE7C4 - cmp r0, 0x3 - bne _080EE724 - b _080EE824 -_080EE724: - b _080EE846 -_080EE726: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bgt _080EE736 - b _080EE846 -_080EE736: - adds r0, r4, 0 - movs r1, 0x3 - bl StartSpriteAnim - b _080EE818 -_080EE740: - ldrh r2, [r4, 0x3C] - ldrh r3, [r4, 0x32] - adds r1, r2, r3 - movs r5, 0 - strh r1, [r4, 0x32] - ldrh r0, [r4, 0x34] - adds r0, 0x8 - strh r0, [r4, 0x34] - lsls r1, 16 - asrs r1, 20 - strh r1, [r4, 0x24] - ldr r1, _080EE7B0 @ =gSineTable - movs r3, 0x34 - ldrsh r0, [r4, r3] - lsls r0, 1 - adds r0, r1 - movs r3, 0 - ldrsh r1, [r0, r3] - ldr r0, _080EE7B4 @ =gUnknown_203AB04 - ldrh r0, [r0] - muls r0, r1 - ldr r1, _080EE7B8 @ =gUnknown_203AB08 - ldrh r1, [r1] - asrs r0, r1 - negs r0, r0 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - movs r0, 0x38 - ldrsh r1, [r4, r0] - ldr r0, _080EE7BC @ =gUnknown_203AB06 - ldrh r0, [r0] - cmp r1, r0 - ble _080EE78C - strh r5, [r4, 0x38] - subs r0, r2, 0x1 - strh r0, [r4, 0x3C] -_080EE78C: - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - ble _080EE846 - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAnim - strh r5, [r4, 0x30] - ldr r0, _080EE7C0 @ =0x00004757 - strh r0, [r4, 0x3A] - movs r0, 0x1C - strh r0, [r4, 0x3C] - b _080EE818 - .align 2, 0 -_080EE7B0: .4byte gSineTable -_080EE7B4: .4byte gUnknown_203AB04 -_080EE7B8: .4byte gUnknown_203AB08 -_080EE7BC: .4byte gUnknown_203AB06 -_080EE7C0: .4byte 0x00004757 -_080EE7C4: - ldrh r0, [r4, 0x3C] - ldrh r1, [r4, 0x32] - adds r0, r1 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r1, r0, 20 - strh r1, [r4, 0x24] - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - ble _080EE804 - ldrh r0, [r4, 0x20] - adds r0, r1 - lsls r0, 16 - asrs r0, 16 - ldrh r1, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - movs r3, 0x3A - ldrsh r2, [r4, r3] - bl sub_80EE864 - movs r0, 0x3A - ldrsh r1, [r4, r0] - ldr r0, _080EE820 @ =0x41c64e6d - muls r0, r1 - strh r0, [r4, 0x3A] -_080EE804: - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0xC - ble _080EE846 - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim - movs r0, 0 - strh r0, [r4, 0x30] -_080EE818: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080EE846 - .align 2, 0 -_080EE820: .4byte 0x41c64e6d -_080EE824: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _080EE846 - ldr r0, _080EE84C @ =gUnknown_203AB0A - ldrh r1, [r0] - ldrh r2, [r4, 0x24] - negs r2, r2 - lsls r2, 16 - asrs r2, 16 - adds r0, r4, 0 - movs r3, 0x4 - bl sub_80EE970 -_080EE846: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EE84C: .4byte gUnknown_203AB0A - thumb_func_end sub_80EE704 - - thumb_func_start sub_80EE850 -sub_80EE850: @ 80EE850 - ldr r0, [r0, 0x18] - ldr r1, [r0, 0x1C] - ldr r0, _080EE860 @ =SpriteCallbackDummy - eors r1, r0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - bx lr - .align 2, 0 -_080EE860: .4byte SpriteCallbackDummy - thumb_func_end sub_80EE850 - - thumb_func_start sub_80EE864 -sub_80EE864: @ 80EE864 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r2, 16 - lsrs r5, r2, 16 - movs r6, 0 - lsls r0, 16 - ldr r2, _080EE8D4 @ =0xffea0000 - adds r2, r0 - mov r8, r2 - lsls r1, 16 - movs r0, 0xC0 - lsls r0, 13 - adds r7, r1, r0 -_080EE880: - ldr r0, _080EE8D8 @ =gUnknown_840BEC4 - mov r2, r8 - asrs r1, r2, 16 - asrs r2, r7, 16 - movs r3, 0xA - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _080EE8C4 - ldr r0, _080EE8DC @ =gSprites - lsls r4, r1, 4 - adds r4, r1 - lsls r4, 2 - adds r4, r0 - lsls r5, 16 - asrs r5, 16 - adds r0, r5, 0 - movs r1, 0xD - bl __modsi3 - adds r0, 0x8 - strh r0, [r4, 0x34] - adds r0, r5, 0 - movs r1, 0x3 - bl __modsi3 - strh r0, [r4, 0x36] - strh r6, [r4, 0x3C] - ldr r0, _080EE8E0 @ =0x41c64e6d - muls r0, r5 - lsls r0, 16 - lsrs r5, r0, 16 -_080EE8C4: - adds r6, 0x1 - cmp r6, 0x1 - ble _080EE880 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080EE8D4: .4byte 0xffea0000 -_080EE8D8: .4byte gUnknown_840BEC4 -_080EE8DC: .4byte gSprites -_080EE8E0: .4byte 0x41c64e6d - thumb_func_end sub_80EE864 - - thumb_func_start sub_80EE8E4 -sub_80EE8E4: @ 80EE8E4 - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r5, 0 - adds r4, 0x2E - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _080EE8FA - cmp r0, 0x1 - beq _080EE90C - b _080EE93E -_080EE8FA: - ldrh r0, [r5, 0x20] - lsls r0, 4 - strh r0, [r4, 0x2] - ldrh r0, [r5, 0x22] - lsls r0, 4 - strh r0, [r4, 0x4] - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] -_080EE90C: - ldrh r1, [r4, 0x2] - ldrh r0, [r4, 0x6] - subs r1, r0 - strh r1, [r4, 0x2] - ldrh r0, [r4, 0x8] - ldrh r2, [r4, 0x4] - adds r0, r2 - strh r0, [r4, 0x4] - lsls r1, 16 - asrs r1, 20 - strh r1, [r5, 0x20] - ldrh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 20 - strh r0, [r5, 0x22] - adds r0, r5, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080EE93E - adds r0, r5, 0 - bl DestroySprite -_080EE93E: - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080EE96A - movs r0, 0 - strh r0, [r4, 0xE] - adds r3, r5, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_080EE96A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80EE8E4 - - thumb_func_start sub_80EE970 -sub_80EE970: @ 80EE970 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r4, r0, 0 - adds r5, r1, 0 - adds r0, r2, 0 - adds r6, r3, 0 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 24 - lsrs r6, 24 - movs r1, 0 - mov r8, r1 - mov r1, r8 - strh r1, [r4, 0x2E] - strh r5, [r4, 0x30] - ldrh r1, [r4, 0x24] - lsls r1, 4 - strh r1, [r4, 0x32] - lsls r0, 16 - asrs r0, 12 - adds r1, r5, 0 - bl __divsi3 - strh r0, [r4, 0x34] - mov r0, r8 - strh r0, [r4, 0x36] - movs r0, 0x80 - lsls r0, 4 - adds r1, r5, 0 - bl __divsi3 - strh r0, [r4, 0x38] - mov r1, r8 - strh r1, [r4, 0x3A] - strh r6, [r4, 0x3C] - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAnim - ldr r0, _080EE9D0 @ =sub_80EE9D4 - str r0, [r4, 0x1C] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080EE9D0: .4byte sub_80EE9D4 - thumb_func_end sub_80EE970 - - thumb_func_start sub_80EE9D4 -sub_80EE9D4: @ 80EE9D4 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x2E - ldrsh r5, [r4, r0] - cmp r5, 0x1 - beq _080EEA08 - cmp r5, 0x1 - bgt _080EE9EA - cmp r5, 0 - beq _080EE9F0 - b _080EEA88 -_080EE9EA: - cmp r5, 0x2 - beq _080EEA6E - b _080EEA88 -_080EE9F0: - ldrh r0, [r4, 0x3A] - adds r0, 0x1 - strh r0, [r4, 0x3A] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _080EEA88 - adds r0, r4, 0 - movs r1, 0x3 - bl StartSpriteAnim - b _080EEA64 -_080EEA08: - ldrh r0, [r4, 0x30] - subs r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r5, r0, 16 - cmp r5, 0 - beq _080EEA4C - ldrh r1, [r4, 0x34] - ldrh r2, [r4, 0x32] - adds r1, r2 - strh r1, [r4, 0x32] - ldrh r0, [r4, 0x38] - ldrh r2, [r4, 0x36] - adds r0, r2 - strh r0, [r4, 0x36] - lsls r1, 16 - asrs r1, 20 - strh r1, [r4, 0x24] - ldr r1, _080EEA48 @ =gSineTable - lsls r0, 16 - asrs r0, 20 - lsls r0, 1 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0x3C - ldrsh r1, [r4, r2] - asrs r0, r1 - negs r0, r0 - strh r0, [r4, 0x26] - b _080EEA88 - .align 2, 0 -_080EEA48: .4byte gSineTable -_080EEA4C: - ldrh r0, [r4, 0x32] - lsrs r0, 4 - strh r0, [r4, 0x24] - strh r5, [r4, 0x26] - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAnim - movs r1, 0x3C - ldrsh r0, [r4, r1] - cmp r0, 0x5 - beq _080EEA84 -_080EEA64: - strh r5, [r4, 0x3A] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080EEA88 -_080EEA6E: - ldrh r0, [r4, 0x3A] - adds r0, 0x1 - strh r0, [r4, 0x3A] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _080EEA88 - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim -_080EEA84: - ldr r0, _080EEA90 @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_080EEA88: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EEA90: .4byte SpriteCallbackDummy - thumb_func_end sub_80EE9D4 - - thumb_func_start sub_80EEA94 -sub_80EEA94: @ 80EEA94 - push {r4,lr} - adds r4, r0, 0 - ldr r0, [r4, 0x18] - movs r2, 0 - strh r2, [r0, 0x2E] - ldr r0, [r4, 0x18] - strh r2, [r0, 0x30] - ldr r0, [r4, 0x18] - strh r2, [r0, 0x32] - ldr r0, [r4, 0x18] - strh r2, [r0, 0x34] - ldr r0, [r4, 0x18] - strh r2, [r0, 0x36] - ldr r0, [r4, 0x18] - strh r2, [r0, 0x38] - ldr r1, [r4, 0x18] - ldrh r0, [r1, 0x24] - ldrh r3, [r1, 0x20] - adds r0, r3 - strh r0, [r1, 0x20] - ldr r0, [r4, 0x18] - strh r2, [r0, 0x24] - ldr r1, _080EEAF4 @ =gUnknown_203AB0C - movs r0, 0x24 - strh r0, [r1] - ldr r1, _080EEAF8 @ =gUnknown_203AB06 - movs r0, 0x28 - strh r0, [r1] - ldr r1, _080EEAFC @ =gUnknown_203AB04 - movs r0, 0x3 - strh r0, [r1] - ldr r1, _080EEB00 @ =gUnknown_203AB08 - movs r0, 0x4 - strh r0, [r1] - ldr r1, [r4, 0x18] - movs r0, 0x24 - strh r0, [r1, 0x3C] - ldr r0, [r4, 0x18] - movs r1, 0x2 - bl StartSpriteAnim - ldr r1, [r4, 0x18] - ldr r0, _080EEB04 @ =sub_80EEB08 - str r0, [r1, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EEAF4: .4byte gUnknown_203AB0C -_080EEAF8: .4byte gUnknown_203AB06 -_080EEAFC: .4byte gUnknown_203AB04 -_080EEB00: .4byte gUnknown_203AB08 -_080EEB04: .4byte sub_80EEB08 - thumb_func_end sub_80EEA94 - - thumb_func_start sub_80EEB08 -sub_80EEB08: @ 80EEB08 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080EEB58 - cmp r0, 0x1 - bgt _080EEB1E - cmp r0, 0 - beq _080EEB24 - b _080EEBCE -_080EEB1E: - cmp r0, 0x2 - beq _080EEB84 - b _080EEBCE -_080EEB24: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080EEB4A - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - ands r0, r1 - cmp r0, 0 - beq _080EEB44 - ldrh r0, [r4, 0x24] - adds r0, 0x1 - b _080EEB48 -_080EEB44: - ldrh r0, [r4, 0x24] - subs r0, 0x1 -_080EEB48: - strh r0, [r4, 0x24] -_080EEB4A: - movs r3, 0x30 - ldrsh r0, [r4, r3] - cmp r0, 0x11 - ble _080EEBCE - movs r0, 0 - strh r0, [r4, 0x30] - b _080EEB78 -_080EEB58: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - movs r5, 0 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - ldr r1, _080EEB80 @ =gUnknown_203AB06 - ldrh r1, [r1] - cmp r0, r1 - blt _080EEBCE - adds r0, r4, 0 - movs r1, 0x4 - bl StartSpriteAnim - strh r5, [r4, 0x30] - strh r5, [r4, 0x32] -_080EEB78: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080EEBCE - .align 2, 0 -_080EEB80: .4byte gUnknown_203AB06 -_080EEB84: - ldrh r2, [r4, 0x3C] - ldrh r1, [r4, 0x30] - adds r0, r2, r1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 20 - negs r1, r0 - strh r1, [r4, 0x24] - ldr r1, _080EEBD4 @ =gSineTable - lsls r0, 1 - adds r0, r1 - movs r3, 0 - ldrsh r1, [r0, r3] - ldr r0, _080EEBD8 @ =gUnknown_203AB04 - ldrh r0, [r0] - muls r0, r1 - ldr r1, _080EEBDC @ =gUnknown_203AB08 - ldrh r1, [r1] - asrs r0, r1 - negs r0, r0 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0xC - ble _080EEBC0 - subs r0, r2, 0x1 - strh r0, [r4, 0x3C] -_080EEBC0: - ldrh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 20 - cmp r0, 0x3F - ble _080EEBCE - ldr r0, _080EEBE0 @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_080EEBCE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EEBD4: .4byte gSineTable -_080EEBD8: .4byte gUnknown_203AB04 -_080EEBDC: .4byte gUnknown_203AB08 -_080EEBE0: .4byte SpriteCallbackDummy - thumb_func_end sub_80EEB08 - - thumb_func_start sub_80EEBE4 -sub_80EEBE4: @ 80EEBE4 - push {r4,r5,lr} - movs r5, 0 - ldr r4, _080EEC04 @ =gUnknown_840BEDC -_080EEBEA: - adds r0, r4, 0 - bl LoadCompressedSpriteSheet - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x6 - bls _080EEBEA - ldr r0, _080EEC08 @ =gUnknown_840BF14 - bl LoadSpritePalettes - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EEC04: .4byte gUnknown_840BEDC -_080EEC08: .4byte gUnknown_840BF14 - thumb_func_end sub_80EEBE4 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 2d5b99e6c..494c35e86 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -211,7 +211,6 @@ SECTIONS { asm/battle_controller_oak.o(.text); asm/player_pc.o(.text); src/intro.o(.text); - asm/intro.o(.text); asm/battle_anim_special.o(.text); asm/hall_of_fame.o(.text); asm/credits.o(.text); diff --git a/src/intro.c b/src/intro.c index 3e0b9e498..f6ac0b8f0 100644 --- a/src/intro.c +++ b/src/intro.c @@ -124,9 +124,12 @@ void sub_80EE610(struct Sprite * sprite); void sub_80EE6A4(struct IntroSequenceData * ptr); void sub_80EE704(struct Sprite * sprite); bool8 sub_80EE850(struct IntroSequenceData * ptr); +void sub_80EE864(s16 a1, s16 a2, s16 a3); void sub_80EE8E4(struct Sprite * sprite); -void sub_80EE970(struct Sprite * sprite, s16 a1, u16 a2, u8 a3); +void sub_80EE970(struct Sprite * sprite, u16 a1, s16 a2, u8 a3); +void sub_80EE9D4(struct Sprite * sprite); void sub_80EEA94(struct IntroSequenceData * ptr); +void sub_80EEB08(struct Sprite * sprite); void sub_80EEBE4(void); extern const u32 gMultiBootProgram_PokemonColosseum_Start[]; @@ -1756,7 +1759,7 @@ void sub_80EE350(struct Sprite * sprite) sprite->data[4]++; sprite->data[5] += sprite->data[4]; sprite->data[7]++; - sprite->pos1.x = *(u16 *)&sprite->data[0] >> gUnknown_203AB22; + sprite->pos1.x = (u16)sprite->data[0] >> gUnknown_203AB22; sprite->pos1.y = sprite->data[1] >> gUnknown_203AB24; if (gUnknown_203AB1C && sprite->data[3] < 0) sprite->pos2.y = sprite->data[5] >> gUnknown_203AB1C; @@ -1925,3 +1928,248 @@ void sub_80EE6A4(struct IntroSequenceData * ptr) ptr->field_0018->data[7] = 40; ptr->field_0018->callback = sub_80EE704; } + +void sub_80EE704(struct Sprite * sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[1]++; + if (sprite->data[1] > 4) + { + StartSpriteAnim(sprite, 3); + sprite->data[0]++; + } + break; + case 1: + sprite->data[2] += sprite->data[7]; + sprite->data[3] += 8; + sprite->pos2.x = sprite->data[2] >> 4; + sprite->pos2.y = -((gSineTable[sprite->data[3]] * gUnknown_203AB04) >> gUnknown_203AB08); + sprite->data[5]++; + if (sprite->data[5] > gUnknown_203AB06) + { + sprite->data[5] = 0; + sprite->data[7]--; + } + sprite->data[4]++; + if (sprite->data[4] > 15) + { + StartSpriteAnim(sprite, 2); + sprite->data[1] = 0; + sprite->data[6] = 0x4757; + sprite->data[7] = 28; + sprite->data[0]++; + } + break; + case 2: + sprite->data[2] += sprite->data[7]; + sprite->pos2.x = sprite->data[2] >> 4; + sprite->data[1]++; + if (sprite->data[1] > 6) + { + sub_80EE864(sprite->pos1.x + sprite->pos2.x, sprite->pos1.y + sprite->pos2.y, sprite->data[6]); + sprite->data[6] *= 1103515245; + } + if (sprite->data[1] > 12) + { + StartSpriteAnim(sprite, 0); + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 3: + sprite->data[1]++; + if (sprite->data[1] > 16) + { + sub_80EE970(sprite, gUnknown_203AB0A, -sprite->pos2.x, 4); + } + break; + } +} + +bool8 sub_80EE850(struct IntroSequenceData * ptr) +{ + return ptr->field_0018->callback == SpriteCallbackDummy ? FALSE : TRUE; +} + +void sub_80EE864(s16 a1, s16 a2, s16 a3) +{ + int i; + u8 spriteId; + + for (i = 0; i < 2; i++) + { + spriteId = CreateSprite(&gUnknown_840BEC4, a1 - 22, a2 + 24, 10); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[3] = (a3 % 13) + 8; + gSprites[spriteId].data[4] = a3 % 3; + gSprites[spriteId].data[7] = i; + a3 *= 1103515245; + } + } +} + +void sub_80EE8E4(struct Sprite * sprite) +{ + s16 * data = sprite->data; + + switch (sprite->data[0]) + { + case 0: + data[1] = sprite->pos1.x << 4; + data[2] = sprite->pos1.y << 4; + sprite->data[0]++; + // fallthrough + case 1: + data[1] -= data[3]; + data[2] += data[4]; + sprite->pos1.x = data[1] >> 4; + sprite->pos1.y = data[2] >> 4; + if (sprite->animEnded) + DestroySprite(sprite); + break; + } + data[7]++; + if (data[7] > 1) + { + data[7] = 0; + sprite->invisible ^= TRUE; + } +} + +void sub_80EE970(struct Sprite * sprite, u16 a1, s16 a2, u8 a3) +{ + sprite->data[0] = 0; + sprite->data[1] = a1; + sprite->data[2] = sprite->pos2.x << 4; + sprite->data[3] = (a2 << 4) / a1; + sprite->data[4] = 0; + sprite->data[5] = 0x800 / a1; + sprite->data[6] = 0; + sprite->data[7] = a3; + StartSpriteAnim(sprite, 2); + sprite->callback = sub_80EE9D4; +} + +void sub_80EE9D4(struct Sprite * sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[6]++; + if (sprite->data[6] > 4) + { + StartSpriteAnim(sprite, 3); + sprite->data[6] = 0; + sprite->data[0]++; + } + break; + case 1: + sprite->data[1]--; + if (sprite->data[1]) + { + sprite->data[2] += sprite->data[3]; + sprite->data[4] += sprite->data[5]; + sprite->pos2.x = sprite->data[2] >> 4; + sprite->pos2.y = -(gSineTable[sprite->data[4] >> 4] >> sprite->data[7]); + } + else + { + sprite->pos2.x = (u16)sprite->data[2] >> 4; + sprite->pos2.y = 0; + StartSpriteAnim(sprite, 2); + if (sprite->data[7] == 5) + sprite->callback = SpriteCallbackDummy; + else + { + sprite->data[6] = 0; + sprite->data[0]++; + } + } + break; + case 2: + sprite->data[6]++; + if (sprite->data[6] > 4) + { + StartSpriteAnim(sprite, 0); + sprite->callback = SpriteCallbackDummy; + } + break; + } +} + +void sub_80EEA94(struct IntroSequenceData * ptr) +{ + ptr->field_0018->data[0] = 0; + ptr->field_0018->data[1] = 0; + ptr->field_0018->data[2] = 0; + ptr->field_0018->data[3] = 0; + ptr->field_0018->data[4] = 0; + ptr->field_0018->data[5] = 0; + ptr->field_0018->pos1.x += ptr->field_0018->pos2.x; + ptr->field_0018->pos2.x = 0; + gUnknown_203AB0C = 0x24; + gUnknown_203AB06 = 0x28; + gUnknown_203AB04 = 0x03; + gUnknown_203AB08 = 0x04; + ptr->field_0018->data[7] = 36; + StartSpriteAnim(ptr->field_0018, 2); + ptr->field_0018->callback = sub_80EEB08; +} + +void sub_80EEB08(struct Sprite * sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[1]++; + if (sprite->data[1] & 1) + { + sprite->data[2]++; + if (sprite->data[2] & 1) + sprite->pos2.x++; + else + sprite->pos2.x--; + } + if (sprite->data[1] > 17) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] >= gUnknown_203AB06) + { + StartSpriteAnim(sprite, 4); + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[0]++; + } + break; + case 2: + sprite->data[1] += sprite->data[7]; + sprite->pos2.x = -(sprite->data[1] >> 4); + sprite->pos2.y = -((gSineTable[sprite->data[1] >> 4] * gUnknown_203AB04) >> gUnknown_203AB08); + sprite->data[2]++; + if (sprite->data[7] > 12) + sprite->data[7]--; + if ((sprite->data[1] >> 4) > 0x3F) + sprite->callback = SpriteCallbackDummy; + break; + } +} + +void sub_80EEBE4(void) +{ + int i; + + for (i = 0; i < NELEMS(gUnknown_840BEDC); i++) + { + LoadCompressedSpriteSheet(&gUnknown_840BEDC[i]); + } + // gUnknown_840BF14 is not properly terminated, so this + // call exhibits undefined behavior. + LoadSpritePalettes(gUnknown_840BF14); +} |