summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDizzyEggg <jajkodizzy@wp.pl>2018-10-07 12:32:20 +0200
committerDizzyEggg <jajkodizzy@wp.pl>2018-10-07 12:32:20 +0200
commit8c834b9ae8eccaf6a95583e632f2007715271cd9 (patch)
tree69fd9d824fe8ea1e4fabd03598d1ec9f00450051
parent54fc92bc92e78d172be51f7d11b4d746e46f8a7e (diff)
battle anim 80a5c6c decompiled
-rw-r--r--asm/battle_anim_80A5C6C.s4856
-rw-r--r--asm/battle_anim_80FE840.s64
-rw-r--r--asm/battle_anim_815A0D4.s4
-rw-r--r--data/battle_anim_80FE840.s14
-rw-r--r--include/battle_anim.h16
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle_anim.c8
-rw-r--r--src/battle_anim_80A5C6C.c1742
-rw-r--r--sym_ewram.txt9
9 files changed, 1788 insertions, 4926 deletions
diff --git a/asm/battle_anim_80A5C6C.s b/asm/battle_anim_80A5C6C.s
deleted file mode 100644
index 1bb3c7d9b..000000000
--- a/asm/battle_anim_80A5C6C.s
+++ /dev/null
@@ -1,4856 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start sub_80A6934
-sub_80A6934: @ 80A6934
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimLinear
- lsls r0, 24
- cmp r0, 0
- bne _080A6960
- ldrh r0, [r4, 0x3A]
- ldrh r1, [r4, 0x3C]
- adds r0, r1
- strh r0, [r4, 0x3C]
- lsls r0, 16
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x24]
- adds r0, r1
- strh r0, [r4, 0x24]
- movs r0, 0
- b _080A6962
-_080A6960:
- movs r0, 0x1
-_080A6962:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80A6934
-
- thumb_func_start oamt_add_pos2_onto_pos1
-oamt_add_pos2_onto_pos1: @ 80A6968
- ldrh r1, [r0, 0x24]
- ldrh r2, [r0, 0x20]
- adds r1, r2
- movs r2, 0
- strh r1, [r0, 0x20]
- ldrh r1, [r0, 0x26]
- ldrh r3, [r0, 0x22]
- adds r1, r3
- strh r1, [r0, 0x22]
- strh r2, [r0, 0x24]
- strh r2, [r0, 0x26]
- bx lr
- thumb_func_end oamt_add_pos2_onto_pos1
-
- thumb_func_start sub_80A6980
-sub_80A6980: @ 80A6980
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r1, 24
- cmp r1, 0
- bne _080A69A8
- ldr r4, =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0
- bl GetBattlerSpriteCoord2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x1
- bl GetBattlerSpriteCoord2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
-_080A69A8:
- ldr r4, =gBattleAnimArgs
- movs r0, 0
- ldrsh r1, [r4, r0]
- adds r0, r5, 0
- bl sub_80A6864
- ldrh r0, [r4, 0x2]
- ldrh r1, [r5, 0x22]
- adds r0, r1
- strh r0, [r5, 0x22]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A6980
-
- thumb_func_start sub_80A69CC
-sub_80A69CC: @ 80A69CC
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r1, 24
- cmp r1, 0
- bne _080A69F0
- ldr r4, =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0
- bl GetBattlerSpriteCoord2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x1
- b _080A6A04
- .pool
-_080A69F0:
- ldr r4, =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
-_080A6A04:
- bl GetBattlerSpriteCoord2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r4, =gBattleAnimArgs
- movs r0, 0
- ldrsh r1, [r4, r0]
- adds r0, r5, 0
- bl sub_80A6864
- ldrh r0, [r4, 0x2]
- ldrh r1, [r5, 0x22]
- adds r0, r1
- strh r0, [r5, 0x22]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A69CC
-
- thumb_func_start GetBattlerSide
-GetBattlerSide: @ 80A6A30
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gBattlerPositions
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- bx lr
- .pool
- thumb_func_end GetBattlerSide
-
- thumb_func_start GetBattlerPosition
-GetBattlerPosition: @ 80A6A44
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gBattlerPositions
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end GetBattlerPosition
-
- thumb_func_start GetBattlerAtPosition
-GetBattlerAtPosition: @ 80A6A54
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- movs r1, 0
- ldr r0, =gBattlersCount
- ldrb r2, [r0]
- cmp r1, r2
- bcs _080A6A7E
- ldr r4, =gBattlerPositions
- ldrb r0, [r4]
- cmp r0, r3
- beq _080A6A7E
-_080A6A6C:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r2
- bcs _080A6A7E
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, r3
- bne _080A6A6C
-_080A6A7E:
- adds r0, r1, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetBattlerAtPosition
-
- thumb_func_start IsBattlerSpritePresent
-IsBattlerSpritePresent: @ 80A6A90
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080A6ABC
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- cmp r0, r4
- beq _080A6B0A
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- cmp r0, r4
- beq _080A6B0A
- b _080A6B18
- .pool
-_080A6ABC:
- ldr r0, =gBattlerPositions
- adds r0, r4, r0
- ldrb r0, [r0]
- cmp r0, 0xFF
- beq _080A6B18
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080A6AF0
- ldr r1, =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gEnemyParty
- b _080A6AFE
- .pool
-_080A6AF0:
- ldr r1, =gBattlerPartyIndexes
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
-_080A6AFE:
- adds r0, r1
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _080A6B18
-_080A6B0A:
- movs r0, 0x1
- b _080A6B1A
- .pool
-_080A6B18:
- movs r0, 0
-_080A6B1A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end IsBattlerSpritePresent
-
- thumb_func_start IsDoubleBattle
-IsDoubleBattle: @ 80A6B20
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- bx lr
- .pool
- thumb_func_end IsDoubleBattle
-
- thumb_func_start sub_80A6B30
-sub_80A6B30: @ 80A6B30
- push {r4,lr}
- adds r4, r0, 0
- bl IsContest
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- beq _080A6B64
- ldr r0, =gUnknown_0202305C
- ldr r0, [r0]
- str r0, [r4]
- ldr r0, =gUnknown_02023060
- ldr r0, [r0]
- str r0, [r4, 0x4]
- movs r1, 0
- movs r0, 0xE
- strb r0, [r4, 0x8]
- movs r0, 0x1
- strb r0, [r4, 0x9]
- strh r1, [r4, 0xA]
- b _080A6B7E
- .pool
-_080A6B64:
- ldr r0, =gUnknown_0202305C
- ldr r0, [r0]
- str r0, [r4]
- ldr r0, =gUnknown_02023060
- ldr r0, [r0]
- str r0, [r4, 0x4]
- movs r0, 0x8
- strb r0, [r4, 0x8]
- movs r0, 0x1
- strb r0, [r4, 0x9]
- movs r0, 0x80
- lsls r0, 2
- strh r0, [r4, 0xA]
-_080A6B7E:
- strh r1, [r4, 0xC]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A6B30
-
- thumb_func_start sub_80A6B90
-sub_80A6B90: @ 80A6B90
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl IsContest
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- beq _080A6BC4
- ldr r0, =gUnknown_0202305C
- ldr r0, [r0]
- str r0, [r4]
- ldr r0, =gUnknown_02023060
- ldr r0, [r0]
- str r0, [r4, 0x4]
- movs r1, 0
- movs r0, 0xE
- strb r0, [r4, 0x8]
- movs r0, 0x1
- strb r0, [r4, 0x9]
- strh r1, [r4, 0xA]
- b _080A6BEA
- .pool
-_080A6BC4:
- cmp r5, 0x1
- bne _080A6BD0
- adds r0, r4, 0
- bl sub_80A6B30
- b _080A6BEC
-_080A6BD0:
- ldr r0, =gUnknown_0202305C
- ldr r0, [r0]
- str r0, [r4]
- ldr r0, =gUnknown_02023060
- ldr r0, [r0]
- str r0, [r4, 0x4]
- movs r0, 0x9
- strb r0, [r4, 0x8]
- movs r0, 0x2
- strb r0, [r4, 0x9]
- movs r0, 0xC0
- lsls r0, 2
- strh r0, [r4, 0xA]
-_080A6BEA:
- strh r1, [r4, 0xC]
-_080A6BEC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A6B90
-
- thumb_func_start sub_80A6BFC
-sub_80A6BFC: @ 80A6BFC
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, =gUnknown_0202305C
- ldr r0, [r0]
- str r0, [r4]
- ldr r0, =gUnknown_02023060
- ldr r0, [r0]
- str r0, [r4, 0x4]
- bl IsContest
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- beq _080A6C30
- movs r0, 0
- movs r1, 0xE
- strb r1, [r4, 0x8]
- movs r1, 0x1
- strb r1, [r4, 0x9]
- strh r0, [r4, 0xA]
- strh r0, [r4, 0xC]
- b _080A6C60
- .pool
-_080A6C30:
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl sub_80A8364
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x1
- bne _080A6C50
- movs r0, 0x8
- strb r0, [r4, 0x8]
- strb r1, [r4, 0x9]
- movs r0, 0x80
- lsls r0, 2
- b _080A6C5C
- .pool
-_080A6C50:
- movs r0, 0x9
- strb r0, [r4, 0x8]
- movs r0, 0x2
- strb r0, [r4, 0x9]
- movs r0, 0xC0
- lsls r0, 2
-_080A6C5C:
- strh r0, [r4, 0xA]
- strh r5, [r4, 0xC]
-_080A6C60:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80A6BFC
-
- thumb_func_start sub_80A6C68
-sub_80A6C68: @ 80A6C68
- push {lr}
- sub sp, 0x20
- adds r1, r0, 0
- add r0, sp, 0xC
- bl sub_80A6B90
- movs r0, 0
- str r0, [sp, 0x1C]
- add r0, sp, 0x1C
- ldr r1, [sp, 0xC]
- ldr r2, =0x05000800
- bl CpuSet
- add r0, sp, 0xC
- ldrb r0, [r0, 0x9]
- ldr r1, [sp, 0xC]
- movs r2, 0x80
- lsls r2, 6
- add r3, sp, 0xC
- ldrh r3, [r3, 0xA]
- bl LoadBgTiles
- add r0, sp, 0xC
- ldrb r0, [r0, 0x9]
- movs r1, 0x20
- str r1, [sp]
- movs r1, 0x40
- str r1, [sp, 0x4]
- movs r1, 0x11
- str r1, [sp, 0x8]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect
- add r0, sp, 0xC
- ldrb r0, [r0, 0x9]
- bl CopyBgTilemapBufferToVram
- add sp, 0x20
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A6C68
-
- thumb_func_start sub_80A6CC0
-sub_80A6CC0: @ 80A6CC0
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x4
- adds r5, r0, 0
- mov r8, r1
- adds r6, r2, 0
- movs r0, 0
- str r0, [sp]
- ldr r4, =gUnknown_0202305C
- ldr r1, [r4]
- ldr r2, =0x05000800
- mov r0, sp
- bl CpuSet
- ldr r1, [r4]
- mov r0, r8
- bl LZDecompressWram
- lsls r5, 24
- lsrs r5, 24
- ldr r1, [r4]
- movs r2, 0x80
- lsls r2, 6
- lsls r6, 16
- lsrs r6, 16
- adds r0, r5, 0
- adds r3, r6, 0
- bl LoadBgTiles
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A6CC0
-
- thumb_func_start sub_80A6D10
-sub_80A6D10: @ 80A6D10
- push {r4,r5,lr}
- sub sp, 0xC
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x20
- str r0, [sp]
- movs r0, 0x40
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80A6D10
-
- thumb_func_start sub_80A6D48
-sub_80A6D48: @ 80A6D48
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80A6D10
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl CopyBgTilemapBufferToVram
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80A6D48
-
- thumb_func_start sub_80A6D60
-sub_80A6D60: @ 80A6D60
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r2, 0
- ldrb r0, [r4, 0x9]
- bl sub_80A6D10
- bl IsContest
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080A6D86
- ldrb r0, [r4, 0x8]
- ldr r1, [r4, 0x4]
- lsls r3, r5, 24
- lsrs r3, 24
- movs r2, 0
- bl sub_80A4720
-_080A6D86:
- ldrb r0, [r4, 0x9]
- bl CopyBgTilemapBufferToVram
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80A6D60
-
- thumb_func_start sub_80A6D94
-sub_80A6D94: @ 80A6D94
- push {lr}
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080A6DA4
- movs r0, 0x2
- b _080A6DA6
-_080A6DA4:
- movs r0, 0x1
-_080A6DA6:
- pop {r1}
- bx r1
- thumb_func_end sub_80A6D94
-
- thumb_func_start sub_80A6DAC
-sub_80A6DAC: @ 80A6DAC
- push {lr}
- lsls r0, 24
- cmp r0, 0
- beq _080A6DBE
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080A6DD4
-_080A6DBE:
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl SetAnimBgAttribute
- movs r0, 0x3
- movs r1, 0x1
- movs r2, 0x1
- bl SetAnimBgAttribute
- b _080A6DE8
-_080A6DD4:
- movs r0, 0x3
- movs r1, 0
- movs r2, 0x1
- bl SetAnimBgAttribute
- movs r0, 0x3
- movs r1, 0x1
- movs r2, 0
- bl SetAnimBgAttribute
-_080A6DE8:
- pop {r0}
- bx r0
- thumb_func_end sub_80A6DAC
-
- thumb_func_start sub_80A6DEC
-sub_80A6DEC: @ 80A6DEC
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- adds r0, r4, 0
- bl sub_80A6E14
- ldr r1, =sub_80A65A8
- str r1, [r4, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A6DEC
-
- thumb_func_start sub_80A6E14
-sub_80A6E14: @ 80A6E14
- push {r4-r6,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0x32]
- ldrh r1, [r5, 0x30]
- subs r0, r1
- ldrh r4, [r5, 0x36]
- ldrh r1, [r5, 0x34]
- subs r4, r1
- lsls r4, 24
- lsrs r4, 16
- lsls r0, 24
- asrs r0, 16
- movs r2, 0x2E
- ldrsh r1, [r5, r2]
- bl __divsi3
- movs r6, 0
- strh r0, [r5, 0x30]
- lsls r4, 16
- asrs r4, 16
- movs r0, 0x2E
- ldrsh r1, [r5, r0]
- adds r0, r4, 0
- bl __divsi3
- strh r0, [r5, 0x32]
- strh r6, [r5, 0x36]
- strh r6, [r5, 0x34]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80A6E14
-
- thumb_func_start InitAnimLinearTranslation
-InitAnimLinearTranslation: @ 80A6E54
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- movs r0, 0x32
- ldrsh r1, [r7, r0]
- movs r2, 0x30
- ldrsh r0, [r7, r2]
- subs r1, r0
- movs r3, 0x36
- ldrsh r2, [r7, r3]
- movs r3, 0x34
- ldrsh r0, [r7, r3]
- subs r2, r0
- lsrs r0, r1, 31
- mov r8, r0
- lsrs r3, r2, 31
- mov r9, r3
- cmp r1, 0
- bge _080A6E80
- negs r1, r1
-_080A6E80:
- lsls r0, r1, 24
- lsrs r6, r0, 16
- adds r0, r2, 0
- cmp r0, 0
- bge _080A6E8C
- negs r0, r0
-_080A6E8C:
- lsls r0, 24
- lsrs r5, r0, 16
- movs r0, 0x2E
- ldrsh r4, [r7, r0]
- adds r0, r6, 0
- adds r1, r4, 0
- bl __divsi3
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r5, 0
- adds r1, r4, 0
- bl __divsi3
- lsls r0, 16
- lsrs r5, r0, 16
- mov r2, r8
- cmp r2, 0
- beq _080A6EB8
- movs r0, 0x1
- orrs r6, r0
- b _080A6EBC
-_080A6EB8:
- ldr r0, =0x0000fffe
- ands r6, r0
-_080A6EBC:
- mov r3, r9
- cmp r3, 0
- beq _080A6ECC
- movs r0, 0x1
- orrs r5, r0
- b _080A6ED0
- .pool
-_080A6ECC:
- ldr r0, =0x0000fffe
- ands r5, r0
-_080A6ED0:
- movs r0, 0
- strh r6, [r7, 0x30]
- strh r5, [r7, 0x32]
- strh r0, [r7, 0x36]
- strh r0, [r7, 0x34]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end InitAnimLinearTranslation
-
- thumb_func_start sub_80A6EEC
-sub_80A6EEC: @ 80A6EEC
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- adds r0, r4, 0
- bl InitAnimLinearTranslation
- ldr r1, =sub_80A6F98
- str r1, [r4, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A6EEC
-
- thumb_func_start sub_80A6F14
-sub_80A6F14: @ 80A6F14
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- adds r0, r4, 0
- bl InitAnimLinearTranslation
- ldr r1, =sub_80A6FB4
- str r1, [r4, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A6F14
-
- thumb_func_start TranslateAnimLinear
-TranslateAnimLinear: @ 80A6F3C
- push {r4-r6,lr}
- adds r2, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0
- bne _080A6F4C
- movs r0, 0x1
- b _080A6F90
-_080A6F4C:
- ldrh r1, [r2, 0x30]
- ldrh r4, [r2, 0x32]
- ldrh r6, [r2, 0x34]
- ldrh r5, [r2, 0x36]
- adds r0, r6, r1
- lsls r3, r0, 16
- lsrs r6, r3, 16
- adds r0, r5, r4
- lsls r0, 16
- lsrs r5, r0, 16
- movs r0, 0x1
- ands r1, r0
- cmp r1, 0
- beq _080A6F6E
- lsrs r0, r3, 24
- negs r0, r0
- b _080A6F70
-_080A6F6E:
- lsrs r0, r3, 24
-_080A6F70:
- strh r0, [r2, 0x24]
- movs r0, 0x1
- ands r4, r0
- cmp r4, 0
- beq _080A6F80
- lsrs r0, r5, 8
- negs r0, r0
- b _080A6F82
-_080A6F80:
- lsrs r0, r5, 8
-_080A6F82:
- strh r0, [r2, 0x26]
- strh r6, [r2, 0x34]
- strh r5, [r2, 0x36]
- ldrh r0, [r2, 0x2E]
- subs r0, 0x1
- strh r0, [r2, 0x2E]
- movs r0, 0
-_080A6F90:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end TranslateAnimLinear
-
- thumb_func_start sub_80A6F98
-sub_80A6F98: @ 80A6F98
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimLinear
- lsls r0, 24
- cmp r0, 0
- beq _080A6FAC
- adds r0, r4, 0
- bl SetCallbackToStoredInData6
-_080A6FAC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80A6F98
-
- thumb_func_start sub_80A6FB4
-sub_80A6FB4: @ 80A6FB4
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8039E9C
- adds r0, r4, 0
- bl TranslateAnimLinear
- lsls r0, 24
- cmp r0, 0
- beq _080A6FCE
- adds r0, r4, 0
- bl SetCallbackToStoredInData6
-_080A6FCE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80A6FB4
-
- thumb_func_start sub_80A6FD4
-sub_80A6FD4: @ 80A6FD4
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x32
- ldrsh r1, [r4, r0]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- subs r0, r1, r0
- cmp r0, 0
- bge _080A6FE8
- negs r0, r0
-_080A6FE8:
- lsls r0, 8
- movs r2, 0x2E
- ldrsh r1, [r4, r2]
- bl __divsi3
- strh r0, [r4, 0x2E]
- adds r0, r4, 0
- bl InitAnimLinearTranslation
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80A6FD4
-
- thumb_func_start sub_80A7000
-sub_80A7000: @ 80A7000
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- adds r0, r4, 0
- bl sub_80A6FD4
- ldr r1, =sub_80A6F98
- str r1, [r4, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A7000
-
- thumb_func_start sub_80A7028
-sub_80A7028: @ 80A7028
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- movs r0, 0x32
- ldrsh r1, [r7, r0]
- movs r2, 0x30
- ldrsh r0, [r7, r2]
- subs r1, r0
- movs r3, 0x36
- ldrsh r2, [r7, r3]
- movs r3, 0x34
- ldrsh r0, [r7, r3]
- subs r2, r0
- lsrs r0, r1, 31
- mov r8, r0
- lsrs r3, r2, 31
- mov r9, r3
- cmp r1, 0
- bge _080A7054
- negs r1, r1
-_080A7054:
- lsls r0, r1, 20
- lsrs r6, r0, 16
- adds r0, r2, 0
- cmp r0, 0
- bge _080A7060
- negs r0, r0
-_080A7060:
- lsls r0, 20
- lsrs r5, r0, 16
- movs r0, 0x2E
- ldrsh r4, [r7, r0]
- adds r0, r6, 0
- adds r1, r4, 0
- bl __divsi3
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r5, 0
- adds r1, r4, 0
- bl __divsi3
- lsls r0, 16
- lsrs r5, r0, 16
- mov r2, r8
- cmp r2, 0
- beq _080A708C
- movs r0, 0x1
- orrs r6, r0
- b _080A7090
-_080A708C:
- ldr r0, =0x0000fffe
- ands r6, r0
-_080A7090:
- mov r3, r9
- cmp r3, 0
- beq _080A70A0
- movs r0, 0x1
- orrs r5, r0
- b _080A70A4
- .pool
-_080A70A0:
- ldr r0, =0x0000fffe
- ands r5, r0
-_080A70A4:
- movs r0, 0
- strh r6, [r7, 0x30]
- strh r5, [r7, 0x32]
- strh r0, [r7, 0x36]
- strh r0, [r7, 0x34]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A7028
-
- thumb_func_start sub_80A70C0
-sub_80A70C0: @ 80A70C0
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- adds r0, r4, 0
- bl sub_80A7028
- ldr r1, =sub_80A7144
- str r1, [r4, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A70C0
-
- thumb_func_start sub_80A70E8
-sub_80A70E8: @ 80A70E8
- push {r4-r6,lr}
- adds r2, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0
- bne _080A70F8
- movs r0, 0x1
- b _080A713C
-_080A70F8:
- ldrh r1, [r2, 0x30]
- ldrh r4, [r2, 0x32]
- ldrh r6, [r2, 0x34]
- ldrh r5, [r2, 0x36]
- adds r0, r6, r1
- lsls r3, r0, 16
- lsrs r6, r3, 16
- adds r0, r5, r4
- lsls r0, 16
- lsrs r5, r0, 16
- movs r0, 0x1
- ands r1, r0
- cmp r1, 0
- beq _080A711A
- lsrs r0, r3, 20
- negs r0, r0
- b _080A711C
-_080A711A:
- lsrs r0, r3, 20
-_080A711C:
- strh r0, [r2, 0x24]
- movs r0, 0x1
- ands r4, r0
- cmp r4, 0
- beq _080A712C
- lsrs r0, r5, 4
- negs r0, r0
- b _080A712E
-_080A712C:
- lsrs r0, r5, 4
-_080A712E:
- strh r0, [r2, 0x26]
- strh r6, [r2, 0x34]
- strh r5, [r2, 0x36]
- ldrh r0, [r2, 0x2E]
- subs r0, 0x1
- strh r0, [r2, 0x2E]
- movs r0, 0
-_080A713C:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80A70E8
-
- thumb_func_start sub_80A7144
-sub_80A7144: @ 80A7144
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80A70E8
- lsls r0, 24
- cmp r0, 0
- beq _080A7158
- adds r0, r4, 0
- bl SetCallbackToStoredInData6
-_080A7158:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80A7144
-
- thumb_func_start sub_80A7160
-sub_80A7160: @ 80A7160
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x32
- ldrsh r1, [r4, r0]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- subs r0, r1, r0
- cmp r0, 0
- bge _080A7174
- negs r0, r0
-_080A7174:
- lsls r0, 4
- movs r2, 0x2E
- ldrsh r1, [r4, r2]
- bl __divsi3
- strh r0, [r4, 0x2E]
- adds r0, r4, 0
- bl sub_80A7028
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80A7160
-
- thumb_func_start sub_80A718C
-sub_80A718C: @ 80A718C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- adds r0, r4, 0
- bl sub_80A7160
- ldr r1, =sub_80A7144
- str r1, [r4, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A718C
-
- thumb_func_start obj_id_set_rotscale
-obj_id_set_rotscale: @ 80A71B4
- push {r4,r5,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 16
- lsls r3, 16
- lsrs r3, 16
- ldr r5, =0xffff0000
- lsls r2, 16
- lsrs r1, 16
- orrs r1, r2
- str r1, [sp]
- ldr r0, [sp, 0x4]
- ands r0, r5
- orrs r0, r3
- str r0, [sp, 0x4]
- bl sub_80A7238
- lsls r0, 24
- cmp r0, 0
- beq _080A71F0
- mov r0, sp
- ldrh r0, [r0]
- negs r0, r0
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [sp]
- ands r1, r5
- orrs r1, r0
- str r1, [sp]
-_080A71F0:
- ldr r1, =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x3]
- lsls r4, 26
- lsrs r4, 27
- add r5, sp, 0x8
- mov r0, sp
- adds r1, r5, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ObjAffineSet
- ldr r0, =gOamMatrices
- lsls r4, 3
- adds r4, r0
- ldrh r0, [r5]
- strh r0, [r4]
- ldrh r0, [r5, 0x2]
- strh r0, [r4, 0x2]
- ldrh r0, [r5, 0x4]
- strh r0, [r4, 0x4]
- ldrh r0, [r5, 0x6]
- strh r0, [r4, 0x6]
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end obj_id_set_rotscale
-
- thumb_func_start sub_80A7238
-sub_80A7238: @ 80A7238
- push {r4,lr}
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080A7268
- ldr r4, =gSprites
- movs r0, 0
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- movs r2, 0x32
- ldrsh r0, [r1, r2]
- cmp r0, 0xC9
- beq _080A7268
- movs r0, 0x1
- b _080A726A
- .pool
-_080A7268:
- movs r0, 0
-_080A726A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80A7238
-
- thumb_func_start sub_80A7270
-sub_80A7270: @ 80A7270
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- ldr r1, =gSprites
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r4, r0, r1
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r7, r0, 24
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080A72A6
- adds r0, r7, 0
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080A72B4
-_080A72A6:
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
-_080A72B4:
- ldr r1, =gSprites
- lsls r4, r6, 4
- adds r0, r4, r6
- lsls r0, 2
- adds r5, r0, r1
- movs r0, 0x3
- mov r1, r8
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x1]
- adds r2, r5, 0
- adds r2, 0x2C
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080A7312
- ldrb r0, [r5, 0x1]
- lsls r0, 30
- cmp r0, 0
- bne _080A7312
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- lsls r0, r7, 1
- adds r0, r7
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x6]
- movs r0, 0x1F
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r5, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x3]
-_080A7312:
- ldr r1, =gSprites
- adds r0, r4, r6
- lsls r0, 2
- adds r0, r1
- ldrb r3, [r0, 0x1]
- movs r1, 0x3
- orrs r3, r1
- strb r3, [r0, 0x1]
- lsrs r1, r3, 6
- ldrb r2, [r0, 0x3]
- lsrs r2, 6
- lsls r3, 30
- lsrs r3, 30
- bl CalcCenterToCornerVec
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A7270
-
- thumb_func_start sub_80A7344
-sub_80A7344: @ 80A7344
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r2, 0x80
- lsls r2, 1
- adds r0, r4, 0
- adds r1, r2, 0
- movs r3, 0
- bl obj_id_set_rotscale
- ldr r1, =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r2, [r0, 0x1]
- movs r1, 0x4
- negs r1, r1
- ands r1, r2
- movs r2, 0x1
- orrs r1, r2
- movs r2, 0xD
- negs r2, r2
- ands r1, r2
- strb r1, [r0, 0x1]
- adds r3, r0, 0
- adds r3, 0x2C
- ldrb r2, [r3]
- movs r1, 0x7F
- ands r1, r2
- strb r1, [r3]
- ldrb r3, [r0, 0x1]
- lsrs r1, r3, 6
- ldrb r2, [r0, 0x3]
- lsrs r2, 6
- lsls r3, 30
- lsrs r3, 30
- bl CalcCenterToCornerVec
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A7344
-
- thumb_func_start sub_80A73A0
-sub_80A73A0: @ 80A73A0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r2, r1, r2
- ldrb r0, [r2, 0x3]
- lsls r0, 26
- lsrs r0, 27
- ldr r1, =gOamMatrices
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x4]
- movs r3, 0x4
- ldrsh r0, [r0, r3]
- cmp r0, 0
- bge _080A73CC
- negs r0, r0
- lsls r0, 16
- lsrs r1, r0, 16
-_080A73CC:
- lsls r0, r1, 16
- asrs r0, 19
- strh r0, [r2, 0x26]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A73A0
-
- thumb_func_start sub_80A73E0
-sub_80A73E0: @ 80A73E0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- adds r4, r0, 0
- ldr r0, [sp, 0x28]
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 16
- lsrs r5, r2, 16
- lsls r3, 16
- lsrs r7, r3, 16
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldrb r0, [r4, 0x1]
- lsls r0, 30
- lsrs r0, 30
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080A7486
- adds r0, r4, 0
- adds r0, 0x2C
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
- cmp r6, 0
- beq _080A742E
- ldrb r3, [r4, 0x1]
- lsrs r1, r3, 6
- ldrb r2, [r4, 0x3]
- lsrs r2, 6
- lsls r3, 30
- lsrs r3, 30
- adds r0, r4, 0
- bl CalcCenterToCornerVec
-_080A742E:
- ldr r6, =0xffff0000
- lsls r0, r7, 16
- orrs r5, r0
- str r5, [sp]
- ldr r0, [sp, 0x4]
- ands r0, r6
- mov r1, r8
- orrs r0, r1
- str r0, [sp, 0x4]
- bl sub_80A7238
- lsls r0, 24
- cmp r0, 0
- beq _080A745C
- mov r0, sp
- ldrh r0, [r0]
- negs r0, r0
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [sp]
- ands r1, r6
- orrs r1, r0
- str r1, [sp]
-_080A745C:
- ldrb r4, [r4, 0x3]
- lsls r4, 26
- lsrs r4, 27
- add r5, sp, 0x8
- mov r0, sp
- adds r1, r5, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ObjAffineSet
- ldr r0, =gOamMatrices
- lsls r4, 3
- adds r4, r0
- ldrh r0, [r5]
- strh r0, [r4]
- ldrh r0, [r5, 0x2]
- strh r0, [r4, 0x2]
- ldrh r0, [r5, 0x4]
- strh r0, [r4, 0x4]
- ldrh r0, [r5, 0x6]
- strh r0, [r4, 0x6]
-_080A7486:
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A73E0
-
- thumb_func_start sub_80A749C
-sub_80A749C: @ 80A749C
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- movs r3, 0x80
- lsls r3, 1
- movs r0, 0
- str r0, [sp]
- adds r0, r4, 0
- movs r1, 0x1
- adds r2, r3, 0
- bl sub_80A73E0
- adds r2, r4, 0
- adds r2, 0x2C
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- ldrb r3, [r4, 0x1]
- lsrs r1, r3, 6
- ldrb r2, [r4, 0x3]
- lsrs r2, 6
- lsls r3, 30
- lsrs r3, 30
- adds r0, r4, 0
- bl CalcCenterToCornerVec
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80A749C
-
- thumb_func_start sub_80A74DC
-sub_80A74DC: @ 80A74DC
- push {lr}
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- bl ArcTan2
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end sub_80A74DC
-
- thumb_func_start sub_80A74F4
-sub_80A74F4: @ 80A74F4
- push {lr}
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- bl sub_80A74DC
- lsls r0, 16
- negs r0, r0
- lsrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end sub_80A74F4
-
- thumb_func_start sub_80A750C
-sub_80A750C: @ 80A750C
- push {r4-r7,lr}
- lsls r1, 24
- lsls r0, 20
- lsrs r0, 16
- cmp r1, 0
- bne _080A7588
- ldr r2, =gPlttBufferUnfaded
- ldr r1, =gPlttBufferFaded
- lsls r0, 1
- adds r4, r0, r1
- adds r5, r0, r2
- movs r6, 0xF
-_080A7524:
- ldr r0, [r5]
- lsls r2, r0, 27
- lsrs r2, 27
- lsls r1, r0, 22
- lsrs r1, 27
- adds r2, r1
- lsls r0, 17
- lsrs r0, 27
- adds r0, r2
- movs r1, 0x3
- bl __udivsi3
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1F
- ands r0, r1
- ldrb r1, [r4]
- movs r3, 0x20
- negs r3, r3
- adds r2, r3, 0
- ands r1, r2
- orrs r1, r0
- strb r1, [r4]
- lsls r3, r0, 5
- ldrh r1, [r4]
- ldr r7, =0xfffffc1f
- adds r2, r7, 0
- ands r1, r2
- orrs r1, r3
- strh r1, [r4]
- lsls r0, 2
- ldrb r1, [r4, 0x1]
- movs r3, 0x7D
- negs r3, r3
- adds r2, r3, 0
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x1]
- adds r4, 0x2
- adds r5, 0x2
- subs r6, 0x1
- cmp r6, 0
- bge _080A7524
- b _080A7598
- .pool
-_080A7588:
- lsls r1, r0, 1
- ldr r0, =gPlttBufferUnfaded
- adds r0, r1, r0
- ldr r2, =gPlttBufferFaded
- adds r1, r2
- ldr r2, =0x04000008
- bl CpuSet
-_080A7598:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A750C
-
- thumb_func_start sub_80A75AC
-sub_80A75AC: @ 80A75AC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r4, [sp, 0x28]
- ldr r5, [sp, 0x2C]
- ldr r6, [sp, 0x30]
- lsls r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- lsls r3, 24
- lsrs r3, 24
- mov r9, r3
- lsls r4, 24
- lsrs r4, 24
- mov r10, r4
- lsls r5, 24
- lsrs r5, 24
- str r5, [sp]
- lsls r6, 24
- lsrs r6, 24
- str r6, [sp, 0x4]
- movs r4, 0
- cmp r0, 0
- beq _080A7602
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080A75F6
- movs r4, 0xE
- b _080A7602
-_080A75F6:
- bl sub_80A6D94
- lsls r0, 24
- lsrs r0, 24
- movs r4, 0x1
- lsls r4, r0
-_080A7602:
- cmp r7, 0
- beq _080A7614
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- adds r1, r0, 0
- adds r1, 0x10
- movs r0, 0x1
- lsls r0, r1
- orrs r4, r0
-_080A7614:
- mov r0, r8
- cmp r0, 0
- beq _080A7628
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- adds r1, r0, 0
- adds r1, 0x10
- movs r0, 0x1
- lsls r0, r1
- orrs r4, r0
-_080A7628:
- mov r0, r9
- cmp r0, 0
- beq _080A764E
- ldr r6, =gBattleAnimAttacker
- ldrb r0, [r6]
- movs r5, 0x2
- eors r0, r5
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080A764E
- ldrb r0, [r6]
- eors r0, r5
- adds r1, r0, 0
- adds r1, 0x10
- movs r0, 0x1
- lsls r0, r1
- orrs r4, r0
-_080A764E:
- mov r0, r10
- cmp r0, 0
- beq _080A7674
- ldr r6, =gBattleAnimTarget
- ldrb r0, [r6]
- movs r5, 0x2
- eors r0, r5
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080A7674
- ldrb r0, [r6]
- eors r0, r5
- adds r1, r0, 0
- adds r1, 0x10
- movs r0, 0x1
- lsls r0, r1
- orrs r4, r0
-_080A7674:
- ldr r0, [sp]
- cmp r0, 0
- beq _080A769A
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080A7694
- movs r0, 0x80
- lsls r0, 1
- b _080A7698
- .pool
-_080A7694:
- movs r0, 0x80
- lsls r0, 7
-_080A7698:
- orrs r4, r0
-_080A769A:
- ldr r0, [sp, 0x4]
- cmp r0, 0
- beq _080A76B0
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080A76B0
- movs r0, 0x80
- lsls r0, 2
- orrs r4, r0
-_080A76B0:
- adds r0, r4, 0
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80A75AC
-
- thumb_func_start sub_80A76C4
-sub_80A76C4: @ 80A76C4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r7, r2, 24
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- movs r4, 0
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080A76F2
- cmp r5, 0
- beq _080A77A0
- movs r4, 0x80
- lsls r4, 11
- b _080A77A0
-_080A76F2:
- cmp r5, 0
- beq _080A771A
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080A771A
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x10
- movs r4, 0x1
- lsls r4, r0
-_080A771A:
- cmp r6, 0
- beq _080A7746
- movs r0, 0x2
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080A7746
- movs r0, 0x2
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- adds r1, 0x10
- movs r0, 0x1
- lsls r0, r1
- orrs r4, r0
-_080A7746:
- cmp r7, 0
- beq _080A7772
- movs r0, 0x1
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080A7772
- movs r0, 0x1
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- adds r1, 0x10
- movs r0, 0x1
- lsls r0, r1
- orrs r4, r0
-_080A7772:
- mov r0, r8
- cmp r0, 0
- beq _080A77A0
- movs r0, 0x3
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080A77A0
- movs r0, 0x3
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- adds r1, 0x10
- movs r0, 0x1
- lsls r0, r1
- orrs r4, r0
-_080A77A0:
- adds r0, r4, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80A76C4
-
- thumb_func_start sub_80A77AC
-sub_80A77AC: @ 80A77AC
- lsls r0, 24
- lsrs r0, 24
- bx lr
- thumb_func_end sub_80A77AC
-
- thumb_func_start sub_80A77B4
-sub_80A77B4: @ 80A77B4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_80A77B4
-
- thumb_func_start sub_80A77C8
-sub_80A77C8: @ 80A77C8
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080A7806
- ldr r2, =gBattleAnimArgs
- movs r3, 0x6
- ldrsh r0, [r2, r3]
- movs r1, 0
- cmp r0, 0
- bne _080A77E2
- movs r1, 0x1
-_080A77E2:
- movs r3, 0x4
- ldrsh r0, [r2, r3]
- cmp r0, 0
- bne _080A77F8
- adds r0, r4, 0
- bl sub_80A69CC
- b _080A77FE
- .pool
-_080A77F8:
- adds r0, r4, 0
- bl sub_80A6980
-_080A77FE:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _080A781A
-_080A7806:
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x30
- ands r0, r1
- cmp r0, 0
- beq _080A781A
- adds r0, r4, 0
- bl move_anim_8074EE0
-_080A781A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80A77C8
-
- thumb_func_start sub_80A7820
-sub_80A7820: @ 80A7820
- push {r4-r7,lr}
- adds r5, r0, 0
- ldr r6, =gBattleAnimArgs
- movs r1, 0xA
- ldrsh r0, [r6, r1]
- movs r1, 0xFF
- lsls r1, 8
- ands r0, r1
- movs r1, 0
- cmp r0, 0
- bne _080A7838
- movs r1, 0x1
-_080A7838:
- ldrb r0, [r6, 0xA]
- movs r7, 0x1
- cmp r0, 0
- bne _080A7842
- movs r7, 0x3
-_080A7842:
- adds r0, r5, 0
- bl sub_80A69CC
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080A785C
- ldrh r0, [r6, 0x4]
- negs r0, r0
- strh r0, [r6, 0x4]
-_080A785C:
- ldrh r0, [r6, 0x8]
- strh r0, [r5, 0x2E]
- ldr r4, =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x4]
- adds r0, r1
- strh r0, [r5, 0x32]
- ldrb r0, [r4]
- adds r1, r7, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r6, [r6, 0x6]
- adds r0, r6
- strh r0, [r5, 0x36]
- ldr r0, =sub_80A6EEC
- str r0, [r5, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A7820
-
- thumb_func_start sub_80A78AC
-sub_80A78AC: @ 80A78AC
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r1, 0x1
- bl sub_80A69CC
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080A78CC
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- negs r0, r0
- strh r0, [r1, 0x4]
-_080A78CC:
- ldr r4, =gBattleAnimArgs
- ldrh r0, [r4, 0x8]
- strh r0, [r6, 0x2E]
- ldr r5, =gBattleAnimTarget
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x4]
- adds r0, r1
- strh r0, [r6, 0x32]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x6]
- adds r0, r1
- strh r0, [r6, 0x36]
- ldrh r0, [r4, 0xA]
- strh r0, [r6, 0x38]
- adds r0, r6, 0
- bl sub_80A68D4
- ldr r0, =sub_80A791C
- str r0, [r6, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A78AC
-
- thumb_func_start sub_80A791C
-sub_80A791C: @ 80A791C
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimArc
- lsls r0, 24
- cmp r0, 0
- beq _080A7930
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080A7930:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80A791C
-
- thumb_func_start sub_80A7938
-sub_80A7938: @ 80A7938
- push {r4-r7,lr}
- adds r5, r0, 0
- ldr r0, =gBattleAnimArgs
- movs r2, 0xC
- ldrsh r1, [r0, r2]
- cmp r1, 0
- bne _080A7950
- movs r4, 0x1
- movs r7, 0x3
- b _080A7954
- .pool
-_080A7950:
- movs r4, 0
- movs r7, 0x1
-_080A7954:
- movs r1, 0xA
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080A796C
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80A69CC
- ldr r0, =gBattleAnimAttacker
- b _080A7976
- .pool
-_080A796C:
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80A6980
- ldr r0, =gBattleAnimTarget
-_080A7976:
- ldrb r6, [r0]
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080A798E
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- negs r0, r0
- strh r0, [r1, 0x4]
-_080A798E:
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80A6980
- ldr r4, =gBattleAnimArgs
- ldrh r0, [r4, 0x8]
- strh r0, [r5, 0x2E]
- adds r0, r6, 0
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r2, [r4, 0x4]
- adds r0, r2
- strh r0, [r5, 0x32]
- adds r0, r6, 0
- adds r1, r7, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r4, [r4, 0x6]
- adds r0, r4
- strh r0, [r5, 0x36]
- ldr r0, =sub_80A6EEC
- str r0, [r5, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A7938
-
- thumb_func_start duplicate_obj_of_side_rel2move_in_transparent_mode
-duplicate_obj_of_side_rel2move_in_transparent_mode: @ 80A79E8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xFF
- beq _080A7A52
- movs r6, 0
- ldr r2, =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r1, r0, 2
-_080A7A04:
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r4, r0, r2
- adds r5, r4, 0
- adds r5, 0x3E
- ldrb r0, [r5]
- lsls r0, 31
- cmp r0, 0
- bne _080A7A48
- adds r0, r4, 0
- adds r1, r2
- movs r2, 0x44
- bl memcpy
- ldrb r1, [r4, 0x1]
- movs r2, 0xD
- negs r2, r2
- adds r0, r2, 0
- ands r1, r0
- movs r0, 0x4
- orrs r1, r0
- strb r1, [r4, 0x1]
- ldrb r0, [r5]
- adds r2, 0x8
- adds r1, r2, 0
- ands r0, r1
- strb r0, [r5]
- lsls r0, r6, 16
- asrs r0, 16
- b _080A7A56
- .pool
-_080A7A48:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x3F
- bls _080A7A04
-_080A7A52:
- movs r0, 0x1
- negs r0, r0
-_080A7A56:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end duplicate_obj_of_side_rel2move_in_transparent_mode
-
- thumb_func_start obj_delete_but_dont_free_vram
-obj_delete_but_dont_free_vram: @ 80A7A5C
- push {lr}
- adds r3, r0, 0
- adds r3, 0x3F
- ldrb r1, [r3]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r3]
- bl DestroySprite
- pop {r0}
- bx r0
- thumb_func_end obj_delete_but_dont_free_vram
-
- thumb_func_start sub_80A7A74
-sub_80A7A74: @ 80A7A74
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r6, 0
- movs r3, 0
- ldr r2, =gBattleAnimArgs
- movs r0, 0x4
- ldrsh r1, [r2, r0]
- movs r4, 0
- ldrsh r0, [r2, r4]
- cmp r1, r0
- ble _080A7A8E
- movs r3, 0x1
-_080A7A8E:
- cmp r1, r0
- bge _080A7A94
- ldr r3, =0x0000ffff
-_080A7A94:
- movs r0, 0x6
- ldrsh r1, [r2, r0]
- movs r4, 0x2
- ldrsh r0, [r2, r4]
- cmp r1, r0
- ble _080A7AA2
- movs r6, 0x1
-_080A7AA2:
- cmp r1, r0
- bge _080A7AA8
- ldr r6, =0x0000ffff
-_080A7AA8:
- ldr r0, =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- movs r1, 0
- strh r1, [r4, 0x8]
- ldrh r0, [r2, 0x8]
- strh r0, [r4, 0xA]
- strh r1, [r4, 0xC]
- ldrh r0, [r2]
- strh r0, [r4, 0xE]
- ldrh r0, [r2, 0x2]
- strh r0, [r4, 0x10]
- strh r3, [r4, 0x12]
- strh r6, [r4, 0x14]
- ldrh r0, [r2, 0x4]
- strh r0, [r4, 0x16]
- ldrh r0, [r2, 0x6]
- strh r0, [r4, 0x18]
- ldrh r1, [r2, 0x2]
- lsls r1, 8
- ldrh r0, [r2]
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- ldr r0, =sub_80A7AFC
- str r0, [r4]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A7A74
-
- thumb_func_start sub_80A7AFC
-sub_80A7AFC: @ 80A7AFC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- cmp r0, r1
- ble _080A7B90
- movs r0, 0
- strh r0, [r4, 0x8]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080A7B4C
- ldrh r2, [r4, 0xE]
- movs r3, 0xE
- ldrsh r1, [r4, r3]
- movs r3, 0x16
- ldrsh r0, [r4, r3]
- cmp r1, r0
- beq _080A7B60
- ldrh r0, [r4, 0x12]
- adds r0, r2, r0
- strh r0, [r4, 0xE]
- b _080A7B60
- .pool
-_080A7B4C:
- ldrh r2, [r4, 0x10]
- movs r0, 0x10
- ldrsh r1, [r4, r0]
- movs r3, 0x18
- ldrsh r0, [r4, r3]
- cmp r1, r0
- beq _080A7B60
- ldrh r0, [r4, 0x14]
- adds r0, r2, r0
- strh r0, [r4, 0x10]
-_080A7B60:
- ldrh r1, [r4, 0x10]
- lsls r1, 8
- ldrh r0, [r4, 0xE]
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- movs r0, 0xE
- ldrsh r1, [r4, r0]
- movs r2, 0x16
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _080A7B90
- movs r3, 0x10
- ldrsh r1, [r4, r3]
- movs r2, 0x18
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _080A7B90
- adds r0, r5, 0
- bl DestroyAnimVisualTask
-_080A7B90:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80A7AFC
-
- thumb_func_start AnimTask_BlendMonInAndOut
-AnimTask_BlendMonInAndOut: @ 80A7B98
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gBattleAnimArgs
- ldrb r0, [r0]
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0xFF
- bne _080A7BBC
- adds r0, r4, 0
- bl DestroyAnimVisualTask
- b _080A7BE2
- .pool
-_080A7BBC:
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r2, =gSprites
- lsls r1, r3, 4
- adds r1, r3
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x5]
- lsrs r1, 4
- lsls r1, 4
- ldr r3, =0x00000101
- adds r2, r3, 0
- adds r1, r2
- strh r1, [r0, 0x8]
- bl sub_80A7BF4
-_080A7BE2:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end AnimTask_BlendMonInAndOut
-
- thumb_func_start sub_80A7BF4
-sub_80A7BF4: @ 80A7BF4
- ldr r3, =gBattleAnimArgs
- ldrh r1, [r3, 0x2]
- movs r2, 0
- strh r1, [r0, 0xA]
- strh r2, [r0, 0xC]
- ldrh r1, [r3, 0x4]
- strh r1, [r0, 0xE]
- strh r2, [r0, 0x10]
- ldrh r1, [r3, 0x6]
- strh r1, [r0, 0x12]
- strh r2, [r0, 0x14]
- ldrh r1, [r3, 0x8]
- strh r1, [r0, 0x16]
- ldr r1, =sub_80A7C1C
- str r1, [r0]
- bx lr
- .pool
- thumb_func_end sub_80A7BF4
-
- thumb_func_start sub_80A7C1C
-sub_80A7C1C: @ 80A7C1C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- ldrh r0, [r4, 0x10]
- adds r0, 0x1
- strh r0, [r4, 0x10]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x12
- ldrsh r1, [r4, r2]
- cmp r0, r1
- blt _080A7CAC
- movs r0, 0
- strh r0, [r4, 0x10]
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080A7C78
- ldrh r2, [r4, 0xC]
- adds r2, 0x1
- strh r2, [r4, 0xC]
- ldrh r0, [r4, 0x8]
- lsls r2, 24
- lsrs r2, 24
- ldrh r3, [r4, 0xA]
- movs r1, 0xF
- bl BlendPalette
- movs r2, 0xC
- ldrsh r1, [r4, r2]
- movs r2, 0xE
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _080A7CAC
- movs r0, 0x1
- strh r0, [r4, 0x14]
- b _080A7CAC
- .pool
-_080A7C78:
- ldrh r2, [r4, 0xC]
- subs r2, 0x1
- strh r2, [r4, 0xC]
- ldrh r0, [r4, 0x8]
- lsls r2, 24
- lsrs r2, 24
- ldrh r3, [r4, 0xA]
- movs r1, 0xF
- bl BlendPalette
- movs r0, 0xC
- ldrsh r1, [r4, r0]
- cmp r1, 0
- bne _080A7CAC
- ldrh r0, [r4, 0x16]
- subs r0, 0x1
- strh r0, [r4, 0x16]
- lsls r0, 16
- cmp r0, 0
- beq _080A7CA6
- strh r1, [r4, 0x10]
- strh r1, [r4, 0x14]
- b _080A7CAC
-_080A7CA6:
- adds r0, r5, 0
- bl DestroyAnimVisualTask
-_080A7CAC:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80A7C1C
-
- thumb_func_start sub_80A7CB4
-sub_80A7CB4: @ 80A7CB4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gBattleAnimArgs
- ldrh r0, [r0]
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- bne _080A7CD8
- adds r0, r4, 0
- bl DestroyAnimVisualTask
- b _080A7CEE
- .pool
-_080A7CD8:
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- lsls r1, r2, 4
- ldr r2, =0x00000101
- adds r1, r2
- strh r1, [r0, 0x8]
- bl sub_80A7BF4
-_080A7CEE:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A7CB4
-
- thumb_func_start sub_80A7CFC
-sub_80A7CFC: @ 80A7CFC
- push {r4,lr}
- adds r3, r0, 0
- adds r4, r1, 0
- lsls r4, 24
- lsrs r4, 24
- movs r1, 0
- strh r1, [r3, 0x16]
- strh r1, [r3, 0x18]
- strh r1, [r3, 0x1A]
- strh r4, [r3, 0x26]
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r3, 0x1C]
- strh r0, [r3, 0x1E]
- strh r1, [r3, 0x20]
- adds r0, r3, 0
- adds r0, 0x22
- adds r3, 0x24
- adds r1, r3, 0
- bl sub_80A8048
- adds r0, r4, 0
- movs r1, 0
- bl sub_80A7270
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80A7CFC
-
- thumb_func_start sub_80A7D34
-sub_80A7D34: @ 80A7D34
- push {r4-r6,lr}
- adds r4, r0, 0
- ldr r5, =gUnknown_02038444
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- movs r2, 0x24
- ldrsh r1, [r4, r2]
- bl sub_80A8050
- movs r3, 0x16
- ldrsh r1, [r4, r3]
- lsls r1, 3
- adds r1, r0, r1
- str r1, [r5]
- movs r6, 0
- ldrsh r2, [r1, r6]
- ldr r0, =0x00007ffe
- cmp r2, r0
- beq _080A7DDC
- cmp r2, r0
- bgt _080A7E3C
- subs r0, 0x1
- cmp r2, r0
- beq _080A7DE2
- ldrb r0, [r1, 0x5]
- cmp r0, 0
- bne _080A7D82
- ldrh r0, [r1]
- strh r0, [r4, 0x1C]
- ldrh r0, [r1, 0x2]
- strh r0, [r4, 0x1E]
- ldrb r0, [r1, 0x4]
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x16]
- adds r0, 0x1
- strh r0, [r4, 0x16]
- adds r0, r1, 0
- adds r0, 0x8
- str r0, [r5]
-_080A7D82:
- ldr r1, [r5]
- ldrh r0, [r1]
- ldrh r2, [r4, 0x1C]
- adds r0, r2
- strh r0, [r4, 0x1C]
- ldrh r0, [r1, 0x2]
- ldrh r3, [r4, 0x1E]
- adds r0, r3
- strh r0, [r4, 0x1E]
- ldrh r0, [r4, 0x20]
- ldrb r1, [r1, 0x4]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x26]
- lsls r0, 24
- lsrs r0, 24
- movs r6, 0x1C
- ldrsh r1, [r4, r6]
- movs r3, 0x1E
- ldrsh r2, [r4, r3]
- ldrh r3, [r4, 0x20]
- bl obj_id_set_rotscale
- ldrh r0, [r4, 0x26]
- lsls r0, 24
- lsrs r0, 24
- bl sub_80A7E6C
- ldrh r0, [r4, 0x18]
- adds r0, 0x1
- strh r0, [r4, 0x18]
- lsls r0, 16
- asrs r0, 16
- ldr r1, [r5]
- ldrb r1, [r1, 0x5]
- cmp r0, r1
- blt _080A7E62
- movs r0, 0
- strh r0, [r4, 0x18]
- b _080A7E34
- .pool
-_080A7DDC:
- ldrh r0, [r1, 0x2]
- strh r0, [r4, 0x16]
- b _080A7E62
-_080A7DE2:
- ldrh r2, [r1, 0x2]
- movs r6, 0x2
- ldrsh r0, [r1, r6]
- cmp r0, 0
- beq _080A7E34
- ldrh r1, [r4, 0x1A]
- movs r3, 0x1A
- ldrsh r0, [r4, r3]
- cmp r0, 0
- beq _080A7E02
- subs r0, r1, 0x1
- strh r0, [r4, 0x1A]
- lsls r0, 16
- cmp r0, 0
- bne _080A7E04
- b _080A7E34
-_080A7E02:
- strh r2, [r4, 0x1A]
-_080A7E04:
- movs r6, 0x16
- ldrsh r0, [r4, r6]
- cmp r0, 0
- beq _080A7E62
- ldr r3, =gUnknown_02038444
- ldr r5, =0x00007ffd
-_080A7E10:
- ldrh r2, [r4, 0x16]
- subs r1, r2, 0x1
- strh r1, [r4, 0x16]
- ldr r0, [r3]
- subs r0, 0x8
- str r0, [r3]
- movs r6, 0
- ldrsh r0, [r0, r6]
- cmp r0, r5
- beq _080A7E60
- lsls r0, r1, 16
- cmp r0, 0
- bne _080A7E10
- b _080A7E62
- .pool
-_080A7E34:
- ldrh r0, [r4, 0x16]
- adds r0, 0x1
- strh r0, [r4, 0x16]
- b _080A7E62
-_080A7E3C:
- ldr r2, =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strh r1, [r0, 0x26]
- ldrh r0, [r4, 0x26]
- lsls r0, 24
- lsrs r0, 24
- bl sub_80A7344
- movs r0, 0
- b _080A7E64
- .pool
-_080A7E60:
- strh r2, [r4, 0x16]
-_080A7E62:
- movs r0, 0x1
-_080A7E64:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80A7D34
-
- thumb_func_start sub_80A7E6C
-sub_80A7E6C: @ 80A7E6C
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_80A7F18
- lsls r0, 16
- lsrs r0, 15
- movs r1, 0x40
- subs r5, r1, r0
- ldr r1, =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r4, r0, r1
- ldrb r1, [r4, 0x3]
- lsls r1, 26
- lsrs r1, 27
- lsls r0, r5, 8
- ldr r2, =gOamMatrices
- lsls r1, 3
- adds r1, r2
- movs r2, 0x6
- ldrsh r1, [r1, r2]
- bl __divsi3
- cmp r0, 0x80
- ble _080A7EA8
- movs r0, 0x80
-_080A7EA8:
- subs r0, r5, r0
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- strh r0, [r4, 0x26]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A7E6C
-
- thumb_func_start sub_80A7EC0
-sub_80A7EC0: @ 80A7EC0
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r0, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, 24
- lsrs r0, 24
- bl sub_80A7F18
- lsls r0, 16
- lsrs r0, 15
- movs r1, 0x40
- subs r5, r1, r0
- ldr r1, =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r4, r0, r1
- ldrb r1, [r4, 0x3]
- lsls r1, 26
- lsrs r1, 27
- lsls r0, r5, 8
- ldr r2, =gOamMatrices
- lsls r1, 3
- adds r1, r2
- movs r2, 0x6
- ldrsh r1, [r1, r2]
- bl __divsi3
- cmp r0, 0x80
- ble _080A7F00
- movs r0, 0x80
-_080A7F00:
- subs r0, r5, r0
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- strh r0, [r4, 0x26]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A7EC0
-
- thumb_func_start sub_80A7F18
-sub_80A7F18: @ 80A7F18
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x2E]
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0
- ldr r1, =gBattlerSpriteIds
- ldr r7, =0x00000181
- ldr r0, =gBattleMonForms
- adds r6, r5, r0
-_080A7F38:
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, r2
- beq _080A7F42
- b _080A8034
-_080A7F42:
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080A7F78
- ldr r0, =gContestResources
- ldr r0, [r0]
- ldr r0, [r0, 0x18]
- ldrh r2, [r0]
- ldr r1, =gMonBackPicCoords
- lsls r0, r2, 2
- adds r0, r1
- ldrb r0, [r0, 0x1]
- b _080A8042
- .pool
-_080A7F78:
- lsls r0, r4, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080A7FD8
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0]
- lsls r0, r5, 2
- adds r1, r0, r1
- ldrh r0, [r1, 0x2]
- cmp r0, 0
- bne _080A7FC0
- ldr r1, =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r2, r0, 16
- b _080A7FC2
- .pool
-_080A7FC0:
- ldrh r2, [r1, 0x2]
-_080A7FC2:
- cmp r2, r7
- bne _080A7FD0
- ldr r0, =gCastformBackSpriteYCoords
- b _080A8018
- .pool
-_080A7FD0:
- ldr r0, =gMonBackPicCoords
- b _080A8026
- .pool
-_080A7FD8:
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0]
- lsls r0, r5, 2
- adds r1, r0, r1
- ldrh r0, [r1, 0x2]
- cmp r0, 0
- bne _080A8010
- ldr r1, =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r2, r0, 16
- b _080A8012
- .pool
-_080A8010:
- ldrh r2, [r1, 0x2]
-_080A8012:
- cmp r2, r7
- bne _080A8024
- ldr r0, =gCastformElevations
-_080A8018:
- ldrb r1, [r6]
- adds r1, r0
- ldrb r0, [r1]
- b _080A8042
- .pool
-_080A8024:
- ldr r0, =gMonFrontPicCoords
-_080A8026:
- lsls r1, r2, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- b _080A8042
- .pool
-_080A8034:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x3
- bhi _080A8040
- b _080A7F38
-_080A8040:
- movs r0, 0x40
-_080A8042:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80A7F18
-
- thumb_func_start sub_80A8048
-sub_80A8048: @ 80A8048
- strh r2, [r0]
- asrs r2, 16
- strh r2, [r1]
- bx lr
- thumb_func_end sub_80A8048
-
- thumb_func_start sub_80A8050
-sub_80A8050: @ 80A8050
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 16
- orrs r0, r1
- bx lr
- thumb_func_end sub_80A8050
-
- thumb_func_start sub_80A805C
-sub_80A805C: @ 80A805C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- mov r8, r0
- adds r5, r3, 0
- ldr r0, [sp, 0x14]
- ldr r4, [sp, 0x18]
- ldr r6, [sp, 0x1C]
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 16
- lsrs r2, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r0, 16
- lsrs r0, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r6, 16
- lsrs r6, 16
- mov r3, r8
- strh r6, [r3, 0x18]
- strh r1, [r3, 0x26]
- strh r2, [r3, 0x1A]
- strh r5, [r3, 0x1C]
- strh r0, [r3, 0x22]
- strh r4, [r3, 0x24]
- lsls r0, 16
- asrs r0, 16
- lsls r2, 16
- asrs r2, 16
- subs r0, r2
- adds r1, r6, 0
- bl __divsi3
- mov r1, r8
- strh r0, [r1, 0x1E]
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- subs r4, r5
- adds r0, r4, 0
- adds r1, r6, 0
- bl __divsi3
- mov r3, r8
- strh r0, [r3, 0x20]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80A805C
-
- thumb_func_start sub_80A80C8
-sub_80A80C8: @ 80A80C8
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x18]
- movs r2, 0x18
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080A80DA
- movs r0, 0
- b _080A8136
-_080A80DA:
- subs r0, r1, 0x1
- strh r0, [r4, 0x18]
- lsls r0, 16
- cmp r0, 0
- beq _080A80F4
- ldrh r0, [r4, 0x1E]
- ldrh r3, [r4, 0x1A]
- adds r0, r3
- strh r0, [r4, 0x1A]
- ldrh r0, [r4, 0x20]
- ldrh r1, [r4, 0x1C]
- adds r0, r1
- b _080A80FA
-_080A80F4:
- ldrh r0, [r4, 0x22]
- strh r0, [r4, 0x1A]
- ldrh r0, [r4, 0x24]
-_080A80FA:
- strh r0, [r4, 0x1C]
- ldrh r0, [r4, 0x26]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x1A
- ldrsh r1, [r4, r2]
- movs r3, 0x1C
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl obj_id_set_rotscale
- movs r0, 0x18
- ldrsh r3, [r4, r0]
- cmp r3, 0
- beq _080A8124
- ldrh r0, [r4, 0x26]
- lsls r0, 24
- lsrs r0, 24
- bl sub_80A7E6C
- b _080A8134
-_080A8124:
- ldr r2, =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r3, [r0, 0x26]
-_080A8134:
- ldrb r0, [r4, 0x18]
-_080A8136:
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A80C8
-
- thumb_func_start AnimTask_GetFrustrationPowerLevel
-AnimTask_GetFrustrationPowerLevel: @ 80A8140
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gAnimFriendship
- ldrb r0, [r0]
- movs r1, 0
- cmp r0, 0x1E
- bls _080A815E
- movs r1, 0x1
- cmp r0, 0x64
- bls _080A815E
- movs r1, 0x3
- cmp r0, 0xC8
- bhi _080A815E
- movs r1, 0x2
-_080A815E:
- ldr r0, =gBattleAnimArgs
- strh r1, [r0, 0xE]
- adds r0, r2, 0
- bl DestroyAnimVisualTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end AnimTask_GetFrustrationPowerLevel
-
- thumb_func_start sub_80A8174
-sub_80A8174: @ 80A8174
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r7, r4, 0
- ldr r6, =gBattleAnimTarget
- ldrb r0, [r6]
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080A81B4
- ldr r2, =gSprites
- ldr r1, =gBattlerSpriteIds
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r0, 0x3
- adds r2, r4, 0
- ands r2, r0
- lsls r2, 2
- ldrb r3, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x5]
-_080A81B4:
- ldr r0, =gBattleAnimAttacker
- mov r8, r0
- ldrb r0, [r0]
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080A81EC
- ldr r2, =gSprites
- ldr r1, =gBattlerSpriteIds
- mov r3, r8
- ldrb r0, [r3]
- adds r0, r1
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r0, 0x3
- adds r2, r4, 0
- ands r2, r0
- lsls r2, 2
- ldrb r3, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x5]
-_080A81EC:
- ldrb r0, [r6]
- movs r5, 0x2
- eors r0, r5
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080A8224
- ldr r2, =gSprites
- ldr r1, =gBattlerSpriteIds
- ldrb r0, [r6]
- eors r0, r5
- adds r0, r1
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r0, 0x3
- adds r2, r4, 0
- ands r2, r0
- lsls r2, 2
- ldrb r3, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x5]
-_080A8224:
- mov r1, r8
- ldrb r0, [r1]
- eors r0, r5
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080A825C
- ldr r2, =gSprites
- ldr r1, =gBattlerSpriteIds
- mov r3, r8
- ldrb r0, [r3]
- eors r0, r5
- adds r0, r1
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r0, 0x3
- ands r7, r0
- lsls r3, r7, 2
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
-_080A825C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A8174
-
- thumb_func_start sub_80A8278
-sub_80A8278: @ 80A8278
- push {r4-r6,lr}
- movs r5, 0
- ldr r0, =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- bge _080A82D2
- ldr r6, =gSprites
-_080A8286:
- lsls r0, r5, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080A82C8
- adds r0, r4, 0
- bl sub_80A82E4
- ldr r3, =gBattlerSpriteIds
- adds r3, r5, r3
- ldrb r2, [r3]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r6
- adds r1, 0x43
- strb r0, [r1]
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r2, [r0, 0x5]
- movs r3, 0xD
- negs r3, r3
- adds r1, r3, 0
- ands r2, r1
- movs r1, 0x8
- orrs r2, r1
- strb r2, [r0, 0x5]
-_080A82C8:
- adds r5, 0x1
- ldr r0, =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _080A8286
-_080A82D2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A8278
-
- thumb_func_start sub_80A82E4
-sub_80A82E4: @ 80A82E4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080A8300
- cmp r4, 0x2
- bne _080A82FC
- movs r0, 0x1E
- b _080A8320
-_080A82FC:
- movs r0, 0x28
- b _080A8320
-_080A8300:
- adds r0, r4, 0
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1E
- cmp r0, 0
- beq _080A831E
- movs r1, 0x14
- cmp r0, 0x2
- beq _080A831E
- movs r1, 0x32
- cmp r0, 0x1
- bne _080A831E
- movs r1, 0x28
-_080A831E:
- adds r0, r1, 0
-_080A8320:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80A82E4
-
- thumb_func_start sub_80A8328
-sub_80A8328: @ 80A8328
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080A8344
- movs r0, 0x2
- b _080A835C
-_080A8344:
- cmp r4, 0
- beq _080A834C
- cmp r4, 0x3
- bne _080A8350
-_080A834C:
- movs r0, 0x2
- b _080A8352
-_080A8350:
- movs r0, 0x1
-_080A8352:
- movs r1, 0x4
- bl sub_8118140
- lsls r0, 24
- lsrs r0, 24
-_080A835C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80A8328
-
- thumb_func_start sub_80A8364
-sub_80A8364: @ 80A8364
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080A838A
- adds r0, r4, 0
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _080A8386
- cmp r0, 0x3
- bne _080A838A
-_080A8386:
- movs r0, 0x2
- b _080A838C
-_080A838A:
- movs r0, 0x1
-_080A838C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80A8364
-
- thumb_func_start sub_80A8394
-sub_80A8394: @ 80A8394
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- ldr r4, [sp, 0x30]
- ldr r5, [sp, 0x34]
- ldr r6, [sp, 0x38]
- mov r8, r6
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- lsls r2, 24
- lsrs r7, r2, 24
- lsls r3, 16
- lsrs r3, 16
- mov r10, r3
- lsls r4, 16
- lsrs r4, 16
- str r4, [sp, 0x4]
- lsls r5, 24
- lsrs r5, 24
- str r5, [sp, 0x8]
- lsls r0, r7, 3
- ldr r1, =gUnknown_08525FC0
- adds r0, r1
- bl LoadSpriteSheet
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0xC]
- ldr r1, =gUnknown_08525F90
- lsls r0, r7, 1
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x2]
- bl AllocSpritePalette
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, =gMonSpritesGfxPtr
- ldr r0, [r4]
- cmp r0, 0
- beq _080A8412
- movs r1, 0xBE
- lsls r1, 1
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- bne _080A8412
- movs r0, 0x80
- lsls r0, 6
- bl AllocZeroed
- ldr r1, [r4]
- movs r2, 0xBE
- lsls r2, 1
- adds r1, r2
- str r0, [r1]
-_080A8412:
- mov r3, r9
- cmp r3, 0
- bne _080A84B0
- adds r0, r6, 0
- ldr r1, [sp, 0x3C]
- mov r2, r8
- bl GetFrontSpritePalFromSpeciesAndPersonality
- lsls r1, r5, 20
- movs r2, 0x80
- lsls r2, 17
- adds r1, r2
- lsrs r1, 16
- movs r2, 0x20
- bl LoadCompressedPalette
- ldr r3, [sp, 0x44]
- cmp r3, 0x1
- beq _080A845E
- ldr r0, [sp, 0x40]
- lsls r1, r0, 24
- lsrs r1, 24
- movs r0, 0x5
- bl sub_80688F8
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080A845E
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0]
- ldr r2, [sp, 0x40]
- lsls r0, r2, 2
- adds r0, r1
- ldrh r0, [r0, 0x2]
- cmp r0, 0
- beq _080A8488
-_080A845E:
- lsls r0, r6, 3
- ldr r1, =gMonFrontPicTable
- adds r0, r1
- ldr r1, =gMonSpritesGfxPtr
- ldr r1, [r1]
- movs r3, 0xBE
- lsls r3, 1
- adds r1, r3
- ldr r1, [r1]
- movs r2, 0x1
- b _080A850A
- .pool
-_080A8488:
- lsls r0, r6, 3
- ldr r1, =gMonFrontPicTable
- adds r0, r1
- ldr r1, =gMonSpritesGfxPtr
- ldr r1, [r1]
- movs r2, 0xBE
- lsls r2, 1
- adds r1, r2
- ldr r1, [r1]
- movs r2, 0x1
- str r2, [sp]
- adds r2, r6, 0
- mov r3, r8
- bl LoadSpecialPokePic_2
- b _080A8540
- .pool
-_080A84B0:
- adds r0, r6, 0
- ldr r1, [sp, 0x3C]
- mov r2, r8
- bl GetFrontSpritePalFromSpeciesAndPersonality
- lsls r1, r5, 20
- movs r3, 0x80
- lsls r3, 17
- adds r1, r3
- lsrs r1, 16
- movs r2, 0x20
- bl LoadCompressedPalette
- ldr r0, [sp, 0x44]
- cmp r0, 0x1
- beq _080A84F6
- ldr r2, [sp, 0x40]
- lsls r1, r2, 24
- lsrs r1, 24
- movs r0, 0x5
- bl sub_80688F8
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080A84F6
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0]
- ldr r3, [sp, 0x40]
- lsls r0, r3, 2
- adds r0, r1
- ldrh r2, [r0, 0x2]
- cmp r2, 0
- beq _080A8524
-_080A84F6:
- lsls r0, r6, 3
- ldr r1, =gMonBackPicTable
- adds r0, r1
- ldr r1, =gMonSpritesGfxPtr
- ldr r1, [r1]
- movs r2, 0xBE
- lsls r2, 1
- adds r1, r2
- ldr r1, [r1]
- movs r2, 0
-_080A850A:
- str r2, [sp]
- adds r2, r6, 0
- mov r3, r8
- bl LoadSpecialPokePic_DontHandleDeoxys
- b _080A8540
- .pool
-_080A8524:
- lsls r0, r6, 3
- ldr r1, =gMonBackPicTable
- adds r0, r1
- ldr r1, =gMonSpritesGfxPtr
- ldr r1, [r1]
- movs r3, 0xBE
- lsls r3, 1
- adds r1, r3
- ldr r1, [r1]
- str r2, [sp]
- adds r2, r6, 0
- mov r3, r8
- bl LoadSpecialPokePic_2
-_080A8540:
- ldr r5, =gMonSpritesGfxPtr
- ldr r0, [r5]
- movs r4, 0xBE
- lsls r4, 1
- adds r0, r4
- ldr r0, [r0]
- ldr r2, [sp, 0xC]
- lsls r1, r2, 5
- ldr r3, =0x06010000
- adds r1, r3
- movs r2, 0x80
- lsls r2, 4
- movs r3, 0x1
- bl RequestDma3Copy
- ldr r0, [r5]
- adds r0, r4
- ldr r0, [r0]
- bl Free
- ldr r0, [r5]
- adds r0, r4
- movs r1, 0
- str r1, [r0]
- mov r0, r9
- cmp r0, 0
- bne _080A85A0
- lsls r0, r7, 1
- adds r0, r7
- lsls r0, 3
- ldr r1, =gUnknown_08525F90
- adds r0, r1
- mov r2, r10
- lsls r1, r2, 16
- asrs r1, 16
- ldr r3, =gMonFrontPicCoords
- b _080A85B2
- .pool
-_080A85A0:
- lsls r0, r7, 1
- adds r0, r7
- lsls r0, 3
- ldr r1, =gUnknown_08525F90
- adds r0, r1
- mov r2, r10
- lsls r1, r2, 16
- asrs r1, 16
- ldr r3, =gMonBackPicCoords
-_080A85B2:
- lsls r2, r6, 2
- adds r2, r3
- ldrb r2, [r2, 0x1]
- ldr r3, [sp, 0x4]
- adds r2, r3
- lsls r2, 16
- asrs r2, 16
- ldr r3, [sp, 0x8]
- bl CreateSprite
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080A85EE
- ldr r3, =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r1, r3, 0
- adds r1, 0x10
- adds r1, r0, r1
- ldr r2, =gUnknown_082FF6C0
- str r2, [r1]
- adds r0, r3
- movs r1, 0
- bl StartSpriteAffineAnim
-_080A85EE:
- adds r0, r4, 0
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A8394
-
- thumb_func_start sub_80A8610
-sub_80A8610: @ 80A8610
- push {lr}
- bl DestroySpriteAndFreeResources
- pop {r0}
- bx r0
- thumb_func_end sub_80A8610
-
- thumb_func_start sub_80A861C
-sub_80A861C: @ 80A861C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080A86C4
- ldr r0, =gContestResources
- ldr r0, [r0]
- ldr r2, [r0, 0x18]
- ldrb r1, [r2, 0x4]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080A8654
- ldrh r7, [r2, 0x2]
- ldr r2, [r2, 0x10]
- b _080A8658
- .pool
-_080A8654:
- ldrh r7, [r2]
- ldr r2, [r2, 0x8]
-_080A8658:
- cmp r7, 0xC9
- bne _080A86A4
- movs r0, 0xC0
- lsls r0, 18
- ands r0, r2
- lsrs r0, 18
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r2
- lsrs r1, 12
- orrs r0, r1
- movs r1, 0xC0
- lsls r1, 2
- ands r1, r2
- lsrs r1, 6
- orrs r0, r1
- movs r1, 0x3
- ands r1, r2
- orrs r0, r1
- movs r1, 0x1C
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _080A8690
- movs r0, 0xC9
- b _080A869A
-_080A8690:
- movs r1, 0xCE
- lsls r1, 1
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
-_080A869A:
- lsls r1, r0, 2
- ldr r0, =gMonBackPicCoords
- b _080A8864
- .pool
-_080A86A4:
- ldr r0, =0x00000181
- cmp r7, r0
- bne _080A86AC
- b _080A8834
-_080A86AC:
- movs r0, 0xCE
- lsls r0, 1
- cmp r7, r0
- bhi _080A877C
- lsls r1, r7, 2
- ldr r0, =gMonBackPicCoords
- b _080A8864
- .pool
-_080A86C4:
- mov r0, r8
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080A8790
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r0, [r0]
- mov r1, r8
- lsls r2, r1, 2
- adds r1, r2, r0
- ldrh r0, [r1, 0x2]
- cmp r0, 0
- bne _080A871C
- ldr r0, =gBattlerPartyIndexes
- mov r1, r8
- lsls r4, r1, 1
- adds r4, r0
- ldrh r0, [r4]
- movs r6, 0x64
- muls r0, r6
- ldr r5, =gPlayerParty
- adds r0, r5
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- ldrh r0, [r4]
- muls r0, r6
- adds r0, r5
- movs r1, 0
- bl GetMonData
- adds r2, r0, 0
- b _080A8724
- .pool
-_080A871C:
- ldrh r7, [r1, 0x2]
- ldr r0, =gTransformedPersonalities
- adds r0, r2, r0
- ldr r2, [r0]
-_080A8724:
- cmp r7, 0xC9
- bne _080A8774
- movs r0, 0xC0
- lsls r0, 18
- ands r0, r2
- lsrs r0, 18
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r2
- lsrs r1, 12
- orrs r0, r1
- movs r1, 0xC0
- lsls r1, 2
- ands r1, r2
- lsrs r1, 6
- orrs r0, r1
- movs r1, 0x3
- ands r1, r2
- orrs r0, r1
- movs r1, 0x1C
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _080A8760
- movs r0, 0xC9
- b _080A876A
- .pool
-_080A8760:
- movs r1, 0xCE
- lsls r1, 1
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
-_080A876A:
- lsls r1, r0, 2
- ldr r0, =gMonBackPicCoords
- b _080A8864
- .pool
-_080A8774:
- movs r0, 0xCE
- lsls r0, 1
- cmp r7, r0
- bls _080A8784
-_080A877C:
- ldr r4, =gMonBackPicCoords
- b _080A8866
- .pool
-_080A8784:
- lsls r1, r7, 2
- ldr r0, =gMonBackPicCoords
- b _080A8864
- .pool
-_080A8790:
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r0, [r0]
- mov r1, r8
- lsls r2, r1, 2
- adds r1, r2, r0
- ldrh r0, [r1, 0x2]
- cmp r0, 0
- bne _080A87DC
- ldr r0, =gBattlerPartyIndexes
- mov r1, r8
- lsls r4, r1, 1
- adds r4, r0
- ldrh r0, [r4]
- movs r6, 0x64
- muls r0, r6
- ldr r5, =gEnemyParty
- adds r0, r5
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- ldrh r0, [r4]
- muls r0, r6
- adds r0, r5
- movs r1, 0
- bl GetMonData
- adds r2, r0, 0
- b _080A87E4
- .pool
-_080A87DC:
- ldrh r7, [r1, 0x2]
- ldr r0, =gTransformedPersonalities
- adds r0, r2, r0
- ldr r2, [r0]
-_080A87E4:
- cmp r7, 0xC9
- bne _080A882E
- movs r0, 0xC0
- lsls r0, 18
- ands r0, r2
- lsrs r0, 18
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r2
- lsrs r1, 12
- orrs r0, r1
- movs r1, 0xC0
- lsls r1, 2
- ands r1, r2
- lsrs r1, 6
- orrs r0, r1
- movs r1, 0x3
- ands r1, r2
- orrs r0, r1
- movs r1, 0x1C
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _080A8820
- movs r0, 0xC9
- b _080A882A
- .pool
-_080A8820:
- movs r1, 0xCE
- lsls r1, 1
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
-_080A882A:
- lsls r1, r0, 2
- b _080A8862
-_080A882E:
- ldr r0, =0x00000181
- cmp r7, r0
- bne _080A8850
-_080A8834:
- ldr r0, =gBattleMonForms
- add r0, r8
- ldrb r0, [r0]
- lsls r0, 2
- ldr r1, =gCastformFrontSpriteCoords
- adds r4, r0, r1
- b _080A8866
- .pool
-_080A8850:
- movs r0, 0xCE
- lsls r0, 1
- cmp r7, r0
- bls _080A8860
- ldr r4, =gMonFrontPicCoords
- b _080A8866
- .pool
-_080A8860:
- lsls r1, r7, 2
-_080A8862:
- ldr r0, =gMonFrontPicCoords
-_080A8864:
- adds r4, r1, r0
-_080A8866:
- mov r0, r9
- cmp r0, 0x6
- bhi _080A8916
- lsls r0, 2
- ldr r1, =_080A8880
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080A8880:
- .4byte _080A889C
- .4byte _080A88A6
- .4byte _080A88D2
- .4byte _080A88EA
- .4byte _080A88AE
- .4byte _080A88C0
- .4byte _080A8902
-_080A889C:
- ldrb r1, [r4]
- movs r0, 0xF
- ands r0, r1
- lsls r0, 3
- b _080A8918
-_080A88A6:
- ldrb r0, [r4]
- lsrs r0, 4
- lsls r0, 3
- b _080A8918
-_080A88AE:
- mov r0, r8
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r4]
- lsrs r1, 4
- b _080A88E4
-_080A88C0:
- mov r0, r8
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r4]
- lsrs r1, 4
- b _080A88FC
-_080A88D2:
- mov r0, r8
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrb r2, [r4]
- movs r1, 0xF
- ands r1, r2
-_080A88E4:
- lsls r1, 2
- subs r0, r1
- b _080A8918
-_080A88EA:
- mov r0, r8
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrb r2, [r4]
- movs r1, 0xF
- ands r1, r2
-_080A88FC:
- lsls r1, 2
- adds r0, r1
- b _080A8918
-_080A8902:
- mov r0, r8
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1F
- ldrb r1, [r4, 0x1]
- subs r0, r1
- b _080A8918
-_080A8916:
- movs r0, 0
-_080A8918:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80A861C
-
- thumb_func_start sub_80A8924
-sub_80A8924: @ 80A8924
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r9, r2
- mov r10, r3
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- cmp r1, 0
- bne _080A8942
- movs r5, 0
- movs r6, 0x1
- b _080A8946
-_080A8942:
- movs r5, 0x2
- movs r6, 0x3
-_080A8946:
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- adds r0, r4, 0
- adds r1, r6, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r7, r0, 24
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _080A8998
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080A8998
- movs r0, 0x2
- eors r4, r0
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r4, 0
- adds r1, r6, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r3, r0, 24
- mov r0, r8
- lsls r1, r0, 16
- lsls r2, r7, 16
- b _080A89A4
-_080A8998:
- mov r0, r8
- lsls r1, r0, 16
- lsrs r5, r1, 16
- lsls r0, r7, 16
- lsrs r3, r0, 16
- adds r2, r0, 0
-_080A89A4:
- asrs r0, r1, 16
- adds r0, r5
- asrs r0, 1
- mov r1, r9
- strh r0, [r1]
- asrs r0, r2, 16
- adds r0, r3
- asrs r0, 1
- mov r1, r10
- strh r0, [r1]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80A8924
-
- thumb_func_start sub_80A89C8
-sub_80A89C8: @ 80A89C8
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x4
- lsls r6, r1, 24
- lsrs r6, 24
- ldr r0, =SpriteCallbackDummy
- mov r10, r0
- bl CreateInvisibleSpriteWithCallback
- mov r8, r0
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, =gSprites
- mov r9, r0
- mov r0, r8
- lsls r3, r0, 4
- add r3, r8
- lsls r3, 2
- mov r0, r9
- adds r5, r3, r0
- lsls r4, r6, 4
- adds r4, r6
- lsls r4, 2
- add r4, r9
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x44
- str r3, [sp]
- bl memcpy
- adds r2, r5, 0
- adds r2, 0x3F
- ldrb r0, [r2]
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r2]
- ldrb r2, [r5, 0x5]
- movs r1, 0xD
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r5, 0x5]
- ldrb r0, [r5, 0x1]
- ands r1, r0
- movs r0, 0x8
- orrs r1, r0
- strb r1, [r5, 0x1]
- ldrh r1, [r4, 0x4]
- lsls r1, 22
- lsrs r1, 22
- ldrh r2, [r5, 0x4]
- ldr r0, =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x4]
- movs r0, 0x1C
- add r9, r0
- ldr r3, [sp]
- add r3, r9
- mov r0, r10
- str r0, [r3]
- mov r0, r8
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A89C8
-
- thumb_func_start sub_80A8A6C
-sub_80A8A6C: @ 80A8A6C
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80A6838
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080A8AAC
- ldr r2, =gBattleAnimArgs
- ldrh r0, [r4, 0x20]
- ldrh r1, [r2]
- subs r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r2, 0x6]
- negs r0, r0
- strh r0, [r2, 0x6]
- adds r3, r4, 0
- adds r3, 0x3F
- ldrb r0, [r3]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r3]
- adds r1, r2, 0
- b _080A8AB6
- .pool
-_080A8AAC:
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r4, 0x20]
-_080A8AB6:
- ldrh r0, [r1, 0x2]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
- ldrh r0, [r1, 0x4]
- strh r0, [r4, 0x2E]
- ldrh r0, [r1, 0x6]
- strh r0, [r4, 0x30]
- ldrh r0, [r1, 0x8]
- strh r0, [r4, 0x34]
- ldrh r0, [r1, 0xA]
- strh r0, [r4, 0x38]
- ldr r1, =move_anim_8074EE0
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- ldr r0, =sub_80A66DC
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A8A6C
-
- thumb_func_start sub_80A8AEC
-sub_80A8AEC: @ 80A8AEC
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080A8B1C
- ldr r2, =gBattleAnimArgs
- ldrh r0, [r4, 0x20]
- ldrh r1, [r2]
- subs r0, r1
- strh r0, [r4, 0x20]
- movs r1, 0x6
- ldrsh r0, [r2, r1]
- negs r0, r0
- strh r0, [r2, 0x6]
- adds r1, r2, 0
- b _080A8B26
- .pool
-_080A8B1C:
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r4, 0x20]
-_080A8B26:
- ldrh r0, [r1, 0x2]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
- ldrh r0, [r1, 0x4]
- strh r0, [r4, 0x2E]
- ldrh r0, [r1, 0x6]
- strh r0, [r4, 0x30]
- ldrh r0, [r1, 0x8]
- strh r0, [r4, 0x34]
- ldrh r0, [r1, 0xA]
- strh r0, [r4, 0x38]
- ldrb r1, [r1, 0xC]
- adds r0, r4, 0
- bl StartSpriteAnim
- ldr r1, =move_anim_8074EE0
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- ldr r0, =sub_80A66DC
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A8AEC
-
- thumb_func_start sub_80A8B64
-sub_80A8B64: @ 80A8B64
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80A6838
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080A8B90
- ldr r0, =gBattleAnimArgs
- ldrh r1, [r4, 0x20]
- ldrh r2, [r0]
- subs r1, r2
- strh r1, [r4, 0x20]
- b _080A8B9C
- .pool
-_080A8B90:
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r4, 0x20]
- adds r0, r1, 0
-_080A8B9C:
- ldrh r0, [r0, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
- ldr r0, =sub_80A67D8
- str r0, [r4, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A8B64
-
- thumb_func_start sub_80A8BC4
-sub_80A8BC4: @ 80A8BC4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks
- adds r5, r1, r0
- movs r0, 0
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- movs r6, 0
- strh r0, [r5, 0x8]
- ldr r7, =gBattleAnimAttacker
- ldrb r0, [r7]
- bl GetBattlerSide
- lsls r0, 24
- movs r1, 0x8
- cmp r0, 0
- beq _080A8BF8
- movs r0, 0x8
- negs r0, r0
- adds r1, r0, 0
-_080A8BF8:
- strh r1, [r5, 0xA]
- strh r6, [r5, 0xC]
- strh r6, [r5, 0xE]
- ldr r4, =gSprites
- movs r0, 0x8
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x24]
- ldrh r2, [r5, 0x8]
- subs r1, r2
- strh r1, [r0, 0x24]
- ldr r0, =0x00002771
- bl AllocSpritePalette
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x10]
- strh r6, [r5, 0x12]
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- adds r0, 0x10
- lsls r0, 20
- lsrs r6, r0, 16
- movs r0, 0x8
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x5]
- lsrs r0, 4
- adds r0, 0x10
- lsls r4, r0, 4
- ldrb r0, [r7]
- bl sub_80A82E4
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x14]
- cmp r0, 0x14
- beq _080A8C54
- cmp r0, 0x28
- bne _080A8C68
-_080A8C54:
- movs r0, 0x2
- b _080A8C6A
- .pool
-_080A8C68:
- movs r0, 0x3
-_080A8C6A:
- strh r0, [r5, 0x14]
- lsls r0, r4, 1
- ldr r1, =gPlttBufferUnfaded
- adds r0, r1
- lsls r1, r6, 1
- ldr r2, =gPlttBufferFaded
- adds r1, r2
- ldr r2, =0x04000008
- bl CpuSet
- ldr r0, =gBattleAnimArgs
- ldrb r2, [r0, 0x2]
- ldrh r3, [r0]
- adds r0, r6, 0
- movs r1, 0x10
- bl BlendPalette
- ldr r0, =sub_80A8CAC
- str r0, [r5]
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A8BC4
-
- thumb_func_start sub_80A8CAC
-sub_80A8CAC: @ 80A8CAC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _080A8D10
- cmp r0, 0x1
- bgt _080A8CD4
- cmp r0, 0
- beq _080A8CDA
- b _080A8D6C
- .pool
-_080A8CD4:
- cmp r0, 0x2
- beq _080A8D58
- b _080A8D6C
-_080A8CDA:
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_80A8D78
- ldr r2, =gSprites
- movs r0, 0x8
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r4, 0xA]
- ldrh r2, [r0, 0x24]
- adds r1, r2
- strh r1, [r0, 0x24]
- ldrh r1, [r4, 0xE]
- adds r0, r1, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5
- bne _080A8D6C
- strh r1, [r4, 0xE]
- b _080A8D4A
- .pool
-_080A8D10:
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_80A8D78
- ldr r3, =gSprites
- movs r0, 0x8
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r1, [r0, 0x24]
- ldrh r2, [r4, 0xA]
- subs r1, r2
- strh r1, [r0, 0x24]
- ldrh r0, [r4, 0xE]
- subs r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r2, r0, 16
- cmp r2, 0
- bne _080A8D6C
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- strh r2, [r1, 0x24]
-_080A8D4A:
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- b _080A8D6C
- .pool
-_080A8D58:
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080A8D6C
- ldr r0, =0x00002771
- bl FreeSpritePaletteByTag
- adds r0, r5, 0
- bl DestroyAnimVisualTask
-_080A8D6C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A8CAC
-
- thumb_func_start sub_80A8D78
-sub_80A8D78: @ 80A8D78
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- movs r0, 0
- bl duplicate_obj_of_side_rel2move_in_transparent_mode
- lsls r0, 16
- lsrs r7, r0, 16
- asrs r0, 16
- cmp r0, 0
- blt _080A8DE8
- ldr r5, =gSprites
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r3, r4, r5
- movs r0, 0x3
- ldrb r1, [r6, 0x14]
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r3, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x5]
- ldrb r1, [r6, 0x10]
- lsls r1, 4
- movs r2, 0xF
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x5]
- movs r0, 0x8
- strh r0, [r3, 0x2E]
- mov r0, r8
- strh r0, [r3, 0x30]
- strh r7, [r3, 0x32]
- movs r0, 0x8
- ldrsh r1, [r6, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrh r0, [r0, 0x24]
- strh r0, [r3, 0x24]
- adds r5, 0x1C
- adds r4, r5
- ldr r0, =sub_80A8DFC
- str r0, [r4]
- ldrh r0, [r6, 0x12]
- adds r0, 0x1
- strh r0, [r6, 0x12]
-_080A8DE8:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A8D78
-
- thumb_func_start sub_80A8DFC
-sub_80A8DFC: @ 80A8DFC
- push {lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x2E]
- subs r0, 0x1
- strh r0, [r3, 0x2E]
- lsls r0, 16
- cmp r0, 0
- bne _080A8E26
- ldr r2, =gTasks
- movs r0, 0x30
- ldrsh r1, [r3, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrh r1, [r0, 0x12]
- subs r1, 0x1
- strh r1, [r0, 0x12]
- adds r0, r3, 0
- bl obj_delete_but_dont_free_vram
-_080A8E26:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A8DFC
-
- thumb_func_start sub_80A8E30
-sub_80A8E30: @ 80A8E30
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080A8E68
- movs r0, 0x5
- b _080A8E6A
- .pool
-_080A8E68:
- ldr r0, =0x0000fff6
-_080A8E6A:
- strh r0, [r5, 0x2E]
- ldr r0, =0x0000ffd8
- strh r0, [r5, 0x30]
- ldr r0, =sub_80A8E88
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A8E30
-
- thumb_func_start sub_80A8E88
-sub_80A8E88: @ 80A8E88
- push {r4,r5,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- ldrh r1, [r4, 0x32]
- adds r0, r1
- strh r0, [r4, 0x32]
- ldrh r5, [r4, 0x30]
- ldrh r2, [r4, 0x34]
- adds r0, r5, r2
- strh r0, [r4, 0x34]
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- movs r1, 0xA
- bl __divsi3
- strh r0, [r4, 0x24]
- movs r2, 0x34
- ldrsh r0, [r4, r2]
- movs r1, 0xA
- bl __divsi3
- strh r0, [r4, 0x26]
- lsls r0, r5, 16
- asrs r0, 16
- movs r1, 0x14
- negs r1, r1
- cmp r0, r1
- bge _080A8EC4
- adds r0, r5, 0x1
- strh r0, [r4, 0x30]
-_080A8EC4:
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- movs r2, 0x26
- ldrsh r1, [r4, r2]
- adds r0, r1
- movs r1, 0x20
- negs r1, r1
- cmp r0, r1
- bge _080A8EDC
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080A8EDC:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80A8E88
-
- thumb_func_start sub_80A8EE4
-sub_80A8EE4: @ 80A8EE4
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, =gBattleAnimArgs
- ldrh r0, [r5, 0x4]
- strh r0, [r4, 0x2E]
- ldrh r0, [r5, 0x8]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x32]
- ldrh r0, [r5, 0xA]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x36]
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080A8F24
- ldrh r0, [r5, 0x8]
- adds r0, 0x1E
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r5, 0xA]
- subs r0, 0x14
- b _080A8F32
- .pool
-_080A8F24:
- ldrh r0, [r5, 0x8]
- subs r0, 0x1E
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r5, 0xA]
- subs r0, 0x50
-_080A8F32:
- strh r0, [r4, 0x22]
- ldr r0, =sub_80A6EEC
- str r0, [r4, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A8EE4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_anim_80FE840.s b/asm/battle_anim_80FE840.s
index df4f21408..620940730 100644
--- a/asm/battle_anim_80FE840.s
+++ b/asm/battle_anim_80FE840.s
@@ -1124,7 +1124,7 @@ _080FF154:
adds r3, r5, 0
adds r3, 0x36
movs r1, 0x1
- bl sub_80A8924
+ bl SetAverageBattlerPositions
ldrh r0, [r6, 0x4]
ldrh r1, [r5, 0x32]
adds r0, r1
@@ -1272,7 +1272,7 @@ sub_80FF268: @ 80FF268
adds r3, r4, 0
adds r3, 0x22
movs r1, 0x1
- bl sub_80A8924
+ bl SetAverageBattlerPositions
_080FF28A:
ldrh r0, [r4, 0x22]
adds r0, 0x20
@@ -4152,7 +4152,7 @@ _08100918:
subs r1, r5
lsls r1, 16
asrs r1, 16
- bl sub_80A74F4
+ bl ArcTan2Neg
lsls r0, 16
lsrs r4, r0, 16
bl IsContest
@@ -5451,7 +5451,7 @@ _0810137A:
adds r3, r5, 0
adds r3, 0x22
adds r0, r6, 0
- bl sub_80A8924
+ bl SetAverageBattlerPositions
movs r2, 0
ldrsh r1, [r4, r2]
adds r0, r5, 0
@@ -10172,7 +10172,7 @@ _0810390E:
subs r1, r2
lsls r1, 16
asrs r1, 16
- bl sub_80A74F4
+ bl ArcTan2Neg
lsls r0, 16
movs r1, 0xF0
lsls r1, 24
@@ -10754,7 +10754,7 @@ _08103DB6:
movs r1, 0
mov r2, sp
mov r3, r10
- bl sub_80A8924
+ bl SetAverageBattlerPositions
b _08103E42
.pool
_08103E20:
@@ -11093,7 +11093,7 @@ _081040CC:
subs r1, r2
lsls r1, 16
asrs r1, 16
- bl sub_80A74F4
+ bl ArcTan2Neg
lsls r0, 16
movs r1, 0xC0
lsls r1, 24
@@ -13220,7 +13220,7 @@ _081051F2:
adds r1, r4, 0
mov r2, sp
adds r3, r7, 0
- bl sub_80A8924
+ bl SetAverageBattlerPositions
cmp r4, 0
bne _08105230
adds r0, r5, 0
@@ -13466,7 +13466,7 @@ _081053FA:
mov r2, sp
mov r3, sp
adds r3, 0x2
- bl sub_80A8924
+ bl SetAverageBattlerPositions
b _0810546C
.pool
_0810544C:
@@ -17006,7 +17006,7 @@ sub_81070AC: @ 81070AC
adds r3, r5, 0
adds r3, 0x22
movs r1, 0
- bl sub_80A8924
+ bl SetAverageBattlerPositions
ldrh r0, [r5, 0x22]
adds r0, 0x28
strh r0, [r5, 0x22]
@@ -26048,7 +26048,7 @@ _0810B990:
adds r3, r4, 0
adds r3, 0x22
movs r1, 0x1
- bl sub_80A8924
+ bl SetAverageBattlerPositions
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -26155,7 +26155,7 @@ _0810BA74:
adds r3, r5, 0
adds r3, 0x36
movs r1, 0x1
- bl sub_80A8924
+ bl SetAverageBattlerPositions
_0810BA86:
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
@@ -26454,7 +26454,7 @@ _0810BCE0:
adds r3, r5, 0
adds r3, 0x36
movs r1, 0x1
- bl sub_80A8924
+ bl SetAverageBattlerPositions
_0810BCF2:
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
@@ -26652,7 +26652,7 @@ _0810BE6C:
adds r3, r4, 0
adds r3, 0x22
movs r1, 0
- bl sub_80A8924
+ bl SetAverageBattlerPositions
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -26719,7 +26719,7 @@ _0810BEF4:
adds r3, r5, 0
adds r3, 0x22
movs r1, 0
- bl sub_80A8924
+ bl SetAverageBattlerPositions
ldrb r0, [r4]
bl GetBattlerSide
lsls r0, 24
@@ -26762,7 +26762,7 @@ _0810BF52:
adds r3, r5, 0
adds r3, 0x22
movs r1, 0
- bl sub_80A8924
+ bl SetAverageBattlerPositions
ldrb r0, [r4]
bl GetBattlerSide
lsls r0, 24
@@ -27192,7 +27192,7 @@ sub_810C2F0: @ 810C2F0
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
- ldr r0, =sub_80A7820
+ ldr r0, =TranslateAnimSpriteToTargetMonLocation
str r0, [r4, 0x1C]
pop {r4,r5}
pop {r0}
@@ -30270,7 +30270,7 @@ _0810DC44:
movs r1, 0x1
mov r2, sp
adds r3, r6, 0
- bl sub_80A8924
+ bl SetAverageBattlerPositions
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -30396,7 +30396,7 @@ sub_810DD50: @ 810DD50
adds r3, r4, 0
adds r3, 0x22
movs r1, 0x1
- bl sub_80A8924
+ bl SetAverageBattlerPositions
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -30457,7 +30457,7 @@ _0810DDE0:
adds r3, r4, 0
adds r3, 0x22
movs r1, 0x1
- bl sub_80A8924
+ bl SetAverageBattlerPositions
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -30828,7 +30828,7 @@ _0810E0EC:
adds r3, r5, 0
adds r3, 0x36
movs r1, 0x1
- bl sub_80A8924
+ bl SetAverageBattlerPositions
_0810E0FE:
ldr r4, =gBattleAnimArgs
ldrh r0, [r4, 0x4]
@@ -32074,7 +32074,7 @@ sub_810EA4C: @ 810EA4C
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
- ldr r0, =sub_80A7820
+ ldr r0, =TranslateAnimSpriteToTargetMonLocation
str r0, [r4, 0x1C]
pop {r4,r5}
pop {r0}
@@ -32913,7 +32913,7 @@ sub_810F084: @ 810F084
asrs r5, 16
adds r0, r4, 0
adds r1, r5, 0
- bl sub_80A74F4
+ bl ArcTan2Neg
lsls r0, 16
movs r1, 0xC0
lsls r1, 24
@@ -35407,7 +35407,7 @@ _08110548:
adds r3, r5, 0
adds r3, 0x36
movs r1, 0x1
- bl sub_80A8924
+ bl SetAverageBattlerPositions
_0811055A:
adds r0, r5, 0
bl sub_80A6FD4
@@ -35464,7 +35464,7 @@ sub_81105B4: @ 81105B4
adds r3, r4, 0
adds r3, 0x22
movs r1, 0
- bl sub_80A8924
+ bl SetAverageBattlerPositions
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -35745,7 +35745,7 @@ _081107B2:
subs r1, r2
lsls r1, 16
asrs r1, 16
- bl sub_80A74F4
+ bl ArcTan2Neg
lsls r0, 16
movs r1, 0xC0
lsls r1, 24
@@ -35899,7 +35899,7 @@ _0811090E:
subs r1, r2
lsls r1, 16
asrs r1, 16
- bl sub_80A74F4
+ bl ArcTan2Neg
lsls r0, 16
movs r1, 0xC0
lsls r1, 24
@@ -35987,7 +35987,7 @@ sub_81109F0: @ 81109F0
adds r3, r5, 0
adds r3, 0x22
movs r1, 0
- bl sub_80A8924
+ bl SetAverageBattlerPositions
_08110A10:
ldrh r0, [r6]
ldrh r1, [r5, 0x20]
@@ -37205,7 +37205,7 @@ sub_8111418: @ 8111418
bl StartSpriteAffineAnim
_08111434:
adds r0, r4, 0
- bl sub_80A7820
+ bl TranslateAnimSpriteToTargetMonLocation
pop {r4}
pop {r0}
bx r0
@@ -50366,8 +50366,8 @@ _08118132:
.pool
thumb_func_end SetAnimBgAttribute
- thumb_func_start sub_8118140
-sub_8118140: @ 8118140
+ thumb_func_start GetAnimBgAttribute
+GetAnimBgAttribute: @ 8118140
push {r4,lr}
sub sp, 0x4
lsls r0, 24
@@ -50441,7 +50441,7 @@ _081181CA:
pop {r4}
pop {r1}
bx r1
- thumb_func_end sub_8118140
+ thumb_func_end GetAnimBgAttribute
thumb_func_start HandleIntroSlide
HandleIntroSlide: @ 81181D4
diff --git a/asm/battle_anim_815A0D4.s b/asm/battle_anim_815A0D4.s
index 55d25cf31..b31af7d1e 100644
--- a/asm/battle_anim_815A0D4.s
+++ b/asm/battle_anim_815A0D4.s
@@ -231,7 +231,7 @@ sub_815A254: @ 815A254
subs r1, r6
lsls r1, 16
asrs r1, 16
- bl sub_80A74F4
+ bl ArcTan2Neg
lsls r0, 16
movs r1, 0xC0
lsls r1, 23
@@ -775,7 +775,7 @@ sub_815A6C4: @ 815A6C4
movs r1, 0
mov r2, sp
adds r3, r5, 0
- bl sub_80A8924
+ bl SetAverageBattlerPositions
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
diff --git a/data/battle_anim_80FE840.s b/data/battle_anim_80FE840.s
index bce7b3540..856f379d9 100644
--- a/data/battle_anim_80FE840.s
+++ b/data/battle_anim_80FE840.s
@@ -828,7 +828,7 @@ gUnknown_08592DE4:: @ 8592DE4
.align 2
gUnknown_08592DFC:: @ 8592DFC
- spr_template 0x2721, 0x2721, gUnknown_08524904, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A7820
+ spr_template 0x2721, 0x2721, gUnknown_08524904, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, TranslateAnimSpriteToTargetMonLocation
.align 2
gUnknown_08592E14:: @ 8592E14
@@ -1190,15 +1190,15 @@ gUnknown_08593424:: @ 8593424
.align 2
gSupersonicWaveSpriteTemplate:: @ 8593428
- spr_template 0x27b3, 0x27b3, gUnknown_08524A14, gDummySpriteAnimTable, NULL, gUnknown_08593420, sub_80A7820
+ spr_template 0x27b3, 0x27b3, gUnknown_08524A14, gDummySpriteAnimTable, NULL, gUnknown_08593420, TranslateAnimSpriteToTargetMonLocation
.align 2
gScreechWaveSpriteTemplate:: @ 8593440
- spr_template 0x27b4, 0x27b4, gUnknown_08524A14, gDummySpriteAnimTable, NULL, gUnknown_08593420, sub_80A7820
+ spr_template 0x27b4, 0x27b4, gUnknown_08524A14, gDummySpriteAnimTable, NULL, gUnknown_08593420, TranslateAnimSpriteToTargetMonLocation
.align 2
gUnknown_08593458:: @ 8593458
- spr_template 0x2814, 0x2814, gUnknown_08524A1C, gDummySpriteAnimTable, NULL, gUnknown_08593420, sub_80A7820
+ spr_template 0x2814, 0x2814, gUnknown_08524A1C, gDummySpriteAnimTable, NULL, gUnknown_08593420, TranslateAnimSpriteToTargetMonLocation
.align 2
gUnknown_08593470:: @ 8593470
@@ -1991,7 +1991,7 @@ gUnknown_085954D0:: @ 85954D0
.align 2
gEmberSpriteTemplate:: @ 85954D4
- spr_template 0x272d, 0x272d, gUnknown_08524914, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A7820
+ spr_template 0x272d, 0x272d, gUnknown_08524914, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, TranslateAnimSpriteToTargetMonLocation
.align 2
gEmberFlareSpriteTemplate:: @ 85954EC
@@ -2143,7 +2143,7 @@ gBattleAnimSpriteTemplate_859574C:: @ 859574C
.align 2
gUnknown_08595764:: @ 8595764
- spr_template 0x27bb, 0x27bb, gUnknown_0852490C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A7820
+ spr_template 0x27bb, 0x27bb, gUnknown_0852490C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, TranslateAnimSpriteToTargetMonLocation
.align 2
gUnknown_0859577C:: @ 859577C
@@ -3067,7 +3067,7 @@ gUnknown_08596624:: @ 8596624
.align 2
gUnknown_0859663C:: @ 859663C
- spr_template 0x27b3, 0x27b3, gUnknown_08524954, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A7820
+ spr_template 0x27b3, 0x27b3, gUnknown_08524954, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, TranslateAnimSpriteToTargetMonLocation
.align 2
gUnknown_08596654:: @ 8596654
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 29de71077..c8a2779d8 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -14,11 +14,11 @@ enum
struct UnknownAnimStruct2
{
- void *unk0;
+ u8 *bgTiles;
u16 *unk4;
u8 unk8;
- u8 unk9;
- u16 unkA;
+ u8 bgId;
+ u16 tilesOffset;
u16 unkC;
};
@@ -63,16 +63,18 @@ s8 BattleAnimAdjustPanning(s8 pan);
s8 BattleAnimAdjustPanning2(s8 pan);
s16 KeepPanInRange(s16 a);
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
+void sub_80A4720(u16 a, u16 *b, u32 c, u8 d);
// battle_anim_80FE840.s
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
-void sub_8118FBC(u8 arg0, u8 arg1, u8 arg2, u8 bankIdentity, u8 arg4, void *arg5, u16 *arg6, u16 arg7);
+void sub_8118FBC(u8 arg0, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, void *arg5, u16 *arg6, u16 arg7);
void HandleIntroSlide(u8 terrainId);
+u32 GetAnimBgAttribute(u8 bgId, u8 attributeId);
// battle_anim_80A5C6C.s
void sub_80A6EEC(struct Sprite *sprite);
void sub_80A68D4(struct Sprite *sprite);
-void TranslateAnimLinear(struct Sprite *sprite);
+bool8 TranslateAnimLinear(struct Sprite *sprite);
void sub_80A8278(void);
void sub_80A6B30(struct UnknownAnimStruct2*);
void sub_80A6B90(struct UnknownAnimStruct2*, u32 arg1);
@@ -91,11 +93,11 @@ enum
u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId);
bool8 IsBattlerSpritePresent(u8 battlerId);
-void sub_80A6C68(u8 arg0);
+void sub_80A6C68(u32 arg0);
u8 GetAnimBattlerSpriteId(u8 wantedBattler);
bool8 IsDoubleBattle(void);
u8 sub_80A6D94(void);
-u8 sub_80A8364(u8);
+u8 sub_80A8364(u8 battlerId);
void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite*));
void oamt_add_pos2_onto_pos1(struct Sprite *sprite);
u8 GetBattlerSpriteDefault_Y(u8 battlerId);
diff --git a/ld_script.txt b/ld_script.txt
index 8de971717..1896b4fc9 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -112,7 +112,6 @@ SECTIONS {
src/sound.o(.text);
src/battle_anim.o(.text);
src/battle_anim_80A5C6C.o(.text);
- asm/battle_anim_80A5C6C.o(.text);
src/task.o(.text);
src/reshow_battle_screen.o(.text);
asm/battle_anim_80A9C70.o(.text);
diff --git a/src/battle_anim.c b/src/battle_anim.c
index fa782d661..4989b0fb2 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -681,7 +681,7 @@ void sub_80A438C(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
}
sub_80A6B30(&unknownStruct);
- CpuFill16(0, unknownStruct.unk0, 0x1000);
+ CpuFill16(0, unknownStruct.bgTiles, 0x1000);
CpuFill16(0xFF, unknownStruct.unk4, 0x800);
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 2);
@@ -709,7 +709,7 @@ void sub_80A438C(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
else
battlerPosition = GetBattlerPosition(battlerId);
- sub_8118FBC(1, 0, 0, battlerPosition, unknownStruct.unk8, unknownStruct.unk0, unknownStruct.unk4, unknownStruct.unkA);
+ sub_8118FBC(1, 0, 0, battlerPosition, unknownStruct.unk8, unknownStruct.bgTiles, unknownStruct.unk4, unknownStruct.tilesOffset);
if (IsContest())
sub_80A46A0();
@@ -719,7 +719,7 @@ void sub_80A438C(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
RequestDma3Fill(0, (void*)(VRAM + 0x6000), 0x2000, 1);
RequestDma3Fill(0, (void*)(VRAM + 0xF000), 0x1000, 1);
sub_80A6B90(&unknownStruct, 2);
- CpuFill16(0, unknownStruct.unk0 + 0x1000, 0x1000);
+ CpuFill16(0, unknownStruct.bgTiles + 0x1000, 0x1000);
CpuFill16(0, unknownStruct.unk4 + 0x400, 0x800);
SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2);
SetAnimBgAttribute(2, BG_ANIM_SCREEN_SIZE, 1);
@@ -739,7 +739,7 @@ void sub_80A438C(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], 0x90, 0x20);
CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + 0x120), 0x20);
- sub_8118FBC(2, 0, 0, GetBattlerPosition(battlerId), unknownStruct.unk8, unknownStruct.unk0 + 0x1000, unknownStruct.unk4 + 0x400, unknownStruct.unkA);
+ sub_8118FBC(2, 0, 0, GetBattlerPosition(battlerId), unknownStruct.unk8, unknownStruct.bgTiles + 0x1000, unknownStruct.unk4 + 0x400, unknownStruct.tilesOffset);
}
}
diff --git a/src/battle_anim_80A5C6C.c b/src/battle_anim_80A5C6C.c
index 46e1e5b71..f799b091b 100644
--- a/src/battle_anim_80A5C6C.c
+++ b/src/battle_anim_80A5C6C.c
@@ -14,12 +14,15 @@
#include "trig.h"
#include "util.h"
#include "gpu_regs.h"
+#include "bg.h"
+#include "malloc.h"
+#include "dma3.h"
-#define GET_UNOWN_LETTER(personality) ((\
+#define GET_UNOWN_LETTER(personality) (( \
(((personality & 0x03000000) >> 24) << 6) \
| (((personality & 0x00030000) >> 16) << 4) \
- | (((personality & 0x00000300) >> 8) << 2) \
- | (((personality & 0x00000003) >> 0) << 0) \
+ | (((personality & 0x00000300) >> 8) << 2) \
+ | (((personality & 0x00000003) >> 0) << 0) \
) % 28)
#define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
@@ -28,15 +31,37 @@ extern const struct OamData gUnknown_0852497C;
extern const struct MonCoords gMonFrontPicCoords[];
extern const struct MonCoords gMonBackPicCoords[];
extern const u8 gEnemyMonElevation[];
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+extern const union AffineAnimCmd *gUnknown_082FF6C0[];
// This file's functions.
void sub_80A64EC(struct Sprite *sprite);
void sub_80A653C(struct Sprite *sprite);
void InitAnimLinearTranslation(struct Sprite *sprite);
-bool8 TranslateAnimLinear(struct Sprite *sprite);
+void sub_80A6E14(struct Sprite *sprite);
+void sub_80A6FB4(struct Sprite *sprite);
+void sub_80A6F98(struct Sprite *sprite);
+void sub_80A7144(struct Sprite *sprite);
+void sub_80A791C(struct Sprite *sprite);
+void sub_80A8DFC(struct Sprite *sprite);
+void sub_80A8E88(struct Sprite *sprite);
+void sub_80A7E6C(u8 spriteId);
+u16 sub_80A7F18(u8 spriteId);
+void AnimTask_BlendMonInAndOutSetup(struct Task *task);
+void sub_80A7AFC(u8 taskId);
+void sub_80A8CAC(u8 taskId);
+void AnimTask_BlendMonInAndOutStep(u8 taskId);
+bool8 sub_80A7238(void);
+void sub_80A8048(s16 *bottom, s16 *top, const void *ptr);
+void *sub_80A8050(s16 bottom, s16 top);
+u8 sub_80A82E4(u8 battlerId);
+void sub_80A8D78(struct Task *task, u8 taskId);
+
+// EWRAM vars
+EWRAM_DATA static union AffineAnimCmd *gUnknown_02038444 = NULL;
// Const rom data
-const struct UCoords8 sBattlerCoords[][4] =
+static const struct UCoords8 sBattlerCoords[][4] =
{
{
{ 72, 80 },
@@ -61,7 +86,7 @@ const struct MonCoords gCastformFrontSpriteCoords[] =
{ 0x86, 8 }, // HAIL
};
-const u8 gCastformElevations[] =
+static const u8 sCastformElevations[] =
{
13, // NORMAL
14, // SUN
@@ -70,7 +95,7 @@ const u8 gCastformElevations[] =
};
// Y position of the backsprite for each of the four Castform forms.
-const u8 gCastformBackSpriteYCoords[] =
+static const u8 sCastformBackSpriteYCoords[] =
{
0, // NORMAL
0, // SUN
@@ -78,7 +103,7 @@ const u8 gCastformBackSpriteYCoords[] =
0, // HAIL
};
-const struct SpriteTemplate gUnknown_08525F90[] =
+static const struct SpriteTemplate sUnknown_08525F90[] =
{
{
.tileTag = 55125,
@@ -100,7 +125,7 @@ const struct SpriteTemplate gUnknown_08525F90[] =
}
};
-const struct SpriteSheet gUnknown_08525FC0[] =
+static const struct SpriteSheet sUnknown_08525FC0[] =
{
{ gMiscBlank_Gfx, 0x800, 55125, },
{ gMiscBlank_Gfx, 0x800, 55126, },
@@ -203,7 +228,7 @@ u8 GetBattlerYDelta(u8 battlerId, u16 species)
}
else if (species == SPECIES_CASTFORM)
{
- ret = gCastformBackSpriteYCoords[gBattleMonForms[battlerId]];
+ ret = sCastformBackSpriteYCoords[gBattleMonForms[battlerId]];
}
else if (species > NUM_SPECIES)
{
@@ -254,7 +279,7 @@ u8 GetBattlerElevation(u8 battlerId, u16 species)
if (!IsContest())
{
if (species == SPECIES_CASTFORM)
- ret = gCastformElevations[gBattleMonForms[battlerId]];
+ ret = sCastformElevations[gBattleMonForms[battlerId]];
else if (species > NUM_SPECIES)
ret = gEnemyMonElevation[0];
else
@@ -739,3 +764,1698 @@ bool8 TranslateAnimArc(struct Sprite *sprite)
sprite->pos2.y += Sin((u8)(sprite->data[7] >> 8), sprite->data[5]);
return FALSE;
}
+
+bool8 sub_80A6934(struct Sprite *sprite)
+{
+ if (TranslateAnimLinear(sprite))
+ return TRUE;
+ sprite->data[7] += sprite->data[6];
+ sprite->pos2.x += Sin((u8)(sprite->data[7] >> 8), sprite->data[5]);
+ return FALSE;
+}
+
+void oamt_add_pos2_onto_pos1(struct Sprite *sprite)
+{
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+}
+
+void sub_80A6980(struct Sprite *sprite, bool8 a2)
+{
+ if (!a2)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, 1);
+ }
+ sub_80A6864(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+}
+
+void sub_80A69CC(struct Sprite *sprite, u8 a2)
+{
+ if (!a2)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 1);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 3);
+ }
+ sub_80A6864(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+}
+
+u8 GetBattlerSide(u8 battlerId)
+{
+ return GET_BATTLER_SIDE2(battlerId);
+}
+
+u8 GetBattlerPosition(u8 battlerId)
+{
+ return GET_BATTLER_POSITION(battlerId);
+}
+
+u8 GetBattlerAtPosition(u8 position)
+{
+ u8 i;
+
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gBattlerPositions[i] == position)
+ break;
+ }
+ return i;
+}
+
+bool8 IsBattlerSpritePresent(u8 battlerId)
+{
+ if (IsContest())
+ {
+ if (gBattleAnimAttacker == battlerId)
+ return TRUE;
+ else if (gBattleAnimTarget == battlerId)
+ return TRUE;
+ else
+ return FALSE;
+ }
+ else
+ {
+ if (gBattlerPositions[battlerId] == 0xff)
+ {
+ return FALSE;
+ }
+ else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ {
+ if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) != 0)
+ return TRUE;
+ }
+ else
+ {
+ if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) != 0)
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+bool8 IsDoubleBattle()
+{
+ return IS_DOUBLE_BATTLE();
+}
+
+void sub_80A6B30(struct UnknownAnimStruct2 *unk)
+{
+ if (IsContest())
+ {
+ unk->bgTiles = gUnknown_0202305C;
+ unk->unk4 = (u16 *)gUnknown_02023060;
+ unk->unk8 = 0xe;
+ unk->bgId = 1;
+ unk->tilesOffset = 0;
+ unk->unkC = 0;
+ }
+ else
+ {
+ unk->bgTiles = gUnknown_0202305C;
+ unk->unk4 = (u16 *)gUnknown_02023060;
+ unk->unk8 = 0x8;
+ unk->bgId = 1;
+ unk->tilesOffset = 0x200;
+ unk->unkC = 0;
+ }
+}
+
+void sub_80A6B90(struct UnknownAnimStruct2 *unk, u32 arg1)
+{
+ if (IsContest())
+ {
+ unk->bgTiles = gUnknown_0202305C;
+ unk->unk4 = (u16 *)gUnknown_02023060;
+ unk->unk8 = 0xe;
+ unk->bgId = 1;
+ unk->tilesOffset = 0;
+ unk->unkC = 0;
+ }
+ else if (arg1 == 1)
+ {
+ sub_80A6B30(unk);
+ }
+ else
+ {
+ unk->bgTiles = gUnknown_0202305C;
+ unk->unk4 = (u16 *)gUnknown_02023060;
+ unk->unk8 = 0x9;
+ unk->bgId = 2;
+ unk->tilesOffset = 0x300;
+ unk->unkC = 0;
+ }
+}
+
+void sub_80A6BFC(struct UnknownAnimStruct2 *unk)
+{
+ unk->bgTiles = gUnknown_0202305C;
+ unk->unk4 = (u16 *)gUnknown_02023060;
+ if (IsContest())
+ {
+ unk->unk8 = 0xe;
+ unk->bgId = 1;
+ unk->tilesOffset = 0;
+ unk->unkC = 0;
+ }
+ else if (sub_80A8364(gBattleAnimAttacker) == 1)
+ {
+ unk->unk8 = 8;
+ unk->bgId = 1;
+ unk->tilesOffset = 0x200;
+ unk->unkC = 0;
+ }
+ else
+ {
+ unk->unk8 = 0x9;
+ unk->bgId = 2;
+ unk->tilesOffset = 0x300;
+ unk->unkC = 0;
+ }
+}
+
+void sub_80A6C68(u32 arg0)
+{
+ struct UnknownAnimStruct2 unkStruct;
+
+ sub_80A6B90(&unkStruct, arg0);
+ CpuFill32(0, unkStruct.bgTiles, 0x2000);
+ LoadBgTiles(unkStruct.bgId, unkStruct.bgTiles, 0x2000, unkStruct.tilesOffset);
+ FillBgTilemapBufferRect(unkStruct.bgId, 0, 0, 0, 0x20, 0x40, 0x11);
+ CopyBgTilemapBufferToVram(unkStruct.bgId);
+}
+
+void sub_80A6CC0(u32 bgId, void *src, u32 tilesOffset)
+{
+ CpuFill32(0, gUnknown_0202305C, 0x2000);
+ LZDecompressWram(src, gUnknown_0202305C);
+ LoadBgTiles(bgId, gUnknown_0202305C, 0x2000, tilesOffset);
+}
+
+void sub_80A6D10(u32 bgId, const void *src)
+{
+ FillBgTilemapBufferRect(bgId, 0, 0, 0, 0x20, 0x40, 0x11);
+ CopyToBgTilemapBuffer(bgId, src, 0, 0);
+}
+
+void sub_80A6D48(u32 bgId, const void *src)
+{
+ sub_80A6D10(bgId, src);
+ CopyBgTilemapBufferToVram(bgId);
+}
+
+void sub_80A6D60(struct UnknownAnimStruct2 *unk, const void *src, u32 arg2)
+{
+ sub_80A6D10(unk->bgId, src);
+ if (IsContest() == TRUE)
+ sub_80A4720(unk->unk8, unk->unk4, 0, arg2);
+ CopyBgTilemapBufferToVram(unk->bgId);
+}
+
+u8 sub_80A6D94(void)
+{
+ if (IsContest())
+ return 1;
+ else
+ return 2;
+}
+
+void sub_80A6DAC(bool8 arg0)
+{
+ if (!arg0 || IsContest())
+ {
+ SetAnimBgAttribute(3, BG_ANIM_SCREEN_SIZE, 0);
+ SetAnimBgAttribute(3, BG_ANIM_AREA_OVERFLOW_MODE, 1);
+ }
+ else
+ {
+ SetAnimBgAttribute(3, BG_ANIM_SCREEN_SIZE, 1);
+ SetAnimBgAttribute(3, BG_ANIM_AREA_OVERFLOW_MODE, 0);
+ }
+}
+
+void sub_80A6DEC(struct Sprite *sprite)
+{
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+ sub_80A6E14(sprite);
+ sprite->callback = sub_80A65A8;
+ sprite->callback(sprite);
+}
+
+void sub_80A6E14(struct Sprite *sprite)
+{
+ s16 x = (sprite->data[2] - sprite->data[1]) << 8;
+ s16 y = (sprite->data[4] - sprite->data[3]) << 8;
+ sprite->data[1] = x / sprite->data[0];
+ sprite->data[2] = y / sprite->data[0];
+ sprite->data[4] = 0;
+ sprite->data[3] = 0;
+}
+
+void InitAnimLinearTranslation(struct Sprite *sprite)
+{
+ int x = sprite->data[2] - sprite->data[1];
+ int y = sprite->data[4] - sprite->data[3];
+ bool8 movingLeft = x < 0;
+ bool8 movingUp = y < 0;
+ u16 xDelta = abs(x) << 8;
+ u16 yDelta = abs(y) << 8;
+
+ xDelta = xDelta / sprite->data[0];
+ yDelta = yDelta / sprite->data[0];
+
+ if (movingLeft)
+ xDelta |= 1;
+ else
+ xDelta &= ~1;
+
+ if (movingUp)
+ yDelta |= 1;
+ else
+ yDelta &= ~1;
+
+ sprite->data[1] = xDelta;
+ sprite->data[2] = yDelta;
+ sprite->data[4] = 0;
+ sprite->data[3] = 0;
+}
+
+void sub_80A6EEC(struct Sprite *sprite)
+{
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = sub_80A6F98;
+ sprite->callback(sprite);
+}
+
+void sub_80A6F14(struct Sprite *sprite)
+{
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = sub_80A6FB4;
+ sprite->callback(sprite);
+}
+
+bool8 TranslateAnimLinear(struct Sprite *sprite)
+{
+ u16 v1, v2, x, y;
+
+ if (!sprite->data[0])
+ return TRUE;
+
+ v1 = sprite->data[1];
+ v2 = sprite->data[2];
+ x = sprite->data[3];
+ y = sprite->data[4];
+ x += v1;
+ y += v2;
+
+ if (v1 & 1)
+ sprite->pos2.x = -(x >> 8);
+ else
+ sprite->pos2.x = x >> 8;
+
+ if (v2 & 1)
+ sprite->pos2.y = -(y >> 8);
+ else
+ sprite->pos2.y = y >> 8;
+
+ sprite->data[3] = x;
+ sprite->data[4] = y;
+ sprite->data[0]--;
+ return FALSE;
+}
+
+void sub_80A6F98(struct Sprite *sprite)
+{
+ if (TranslateAnimLinear(sprite))
+ SetCallbackToStoredInData6(sprite);
+}
+
+void sub_80A6FB4(struct Sprite *sprite)
+{
+ sub_8039E9C(sprite);
+ if (TranslateAnimLinear(sprite))
+ SetCallbackToStoredInData6(sprite);
+}
+
+void sub_80A6FD4(struct Sprite *sprite)
+{
+ int v1 = abs(sprite->data[2] - sprite->data[1]) << 8;
+ sprite->data[0] = v1 / sprite->data[0];
+ InitAnimLinearTranslation(sprite);
+}
+
+void sub_80A7000(struct Sprite *sprite)
+{
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+ sub_80A6FD4(sprite);
+ sprite->callback = sub_80A6F98;
+ sprite->callback(sprite);
+}
+
+void sub_80A7028(struct Sprite *sprite)
+{
+ int x = sprite->data[2] - sprite->data[1];
+ int y = sprite->data[4] - sprite->data[3];
+ bool8 x_sign = x < 0;
+ bool8 y_sign = y < 0;
+ u16 x2 = abs(x) << 4;
+ u16 y2 = abs(y) << 4;
+
+ x2 /= sprite->data[0];
+ y2 /= sprite->data[0];
+
+ if (x_sign)
+ x2 |= 1;
+ else
+ x2 &= ~1;
+
+ if (y_sign)
+ y2 |= 1;
+ else
+ y2 &= ~1;
+
+ sprite->data[1] = x2;
+ sprite->data[2] = y2;
+ sprite->data[4] = 0;
+ sprite->data[3] = 0;
+}
+
+void sub_80A70C0(struct Sprite *sprite)
+{
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+ sub_80A7028(sprite);
+ sprite->callback = sub_80A7144;
+ sprite->callback(sprite);
+}
+
+bool8 sub_80A70E8(struct Sprite *sprite)
+{
+ u16 v1, v2, x, y;
+
+ if (!sprite->data[0])
+ return TRUE;
+
+ v1 = sprite->data[1];
+ v2 = sprite->data[2];
+ x = sprite->data[3];
+ y = sprite->data[4];
+ x += v1;
+ y += v2;
+
+ if (v1 & 1)
+ sprite->pos2.x = -(x >> 4);
+ else
+ sprite->pos2.x = x >> 4;
+
+ if (v2 & 1)
+ sprite->pos2.y = -(y >> 4);
+ else
+ sprite->pos2.y = y >> 4;
+
+ sprite->data[3] = x;
+ sprite->data[4] = y;
+ sprite->data[0]--;
+ return FALSE;
+}
+
+void sub_80A7144(struct Sprite *sprite)
+{
+ if (sub_80A70E8(sprite))
+ SetCallbackToStoredInData6(sprite);
+}
+
+void sub_80A7160(struct Sprite *sprite)
+{
+ int v1 = abs(sprite->data[2] - sprite->data[1]) << 4;
+ sprite->data[0] = v1 / sprite->data[0];
+ sub_80A7028(sprite);
+}
+
+void sub_80A718C(struct Sprite *sprite)
+{
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+ sub_80A7160(sprite);
+ sprite->callback = sub_80A7144;
+ sprite->callback(sprite);
+}
+
+void obj_id_set_rotscale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation)
+{
+ int i;
+ struct ObjAffineSrcData src;
+ struct OamMatrix matrix;
+
+ src.xScale = xScale;
+ src.yScale = yScale;
+ src.rotation = rotation;
+ if (sub_80A7238())
+ src.xScale = -src.xScale;
+ i = gSprites[spriteId].oam.matrixNum;
+ ObjAffineSet(&src, &matrix, 1, 2);
+ gOamMatrices[i].a = matrix.a;
+ gOamMatrices[i].b = matrix.b;
+ gOamMatrices[i].c = matrix.c;
+ gOamMatrices[i].d = matrix.d;
+}
+
+bool8 sub_80A7238(void)
+{
+ if (IsContest())
+ {
+ if (gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].data[2] == SPECIES_UNOWN)
+ return FALSE;
+ else
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+void sub_80A7270(u8 spriteId, u8 objMode)
+{
+ u8 battlerId = gSprites[spriteId].data[0];
+
+ if (IsContest() || IsBattlerSpriteVisible(battlerId))
+ gSprites[spriteId].invisible = FALSE;
+ gSprites[spriteId].oam.objMode = objMode;
+ gSprites[spriteId].affineAnimPaused = TRUE;
+ if (!IsContest() && !gSprites[spriteId].oam.affineMode)
+ gSprites[spriteId].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[battlerId].field_6;
+ gSprites[spriteId].oam.affineMode = 3;
+ CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
+}
+
+void sub_80A7344(u8 spriteId)
+{
+ obj_id_set_rotscale(spriteId, 0x100, 0x100, 0);
+ gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].oam.objMode = 0;
+ gSprites[spriteId].affineAnimPaused = FALSE;
+ CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
+}
+
+void sub_80A73A0(u8 spriteId)
+{
+ u16 matrix = gSprites[spriteId].oam.matrixNum;
+ s16 c = gOamMatrices[matrix].c;
+
+ if (c < 0)
+ c = -c;
+ gSprites[spriteId].pos2.y = c >> 3;
+}
+
+// related to obj_id_set_rotscale
+void sub_80A73E0(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation)
+{
+ int i;
+ struct ObjAffineSrcData src;
+ struct OamMatrix matrix;
+
+ if (sprite->oam.affineMode & 1)
+ {
+ sprite->affineAnimPaused = TRUE;
+ if (a2)
+ CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode);
+ src.xScale = xScale;
+ src.yScale = yScale;
+ src.rotation = rotation;
+ if (sub_80A7238())
+ src.xScale = -src.xScale;
+ i = sprite->oam.matrixNum;
+ ObjAffineSet(&src, &matrix, 1, 2);
+ gOamMatrices[i].a = matrix.a;
+ gOamMatrices[i].b = matrix.b;
+ gOamMatrices[i].c = matrix.c;
+ gOamMatrices[i].d = matrix.d;
+ }
+}
+
+void sub_80A749C(struct Sprite *sprite)
+{
+ sub_80A73E0(sprite, TRUE, 0x100, 0x100, 0);
+ sprite->affineAnimPaused = FALSE;
+ CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode);
+}
+
+static u16 ArcTan2_(s16 a, s16 b)
+{
+ return ArcTan2(a, b);
+}
+
+u16 ArcTan2Neg(s16 a, s16 b)
+{
+ u16 var = ArcTan2_(a, b);
+ return -var;
+}
+
+void sub_80A750C(u16 a1, bool8 a2)
+{
+ int i;
+ struct PlttData *c;
+ struct PlttData *c2;
+ u16 average;
+
+ a1 *= 0x10;
+
+ if (!a2)
+ {
+ for (i = 0; i < 0x10; i++)
+ {
+ c = (struct PlttData *)&gPlttBufferUnfaded[a1 + i];
+ average = c->r + c->g + c->b;
+ average /= 3;
+
+ c2 = (struct PlttData *)&gPlttBufferFaded[a1 + i];
+ c2->r = average;
+ c2->g = average;
+ c2->b = average;
+ }
+ }
+ else
+ {
+ CpuCopy32(&gPlttBufferUnfaded[a1], &gPlttBufferFaded[a1], 0x20);
+ }
+}
+
+u32 sub_80A75AC(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7)
+{
+ u32 var = 0;
+ u32 shift;
+
+ if (a1)
+ {
+ if (!IsContest())
+ var = 0xe;
+ else
+ var = 1 << sub_80A6D94();
+ }
+ if (a2)
+ {
+ shift = gBattleAnimAttacker + 16;
+ var |= 1 << shift;
+ }
+ if (a3) {
+ shift = gBattleAnimTarget + 16;
+ var |= 1 << shift;
+ }
+ if (a4)
+ {
+ if (IsBattlerSpriteVisible(gBattleAnimAttacker ^ 2))
+ {
+ shift = (gBattleAnimAttacker ^ 2) + 16;
+ var |= 1 << shift;
+ }
+ }
+ if (a5)
+ {
+ if (IsBattlerSpriteVisible(gBattleAnimTarget ^ 2))
+ {
+ shift = (gBattleAnimTarget ^ 2) + 16;
+ var |= 1 << shift;
+ }
+ }
+ if (a6)
+ {
+ if (!IsContest())
+ var |= 0x100;
+ else
+ var |= 0x4000;
+ }
+ if (a7)
+ {
+ if (!IsContest())
+ var |= 0x200;
+ }
+ return var;
+}
+
+u32 sub_80A76C4(u8 a1, u8 a2, u8 a3, u8 a4)
+{
+ u32 var = 0;
+ u32 shift;
+
+ if (IsContest())
+ {
+ if (a1)
+ {
+ var |= 1 << 18;
+ return var;
+ }
+ }
+ else
+ {
+ if (a1)
+ {
+ if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)))
+ {
+ var |= 1 << (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) + 16);
+ }
+ }
+ if (a2)
+ {
+ if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)))
+ {
+ shift = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT) + 16;
+ var |= 1 << shift;
+ }
+ }
+ if (a3)
+ {
+ if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)))
+ {
+ shift = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT) + 16;
+ var |= 1 << shift;
+ }
+ }
+ if (a4)
+ {
+ if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)))
+ {
+ shift = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT) + 16;
+ var |= 1 << shift;
+ }
+ }
+ }
+ return var;
+}
+
+u8 sub_80A77AC(u8 a1)
+{
+ return a1;
+}
+
+u8 sub_80A77B4(u8 position)
+{
+ return GetBattlerAtPosition(position);
+}
+
+void sub_80A77C8(struct Sprite *sprite)
+{
+ bool8 var;
+
+ if (!sprite->data[0])
+ {
+ if (!gBattleAnimArgs[3])
+ var = TRUE;
+ else
+ var = FALSE;
+ if (!gBattleAnimArgs[2])
+ sub_80A69CC(sprite, var);
+ else
+ sub_80A6980(sprite, var);
+ sprite->data[0]++;
+
+ }
+ else if (sprite->animEnded || sprite->affineAnimEnded)
+ {
+ move_anim_8074EE0(sprite);
+ }
+}
+
+// Linearly translates a sprite to a target position on the
+// other mon's sprite.
+// arg 0: initial x offset
+// arg 1: initial y offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: duration
+// arg 5: lower 8 bits = location on attacking mon, upper 8 bits = location on target mon pick to target
+void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite)
+{
+ bool8 v1;
+ u8 attributeId;
+
+ if (!(gBattleAnimArgs[5] & 0xff00))
+ v1 = TRUE;
+ else
+ v1 = FALSE;
+
+ if (!(gBattleAnimArgs[5] & 0xff))
+ attributeId = BATTLER_COORD_3;
+ else
+ attributeId = BATTLER_COORD_Y;
+
+ sub_80A69CC(sprite, v1);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, attributeId) + gBattleAnimArgs[3];
+ sprite->callback = sub_80A6EEC;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_80A78AC(struct Sprite *sprite)
+{
+ sub_80A69CC(sprite, 1);
+ if (GetBattlerSide(gBattleAnimAttacker))
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ sprite->data[5] = gBattleAnimArgs[5];
+ sub_80A68D4(sprite);
+ sprite->callback = sub_80A791C;
+}
+
+void sub_80A791C(struct Sprite *sprite)
+{
+ if (TranslateAnimArc(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80A7938(struct Sprite *sprite)
+{
+ bool8 r4;
+ u8 battlerId, attributeId;
+
+ if (!gBattleAnimArgs[6])
+ {
+ r4 = TRUE;
+ attributeId = BATTLER_COORD_3;
+ }
+ else
+ {
+ r4 = FALSE;
+ attributeId = BATTLER_COORD_Y;
+ }
+ if (!gBattleAnimArgs[5])
+ {
+ sub_80A69CC(sprite, r4);
+ battlerId = gBattleAnimAttacker;
+ }
+ else
+ {
+ sub_80A6980(sprite, r4);
+ battlerId = gBattleAnimTarget;
+ }
+ if (GetBattlerSide(gBattleAnimAttacker))
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ sub_80A6980(sprite, r4);
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(battlerId, attributeId) + gBattleAnimArgs[3];
+ sprite->callback = sub_80A6EEC;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 whichBattler)
+{
+ u16 i;
+ u8 spriteId = GetAnimBattlerSpriteId(whichBattler);
+
+ if (spriteId != 0xff)
+ {
+ for (i = 0; i < MAX_SPRITES; i++)
+ {
+ if (!gSprites[i].inUse)
+ {
+ gSprites[i] = gSprites[spriteId];
+ gSprites[i].oam.objMode = 1;
+ gSprites[i].invisible = FALSE;
+ return i;
+ }
+ }
+ }
+ return -1;
+}
+
+void obj_delete_but_dont_free_vram(struct Sprite *sprite)
+{
+ sprite->usingSheet = TRUE;
+ DestroySprite(sprite);
+}
+
+void sub_80A7A74(u8 taskId)
+{
+ s16 v1 = 0;
+ s16 v2 = 0;
+
+ if (gBattleAnimArgs[2] > gBattleAnimArgs[0])
+ v2 = 1;
+ if (gBattleAnimArgs[2] < gBattleAnimArgs[0])
+ v2 = -1;
+ if (gBattleAnimArgs[3] > gBattleAnimArgs[1])
+ v1 = 1;
+ if (gBattleAnimArgs[3] < gBattleAnimArgs[1])
+ v1 = -1;
+
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = gBattleAnimArgs[4];
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = gBattleAnimArgs[0];
+ gTasks[taskId].data[4] = gBattleAnimArgs[1];
+ gTasks[taskId].data[5] = v2;
+ gTasks[taskId].data[6] = v1;
+ gTasks[taskId].data[7] = gBattleAnimArgs[2];
+ gTasks[taskId].data[8] = gBattleAnimArgs[3];
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gBattleAnimArgs[0], gBattleAnimArgs[1]));
+ gTasks[taskId].func = sub_80A7AFC;
+}
+
+void sub_80A7AFC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (++task->data[0] > task->data[1])
+ {
+ task->data[0] = 0;
+ if (++task->data[2] & 1)
+ {
+ if (task->data[3] != task->data[7])
+ task->data[3] += task->data[5];
+ }
+ else
+ {
+ if (task->data[4] != task->data[8])
+ task->data[4] += task->data[6];
+ }
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4]));
+ if (task->data[3] == task->data[7] && task->data[4] == task->data[8])
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+ }
+}
+
+// Linearly blends a mon's sprite colors with a target color with increasing
+// strength, and then blends out to the original color.
+// arg 0: anim bank
+// arg 1: blend color
+// arg 2: target blend coefficient
+// arg 3: initial delay
+// arg 4: number of times to blend in and out
+void AnimTask_BlendMonInAndOut(u8 task)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ if (spriteId == 0xff)
+ {
+ DestroyAnimVisualTask(task);
+ return;
+ }
+ gTasks[task].data[0] = (gSprites[spriteId].oam.paletteNum * 0x10) + 0x101;
+ AnimTask_BlendMonInAndOutSetup(&gTasks[task]);
+}
+
+void AnimTask_BlendMonInAndOutSetup(struct Task *task)
+{
+ task->data[1] = gBattleAnimArgs[1];
+ task->data[2] = 0;
+ task->data[3] = gBattleAnimArgs[2];
+ task->data[4] = 0;
+ task->data[5] = gBattleAnimArgs[3];
+ task->data[6] = 0;
+ task->data[7] = gBattleAnimArgs[4];
+ task->func = AnimTask_BlendMonInAndOutStep;
+}
+
+void AnimTask_BlendMonInAndOutStep(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (++task->data[4] >= task->data[5])
+ {
+ task->data[4] = 0;
+ if (!task->data[6])
+ {
+ task->data[2]++;
+ BlendPalette(task->data[0], 15, task->data[2], task->data[1]);
+ if (task->data[2] == task->data[3])
+ task->data[6] = 1;
+ }
+ else
+ {
+ task->data[2]--;
+ BlendPalette(task->data[0], 15, task->data[2], task->data[1]);
+ if (!task->data[2])
+ {
+ if (--task->data[7])
+ {
+ task->data[4] = 0;
+ task->data[6] = 0;
+ }
+ else
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+ }
+ }
+ }
+}
+
+void sub_80A7CB4(u8 task)
+{
+ u8 palette = IndexOfSpritePaletteTag(gBattleAnimArgs[0]);
+
+ if (palette == 0xff)
+ {
+ DestroyAnimVisualTask(task);
+ return;
+ }
+ gTasks[task].data[0] = (palette * 0x10) + 0x101;
+ AnimTask_BlendMonInAndOutSetup(&gTasks[task]);
+}
+
+void sub_80A7CFC(struct Task *task, u8 a2, const void *a3)
+{
+ task->data[7] = 0;
+ task->data[8] = 0;
+ task->data[9] = 0;
+ task->data[15] = a2;
+ task->data[10] = 0x100;
+ task->data[11] = 0x100;
+ task->data[12] = 0;
+ sub_80A8048(&task->data[13], &task->data[14], a3);
+ sub_80A7270(a2, 0);
+}
+
+bool8 sub_80A7D34(struct Task *task)
+{
+ gUnknown_02038444 = sub_80A8050(task->data[13], task->data[14]) + (task->data[7] << 3);
+ switch (gUnknown_02038444->type)
+ {
+ default:
+ if (!gUnknown_02038444->frame.duration)
+ {
+ task->data[10] = gUnknown_02038444->frame.xScale;
+ task->data[11] = gUnknown_02038444->frame.yScale;
+ task->data[12] = gUnknown_02038444->frame.rotation;
+ task->data[7]++;
+ gUnknown_02038444++;
+ }
+ task->data[10] += gUnknown_02038444->frame.xScale;
+ task->data[11] += gUnknown_02038444->frame.yScale;
+ task->data[12] += gUnknown_02038444->frame.rotation;
+ obj_id_set_rotscale(task->data[15], task->data[10], task->data[11], task->data[12]);
+ sub_80A7E6C(task->data[15]);
+ if (++task->data[8] >= gUnknown_02038444->frame.duration)
+ {
+ task->data[8] = 0;
+ task->data[7]++;
+ }
+ break;
+ case AFFINEANIMCMDTYPE_JUMP:
+ task->data[7] = gUnknown_02038444->jump.target;
+ break;
+ case AFFINEANIMCMDTYPE_LOOP:
+ if (gUnknown_02038444->loop.count)
+ {
+ if (task->data[9])
+ {
+ if (!--task->data[9])
+ {
+ task->data[7]++;
+ break;
+ }
+ }
+ else
+ {
+ task->data[9] = gUnknown_02038444->loop.count;
+ }
+ if (!task->data[7])
+ {
+ break;
+ }
+ for (;;)
+ {
+ task->data[7]--;
+ gUnknown_02038444--;
+ if (gUnknown_02038444->type == AFFINEANIMCMDTYPE_LOOP)
+ {
+ task->data[7]++;
+ return TRUE;
+ }
+ if (!task->data[7])
+ return TRUE;
+ }
+ }
+ task->data[7]++;
+ break;
+ case AFFINEANIMCMDTYPE_END:
+ gSprites[task->data[15]].pos2.y = 0;
+ sub_80A7344(task->data[15]);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void sub_80A7E6C(u8 spriteId)
+{
+ int var = 0x40 - sub_80A7F18(spriteId) * 2;
+ u16 matrix = gSprites[spriteId].oam.matrixNum;
+ int var2 = (var << 8) / gOamMatrices[matrix].d;
+
+ if (var2 > 0x80)
+ var2 = 0x80;
+ gSprites[spriteId].pos2.y = (var - var2) / 2;
+}
+
+void sub_80A7EC0(u8 spriteId, u8 spriteId2)
+{
+ int var = 0x40 - sub_80A7F18(spriteId2) * 2;
+ u16 matrix = gSprites[spriteId].oam.matrixNum;
+ int var2 = (var << 8) / gOamMatrices[matrix].d;
+
+ if (var2 > 0x80)
+ var2 = 0x80;
+ gSprites[spriteId].pos2.y = (var - var2) / 2;
+}
+
+u16 sub_80A7F18(u8 spriteId)
+{
+ struct BattleSpriteInfo *spriteInfo;
+ u8 battlerId = gSprites[spriteId].data[0];
+ u16 species;
+ u16 i;
+
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (gBattlerSpriteIds[i] == spriteId)
+ {
+ if (IsContest())
+ {
+ species = shared19348.unk0;
+ return gMonBackPicCoords[species].y_offset;
+ }
+ else
+ {
+ if (GetBattlerSide(i) == B_SIDE_PLAYER)
+ {
+ spriteInfo = gBattleSpritesDataPtr->battlerData;
+ if (!spriteInfo[battlerId].transformSpecies)
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES);
+ else
+ species = spriteInfo[battlerId].transformSpecies;
+
+ if (species == SPECIES_CASTFORM)
+ return sCastformBackSpriteYCoords[gBattleMonForms[battlerId]];
+ else
+ return gMonBackPicCoords[species].y_offset;
+ }
+ else
+ {
+ spriteInfo = gBattleSpritesDataPtr->battlerData;
+ if (!spriteInfo[battlerId].transformSpecies)
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES);
+ else
+ species = spriteInfo[battlerId].transformSpecies;
+
+ if (species == SPECIES_CASTFORM)
+ return sCastformElevations[gBattleMonForms[battlerId]];
+ else
+ return gMonFrontPicCoords[species].y_offset;
+ }
+ }
+ }
+ }
+ return 0x40;
+}
+
+void sub_80A8048(s16 *bottom, s16 *top, const void *ptr)
+{
+ *bottom = ((intptr_t) ptr) & 0xffff;
+ *top = (((intptr_t) ptr) >> 16) & 0xffff;
+}
+
+void *sub_80A8050(s16 bottom, s16 top)
+{
+ return (void *)((u16)bottom | ((u16)top << 16));
+}
+
+void sub_80A805C(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7)
+{
+ task->data[8] = a7;
+ task->data[15] = a2; // spriteId
+ task->data[9] = a3;
+ task->data[10] = a4;
+ task->data[13] = a5;
+ task->data[14] = a6;
+ task->data[11] = (a5 - a3) / a7;
+ task->data[12] = (a6 - a4) / a7;
+}
+
+u8 sub_80A80C8(struct Task *task)
+{
+ if (!task->data[8])
+ return 0;
+
+ if (--task->data[8] != 0)
+ {
+ task->data[9] += task->data[11];
+ task->data[10] += task->data[12];
+ }
+ else
+ {
+ task->data[9] = task->data[13];
+ task->data[10] = task->data[14];
+ }
+ obj_id_set_rotscale(task->data[15], task->data[9], task->data[10], 0);
+ if (task->data[8])
+ sub_80A7E6C(task->data[15]);
+ else
+ gSprites[task->data[15]].pos2.y = 0;
+ return task->data[8];
+}
+
+void AnimTask_GetFrustrationPowerLevel(u8 taskId)
+{
+ u16 powerLevel;
+
+ if (gAnimFriendship <= 30)
+ powerLevel = 0;
+ else if (gAnimFriendship <= 100)
+ powerLevel = 1;
+ else if (gAnimFriendship <= 200)
+ powerLevel = 2;
+ else
+ powerLevel = 3;
+ gBattleAnimArgs[7] = powerLevel;
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_80A8174(u8 priority)
+{
+ if (IsBattlerSpriteVisible(gBattleAnimTarget))
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].oam.priority = priority;
+ if (IsBattlerSpriteVisible(gBattleAnimAttacker))
+ gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].oam.priority = priority;
+ if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget)))
+ gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimTarget)]].oam.priority = priority;
+ if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
+ gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority = priority;
+}
+
+void sub_80A8278(void)
+{
+ int i;
+
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (IsBattlerSpriteVisible(i))
+ {
+ gSprites[gBattlerSpriteIds[i]].subpriority = sub_80A82E4(i);
+ gSprites[gBattlerSpriteIds[i]].oam.priority = 2;
+ }
+ }
+}
+
+u8 sub_80A82E4(u8 battlerId)
+{
+ u8 position;
+ u8 ret;
+
+ if (IsContest())
+ {
+ if (battlerId == 2)
+ return 30;
+ else
+ return 40;
+ }
+ else
+ {
+ position = GetBattlerPosition(battlerId);
+ if (position == B_POSITION_PLAYER_LEFT)
+ ret = 30;
+ else if (position == B_POSITION_PLAYER_RIGHT)
+ ret = 20;
+ else if (position == B_POSITION_OPPONENT_LEFT)
+ ret = 40;
+ else
+ ret = 50;
+ }
+ return ret;
+}
+
+u8 sub_80A8328(u8 battlerId)
+{
+ u8 position = GetBattlerPosition(battlerId);
+
+ if (IsContest())
+ return 2;
+ else if (position == B_POSITION_PLAYER_LEFT || position == B_POSITION_OPPONENT_RIGHT)
+ return GetAnimBgAttribute(2, BG_ANIM_PRIORITY);
+ else
+ return GetAnimBgAttribute(1, BG_ANIM_PRIORITY);
+}
+
+u8 sub_80A8364(u8 battlerId)
+{
+ if (!IsContest())
+ {
+ u8 position = GetBattlerPosition(battlerId);
+ if (position == B_POSITION_PLAYER_LEFT || position == B_POSITION_OPPONENT_RIGHT)
+ return 2;
+ else
+ return 1;
+ }
+ return 1;
+}
+
+u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10)
+{
+ u8 spriteId;
+ u16 sheet = LoadSpriteSheet(&sUnknown_08525FC0[a3]);
+ u16 palette = AllocSpritePalette(sUnknown_08525F90[a3].paletteTag);
+
+ if (gMonSpritesGfxPtr != NULL && gMonSpritesGfxPtr->field_17C == NULL)
+ gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000);
+ if (!isBackpic)
+ {
+ LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20);
+ if (a10 == 1 || sub_80688F8(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0)
+ LoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species],
+ gMonSpritesGfxPtr->field_17C,
+ species,
+ personality,
+ TRUE);
+ else
+ LoadSpecialPokePic_2(&gMonFrontPicTable[species],
+ gMonSpritesGfxPtr->field_17C,
+ species,
+ personality,
+ TRUE);
+ }
+ else
+ {
+ LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20);
+ if (a10 == 1 || sub_80688F8(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0)
+ LoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species],
+ gMonSpritesGfxPtr->field_17C,
+ species,
+ personality,
+ FALSE);
+ else
+ LoadSpecialPokePic_2(&gMonBackPicTable[species],
+ gMonSpritesGfxPtr->field_17C,
+ species,
+ personality,
+ FALSE);
+ }
+
+ RequestDma3Copy(gMonSpritesGfxPtr->field_17C, (void *)(OBJ_VRAM0 + (sheet * 0x20)), 0x800, 1);
+ FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C);
+
+ if (!isBackpic)
+ spriteId = CreateSprite(&sUnknown_08525F90[a3], x, y + gMonFrontPicCoords[species].y_offset, subpriority);
+ else
+ spriteId = CreateSprite(&sUnknown_08525F90[a3], x, y + gMonBackPicCoords[species].y_offset, subpriority);
+
+ if (IsContest())
+ {
+ gSprites[spriteId].affineAnims = gUnknown_082FF6C0;
+ StartSpriteAffineAnim(&gSprites[spriteId], 0);
+ }
+ return spriteId;
+}
+
+void sub_80A8610(struct Sprite *sprite)
+{
+ DestroySpriteAndFreeResources(sprite);
+}
+
+s16 sub_80A861C(u8 battlerId, u8 a2)
+{
+ u16 species;
+ u32 personality;
+ u16 letter;
+ u16 var;
+ int ret;
+ const struct MonCoords *coords;
+ struct BattleSpriteInfo *spriteInfo;
+
+ if (IsContest())
+ {
+ if (shared19348.unk4_0)
+ {
+ species = shared19348.unk2;
+ personality = shared19348.unk10;
+ }
+ else
+ {
+ species = shared19348.unk0;
+ personality = shared19348.unk8;
+ }
+ if (species == SPECIES_UNOWN)
+ {
+ letter = GET_UNOWN_LETTER(personality);
+ if (!letter)
+ var = SPECIES_UNOWN;
+ else
+ var = letter + SPECIES_UNOWN_B - 1;
+ coords = &gMonBackPicCoords[var];
+ }
+ else if (species == SPECIES_CASTFORM)
+ {
+ coords = &gCastformFrontSpriteCoords[gBattleMonForms[battlerId]];
+ }
+ else if (species <= SPECIES_EGG)
+ {
+ coords = &gMonBackPicCoords[species];
+ }
+ else
+ {
+ coords = &gMonBackPicCoords[0];
+ }
+ }
+ else
+ {
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ {
+ spriteInfo = gBattleSpritesDataPtr->battlerData;
+ if (!spriteInfo[battlerId].transformSpecies)
+ {
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY);
+ }
+ else
+ {
+ species = spriteInfo[battlerId].transformSpecies;
+ personality = gTransformedPersonalities[battlerId];
+ }
+ if (species == SPECIES_UNOWN)
+ {
+ letter = GET_UNOWN_LETTER(personality);
+ if (!letter)
+ var = SPECIES_UNOWN;
+ else
+ var = letter + SPECIES_UNOWN_B - 1;
+ coords = &gMonBackPicCoords[var];
+ }
+ else if (species > SPECIES_EGG)
+ {
+ coords = &gMonBackPicCoords[0];
+ }
+ else
+ {
+ coords = &gMonBackPicCoords[species];
+ }
+ }
+ else
+ {
+ spriteInfo = gBattleSpritesDataPtr->battlerData;
+ if (!spriteInfo[battlerId].transformSpecies)
+ {
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY);
+ }
+ else
+ {
+ species = spriteInfo[battlerId].transformSpecies;
+ personality = gTransformedPersonalities[battlerId];
+ }
+ if (species == SPECIES_UNOWN)
+ {
+ letter = GET_UNOWN_LETTER(personality);
+ if (!letter)
+ var = SPECIES_UNOWN;
+ else
+ var = letter + SPECIES_UNOWN_B - 1;
+ coords = &gMonFrontPicCoords[var];
+ }
+ else if (species == SPECIES_CASTFORM)
+ {
+ coords = &gCastformFrontSpriteCoords[gBattleMonForms[battlerId]];
+ }
+ else if (species > SPECIES_EGG)
+ {
+ coords = &gMonFrontPicCoords[0];
+ }
+ else
+ {
+ coords = &gMonFrontPicCoords[species];
+ }
+ }
+ }
+
+ switch (a2)
+ {
+ case 0:
+ return (coords->coords & 0xf) * 8;
+ case 1:
+ return (coords->coords >> 4) * 8;
+ case 4:
+ return GetBattlerSpriteCoord(battlerId, 2) - ((coords->coords >> 4) * 4);
+ case 5:
+ return GetBattlerSpriteCoord(battlerId, 2) + ((coords->coords >> 4) * 4);
+ case 2:
+ return GetBattlerSpriteCoord(battlerId, 3) - ((coords->coords & 0xf) * 4);
+ case 3:
+ return GetBattlerSpriteCoord(battlerId, 3) + ((coords->coords & 0xf) * 4);
+ case 6:
+ ret = GetBattlerSpriteCoord(battlerId, 1) + 0x1f;
+ return ret - coords->y_offset;
+ default:
+ return 0;
+ }
+}
+
+void SetAverageBattlerPositions(u8 battlerId, bool8 a2, s16 *x, s16 *y)
+{
+ u8 v1, v2;
+ s16 v3, v4;
+ s16 v5, v6;
+
+ if (!a2)
+ {
+ v1 = 0;
+ v2 = 1;
+ }
+ else
+ {
+ v1 = 2;
+ v2 = 3;
+ }
+ v3 = GetBattlerSpriteCoord(battlerId, v1);
+ v4 = GetBattlerSpriteCoord(battlerId, v2);
+ if (IsDoubleBattle() && !IsContest())
+ {
+ v5 = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), v1);
+ v6 = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), v2);
+ }
+ else
+ {
+ v5 = v3;
+ v6 = v4;
+ }
+ *x = (v3 + v5) / 2;
+ *y = (v4 + v6) / 2;
+}
+
+u8 sub_80A89C8(int battlerId, u8 spriteId, int species)
+{
+ u8 newSpriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ gSprites[newSpriteId] = gSprites[spriteId];
+ gSprites[newSpriteId].usingSheet = TRUE;
+ gSprites[newSpriteId].oam.priority = 0;
+ gSprites[newSpriteId].oam.objMode = 2;
+ gSprites[newSpriteId].oam.tileNum = gSprites[spriteId].oam.tileNum;
+ gSprites[newSpriteId].callback = SpriteCallbackDummy;
+ return newSpriteId;
+}
+
+void sub_80A8A6C(struct Sprite *sprite)
+{
+ sub_80A6838(sprite);
+ if (GetBattlerSide(gBattleAnimAttacker))
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ sprite->hFlip = TRUE;
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ }
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[3] = gBattleAnimArgs[4];
+ sprite->data[5] = gBattleAnimArgs[5];
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ sprite->callback = sub_80A66DC;
+}
+
+void sub_80A8AEC(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ gBattleAnimArgs[3] *= -1;
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ }
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[3] = gBattleAnimArgs[4];
+ sprite->data[5] = gBattleAnimArgs[5];
+ StartSpriteAnim(sprite, gBattleAnimArgs[6]);
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ sprite->callback = sub_80A66DC;
+}
+
+void sub_80A8B64(struct Sprite *sprite)
+{
+ sub_80A6838(sprite);
+ if (GetBattlerSide(gBattleAnimAttacker))
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->callback = sub_80A67D8;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_80A8BC4(u8 taskId)
+{
+ u16 src;
+ u16 dest;
+ struct Task *task = &gTasks[taskId];
+
+ task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[1] = ((GetBattlerSide(gBattleAnimAttacker)) != B_SIDE_PLAYER) ? -8 : 8;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ gSprites[task->data[0]].pos2.x -= task->data[0];
+ task->data[4] = AllocSpritePalette(10097);
+ task->data[5] = 0;
+
+ dest = (task->data[4] + 0x10) * 0x10;
+ src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10;
+ task->data[6] = sub_80A82E4(gBattleAnimAttacker);
+ if (task->data[6] == 20 || task->data[6] == 40)
+ task->data[6] = 2;
+ else
+ task->data[6] = 3;
+ CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20);
+ BlendPalette(dest, 16, gBattleAnimArgs[1], gBattleAnimArgs[0]);
+ task->func = sub_80A8CAC;
+}
+
+void sub_80A8CAC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ switch (task->data[2])
+ {
+ case 0:
+ sub_80A8D78(task, taskId);
+ gSprites[task->data[0]].pos2.x += task->data[1];
+ if (++task->data[3] == 5)
+ {
+ task->data[3]--;
+ task->data[2]++;
+ }
+ break;
+ case 1:
+ sub_80A8D78(task, taskId);
+ gSprites[task->data[0]].pos2.x -= task->data[1];
+ if (--task->data[3] == 0)
+ {
+ gSprites[task->data[0]].pos2.x = 0;
+ task->data[2]++;
+ }
+ break;
+ case 2:
+ if (!task->data[5])
+ {
+ FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON);
+ DestroyAnimVisualTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_80A8D78(struct Task *task, u8 taskId)
+{
+ s16 spriteId = duplicate_obj_of_side_rel2move_in_transparent_mode(0);
+ if (spriteId >= 0)
+ {
+ gSprites[spriteId].oam.priority = task->data[6];
+ gSprites[spriteId].oam.paletteNum = task->data[4];
+ gSprites[spriteId].data[0] = 8;
+ gSprites[spriteId].data[1] = taskId;
+ gSprites[spriteId].data[2] = spriteId;
+ gSprites[spriteId].pos2.x = gSprites[task->data[0]].pos2.x;
+ gSprites[spriteId].callback = sub_80A8DFC;
+ task->data[5]++;
+ }
+}
+
+void sub_80A8DFC(struct Sprite *sprite)
+{
+ if (--sprite->data[0] == 0)
+ {
+ gTasks[sprite->data[1]].data[5]--;
+ obj_delete_but_dont_free_vram(sprite);
+ }
+}
+
+void sub_80A8E30(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_3);
+ if (!GetBattlerSide(gBattleAnimAttacker))
+ sprite->data[0] = 5;
+ else
+ sprite->data[0] = -10;
+ sprite->data[1] = -40;
+ sprite->callback = sub_80A8E88;
+}
+
+void sub_80A8E88(struct Sprite *sprite)
+{
+ sprite->data[2] += sprite->data[0];
+ sprite->data[3] += sprite->data[1];
+ sprite->pos2.x = sprite->data[2] / 10;
+ sprite->pos2.y = sprite->data[3] / 10;
+ if (sprite->data[1] < -20)
+ sprite->data[1]++;
+ if (sprite->pos1.y + sprite->pos2.y < -32)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80A8EE4(struct Sprite *sprite)
+{
+ int x;
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[4];
+ sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[5];
+ if (!GetBattlerSide(gBattleAnimTarget))
+ {
+ x = (u16)gBattleAnimArgs[4] + 30;
+ sprite->pos1.x += x;
+ sprite->pos1.y = gBattleAnimArgs[5] - 20;
+ }
+ else
+ {
+ x = (u16)gBattleAnimArgs[4] - 30;
+ sprite->pos1.x += x;
+ sprite->pos1.y = gBattleAnimArgs[5] - 80;
+ }
+ sprite->callback = sub_80A6EEC;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 4b3f9d10c..08a834057 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -248,12 +248,9 @@ gUnknown_020375D6: @ 20375D6
.include "src/palette.o"
.include "src/sound.o"
.include "src/battle_anim.o"
-
-.align 2
-
-gUnknown_02038444: @ 2038444
- .space 0x10
-
+ .include "src/battle_anim_80A5C6C.o"
+
+ .space 0xC
gUnknown_02038454: @ 2038454
.space 0x200