summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Hall <camthesaxman@users.noreply.github.com>2017-01-07 02:54:16 -0500
committerYamaArashi <YamaArashi@users.noreply.github.com>2017-01-06 23:54:16 -0800
commitc4c79da09ad63c9c5fc02023ebdff6489a7a4a74 (patch)
treeff407e512fc4fe2fa28b04c4f2a0cd2f9da18c04
parent8c4b69e1d0978eccd554edd4a5538398543dda59 (diff)
finish decompiling intro.c (#169)
* finish decompiling * remove intro.s
-rw-r--r--asm/intro.s896
-rw-r--r--include/asm.inc.h21
-rw-r--r--ld_script.txt1
-rw-r--r--src/intro.c301
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);
+}