summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-09-13 10:44:06 -0500
committerGitHub <noreply@github.com>2018-09-13 10:44:06 -0500
commit918c7ca3b5a44bc4dc14a4d3c59cc64305516cfe (patch)
tree754ea3b19bc082e94c539afcca555f4c1ee1fe11
parentd44383bf9834739c1dbdc1dfb6ae9c063f4ced27 (diff)
parent7d3f0cd7795954ca5706c927db731d5f80fdd85d (diff)
Merge pull request #681 from who-knows-who/flying
Flying
-rw-r--r--asm/flying.s2462
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle/anim/flying.c2245
3 files changed, 2143 insertions, 2565 deletions
diff --git a/asm/flying.s b/asm/flying.s
deleted file mode 100644
index 126f18206..000000000
--- a/asm/flying.s
+++ /dev/null
@@ -1,2462 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "include/macros.inc"
-
- .syntax unified
-
- .text
-
- @ flying
-
- thumb_func_start sub_80DA4D8
-sub_80DA4D8: @ 80DA4D8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- adds r5, r7, 0
- adds r5, 0x2E
- ldr r0, _080DA4F8 @ =gBattleAnimArgs
- ldrh r1, [r0, 0xE]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _080DA500
- ldr r0, _080DA4FC @ =gAnimBankAttacker
- b _080DA502
- .align 2, 0
-_080DA4F8: .4byte gBattleAnimArgs
-_080DA4FC: .4byte gAnimBankAttacker
-_080DA500:
- ldr r0, _080DA5B0 @ =gAnimBankTarget
-_080DA502:
- ldrb r6, [r0]
- adds r0, r6, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080DA518
- ldr r1, _080DA5B4 @ =gBattleAnimArgs
- ldrh r0, [r1]
- negs r0, r0
- strh r0, [r1]
-_080DA518:
- adds r0, r6, 0
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- ldr r4, _080DA5B4 @ =gBattleAnimArgs
- lsrs r0, 24
- ldrh r1, [r4]
- adds r0, r1
- strh r0, [r7, 0x20]
- adds r0, r6, 0
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- ldrh r1, [r4, 0x2]
- lsrs r0, 24
- adds r1, r0, r1
- strh r1, [r7, 0x22]
- lsls r1, 8
- strh r1, [r5, 0x8]
- ldrh r1, [r4, 0xC]
- adds r0, r1
- lsls r0, 1
- ldrh r2, [r5, 0xE]
- movs r1, 0x1
- ands r1, r2
- orrs r1, r0
- strh r1, [r5, 0xE]
- ldrb r0, [r5]
- movs r2, 0x4
- mov r8, r2
- mov r1, r8
- orrs r0, r1
- strb r0, [r5]
- ldrh r0, [r4, 0x4]
- ldrb r1, [r4, 0x4]
- strh r1, [r5, 0x2]
- lsls r0, 16
- lsrs r0, 24
- strh r0, [r5, 0xA]
- ldrh r0, [r4, 0x6]
- strh r0, [r5, 0x4]
- ldrh r0, [r4, 0x8]
- strh r0, [r5, 0x6]
- ldrh r0, [r4, 0xA]
- strh r0, [r5, 0xC]
- subs r1, 0x40
- lsls r1, 16
- lsrs r1, 16
- cmp r1, 0x7F
- bhi _080DA618
- ldr r0, _080DA5B8 @ =gMain
- ldr r2, _080DA5BC @ =0x0000043d
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080DA5C0
- adds r0, r6, 0
- bl sub_8079ED4
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- lsls r0, 2
- ldrb r2, [r7, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r7, 0x5]
- b _080DA5D8
- .align 2, 0
-_080DA5B0: .4byte gAnimBankTarget
-_080DA5B4: .4byte gBattleAnimArgs
-_080DA5B8: .4byte gMain
-_080DA5BC: .4byte 0x0000043d
-_080DA5C0:
- adds r0, r6, 0
- bl sub_8079ED4
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r7, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r7, 0x5]
-_080DA5D8:
- ldrb r1, [r5, 0xE]
- movs r4, 0x2
- negs r4, r4
- adds r0, r4, 0
- ands r0, r1
- strb r0, [r5, 0xE]
- movs r1, 0x4
- ldrsh r0, [r5, r1]
- movs r1, 0x80
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- bne _080DA678
- adds r3, r7, 0
- adds r3, 0x3F
- ldrb r2, [r3]
- lsls r0, r2, 31
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- adds r0, r4, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- lsls r0, 31
- lsrs r0, 31
- adds r1, r7, 0
- adds r1, 0x2A
- strb r0, [r1]
- ldrb r0, [r3]
- movs r1, 0x4
- b _080DA66E
-_080DA618:
- adds r0, r6, 0
- bl sub_8079ED4
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r7, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r7, 0x5]
- ldrb r0, [r5, 0xE]
- movs r4, 0x1
- orrs r0, r4
- strb r0, [r5, 0xE]
- movs r2, 0x4
- ldrsh r0, [r5, r2]
- movs r1, 0x80
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- beq _080DA678
- adds r3, r7, 0
- adds r3, 0x3F
- ldrb r2, [r3]
- lsls r1, r2, 31
- lsrs r1, 31
- movs r0, 0x1
- eors r1, r0
- ands r1, r4
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- lsls r0, 31
- lsrs r0, 31
- adds r1, r7, 0
- adds r1, 0x2A
- strb r0, [r1]
- ldrb r0, [r3]
- mov r1, r8
-_080DA66E:
- orrs r0, r1
- movs r1, 0x11
- negs r1, r1
- ands r0, r1
- strb r0, [r3]
-_080DA678:
- ldrh r1, [r5, 0x2]
- lsrs r1, 6
- lsls r1, 4
- ldrb r2, [r5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r1
- strb r0, [r5]
- ldr r3, _080DA6E4 @ =gSineTable
- ldrh r0, [r5, 0x2]
- lsls r0, 1
- adds r0, r3
- movs r2, 0
- ldrsh r1, [r0, r2]
- ldrb r0, [r5, 0xC]
- muls r0, r1
- asrs r0, 8
- strh r0, [r7, 0x24]
- ldrb r2, [r7, 0x3]
- lsls r2, 26
- lsrs r2, 27
- movs r1, 0x24
- ldrsh r0, [r7, r1]
- negs r0, r0
- asrs r0, 1
- ldrb r5, [r5, 0xA]
- adds r0, r5
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r3
- ldrh r4, [r1]
- ldr r1, _080DA6E8 @ =gOamMatrices
- lsls r2, 3
- adds r2, r1
- adds r0, 0x40
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- strh r0, [r2, 0x6]
- strh r0, [r2]
- strh r4, [r2, 0x2]
- lsls r0, r4, 16
- asrs r0, 16
- negs r0, r0
- strh r0, [r2, 0x4]
- ldr r0, _080DA6EC @ =sub_80DA6F0
- str r0, [r7, 0x1C]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080DA6E4: .4byte gSineTable
-_080DA6E8: .4byte gOamMatrices
-_080DA6EC: .4byte sub_80DA6F0
- thumb_func_end sub_80DA4D8
-
- thumb_func_start sub_80DA6F0
-sub_80DA6F0: @ 80DA6F0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r5, r0, 0
- movs r6, 0
- movs r0, 0x2E
- adds r0, r5
- mov r12, r0
- ldrb r2, [r0]
- movs r7, 0x1
- movs r1, 0x1
- mov r9, r1
- mov r0, r9
- ands r0, r2
- cmp r0, 0
- beq _080DA730
- mov r3, r12
- ldrb r0, [r3, 0x1]
- adds r1, r0, 0
- adds r1, 0xFF
- strb r1, [r3, 0x1]
- lsls r0, 24
- cmp r0, 0
- beq _080DA724
- b _080DAD1A
-_080DA724:
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- strb r6, [r3, 0x1]
- b _080DAD1A
-_080DA730:
- mov r4, r12
- ldrh r0, [r4, 0x2]
- lsrs r4, r0, 6
- mov r8, r0
- cmp r4, 0x1
- bne _080DA73E
- b _080DA896
-_080DA73E:
- cmp r4, 0x1
- bgt _080DA748
- cmp r4, 0
- beq _080DA756
- b _080DAC52
-_080DA748:
- cmp r4, 0x2
- bne _080DA74E
- b _080DA9C8
-_080DA74E:
- cmp r4, 0x3
- bne _080DA754
- b _080DAB0E
-_080DA754:
- b _080DAC52
-_080DA756:
- lsls r1, r2, 24
- lsrs r0, r1, 28
- cmp r0, 0x1
- bne _080DA76C
- movs r0, 0x8
- orrs r0, r2
- orrs r0, r7
- mov r1, r12
- strb r0, [r1]
- strb r6, [r1, 0x1]
- b _080DA88A
-_080DA76C:
- lsrs r0, r1, 28
- cmp r0, 0x3
- bne _080DA790
- lsls r0, r2, 30
- lsrs r0, 31
- movs r1, 0x1
- eors r0, r1
- ands r0, r7
- lsls r0, 1
- movs r1, 0x3
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- orrs r1, r7
- mov r2, r12
- strb r1, [r2]
- strb r6, [r2, 0x1]
- b _080DA88A
-_080DA790:
- movs r0, 0x8
- ands r0, r2
- cmp r0, 0
- beq _080DA88A
- adds r3, r5, 0
- adds r3, 0x3F
- ldrb r2, [r3]
- lsls r1, r2, 31
- lsrs r1, 31
- movs r4, 0x1
- eors r1, r4
- ands r1, r7
- movs r6, 0x2
- negs r6, r6
- adds r0, r6, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- lsls r0, 31
- lsrs r0, 31
- adds r1, r5, 0
- adds r1, 0x2A
- strb r0, [r1]
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- movs r1, 0x11
- negs r1, r1
- ands r0, r1
- strb r0, [r3]
- mov r3, r12
- ldrb r1, [r3]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080DA87A
- ldr r0, _080DA80C @ =gMain
- ldr r1, _080DA810 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080DA82E
- ldrb r1, [r3, 0xE]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- bne _080DA814
- ldrb r2, [r5, 0x5]
- lsls r1, r2, 28
- lsrs r1, 30
- subs r1, 0x1
- movs r0, 0x3
- ands r1, r0
- lsls r1, 2
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- b _080DA868
- .align 2, 0
-_080DA80C: .4byte gMain
-_080DA810: .4byte 0x0000043d
-_080DA814:
- ldrb r2, [r5, 0x5]
- lsls r1, r2, 28
- lsrs r1, 30
- adds r1, 0x1
- movs r0, 0x3
- ands r1, r0
- lsls r1, 2
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- b _080DA866
-_080DA82E:
- mov r0, r12
- ldrb r1, [r0, 0xE]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- bne _080DA85C
- adds r1, r5, 0
- adds r1, 0x43
- ldrb r0, [r1]
- subs r0, 0xC
- strb r0, [r1]
- mov r1, r12
- ldrb r2, [r1, 0xE]
- lsls r0, r2, 31
- lsrs r0, 31
- eors r0, r4
- ands r0, r7
- adds r1, r6, 0
- ands r1, r2
- orrs r1, r0
- mov r2, r12
- strb r1, [r2, 0xE]
- b _080DA87A
-_080DA85C:
- adds r1, r5, 0
- adds r1, 0x43
- ldrb r0, [r1]
- adds r0, 0xC
- strb r0, [r1]
-_080DA866:
- mov r3, r12
-_080DA868:
- ldrb r2, [r3, 0xE]
- lsls r0, r2, 31
- lsrs r0, 31
- eors r0, r4
- ands r0, r7
- adds r1, r6, 0
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0xE]
-_080DA87A:
- mov r4, r12
- ldrb r1, [r4]
- movs r0, 0x9
- negs r0, r0
- ands r0, r1
- strb r0, [r4]
- ldrh r0, [r4, 0x2]
- mov r8, r0
-_080DA88A:
- mov r2, r12
- ldrb r1, [r2]
- movs r0, 0xF
- ands r0, r1
- strb r0, [r2]
- b _080DAC52
-_080DA896:
- lsls r1, r2, 24
- lsrs r0, r1, 28
- cmp r0, 0
- bne _080DA8AC
- movs r0, 0x8
- orrs r0, r2
- orrs r0, r7
- mov r3, r12
- strb r0, [r3]
- strb r6, [r3, 0x1]
- b _080DA9BC
-_080DA8AC:
- lsrs r0, r1, 28
- cmp r0, 0x2
- bne _080DA8BE
- adds r0, r2, 0
- orrs r0, r7
- mov r4, r12
- strb r0, [r4]
- strb r6, [r4, 0x1]
- b _080DA9BC
-_080DA8BE:
- movs r0, 0x8
- ands r0, r2
- cmp r0, 0
- beq _080DA9BC
- adds r3, r5, 0
- adds r3, 0x3F
- ldrb r2, [r3]
- lsls r1, r2, 31
- lsrs r1, 31
- movs r4, 0x1
- eors r1, r4
- ands r1, r7
- movs r6, 0x2
- negs r6, r6
- adds r0, r6, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- lsls r0, 31
- lsrs r0, 31
- adds r1, r5, 0
- adds r1, 0x2A
- strb r0, [r1]
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- movs r1, 0x11
- negs r1, r1
- ands r0, r1
- strb r0, [r3]
- mov r0, r12
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080DA9AC
- ldr r0, _080DA940 @ =gMain
- ldr r1, _080DA944 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080DA962
- mov r2, r12
- ldrb r1, [r2, 0xE]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- bne _080DA948
- ldrb r2, [r5, 0x5]
- lsls r1, r2, 28
- lsrs r1, 30
- subs r1, 0x1
- movs r0, 0x3
- ands r1, r0
- lsls r1, 2
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- mov r3, r12
- b _080DA978
- .align 2, 0
-_080DA940: .4byte gMain
-_080DA944: .4byte 0x0000043d
-_080DA948:
- ldrb r2, [r5, 0x5]
- lsls r1, r2, 28
- lsrs r1, 30
- adds r1, 0x1
- movs r0, 0x3
- ands r1, r0
- lsls r1, 2
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- b _080DA996
-_080DA962:
- mov r3, r12
- ldrb r1, [r3, 0xE]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- bne _080DA98C
- adds r1, r5, 0
- adds r1, 0x43
- ldrb r0, [r1]
- subs r0, 0xC
- strb r0, [r1]
-_080DA978:
- ldrb r2, [r3, 0xE]
- lsls r0, r2, 31
- lsrs r0, 31
- eors r0, r4
- ands r0, r7
- adds r1, r6, 0
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0xE]
- b _080DA9AC
-_080DA98C:
- adds r1, r5, 0
- adds r1, 0x43
- ldrb r0, [r1]
- adds r0, 0xC
- strb r0, [r1]
-_080DA996:
- mov r0, r12
- ldrb r2, [r0, 0xE]
- lsls r0, r2, 31
- lsrs r0, 31
- eors r0, r4
- ands r0, r7
- adds r1, r6, 0
- ands r1, r2
- orrs r1, r0
- mov r2, r12
- strb r1, [r2, 0xE]
-_080DA9AC:
- mov r3, r12
- ldrb r1, [r3]
- movs r0, 0x9
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldrh r4, [r3, 0x2]
- mov r8, r4
-_080DA9BC:
- mov r1, r12
- ldrb r0, [r1]
- movs r1, 0xF
- ands r1, r0
- movs r0, 0x10
- b _080DAC4C
-_080DA9C8:
- lsls r1, r2, 24
- lsrs r0, r1, 28
- cmp r0, 0x3
- bne _080DA9DE
- movs r0, 0x8
- orrs r0, r2
- orrs r0, r7
- mov r3, r12
- strb r0, [r3]
- strb r6, [r3, 0x1]
- b _080DAAFE
-_080DA9DE:
- lsrs r0, r1, 28
- cmp r0, 0x1
- bne _080DA9F0
- adds r0, r2, 0
- orrs r0, r7
- mov r4, r12
- strb r0, [r4]
- strb r6, [r4, 0x1]
- b _080DAAFE
-_080DA9F0:
- movs r0, 0x8
- ands r0, r2
- cmp r0, 0
- bne _080DA9FA
- b _080DAAFE
-_080DA9FA:
- adds r3, r5, 0
- adds r3, 0x3F
- ldrb r2, [r3]
- lsls r1, r2, 31
- lsrs r1, 31
- movs r6, 0x1
- eors r1, r6
- ands r1, r7
- movs r0, 0x2
- negs r0, r0
- mov r8, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- lsls r0, 31
- lsrs r0, 31
- adds r1, r5, 0
- adds r1, 0x2A
- strb r0, [r1]
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- movs r1, 0x11
- negs r1, r1
- ands r0, r1
- strb r0, [r3]
- mov r2, r12
- ldrb r1, [r2]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080DAAEC
- ldr r0, _080DAA6C @ =gMain
- ldr r3, _080DAA70 @ =0x0000043d
- adds r0, r3
- ldrb r0, [r0]
- ands r4, r0
- cmp r4, 0
- beq _080DAAA4
- ldrb r1, [r2, 0xE]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- bne _080DAA74
- ldrb r2, [r5, 0x5]
- lsls r1, r2, 28
- lsrs r1, 30
- subs r1, 0x1
- movs r0, 0x3
- ands r1, r0
- lsls r1, 2
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- b _080DAAD8
- .align 2, 0
-_080DAA6C: .4byte gMain
-_080DAA70: .4byte 0x0000043d
-_080DAA74:
- ldrb r2, [r5, 0x5]
- lsls r1, r2, 28
- lsrs r1, 30
- adds r1, 0x1
- movs r0, 0x3
- ands r1, r0
- lsls r1, 2
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- mov r0, r12
- ldrb r2, [r0, 0xE]
- lsls r0, r2, 31
- lsrs r0, 31
- eors r0, r6
- ands r0, r7
- mov r1, r8
- ands r1, r2
- orrs r1, r0
- mov r2, r12
- strb r1, [r2, 0xE]
- b _080DAAEC
-_080DAAA4:
- mov r3, r12
- ldrb r1, [r3, 0xE]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- bne _080DAACE
- adds r1, r5, 0
- adds r1, 0x43
- ldrb r0, [r1]
- subs r0, 0xC
- strb r0, [r1]
- ldrb r2, [r3, 0xE]
- lsls r0, r2, 31
- lsrs r0, 31
- eors r0, r6
- ands r0, r7
- mov r1, r8
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0xE]
- b _080DAAEC
-_080DAACE:
- adds r1, r5, 0
- adds r1, 0x43
- ldrb r0, [r1]
- adds r0, 0xC
- strb r0, [r1]
-_080DAAD8:
- mov r4, r12
- ldrb r2, [r4, 0xE]
- lsls r0, r2, 31
- lsrs r0, 31
- eors r0, r6
- ands r0, r7
- mov r1, r8
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0xE]
-_080DAAEC:
- mov r0, r12
- ldrb r1, [r0]
- movs r0, 0x9
- negs r0, r0
- ands r0, r1
- mov r1, r12
- strb r0, [r1]
- ldrh r2, [r1, 0x2]
- mov r8, r2
-_080DAAFE:
- mov r3, r12
- ldrb r0, [r3]
- movs r1, 0xF
- ands r1, r0
- movs r0, 0x20
- orrs r1, r0
- strb r1, [r3]
- b _080DAC52
-_080DAB0E:
- lsls r1, r2, 24
- lsrs r0, r1, 28
- cmp r0, 0x2
- bne _080DAB20
- movs r0, 0x8
- orrs r0, r2
- mov r4, r12
- strb r0, [r4]
- b _080DAC42
-_080DAB20:
- lsrs r0, r1, 28
- cmp r0, 0
- bne _080DAB44
- lsls r0, r2, 30
- lsrs r0, 31
- movs r1, 0x1
- eors r0, r1
- ands r0, r7
- lsls r0, 1
- movs r1, 0x3
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- orrs r1, r7
- mov r0, r12
- strb r1, [r0]
- strb r6, [r0, 0x1]
- b _080DAC42
-_080DAB44:
- movs r0, 0x8
- ands r0, r2
- cmp r0, 0
- beq _080DAC42
- adds r3, r5, 0
- adds r3, 0x3F
- ldrb r2, [r3]
- lsls r1, r2, 31
- lsrs r1, 31
- movs r4, 0x1
- eors r1, r4
- ands r1, r7
- movs r6, 0x2
- negs r6, r6
- adds r0, r6, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- lsls r0, 31
- lsrs r0, 31
- adds r1, r5, 0
- adds r1, 0x2A
- strb r0, [r1]
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- movs r1, 0x11
- negs r1, r1
- ands r0, r1
- strb r0, [r3]
- mov r2, r12
- ldrb r1, [r2]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080DAC32
- ldr r0, _080DABC4 @ =gMain
- ldr r3, _080DABC8 @ =0x0000043d
- adds r0, r3
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080DABE6
- ldrb r1, [r2, 0xE]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- bne _080DABCC
- ldrb r2, [r5, 0x5]
- lsls r1, r2, 28
- lsrs r1, 30
- subs r1, 0x1
- movs r0, 0x3
- ands r1, r0
- lsls r1, 2
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- mov r0, r12
- ldrb r2, [r0, 0xE]
- b _080DAC00
- .align 2, 0
-_080DABC4: .4byte gMain
-_080DABC8: .4byte 0x0000043d
-_080DABCC:
- ldrb r2, [r5, 0x5]
- lsls r1, r2, 28
- lsrs r1, 30
- adds r1, 0x1
- movs r0, 0x3
- ands r1, r0
- lsls r1, 2
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- b _080DAC1E
-_080DABE6:
- mov r0, r12
- ldrb r1, [r0, 0xE]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- bne _080DAC14
- adds r1, r5, 0
- adds r1, 0x43
- ldrb r0, [r1]
- subs r0, 0xC
- strb r0, [r1]
- mov r1, r12
- ldrb r2, [r1, 0xE]
-_080DAC00:
- lsls r0, r2, 31
- lsrs r0, 31
- eors r0, r4
- ands r0, r7
- adds r1, r6, 0
- ands r1, r2
- orrs r1, r0
- mov r2, r12
- strb r1, [r2, 0xE]
- b _080DAC32
-_080DAC14:
- adds r1, r5, 0
- adds r1, 0x43
- ldrb r0, [r1]
- adds r0, 0xC
- strb r0, [r1]
-_080DAC1E:
- mov r3, r12
- ldrb r2, [r3, 0xE]
- lsls r0, r2, 31
- lsrs r0, 31
- eors r0, r4
- ands r0, r7
- adds r1, r6, 0
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0xE]
-_080DAC32:
- mov r4, r12
- ldrb r1, [r4]
- movs r0, 0x9
- negs r0, r0
- ands r0, r1
- strb r0, [r4]
- ldrh r0, [r4, 0x2]
- mov r8, r0
-_080DAC42:
- mov r1, r12
- ldrb r0, [r1]
- movs r1, 0xF
- ands r1, r0
- movs r0, 0x30
-_080DAC4C:
- orrs r1, r0
- mov r2, r12
- strb r1, [r2]
-_080DAC52:
- mov r3, r12
- ldrb r1, [r3]
- lsls r1, 30
- lsrs r1, 31
- mov r0, r12
- adds r0, 0xC
- adds r0, r1
- ldrb r1, [r0]
- ldr r3, _080DACE0 @ =gSineTable
- mov r4, r8
- lsls r0, r4, 1
- adds r0, r3
- movs r2, 0
- ldrsh r0, [r0, r2]
- muls r0, r1
- asrs r0, 8
- strh r0, [r5, 0x24]
- ldrb r2, [r5, 0x3]
- lsls r2, 26
- lsrs r2, 27
- movs r4, 0x24
- ldrsh r0, [r5, r4]
- negs r0, r0
- asrs r0, 1
- mov r1, r12
- ldrb r1, [r1, 0xA]
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r3
- ldrh r6, [r1]
- ldr r1, _080DACE4 @ =gOamMatrices
- lsls r2, 3
- adds r2, r1
- adds r0, 0x40
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- strh r0, [r2, 0x6]
- strh r0, [r2]
- strh r6, [r2, 0x2]
- lsls r0, r6, 16
- asrs r0, 16
- negs r0, r0
- strh r0, [r2, 0x4]
- mov r2, r12
- ldrh r0, [r2, 0x6]
- ldrh r3, [r2, 0x8]
- adds r0, r3
- strh r0, [r2, 0x8]
- lsls r0, 16
- lsrs r0, 24
- strh r0, [r5, 0x22]
- movs r4, 0x4
- ldrsh r0, [r2, r4]
- movs r1, 0x80
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- beq _080DACE8
- ldrh r0, [r2, 0x4]
- subs r1, 0x1
- ands r1, r0
- ldrh r0, [r2, 0x2]
- subs r0, r1
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r2, 0x2]
- b _080DACFE
- .align 2, 0
-_080DACE0: .4byte gSineTable
-_080DACE4: .4byte gOamMatrices
-_080DACE8:
- mov r1, r12
- ldrh r0, [r1, 0x4]
- ldr r1, _080DAD28 @ =0x00007fff
- ands r1, r0
- mov r2, r12
- ldrh r2, [r2, 0x2]
- adds r1, r2
- movs r0, 0xFF
- ands r1, r0
- mov r3, r12
- strh r1, [r3, 0x2]
-_080DACFE:
- movs r4, 0x22
- ldrsh r1, [r5, r4]
- movs r2, 0x26
- ldrsh r0, [r5, r2]
- adds r1, r0
- mov r3, r12
- ldrh r0, [r3, 0xE]
- lsrs r0, 1
- cmp r1, r0
- blt _080DAD1A
- movs r0, 0
- strh r0, [r5, 0x2E]
- ldr r0, _080DAD2C @ =sub_80DA48C
- str r0, [r5, 0x1C]
-_080DAD1A:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080DAD28: .4byte 0x00007fff
-_080DAD2C: .4byte sub_80DA48C
- thumb_func_end sub_80DA6F0
-
- thumb_func_start sub_80DAD30
-sub_80DAD30: @ 80DAD30
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, _080DAD78 @ =gAnimBankTarget
- ldrb r0, [r0]
- bl sub_8079ED4
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- ldr r5, _080DAD7C @ =gAnimBankAttacker
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x20]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x22]
- ldr r0, _080DAD80 @ =TranslateAnimSpriteToTargetMonLocation
- str r0, [r4, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DAD78: .4byte gAnimBankTarget
-_080DAD7C: .4byte gAnimBankAttacker
-_080DAD80: .4byte TranslateAnimSpriteToTargetMonLocation
- thumb_func_end sub_80DAD30
-
- thumb_func_start sub_80DAD84
-sub_80DAD84: @ 80DAD84
- push {r4-r7,lr}
- adds r4, r0, 0
- ldr r5, _080DADCC @ =gBattleAnimArgs
- ldrh r0, [r5]
- strh r0, [r4, 0x30]
- ldrh r0, [r5, 0x2]
- strh r0, [r4, 0x32]
- ldrh r0, [r5, 0x4]
- strh r0, [r4, 0x34]
- ldr r0, _080DADD0 @ =gMain
- ldr r1, _080DADD4 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080DAE44
- ldr r0, _080DADD8 @ =gBanksBySide
- ldr r1, _080DADDC @ =gAnimBankTarget
- ldrb r2, [r1]
- adds r0, r2, r0
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080DADE0
- adds r0, r2, 0
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r5, [r5, 0x6]
- adds r0, r5
- b _080DADEE
- .align 2, 0
-_080DADCC: .4byte gBattleAnimArgs
-_080DADD0: .4byte gMain
-_080DADD4: .4byte 0x0000043d
-_080DADD8: .4byte gBanksBySide
-_080DADDC: .4byte gAnimBankTarget
-_080DADE0:
- adds r0, r2, 0
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x28
-_080DADEE:
- strh r0, [r4, 0x3C]
- ldr r0, _080DAE1C @ =gBattleAnimArgs
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _080DAE24
- ldr r0, _080DAE20 @ =gAnimBankTarget
- ldrb r0, [r0]
- bl sub_8079ED4
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- lsls r0, 2
- ldrb r2, [r4, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x5]
- b _080DAE58
- .align 2, 0
-_080DAE1C: .4byte gBattleAnimArgs
-_080DAE20: .4byte gAnimBankTarget
-_080DAE24:
- ldr r0, _080DAE40 @ =gAnimBankTarget
- ldrb r0, [r0]
- bl sub_8079ED4
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- b _080DAE58
- .align 2, 0
-_080DAE40: .4byte gAnimBankTarget
-_080DAE44:
- ldr r0, _080DAEFC @ =gAnimBankTarget
- ldrb r0, [r0]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r5, [r5, 0x6]
- adds r0, r5
- strh r0, [r4, 0x3C]
-_080DAE58:
- ldr r5, _080DAF00 @ =gSineTable
- ldrh r3, [r4, 0x30]
- movs r1, 0xFF
- ands r1, r3
- lsls r0, r1, 1
- adds r0, r5
- ldrh r0, [r0]
- movs r2, 0
- strh r0, [r4, 0x36]
- adds r1, 0x40
- lsls r1, 1
- adds r1, r5
- ldrh r0, [r1]
- negs r0, r0
- strh r0, [r4, 0x38]
- strh r2, [r4, 0x3A]
- strh r2, [r4, 0x26]
- strh r2, [r4, 0x24]
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r6, r0, 27
- lsls r3, 16
- lsrs r3, 24
- strh r3, [r4, 0x30]
- bl Random
- lsls r0, 16
- asrs r7, r0, 16
- movs r0, 0x80
- lsls r0, 8
- ands r0, r7
- cmp r0, 0
- beq _080DAEA2
- ldrh r1, [r4, 0x30]
- movs r0, 0xFF
- subs r0, r1
- strh r0, [r4, 0x30]
-_080DAEA2:
- movs r0, 0x30
- ldrsh r1, [r4, r0]
- lsls r0, r1, 1
- adds r0, r5
- ldrh r0, [r0]
- ldr r3, _080DAF04 @ =gOamMatrices
- lsls r2, r6, 3
- adds r2, r3
- adds r1, 0x40
- lsls r1, 1
- adds r1, r5
- ldrh r1, [r1]
- strh r1, [r2, 0x6]
- strh r1, [r2]
- strh r0, [r2, 0x2]
- lsls r0, 16
- asrs r0, 16
- negs r0, r0
- strh r0, [r2, 0x4]
- adds r3, r4, 0
- adds r3, 0x3F
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- movs r1, 0x11
- negs r1, r1
- ands r0, r1
- strb r0, [r3]
- movs r0, 0x1
- ands r0, r7
- cmp r0, 0
- beq _080DAEF2
- adds r2, r4, 0
- adds r2, 0x2A
- movs r1, 0x1
- movs r0, 0x1
- strb r0, [r2]
- ldrb r0, [r3]
- orrs r0, r1
- strb r0, [r3]
-_080DAEF2:
- ldr r0, _080DAF08 @ =sub_80DAF0C
- str r0, [r4, 0x1C]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080DAEFC: .4byte gAnimBankTarget
-_080DAF00: .4byte gSineTable
-_080DAF04: .4byte gOamMatrices
-_080DAF08: .4byte sub_80DAF0C
- thumb_func_end sub_80DAD84
-
- thumb_func_start sub_80DAF0C
-sub_80DAF0C: @ 80DAF0C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- adds r4, r0, 0
- adds r5, r4, 0
- adds r5, 0x2E
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- movs r1, 0
- mov r8, r1
- movs r7, 0
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _080DAFF0
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- movs r2, 0x3A
- ldrsh r0, [r4, r2]
- muls r0, r1
- asrs r6, r0, 8
- strh r6, [r4, 0x24]
- movs r0, 0x38
- ldrsh r1, [r4, r0]
- movs r2, 0x3A
- ldrsh r0, [r4, r2]
- muls r0, r1
- asrs r3, r0, 8
- strh r3, [r4, 0x26]
- ldrh r2, [r4, 0x34]
- movs r1, 0xFF
- adds r0, r1, 0
- ands r0, r2
- ldrh r2, [r4, 0x3A]
- adds r0, r2
- strh r0, [r4, 0x3A]
- ldrh r2, [r4, 0x32]
- lsls r0, 16
- asrs r0, 16
- ands r1, r2
- cmp r0, r1
- blt _080DAFF0
- ldrh r0, [r4, 0x20]
- adds r0, r6
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x22]
- adds r0, r3
- strh r0, [r4, 0x22]
- strh r7, [r4, 0x24]
- strh r7, [r4, 0x26]
- mov r0, sp
- adds r1, r5, 0
- movs r2, 0x10
- bl memcpy
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0x10
- bl memset
- ldrh r0, [r4, 0x22]
- lsls r0, 8
- strh r0, [r5, 0x8]
- mov r0, sp
- ldrh r0, [r0, 0x6]
- lsrs r1, r0, 8
- strh r1, [r5, 0x6]
- strh r7, [r5, 0x2]
- mov r0, sp
- ldrh r0, [r0, 0x2]
- strh r0, [r5, 0xA]
- adds r0, r4, 0
- adds r0, 0x2A
- ldrb r0, [r0]
- cmp r0, 0
- beq _080DAFC0
- movs r0, 0x8
- ands r1, r0
- cmp r1, 0
- beq _080DAFB8
- ldr r0, _080DAFB4 @ =0x00008001
- b _080DAFCE
- .align 2, 0
-_080DAFB4: .4byte 0x00008001
-_080DAFB8:
- ldr r0, _080DAFBC @ =0x00008002
- b _080DAFCE
- .align 2, 0
-_080DAFBC: .4byte 0x00008002
-_080DAFC0:
- movs r0, 0x8
- ands r1, r0
- cmp r1, 0
- beq _080DAFCC
- movs r0, 0x1
- b _080DAFCE
-_080DAFCC:
- movs r0, 0x2
-_080DAFCE:
- strh r0, [r5, 0x4]
- mov r0, sp
- ldrh r0, [r0, 0x4]
- lsrs r0, 8
- strb r0, [r5, 0xC]
- subs r0, 0x2
- strb r0, [r5, 0xD]
- mov r0, sp
- ldrh r1, [r0, 0xE]
- lsls r1, 1
- ldrh r2, [r5, 0xE]
- movs r0, 0x1
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0xE]
- ldr r0, _080DAFFC @ =sub_80DA6F0
- str r0, [r4, 0x1C]
-_080DAFF0:
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080DAFFC: .4byte sub_80DA6F0
- thumb_func_end sub_80DAF0C
-
- thumb_func_start sub_80DB000
-sub_80DB000: @ 80DB000
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _080DB018 @ =gBattleAnimArgs
- movs r1, 0x4
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080DB01C
- adds r0, r5, 0
- movs r1, 0
- bl InitAnimSpritePos
- b _080DB024
- .align 2, 0
-_080DB018: .4byte gBattleAnimArgs
-_080DB01C:
- adds r0, r5, 0
- movs r1, 0
- bl sub_8078764
-_080DB024:
- ldr r4, _080DB08C @ =gBattleAnimArgs
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080DB03C
- ldr r0, _080DB090 @ =gAnimBankAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080DB052
-_080DB03C:
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- bne _080DB058
- ldr r0, _080DB094 @ =gAnimBankTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080DB058
-_080DB052:
- ldrh r0, [r5, 0x20]
- adds r0, 0x8
- strh r0, [r5, 0x20]
-_080DB058:
- ldr r4, _080DB08C @ =gBattleAnimArgs
- ldrb r1, [r4, 0x8]
- adds r0, r5, 0
- bl SeekSpriteAnim
- ldrh r0, [r5, 0x20]
- subs r0, 0x20
- strh r0, [r5, 0x20]
- ldr r0, _080DB098 @ =0x00000ccc
- strh r0, [r5, 0x30]
- ldrh r1, [r4, 0x8]
- movs r0, 0xC
- adds r2, r0, 0
- muls r2, r1
- adds r0, r2, 0
- ldrh r2, [r5, 0x24]
- adds r0, r2
- strh r0, [r5, 0x24]
- strh r1, [r5, 0x2E]
- ldrh r0, [r4, 0x6]
- strh r0, [r5, 0x3C]
- ldr r0, _080DB09C @ =sub_80DB0A0
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB08C: .4byte gBattleAnimArgs
-_080DB090: .4byte gAnimBankAttacker
-_080DB094: .4byte gAnimBankTarget
-_080DB098: .4byte 0x00000ccc
-_080DB09C: .4byte sub_80DB0A0
- thumb_func_end sub_80DB000
-
- thumb_func_start sub_80DB0A0
-sub_80DB0A0: @ 80DB0A0
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x30]
- lsls r0, 16
- asrs r0, 24
- ldrh r1, [r4, 0x24]
- adds r0, r1
- movs r1, 0
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x6
- bne _080DB0CA
- strh r1, [r4, 0x2E]
- strh r1, [r4, 0x24]
- adds r0, r4, 0
- bl StartSpriteAnim
-_080DB0CA:
- ldrh r0, [r4, 0x3C]
- subs r0, 0x1
- strh r0, [r4, 0x3C]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _080DB0E2
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080DB0E2:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80DB0A0
-
- thumb_func_start sub_80DB0E8
-sub_80DB0E8: @ 80DB0E8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- adds r6, r0, 0
- ldr r1, _080DB180 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r7, r0, r1
- ldrh r0, [r7, 0x8]
- movs r1, 0x1F
- ands r0, r1
- cmp r0, 0
- bne _080DB162
- ldr r1, _080DB184 @ =gAnimVisualTaskCount
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r1, 0x8
- ldrsh r0, [r7, r1]
- movs r5, 0xD
- negs r5, r5
- adds r1, r5, 0
- bl Sin
- ldr r4, _080DB188 @ =gBattleAnimArgs
- strh r0, [r4]
- movs r1, 0x8
- ldrsh r0, [r7, r1]
- adds r1, r5, 0
- bl Cos
- strh r0, [r4, 0x2]
- movs r0, 0x1
- strh r0, [r4, 0x4]
- movs r0, 0x3
- strh r0, [r4, 0x6]
- ldr r0, _080DB18C @ =gBattleAnimSpriteTemplate_83DB538
- mov r8, r0
- ldr r5, _080DB190 @ =gAnimBankTarget
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- mov r0, r8
- adds r1, r4, 0
- movs r3, 0x3
- bl CreateSpriteAndAnimate
-_080DB162:
- ldrh r0, [r7, 0x8]
- adds r0, 0x8
- strh r0, [r7, 0x8]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xFF
- ble _080DB176
- adds r0, r6, 0
- bl DestroyAnimVisualTask
-_080DB176:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB180: .4byte gTasks
-_080DB184: .4byte gAnimVisualTaskCount
-_080DB188: .4byte gBattleAnimArgs
-_080DB18C: .4byte gBattleAnimSpriteTemplate_83DB538
-_080DB190: .4byte gAnimBankTarget
- thumb_func_end sub_80DB0E8
-
- thumb_func_start sub_80DB194
-sub_80DB194: @ 80DB194
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080DB1A6
- cmp r0, 0x1
- beq _080DB1D8
- b _080DB1EC
-_080DB1A6:
- adds r0, r4, 0
- movs r1, 0x1
- bl InitAnimSpritePos
- movs r0, 0
- bl GetAnimBattlerSpriteId
- ldr r2, _080DB1D4 @ =gSprites
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _080DB1EC
- .align 2, 0
-_080DB1D4: .4byte gSprites
-_080DB1D8:
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080DB1EC
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080DB1EC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80DB194
-
- thumb_func_start sub_80DB1F4
-sub_80DB1F4: @ 80DB1F4
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _080DB22C
- cmp r0, 0x1
- bgt _080DB20A
- cmp r0, 0
- beq _080DB210
- b _080DB27E
-_080DB20A:
- cmp r0, 0x2
- beq _080DB240
- b _080DB27E
-_080DB210:
- ldr r0, _080DB228 @ =gAnimBankTarget
- ldrb r0, [r0]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x22]
- negs r0, r0
- subs r0, 0x20
- strh r0, [r4, 0x26]
- b _080DB238
- .align 2, 0
-_080DB228: .4byte gAnimBankTarget
-_080DB22C:
- ldrh r0, [r4, 0x26]
- adds r0, 0xA
- strh r0, [r4, 0x26]
- lsls r0, 16
- cmp r0, 0
- blt _080DB27E
-_080DB238:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _080DB27E
-_080DB240:
- ldrh r0, [r4, 0x26]
- subs r0, 0xA
- strh r0, [r4, 0x26]
- movs r2, 0x22
- ldrsh r0, [r4, r2]
- movs r2, 0x26
- ldrsh r1, [r4, r2]
- adds r0, r1
- movs r1, 0x20
- negs r1, r1
- cmp r0, r1
- bge _080DB27E
- movs r0, 0
- bl GetAnimBattlerSpriteId
- ldr r2, _080DB284 @ =gSprites
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080DB27E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB284: .4byte gSprites
- thumb_func_end sub_80DB1F4
-
- thumb_func_start sub_80DB288
-sub_80DB288: @ 80DB288
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl InitAnimSpritePos
- ldr r1, _080DB2C4 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- strh r0, [r4, 0x2E]
- ldrh r0, [r1, 0x6]
- strh r0, [r4, 0x30]
- ldr r0, _080DB2C8 @ =sub_80DB2D0
- str r0, [r4, 0x1C]
- movs r0, 0
- bl GetAnimBattlerSpriteId
- ldr r2, _080DB2CC @ =gSprites
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB2C4: .4byte gBattleAnimArgs
-_080DB2C8: .4byte sub_80DB2D0
-_080DB2CC: .4byte gSprites
- thumb_func_end sub_80DB288
-
- thumb_func_start sub_80DB2D0
-sub_80DB2D0: @ 80DB2D0
- push {lr}
- adds r2, r0, 0
- ldrh r1, [r2, 0x2E]
- movs r3, 0x2E
- ldrsh r0, [r2, r3]
- cmp r0, 0
- ble _080DB2E4
- subs r0, r1, 0x1
- strh r0, [r2, 0x2E]
- b _080DB328
-_080DB2E4:
- movs r1, 0x22
- ldrsh r0, [r2, r1]
- movs r3, 0x26
- ldrsh r1, [r2, r3]
- adds r0, r1
- movs r1, 0x20
- negs r1, r1
- cmp r0, r1
- ble _080DB30A
- ldrh r0, [r2, 0x30]
- ldrh r1, [r2, 0x32]
- adds r0, r1
- strh r0, [r2, 0x32]
- lsls r0, 16
- asrs r0, 24
- ldrh r1, [r2, 0x26]
- subs r1, r0
- strh r1, [r2, 0x26]
- b _080DB328
-_080DB30A:
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
- ldrh r0, [r2, 0x34]
- adds r1, r0, 0x1
- strh r1, [r2, 0x34]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _080DB328
- ldr r0, _080DB32C @ =sub_80DB330
- str r0, [r2, 0x1C]
-_080DB328:
- pop {r0}
- bx r0
- .align 2, 0
-_080DB32C: .4byte sub_80DB330
- thumb_func_end sub_80DB2D0
-
- thumb_func_start sub_80DB330
-sub_80DB330: @ 80DB330
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x32]
- lsls r0, 16
- asrs r0, 24
- ldrh r1, [r2, 0x26]
- adds r0, r1
- strh r0, [r2, 0x26]
- movs r3, 0x22
- ldrsh r0, [r2, r3]
- movs r3, 0x26
- ldrsh r1, [r2, r3]
- adds r0, r1
- movs r1, 0x20
- negs r1, r1
- cmp r0, r1
- ble _080DB360
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
-_080DB360:
- movs r1, 0x26
- ldrsh r0, [r2, r1]
- cmp r0, 0
- ble _080DB36E
- adds r0, r2, 0
- bl DestroyAnimSprite
-_080DB36E:
- pop {r0}
- bx r0
- thumb_func_end sub_80DB330
-
- thumb_func_start sub_80DB374
-sub_80DB374: @ 80DB374
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _080DB388
- cmp r0, 0x1
- beq _080DB3E0
- b _080DB44C
-_080DB388:
- ldr r0, _080DB398 @ =gBattleAnimArgs
- movs r2, 0
- ldrsh r0, [r0, r2]
- cmp r0, 0
- bne _080DB3A0
- ldr r4, _080DB39C @ =gAnimBankAttacker
- b _080DB3A2
- .align 2, 0
-_080DB398: .4byte gBattleAnimArgs
-_080DB39C: .4byte gAnimBankAttacker
-_080DB3A0:
- ldr r4, _080DB3DC @ =gAnimBankTarget
-_080DB3A2:
- ldrb r0, [r4]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- movs r0, 0
- movs r3, 0x80
- lsls r3, 2
- strh r3, [r5, 0x30]
- movs r2, 0x80
- lsls r2, 1
- str r0, [sp]
- adds r0, r5, 0
- movs r1, 0
- bl sub_8078FDC
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- b _080DB44C
- .align 2, 0
-_080DB3DC: .4byte gAnimBankTarget
-_080DB3E0:
- movs r1, 0x32
- ldrsh r0, [r5, r1]
- cmp r0, 0xB
- bgt _080DB3EE
- ldrh r0, [r5, 0x30]
- subs r0, 0x28
- b _080DB3F2
-_080DB3EE:
- ldrh r0, [r5, 0x30]
- adds r0, 0x28
-_080DB3F2:
- strh r0, [r5, 0x30]
- ldrh r0, [r5, 0x32]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r5, 0x32]
- movs r2, 0x80
- lsls r2, 1
- movs r0, 0x30
- ldrsh r3, [r5, r0]
- str r1, [sp]
- adds r0, r5, 0
- bl sub_8078FDC
- ldrb r1, [r5, 0x3]
- lsls r1, 26
- lsrs r1, 27
- movs r0, 0xF4
- lsls r0, 6
- ldr r2, _080DB454 @ =gOamMatrices
- lsls r1, 3
- adds r1, r2
- movs r2, 0x6
- ldrsh r1, [r1, r2]
- bl __divsi3
- adds r1, r0, 0x1
- cmp r1, 0x80
- ble _080DB42C
- movs r1, 0x80
-_080DB42C:
- movs r0, 0x40
- subs r0, r1
- lsrs r1, r0, 31
- adds r0, r1
- asrs r1, r0, 1
- strh r1, [r5, 0x26]
- movs r1, 0x32
- ldrsh r0, [r5, r1]
- cmp r0, 0x18
- bne _080DB44C
- adds r0, r5, 0
- bl sub_8079098
- adds r0, r5, 0
- bl DestroyAnimSprite
-_080DB44C:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB454: .4byte gOamMatrices
- thumb_func_end sub_80DB374
-
- thumb_func_start sub_80DB458
-sub_80DB458: @ 80DB458
- push {r4,r5,lr}
- adds r5, r0, 0
- bl Random
- ldr r4, _080DB47C @ =0x000001ff
- ands r4, r0
- bl Random
- movs r1, 0x7F
- ands r1, r0
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _080DB480
- movs r2, 0xB8
- lsls r2, 2
- adds r0, r4, r2
- b _080DB488
- .align 2, 0
-_080DB47C: .4byte 0x000001ff
-_080DB480:
- movs r2, 0xB8
- lsls r2, 2
- adds r0, r2, 0
- subs r0, r4
-_080DB488:
- strh r0, [r5, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080DB49C
- movs r2, 0xE0
- lsls r2, 2
- adds r0, r2, 0
- adds r0, r1, r0
- b _080DB4A4
-_080DB49C:
- movs r2, 0xE0
- lsls r2, 2
- adds r0, r2, 0
- subs r0, r1
-_080DB4A4:
- strh r0, [r5, 0x30]
- ldr r2, _080DB4CC @ =gBattleAnimArgs
- ldrh r0, [r2]
- strh r0, [r5, 0x32]
- lsls r0, 16
- cmp r0, 0
- beq _080DB4C0
- ldrb r0, [r5, 0x3]
- movs r1, 0x3F
- negs r1, r1
- ands r1, r0
- movs r0, 0x10
- orrs r1, r0
- strb r1, [r5, 0x3]
-_080DB4C0:
- movs r1, 0x2
- ldrsh r0, [r2, r1]
- cmp r0, 0
- bne _080DB4D4
- ldr r4, _080DB4D0 @ =gAnimBankAttacker
- b _080DB4D6
- .align 2, 0
-_080DB4CC: .4byte gBattleAnimArgs
-_080DB4D0: .4byte gAnimBankAttacker
-_080DB4D4:
- ldr r4, _080DB500 @ =gAnimBankTarget
-_080DB4D6:
- ldrb r0, [r4]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x20
- strh r0, [r5, 0x22]
- ldr r0, _080DB504 @ =sub_80DB508
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB500: .4byte gAnimBankTarget
-_080DB504: .4byte sub_80DB508
- thumb_func_end sub_80DB458
-
- thumb_func_start sub_80DB508
-sub_80DB508: @ 80DB508
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080DB520
- ldrh r3, [r4, 0x2E]
- lsls r0, r3, 16
- asrs r0, 24
- ldrh r1, [r4, 0x24]
- adds r0, r1
- b _080DB52A
-_080DB520:
- ldrh r3, [r4, 0x2E]
- lsls r1, r3, 16
- asrs r1, 24
- ldrh r0, [r4, 0x24]
- subs r0, r1
-_080DB52A:
- strh r0, [r4, 0x24]
- ldrh r2, [r4, 0x30]
- lsls r1, r2, 16
- asrs r1, 24
- ldrh r0, [r4, 0x26]
- subs r0, r1
- strh r0, [r4, 0x26]
- strh r3, [r4, 0x2E]
- adds r0, r2, 0
- subs r0, 0x20
- strh r0, [r4, 0x30]
- lsls r0, r3, 16
- cmp r0, 0
- bge _080DB54A
- movs r0, 0
- strh r0, [r4, 0x2E]
-_080DB54A:
- ldrh r0, [r4, 0x34]
- adds r0, 0x1
- strh r0, [r4, 0x34]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1F
- bne _080DB55E
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080DB55E:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80DB508
-
- thumb_func_start sub_80DB564
-sub_80DB564: @ 80DB564
- movs r1, 0
- strh r1, [r0, 0x3A]
- movs r1, 0x40
- strh r1, [r0, 0x3C]
- ldr r1, _080DB574 @ =sub_80DB578
- str r1, [r0, 0x1C]
- bx lr
- .align 2, 0
-_080DB574: .4byte sub_80DB578
- thumb_func_end sub_80DB564
-
- thumb_func_start sub_80DB578
-sub_80DB578: @ 80DB578
- push {lr}
- adds r3, r0, 0
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- cmp r1, 0
- beq _080DB58A
- cmp r1, 0x1
- beq _080DB5D8
- b _080DB5DE
-_080DB58A:
- ldrh r0, [r3, 0x30]
- adds r0, 0x1
- strh r0, [r3, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x8
- ble _080DB5DE
- strh r1, [r3, 0x30]
- movs r1, 0x3E
- adds r1, r3
- mov r12, r1
- ldrb r2, [r1]
- 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]
- ldrh r0, [r3, 0x32]
- adds r0, 0x1
- strh r0, [r3, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5
- ble _080DB5DE
- ldrb r1, [r1]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080DB5DE
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
- b _080DB5DE
-_080DB5D8:
- adds r0, r3, 0
- bl DestroyAnimSprite
-_080DB5DE:
- pop {r0}
- bx r0
- thumb_func_end sub_80DB578
-
- thumb_func_start sub_80DB5E4
-sub_80DB5E4: @ 80DB5E4
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x4
- mov r8, r0
- ldrh r4, [r0, 0x20]
- ldrh r5, [r0, 0x22]
- ldr r6, _080DB698 @ =gAnimBankAttacker
- ldrb r0, [r6]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- mov r1, r8
- strh r0, [r1, 0x20]
- ldrb r0, [r6]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- mov r2, r8
- strh r6, [r2, 0x22]
- ldrh r0, [r2, 0x20]
- mov r9, r0
- mov r1, r9
- lsls r0, r1, 4
- strh r0, [r2, 0x36]
- lsls r0, r6, 4
- strh r0, [r2, 0x38]
- lsls r4, 16
- asrs r4, 16
- movs r1, 0x20
- ldrsh r0, [r2, r1]
- subs r0, r4, r0
- lsls r0, 4
- movs r1, 0xC
- bl __divsi3
- mov r2, r8
- strh r0, [r2, 0x3A]
- lsls r5, 16
- asrs r5, 16
- movs r1, 0x22
- ldrsh r0, [r2, r1]
- subs r0, r5, r0
- lsls r0, 4
- movs r1, 0xC
- bl __divsi3
- mov r2, r8
- strh r0, [r2, 0x3C]
- mov r0, r9
- subs r4, r0
- lsls r4, 16
- asrs r4, 16
- subs r5, r6
- lsls r5, 16
- asrs r5, 16
- adds r0, r4, 0
- adds r1, r5, 0
- bl ArcTan2Neg
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 24
- adds r0, r1
- lsrs r0, 16
- movs r3, 0x80
- lsls r3, 1
- str r0, [sp]
- mov r0, r8
- movs r1, 0x1
- adds r2, r3, 0
- bl sub_8078FDC
- ldr r0, _080DB69C @ =sub_80DB6A0
- mov r2, r8
- str r0, [r2, 0x1C]
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB698: .4byte gAnimBankAttacker
-_080DB69C: .4byte sub_80DB6A0
- thumb_func_end sub_80DB5E4
-
- thumb_func_start sub_80DB6A0
-sub_80DB6A0: @ 80DB6A0
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x3A]
- ldrh r1, [r2, 0x36]
- adds r0, r1
- strh r0, [r2, 0x36]
- ldrh r1, [r2, 0x3C]
- ldrh r3, [r2, 0x38]
- adds r1, r3
- strh r1, [r2, 0x38]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r2, 0x20]
- lsls r1, 16
- asrs r3, r1, 20
- strh r3, [r2, 0x22]
- adds r0, 0x2D
- lsls r0, 16
- movs r1, 0xA5
- lsls r1, 17
- cmp r0, r1
- bhi _080DB6DA
- adds r1, r3, 0
- cmp r1, 0x9D
- bgt _080DB6DA
- movs r0, 0x2D
- negs r0, r0
- cmp r1, r0
- bge _080DB6E0
-_080DB6DA:
- adds r0, r2, 0
- bl move_anim_8074EE0
-_080DB6E0:
- pop {r0}
- bx r0
- thumb_func_end sub_80DB6A0
-
- thumb_func_start unref_sub_80DB6E4
-unref_sub_80DB6E4: @ 80DB6E4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080DB714 @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080DB71C
- movs r0, 0
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080DB718 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- b _080DB73A
- .align 2, 0
-_080DB714: .4byte gBattleAnimArgs
-_080DB718: .4byte gSprites
-_080DB71C:
- movs r0, 0
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080DB748 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
-_080DB73A:
- strb r0, [r1]
- adds r0, r4, 0
- bl DestroyAnimVisualTask
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB748: .4byte gSprites
- thumb_func_end unref_sub_80DB6E4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/ld_script.txt b/ld_script.txt
index 364cd4469..88bbd3d4c 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -283,7 +283,6 @@ SECTIONS {
src/battle/anim/fight.o(.text);
src/battle/anim/poison.o(.text);
src/battle/anim/flying.o(.text);
- asm/flying.o(.text);
src/battle/anim/psychic.o(.text);
src/battle/anim/bug.o(.text);
src/battle/anim/rock.o(.text);
diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c
index 35022db1f..5c2f3a357 100644
--- a/src/battle/anim/flying.c
+++ b/src/battle/anim/flying.c
@@ -4,11 +4,16 @@
#include "palette.h"
#include "rom_8077ABC.h"
#include "trig.h"
+#include "main.h"
+#include "random.h"
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern u8 gAnimVisualTaskCount;
+extern struct OamMatrix gOamMatrices[];
+extern u8 gBanksBySide[];
+extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB538;
void sub_80785E4(struct Sprite *sprite);
void sub_80DA034(struct Sprite *sprite);
@@ -21,16 +26,24 @@ void sub_80DA348(struct Sprite *sprite);
void sub_80DA38C(struct Sprite *sprite);
void sub_80DA4D8(struct Sprite *sprite);
void sub_80DA410(struct Sprite *sprite);
+void sub_80DA6F0(struct Sprite *sprite);
void sub_80DAD30(struct Sprite *sprite);
void sub_80DAD84(struct Sprite *sprite);
+void sub_80DAF0C(struct Sprite *sprite);
void sub_80DB000(struct Sprite *sprite);
+void sub_80DB0A0(struct Sprite *sprite);
void sub_80DB194(struct Sprite *sprite);
void sub_80DB1F4(struct Sprite *sprite);
void sub_80DB288(struct Sprite *sprite);
+void sub_80DB2D0(struct Sprite *sprite);
+void sub_80DB330(struct Sprite *sprite);
void sub_80DB374(struct Sprite *sprite);
void sub_80DB458(struct Sprite *sprite);
+void sub_80DB508(struct Sprite *sprite);
void sub_80DB564(struct Sprite *sprite);
+void sub_80DB578(struct Sprite *sprite);
void sub_80DB5E4(struct Sprite *sprite);
+void sub_80DB6A0(struct Sprite *sprite);
void sub_80DA0DC(u8 taskId);
@@ -104,7 +117,7 @@ const union AffineAnimCmd gSpriteAffineAnim_83DA3FC[] =
const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA424[] =
{
- gSpriteAffineAnim_83DA3FC,
+ gSpriteAffineAnim_83DA3FC,
};
const union AffineAnimCmd gSpriteAffineAnim_83DA428[] =
@@ -356,7 +369,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA65C =
.callback = sub_80DB5E4,
};
-void sub_80DA034(struct Sprite *sprite)
+void sub_80DA034(struct Sprite *sprite)
{
sub_8078764(sprite, 0);
sprite->pos1.y += 20;
@@ -365,18 +378,16 @@ void sub_80DA034(struct Sprite *sprite)
sub_80DA05C(sprite);
}
-void sub_80DA05C(struct Sprite *sprite)
-{
+void sub_80DA05C(struct Sprite *sprite) {
sprite->pos2.x = Sin(sprite->data[1], 0x20);
sprite->pos2.y = Cos(sprite->data[1], 0x8);
sprite->data[1] = (sprite->data[1] + 5) & 0xFF;
- if(++sprite->data[0] == 0x47)
- {
+ if (++sprite->data[0] == 0x47) {
DestroyAnimSprite(sprite);
}
}
-void sub_80DA09C(u8 taskId)
+void sub_80DA09C(u8 taskId)
{
gTasks[taskId].data[0] = gBattleAnimArgs[1];
gTasks[taskId].data[1] = gBattleAnimArgs[0];
@@ -384,113 +395,45 @@ void sub_80DA09C(u8 taskId)
gTasks[taskId].func = sub_80DA0DC;
}
-#ifdef NONMATCHING
void sub_80DA0DC(u8 taskId)
{
- gTasks[taskId].data[10]++;
- if(gTasks[taskId].data[10] == gTasks[taskId].data[1])
+ u8 data2;
+ u16 temp;
+ int i, base;
+
+ if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1])
{
- u16 r0;
- u16 r2;
- s32 i;
-
gTasks[taskId].data[10] = 0;
- r0 = gTasks[taskId].data[2];
- r2 = gPlttBufferFaded[r0 * 8];
- for(i = 0; i < 8; i++)
- gPlttBufferFaded[r0 * 8 + i + 0x107] = gPlttBufferFaded[r0 * 8 + i + 0x107];
- gTasks[taskId].data[2] = ((r0 + 0x101) * 2) + r2;
+
+ data2 = gTasks[taskId].data[2];
+ temp = gPlttBufferFaded[16 * data2 + 0x108];
+
+ i = 7;
+ base = data2 * 16;
+
+ do
+ {
+ gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i];
+ i--;
+ }
+ while (i > 0);
+
+ gPlttBufferFaded[base + 0x101] = temp;
}
- gTasks[taskId].data[0] = gTasks[taskId].data[0] * 32;
- if(gTasks[taskId].data[0] == 0)
+
+ if (--gTasks[taskId].data[0] == 0)
{
DestroyAnimVisualTask(taskId);
}
}
-#else
-NAKED
-void sub_80DA0DC(u8 taskId)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- ldr r2, _080DA15C @ =gTasks\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r3, r0, r2\n\
- ldrh r0, [r3, 0x1C]\n\
- adds r1, r0, 0x1\n\
- strh r1, [r3, 0x1C]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- movs r4, 0xA\n\
- ldrsh r1, [r3, r4]\n\
- adds r7, r2, 0\n\
- cmp r0, r1\n\
- bne _080DA13A\n\
- movs r0, 0\n\
- strh r0, [r3, 0x1C]\n\
- ldrb r0, [r3, 0xC]\n\
- ldr r2, _080DA160 @ =gPlttBufferFaded\n\
- lsls r0, 4\n\
- movs r3, 0x84\n\
- lsls r3, 1\n\
- adds r1, r0, r3\n\
- lsls r1, 1\n\
- adds r1, r2\n\
- ldrh r6, [r1]\n\
- movs r4, 0x7\n\
- mov r12, r0\n\
- ldr r0, _080DA164 @ =0x00000107\n\
- add r0, r12\n\
- lsls r0, 1\n\
- adds r3, r0, r2\n\
-_080DA122:\n\
- ldrh r0, [r3]\n\
- strh r0, [r1]\n\
- subs r3, 0x2\n\
- subs r1, 0x2\n\
- subs r4, 0x1\n\
- cmp r4, 0\n\
- bgt _080DA122\n\
- ldr r0, _080DA168 @ =0x00000101\n\
- add r0, r12\n\
- lsls r0, 1\n\
- adds r0, r2\n\
- strh r6, [r0]\n\
-_080DA13A:\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r0, r7\n\
- ldrh r1, [r0, 0x8]\n\
- subs r1, 0x1\n\
- strh r1, [r0, 0x8]\n\
- lsls r1, 16\n\
- cmp r1, 0\n\
- bne _080DA154\n\
- adds r0, r5, 0\n\
- bl DestroyAnimVisualTask\n\
-_080DA154:\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080DA15C: .4byte gTasks\n\
-_080DA160: .4byte gPlttBufferFaded\n\
-_080DA164: .4byte 0x00000107\n\
-_080DA168: .4byte 0x00000101\n\
- .syntax divided\n");
-}
-#endif
void sub_80DA16C(struct Sprite *sprite)
{
InitAnimSpritePos(sprite, 1);
if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ {
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ }
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2];
@@ -605,14 +548,14 @@ void sub_80DA410(struct Sprite *sprite)
sprite->data[0] = 1;
TranslateAnimLinear(sprite);
- if (((u16)sprite->data[3] >> 8) > 200)
+ if (((u16) sprite->data[3] >> 8) > 200)
{
sprite->pos1.x += sprite->pos2.x;
sprite->pos2.x = 0;
sprite->data[3] &= 0xFF;
}
- if ((u32)(sprite->pos1.x + sprite->pos2.x + 32) > 304 || sprite->pos1.y + sprite->pos2.y > 160)
+ if ((u32) (sprite->pos1.x + sprite->pos2.x + 32) > 304 || sprite->pos1.y + sprite->pos2.y > 160)
{
gSprites[GetAnimBattlerSpriteId(0)].invisible = 0;
DestroyAnimSprite(sprite);
@@ -628,8 +571,2106 @@ void sub_80DA48C(struct Sprite *sprite)
FreeOamMatrix(sprite->oam.matrixNum);
sprite->oam.affineMode = 0;
}
-
+
DestroySprite(sprite);
gAnimVisualTaskCount--;
}
}
+
+// FAKEMATCHING
+void sub_80DA4D8(struct Sprite *sprite)
+{
+ s16 *data;
+ u8 slot;
+ s16 spriteCoord;
+ int t1, t2;
+ u32 arg2;
+ u32 matrixNum;
+ u8 sinIndex;
+ register s16 sinVal asm ("r4");
+ register int sinVal2 asm ("r0");
+
+ data = sprite->data;
+
+ if (gBattleAnimArgs[7] & 0x100)
+ {
+ slot = gAnimBankAttacker;
+ }
+ else
+ {
+ slot = gAnimBankTarget;
+ }
+
+ if (GetBattlerSide(slot) == 0)
+ {
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ }
+
+ sprite->pos1.x = GetBattlerSpriteCoord(slot, 0) + gBattleAnimArgs[0];
+ spriteCoord = GetBattlerSpriteCoord(slot, 1);
+ sprite->pos1.y = spriteCoord + gBattleAnimArgs[1];
+ data[4] = sprite->pos1.y << 8;
+
+ t1 = (spriteCoord + (u16) gBattleAnimArgs[6]) << 1;
+ data[7] = (data[7] & 1) | t1;
+ ((u8 *) data)[0] |= 4;
+
+ arg2 = (u16) gBattleAnimArgs[2];
+ data[1] = (u8) gBattleAnimArgs[2];
+ arg2 <<= 16;
+ data[5] = arg2 >> 24;
+ data[2] = gBattleAnimArgs[3];
+ data[3] = gBattleAnimArgs[4];
+ data[6] = gBattleAnimArgs[5];
+
+ if ((u16) (data[1] - 64) <= 0x7f)
+ {
+ if (gMain.inBattle)
+ {
+ sprite->oam.priority = sub_8079ED4(slot) + 1;
+ }
+ else
+ {
+ sprite->oam.priority = sub_8079ED4(slot);
+ }
+
+ ((u8 *) data)[14] = data[7] & -2;
+
+ if (!(data[2] & 0x8000))
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+ }
+ }
+ else
+ {
+ sprite->oam.priority = sub_8079ED4(slot);
+ ((u8 *) data)[14] |= 1;
+
+ if (data[2] & 0x8000)
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+ }
+ }
+
+ t2 = (u16) data[1] >> 6 << 4;
+ ((u8 *) data)[0] = (15 & data[0]) | t2;
+
+ sprite->pos2.x = (gSineTable[(u16) data[1]] * (u8) data[6]) >> 8;
+
+ matrixNum = sprite->oam.matrixNum;
+
+ sinIndex = (-sprite->pos2.x >> 1) + data[5];
+ sinVal = gSineTable[sinIndex];
+
+ gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
+ gOamMatrices[matrixNum].b = sinVal;
+ sinVal2 = -sinVal;
+ gOamMatrices[matrixNum].c = sinVal2;
+
+ sprite->callback = sub_80DA6F0;
+}
+
+#ifdef NONMATCHING
+void sub_80DA6F0(struct Sprite * sprite)
+{
+ // (Probably) Functionally equivalent
+
+ struct dataStruct {
+ u8 one:1;
+ u8 two:1;
+ u8 three:1;
+ u8 four:1;
+ u8 fiveeight:4;
+ };
+
+ u8 zero;
+ s16 * data;
+ u8 * dataByte;
+
+ u16 r8;
+ u32 matrixNum;
+ u8 sinIndex;
+ s16 sinVal;
+
+ zero = 0;
+ data = sprite->data;
+ dataByte = (u8 *)data;
+
+ if (dataByte[0] & 1)
+ {
+ u32 t1;
+
+ t1 = dataByte[1];
+ dataByte[1] += 0xff;
+
+ t1 <<= 24;
+ if (t1 == 0)
+ {
+ // 080da724
+ ((struct dataStruct *)dataByte)[0].one = 0;
+ dataByte[1] = zero;
+ }
+
+ }
+ else
+ {
+ // 080da730
+ u16 tData;
+ u16 t2;
+
+ tData = data[1];
+ t2 = tData >> 6;
+ r8 = tData;
+
+ switch (t2)
+ {
+ case (0):
+ // 080da756
+
+ if (dataByte[0] >> 4 == 1)
+ {
+ dataByte[0] |= 8;
+ dataByte[0] |= 1;
+ dataByte[1] = zero;
+ }
+ else if (dataByte[0] >> 4 == 3)
+ {
+ /*080da76c*/
+ ((struct dataStruct *)dataByte)[0].two ^= 1;
+ ((struct dataStruct *)dataByte)[0].one = 1;
+ dataByte[1] = zero;
+ }
+ else
+ {
+ // 080da790
+ if (dataByte[0] & 8)
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+
+ if ((dataByte)[0] & 4)
+ {
+ u8 b;
+ if (gMain.inBattle)
+ {
+ if (!(dataByte[14] & 1))
+ {
+ sprite->oam.priority -= 1;
+ }
+ else
+ {
+ // 080da814
+ sprite->oam.priority += 1;
+ }
+ }
+ else
+ {
+ // 080da82e
+ if (!(dataByte[14] & 1))
+ {
+ sprite->subpriority -= 12;
+ }
+ else
+ {
+ // 080da85c
+ sprite->subpriority += 12;
+ }
+ }
+ b = (((u32)(dataByte[14] << 31) >> 31) ^ 1) & 1;
+ dataByte[14] = (dataByte[14] & -2) | b;
+ }
+ // 080da87a
+ ((struct dataStruct *)dataByte)[0].four = 0;
+ r8 = data[1];
+ }
+ }
+
+ // 080da88a
+ dataByte[0] &= 15;
+ // 080dac52
+ break;
+ case (1):
+ // 080da896
+ if (dataByte[0] >> 4 == 0)
+ {
+ dataByte[0] |= 8;
+ dataByte[0] |= 1;
+ dataByte[1] = zero;
+ }
+ else/*080da8ac*/if (dataByte[0] >> 4 == 2)
+ {
+ dataByte[0] |= 1;
+ dataByte[1] = zero;
+ }
+ else
+ {
+ // 080da8be
+ if (dataByte[0] & 8)
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+
+ if (dataByte[0] & 4)
+ {
+ u8 b;
+ if (gMain.inBattle)
+ {
+ if (!(dataByte[14] & 1))
+ {
+ sprite->oam.priority -= 1;
+ }
+ else
+ {
+ // 080da948
+ sprite->oam.priority += 1;
+ }
+ }
+ else
+ {
+ // 080da962
+ if (!(dataByte[14] & 1))
+ {
+ sprite->subpriority -=12;
+ }
+ else
+ {
+ // 080da98c
+ sprite->subpriority += 12;
+ }
+ }
+ // 080da978 + 080da996
+ b = (((u32)(dataByte[14] << 31) >> 31) ^ 1) & 1;
+ dataByte[14] = (dataByte[14] & -2) | b;
+ }
+ // 080da9ac
+ ((struct dataStruct *)dataByte)[0].four = 0;
+ r8 = data[1];
+ }
+ }
+ // 080da9bc
+ dataByte[0] &= 15;
+ dataByte[0] |= 16;
+ // 080dac52
+ break;
+ case (2):
+ // 080da9c8
+ if (dataByte[0] >> 4 == 3)
+ {
+ dataByte[0] |= 8;
+ dataByte[0] |= 1;
+ dataByte[1] = zero;
+ }
+ else/*080da9de*/if (dataByte[0] >> 4 == 1)
+ {
+ dataByte[0] |= 1;
+ dataByte[1] = zero;
+ }
+ else
+ {
+ // 080da9f0
+ if (dataByte[0] & 8)
+ {
+ // 080da9fa
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+
+ if (dataByte[0] & 4)
+ {
+ u8 b;
+ if (gMain.inBattle)
+ {
+ if (!(dataByte[14] & 1))
+ {
+ sprite->oam.priority -= 1;
+ }
+ else
+ {
+ // 080daa74
+ sprite->oam.priority += 1;
+ }
+ }
+ else
+ {
+ // 080daaa4
+ if (!(dataByte[14] & 1))
+ {
+ sprite->subpriority -= 12;
+ }
+ else
+ {
+ // 080daace
+ sprite->subpriority += 12;
+ }
+ }
+ b = (((u32)(dataByte[14] << 31) >> 31) ^ 1) & 1;
+ dataByte[14] = (dataByte[14] & -2) | b;
+ }
+ // 080daaec
+ ((struct dataStruct *)dataByte)[0].four = 0;
+ r8 = data[1];
+ }
+ }
+ // 080daafe
+ dataByte[0] &= 15;
+ dataByte[0] |= 32;
+ // 080dac52
+ break;
+ case (3):
+ // 080dab0e
+ if (dataByte[0] >> 4 == 2)
+ {
+ dataByte[0] |= 8;
+ // 080dac42
+ }
+ else/*080dab20*/if (dataByte[0] >> 4 == 0)
+ {
+ ((struct dataStruct *)dataByte)[0].two ^= 1;
+ ((struct dataStruct *)dataByte)[0].one = 1;
+ dataByte[1] = zero;
+ // 080dac42
+ }
+ else
+ {
+ // 080dab44
+ if (dataByte[0] & 8)
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+
+ if (dataByte[0] & 4)
+ {
+ u8 b;
+ if (gMain.inBattle)
+ {
+ if (!(dataByte[14] & 1))
+ {
+ sprite->oam.priority -= 1;
+ }
+ else
+ {
+ // 080dabcc
+ sprite->oam.priority += 1;
+ }
+ }
+ else
+ {
+ // 080dabe6
+ if (!(dataByte[14] & 1))
+ {
+ sprite->subpriority -= 12;
+ }
+ else
+ {
+ // 080dac14
+ sprite->subpriority += 12;
+ }
+ }
+ // 080dac00 + 080dac1e
+ b = (((u32)(dataByte[14]) << 31 >> 31) ^ 1) & 1;
+ dataByte[14] = (-2 & dataByte[14]) | b;
+ }
+ // 080dac32
+ ((struct dataStruct *)dataByte)[0].four = 0;
+ r8 = data[1];
+ }
+ }
+ // 080dac42
+ dataByte[0] &= 15;
+ dataByte[0] |= 48;
+ break;
+ }
+
+ // 080dac52
+
+ sprite->pos2.x = (dataByte[12 + ((struct dataStruct *)dataByte)[0].two] * gSineTable[r8]) >> 8;
+
+ matrixNum = sprite->oam.matrixNum;
+
+ sinIndex = (-sprite->pos2.x >> 1) + dataByte[10];
+ sinVal = gSineTable[sinIndex];
+
+ gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
+ gOamMatrices[matrixNum].b = sinVal;
+ gOamMatrices[matrixNum].c = -sinVal;
+
+ data[4] += data[3];
+
+ sprite->pos1.y = (u16)data[4] >> 8;
+
+ if (data[2] & (0x80 << 8))
+ {
+ data[1] = (data[1] - (data[2] & ((0x80 << 8) - 1))) & 0xff;
+ }
+ else
+ {
+ // 080dace8
+ data[1] = ((data[2] & 0x7fff) + data[1]) & 0xff;
+ }
+ // 080dacfe
+ if (sprite->pos1.y + sprite->pos2.y >= (u16)data[7] / 2)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_80DA48C;
+ }
+ }
+}
+#else
+NAKED
+void sub_80DA6F0(struct Sprite *sprite)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ adds r5, r0, 0\n\
+ movs r6, 0\n\
+ movs r0, 0x2E\n\
+ adds r0, r5\n\
+ mov r12, r0\n\
+ ldrb r2, [r0]\n\
+ movs r7, 0x1\n\
+ movs r1, 0x1\n\
+ mov r9, r1\n\
+ mov r0, r9\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _080DA730\n\
+ mov r3, r12\n\
+ ldrb r0, [r3, 0x1]\n\
+ adds r1, r0, 0\n\
+ adds r1, 0xFF\n\
+ strb r1, [r3, 0x1]\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080DA724\n\
+ b _080DAD1A\n\
+_080DA724:\n\
+ movs r0, 0x2\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ strb r0, [r3]\n\
+ strb r6, [r3, 0x1]\n\
+ b _080DAD1A\n\
+_080DA730:\n\
+ mov r4, r12\n\
+ ldrh r0, [r4, 0x2]\n\
+ lsrs r4, r0, 6\n\
+ mov r8, r0\n\
+ cmp r4, 0x1\n\
+ bne _080DA73E\n\
+ b _080DA896\n\
+_080DA73E:\n\
+ cmp r4, 0x1\n\
+ bgt _080DA748\n\
+ cmp r4, 0\n\
+ beq _080DA756\n\
+ b _080DAC52\n\
+_080DA748:\n\
+ cmp r4, 0x2\n\
+ bne _080DA74E\n\
+ b _080DA9C8\n\
+_080DA74E:\n\
+ cmp r4, 0x3\n\
+ bne _080DA754\n\
+ b _080DAB0E\n\
+_080DA754:\n\
+ b _080DAC52\n\
+_080DA756:\n\
+ lsls r1, r2, 24\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0x1\n\
+ bne _080DA76C\n\
+ movs r0, 0x8\n\
+ orrs r0, r2\n\
+ orrs r0, r7\n\
+ mov r1, r12\n\
+ strb r0, [r1]\n\
+ strb r6, [r1, 0x1]\n\
+ b _080DA88A\n\
+_080DA76C:\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0x3\n\
+ bne _080DA790\n\
+ lsls r0, r2, 30\n\
+ lsrs r0, 31\n\
+ movs r1, 0x1\n\
+ eors r0, r1\n\
+ ands r0, r7\n\
+ lsls r0, 1\n\
+ movs r1, 0x3\n\
+ negs r1, r1\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ orrs r1, r7\n\
+ mov r2, r12\n\
+ strb r1, [r2]\n\
+ strb r6, [r2, 0x1]\n\
+ b _080DA88A\n\
+_080DA790:\n\
+ movs r0, 0x8\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _080DA88A\n\
+ adds r3, r5, 0\n\
+ adds r3, 0x3F\n\
+ ldrb r2, [r3]\n\
+ lsls r1, r2, 31\n\
+ lsrs r1, 31\n\
+ movs r4, 0x1\n\
+ eors r1, r4\n\
+ ands r1, r7\n\
+ movs r6, 0x2\n\
+ negs r6, r6\n\
+ adds r0, r6, 0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r3]\n\
+ lsls r0, 31\n\
+ lsrs r0, 31\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x2A\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x4\n\
+ orrs r0, r1\n\
+ movs r1, 0x11\n\
+ negs r1, r1\n\
+ ands r0, r1\n\
+ strb r0, [r3]\n\
+ mov r3, r12\n\
+ ldrb r1, [r3]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DA87A\n\
+ ldr r0, _080DA80C @ =gMain\n\
+ ldr r1, _080DA810 @ =0x0000043d\n\
+ adds r0, r1\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DA82E\n\
+ ldrb r1, [r3, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DA814\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ subs r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ b _080DA868\n\
+ .align 2, 0\n\
+_080DA80C: .4byte gMain\n\
+_080DA810: .4byte 0x0000043d\n\
+_080DA814:\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ adds r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ b _080DA866\n\
+_080DA82E:\n\
+ mov r0, r12\n\
+ ldrb r1, [r0, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DA85C\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0xC\n\
+ strb r0, [r1]\n\
+ mov r1, r12\n\
+ ldrb r2, [r1, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r4\n\
+ ands r0, r7\n\
+ adds r1, r6, 0\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ mov r2, r12\n\
+ strb r1, [r2, 0xE]\n\
+ b _080DA87A\n\
+_080DA85C:\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0xC\n\
+ strb r0, [r1]\n\
+_080DA866:\n\
+ mov r3, r12\n\
+_080DA868:\n\
+ ldrb r2, [r3, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r4\n\
+ ands r0, r7\n\
+ adds r1, r6, 0\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ strb r1, [r3, 0xE]\n\
+_080DA87A:\n\
+ mov r4, r12\n\
+ ldrb r1, [r4]\n\
+ movs r0, 0x9\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ strb r0, [r4]\n\
+ ldrh r0, [r4, 0x2]\n\
+ mov r8, r0\n\
+_080DA88A:\n\
+ mov r2, r12\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0xF\n\
+ ands r0, r1\n\
+ strb r0, [r2]\n\
+ b _080DAC52\n\
+_080DA896:\n\
+ lsls r1, r2, 24\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0\n\
+ bne _080DA8AC\n\
+ movs r0, 0x8\n\
+ orrs r0, r2\n\
+ orrs r0, r7\n\
+ mov r3, r12\n\
+ strb r0, [r3]\n\
+ strb r6, [r3, 0x1]\n\
+ b _080DA9BC\n\
+_080DA8AC:\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0x2\n\
+ bne _080DA8BE\n\
+ adds r0, r2, 0\n\
+ orrs r0, r7\n\
+ mov r4, r12\n\
+ strb r0, [r4]\n\
+ strb r6, [r4, 0x1]\n\
+ b _080DA9BC\n\
+_080DA8BE:\n\
+ movs r0, 0x8\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _080DA9BC\n\
+ adds r3, r5, 0\n\
+ adds r3, 0x3F\n\
+ ldrb r2, [r3]\n\
+ lsls r1, r2, 31\n\
+ lsrs r1, 31\n\
+ movs r4, 0x1\n\
+ eors r1, r4\n\
+ ands r1, r7\n\
+ movs r6, 0x2\n\
+ negs r6, r6\n\
+ adds r0, r6, 0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r3]\n\
+ lsls r0, 31\n\
+ lsrs r0, 31\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x2A\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x4\n\
+ orrs r0, r1\n\
+ movs r1, 0x11\n\
+ negs r1, r1\n\
+ ands r0, r1\n\
+ strb r0, [r3]\n\
+ mov r0, r12\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DA9AC\n\
+ ldr r0, _080DA940 @ =gMain\n\
+ ldr r1, _080DA944 @ =0x0000043d\n\
+ adds r0, r1\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DA962\n\
+ mov r2, r12\n\
+ ldrb r1, [r2, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DA948\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ subs r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ mov r3, r12\n\
+ b _080DA978\n\
+ .align 2, 0\n\
+_080DA940: .4byte gMain\n\
+_080DA944: .4byte 0x0000043d\n\
+_080DA948:\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ adds r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ b _080DA996\n\
+_080DA962:\n\
+ mov r3, r12\n\
+ ldrb r1, [r3, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DA98C\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0xC\n\
+ strb r0, [r1]\n\
+_080DA978:\n\
+ ldrb r2, [r3, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r4\n\
+ ands r0, r7\n\
+ adds r1, r6, 0\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ strb r1, [r3, 0xE]\n\
+ b _080DA9AC\n\
+_080DA98C:\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0xC\n\
+ strb r0, [r1]\n\
+_080DA996:\n\
+ mov r0, r12\n\
+ ldrb r2, [r0, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r4\n\
+ ands r0, r7\n\
+ adds r1, r6, 0\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ mov r2, r12\n\
+ strb r1, [r2, 0xE]\n\
+_080DA9AC:\n\
+ mov r3, r12\n\
+ ldrb r1, [r3]\n\
+ movs r0, 0x9\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ strb r0, [r3]\n\
+ ldrh r4, [r3, 0x2]\n\
+ mov r8, r4\n\
+_080DA9BC:\n\
+ mov r1, r12\n\
+ ldrb r0, [r1]\n\
+ movs r1, 0xF\n\
+ ands r1, r0\n\
+ movs r0, 0x10\n\
+ b _080DAC4C\n\
+_080DA9C8:\n\
+ lsls r1, r2, 24\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0x3\n\
+ bne _080DA9DE\n\
+ movs r0, 0x8\n\
+ orrs r0, r2\n\
+ orrs r0, r7\n\
+ mov r3, r12\n\
+ strb r0, [r3]\n\
+ strb r6, [r3, 0x1]\n\
+ b _080DAAFE\n\
+_080DA9DE:\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0x1\n\
+ bne _080DA9F0\n\
+ adds r0, r2, 0\n\
+ orrs r0, r7\n\
+ mov r4, r12\n\
+ strb r0, [r4]\n\
+ strb r6, [r4, 0x1]\n\
+ b _080DAAFE\n\
+_080DA9F0:\n\
+ movs r0, 0x8\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ bne _080DA9FA\n\
+ b _080DAAFE\n\
+_080DA9FA:\n\
+ adds r3, r5, 0\n\
+ adds r3, 0x3F\n\
+ ldrb r2, [r3]\n\
+ lsls r1, r2, 31\n\
+ lsrs r1, 31\n\
+ movs r6, 0x1\n\
+ eors r1, r6\n\
+ ands r1, r7\n\
+ movs r0, 0x2\n\
+ negs r0, r0\n\
+ mov r8, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r3]\n\
+ lsls r0, 31\n\
+ lsrs r0, 31\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x2A\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x4\n\
+ orrs r0, r1\n\
+ movs r1, 0x11\n\
+ negs r1, r1\n\
+ ands r0, r1\n\
+ strb r0, [r3]\n\
+ mov r2, r12\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DAAEC\n\
+ ldr r0, _080DAA6C @ =gMain\n\
+ ldr r3, _080DAA70 @ =0x0000043d\n\
+ adds r0, r3\n\
+ ldrb r0, [r0]\n\
+ ands r4, r0\n\
+ cmp r4, 0\n\
+ beq _080DAAA4\n\
+ ldrb r1, [r2, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DAA74\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ subs r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ b _080DAAD8\n\
+ .align 2, 0\n\
+_080DAA6C: .4byte gMain\n\
+_080DAA70: .4byte 0x0000043d\n\
+_080DAA74:\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ adds r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ mov r0, r12\n\
+ ldrb r2, [r0, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r6\n\
+ ands r0, r7\n\
+ mov r1, r8\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ mov r2, r12\n\
+ strb r1, [r2, 0xE]\n\
+ b _080DAAEC\n\
+_080DAAA4:\n\
+ mov r3, r12\n\
+ ldrb r1, [r3, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DAACE\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0xC\n\
+ strb r0, [r1]\n\
+ ldrb r2, [r3, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r6\n\
+ ands r0, r7\n\
+ mov r1, r8\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ strb r1, [r3, 0xE]\n\
+ b _080DAAEC\n\
+_080DAACE:\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0xC\n\
+ strb r0, [r1]\n\
+_080DAAD8:\n\
+ mov r4, r12\n\
+ ldrb r2, [r4, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r6\n\
+ ands r0, r7\n\
+ mov r1, r8\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ strb r1, [r4, 0xE]\n\
+_080DAAEC:\n\
+ mov r0, r12\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x9\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ mov r1, r12\n\
+ strb r0, [r1]\n\
+ ldrh r2, [r1, 0x2]\n\
+ mov r8, r2\n\
+_080DAAFE:\n\
+ mov r3, r12\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0xF\n\
+ ands r1, r0\n\
+ movs r0, 0x20\n\
+ orrs r1, r0\n\
+ strb r1, [r3]\n\
+ b _080DAC52\n\
+_080DAB0E:\n\
+ lsls r1, r2, 24\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0x2\n\
+ bne _080DAB20\n\
+ movs r0, 0x8\n\
+ orrs r0, r2\n\
+ mov r4, r12\n\
+ strb r0, [r4]\n\
+ b _080DAC42\n\
+_080DAB20:\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0\n\
+ bne _080DAB44\n\
+ lsls r0, r2, 30\n\
+ lsrs r0, 31\n\
+ movs r1, 0x1\n\
+ eors r0, r1\n\
+ ands r0, r7\n\
+ lsls r0, 1\n\
+ movs r1, 0x3\n\
+ negs r1, r1\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ orrs r1, r7\n\
+ mov r0, r12\n\
+ strb r1, [r0]\n\
+ strb r6, [r0, 0x1]\n\
+ b _080DAC42\n\
+_080DAB44:\n\
+ movs r0, 0x8\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _080DAC42\n\
+ adds r3, r5, 0\n\
+ adds r3, 0x3F\n\
+ ldrb r2, [r3]\n\
+ lsls r1, r2, 31\n\
+ lsrs r1, 31\n\
+ movs r4, 0x1\n\
+ eors r1, r4\n\
+ ands r1, r7\n\
+ movs r6, 0x2\n\
+ negs r6, r6\n\
+ adds r0, r6, 0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r3]\n\
+ lsls r0, 31\n\
+ lsrs r0, 31\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x2A\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x4\n\
+ orrs r0, r1\n\
+ movs r1, 0x11\n\
+ negs r1, r1\n\
+ ands r0, r1\n\
+ strb r0, [r3]\n\
+ mov r2, r12\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DAC32\n\
+ ldr r0, _080DABC4 @ =gMain\n\
+ ldr r3, _080DABC8 @ =0x0000043d\n\
+ adds r0, r3\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DABE6\n\
+ ldrb r1, [r2, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DABCC\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ subs r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ mov r0, r12\n\
+ ldrb r2, [r0, 0xE]\n\
+ b _080DAC00\n\
+ .align 2, 0\n\
+_080DABC4: .4byte gMain\n\
+_080DABC8: .4byte 0x0000043d\n\
+_080DABCC:\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ adds r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ b _080DAC1E\n\
+_080DABE6:\n\
+ mov r0, r12\n\
+ ldrb r1, [r0, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DAC14\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0xC\n\
+ strb r0, [r1]\n\
+ mov r1, r12\n\
+ ldrb r2, [r1, 0xE]\n\
+_080DAC00:\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r4\n\
+ ands r0, r7\n\
+ adds r1, r6, 0\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ mov r2, r12\n\
+ strb r1, [r2, 0xE]\n\
+ b _080DAC32\n\
+_080DAC14:\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0xC\n\
+ strb r0, [r1]\n\
+_080DAC1E:\n\
+ mov r3, r12\n\
+ ldrb r2, [r3, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r4\n\
+ ands r0, r7\n\
+ adds r1, r6, 0\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ strb r1, [r3, 0xE]\n\
+_080DAC32:\n\
+ mov r4, r12\n\
+ ldrb r1, [r4]\n\
+ movs r0, 0x9\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ strb r0, [r4]\n\
+ ldrh r0, [r4, 0x2]\n\
+ mov r8, r0\n\
+_080DAC42:\n\
+ mov r1, r12\n\
+ ldrb r0, [r1]\n\
+ movs r1, 0xF\n\
+ ands r1, r0\n\
+ movs r0, 0x30\n\
+_080DAC4C:\n\
+ orrs r1, r0\n\
+ mov r2, r12\n\
+ strb r1, [r2]\n\
+_080DAC52:\n\
+ mov r3, r12\n\
+ ldrb r1, [r3]\n\
+ lsls r1, 30\n\
+ lsrs r1, 31\n\
+ mov r0, r12\n\
+ adds r0, 0xC\n\
+ adds r0, r1\n\
+ ldrb r1, [r0]\n\
+ ldr r3, _080DACE0 @ =gSineTable\n\
+ mov r4, r8\n\
+ lsls r0, r4, 1\n\
+ adds r0, r3\n\
+ movs r2, 0\n\
+ ldrsh r0, [r0, r2]\n\
+ muls r0, r1\n\
+ asrs r0, 8\n\
+ strh r0, [r5, 0x24]\n\
+ ldrb r2, [r5, 0x3]\n\
+ lsls r2, 26\n\
+ lsrs r2, 27\n\
+ movs r4, 0x24\n\
+ ldrsh r0, [r5, r4]\n\
+ negs r0, r0\n\
+ asrs r0, 1\n\
+ mov r1, r12\n\
+ ldrb r1, [r1, 0xA]\n\
+ adds r0, r1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r1, r0, 1\n\
+ adds r1, r3\n\
+ ldrh r6, [r1]\n\
+ ldr r1, _080DACE4 @ =gOamMatrices\n\
+ lsls r2, 3\n\
+ adds r2, r1\n\
+ adds r0, 0x40\n\
+ lsls r0, 1\n\
+ adds r0, r3\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r2, 0x6]\n\
+ strh r0, [r2]\n\
+ strh r6, [r2, 0x2]\n\
+ lsls r0, r6, 16\n\
+ asrs r0, 16\n\
+ negs r0, r0\n\
+ strh r0, [r2, 0x4]\n\
+ mov r2, r12\n\
+ ldrh r0, [r2, 0x6]\n\
+ ldrh r3, [r2, 0x8]\n\
+ adds r0, r3\n\
+ strh r0, [r2, 0x8]\n\
+ lsls r0, 16\n\
+ lsrs r0, 24\n\
+ strh r0, [r5, 0x22]\n\
+ movs r4, 0x4\n\
+ ldrsh r0, [r2, r4]\n\
+ movs r1, 0x80\n\
+ lsls r1, 8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DACE8\n\
+ ldrh r0, [r2, 0x4]\n\
+ subs r1, 0x1\n\
+ ands r1, r0\n\
+ ldrh r0, [r2, 0x2]\n\
+ subs r0, r1\n\
+ movs r1, 0xFF\n\
+ ands r0, r1\n\
+ strh r0, [r2, 0x2]\n\
+ b _080DACFE\n\
+ .align 2, 0\n\
+_080DACE0: .4byte gSineTable\n\
+_080DACE4: .4byte gOamMatrices\n\
+_080DACE8:\n\
+ mov r1, r12\n\
+ ldrh r0, [r1, 0x4]\n\
+ ldr r1, _080DAD28 @ =0x00007fff\n\
+ ands r1, r0\n\
+ mov r2, r12\n\
+ ldrh r2, [r2, 0x2]\n\
+ adds r1, r2\n\
+ movs r0, 0xFF\n\
+ ands r1, r0\n\
+ mov r3, r12\n\
+ strh r1, [r3, 0x2]\n\
+_080DACFE:\n\
+ movs r4, 0x22\n\
+ ldrsh r1, [r5, r4]\n\
+ movs r2, 0x26\n\
+ ldrsh r0, [r5, r2]\n\
+ adds r1, r0\n\
+ mov r3, r12\n\
+ ldrh r0, [r3, 0xE]\n\
+ lsrs r0, 1\n\
+ cmp r1, r0\n\
+ blt _080DAD1A\n\
+ movs r0, 0\n\
+ strh r0, [r5, 0x2E]\n\
+ ldr r0, _080DAD2C @ =sub_80DA48C\n\
+ str r0, [r5, 0x1C]\n\
+_080DAD1A:\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080DAD28: .4byte 0x00007fff\n\
+_080DAD2C: .4byte sub_80DA48C\n");
+};
+#endif
+
+void sub_80DAD30(struct Sprite *sprite)
+{
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget);
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ sprite->callback = TranslateAnimSpriteToTargetMonLocation;
+}
+
+void sub_80DAD84(struct Sprite * sprite)
+{
+ s16 matrixNum;
+ s16 rand;
+ s16 sinVal;
+
+ sprite->data[1] = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[1];
+ sprite->data[3] = gBattleAnimArgs[2];
+
+ if (gMain.inBattle)
+ {
+ if (gBanksBySide[gAnimBankTarget] & 1)
+ {
+ sprite->data[7] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + gBattleAnimArgs[3];
+ }
+ else
+ {
+ // 080dade0
+ sprite->data[7] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + 40;
+ }
+
+ if (gBattleAnimArgs[4])
+ {
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1;
+ // 080dae24
+ }
+ else
+ {
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget);
+ }
+ }
+ else
+ {
+ sprite->data[7] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + gBattleAnimArgs[3];
+ }
+
+ sprite->data[4] = gSineTable[sprite->data[1] & 0xff];
+ sprite->data[5] = -gSineTable[(sprite->data[1] & 0xff) + 64];
+ sprite->data[6] = 0;
+ sprite->pos2.x = sprite->pos2.y = 0;
+
+ matrixNum = sprite->oam.matrixNum;
+ sprite->data[1] = (u8) (sprite->data[1] >> 8);
+
+ rand = Random();
+ if (rand & 0x8000)
+ {
+ sprite->data[1] = 0xff - sprite->data[1];
+ }
+
+ sinVal = gSineTable[sprite->data[1]];
+
+ gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sprite->data[1] + 64];
+ gOamMatrices[matrixNum].b = sinVal;
+ gOamMatrices[matrixNum].c = -sinVal;
+
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+
+ if (rand & 1)
+ {
+ sprite->animNum = 1;
+ sprite->hFlip = 1;
+ }
+
+ sprite->callback = sub_80DAF0C;
+
+}
+
+#ifdef NONMATCHING
+void sub_80DAF0C(struct Sprite *sprite)
+{
+
+ /* NONMATCHING - Functionally equivalent
+ *
+ * differences:
+ *
+ * asm contains useless:
+ * movs r1, 0
+ * mov r8, r1
+ * where r8 is never used can't be matched
+ *
+ * 0x8001 and 0x8002 loaded then added with 0 to r0 instead of loaded straight there */
+
+ u16 *data;
+ u16 dataCpy[8];
+ int higher;
+
+ data = sprite->data;
+
+ if (++sprite->data[0] > 4)
+ {
+ sprite->pos2.x = (sprite->data[4] * sprite->data[6]) >> 8;
+ sprite->pos2.y = (sprite->data[5] * sprite->data[6]) >> 8;
+
+ sprite->data[6] += sprite->data[3] & 0xff;
+
+ if (sprite->data[6] >= (sprite->data[2] & 0xff))
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+
+ memcpy(dataCpy, data, 16);
+ memset(data, 0, 16);
+
+ data[4] = sprite->pos1.y << 8;
+ data[3] = dataCpy[3] >> 8;
+ data[1] = 0;
+ data[5] = dataCpy[1];
+
+ if (sprite->animNum != 0)
+ {
+ if (data[3] & 8)
+ {
+ data[2] = 0x8001;
+ }
+ else
+ {
+ data[2] = 0x8002;
+ }
+ }
+ else
+ {
+ if (data[3] & 8)
+ {
+ data[2] = 1;
+ }
+ else
+ {
+ data[2] = 2;
+ }
+ }
+
+ ((u8 *) data)[12] = dataCpy[2] >> 8;
+ ((u8 *) data)[13] = (u8) data[6] - 2;
+
+ higher = dataCpy[7] << 1;
+ data[7] = (data[7] & 1) | higher;
+
+ sprite->callback = sub_80DA6F0;
+ }
+ }
+}
+#else
+NAKED
+void sub_80DAF0C(struct Sprite *sprite)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ sub sp, 0x10\n\
+ adds r4, r0, 0\n\
+ adds r5, r4, 0\n\
+ adds r5, 0x2E\n\
+ ldrh r0, [r4, 0x2E]\n\
+ adds r0, 0x1\n\
+ movs r1, 0\n\
+ mov r8, r1\n\
+ movs r7, 0\n\
+ strh r0, [r4, 0x2E]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x4\n\
+ ble _080DAFF0\n\
+ movs r2, 0x36\n\
+ ldrsh r1, [r4, r2]\n\
+ movs r2, 0x3A\n\
+ ldrsh r0, [r4, r2]\n\
+ muls r0, r1\n\
+ asrs r6, r0, 8\n\
+ strh r6, [r4, 0x24]\n\
+ movs r0, 0x38\n\
+ ldrsh r1, [r4, r0]\n\
+ movs r2, 0x3A\n\
+ ldrsh r0, [r4, r2]\n\
+ muls r0, r1\n\
+ asrs r3, r0, 8\n\
+ strh r3, [r4, 0x26]\n\
+ ldrh r2, [r4, 0x34]\n\
+ movs r1, 0xFF\n\
+ adds r0, r1, 0\n\
+ ands r0, r2\n\
+ ldrh r2, [r4, 0x3A]\n\
+ adds r0, r2\n\
+ strh r0, [r4, 0x3A]\n\
+ ldrh r2, [r4, 0x32]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ ands r1, r2\n\
+ cmp r0, r1\n\
+ blt _080DAFF0\n\
+ ldrh r0, [r4, 0x20]\n\
+ adds r0, r6\n\
+ strh r0, [r4, 0x20]\n\
+ ldrh r0, [r4, 0x22]\n\
+ adds r0, r3\n\
+ strh r0, [r4, 0x22]\n\
+ strh r7, [r4, 0x24]\n\
+ strh r7, [r4, 0x26]\n\
+ mov r0, sp\n\
+ adds r1, r5, 0\n\
+ movs r2, 0x10\n\
+ bl memcpy\n\
+ adds r0, r5, 0\n\
+ movs r1, 0\n\
+ movs r2, 0x10\n\
+ bl memset\n\
+ ldrh r0, [r4, 0x22]\n\
+ lsls r0, 8\n\
+ strh r0, [r5, 0x8]\n\
+ mov r0, sp\n\
+ ldrh r0, [r0, 0x6]\n\
+ lsrs r1, r0, 8\n\
+ strh r1, [r5, 0x6]\n\
+ strh r7, [r5, 0x2]\n\
+ mov r0, sp\n\
+ ldrh r0, [r0, 0x2]\n\
+ strh r0, [r5, 0xA]\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x2A\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _080DAFC0\n\
+ movs r0, 0x8\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _080DAFB8\n\
+ ldr r0, _080DAFB4 @ =0x00008001\n\
+ b _080DAFCE\n\
+ .align 2, 0\n\
+ _080DAFB4: .4byte 0x00008001\n\
+ _080DAFB8:\n\
+ ldr r0, _080DAFBC @ =0x00008002\n\
+ b _080DAFCE\n\
+ .align 2, 0\n\
+ _080DAFBC: .4byte 0x00008002\n\
+ _080DAFC0:\n\
+ movs r0, 0x8\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _080DAFCC\n\
+ movs r0, 0x1\n\
+ b _080DAFCE\n\
+ _080DAFCC:\n\
+ movs r0, 0x2\n\
+ _080DAFCE:\n\
+ strh r0, [r5, 0x4]\n\
+ mov r0, sp\n\
+ ldrh r0, [r0, 0x4]\n\
+ lsrs r0, 8\n\
+ strb r0, [r5, 0xC]\n\
+ subs r0, 0x2\n\
+ strb r0, [r5, 0xD]\n\
+ mov r0, sp\n\
+ ldrh r1, [r0, 0xE]\n\
+ lsls r1, 1\n\
+ ldrh r2, [r5, 0xE]\n\
+ movs r0, 0x1\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strh r0, [r5, 0xE]\n\
+ ldr r0, _080DAFFC @ =sub_80DA6F0\n\
+ str r0, [r4, 0x1C]\n\
+ _080DAFF0:\n\
+ add sp, 0x10\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+ _080DAFFC: .4byte sub_80DA6F0\n");
+
+}
+#endif
+
+void sub_80DB000(struct Sprite *sprite)
+{
+ u16 arg;
+ u8 mult;
+
+ if (gBattleAnimArgs[2] == 0)
+ {
+ InitAnimSpritePos(sprite, 0);
+ }
+ else
+ {
+ sub_8078764(sprite, 0);
+ }
+
+ if ((!gBattleAnimArgs[2] && !GetBattlerSide(gAnimBankAttacker))
+ || (gBattleAnimArgs[2] == 1 && !GetBattlerSide(gAnimBankTarget)))
+ {
+ sprite->pos1.x += 8;
+ }
+
+ SeekSpriteAnim(sprite, gBattleAnimArgs[4]);
+ sprite->pos1.x -= 32;
+ sprite->data[1] = 0x0ccc;
+
+ arg = gBattleAnimArgs[4];
+ mult = 12;
+ sprite->pos2.x += mult * arg;
+ sprite->data[0] = arg;
+ sprite->data[7] = gBattleAnimArgs[3];
+ sprite->callback = sub_80DB0A0;
+}
+
+void sub_80DB0A0(struct Sprite *sprite)
+{
+ sprite->pos2.x += sprite->data[1] >> 8;
+
+ if (++sprite->data[0] == 6)
+ {
+ sprite->data[0] = 0;
+ sprite->pos2.x = 0;
+ StartSpriteAnim(sprite, 0);
+ }
+
+ if (--sprite->data[7] == -1)
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_80DB0E8(u8 task)
+{
+ u16 data = gTasks[task].data[0];
+ if ((data & 31) == 0)
+ {
+ ++gAnimVisualTaskCount;
+
+ gBattleAnimArgs[0] = Sin(gTasks[task].data[0], -13);
+ gBattleAnimArgs[1] = Cos(gTasks[task].data[0], -13);
+ gBattleAnimArgs[2] = 1;
+ gBattleAnimArgs[3] = 3;
+
+ CreateSpriteAndAnimate(&gBattleAnimSpriteTemplate_83DB538,
+ GetBattlerSpriteCoord(gAnimBankTarget, 2),
+ GetBattlerSpriteCoord(gAnimBankTarget, 3),
+ 3);
+ }
+
+ gTasks[task].data[0] += 8;
+
+ if (gTasks[task].data[0] > 0xff)
+ {
+ DestroyAnimVisualTask(task);
+ }
+}
+
+void sub_80DB194(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ InitAnimSpritePos(sprite, 1);
+ gSprites[GetAnimBattlerSpriteId(0)].invisible = 1;
+ ++sprite->data[0];
+ break;
+ case 1:
+ if (sprite->affineAnimEnded)
+ {
+ DestroyAnimSprite(sprite);
+ }
+ }
+}
+
+void sub_80DB1F4(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 1);
+ sprite->pos2.y = -sprite->pos1.y - 32;
+ ++sprite->data[0];
+ break;
+ case 1:
+ sprite->pos2.y += 10;
+ if (sprite->pos2.y >= 0)
+ {
+ ++sprite->data[0];
+ }
+ break;
+ case 2:
+ sprite->pos2.y -= 10;
+ if (sprite->pos1.y + sprite->pos2.y < -32)
+ {
+ gSprites[GetAnimBattlerSpriteId(0)].invisible = 0;
+ DestroyAnimSprite(sprite);
+ }
+ }
+}
+
+void sub_80DB288(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, 1);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->callback = sub_80DB2D0;
+ gSprites[GetAnimBattlerSpriteId(0)].invisible = 1;
+}
+
+void sub_80DB2D0(struct Sprite *sprite)
+{
+ if (sprite->data[0] > 0)
+ {
+ --sprite->data[0];
+ }
+ else if (sprite->pos1.y + sprite->pos2.y > -32)
+ {
+ sprite->data[2] += sprite->data[1];
+ sprite->pos2.y -= (sprite->data[2] >> 8);
+ }
+ else
+ {
+ sprite->invisible = 1;
+ if (sprite->data[3]++ > 20)
+ {
+ sprite->callback = sub_80DB330;
+ }
+ }
+}
+
+void sub_80DB330(struct Sprite *sprite)
+{
+ sprite->pos2.y += sprite->data[2] >> 8;
+
+ if (sprite->pos1.y + sprite->pos2.y > -32)
+ {
+ sprite->invisible = 0;
+ }
+
+ if (sprite->pos2.y > 0)
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+#ifdef NONMATCHING
+void sub_80DB374(struct Sprite *sprite)
+{
+ // NONMATCHING - Functionally equivalent - slight register swap at end
+
+ u32 matrixNum;
+ int t1, t3;
+ s16 t2;
+
+ switch (sprite->data[0])
+ {
+
+ case 0:
+ if (!gBattleAnimArgs[0])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 1);
+ }
+
+ sprite->data[1] = 512;
+
+ sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
+ ++sprite->data[0];
+ break;
+ case 1:
+ if (sprite->data[2] <= 11)
+ {
+ sprite->data[1] -= 40;
+ }
+ else
+ {
+ sprite->data[1] += 40;
+ }
+
+ ++sprite->data[2];
+
+ sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
+
+ matrixNum = sprite->oam.matrixNum;
+
+ t1 = 15616;
+ t2 = gOamMatrices[matrixNum].d;
+ t3 = t1 / t2 + 1;
+
+ if (t3 > 128)
+ {
+ t3 = 128;
+ }
+
+ /* NONMATCHING
+ * compiles to:
+ * asr r0, r0, #0x1
+ strh r0, [r5, #0x26]
+ * needed:
+ * asrs r1, r0, 1
+ * strh r1, [r5, 0x26] */
+ sprite->pos2.y = (64 - t3) / 2;
+
+ if (sprite->data[2] == 24)
+ {
+ sub_8079098(sprite);
+ DestroyAnimSprite(sprite);
+ }
+ }
+}
+#else
+NAKED
+void sub_80DB374(struct Sprite *sprite)
+{
+ asm_unified("push {r4,r5,lr}\n\
+ sub sp, 0x4\n\
+ adds r5, r0, 0\n\
+ movs r1, 0x2E\n\
+ ldrsh r0, [r5, r1]\n\
+ cmp r0, 0\n\
+ beq _080DB388\n\
+ cmp r0, 0x1\n\
+ beq _080DB3E0\n\
+ b _080DB44C\n\
+_080DB388:\n\
+ ldr r0, _080DB398 @ =gBattleAnimArgs\n\
+ movs r2, 0\n\
+ ldrsh r0, [r0, r2]\n\
+ cmp r0, 0\n\
+ bne _080DB3A0\n\
+ ldr r4, _080DB39C @ =gAnimBankAttacker\n\
+ b _080DB3A2\n\
+ .align 2, 0\n\
+_080DB398: .4byte gBattleAnimArgs\n\
+_080DB39C: .4byte gAnimBankAttacker\n\
+_080DB3A0:\n\
+ ldr r4, _080DB3DC @ =gAnimBankTarget\n\
+_080DB3A2:\n\
+ ldrb r0, [r4]\n\
+ movs r1, 0\n\
+ bl GetBattlerSpriteCoord\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ strh r0, [r5, 0x20]\n\
+ ldrb r0, [r4]\n\
+ movs r1, 0x1\n\
+ bl GetBattlerSpriteCoord\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ strh r0, [r5, 0x22]\n\
+ movs r0, 0\n\
+ movs r3, 0x80\n\
+ lsls r3, 2\n\
+ strh r3, [r5, 0x30]\n\
+ movs r2, 0x80\n\
+ lsls r2, 1\n\
+ str r0, [sp]\n\
+ adds r0, r5, 0\n\
+ movs r1, 0\n\
+ bl sub_8078FDC\n\
+ ldrh r0, [r5, 0x2E]\n\
+ adds r0, 0x1\n\
+ strh r0, [r5, 0x2E]\n\
+ b _080DB44C\n\
+ .align 2, 0\n\
+_080DB3DC: .4byte gAnimBankTarget\n\
+_080DB3E0:\n\
+ movs r1, 0x32\n\
+ ldrsh r0, [r5, r1]\n\
+ cmp r0, 0xB\n\
+ bgt _080DB3EE\n\
+ ldrh r0, [r5, 0x30]\n\
+ subs r0, 0x28\n\
+ b _080DB3F2\n\
+_080DB3EE:\n\
+ ldrh r0, [r5, 0x30]\n\
+ adds r0, 0x28\n\
+_080DB3F2:\n\
+ strh r0, [r5, 0x30]\n\
+ ldrh r0, [r5, 0x32]\n\
+ adds r0, 0x1\n\
+ movs r1, 0\n\
+ strh r0, [r5, 0x32]\n\
+ movs r2, 0x80\n\
+ lsls r2, 1\n\
+ movs r0, 0x30\n\
+ ldrsh r3, [r5, r0]\n\
+ str r1, [sp]\n\
+ adds r0, r5, 0\n\
+ bl sub_8078FDC\n\
+ ldrb r1, [r5, 0x3]\n\
+ lsls r1, 26\n\
+ lsrs r1, 27\n\
+ movs r0, 0xF4\n\
+ lsls r0, 6\n\
+ ldr r2, _080DB454 @ =gOamMatrices\n\
+ lsls r1, 3\n\
+ adds r1, r2\n\
+ movs r2, 0x6\n\
+ ldrsh r1, [r1, r2]\n\
+ bl __divsi3\n\
+ adds r1, r0, 0x1\n\
+ cmp r1, 0x80\n\
+ ble _080DB42C\n\
+ movs r1, 0x80\n\
+_080DB42C:\n\
+ movs r0, 0x40\n\
+ subs r0, r1\n\
+ lsrs r1, r0, 31\n\
+ adds r0, r1\n\
+ asrs r1, r0, 1\n\
+ strh r1, [r5, 0x26]\n\
+ movs r1, 0x32\n\
+ ldrsh r0, [r5, r1]\n\
+ cmp r0, 0x18\n\
+ bne _080DB44C\n\
+ adds r0, r5, 0\n\
+ bl sub_8079098\n\
+ adds r0, r5, 0\n\
+ bl DestroyAnimSprite\n\
+_080DB44C:\n\
+ add sp, 0x4\n\
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080DB454: .4byte gOamMatrices\n");
+}
+#endif
+
+void sub_80DB458(struct Sprite *sprite)
+{
+ int v1, v2;
+
+ v1 = 0x1ff & Random();
+ v2 = 0x7f & Random();
+
+ if (v1 & 1)
+ {
+ sprite->data[0] = 736 + v1;
+ }
+ else
+ {
+ sprite->data[0] = 736 - v1;
+ }
+
+ if (v2 & 1)
+ {
+ sprite->data[1] = 896 + v2;
+ }
+ else
+ {
+ sprite->data[1] = 896 - v2;
+ }
+
+ sprite->data[2] = gBattleAnimArgs[0];
+
+ if (sprite->data[2])
+ {
+ sprite->oam.matrixNum = 8;
+ }
+
+ if (gBattleAnimArgs[1] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + 32;
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 1) + 32;
+ }
+
+ sprite->callback = sub_80DB508;
+}
+
+void sub_80DB508(struct Sprite *sprite)
+{
+ if (sprite->data[2] == 0)
+ {
+ sprite->pos2.x += sprite->data[0] >> 8;
+ sprite->pos2.y -= sprite->data[1] >> 8;
+ }
+ else
+ {
+ sprite->pos2.x -= sprite->data[0] >> 8;
+ sprite->pos2.y -= sprite->data[1] >> 8;
+ }
+
+ sprite->data[0] = sprite->data[0];
+ sprite->data[1] -= 32;
+
+ if (sprite->data[0] < 0)
+ {
+ sprite->data[0] = 0;
+ }
+
+ if (++sprite->data[3] == 31)
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_80DB564(struct Sprite *sprite)
+{
+ sprite->data[6] = 0;
+ sprite->data[7] = 0x40;
+ sprite->callback = sub_80DB578;
+}
+
+void sub_80DB578(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[1] > 8)
+ {
+ sprite->data[1] = 0;
+ sprite->invisible ^= 1;
+ if (++sprite->data[2] > 5 && sprite->invisible)
+ {
+ sprite->data[0]++;
+ }
+ }
+ break;
+ case 1:
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_80DB5E4(struct Sprite *sprite)
+{
+ s16 posx, posy;
+ u16 rotation;
+
+ posx = sprite->pos1.x;
+ posy = sprite->pos1.y;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+
+ sprite->data[4] = sprite->pos1.x << 4;
+ sprite->data[5] = sprite->pos1.y << 4;
+
+ sprite->data[6] = ((posx - sprite->pos1.x) << 4) / 12;
+ sprite->data[7] = ((posy - sprite->pos1.y) << 4) / 12;
+
+ rotation = ArcTan2Neg(posx - sprite->pos1.x, posy - sprite->pos1.y);
+ rotation += 0xc000;
+
+ sub_8078FDC(sprite, 1, 0x100, 0x100, rotation);
+
+ sprite->callback = sub_80DB6A0;
+}
+
+void sub_80DB6A0(struct Sprite *sprite)
+{
+ sprite->data[4] += sprite->data[6];
+ sprite->data[5] += sprite->data[7];
+
+ sprite->pos1.x = sprite->data[4] >> 4;
+ sprite->pos1.y = sprite->data[5] >> 4;
+
+ if ((u16) (sprite->pos1.x + 0x2d) > 0x14a || sprite->pos1.y > 0x9d || sprite->pos1.y < -0x2d)
+ {
+ move_anim_8074EE0(sprite);
+ }
+}
+
+void unref_sub_80DB6E4(u8 taskId)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ u8 spriteId = GetAnimBattlerSpriteId(0);
+ gSprites[spriteId].invisible = 1;
+ }
+ else
+ {
+ u8 spriteId = GetAnimBattlerSpriteId(0);
+ gSprites[spriteId].invisible = 0;
+ }
+
+ DestroyAnimVisualTask(taskId);
+} \ No newline at end of file