diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2017-01-07 02:54:16 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-01-06 23:54:16 -0800 |
commit | c4c79da09ad63c9c5fc02023ebdff6489a7a4a74 (patch) | |
tree | ff407e512fc4fe2fa28b04c4f2a0cd2f9da18c04 | |
parent | 8c4b69e1d0978eccd554edd4a5538398543dda59 (diff) |
finish decompiling intro.c (#169)
* finish decompiling
* remove intro.s
-rw-r--r-- | asm/intro.s | 896 | ||||
-rw-r--r-- | include/asm.inc.h | 21 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/intro.c | 301 |
4 files changed, 282 insertions, 937 deletions
diff --git a/asm/intro.s b/asm/intro.s deleted file mode 100644 index 5f4e9bf79..000000000 --- a/asm/intro.s +++ /dev/null @@ -1,896 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_813E804 -sub_813E804: @ 813E804 - push {r4-r7,lr} - adds r3, r0, 0 - ldr r0, _0813E818 @ =gUnknown_0203931A - ldrh r0, [r0] - cmp r0, 0 - beq _0813E81C - adds r0, r3, 0 - bl DestroySprite - b _0813E928 - .align 2, 0 -_0813E818: .4byte gUnknown_0203931A -_0813E81C: - ldr r6, _0813E904 @ =gSprites - movs r0, 0x2E - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - adds r0, 0x3E - ldrb r0, [r0] - movs r1, 0x3E - adds r1, r3 - mov r12, r1 - movs r1, 0x4 - ands r1, r0 - mov r7, r12 - ldrb r2, [r7] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r7] - ldrh r0, [r3, 0x3C] - adds r0, 0x1 - strh r0, [r3, 0x3C] - ldrh r1, [r3, 0x34] - movs r2, 0x34 - ldrsh r0, [r3, r2] - cmp r0, 0x27 - bgt _0813E85A - adds r0, r1, 0x2 - strh r0, [r3, 0x34] -_0813E85A: - movs r7, 0x2E - ldrsh r1, [r3, r7] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrh r1, [r0, 0x24] - ldrh r0, [r0, 0x20] - adds r2, r1, r0 - ldr r4, _0813E908 @ =gSineTable - ldrh r5, [r3, 0x30] - adds r0, r5, 0 - adds r0, 0x40 - lsls r0, 24 - lsrs r0, 23 - adds r0, r4 - movs r7, 0 - ldrsh r1, [r0, r7] - movs r7, 0x34 - ldrsh r0, [r3, r7] - muls r0, r1 - cmp r0, 0 - bge _0813E88A - adds r0, 0xFF -_0813E88A: - asrs r0, 8 - adds r0, r2, r0 - strh r0, [r3, 0x20] - movs r0, 0x2E - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrh r1, [r0, 0x26] - ldrh r0, [r0, 0x22] - adds r2, r1, r0 - movs r1, 0x30 - ldrsh r0, [r3, r1] - lsls r0, 24 - lsrs r0, 23 - adds r0, r4 - movs r7, 0 - ldrsh r1, [r0, r7] - movs r7, 0x34 - ldrsh r0, [r3, r7] - muls r0, r1 - cmp r0, 0 - bge _0813E8BE - ldr r1, _0813E90C @ =0x000001ff - adds r0, r1 -_0813E8BE: - asrs r0, 9 - adds r0, r2, r0 - strh r0, [r3, 0x22] - adds r1, r5, 0x2 - strh r1, [r3, 0x30] - movs r2, 0x32 - ldrsh r0, [r3, r2] - lsls r0, 24 - lsrs r0, 23 - adds r0, r4 - movs r7, 0 - ldrsh r0, [r0, r7] - cmp r0, 0 - bge _0813E8DC - adds r0, 0x1F -_0813E8DC: - asrs r0, 5 - strh r0, [r3, 0x26] - ldrh r0, [r3, 0x32] - adds r0, 0x8 - strh r0, [r3, 0x32] - movs r0, 0xFF - ands r1, r0 - cmp r1, 0x7F - bgt _0813E910 - movs r0, 0x2E - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - adds r0, 0x43 - ldrb r0, [r0] - subs r0, 0x1 - b _0813E922 - .align 2, 0 -_0813E904: .4byte gSprites -_0813E908: .4byte gSineTable -_0813E90C: .4byte 0x000001ff -_0813E910: - movs r2, 0x2E - ldrsh r1, [r3, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - adds r0, 0x43 - ldrb r0, [r0] - adds r0, 0x1 -_0813E922: - adds r1, r3, 0 - adds r1, 0x43 - strb r0, [r1] -_0813E928: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_813E804 - - thumb_func_start sub_813E930 -sub_813E930: @ 813E930 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r4, 0 - ldr r7, _0813E978 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r5, r0, r7 -_0813E942: - movs r0, 0x20 - ldrsh r1, [r5, r0] - movs r0, 0x22 - ldrsh r2, [r5, r0] - ldr r0, _0813E97C @ =gSpriteTemplate_840B124 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _0813E968 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - strh r6, [r0, 0x2E] - lsls r1, r4, 5 - strh r1, [r0, 0x30] -_0813E968: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x7 - bls _0813E942 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813E978: .4byte gSprites -_0813E97C: .4byte gSpriteTemplate_840B124 - thumb_func_end sub_813E930 - - thumb_func_start sub_813E980 -sub_813E980: @ 813E980 - push {r4,r5,lr} - adds r3, r0, 0 - ldr r0, _0813E994 @ =gUnknown_0203931A - ldrh r0, [r0] - cmp r0, 0 - beq _0813E998 - adds r0, r3, 0 - bl DestroySprite - b _0813EA50 - .align 2, 0 -_0813E994: .4byte gUnknown_0203931A -_0813E998: - ldr r2, _0813EA58 @ =gSprites - movs r0, 0x2E - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r0, [r0] - movs r1, 0x3E - adds r1, r3 - mov r12, r1 - movs r1, 0x4 - ands r1, r0 - mov r5, r12 - ldrb r2, [r5] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5] - ldrh r0, [r3, 0x3C] - adds r0, 0x1 - strh r0, [r3, 0x3C] - ldrh r0, [r3, 0x3A] - adds r4, r0, 0 - adds r4, 0x8 - strh r4, [r3, 0x3A] - ldr r2, _0813EA5C @ =gSineTable - ldrh r0, [r3, 0x34] - adds r0, 0x40 - lsls r0, 24 - lsrs r0, 23 - adds r0, r2 - movs r5, 0 - ldrsh r1, [r0, r5] - movs r5, 0x3A - ldrsh r0, [r3, r5] - muls r0, r1 - cmp r0, 0 - bge _0813E9EC - adds r0, 0xFF -_0813E9EC: - asrs r0, 8 - ldrh r1, [r3, 0x36] - adds r0, r1 - strh r0, [r3, 0x20] - movs r5, 0x34 - ldrsh r0, [r3, r5] - lsls r0, 24 - lsrs r0, 23 - adds r0, r2 - movs r2, 0 - ldrsh r1, [r0, r2] - movs r5, 0x3A - ldrsh r0, [r3, r5] - muls r0, r1 - cmp r0, 0 - bge _0813EA0E - adds r0, 0xFF -_0813EA0E: - asrs r0, 8 - ldrh r1, [r3, 0x38] - adds r0, r1 - strh r0, [r3, 0x22] - movs r2, 0x3A - ldrsh r0, [r3, r2] - cmp r0, 0 - bge _0813EA20 - adds r0, 0xF -_0813EA20: - asrs r0, 4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x9 - bls _0813EA2C - movs r0, 0x9 -_0813EA2C: - adds r1, r0, 0 - adds r1, 0x12 - movs r0, 0x1F - ands r1, r0 - lsls r1, 1 - ldrb r2, [r3, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x3] - lsls r0, r4, 16 - asrs r0, 16 - cmp r0, 0xA0 - ble _0813EA50 - adds r0, r3, 0 - bl DestroySprite -_0813EA50: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813EA58: .4byte gSprites -_0813EA5C: .4byte gSineTable - thumb_func_end sub_813E980 - - thumb_func_start sub_813EA60 -sub_813EA60: @ 813EA60 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r5, r0, 0 - ldr r0, _0813EA7C @ =gUnknown_0203931A - ldrh r0, [r0] - cmp r0, 0 - beq _0813EA80 - adds r0, r5, 0 - bl DestroySprite - b _0813EB32 - .align 2, 0 -_0813EA7C: .4byte gUnknown_0203931A -_0813EA80: - ldrh r0, [r5, 0x3C] - adds r0, 0x1 - strh r0, [r5, 0x3C] - adds r2, r5, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _0813EB40 @ =gSprites - mov r9, r0 - movs r4, 0x2E - ldrsh r1, [r5, r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - mov r1, r9 - adds r3, r0, r1 - movs r4, 0x2E - ldrsh r1, [r3, r4] - cmp r1, 0x1 - bne _0813EB32 - ldrh r0, [r5, 0x3C] - ands r1, r0 - lsls r0, r1, 16 - asrs r6, r0, 16 - cmp r6, 0 - bne _0813EB32 - ldrh r1, [r3, 0x20] - ldrh r0, [r5, 0x30] - adds r1, r0 - lsls r1, 16 - ldrh r2, [r3, 0x22] - ldrh r4, [r5, 0x32] - adds r2, r4 - lsls r2, 16 - ldr r0, _0813EB44 @ =gSpriteTemplate_840B150 - lsrs r4, r1, 16 - mov r8, r4 - asrs r1, 16 - lsrs r7, r2, 16 - asrs r2, 16 - adds r3, 0x43 - ldrb r3, [r3] - adds r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _0813EB32 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - add r4, r9 - ldrb r0, [r4, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r4, 0x1] - ldrb r1, [r4, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - movs r1, 0x24 - orrs r0, r1 - strb r0, [r4, 0x3] - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x1 - movs r3, 0x3 - bl CalcCenterToCornerVec - ldrh r0, [r5, 0x2E] - strh r0, [r4, 0x2E] - ldr r2, _0813EB48 @ =gUnknown_0840B168 - ldrh r0, [r5, 0x3C] - lsls r0, 16 - asrs r0, 17 - movs r1, 0x7 - ands r0, r1 - adds r0, r2 - ldrb r0, [r0] - strh r0, [r4, 0x34] - mov r0, r8 - strh r0, [r4, 0x36] - strh r7, [r4, 0x38] - strh r6, [r4, 0x3A] -_0813EB32: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813EB40: .4byte gSprites -_0813EB44: .4byte gSpriteTemplate_840B150 -_0813EB48: .4byte gUnknown_0840B168 - thumb_func_end sub_813EA60 - - thumb_func_start InitIntroTorchicAttackAnim -InitIntroTorchicAttackAnim: @ 813EB4C - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0813EBB0 @ =gSpriteTemplate_840B170 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _0813EB80 - ldr r1, _0813EBB4 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - movs r1, 0 - strh r4, [r0, 0x2E] - strh r1, [r0, 0x30] - movs r1, 0x8 - strh r1, [r0, 0x32] - movs r1, 0x18 - strh r1, [r0, 0x34] -_0813EB80: - movs r4, 0 - ldr r5, _0813EBB8 @ =gUnknown_0840B188 -_0813EB84: - adds r0, r4, 0 - adds r0, 0x12 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r4, 1 - adds r1, r5 - ldrh r1, [r1] - str r1, [sp] - movs r2, 0 - movs r3, 0 - bl SetOamMatrix - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x9 - bls _0813EB84 - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813EBB0: .4byte gSpriteTemplate_840B170 -_0813EBB4: .4byte gSprites -_0813EBB8: .4byte gUnknown_0840B188 - thumb_func_end InitIntroTorchicAttackAnim - - thumb_func_start sub_813EBBC -sub_813EBBC: @ 813EBBC - push {r4,lr} - adds r3, r0, 0 - ldr r0, _0813EBD0 @ =gUnknown_0203931A - ldrh r0, [r0] - cmp r0, 0 - beq _0813EBD4 - adds r0, r3, 0 - bl DestroySprite - b _0813EC80 - .align 2, 0 -_0813EBD0: .4byte gUnknown_0203931A -_0813EBD4: - ldr r2, _0813EC88 @ =gSprites - movs r0, 0x2E - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r0, [r0] - movs r1, 0x3E - adds r1, r3 - mov r12, r1 - movs r1, 0x4 - ands r1, r0 - mov r4, r12 - ldrb r2, [r4] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4] - ldrh r0, [r3, 0x3C] - adds r0, 0x1 - strh r0, [r3, 0x3C] - ldrh r0, [r3, 0x3A] - adds r0, 0x8 - strh r0, [r3, 0x3A] - ldr r2, _0813EC8C @ =gSineTable - ldrh r0, [r3, 0x34] - adds r0, 0x40 - lsls r0, 24 - lsrs r0, 23 - adds r0, r2 - movs r4, 0 - ldrsh r1, [r0, r4] - movs r4, 0x3A - ldrsh r0, [r3, r4] - muls r0, r1 - cmp r0, 0 - bge _0813EC26 - adds r0, 0xFF -_0813EC26: - asrs r0, 8 - ldrh r1, [r3, 0x36] - adds r0, r1 - strh r0, [r3, 0x20] - movs r4, 0x34 - ldrsh r0, [r3, r4] - lsls r0, 24 - lsrs r0, 23 - adds r0, r2 - movs r4, 0 - ldrsh r1, [r0, r4] - movs r4, 0x3A - ldrsh r0, [r3, r4] - muls r0, r1 - cmp r0, 0 - bge _0813EC48 - adds r0, 0xFF -_0813EC48: - asrs r0, 8 - ldrh r4, [r3, 0x38] - adds r1, r0, r4 - strh r1, [r3, 0x22] - movs r4, 0x30 - ldrsh r0, [r3, r4] - lsls r0, 24 - lsrs r0, 23 - adds r0, r2 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, 0 - bge _0813EC64 - adds r0, 0x3F -_0813EC64: - asrs r0, 6 - strh r0, [r3, 0x26] - ldrh r0, [r3, 0x30] - adds r0, 0x10 - strh r0, [r3, 0x30] - lsls r0, r1, 16 - asrs r0, 16 - movs r4, 0x32 - ldrsh r1, [r3, r4] - cmp r0, r1 - bge _0813EC80 - adds r0, r3, 0 - bl DestroySprite -_0813EC80: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813EC88: .4byte gSprites -_0813EC8C: .4byte gSineTable - thumb_func_end sub_813EBBC - - thumb_func_start sub_813EC90 -sub_813EC90: @ 813EC90 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - adds r5, r0, 0 - ldr r0, _0813ECAC @ =gUnknown_0203931A - ldrh r0, [r0] - cmp r0, 0 - beq _0813ECB0 - adds r0, r5, 0 - bl DestroySprite - b _0813EDA0 - .align 2, 0 -_0813ECAC: .4byte gUnknown_0203931A -_0813ECB0: - ldrh r0, [r5, 0x3C] - adds r0, 0x1 - strh r0, [r5, 0x3C] - adds r2, r5, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _0813EDB0 @ =gSprites - mov r9, r0 - movs r2, 0x2E - ldrsh r1, [r5, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - mov r4, r9 - adds r3, r0, r4 - movs r0, 0x2E - ldrsh r1, [r3, r0] - cmp r1, 0x1 - bne _0813ED74 - ldrh r0, [r5, 0x3C] - ands r1, r0 - lsls r0, r1, 16 - asrs r6, r0, 16 - cmp r6, 0 - bne _0813ED66 - ldrh r1, [r3, 0x20] - ldrh r2, [r5, 0x30] - adds r1, r2 - lsls r1, 16 - ldrh r2, [r3, 0x22] - ldrh r4, [r5, 0x32] - adds r2, r4 - lsls r2, 16 - ldr r0, _0813EDB4 @ =gSpriteTemplate_840B1B0 - lsrs r4, r1, 16 - mov r8, r4 - asrs r1, 16 - lsrs r7, r2, 16 - asrs r2, 16 - adds r3, 0x43 - ldrb r3, [r3] - adds r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _0813ED66 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - add r4, r9 - ldrb r0, [r4, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r4, 0x1] - ldrb r1, [r4, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - movs r1, 0x22 - orrs r0, r1 - strb r0, [r4, 0x3] - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x1 - movs r3, 0x3 - bl CalcCenterToCornerVec - ldrh r0, [r5, 0x2E] - strh r0, [r4, 0x2E] - ldrh r0, [r5, 0x3C] - lsls r0, 16 - asrs r0, 18 - movs r1, 0x7 - ands r0, r1 - lsls r0, 5 - strh r0, [r4, 0x30] - ldrh r0, [r5, 0x34] - strh r0, [r4, 0x32] - movs r0, 0xE8 - strh r0, [r4, 0x34] - mov r0, r8 - strh r0, [r4, 0x36] - strh r7, [r4, 0x38] - strh r6, [r4, 0x3A] -_0813ED66: - ldrh r1, [r5, 0x3A] - movs r2, 0x3A - ldrsh r0, [r5, r2] - cmp r0, 0x6F - bgt _0813ED74 - adds r0, r1, 0x4 - strh r0, [r5, 0x3A] -_0813ED74: - ldr r1, _0813EDB8 @ =gSineTable - ldrh r0, [r5, 0x3A] - lsls r0, 24 - lsrs r0, 23 - adds r0, r1 - movs r4, 0 - ldrsh r0, [r0, r4] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - movs r2, 0x80 - lsls r2, 1 - adds r1, r2, 0 - subs r1, r0 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp] - movs r0, 0x11 - movs r2, 0 - movs r3, 0 - bl SetOamMatrix -_0813EDA0: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813EDB0: .4byte gSprites -_0813EDB4: .4byte gSpriteTemplate_840B1B0 -_0813EDB8: .4byte gSineTable - thumb_func_end sub_813EC90 - - thumb_func_start InitIntroMudkipAttackAnim -InitIntroMudkipAttackAnim: @ 813EDBC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0813EDF4 @ =gSpriteTemplate_840B1C8 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _0813EDEE - ldr r1, _0813EDF8 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - movs r1, 0 - strh r4, [r0, 0x2E] - strh r1, [r0, 0x30] - movs r1, 0xC - strh r1, [r0, 0x32] - movs r1, 0x18 - strh r1, [r0, 0x34] -_0813EDEE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813EDF4: .4byte gSpriteTemplate_840B1C8 -_0813EDF8: .4byte gSprites - thumb_func_end InitIntroMudkipAttackAnim - - thumb_func_start sub_813EDFC -sub_813EDFC: @ 813EDFC - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _0813EE12 - adds r4, r5, 0 - adds r4, 0x3E - cmp r0, 0x1 - beq _0813EE4A -_0813EE12: - adds r4, r5, 0 - adds r4, 0x3E - ldrb r1, [r4] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r4] - ldrb r0, [r5, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r5, 0x1] - ldrb r1, [r5, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - movs r1, 0x24 - orrs r0, r1 - strb r0, [r5, 0x3] - adds r0, r5, 0 - movs r1, 0 - movs r2, 0x3 - movs r3, 0x3 - bl CalcCenterToCornerVec - movs r0, 0 - strh r0, [r5, 0x30] - movs r0, 0x1 - strh r0, [r5, 0x2E] -_0813EE4A: - ldrh r0, [r5, 0x3C] - adds r0, 0x1 - strh r0, [r5, 0x3C] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0813EE62 - ldrb r0, [r4] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r4] - b _0813EE7A -_0813EE62: - ldrb r0, [r4] - movs r1, 0x5 - negs r1, r1 - ands r1, r0 - strb r1, [r4] - ldrh r1, [r5, 0x30] - movs r2, 0x30 - ldrsh r0, [r5, r2] - cmp r0, 0x3F - bgt _0813EE7A - adds r0, r1, 0x1 - strh r0, [r5, 0x30] -_0813EE7A: - ldr r1, _0813EEB0 @ =gSineTable - ldrh r0, [r5, 0x30] - lsls r0, 24 - lsrs r0, 23 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - movs r2, 0x80 - lsls r2, 1 - adds r1, r2, 0 - subs r1, r0 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp] - movs r0, 0x12 - movs r2, 0 - movs r3, 0 - bl SetOamMatrix - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813EEB0: .4byte gSineTable - thumb_func_end sub_813EDFC - - .align 2, 0 @ Don't pad with nop. diff --git a/include/asm.inc.h b/include/asm.inc.h index 1736751ac..3e7c5fa99 100644 --- a/include/asm.inc.h +++ b/include/asm.inc.h @@ -465,27 +465,8 @@ void sub_8134AC0(void *); // src/player_pc.o void NewGameInitPCItems(void); -// asm/intro.o -void sub_813CAF4(u8); -void intro_reset_and_hide_bgs(void); -void sub_813CCE8(u8); +// src/intro.o void sub_813CE30(u16, u16, u16, u16); -u16 sub_813CE88(u16, s16, s16, u16, u8); -u8 sub_813CFA8(u16, u16, u16, u16); -void sub_813D084(u8); -u8 CreateWaterDrop(s16, s16, u16, u16, u16, u8); -void sub_813D788(struct Sprite *); -void sub_813D880(struct Sprite *); -u8 CreateGameFreakLogo(s16, s16, u8); -void sub_813DB9C(struct Sprite *); -void sub_813DE70(struct Sprite *); -void sub_813E10C(struct Sprite *); -void sub_813E210(struct Sprite *); -void sub_813E580(u16, u16); -void sub_813E7C0(u8); -void sub_813E930(/*TODO: arg types*/); -void InitIntroTorchicAttackAnim(u8); -void InitIntroMudkipAttackAnim(/*TODO: arg types*/); // asm/braille_puzzles.o bool8 ShouldDoBrailleStrengthEffect(void); diff --git a/ld_script.txt b/ld_script.txt index bdab78507..d2fb31c6e 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -224,7 +224,6 @@ SECTIONS { src/player_pc.o(.text); asm/player_pc.o(.text); src/intro.o(.text); - asm/intro.o(.text); asm/field_region_map.o(.text); asm/battle_anim_813F0F4.o(.text); asm/hall_of_fame.o(.text); diff --git a/src/intro.c b/src/intro.c index f75fe49e2..544d8b64f 100644 --- a/src/intro.c +++ b/src/intro.c @@ -92,6 +92,13 @@ extern const struct SpriteTemplate gSpriteTemplate_840B084; extern const struct SpriteTemplate gSpriteTemplate_840B0B0; extern const struct SpriteTemplate gSpriteTemplate_840B0DC; extern const struct SpriteTemplate gSpriteTemplate_840B0F4; +extern const struct SpriteTemplate gSpriteTemplate_840B124; +extern const struct SpriteTemplate gSpriteTemplate_840B150; +extern const u8 gUnknown_0840B168[]; +extern const struct SpriteTemplate gSpriteTemplate_840B170; +extern const u16 gUnknown_0840B188[]; +extern const struct SpriteTemplate gSpriteTemplate_840B1B0; +extern const struct SpriteTemplate gSpriteTemplate_840B1C8; extern void *gUnknown_0840B5A0[]; extern const s16 gSineTable[]; @@ -114,14 +121,31 @@ static void task_intro_14(u8); static void task_intro_15(u8); static void task_intro_16(u8); static void task_intro_17(u8); -void Task_IntroPokemonBattle(u8); +static void Task_IntroPokemonBattle(u8); static void task_intro_19(u8); -void task_intro_20(u8 taskId); //should be static, but the compiler complains - -void sub_813D220(struct Sprite *sprite); -void sub_813D368(struct Sprite *sprite); -void sub_813D414(struct Sprite *sprite); -void SpriteCB_WaterDropFall(struct Sprite *sprite); +static void task_intro_20(u8); +static void intro_reset_and_hide_bgs(void); +static void sub_813CCE8(u8); +static u16 sub_813CE88(u16, s16, s16, u16, u8); +static u8 sub_813CFA8(u16, u16, u16, u16); +static void sub_813D084(u8); +void sub_813D220(struct Sprite *); +void sub_813D368(struct Sprite *); +void sub_813D414(struct Sprite *); +void SpriteCB_WaterDropFall(struct Sprite *); +static u8 CreateWaterDrop(s16, s16, u16, u16, u16, u8); +void sub_813D788(struct Sprite *); +void sub_813D880(struct Sprite *); +static u8 CreateGameFreakLogo(s16, s16, u8); +void sub_813DB9C(struct Sprite *); +void sub_813DE70(struct Sprite *); +void sub_813E10C(struct Sprite *); +void sub_813E210(struct Sprite *); +static void sub_813E580(u16, u16); +static void sub_813E7C0(u8); +static void sub_813E930(u8); +static void InitIntroTorchicAttackAnim(u8); +static void InitIntroMudkipAttackAnim(u8); static void VBlankCB_Intro(void) { @@ -601,7 +625,7 @@ static void task_intro_17(u8 taskId) gTasks[taskId].func = Task_IntroPokemonBattle; } -void Task_IntroPokemonBattle(u8 taskId) +static void Task_IntroPokemonBattle(u8 taskId) { u8 spriteId; @@ -716,7 +740,7 @@ static void task_intro_19(u8 taskId) SetMainCallback2(MainCB2_EndIntro); } -void task_intro_20(u8 taskId) +static void task_intro_20(u8 taskId) { gTasks[taskId].data[15]++; switch (gTasks[taskId].data[0]) @@ -776,7 +800,7 @@ void task_intro_20(u8 taskId) } } -void intro_reset_and_hide_bgs(void) +static void intro_reset_and_hide_bgs(void) { REG_DISPCNT = 0; REG_BG3HOFS = 0; @@ -793,7 +817,7 @@ void intro_reset_and_hide_bgs(void) } #ifdef NONMATCHING -void sub_813CCE8(u8 taskId) +static void sub_813CCE8(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -873,7 +897,7 @@ void sub_813CCE8(u8 taskId) } #else __attribute__((naked)) -void sub_813CCE8(u8 taskId) +static void sub_813CCE8(u8 taskId) { asm("\n\ .equ REG_BLDCNT, 0x4000050\n\ @@ -1070,7 +1094,7 @@ void sub_813CE30(u16 scrX, u16 scrY, u16 zoom, u16 alpha) REG_BG2Y = dest.dy; } -u16 sub_813CE88(u16 species, s16 x, s16 y, u16 d, u8 front) +static u16 sub_813CE88(u16 species, s16 x, s16 y, u16 d, u8 front) { void *pal; u8 spriteId; @@ -1088,7 +1112,7 @@ u16 sub_813CE88(u16 species, s16 x, s16 y, u16 d, u8 front) return spriteId; } -u8 sub_813CFA8(u16 a, u16 b, u16 c, u16 d) +static u8 sub_813CFA8(u16 a, u16 b, u16 c, u16 d) { u8 spriteId; @@ -1102,7 +1126,7 @@ u8 sub_813CFA8(u16 a, u16 b, u16 c, u16 d) return spriteId; } -void sub_813D084(u8 a) +static void sub_813D084(u8 a) { u16 color; @@ -1312,7 +1336,7 @@ void SpriteCB_WaterDropFall_2(struct Sprite *sprite) } } -u8 CreateWaterDrop(s16 x, s16 y, u16 c, u16 d, u16 e, u8 fallImmediately) +static u8 CreateWaterDrop(s16 x, s16 y, u16 c, u16 d, u16 e, u8 fallImmediately) { u8 spriteId; u8 oldSpriteId; @@ -1454,7 +1478,7 @@ void sub_813D908(struct Sprite *sprite) } } -u8 CreateGameFreakLogo(s16 a, s16 b, u8 c) +static u8 CreateGameFreakLogo(s16 a, s16 b, u8 c) { u8 spriteId; u16 i; @@ -2129,14 +2153,14 @@ void sub_813E4B8(struct Sprite *sprite) } } -void sub_813E580(u16 a, u16 b) +static void sub_813E580(u16 x, u16 y) { u8 i; u8 spriteId; for (i = 0; i < 8; i++) { - spriteId = CreateSprite(&gSpriteTemplate_840B0B0, a, b, 0); + spriteId = CreateSprite(&gSpriteTemplate_840B0B0, x, y, 0); gSprites[spriteId].oam.affineMode = 1; gSprites[spriteId].oam.matrixNum = 16; gSprites[spriteId].data0 = i; @@ -2208,7 +2232,7 @@ void sub_813E6C0(struct Sprite *sprite) } } -void sub_813E7C0(u8 a) +static void sub_813E7C0(u8 a) { u8 spriteId; @@ -2222,3 +2246,240 @@ void sub_813E7C0(u8 a) } } +void sub_813E804(struct Sprite *sprite) +{ + if (gUnknown_0203931A != 0) + { + DestroySprite(sprite); + } + else + { + sprite->invisible = gSprites[sprite->data0].invisible; + sprite->data7++; + if (sprite->data3 < 40) + sprite->data3 += 2; + //This useless '+ 0' is needed to make the asm match + sprite->pos1.x = gSprites[sprite->data0].pos1.x + gSprites[sprite->data0].pos2.x + gSineTable[(u8)(sprite->data1 + 64)] * sprite->data3 / 256; + sprite->pos1.y = gSprites[sprite->data0].pos1.y + gSprites[sprite->data0].pos2.y + gSineTable[(u8)(sprite->data1 + 0)] * sprite->data3 / 512; + sprite->data1 += 2; + sprite->pos2.y = gSineTable[(u8)(sprite->data2 + 0)] / 32; + sprite->data2 += 8; + if ((sprite->data1 & 0xFF) < 128) + sprite->subpriority = gSprites[sprite->data0].subpriority - 1; + else + sprite->subpriority = gSprites[sprite->data0].subpriority + 1; + } +} + +static void sub_813E930(u8 a) +{ + u8 i; + u8 spriteId; + + for (i = 0; i < 8; i++) + { + spriteId = CreateSprite(&gSpriteTemplate_840B124, gSprites[a].pos1.x, gSprites[a].pos1.y, 0); + if (spriteId != 64) + { + gSprites[spriteId].data0 = a; + gSprites[spriteId].data1 = i * 32; + } + } +} + +void sub_813E980(struct Sprite *sprite) +{ + if (gUnknown_0203931A != 0) + { + DestroySprite(sprite); + } + else + { + u8 r0; + u16 matrixNum; + + sprite->invisible = gSprites[sprite->data0].invisible; + sprite->data7++; + sprite->data6 += 8; + sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; + sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; + r0 = sprite->data6 / 16; + if (r0 > 9) + r0 = 9; + matrixNum = (r0 + 18) & 31; + sprite->oam.matrixNum = matrixNum; + if (sprite->data6 > 160) + DestroySprite(sprite); + } +} + +void sub_813EA60(struct Sprite *sprite) +{ + bool32 r6; + s16 r1, r2; + u8 spriteId; + + if (gUnknown_0203931A != 0) + { + DestroySprite(sprite); + } + else + { + sprite->data7++; + sprite->invisible = TRUE; + if (gSprites[sprite->data0].data0 == 1) + { + r6 = (sprite->data7 & 1); + if (!r6) + { + r1 = sprite->data1 + gSprites[sprite->data0].pos1.x; + r2 = sprite->data2 + gSprites[sprite->data0].pos1.y; + spriteId = CreateSprite(&gSpriteTemplate_840B150, r1, r2, gSprites[sprite->data0].subpriority + 1); + if (spriteId != 64) + { + gSprites[spriteId].oam.affineMode = 3; + gSprites[spriteId].oam.matrixNum = 18; + CalcCenterToCornerVec(&gSprites[spriteId], 0, 1, 3); + gSprites[spriteId].data0 = sprite->data0; + gSprites[spriteId].data3 = gUnknown_0840B168[(sprite->data7 >> 1) & 7]; + gSprites[spriteId].data4 = r1; + gSprites[spriteId].data5 = r2; + gSprites[spriteId].data6 = r6; + } + } + } + } +} + +static void InitIntroTorchicAttackAnim(u8 a) +{ + u8 spriteId; + u8 i; + + spriteId = CreateSprite(&gSpriteTemplate_840B170, 0, 0, 0); + if (spriteId != 64) + { + gSprites[spriteId].data0 = a; + gSprites[spriteId].data1 = 0; + gSprites[spriteId].data2 = 8; + gSprites[spriteId].data3 = 24; + } + for (i = 0; i < 10; i++) + { + SetOamMatrix(18 + i, gUnknown_0840B188[i], 0, 0, gUnknown_0840B188[i]); + } +} + +void sub_813EBBC(struct Sprite *sprite) +{ + if (gUnknown_0203931A != 0) + { + DestroySprite(sprite); + } + else + { + sprite->invisible = gSprites[sprite->data0].invisible; + sprite->data7 += 1; + sprite->data6 += 8; + sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; + sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; + sprite->pos2.y = gSineTable[(u8)(sprite->data1 + 0)] / 64; + sprite->data1 += 16; + if (sprite->pos1.y < sprite->data2) + DestroySprite(sprite); + } +} + +void sub_813EC90(struct Sprite *sprite) +{ + bool32 r6; + s16 r1, r2; + u8 spriteId; + u16 foo; + + if (gUnknown_0203931A != 0) + { + DestroySprite(sprite); + } + else + { + sprite->data7++; + sprite->invisible = TRUE; + if (gSprites[sprite->data0].data0 == 1) + { + r6 = sprite->data7 & 1; + if (!r6) + { + r1 = sprite->data1 + gSprites[sprite->data0].pos1.x; + r2 = sprite->data2 + gSprites[sprite->data0].pos1.y; + spriteId = CreateSprite(&gSpriteTemplate_840B1B0, r1, r2, gSprites[sprite->data0].subpriority + 1); + if (spriteId != 64) + { + gSprites[spriteId].oam.affineMode = 3; + gSprites[spriteId].oam.matrixNum = 17; + CalcCenterToCornerVec(&gSprites[spriteId], 0, 1, 3); + gSprites[spriteId].data0 = sprite->data0; + gSprites[spriteId].data1 = ((sprite->data7 >> 2) & 7) << 5; + gSprites[spriteId].data2 = sprite->data3; + gSprites[spriteId].data3 = 232; + gSprites[spriteId].data4 = r1; + gSprites[spriteId].data5 = r2; + gSprites[spriteId].data6 = r6; + } + } + if (sprite->data6 < 112) + sprite->data6 += 4; + } + foo = 256 - gSineTable[(u8)sprite->data6] / 2; + SetOamMatrix(17, foo, 0, 0, foo); + } +} + +static void InitIntroMudkipAttackAnim(u8 a) +{ + u8 spriteId; + + spriteId = CreateSprite(&gSpriteTemplate_840B1C8, 0, 0, 0); + if (spriteId != 64) + { + gSprites[spriteId].data0 = a; + gSprites[spriteId].data1 = 0; + gSprites[spriteId].data2 = 12; + gSprites[spriteId].data3 = 24; + } +} + +void sub_813EDFC(struct Sprite *sprite) +{ + u16 foo; + + //I'm not sure why a switch statement was used here. + //if (sprite->data0 != 1) would have been more appropriate. + switch (sprite->data0) + { + case 0: + default: + sprite->invisible = FALSE; + sprite->oam.affineMode = 3; + sprite->oam.matrixNum = 18; + CalcCenterToCornerVec(sprite, 0, 3, 3); + sprite->data1 = 0; + sprite->data0 = 1; + //fall through + case 1: + break; + } + sprite->data7++; + if (sprite->data7 & 1) + { + sprite->invisible = TRUE; + } + else + { + sprite->invisible = FALSE; + if (sprite->data1 < 64) + sprite->data1++; + } + foo = 256 - gSineTable[(u8)sprite->data1] / 2; + SetOamMatrix(18, foo, 0, 0, foo); +} |