summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorU-Maria-PC\Maria <throwawaygolem@gmail.com>2017-08-06 16:44:22 -0400
committerU-Maria-PC\Maria <throwawaygolem@gmail.com>2017-08-06 16:44:22 -0400
commit6c6afe1c8a58457a0caa0b1a5532622b4249cebf (patch)
treeca05243b30f56ec911fdc9c984b72928b7d17ceb
parent02384ce88a28fd1e55a0d1d55fc1468e884560f3 (diff)
decompiled up to sub_80cbc8c
-rw-r--r--asm/battle_anim_80CA710.s647
-rwxr-xr-xsrc/battle_anim_80CA710.c502
2 files changed, 502 insertions, 647 deletions
diff --git a/asm/battle_anim_80CA710.s b/asm/battle_anim_80CA710.s
index ddfce03a8..3b42023eb 100644
--- a/asm/battle_anim_80CA710.s
+++ b/asm/battle_anim_80CA710.s
@@ -6,655 +6,8 @@
.text
- thumb_func_start sub_80CB814
-sub_80CB814: @ 80CB814
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r8, r0
- ldrh r0, [r0, 0x38]
- lsrs r1, r0, 8
- mov r10, r1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- mov r1, r8
- ldrh r0, [r1, 0x3A]
- lsrs r2, r0, 8
- lsls r0, 24
- lsrs r4, r0, 24
- ldrh r1, [r1, 0x3C]
- lsls r0, r1, 16
- asrs r0, 24
- lsls r0, 16
- lsrs r6, r0, 16
- movs r3, 0xFF
- ands r3, r1
- cmp r2, 0
- bne _080CB84E
- movs r2, 0x20
- negs r2, r2
- b _080CB856
-_080CB84E:
- cmp r2, 0xFF
- bne _080CB856
- movs r2, 0x88
- lsls r2, 1
-_080CB856:
- mov r0, r9
- subs r4, r0
- lsls r4, 16
- lsrs r4, 16
- mov r1, r10
- subs r0, r2, r1
- lsls r5, r3, 16
- asrs r5, 16
- muls r0, r5
- lsls r1, r6, 16
- asrs r7, r1, 16
- adds r1, r7, 0
- bl __divsi3
- adds r6, r0, 0
- lsls r4, 16
- asrs r4, 16
- adds r0, r4, 0
- muls r0, r5
- adds r1, r7, 0
- bl __divsi3
- add r6, r10
- mov r1, r8
- strh r6, [r1, 0x20]
- add r0, r9
- strh r0, [r1, 0x22]
- adds r5, 0x1
- lsls r5, 16
- lsrs r3, r5, 16
- asrs r5, 16
- cmp r5, r7
- beq _080CB8A8
- lsls r1, r7, 8
- lsls r0, r3, 16
- asrs r0, 16
- orrs r0, r1
- mov r1, r8
- strh r0, [r1, 0x3C]
- movs r0, 0
- b _080CB8AA
-_080CB8A8:
- movs r0, 0x1
-_080CB8AA:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80CB814
-
- thumb_func_start sub_80CB8B8
-sub_80CB8B8: @ 80CB8B8
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0xA
- bne _080CB8CC
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
-_080CB8CC:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x32
- ble _080CB8E0
- adds r0, r4, 0
- bl move_anim_8072740
-_080CB8E0:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80CB8B8
-
- thumb_func_start sub_80CB8E8
-sub_80CB8E8: @ 80CB8E8
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- lsls r0, 7
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- bl __divsi3
- ldrh r1, [r4, 0x2E]
- adds r1, r0
- movs r5, 0
- strh r1, [r4, 0x2E]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0x7F
- ble _080CB912
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
- strh r5, [r4, 0x2E]
-_080CB912:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x80
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x30
- ldrsh r2, [r4, r1]
- lsls r2, 3
- movs r1, 0x1E
- subs r1, r2
- lsls r1, 16
- asrs r1, 16
- bl Sin
- strh r0, [r4, 0x26]
- adds r0, r4, 0
- bl sub_80CB814
- lsls r0, 24
- cmp r0, 0
- beq _080CB942
- strh r5, [r4, 0x26]
- strh r5, [r4, 0x2E]
- ldr r0, _080CB948 @ =sub_80CB8B8
- str r0, [r4, 0x1C]
-_080CB942:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080CB948: .4byte sub_80CB8B8
- thumb_func_end sub_80CB8E8
-
- thumb_func_start sub_80CB94C
-sub_80CB94C: @ 80CB94C
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r1, 0
- bl sub_80787B0
- ldr r4, _080CB994 @ =gBattleAnimEnemyMonIndex
- ldrb r0, [r4]
- movs r1, 0
- bl sub_8077ABC
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r0, [r4]
- movs r1, 0x1
- bl sub_8077ABC
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _080CB998 @ =gBattleAnimPlayerMonIndex
- ldrb r1, [r0]
- movs r0, 0x2
- eors r0, r1
- ldrb r4, [r4]
- cmp r0, r4
- bne _080CB99C
- strh r6, [r5, 0x3A]
- adds r0, r2, 0
- adds r0, 0xA
- strh r0, [r5, 0x3C]
- adds r0, r5, 0
- movs r1, 0x3C
- bl sub_80CB7EC
- movs r0, 0x1
- b _080CB9AE
- .align 2, 0
-_080CB994: .4byte gBattleAnimEnemyMonIndex
-_080CB998: .4byte gBattleAnimPlayerMonIndex
-_080CB99C:
- strh r6, [r5, 0x3A]
- adds r0, r2, 0
- adds r0, 0xA
- strh r0, [r5, 0x3C]
- adds r0, r5, 0
- movs r1, 0x3C
- bl sub_80CB7EC
- movs r0, 0x3
-_080CB9AE:
- strh r0, [r5, 0x34]
- movs r0, 0x3C
- strh r0, [r5, 0x36]
- ldr r0, _080CB9C0 @ =sub_80CB8E8
- str r0, [r5, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080CB9C0: .4byte sub_80CB8E8
- thumb_func_end sub_80CB94C
-
- thumb_func_start sub_80CB9C4
-sub_80CB9C4: @ 80CB9C4
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- lsls r0, 7
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- bl __divsi3
- ldrh r1, [r4, 0x2E]
- adds r1, r0
- movs r5, 0
- strh r1, [r4, 0x2E]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0x7F
- ble _080CB9EE
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
- strh r5, [r4, 0x2E]
-_080CB9EE:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x80
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x30
- ldrsh r2, [r4, r1]
- lsls r2, 3
- movs r1, 0x1E
- subs r1, r2
- lsls r1, 16
- asrs r1, 16
- bl Sin
- strh r0, [r4, 0x26]
- adds r0, r4, 0
- bl sub_80CB814
- lsls r0, 24
- cmp r0, 0
- beq _080CBA20
- strh r5, [r4, 0x26]
- strh r5, [r4, 0x2E]
- adds r0, r4, 0
- bl move_anim_8072740
-_080CBA20:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80CB9C4
-
- thumb_func_start sub_80CBA28
-sub_80CBA28: @ 80CBA28
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r4, _080CBA64 @ =gBattleAnimEnemyMonIndex
- ldrb r0, [r4]
- movs r1, 0x1
- bl sub_8077ABC
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080CBA6C
- strh r0, [r5, 0x3A]
- adds r0, r6, 0
- adds r0, 0xA
- strh r0, [r5, 0x3C]
- adds r0, r5, 0
- movs r1, 0x28
- bl sub_80CB7EC
- movs r0, 0x3
- strh r0, [r5, 0x34]
- movs r0, 0x3C
- strh r0, [r5, 0x36]
- ldr r0, _080CBA68 @ =sub_80CB8E8
- b _080CBA96
- .align 2, 0
-_080CBA64: .4byte gBattleAnimEnemyMonIndex
-_080CBA68: .4byte sub_80CB8E8
-_080CBA6C:
- movs r0, 0xFF
- strh r0, [r5, 0x3A]
- adds r0, r6, 0
- adds r0, 0xA
- strh r0, [r5, 0x3C]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080CBA84
- movs r0, 0
- strh r0, [r5, 0x3A]
-_080CBA84:
- adds r0, r5, 0
- movs r1, 0x28
- bl sub_80CB7EC
- movs r0, 0x3
- strh r0, [r5, 0x34]
- movs r0, 0x3C
- strh r0, [r5, 0x36]
- ldr r0, _080CBAA0 @ =sub_80CB9C4
-_080CBA96:
- str r0, [r5, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080CBAA0: .4byte sub_80CB9C4
- thumb_func_end sub_80CBA28
-
- thumb_func_start sub_80CBAA4
-sub_80CBAA4: @ 80CBAA4
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080CBABE
- adds r0, r4, 0
- movs r1, 0
- bl sub_8078764
- ldr r0, _080CBAE4 @ =gBattleAnimArgs
- ldrh r0, [r0, 0x4]
- strh r0, [r4, 0x30]
-_080CBABE:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- ldrh r1, [r4, 0x30]
- muls r0, r1
- strh r0, [r4, 0x26]
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080CBADE
- adds r0, r4, 0
- bl move_anim_8072740
-_080CBADE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CBAE4: .4byte gBattleAnimArgs
- thumb_func_end sub_80CBAA4
- thumb_func_start sub_80CBAE8
-sub_80CBAE8: @ 80CBAE8
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r1, 0
- bl sub_8078764
- ldr r4, _080CBB30 @ =gBattleAnimPlayerMonIndex
- ldrb r0, [r4]
- movs r1, 0
- bl sub_8077ABC
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r0, [r4]
- movs r1, 0x1
- bl sub_8077ABC
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _080CBB34 @ =gBattleAnimEnemyMonIndex
- ldrb r1, [r0]
- movs r0, 0x2
- eors r0, r1
- ldrb r4, [r4]
- cmp r0, r4
- bne _080CBB38
- strh r6, [r5, 0x3A]
- adds r0, r2, 0
- adds r0, 0xA
- strh r0, [r5, 0x3C]
- adds r0, r5, 0
- movs r1, 0x3C
- bl sub_80CB7EC
- movs r0, 0x1
- b _080CBB4A
- .align 2, 0
-_080CBB30: .4byte gBattleAnimPlayerMonIndex
-_080CBB34: .4byte gBattleAnimEnemyMonIndex
-_080CBB38:
- strh r6, [r5, 0x3A]
- adds r0, r2, 0
- adds r0, 0xA
- strh r0, [r5, 0x3C]
- adds r0, r5, 0
- movs r1, 0x3C
- bl sub_80CB7EC
- movs r0, 0x3
-_080CBB4A:
- strh r0, [r5, 0x34]
- movs r0, 0x3C
- strh r0, [r5, 0x36]
- ldr r0, _080CBB5C @ =sub_80CBB60
- str r0, [r5, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080CBB5C: .4byte sub_80CBB60
- thumb_func_end sub_80CBAE8
- thumb_func_start sub_80CBB60
-sub_80CBB60: @ 80CBB60
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- lsls r0, 7
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- bl __divsi3
- ldrh r1, [r4, 0x2E]
- adds r1, r0
- movs r5, 0
- strh r1, [r4, 0x2E]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0x7F
- ble _080CBB8A
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
- strh r5, [r4, 0x2E]
-_080CBB8A:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x80
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x30
- ldrsh r2, [r4, r1]
- lsls r2, 3
- movs r1, 0x1E
- subs r1, r2
- lsls r1, 16
- asrs r1, 16
- bl Sin
- strh r0, [r4, 0x26]
- lsls r0, 16
- cmp r0, 0
- bne _080CBBBE
- movs r0, 0x3F
- bl sub_8076F98
- adds r1, r0, 0
- lsls r1, 24
- asrs r1, 24
- movs r0, 0x7D
- bl PlaySE12WithPanning
-_080CBBBE:
- adds r0, r4, 0
- bl sub_80CB814
- lsls r0, 24
- cmp r0, 0
- beq _080CBBE6
- strh r5, [r4, 0x26]
- strh r5, [r4, 0x2E]
- ldr r0, _080CBBEC @ =sub_80CB8B8
- str r0, [r4, 0x1C]
- movs r0, 0x40
- negs r0, r0
- bl sub_8076F98
- adds r1, r0, 0
- lsls r1, 24
- asrs r1, 24
- movs r0, 0x7D
- bl PlaySE12WithPanning
-_080CBBE6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080CBBEC: .4byte sub_80CB8B8
- thumb_func_end sub_80CBB60
-
- thumb_func_start sub_80CBBF0
-sub_80CBBF0: @ 80CBBF0
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080CBC84
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080CBC18
- ldr r0, _080CBC14 @ =gBattleAnimArgs
- ldrh r1, [r0, 0x2]
- strh r1, [r4, 0x30]
- movs r1, 0x78
- strh r1, [r4, 0x20]
- adds r5, r0, 0
- b _080CBC3A
- .align 2, 0
-_080CBC14: .4byte gBattleAnimArgs
-_080CBC18:
- ldr r0, _080CBC74 @ =gBattleAnimArgs
- movs r1, 0x2
- ldrsh r3, [r0, r1]
- adds r1, r3, 0
- subs r1, 0x20
- adds r2, r1, 0
- adds r5, r0, 0
- cmp r1, 0
- bge _080CBC2E
- adds r2, r3, 0
- adds r2, 0xDF
-_080CBC2E:
- asrs r0, r2, 8
- lsls r0, 8
- subs r0, r1, r0
- strh r0, [r4, 0x30]
- movs r0, 0x46
- strh r0, [r4, 0x20]
-_080CBC3A:
- ldrh r0, [r5]
- strh r0, [r4, 0x22]
- strh r0, [r4, 0x32]
- movs r0, 0x14
- strh r0, [r4, 0x36]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x3C
- bl Cos
- strh r0, [r4, 0x24]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x14
- bl Sin
- strh r0, [r4, 0x26]
- ldr r0, _080CBC78 @ =sub_80CBC8C
- str r0, [r4, 0x1C]
- ldrh r0, [r4, 0x30]
- subs r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xBE
- bhi _080CBC7C
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1F
- b _080CBC82
- .align 2, 0
-_080CBC74: .4byte gBattleAnimArgs
-_080CBC78: .4byte sub_80CBC8C
-_080CBC7C:
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1D
-_080CBC82:
- strb r0, [r1]
-_080CBC84:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80CBBF0
-
- thumb_func_start sub_80CBC8C
-sub_80CBC8C: @ 80CBC8C
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080CBC9E
- cmp r0, 0x1
- beq _080CBCCE
- b _080CBCEE
-_080CBC9E:
- ldrh r5, [r4, 0x32]
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0x4E
- ble _080CBCB6
- movs r0, 0x1
- strh r0, [r4, 0x34]
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
- b _080CBCEE
-_080CBCB6:
- movs r1, 0x36
- ldrsh r0, [r4, r1]
- movs r1, 0xA
- bl __divsi3
- adds r0, r5, r0
- strh r0, [r4, 0x32]
- ldrh r1, [r4, 0x36]
- adds r1, 0x3
- strh r1, [r4, 0x36]
- strh r0, [r4, 0x22]
- b _080CBCEE
-_080CBCCE:
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080CBCEE
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080CBCEE
- movs r0, 0
- strh r0, [r4, 0x2E]
- strh r0, [r4, 0x32]
- ldr r0, _080CBCF4 @ =sub_80CBCF8
- str r0, [r4, 0x1C]
-_080CBCEE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080CBCF4: .4byte sub_80CBCF8
- thumb_func_end sub_80CBC8C
thumb_func_start sub_80CBCF8
sub_80CBCF8: @ 80CBCF8
diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c
index 50bdb3005..85ad92d7f 100755
--- a/src/battle_anim_80CA710.c
+++ b/src/battle_anim_80CA710.c
@@ -6,6 +6,7 @@
#include "palette.h"
#include "rng.h"
#include "rom_8077ABC.h"
+#include "sound.h"
#include "sprite.h"
#include "task.h"
#include "trig.h"
@@ -32,6 +33,9 @@ void sub_80CB1A4(struct Sprite* sprite);
void sub_80CB298(struct Sprite* sprite);
void sub_80CB2D4(struct Sprite* sprite);
void sub_80CB710(struct Sprite* sprite);
+void sub_80CBB60(struct Sprite* sprite);
+void sub_80CBC8C(struct Sprite* sprite);
+void sub_80CBCF8(struct Sprite* sprite);
void sub_80787B0(struct Sprite *sprite, u8 a2);
void sub_8078764(struct Sprite *sprite, u8 a2);
@@ -42,6 +46,7 @@ void sub_80782D8(struct Sprite *sprite);
void sub_8078CC0(struct Sprite *sprite);
void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4);
u8 sub_8079ED4(u8 slot);
+s8 sub_8076F98(s8 a);
void move_anim_8074EE0(struct Sprite *sprite);
bool8 sub_8078718(struct Sprite *sprite);
@@ -1059,4 +1064,501 @@ void sub_80CB7EC(struct Sprite* sprite, s16 c)
sprite->data5 = a;
sprite->data6 = b;
sprite->data7 = c;
+}
+
+#ifdef NONMATCHING
+bool8 sub_80CB814(struct Sprite* sprite)
+{
+ s32 a = sprite->data5 >> 8;
+ s16 d = sprite->data5;
+ s16 b = sprite->data6 >> 8;
+ s16 e = sprite->data6;
+ s16 c = sprite->data7 >> 8;
+ s16 f = c & 0xFF;
+ if(!b)
+ {
+ b = ~32;
+ }
+ else if(b == 255)
+ {
+ b = 0x110;
+ }
+ sprite->pos1.x = ((b - a) * f / a ) + (((e - d) * f) / a);
+ sprite->pos2.y = d;
+ f++;
+ if(f != a)
+ {
+ sprite->data7 = (f << 8) | c;
+ return FALSE;
+ }
+ return TRUE;
+}
+#else
+__attribute__((naked))
+bool8 sub_80CB814(struct Sprite* sprite)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ mov r8, r0\n\
+ ldrh r0, [r0, 0x38]\n\
+ lsrs r1, r0, 8\n\
+ mov r10, r1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+ mov r1, r8\n\
+ ldrh r0, [r1, 0x3A]\n\
+ lsrs r2, r0, 8\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ ldrh r1, [r1, 0x3C]\n\
+ lsls r0, r1, 16\n\
+ asrs r0, 24\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+ movs r3, 0xFF\n\
+ ands r3, r1\n\
+ cmp r2, 0\n\
+ bne _080CB84E\n\
+ movs r2, 0x20\n\
+ negs r2, r2\n\
+ b _080CB856\n\
+_080CB84E:\n\
+ cmp r2, 0xFF\n\
+ bne _080CB856\n\
+ movs r2, 0x88\n\
+ lsls r2, 1\n\
+_080CB856:\n\
+ mov r0, r9\n\
+ subs r4, r0\n\
+ lsls r4, 16\n\
+ lsrs r4, 16\n\
+ mov r1, r10\n\
+ subs r0, r2, r1\n\
+ lsls r5, r3, 16\n\
+ asrs r5, 16\n\
+ muls r0, r5\n\
+ lsls r1, r6, 16\n\
+ asrs r7, r1, 16\n\
+ adds r1, r7, 0\n\
+ bl __divsi3\n\
+ adds r6, r0, 0\n\
+ lsls r4, 16\n\
+ asrs r4, 16\n\
+ adds r0, r4, 0\n\
+ muls r0, r5\n\
+ adds r1, r7, 0\n\
+ bl __divsi3\n\
+ add r6, r10\n\
+ mov r1, r8\n\
+ strh r6, [r1, 0x20]\n\
+ add r0, r9\n\
+ strh r0, [r1, 0x22]\n\
+ adds r5, 0x1\n\
+ lsls r5, 16\n\
+ lsrs r3, r5, 16\n\
+ asrs r5, 16\n\
+ cmp r5, r7\n\
+ beq _080CB8A8\n\
+ lsls r1, r7, 8\n\
+ lsls r0, r3, 16\n\
+ asrs r0, 16\n\
+ orrs r0, r1\n\
+ mov r1, r8\n\
+ strh r0, [r1, 0x3C]\n\
+ movs r0, 0\n\
+ b _080CB8AA\n\
+_080CB8A8:\n\
+ movs r0, 0x1\n\
+_080CB8AA:\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_80CB8B8(struct Sprite* sprite)
+{
+ if(sprite->data0 == 10)
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ }
+ sprite->data0++;
+ if(sprite->data0 > 50) move_anim_8072740(sprite);
+}
+
+#ifdef NONMATCHING
+void sub_80CB8E8(struct Sprite* sprite)
+{
+ int temp = ((sprite->data3 * 128) / sprite->data4) + sprite->data0;
+ int zero = 0;
+ sprite->data0 = temp;
+ if(sprite->data0 > 0x7F)
+ {
+ sprite->data1++;
+ sprite->data0 = zero;
+ }
+ sprite->pos2.y = Sin(sprite->data0 + 0x80, (sprite->data1 * 8) - 30);
+ if(!sub_80CB814(sprite))
+ {
+ sprite->pos2.y = zero;
+ sprite->data0 = zero;
+ sprite->callback = sub_80CB8B8;
+ }
+}
+#else
+__attribute__((naked))
+void sub_80CB8E8(struct Sprite* sprite)
+{
+ asm(".syntax unified\n\
+ push {r4,r5,lr}\n\
+ adds r4, r0, 0\n\
+ movs r1, 0x34\n\
+ ldrsh r0, [r4, r1]\n\
+ lsls r0, 7\n\
+ movs r2, 0x36\n\
+ ldrsh r1, [r4, r2]\n\
+ bl __divsi3\n\
+ ldrh r1, [r4, 0x2E]\n\
+ adds r1, r0\n\
+ movs r5, 0\n\
+ strh r1, [r4, 0x2E]\n\
+ lsls r1, 16\n\
+ asrs r1, 16\n\
+ cmp r1, 0x7F\n\
+ ble _080CB912\n\
+ ldrh r0, [r4, 0x30]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x30]\n\
+ strh r5, [r4, 0x2E]\n\
+_080CB912:\n\
+ ldrh r0, [r4, 0x2E]\n\
+ adds r0, 0x80\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ movs r1, 0x30\n\
+ ldrsh r2, [r4, r1]\n\
+ lsls r2, 3\n\
+ movs r1, 0x1E\n\
+ subs r1, r2\n\
+ lsls r1, 16\n\
+ asrs r1, 16\n\
+ bl Sin\n\
+ strh r0, [r4, 0x26]\n\
+ adds r0, r4, 0\n\
+ bl sub_80CB814\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080CB942\n\
+ strh r5, [r4, 0x26]\n\
+ strh r5, [r4, 0x2E]\n\
+ ldr r0, _080CB948 @ =sub_80CB8B8\n\
+ str r0, [r4, 0x1C]\n\
+_080CB942:\n\
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080CB948: .4byte sub_80CB8B8\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_80CB94C(struct Sprite* sprite)
+{
+ s16 e1;
+ s16 e2;
+ sub_80787B0(sprite, 0);
+ e1 = sub_8077ABC(gBattleAnimEnemyMonIndex, 0);
+ e2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 1);
+ if((gBattleAnimPlayerMonIndex ^ 2) == gBattleAnimEnemyMonIndex)
+ {
+ sprite->data6 = e1;
+ sprite->data7 = e2 + 10;
+ sub_80CB7EC(sprite, 0x3C);
+ sprite->data3 = 1;
+ }
+ else
+ {
+ sprite->data6 = e1;
+ sprite->data7 = e2 + 10;
+ sub_80CB7EC(sprite, 0x3C);
+ sprite->data3 = 3;
+ }
+ sprite->data4 = 0x3C;
+ sprite->callback = sub_80CB8E8;
+}
+
+void sub_80CB9C4(struct Sprite* sprite)
+{
+ int zero;
+ sprite->data0 += ((sprite->data3 * 128) / sprite->data4);
+ zero = 0;
+ if(sprite->data0 > 0x7F)
+ {
+ sprite->data1++;
+ sprite->data0 = zero;
+ }
+ sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8);
+ if(sub_80CB814(sprite))
+ {
+ sprite->pos2.y = zero;
+ sprite->data0 = zero;
+ move_anim_8072740(sprite);
+ }
+}
+
+void sub_80CBA28(struct Sprite* sprite)
+{
+ s16 e = sub_8077ABC(gBattleAnimEnemyMonIndex, 1);
+ if(GetBankSide(gBattleAnimEnemyMonIndex) == 0)
+ {
+ sprite->data6 = 0;
+ sprite->data7 = e + 10;
+ sub_80CB7EC(sprite, 0x28);
+ sprite->data3 = 3;
+ sprite->data4 = 0x3C;
+ sprite->callback = sub_80CB8E8;
+ }
+ else
+ {
+ sprite->data6 = 255;
+ sprite->data7 = e + 10;
+ if(IsContest()) sprite->data6 = 0;
+ sub_80CB7EC(sprite, 0x28);
+ sprite->data3 = 3;
+ sprite->data4 = 0x3C;
+ sprite->callback = sub_80CB9C4;
+ }
+}
+
+void sub_80CBAA4(struct Sprite* sprite)
+{
+ if(sprite->data0 == 0)
+ {
+ sub_8078764(sprite, 0);
+ sprite->data1 = gBattleAnimArgs[2];
+ }
+ sprite->data0++;
+ sprite->pos2.y = sprite->data1 * sprite->data0;
+ if(sprite->animEnded) move_anim_8072740(sprite);
+}
+
+void sub_80CBAE8(struct Sprite* sprite)
+{
+ s16 p1;
+ s16 p2;
+ sub_8078764(sprite, 0);
+ p1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 0);
+ p2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 1);
+ if((gBattleAnimEnemyMonIndex ^ 2) == gBattleAnimPlayerMonIndex)
+ {
+ sprite->data6 = p1;
+ sprite->data7 = p2 + 10;
+ sub_80CB7EC(sprite, 0x3c);
+ sprite->data3 = 1;
+ }
+ else
+ {
+ sprite->data6 = p1;
+ sprite->data7 = p2 + 10;
+ sub_80CB7EC(sprite, 0x3c);
+ sprite->data3 = 3;
+ }
+ sprite->data4 = 0x3C;
+ sprite->callback = sub_80CBB60;
+}
+
+void sub_80CBB60(struct Sprite* sprite)
+{
+ int zero;
+ sprite->data0 += ((sprite->data3 * 128) / sprite->data4);
+ zero = 0;
+ if(sprite->data0 > 0x7F)
+ {
+ sprite->data1++;
+ sprite->data0 = zero;
+ }
+ sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8);
+ if(sprite->pos2.y == 0)
+ {
+ PlaySE12WithPanning(0x7D, sub_8076F98(0x3F));
+ }
+ if(sub_80CB814(sprite))
+ {
+ sprite->pos2.y = 0;
+ sprite->data0 = 0;
+ sprite->callback = sub_80CB8B8;
+ PlaySE12WithPanning(0x7D, sub_8076F98(-0x40));
+ }
+}
+
+#ifdef NONMATCHING
+void sub_80CBBF0(struct Sprite* sprite)
+{
+ int a;
+ int b;
+ if(sprite->data0 == 0)
+ {
+ if(!IsContest())
+ {
+ sprite->data1 = gBattleAnimArgs[1];
+ sprite->pos1.x = 0x78;
+ }
+ else
+ {
+ a = gBattleAnimArgs[1] - 32;
+ b = a;
+ if(a < 0)
+ {
+ b += gBattleAnimArgs[1] + 0xDF;
+ }
+ sprite->data1 = b - a;
+ sprite->pos1.x = 0x46;
+
+ }
+ sprite->pos1.y = gBattleAnimArgs[0];
+ sprite->data2 = gBattleAnimArgs[0];
+ sprite->data4 = 20;
+ sprite->pos2.x = Cos(sprite->data1, 0x3C);
+ sprite->pos2.y = Sin(sprite->data1, 20);
+ sprite->callback = sub_80CBC8C;
+ if((sprite->data1 - 1) <= 0xBE)
+ {
+ sprite->subpriority = 30;
+ }
+ else
+ {
+ sprite->subpriority = 28;
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_80CBBF0(struct Sprite* sprite)
+{
+ asm(".syntax unified\n\
+ push {r4,r5,lr}\n\
+ adds r4, r0, 0\n\
+ movs r1, 0x2E\n\
+ ldrsh r0, [r4, r1]\n\
+ cmp r0, 0\n\
+ bne _080CBC84\n\
+ bl IsContest\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _080CBC18\n\
+ ldr r0, _080CBC14 @ =gBattleAnimArgs\n\
+ ldrh r1, [r0, 0x2]\n\
+ strh r1, [r4, 0x30]\n\
+ movs r1, 0x78\n\
+ strh r1, [r4, 0x20]\n\
+ adds r5, r0, 0\n\
+ b _080CBC3A\n\
+ .align 2, 0\n\
+_080CBC14: .4byte gBattleAnimArgs\n\
+_080CBC18:\n\
+ ldr r0, _080CBC74 @ =gBattleAnimArgs\n\
+ movs r1, 0x2\n\
+ ldrsh r3, [r0, r1]\n\
+ adds r1, r3, 0\n\
+ subs r1, 0x20\n\
+ adds r2, r1, 0\n\
+ adds r5, r0, 0\n\
+ cmp r1, 0\n\
+ bge _080CBC2E\n\
+ adds r2, r3, 0\n\
+ adds r2, 0xDF\n\
+_080CBC2E:\n\
+ asrs r0, r2, 8\n\
+ lsls r0, 8\n\
+ subs r0, r1, r0\n\
+ strh r0, [r4, 0x30]\n\
+ movs r0, 0x46\n\
+ strh r0, [r4, 0x20]\n\
+_080CBC3A:\n\
+ ldrh r0, [r5]\n\
+ strh r0, [r4, 0x22]\n\
+ strh r0, [r4, 0x32]\n\
+ movs r0, 0x14\n\
+ strh r0, [r4, 0x36]\n\
+ movs r1, 0x30\n\
+ ldrsh r0, [r4, r1]\n\
+ movs r1, 0x3C\n\
+ bl Cos\n\
+ strh r0, [r4, 0x24]\n\
+ movs r1, 0x30\n\
+ ldrsh r0, [r4, r1]\n\
+ movs r1, 0x14\n\
+ bl Sin\n\
+ strh r0, [r4, 0x26]\n\
+ ldr r0, _080CBC78 @ =sub_80CBC8C\n\
+ str r0, [r4, 0x1C]\n\
+ ldrh r0, [r4, 0x30]\n\
+ subs r0, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0xBE\n\
+ bhi _080CBC7C\n\
+ adds r1, r4, 0\n\
+ adds r1, 0x43\n\
+ movs r0, 0x1F\n\
+ b _080CBC82\n\
+ .align 2, 0\n\
+_080CBC74: .4byte gBattleAnimArgs\n\
+_080CBC78: .4byte sub_80CBC8C\n\
+_080CBC7C:\n\
+ adds r1, r4, 0\n\
+ adds r1, 0x43\n\
+ movs r0, 0x1D\n\
+_080CBC82:\n\
+ strb r0, [r1]\n\
+_080CBC84:\n\
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_80CBC8C(struct Sprite* sprite)
+{
+ switch(sprite->data3)
+ {
+ case 0:
+ {
+ if(sprite->data2 > 0x4E)
+ {
+ sprite->data3 = 1;
+ StartSpriteAffineAnim(sprite, 1);
+ break;
+ }
+ else
+ {
+ sprite->data2 += sprite->data4 / 10;
+ sprite->data4 += 3;
+ sprite->pos1.y = sprite->data2;
+ break;
+ }
+ }
+ case 1:
+ {
+ if(sprite->data3 && sprite->affineAnimEnded)
+ {
+ sprite->data0 = 0;
+ sprite->data2 = 0;
+ sprite->callback = sub_80CBCF8;
+ }
+ break;
+ }
+ }
} \ No newline at end of file