diff options
-rw-r--r-- | asm/intro.s | 794 | ||||
-rw-r--r-- | src/intro.c | 272 | ||||
-rw-r--r-- | sym_ewram.txt | 3 |
3 files changed, 266 insertions, 803 deletions
diff --git a/asm/intro.s b/asm/intro.s index 854a30a76..d5ebd1f99 100644 --- a/asm/intro.s +++ b/asm/intro.s @@ -5,800 +5,6 @@ .text - thumb_func_start sub_80EDDF0 -sub_80EDDF0: @ 80EDDF0 - push {lr} - ldr r0, _080EDE00 @ =sub_80EDE04 - movs r1, 0x1 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080EDE00: .4byte sub_80EDE04 - thumb_func_end sub_80EDDF0 - - thumb_func_start sub_80EDE04 -sub_80EDE04: @ 80EDE04 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r0, 2 - add r0, r9 - lsls r0, 3 - ldr r1, _080EDEB0 @ =gTasks+0x8 - adds r0, r1 - mov r8, r0 - ldrh r1, [r0, 0x4] - adds r1, 0x1 - strh r1, [r0, 0x4] - ldrh r0, [r0, 0x6] - adds r0, 0x1 - mov r2, r8 - strh r0, [r2, 0x6] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0x6 - ble _080EDECA - movs r0, 0 - strh r0, [r2, 0x4] - ldrb r6, [r2] - ldr r0, _080EDEB4 @ =gUnknown_840BC84 - ldr r1, _080EDEB8 @ =gUnknown_840BC08 - lsls r6, 2 - adds r6, r1 - movs r3, 0 - ldrsh r1, [r6, r3] - movs r3, 0x2 - ldrsh r2, [r6, r3] - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r5, _080EDEBC @ =gSprites - adds r7, r4, r5 - adds r0, r7, 0 - movs r1, 0x1 - bl StartSpriteAnim - adds r5, 0x1C - adds r4, r5 - ldr r0, _080EDEC0 @ =sub_80EE40C - str r0, [r4] - ldrh r0, [r6, 0x2] - lsls r0, 4 - strh r0, [r7, 0x30] - movs r0, 0x78 - strh r0, [r7, 0x32] - mov r1, r8 - ldrh r0, [r1, 0x2] - strh r0, [r7, 0x34] - lsls r0, 16 - cmp r0, 0 - bge _080EDE88 - movs r0, 0x1 - strh r0, [r7, 0x34] -_080EDE88: - mov r2, r8 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x8 - bls _080EDECA - ldrh r0, [r2, 0x2] - adds r0, 0x1 - strh r0, [r2, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080EDEC4 - mov r0, r9 - bl DestroyTask - b _080EDECA - .align 2, 0 -_080EDEB0: .4byte gTasks+0x8 -_080EDEB4: .4byte gUnknown_840BC84 -_080EDEB8: .4byte gUnknown_840BC08 -_080EDEBC: .4byte gSprites -_080EDEC0: .4byte sub_80EE40C -_080EDEC4: - movs r0, 0 - mov r3, r8 - strh r0, [r3] -_080EDECA: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80EDE04 - - thumb_func_start sub_80EDED8 -sub_80EDED8: @ 80EDED8 - push {lr} - ldr r0, _080EDEE8 @ =sub_80EDEEC - movs r1, 0x2 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080EDEE8: .4byte sub_80EDEEC - thumb_func_end sub_80EDED8 - - thumb_func_start sub_80EDEEC -sub_80EDEEC: @ 80EDEEC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080EDF5C @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080EDF44 - ldrh r1, [r4, 0x2] - ldrb r2, [r4, 0x2] - adds r0, r1, 0x4 - strh r0, [r4, 0x2] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x8 - bls _080EDF1A - subs r0, r1, 0x5 - strh r0, [r4, 0x2] -_080EDF1A: - ldr r0, _080EDF60 @ =gUnknown_840BCBC - ldr r1, _080EDF64 @ =gUnknown_840BC08 - lsls r2, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - movs r3, 0x3 - bl CreateSprite - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - ble _080EDF44 - adds r0, r5, 0 - bl DestroyTask -_080EDF44: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - ble _080EDF56 - movs r0, 0 - strh r0, [r4] -_080EDF56: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EDF5C: .4byte gTasks+0x8 -_080EDF60: .4byte gUnknown_840BCBC -_080EDF64: .4byte gUnknown_840BC08 - thumb_func_end sub_80EDEEC - - thumb_func_start sub_80EDF68 -sub_80EDF68: @ 80EDF68 - push {lr} - ldr r0, _080EDF8C @ =gUnknown_840BCDC - movs r1, 0x78 - movs r2, 0x46 - movs r3, 0x4 - bl CreateSprite - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080EDF90 @ =gSprites - adds r0, r1 - pop {r1} - bx r1 - .align 2, 0 -_080EDF8C: .4byte gUnknown_840BCDC -_080EDF90: .4byte gSprites - thumb_func_end sub_80EDF68 - - thumb_func_start sub_80EDF94 -sub_80EDF94: @ 80EDF94 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0 - strb r0, [r4, 0x6] - ldr r0, _080EDFD0 @ =sub_80EE024 - movs r1, 0x4 - bl CreateTask - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - adds r0, r5, 0 - movs r1, 0x5 - adds r2, r4, 0 - bl SetWordTaskArg - ldr r0, _080EDFD4 @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r0 - movs r0, 0x40 - strh r0, [r4, 0xE] - movs r0, 0 - bl GetBgX - strh r0, [r4, 0x10] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EDFD0: .4byte sub_80EE024 -_080EDFD4: .4byte gTasks - thumb_func_end sub_80EDF94 - - thumb_func_start sub_80EDFD8 -sub_80EDFD8: @ 80EDFD8 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - mov r8, r3 - lsls r4, 15 - movs r0, 0xF8 - lsls r0, 9 - adds r4, r0 - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0 - mov r1, r8 - movs r2, 0 - bl ChangeBgX - lsls r5, 8 - movs r0, 0 - adds r1, r5, 0 - movs r2, 0x2 - bl ChangeBgX - lsls r6, 8 - movs r0, 0 - adds r1, r6, 0 - movs r2, 0x2 - bl ChangeBgY - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80EDFD8 - - thumb_func_start sub_80EE024 -sub_80EE024: @ 80EE024 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080EE048 @ =gTasks+0x8 - adds r5, r0, r1 - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0x5 - bhi _080EE11C - lsls r0, 2 - ldr r1, _080EE04C @ =_080EE050 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080EE048: .4byte gTasks+0x8 -_080EE04C: .4byte _080EE050 - .align 2, 0 -_080EE050: - .4byte _080EE068 - .4byte _080EE07A - .4byte _080EE094 - .4byte _080EE0BC - .4byte _080EE0EE - .4byte _080EE114 -_080EE068: - movs r0, 0x2 - strh r0, [r5, 0xE] - movs r0, 0 - strh r0, [r5, 0x2] - movs r0, 0x6 - strh r0, [r5, 0x10] - movs r0, 0x20 - strh r0, [r5, 0x12] - b _080EE10C -_080EE07A: - ldrh r0, [r5, 0x6] - subs r0, 0x2 - strh r0, [r5, 0x6] - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - ble _080EE11C - movs r0, 0 - strh r0, [r5, 0x2] - b _080EE10C -_080EE094: - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xE - bne _080EE0AE - adds r0, r2, 0 - movs r1, 0x5 - bl GetWordTaskArg - movs r1, 0x1 - strb r1, [r0, 0x6] -_080EE0AE: - movs r2, 0x2 - ldrsh r0, [r5, r2] - cmp r0, 0xF - ble _080EE11C - movs r0, 0 - strh r0, [r5, 0x2] - b _080EE10C -_080EE0BC: - ldrh r0, [r5, 0x6] - adds r0, 0x8 - strh r0, [r5, 0x6] - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080EE0E0 - bl sub_80EE160 - movs r0, 0x20 - strh r0, [r5, 0x10] - movs r0, 0x30 - strh r0, [r5, 0x12] - movs r0, 0x3 - strh r0, [r5, 0xE] -_080EE0E0: - movs r3, 0x2 - ldrsh r0, [r5, r3] - cmp r0, 0x7 - ble _080EE11C - movs r0, 0 - strh r0, [r5, 0x2] - b _080EE10C -_080EE0EE: - ldrh r0, [r5, 0x6] - subs r0, 0x8 - strh r0, [r5, 0x6] - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _080EE11C - movs r1, 0 - strh r1, [r5, 0xE] - movs r0, 0x40 - strh r0, [r5, 0x6] - strh r1, [r5, 0x2] -_080EE10C: - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _080EE11C -_080EE114: - adds r0, r2, 0 - bl DestroyTask - b _080EE156 -_080EE11C: - movs r4, 0x6 - ldrsh r3, [r5, r4] - ldr r4, _080EE15C @ =gSineTable - adds r0, r3, 0 - adds r0, 0x40 - lsls r0, 1 - adds r0, r4 - movs r2, 0 - ldrsh r1, [r0, r2] - movs r2, 0x12 - ldrsh r0, [r5, r2] - muls r1, r0 - asrs r1, 8 - negs r1, r1 - movs r0, 0x10 - ldrsh r2, [r5, r0] - lsls r3, 1 - adds r3, r4 - movs r4, 0 - ldrsh r0, [r3, r4] - muls r0, r2 - asrs r0, 8 - subs r2, r0 - movs r3, 0xE - ldrsh r0, [r5, r3] - movs r4, 0x8 - ldrsh r3, [r5, r4] - bl sub_80EDFD8 -_080EE156: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EE15C: .4byte gSineTable - thumb_func_end sub_80EE024 - - thumb_func_start sub_80EE160 -sub_80EE160: @ 80EE160 - push {r4,lr} - ldr r4, _080EE1BC @ =gUnknown_840BE8C - adds r0, r4, 0 - movs r1, 0x84 - movs r2, 0x4E - movs r3, 0x6 - bl CreateSprite - adds r0, r4, 0 - movs r1, 0x84 - movs r2, 0x76 - movs r3, 0x6 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _080EE1B4 - ldr r0, _080EE1C0 @ =gSprites - lsls r4, r1, 4 - adds r4, r1 - lsls r4, 2 - adds r4, r0 - ldrb r2, [r4, 0x1] - movs r1, 0x3F - adds r0, r1, 0 - ands r0, r2 - movs r2, 0x40 - orrs r0, r2 - strb r0, [r4, 0x1] - ldrb r0, [r4, 0x3] - ands r1, r0 - movs r0, 0x80 - orrs r1, r0 - strb r1, [r4, 0x3] - adds r0, r4, 0 - bl sub_80EDAD8 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim -_080EE1B4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EE1BC: .4byte gUnknown_840BE8C -_080EE1C0: .4byte gSprites - thumb_func_end sub_80EE160 - - thumb_func_start sub_80EE1C4 -sub_80EE1C4: @ 80EE1C4 - push {lr} - adds r3, r0, 0 - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - ldrb r2, [r0] - 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 - mov r1, r12 - strb r0, [r1] - adds r0, r3, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080EE1FA - adds r0, r3, 0 - bl DestroySprite -_080EE1FA: - pop {r0} - bx r0 - thumb_func_end sub_80EE1C4 - - thumb_func_start sub_80EE200 -sub_80EE200: @ 80EE200 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080EE220 @ =gTasks+0x8 - adds r1, r0, r1 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _080EE224 - cmp r0, 0x1 - beq _080EE232 - b _080EE28A - .align 2, 0 -_080EE220: .4byte gTasks+0x8 -_080EE224: - movs r3, 0x80 - lsls r3, 3 - adds r0, r3, 0 - strh r0, [r1, 0x2] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_080EE232: - ldrh r0, [r1, 0x4] - adds r0, 0x1 - strh r0, [r1, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x27 - ble _080EE250 - ldrh r2, [r1, 0x2] - movs r3, 0x2 - ldrsh r0, [r1, r3] - cmp r0, 0x10 - ble _080EE250 - adds r0, r2, 0 - subs r0, 0x10 - strh r0, [r1, 0x2] -_080EE250: - movs r0, 0x2 - ldrsh r1, [r1, r0] - movs r0, 0 - movs r2, 0x1 - bl ChangeBgX - ldr r5, _080EE290 @ =gUnknown_203AB30 - str r0, [r5] - ldr r1, _080EE294 @ =0x00007fff - cmp r0, r1 - bls _080EE270 - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl ClearGpuRegBits -_080EE270: - ldr r1, [r5] - ldr r0, _080EE298 @ =0x0000eeff - cmp r1, r0 - bls _080EE28A - movs r1, 0xEF - lsls r1, 8 - movs r0, 0 - movs r2, 0 - bl ChangeBgX - adds r0, r4, 0 - bl DestroyTask -_080EE28A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EE290: .4byte gUnknown_203AB30 -_080EE294: .4byte 0x00007fff -_080EE298: .4byte 0x0000eeff - thumb_func_end sub_80EE200 - - thumb_func_start sub_80EE29C -sub_80EE29C: @ 80EE29C - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - ldrh r2, [r5, 0x2E] - ldrh r0, [r5, 0x32] - subs r2, r0 - strh r2, [r5, 0x2E] - ldrh r1, [r5, 0x34] - ldrh r0, [r5, 0x30] - adds r1, r0 - strh r1, [r5, 0x30] - ldrh r0, [r5, 0x36] - adds r0, 0x30 - strh r0, [r5, 0x36] - lsls r2, 16 - asrs r2, 20 - strh r2, [r5, 0x20] - lsls r1, 16 - asrs r1, 20 - strh r1, [r5, 0x22] - ldr r1, _080EE340 @ =gSineTable - lsls r0, 16 - asrs r0, 20 - adds r0, 0x40 - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 21 - strh r0, [r5, 0x26] - ldrh r0, [r5, 0x38] - adds r0, 0x1 - strh r0, [r5, 0x38] - movs r1, 0x38 - ldrsh r0, [r5, r1] - ldr r1, _080EE344 @ =gUnknown_203AB16 - ldrh r1, [r1] - bl __modsi3 - cmp r0, 0 - beq _080EE324 - adds r4, r5, 0 - adds r4, 0x3A - adds r0, r4, 0 - mov r1, sp - bl LoadWordFromTwoHalfwords - ldr r1, [sp] - ldr r0, _080EE348 @ =0x41c64e6d - muls r1, r0 - ldr r3, _080EE34C @ =0x00006073 - adds r1, r3 - str r1, [sp] - adds r0, r4, 0 - bl StoreWordInTwoHalfwords - ldr r2, [sp] - lsrs r2, 16 - str r2, [sp] - movs r1, 0x20 - ldrsh r0, [r5, r1] - ldrh r1, [r5, 0x26] - ldrh r3, [r5, 0x22] - adds r1, r3 - lsls r1, 16 - asrs r1, 16 - bl sub_80EDD28 -_080EE324: - movs r0, 0x20 - ldrsh r1, [r5, r0] - movs r0, 0x8 - negs r0, r0 - cmp r1, r0 - bge _080EE336 - adds r0, r5, 0 - bl DestroySprite -_080EE336: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EE340: .4byte gSineTable -_080EE344: .4byte gUnknown_203AB16 -_080EE348: .4byte 0x41c64e6d -_080EE34C: .4byte 0x00006073 - thumb_func_end sub_80EE29C - - thumb_func_start sub_80EE350 -sub_80EE350: @ 80EE350 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x32] - ldrh r1, [r4, 0x2E] - adds r0, r1 - strh r0, [r4, 0x2E] - ldrh r2, [r4, 0x34] - ldrh r1, [r4, 0x30] - adds r0, r2, r1 - strh r0, [r4, 0x30] - ldrh r1, [r4, 0x36] - adds r1, 0x1 - strh r1, [r4, 0x36] - ldrh r0, [r4, 0x38] - adds r0, r1 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - ldrh r0, [r4, 0x2E] - ldr r1, _080EE3F8 @ =gUnknown_203AB22 - ldrh r1, [r1] - asrs r0, r1 - strh r0, [r4, 0x20] - movs r1, 0x30 - ldrsh r0, [r4, r1] - ldr r1, _080EE3FC @ =gUnknown_203AB24 - ldrh r1, [r1] - asrs r0, r1 - strh r0, [r4, 0x22] - ldr r1, _080EE400 @ =gUnknown_203AB1C - ldrh r0, [r1] - cmp r0, 0 - beq _080EE3A4 - lsls r0, r2, 16 - cmp r0, 0 - bge _080EE3A4 - movs r2, 0x38 - ldrsh r0, [r4, r2] - ldrh r1, [r1] - asrs r0, r1 - strh r0, [r4, 0x26] -_080EE3A4: - movs r0, 0x3C - ldrsh r1, [r4, r0] - ldr r0, _080EE404 @ =gUnknown_203AB18 - ldrh r0, [r0] - cmp r1, r0 - ble _080EE3DC - adds r3, r4, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsrs r1, r2, 2 - movs r0, 0x1 - eors r1, r0 - ands r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - movs r2, 0x3C - ldrsh r1, [r4, r2] - ldr r0, _080EE408 @ =gUnknown_203AB1A - ldrh r0, [r0] - cmp r1, r0 - ble _080EE3DC - adds r0, r4, 0 - bl DestroySprite -_080EE3DC: - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x26 - ldrsh r1, [r4, r2] - adds r0, r1 - cmp r0, 0xA0 - bls _080EE3F0 - adds r0, r4, 0 - bl DestroySprite -_080EE3F0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EE3F8: .4byte gUnknown_203AB22 -_080EE3FC: .4byte gUnknown_203AB24 -_080EE400: .4byte gUnknown_203AB1C -_080EE404: .4byte gUnknown_203AB18 -_080EE408: .4byte gUnknown_203AB1A - thumb_func_end sub_80EE350 - thumb_func_start sub_80EE40C sub_80EE40C: @ 80EE40C push {r4,lr} diff --git a/src/intro.c b/src/intro.c index 555c5a12c..79a1afba8 100644 --- a/src/intro.c +++ b/src/intro.c @@ -17,6 +17,7 @@ #include "title_screen.h" #include "decompress.h" #include "util.h" +#include "trig.h" #include "constants/songs.h" struct IntroSequenceData @@ -65,6 +66,7 @@ EWRAM_DATA u16 gUnknown_203AB26 = 0; EWRAM_DATA u32 gUnknown_203AB28 = 0; EWRAM_DATA s16 gUnknown_203AB2C = 0; EWRAM_DATA u16 gUnknown_203AB2E = 0; +EWRAM_DATA u32 gUnknown_203AB30 = 0; void sub_80EC870(void); void sub_80EC9D4(void); @@ -99,13 +101,18 @@ void sub_80EDBAC(struct IntroSequenceData * ptr); void sub_80EDBE8(struct IntroSequenceData * ptr); void sub_80EDC40(void); void sub_80EDDF0(void); +void sub_80EDE04(u8 taskId); void sub_80EDED8(void); +void sub_80EDEEC(u8 taskId); struct Sprite * sub_80EDF68(void); void sub_80EDF94(struct IntroSequenceData * ptr); +void sub_80EE024(u8 taskId); +void sub_80EE160(void); void sub_80EE1C4(struct Sprite * sprite); void sub_80EE200(u8 taskId); void sub_80EE29C(struct Sprite * sprite); void sub_80EE350(struct Sprite * sprite); +void sub_80EE40C(struct Sprite * sprite); void sub_80EE4DC(struct Sprite * sprite); void sub_80EE4F8(struct IntroSequenceData * ptr); void sub_80EE528(struct Sprite * sprite, u16 a1, u16 a2, u16 a3); @@ -219,7 +226,7 @@ const struct SpritePalette gUnknown_840BBE8[] = { {0} }; -const s16 gUnknown_840BC08[][2] = { +const struct Coords16 gUnknown_840BC08[] = { {0x0048, 0x0050}, {0x0088, 0x004a}, {0x00a8, 0x0050}, @@ -441,6 +448,11 @@ const struct CompressedSpriteSheet gUnknown_840BEDC[] = { {gUnknown_840BAE0, 0x0200, 11} }; +// POTENTIAL UB +// This array is passed to LoadSpritePalettes in sub_80EEBE4. +// LoadSpritePalettes uses a {0} entry to signal end of array. +// Because such an entry is absent in this case, the function +// continues reading into the next .rodata section. const struct SpritePalette gUnknown_840BF14[] = { {gUnknown_8405DA4, 6}, {gUnknown_84096AC, 7}, @@ -1413,13 +1425,12 @@ void sub_80EDB70(struct IntroSequenceData * this) void nullsub_83(struct Sprite * sprite) { - } void sub_80EDBAC(struct IntroSequenceData * this) { int i; - + for (i = 0; i < 4; i++) { StartSpriteAffineAnim(this->field_0028[i], 1); @@ -1453,7 +1464,7 @@ void sub_80EDC40(void) { int i; u8 spriteId; - + for (i = 0; i < NELEMS(gUnknown_840BBC0); i++) { LoadCompressedSpriteSheet(&gUnknown_840BBC0[i]); @@ -1471,7 +1482,7 @@ void sub_80EDC40(void) gUnknown_203AB22 = 0x05; gUnknown_203AB24 = 0x05; if (gUnknown_203AB28 == 0) - gUnknown_203AB28 = 0x151B9245; + gUnknown_203AB28 = 354128453; spriteId = CreateSprite(&gUnknown_840BC6C, 0xF8, 0x37, 0); if (spriteId != MAX_SPRITES) { @@ -1483,7 +1494,7 @@ void sub_80EDC40(void) } } -void sub_80EDD28(s16 x, s16 y, s16 a2) +void sub_80EDD28(s16 x, s16 y, u16 a2) { u8 spriteId; s16 r4 = (a2 & gUnknown_203AB12) + 2; @@ -1505,3 +1516,252 @@ void sub_80EDD28(s16 x, s16 y, s16 a2) } } } + +void sub_80EDDF0(void) +{ + CreateTask(sub_80EDE04, 1); +} + +void sub_80EDE04(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u8 r6; + u8 spriteId; + + data[2]++, data[3]++; + if (data[2] > 6) + { + data[2] = 0; + r6 = data[0]; + spriteId = CreateSprite(&gUnknown_840BC84, gUnknown_840BC08[r6].x, gUnknown_840BC08[r6].y, 2); + StartSpriteAnim(&gSprites[spriteId], 1); + gSprites[spriteId].callback = sub_80EE40C; + gSprites[spriteId].data[1] = gUnknown_840BC08[r6].y << 4; + gSprites[spriteId].data[2] = 120; + gSprites[spriteId].data[3] = data[1]; + if (gSprites[spriteId].data[3] < 0) + gSprites[spriteId].data[3] = 1; + data[0]++; + if (data[0] < 0 || data[0] > 8) + { + data[1]++; + if (data[1] > 1) + DestroyTask(taskId); + else + data[0] = 0; + } + } +} + +void sub_80EDED8(void) +{ + CreateTask(sub_80EDEEC, 2); +} + +void sub_80EDEEC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u8 r2; + + if (data[0] == 0) + { + r2 = data[1]; + data[1] += 4; + if (data[1] < 0 || data[1] > 8) + data[1] -= 9; + CreateSprite(&gUnknown_840BCBC, gUnknown_840BC08[r2].x, gUnknown_840BC08[r2].y, 3); + data[2]++; + if (data[2] > 8) + DestroyTask(taskId); + } + data[0]++; + if (data[0] > 9) + data[0] = 0; +} + +struct Sprite * sub_80EDF68(void) +{ + u8 spriteId = CreateSprite(&gUnknown_840BCDC, 120, 70, 4); + return &gSprites[spriteId]; +} + +void sub_80EDF94(struct IntroSequenceData * this) +{ + u8 taskId; + this->field_0006 = 0; + taskId = CreateTask(sub_80EE024, 4); + SetWordTaskArg(taskId, 5, (uintptr_t)this); + gTasks[taskId].data[3] = 64; + gTasks[taskId].data[4] = GetBgX(0); +} + +void sub_80EDFD8(int a, int b, int c, int d) +{ + ChangeBgY(0, (a << 15) + 0x1F000, 0); + ChangeBgX(0, d, 0); + ChangeBgX(0, b << 8, 2); + ChangeBgY(0, c << 8, 2); +} + +void sub_80EE024(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + int b, c; + int angle; + switch (data[0]) + { + case 0: + data[7] = 2; + data[1] = 0; + data[8] = 6; + data[9] = 32; + data[0]++; + break; + case 1: + data[3] -= 2; + data[1]++; + if (data[1] > 15) + { + data[1] = 0; + data[0]++; + } + break; + case 2: + data[1]++; + if (data[1] == 14) + ((struct IntroSequenceData *)GetWordTaskArg(taskId, 5))->field_0006 = 1; + if (data[1] > 15) + { + data[1] = 0; + data[0]++; + } + break; + case 3: + data[3] += 8; + data[1]++; + if (data[1] == 4) + { + sub_80EE160(); + data[8] = 32; + data[9] = 48; + data[7] = 3; + } + if (data[1] > 7) + { + data[1] = 0; + data[0]++; + } + break; + case 4: + data[3] -= 8; + data[1]++; + if (data[1] > 3) + { + data[7] = 0; + data[3] = 64; + data[1] = 0; + data[0]++; + } + break; + case 5: + DestroyTask(taskId); + return; + } + angle = data[3]; + b = -((gSineTable[angle + 0x40] * data[9]) >> 8); + c = data[8] - ((gSineTable[angle] * data[8]) >> 8); + sub_80EDFD8(data[7], b, c, data[4]); +} + +void sub_80EE160(void) +{ + u8 spriteId; + + spriteId = CreateSprite(&gUnknown_840BE8C, 132, 78, 6); + spriteId = CreateSprite(&gUnknown_840BE8C, 132, 118, 6); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].oam.shape = ST_OAM_H_RECTANGLE; + gSprites[spriteId].oam.size = ST_OAM_SIZE_2; + sub_80EDAD8(&gSprites[spriteId]); + StartSpriteAnim(&gSprites[spriteId], 1); + } +} + +void sub_80EE1C4(struct Sprite * sprite) +{ + sprite->invisible ^= TRUE; + if (sprite->animEnded) + DestroySprite(sprite); +} + +void sub_80EE200(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + data[1] = 0x400; + data[0]++; + // fallthrough + case 1: + data[2]++; + if (data[2] > 39 && data[1] > 16) + data[1] -= 16; + gUnknown_203AB30 = ChangeBgX(0, data[1], 1); + if (gUnknown_203AB30 >= 0x8000) + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + if (gUnknown_203AB30 >= 0xEF00) + { + ChangeBgX(0, 0xEF00, 0); + DestroyTask(taskId); + } + break; + } +} + +void sub_80EE29C(struct Sprite * sprite) +{ + u32 v; + sprite->data[0] -= sprite->data[2]; + sprite->data[1] += sprite->data[3]; + sprite->data[4] += 48; + sprite->pos1.x = sprite->data[0] >> 4; + sprite->pos1.y = sprite->data[1] >> 4; + sprite->pos2.y = gSineTable[(sprite->data[4] >> 4) + 0x40] >> 5; + sprite->data[5]++; + if (sprite->data[5] % gUnknown_203AB16) + { + LoadWordFromTwoHalfwords(&sprite->data[6], &v); + v = v * 1103515245 + 24691; + StoreWordInTwoHalfwords(&sprite->data[6], v); + v >>= 16; + sub_80EDD28(sprite->pos1.x, sprite->pos1.y + sprite->pos2.y, v); + } + if (sprite->pos1.x < -8) + DestroySprite(sprite); +} + +void sub_80EE350(struct Sprite * sprite) +{ + u32 v; + + sprite->data[0] += sprite->data[2]; + sprite->data[1] += sprite->data[3]; + sprite->data[4]++; + sprite->data[5] += sprite->data[4]; + sprite->data[7]++; + 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; + if (sprite->data[7] > gUnknown_203AB18) + { + sprite->invisible = sprite->invisible ? FALSE : TRUE; + if (sprite->data[7] > gUnknown_203AB1A) + DestroySprite(sprite); + } + if (sprite->pos1.y + sprite->pos2.y < 0 || sprite->pos1.y + sprite->pos2.y > 160) + DestroySprite(sprite); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 58be99913..63b75ae19 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1115,9 +1115,6 @@ gUnknown_203AAC6: @ 203AAC6 .include "src/intro.o" .align 2 -gUnknown_203AB30: @ 203AB30 - .space 0x4 - gUnknown_203AB34: @ 203AB34 .space 0x4 |