summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-09-24 08:19:51 -0500
committerGitHub <noreply@github.com>2018-09-24 08:19:51 -0500
commitc118a58f563648e0e4d824ed453386940d95e485 (patch)
treed69759f14dd7c2ef72f3a398a7e610ff5d817966
parent1a789fa2b35eee5cf6a9b6c601b17655d645103d (diff)
parent86e83e1f2bf93eed09d277429c1da742e363d0d2 (diff)
Merge pull request #652 from garakmon/ice
Decompile ice.s
-rw-r--r--asm/ice.s3186
-rw-r--r--data/battle_anim_scripts.s230
-rw-r--r--include/rom_8077ABC.h1
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle/anim/aurora.c34
-rw-r--r--src/battle/anim/ice.c1953
6 files changed, 2029 insertions, 3376 deletions
diff --git a/asm/ice.s b/asm/ice.s
deleted file mode 100644
index 22381fa16..000000000
--- a/asm/ice.s
+++ /dev/null
@@ -1,3186 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "include/macros.inc"
-
- .syntax unified
-
- .text
-
- @ ice
-
- thumb_func_start sub_80D7704
-sub_80D7704: @ 80D7704
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r2, [r5, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- adds r1, 0x7
- ldr r3, _080D780C @ =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldr r0, _080D7810 @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x4]
- ldr r4, _080D7814 @ =gAnimBankTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r4, _080D7818 @ =gAnimBankAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r3, r0, 24
- ldrb r0, [r4]
- movs r1, 0x3
- str r3, [sp]
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _080D781C @ =gBattleAnimArgs
- ldrh r0, [r1, 0x8]
- strh r0, [r5, 0x2E]
- ldrh r0, [r1]
- ldr r3, [sp]
- adds r0, r3
- strh r0, [r5, 0x30]
- ldrh r0, [r1, 0x4]
- mov r4, r9
- adds r0, r4, r0
- strh r0, [r5, 0x32]
- ldrh r0, [r1, 0x2]
- adds r0, r6
- strh r0, [r5, 0x34]
- ldrh r0, [r1, 0x6]
- mov r7, r8
- adds r0, r7, r0
- strh r0, [r5, 0x36]
- adds r0, r5, 0
- bl sub_8078314
- adds r4, 0x20
- movs r0, 0x98
- lsls r0, 1
- mov r12, r0
- ldr r3, [sp]
- cmp r4, r12
- bhi _080D77DE
- adds r0, r7, 0
- adds r0, 0x20
- ldrh r1, [r5, 0x30]
- ldrh r2, [r5, 0x32]
- cmp r0, 0xE0
- bhi _080D77DE
- adds r4, r1, 0
- mov r10, r12
-_080D77AA:
- mov r7, r9
- lsls r1, r7, 16
- asrs r1, 16
- adds r1, r4
- lsls r1, 16
- mov r7, r8
- lsls r0, r7, 16
- asrs r0, 16
- adds r0, r2
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsrs r0, r1, 16
- mov r9, r0
- movs r7, 0x80
- lsls r7, 14
- adds r1, r7
- lsrs r1, 16
- cmp r1, r10
- bhi _080D77DE
- mov r1, r8
- lsls r0, r1, 16
- adds r0, r7
- lsrs r0, 16
- cmp r0, 0xE0
- bls _080D77AA
-_080D77DE:
- ldrh r0, [r5, 0x30]
- negs r7, r0
- strh r7, [r5, 0x30]
- ldrh r0, [r5, 0x32]
- negs r4, r0
- strh r4, [r5, 0x32]
- lsls r0, r3, 16
- movs r1, 0x80
- lsls r1, 14
- adds r0, r1
- lsrs r0, 16
- movs r2, 0x98
- lsls r2, 1
- mov r12, r2
- ldr r1, _080D781C @ =gBattleAnimArgs
- mov r10, r1
- cmp r0, r12
- bhi _080D784A
- lsls r1, r6, 16
- movs r2, 0x80
- lsls r2, 14
- adds r0, r1, r2
- b _080D7842
- .align 2, 0
-_080D780C: .4byte 0x000003ff
-_080D7810: .4byte 0xfffffc00
-_080D7814: .4byte gAnimBankTarget
-_080D7818: .4byte gAnimBankAttacker
-_080D781C: .4byte gBattleAnimArgs
-_080D7820:
- lsls r1, r3, 16
- asrs r1, 16
- adds r1, r7
- lsls r1, 16
- asrs r0, r2, 16
- adds r0, r4
- lsls r0, 16
- lsrs r6, r0, 16
- lsrs r3, r1, 16
- movs r0, 0x80
- lsls r0, 14
- adds r1, r0
- lsrs r1, 16
- cmp r1, r12
- bhi _080D784A
- lsls r1, r6, 16
- adds r0, r1, r0
-_080D7842:
- lsrs r0, 16
- adds r2, r1, 0
- cmp r0, 0xE0
- bls _080D7820
-_080D784A:
- strh r3, [r5, 0x20]
- strh r6, [r5, 0x22]
- mov r1, r10
- ldrh r0, [r1, 0x8]
- strh r0, [r5, 0x2E]
- strh r3, [r5, 0x30]
- mov r2, r9
- strh r2, [r5, 0x32]
- strh r6, [r5, 0x34]
- mov r3, r8
- strh r3, [r5, 0x36]
- adds r0, r5, 0
- bl sub_8078314
- mov r7, r10
- ldrh r0, [r7, 0xA]
- strh r0, [r5, 0x34]
- ldrh r0, [r7, 0xC]
- strh r0, [r5, 0x36]
- ldr r0, _080D7884 @ =sub_80D7888
- str r0, [r5, 0x1C]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D7884: .4byte sub_80D7888
- thumb_func_end sub_80D7704
-
- thumb_func_start sub_80D7888
-sub_80D7888: @ 80D7888
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080D78E0
- ldrh r1, [r4, 0x30]
- ldrh r2, [r4, 0x38]
- adds r1, r2
- strh r1, [r4, 0x38]
- ldrh r0, [r4, 0x32]
- ldrh r2, [r4, 0x3A]
- adds r0, r2
- strh r0, [r4, 0x3A]
- strh r1, [r4, 0x24]
- strh r0, [r4, 0x26]
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- movs r2, 0x34
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x24]
- adds r0, r1
- strh r0, [r4, 0x24]
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- movs r2, 0x34
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x36]
- ldrh r2, [r4, 0x3C]
- adds r0, r2
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x3C]
- ldrh r0, [r4, 0x2E]
- subs r0, 0x1
- strh r0, [r4, 0x2E]
- b _080D78E6
-_080D78E0:
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080D78E6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80D7888
-
- thumb_func_start sub_80D78EC
-sub_80D78EC: @ 80D78EC
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080D7920 @ =gBattleAnimArgs
- ldrh r0, [r0]
- strh r0, [r4, 0x2E]
- movs r0, 0x3C
- strh r0, [r4, 0x30]
- movs r0, 0x9
- strh r0, [r4, 0x32]
- movs r0, 0x1E
- strh r0, [r4, 0x34]
- movs r0, 0xFE
- lsls r0, 8
- strh r0, [r4, 0x36]
- ldr r1, _080D7924 @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData
- ldr r1, _080D7928 @ =sub_8078174
- str r1, [r4, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D7920: .4byte gBattleAnimArgs
-_080D7924: .4byte DestroyAnimSprite
-_080D7928: .4byte sub_8078174
- thumb_func_end sub_80D78EC
-
- thumb_func_start sub_80D792C
-sub_80D792C: @ 80D792C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl InitAnimSpritePos
- ldr r0, _080D7960 @ =gAnimBankTarget
- ldrb r0, [r0]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x32]
- ldr r0, _080D7964 @ =gAnimBankAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D796C
- ldr r0, _080D7968 @ =gBattleAnimArgs
- ldrh r1, [r4, 0x32]
- ldrh r0, [r0, 0x4]
- subs r1, r0
- strh r1, [r4, 0x32]
- b _080D7976
- .align 2, 0
-_080D7960: .4byte gAnimBankTarget
-_080D7964: .4byte gAnimBankAttacker
-_080D7968: .4byte gBattleAnimArgs
-_080D796C:
- ldr r0, _080D79A4 @ =gBattleAnimArgs
- ldrh r0, [r0, 0x4]
- ldrh r1, [r4, 0x32]
- adds r0, r1
- strh r0, [r4, 0x32]
-_080D7976:
- ldr r0, _080D79A8 @ =gAnimBankTarget
- ldrb r0, [r0]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- ldr r1, _080D79A4 @ =gBattleAnimArgs
- lsrs r0, 24
- ldrh r2, [r1, 0x6]
- adds r0, r2
- strh r0, [r4, 0x36]
- ldrh r0, [r1, 0x8]
- strh r0, [r4, 0x2E]
- ldr r1, _080D79AC @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData
- ldr r0, _080D79B0 @ =StartAnimLinearTranslation
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D79A4: .4byte gBattleAnimArgs
-_080D79A8: .4byte gAnimBankTarget
-_080D79AC: .4byte DestroyAnimSprite
-_080D79B0: .4byte StartAnimLinearTranslation
- thumb_func_end sub_80D792C
-
- thumb_func_start sub_80D79B4
-sub_80D79B4: @ 80D79B4
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _080D79CC @ =gBattleAnimArgs
- movs r1, 0x4
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080D79D0
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_8078764
- b _080D7A06
- .align 2, 0
-_080D79CC: .4byte gBattleAnimArgs
-_080D79D0:
- ldr r0, _080D7A18 @ =gAnimBankTarget
- ldrb r0, [r0]
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- movs r1, 0x1
- bl SetAverageBattlerPositions
- ldr r0, _080D7A1C @ =gAnimBankAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D79F6
- ldrh r0, [r5]
- negs r0, r0
- strh r0, [r5]
-_080D79F6:
- ldrh r0, [r5]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r5, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
-_080D7A06:
- ldr r1, _080D7A20 @ =sub_80D7A28
- adds r0, r4, 0
- bl StoreSpriteCallbackInData
- ldr r0, _080D7A24 @ =sub_80785E4
- str r0, [r4, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080D7A18: .4byte gAnimBankTarget
-_080D7A1C: .4byte gAnimBankAttacker
-_080D7A20: .4byte sub_80D7A28
-_080D7A24: .4byte sub_80785E4
- thumb_func_end sub_80D79B4
-
- thumb_func_start sub_80D7A28
-sub_80D7A28: @ 80D7A28
- push {lr}
- adds r3, r0, 0
- movs r0, 0x3E
- adds r0, r3
- mov r12, r0
- ldrb r2, [r0]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- bne _080D7A5E
- adds r0, r3, 0
- bl move_anim_8074EE0
-_080D7A5E:
- pop {r0}
- bx r0
- thumb_func_end sub_80D7A28
-
- thumb_func_start sub_80D7A64
-sub_80D7A64: @ 80D7A64
- push {r4-r7,lr}
- sub sp, 0x10
- adds r5, r0, 0
- movs r1, 0x1
- bl InitAnimSpritePos
- ldr r6, _080D7AAC @ =gBattleAnimArgs
- ldrh r0, [r6, 0x8]
- strh r0, [r5, 0x2E]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x30]
- ldrh r0, [r5, 0x22]
- strh r0, [r5, 0x34]
- movs r1, 0xA
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _080D7AB4
- ldr r4, _080D7AB0 @ =gAnimBankTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r6, [r6, 0x6]
- adds r0, r6
- strh r0, [r5, 0x36]
- b _080D7AC6
- .align 2, 0
-_080D7AAC: .4byte gBattleAnimArgs
-_080D7AB0: .4byte gAnimBankTarget
-_080D7AB4:
- ldr r0, _080D7AE0 @ =gAnimBankTarget
- ldrb r0, [r0]
- adds r2, r5, 0
- adds r2, 0x32
- adds r3, r5, 0
- adds r3, 0x36
- movs r1, 0x1
- bl SetAverageBattlerPositions
-_080D7AC6:
- ldr r0, _080D7AE4 @ =gAnimBankAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D7AEC
- ldr r0, _080D7AE8 @ =gBattleAnimArgs
- ldrh r1, [r5, 0x32]
- ldrh r0, [r0, 0x4]
- subs r1, r0
- strh r1, [r5, 0x32]
- b _080D7AF6
- .align 2, 0
-_080D7AE0: .4byte gAnimBankTarget
-_080D7AE4: .4byte gAnimBankAttacker
-_080D7AE8: .4byte gBattleAnimArgs
-_080D7AEC:
- ldr r0, _080D7B94 @ =gBattleAnimArgs
- ldrh r0, [r0, 0x4]
- ldrh r2, [r5, 0x32]
- adds r0, r2
- strh r0, [r5, 0x32]
-_080D7AF6:
- adds r7, r5, 0
- adds r7, 0x2E
- adds r2, r7, 0
- mov r1, sp
- movs r4, 0x7
-_080D7B00:
- ldrh r0, [r2]
- strh r0, [r1]
- adds r2, 0x2
- adds r1, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080D7B00
- adds r0, r5, 0
- bl sub_8078D60
- ldrh r0, [r5, 0x30]
- movs r1, 0x1
- eors r0, r1
- strh r0, [r5, 0x30]
- ldrh r0, [r5, 0x32]
- eors r0, r1
- strh r0, [r5, 0x32]
-_080D7B22:
- movs r0, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r5, 0
- bl sub_8078CE8
- movs r0, 0x20
- ldrsh r1, [r5, r0]
- movs r2, 0x24
- ldrsh r0, [r5, r2]
- adds r1, r0
- adds r1, 0x10
- movs r0, 0x88
- lsls r0, 1
- cmp r1, r0
- bhi _080D7B56
- movs r0, 0x22
- ldrsh r1, [r5, r0]
- movs r2, 0x26
- ldrsh r0, [r5, r2]
- adds r1, r0
- cmp r1, 0xA0
- bgt _080D7B56
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- bge _080D7B22
-_080D7B56:
- ldrh r0, [r5, 0x24]
- ldrh r1, [r5, 0x20]
- adds r0, r1
- movs r1, 0
- strh r0, [r5, 0x20]
- ldrh r0, [r5, 0x26]
- ldrh r2, [r5, 0x22]
- adds r0, r2
- strh r0, [r5, 0x22]
- strh r1, [r5, 0x26]
- strh r1, [r5, 0x24]
- ldr r6, _080D7B98 @ =sub_8078D8C
- ldr r1, _080D7B9C @ =sub_80D7BA0
- mov r3, sp
- adds r2, r7, 0
- movs r4, 0x7
-_080D7B76:
- ldrh r0, [r3]
- strh r0, [r2]
- adds r3, 0x2
- adds r2, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080D7B76
- str r6, [r5, 0x1C]
- adds r0, r5, 0
- bl StoreSpriteCallbackInData
- add sp, 0x10
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D7B94: .4byte gBattleAnimArgs
-_080D7B98: .4byte sub_8078D8C
-_080D7B9C: .4byte sub_80D7BA0
- thumb_func_end sub_80D7A64
-
- thumb_func_start sub_80D7BA0
-sub_80D7BA0: @ 80D7BA0
- push {r4,r5,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x24]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- movs r5, 0
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x26]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
- strh r5, [r4, 0x26]
- strh r5, [r4, 0x24]
- movs r0, 0x80
- strh r0, [r4, 0x2E]
- ldr r0, _080D7BFC @ =gAnimBankAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- ldr r1, _080D7C00 @ =0x0000ffec
- cmp r0, 0
- beq _080D7BD0
- movs r1, 0x14
-_080D7BD0:
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- lsls r1, 16
- asrs r1, 16
- bl Sin
- strh r0, [r4, 0x34]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- movs r1, 0xF
- bl Cos
- strh r0, [r4, 0x36]
- strh r5, [r4, 0x38]
- ldr r1, _080D7C04 @ =sub_80D7C08
- str r1, [r4, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080D7BFC: .4byte gAnimBankAttacker
-_080D7C00: .4byte 0x0000ffec
-_080D7C04: .4byte sub_80D7C08
- thumb_func_end sub_80D7BA0
-
- thumb_func_start sub_80D7C08
-sub_80D7C08: @ 80D7C08
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080D7C5C @ =gAnimBankAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- ldr r1, _080D7C60 @ =0x0000ffec
- cmp r0, 0
- beq _080D7C1E
- movs r1, 0x14
-_080D7C1E:
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- cmp r0, 0x1F
- bgt _080D7C64
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- lsls r1, 16
- asrs r1, 16
- bl Sin
- ldrh r1, [r4, 0x34]
- subs r0, r1
- strh r0, [r4, 0x24]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- movs r1, 0xF
- bl Cos
- ldrh r1, [r4, 0x36]
- subs r0, r1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x10
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- b _080D7C82
- .align 2, 0
-_080D7C5C: .4byte gAnimBankAttacker
-_080D7C60: .4byte 0x0000ffec
-_080D7C64:
- ldrh r0, [r4, 0x24]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- movs r1, 0
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x26]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
- strh r1, [r4, 0x26]
- strh r1, [r4, 0x24]
- strh r1, [r4, 0x36]
- strh r1, [r4, 0x34]
- ldr r0, _080D7C88 @ =sub_80D7C8C
- str r0, [r4, 0x1C]
-_080D7C82:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D7C88: .4byte sub_80D7C8C
- thumb_func_end sub_80D7C08
-
- thumb_func_start sub_80D7C8C
-sub_80D7C8C: @ 80D7C8C
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x1
- strh r0, [r4, 0x2E]
- adds r0, r4, 0
- bl sub_8078CE8
- movs r1, 0x20
- ldrsh r0, [r4, r1]
- movs r2, 0x24
- ldrsh r1, [r4, r2]
- adds r0, r1
- adds r0, 0x10
- movs r1, 0x88
- lsls r1, 1
- cmp r0, r1
- bhi _080D7CC8
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- movs r2, 0x26
- ldrsh r1, [r4, r2]
- adds r1, r0, r1
- movs r0, 0x80
- lsls r0, 1
- cmp r1, r0
- bgt _080D7CC8
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- bge _080D7CCE
-_080D7CC8:
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080D7CCE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80D7C8C
-
- thumb_func_start sub_80D7CD4
-sub_80D7CD4: @ 80D7CD4
- push {r4-r7,lr}
- sub sp, 0x10
- adds r5, r0, 0
- movs r1, 0x1
- bl InitAnimSpritePos
- ldr r1, _080D7D18 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x8]
- strh r0, [r5, 0x2E]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x30]
- ldrh r0, [r5, 0x22]
- strh r0, [r5, 0x34]
- movs r2, 0xE
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _080D7D20
- ldr r4, _080D7D1C @ =gAnimBankTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x36]
- b _080D7D32
- .align 2, 0
-_080D7D18: .4byte gBattleAnimArgs
-_080D7D1C: .4byte gAnimBankTarget
-_080D7D20:
- ldr r0, _080D7D50 @ =gAnimBankTarget
- ldrb r0, [r0]
- adds r2, r5, 0
- adds r2, 0x32
- adds r3, r5, 0
- adds r3, 0x36
- movs r1, 0x1
- bl SetAverageBattlerPositions
-_080D7D32:
- ldr r0, _080D7D54 @ =gAnimBankAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D7D5C
- ldr r0, _080D7D58 @ =gBattleAnimArgs
- ldrh r1, [r5, 0x32]
- ldrh r2, [r0, 0x4]
- subs r1, r2
- strh r1, [r5, 0x32]
- adds r1, r0, 0
- b _080D7D66
- .align 2, 0
-_080D7D50: .4byte gAnimBankTarget
-_080D7D54: .4byte gAnimBankAttacker
-_080D7D58: .4byte gBattleAnimArgs
-_080D7D5C:
- ldr r1, _080D7E10 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- ldrh r2, [r5, 0x32]
- adds r0, r2
- strh r0, [r5, 0x32]
-_080D7D66:
- ldrh r0, [r1, 0x6]
- ldrh r1, [r5, 0x36]
- adds r0, r1
- strh r0, [r5, 0x36]
- adds r0, r5, 0
- bl sub_8078D60
- adds r7, r5, 0
- adds r7, 0x2E
- adds r2, r7, 0
- mov r1, sp
- movs r4, 0x7
-_080D7D7E:
- ldrh r0, [r2]
- strh r0, [r1]
- adds r2, 0x2
- adds r1, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080D7D7E
- ldrh r0, [r5, 0x30]
- movs r1, 0x1
- eors r0, r1
- strh r0, [r5, 0x30]
- ldrh r0, [r5, 0x32]
- eors r0, r1
- strh r0, [r5, 0x32]
-_080D7D9A:
- movs r0, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r5, 0
- bl sub_8078CE8
- movs r2, 0x20
- ldrsh r1, [r5, r2]
- movs r2, 0x24
- ldrsh r0, [r5, r2]
- adds r1, r0
- adds r1, 0x10
- movs r0, 0x88
- lsls r0, 1
- cmp r1, r0
- bhi _080D7DCE
- movs r0, 0x22
- ldrsh r1, [r5, r0]
- movs r2, 0x26
- ldrsh r0, [r5, r2]
- adds r1, r0
- cmp r1, 0xA0
- bgt _080D7DCE
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- bge _080D7D9A
-_080D7DCE:
- ldrh r0, [r5, 0x24]
- ldrh r1, [r5, 0x20]
- adds r0, r1
- movs r1, 0
- strh r0, [r5, 0x20]
- ldrh r0, [r5, 0x26]
- ldrh r2, [r5, 0x22]
- adds r0, r2
- strh r0, [r5, 0x22]
- strh r1, [r5, 0x26]
- strh r1, [r5, 0x24]
- ldr r1, _080D7E10 @ =gBattleAnimArgs
- ldr r6, _080D7E14 @ =sub_80D7E18
- mov r3, sp
- adds r2, r7, 0
- movs r4, 0x7
-_080D7DEE:
- ldrh r0, [r3]
- strh r0, [r2]
- adds r3, 0x2
- adds r2, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080D7DEE
- ldrh r0, [r1, 0xA]
- strh r0, [r5, 0x38]
- ldrh r0, [r1, 0xC]
- strh r0, [r5, 0x3A]
- str r6, [r5, 0x1C]
- add sp, 0x10
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D7E10: .4byte gBattleAnimArgs
-_080D7E14: .4byte sub_80D7E18
- thumb_func_end sub_80D7CD4
-
- thumb_func_start sub_80D7E18
-sub_80D7E18: @ 80D7E18
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8078CE8
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080D7E2C
- movs r0, 0x1
- strh r0, [r4, 0x2E]
-_080D7E2C:
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- ldrh r2, [r4, 0x3C]
- adds r0, r2
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x3C]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- bne _080D7E82
- movs r2, 0x20
- ldrsh r0, [r4, r2]
- movs r2, 0x24
- ldrsh r1, [r4, r2]
- adds r0, r1
- adds r0, 0x10
- movs r1, 0x88
- lsls r1, 1
- cmp r0, r1
- bhi _080D7E7C
- movs r0, 0x22
- ldrsh r1, [r4, r0]
- movs r2, 0x26
- ldrsh r0, [r4, r2]
- adds r1, r0
- cmp r1, 0xA0
- bgt _080D7E7C
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- bge _080D7E82
-_080D7E7C:
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080D7E82:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80D7E18
-
- thumb_func_start sub_80D7E88
-sub_80D7E88: @ 80D7E88
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080D7EF4
- ldr r5, _080D7EA8 @ =gBattleAnimArgs
- movs r1, 0x4
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080D7EAC
- adds r0, r4, 0
- movs r1, 0
- bl sub_8078764
- b _080D7EE2
- .align 2, 0
-_080D7EA8: .4byte gBattleAnimArgs
-_080D7EAC:
- ldr r0, _080D7EEC @ =gAnimBankTarget
- ldrb r0, [r0]
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- movs r1, 0
- bl SetAverageBattlerPositions
- ldr r0, _080D7EF0 @ =gAnimBankAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D7ED2
- ldrh r0, [r5]
- negs r0, r0
- strh r0, [r5]
-_080D7ED2:
- ldrh r0, [r5]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r5, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
-_080D7EE2:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _080D7F08
- .align 2, 0
-_080D7EEC: .4byte gAnimBankTarget
-_080D7EF0: .4byte gAnimBankAttacker
-_080D7EF4:
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080D7F08
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080D7F08:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80D7E88
-
- thumb_func_start sub_80D7F10
-sub_80D7F10: @ 80D7F10
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r6, _080D7F30 @ =gBattleAnimArgs
- movs r1, 0x8
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _080D7F80
- movs r1, 0xA
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _080D7F34
- adds r0, r5, 0
- movs r1, 0
- bl InitAnimSpritePos
- b _080D7F72
- .align 2, 0
-_080D7F30: .4byte gBattleAnimArgs
-_080D7F34:
- ldr r4, _080D7F5C @ =gAnimBankAttacker
- ldrb r0, [r4]
- adds r2, r5, 0
- adds r2, 0x20
- adds r3, r5, 0
- adds r3, 0x22
- movs r1, 0
- bl SetAverageBattlerPositions
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D7F60
- ldrh r0, [r5, 0x20]
- ldrh r1, [r6]
- subs r0, r1
- b _080D7F66
- .align 2, 0
-_080D7F5C: .4byte gAnimBankAttacker
-_080D7F60:
- ldrh r0, [r6]
- ldrh r1, [r5, 0x20]
- adds r0, r1
-_080D7F66:
- strh r0, [r5, 0x20]
- ldr r0, _080D7F78 @ =gBattleAnimArgs
- ldrh r0, [r0, 0x2]
- ldrh r1, [r5, 0x22]
- adds r0, r1
- strh r0, [r5, 0x22]
-_080D7F72:
- ldr r0, _080D7F7C @ =gAnimBankAttacker
- b _080D7FD0
- .align 2, 0
-_080D7F78: .4byte gBattleAnimArgs
-_080D7F7C: .4byte gAnimBankAttacker
-_080D7F80:
- movs r1, 0xA
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _080D7F92
- adds r0, r5, 0
- movs r1, 0
- bl sub_8078764
- b _080D7FCE
-_080D7F92:
- ldr r4, _080D7FB8 @ =gAnimBankTarget
- ldrb r0, [r4]
- adds r2, r5, 0
- adds r2, 0x20
- adds r3, r5, 0
- adds r3, 0x22
- movs r1, 0
- bl SetAverageBattlerPositions
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D7FBC
- ldrh r0, [r5, 0x20]
- ldrh r1, [r6]
- subs r0, r1
- b _080D7FC2
- .align 2, 0
-_080D7FB8: .4byte gAnimBankTarget
-_080D7FBC:
- ldrh r0, [r6]
- ldrh r1, [r5, 0x20]
- adds r0, r1
-_080D7FC2:
- strh r0, [r5, 0x20]
- ldr r0, _080D7FEC @ =gBattleAnimArgs
- ldrh r0, [r0, 0x2]
- ldrh r1, [r5, 0x22]
- adds r0, r1
- strh r0, [r5, 0x22]
-_080D7FCE:
- ldr r0, _080D7FF0 @ =gAnimBankTarget
-_080D7FD0:
- ldrb r0, [r0]
- strh r0, [r5, 0x3C]
- ldr r0, _080D7FEC @ =gBattleAnimArgs
- movs r1, 0xA
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _080D7FE8
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _080D7FF4
-_080D7FE8:
- movs r0, 0x20
- b _080D7FF6
- .align 2, 0
-_080D7FEC: .4byte gBattleAnimArgs
-_080D7FF0: .4byte gAnimBankTarget
-_080D7FF4:
- movs r0, 0x40
-_080D7FF6:
- strh r0, [r5, 0x3A]
- ldr r0, _080D803C @ =gAnimBankTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080D800C
- ldrh r0, [r5, 0x22]
- adds r0, 0x8
- strh r0, [r5, 0x22]
-_080D800C:
- ldr r1, _080D8040 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x6]
- strh r0, [r5, 0x2E]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x30]
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x22]
- strh r0, [r5, 0x34]
- ldrh r1, [r1, 0x4]
- adds r0, r1
- strh r0, [r5, 0x36]
- adds r0, r5, 0
- bl InitAnimLinearTranslation
- movs r0, 0x40
- strh r0, [r5, 0x38]
- ldr r1, _080D8044 @ =sub_80D8048
- str r1, [r5, 0x1C]
- adds r0, r5, 0
- bl _call_via_r1
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D803C: .4byte gAnimBankTarget
-_080D8040: .4byte gBattleAnimArgs
-_080D8044: .4byte sub_80D8048
- thumb_func_end sub_80D7F10
-
- thumb_func_start sub_80D8048
-sub_80D8048: @ 80D8048
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimLinear
- lsls r0, 24
- cmp r0, 0
- bne _080D80D2
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- movs r2, 0x3A
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x24]
- adds r0, r1
- strh r0, [r4, 0x24]
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- movs r1, 0x6
- negs r1, r1
- bl Cos
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x38]
- subs r0, 0x40
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x7F
- bhi _080D80A4
- ldrh r0, [r4, 0x3C]
- lsls r0, 24
- lsrs r0, 24
- bl sub_8079ED4
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- b _080D80C6
-_080D80A4:
- ldrh r0, [r4, 0x3C]
- lsls r0, 24
- lsrs r0, 24
- bl sub_8079ED4
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- lsls r0, 2
- ldrb r2, [r4, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x5]
-_080D80C6:
- ldrh r0, [r4, 0x38]
- adds r0, 0x3
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x38]
- b _080D80D8
-_080D80D2:
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080D80D8:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80D8048
-
- thumb_func_start sub_80D80E0
-sub_80D80E0: @ 80D80E0
- push {r4,r5,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080D81A8 @ =REG_BLDCNT
- ldr r2, _080D81AC @ =0x00003f42
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- movs r2, 0x80
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- ldr r4, _080D81B0 @ =REG_BG1CNT
- ldrb r1, [r4]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4]
- ldrb r1, [r4, 0x1]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r4, 0x1]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080D812A
- ldrb r0, [r4]
- movs r1, 0xD
- negs r1, r1
- ands r1, r0
- movs r0, 0x4
- orrs r1, r0
- strb r1, [r4]
-_080D812A:
- ldr r0, _080D81B4 @ =gBattle_BG1_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080D81B8 @ =gBattle_BG1_Y
- strh r1, [r0]
- ldr r0, _080D81BC @ =REG_BG1HOFS
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- mov r0, sp
- bl sub_8078914
- ldr r1, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0xC]
- ldr r0, _080D81C0 @ =0x040000d4
- add r2, sp, 0xC
- str r2, [r0]
- str r1, [r0, 0x4]
- ldr r2, _080D81C4 @ =0x85000400
- str r2, [r0, 0x8]
- ldr r2, [r0, 0x8]
- ldr r2, _080D81C8 @ =gWeatherFog1Tiles
- ldr r3, [sp]
- str r2, [r0]
- str r3, [r0, 0x4]
- ldr r2, _080D81CC @ =0x80000400
- str r2, [r0, 0x8]
- ldr r0, [r0, 0x8]
- ldr r0, _080D81D0 @ =gBattleAnimFogTilemap
- bl LZDecompressVram
- ldr r0, _080D81D4 @ =gUnknown_083970E8
- mov r1, sp
- ldrb r1, [r1, 0x8]
- lsls r1, 4
- movs r2, 0x20
- bl LoadPalette
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080D8190
- mov r0, sp
- ldrb r0, [r0, 0x8]
- ldr r1, [sp, 0x4]
- movs r2, 0
- movs r3, 0
- bl sub_80763FC
-_080D8190:
- ldr r0, _080D81D8 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _080D81DC @ =sub_80D81E0
- str r0, [r1]
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080D81A8: .4byte REG_BLDCNT
-_080D81AC: .4byte 0x00003f42
-_080D81B0: .4byte REG_BG1CNT
-_080D81B4: .4byte gBattle_BG1_X
-_080D81B8: .4byte gBattle_BG1_Y
-_080D81BC: .4byte REG_BG1HOFS
-_080D81C0: .4byte 0x040000d4
-_080D81C4: .4byte 0x85000400
-_080D81C8: .4byte gWeatherFog1Tiles
-_080D81CC: .4byte 0x80000400
-_080D81D0: .4byte gBattleAnimFogTilemap
-_080D81D4: .4byte gUnknown_083970E8
-_080D81D8: .4byte gTasks
-_080D81DC: .4byte sub_80D81E0
- thumb_func_end sub_80D80E0
-
- thumb_func_start sub_80D81E0
-sub_80D81E0: @ 80D81E0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r2, _080D8220 @ =gBattle_BG1_X
- ldr r1, _080D8224 @ =0x0000ffff
- adds r0, r1, 0
- ldrh r4, [r2]
- adds r0, r4
- strh r0, [r2]
- ldr r1, _080D8228 @ =gBattle_BG1_Y
- ldr r3, _080D822C @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r3
- movs r4, 0x20
- ldrsh r0, [r0, r4]
- adds r4, r1, 0
- cmp r0, 0x4
- bls _080D8214
- b _080D83B0
-_080D8214:
- lsls r0, 2
- ldr r1, _080D8230 @ =_080D8234
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080D8220: .4byte gBattle_BG1_X
-_080D8224: .4byte 0x0000ffff
-_080D8228: .4byte gBattle_BG1_Y
-_080D822C: .4byte gTasks
-_080D8230: .4byte _080D8234
- .align 2, 0
-_080D8234:
- .4byte _080D8248
- .4byte _080D82A0
- .4byte _080D82C2
- .4byte _080D8304
- .4byte _080D838C
-_080D8248:
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r3, r0, r3
- ldrh r0, [r3, 0x1C]
- adds r0, 0x1
- movs r4, 0
- strh r0, [r3, 0x1C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- beq _080D8262
- b _080D83B0
-_080D8262:
- strh r4, [r3, 0x1C]
- ldrh r0, [r3, 0x1A]
- adds r0, 0x1
- strh r0, [r3, 0x1A]
- ldr r1, _080D8298 @ =gUnknown_083D9D6C
- movs r2, 0x1A
- ldrsh r0, [r3, r2]
- adds r0, r1
- ldrb r1, [r0]
- strh r1, [r3, 0x1E]
- ldr r2, _080D829C @ =REG_BLDALPHA
- movs r0, 0x10
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- strh r1, [r2]
- movs r1, 0x1E
- ldrsh r0, [r3, r1]
- cmp r0, 0x9
- beq _080D828C
- b _080D83B0
-_080D828C:
- ldrh r0, [r3, 0x20]
- adds r0, 0x1
- strh r0, [r3, 0x20]
- strh r4, [r3, 0x1E]
- b _080D83B0
- .align 2, 0
-_080D8298: .4byte gUnknown_083D9D6C
-_080D829C: .4byte REG_BLDALPHA
-_080D82A0:
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r3, r0, r3
- ldrh r0, [r3, 0x1E]
- adds r0, 0x1
- strh r0, [r3, 0x1E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x51
- bne _080D83B0
- movs r0, 0x9
- strh r0, [r3, 0x1E]
- ldrh r0, [r3, 0x20]
- adds r0, 0x1
- strh r0, [r3, 0x20]
- b _080D83B0
-_080D82C2:
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r3, r0, r3
- ldrh r0, [r3, 0x1C]
- adds r0, 0x1
- strh r0, [r3, 0x1C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bne _080D83B0
- movs r0, 0
- strh r0, [r3, 0x1C]
- ldrh r1, [r3, 0x1E]
- subs r1, 0x1
- strh r1, [r3, 0x1E]
- ldr r2, _080D8300 @ =REG_BLDALPHA
- movs r0, 0x10
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- strh r1, [r2]
- movs r2, 0x1E
- ldrsh r1, [r3, r2]
- cmp r1, 0
- bne _080D83B0
- ldrh r0, [r3, 0x20]
- adds r0, 0x1
- strh r0, [r3, 0x20]
- strh r1, [r3, 0x1E]
- b _080D83B0
- .align 2, 0
-_080D8300: .4byte REG_BLDALPHA
-_080D8304:
- mov r0, sp
- bl sub_8078914
- ldr r2, [sp]
- movs r3, 0x80
- lsls r3, 6
- lsls r4, r6, 2
- mov r10, r4
- add r5, sp, 0xC
- movs r7, 0
- ldr r1, _080D83C0 @ =0x040000d4
- movs r4, 0x80
- lsls r4, 5
- mov r8, r5
- ldr r0, _080D83C4 @ =0x85000400
- mov r12, r0
- movs r0, 0x85
- lsls r0, 24
- mov r9, r0
-_080D832A:
- str r7, [sp, 0xC]
- mov r0, r8
- str r0, [r1]
- str r2, [r1, 0x4]
- mov r0, r12
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r2, r4
- subs r3, r4
- cmp r3, r4
- bhi _080D832A
- str r7, [sp, 0xC]
- str r5, [r1]
- str r2, [r1, 0x4]
- lsrs r0, r3, 2
- mov r2, r9
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- ldr r1, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0xC]
- ldr r0, _080D83C0 @ =0x040000d4
- str r5, [r0]
- str r1, [r0, 0x4]
- ldr r1, _080D83C8 @ =0x85000200
- str r1, [r0, 0x8]
- ldr r0, [r0, 0x8]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080D8378
- ldr r2, _080D83CC @ =REG_BG1CNT
- ldrb r1, [r2]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
-_080D8378:
- ldr r0, _080D83D0 @ =gTasks
- mov r4, r10
- adds r1, r4, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x20]
- adds r0, 0x1
- strh r0, [r1, 0x20]
- ldr r2, _080D83D4 @ =gBattle_BG1_X
- ldr r4, _080D83D8 @ =gBattle_BG1_Y
-_080D838C:
- movs r1, 0
- strh r1, [r2]
- strh r1, [r4]
- ldr r0, _080D83DC @ =REG_BLDCNT
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- ldr r2, _080D83CC @ =REG_BG1CNT
- ldrb r1, [r2]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- adds r0, r6, 0
- bl DestroyAnimVisualTask
-_080D83B0:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D83C0: .4byte 0x040000d4
-_080D83C4: .4byte 0x85000400
-_080D83C8: .4byte 0x85000200
-_080D83CC: .4byte REG_BG1CNT
-_080D83D0: .4byte gTasks
-_080D83D4: .4byte gBattle_BG1_X
-_080D83D8: .4byte gBattle_BG1_Y
-_080D83DC: .4byte REG_BLDCNT
- thumb_func_end sub_80D81E0
-
- thumb_func_start sub_80D83E0
-sub_80D83E0: @ 80D83E0
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _080D840C @ =gAnimBankAttacker
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x20]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x22]
- ldr r0, _080D8410 @ =TranslateAnimSpriteToTargetMonLocation
- str r0, [r4, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080D840C: .4byte gAnimBankAttacker
-_080D8410: .4byte TranslateAnimSpriteToTargetMonLocation
- thumb_func_end sub_80D83E0
-
- thumb_func_start sub_80D8414
-sub_80D8414: @ 80D8414
- push {r4,r5,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080D84E0 @ =REG_BLDCNT
- ldr r2, _080D84E4 @ =0x00003f42
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- movs r2, 0x80
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- ldr r4, _080D84E8 @ =REG_BG1CNT
- ldrb r1, [r4]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4]
- ldrb r1, [r4, 0x1]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r4, 0x1]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080D845E
- ldrb r0, [r4]
- movs r1, 0xD
- negs r1, r1
- ands r1, r0
- movs r0, 0x4
- orrs r1, r0
- strb r1, [r4]
-_080D845E:
- ldr r0, _080D84EC @ =gBattle_BG1_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080D84F0 @ =gBattle_BG1_Y
- strh r1, [r0]
- ldr r0, _080D84F4 @ =REG_BG1HOFS
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- mov r0, sp
- bl sub_8078914
- ldr r1, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0xC]
- ldr r0, _080D84F8 @ =0x040000d4
- add r2, sp, 0xC
- str r2, [r0]
- str r1, [r0, 0x4]
- ldr r2, _080D84FC @ =0x85000400
- str r2, [r0, 0x8]
- ldr r2, [r0, 0x8]
- ldr r2, _080D8500 @ =gWeatherFog1Tiles
- ldr r3, [sp]
- str r2, [r0]
- str r3, [r0, 0x4]
- ldr r2, _080D8504 @ =0x80000400
- str r2, [r0, 0x8]
- ldr r0, [r0, 0x8]
- ldr r0, _080D8508 @ =gBattleAnimFogTilemap
- bl LZDecompressVram
- ldr r0, _080D850C @ =gUnknown_083970E8
- mov r1, sp
- ldrb r1, [r1, 0x8]
- lsls r1, 4
- movs r2, 0x20
- bl LoadPalette
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080D84C4
- mov r0, sp
- ldrb r0, [r0, 0x8]
- ldr r1, [sp, 0x4]
- movs r2, 0
- movs r3, 0
- bl sub_80763FC
-_080D84C4:
- ldr r1, _080D8510 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _080D8514 @ =0x0000ffff
- strh r1, [r0, 0x26]
- ldr r1, _080D8518 @ =sub_80D851C
- str r1, [r0]
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080D84E0: .4byte REG_BLDCNT
-_080D84E4: .4byte 0x00003f42
-_080D84E8: .4byte REG_BG1CNT
-_080D84EC: .4byte gBattle_BG1_X
-_080D84F0: .4byte gBattle_BG1_Y
-_080D84F4: .4byte REG_BG1HOFS
-_080D84F8: .4byte 0x040000d4
-_080D84FC: .4byte 0x85000400
-_080D8500: .4byte gWeatherFog1Tiles
-_080D8504: .4byte 0x80000400
-_080D8508: .4byte gBattleAnimFogTilemap
-_080D850C: .4byte gUnknown_083970E8
-_080D8510: .4byte gTasks
-_080D8514: .4byte 0x0000ffff
-_080D8518: .4byte sub_80D851C
- thumb_func_end sub_80D8414
-
- thumb_func_start sub_80D851C
-sub_80D851C: @ 80D851C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r3, _080D8558 @ =gBattle_BG1_X
- ldr r4, _080D855C @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r4
- ldrh r0, [r1, 0x26]
- ldrh r2, [r3]
- adds r0, r2
- strh r0, [r3]
- ldr r2, _080D8560 @ =gBattle_BG1_Y
- movs r5, 0x20
- ldrsh r0, [r1, r5]
- cmp r0, 0x4
- bls _080D854C
- b _080D86D0
-_080D854C:
- lsls r0, 2
- ldr r1, _080D8564 @ =_080D8568
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080D8558: .4byte gBattle_BG1_X
-_080D855C: .4byte gTasks
-_080D8560: .4byte gBattle_BG1_Y
-_080D8564: .4byte _080D8568
- .align 2, 0
-_080D8568:
- .4byte _080D857C
- .4byte _080D85C0
- .4byte _080D85E2
- .4byte _080D8624
- .4byte _080D86AC
-_080D857C:
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r4, r0, r4
- ldrh r0, [r4, 0x1A]
- adds r0, 0x1
- strh r0, [r4, 0x1A]
- ldr r1, _080D85B8 @ =gUnknown_083D9D98
- movs r2, 0x1A
- ldrsh r0, [r4, r2]
- adds r0, r1
- ldrb r1, [r0]
- strh r1, [r4, 0x1E]
- ldr r2, _080D85BC @ =REG_BLDALPHA
- movs r0, 0x11
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- strh r1, [r2]
- movs r5, 0x1E
- ldrsh r0, [r4, r5]
- cmp r0, 0x5
- beq _080D85AC
- b _080D86D0
-_080D85AC:
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- strh r0, [r4, 0x20]
- movs r0, 0
- strh r0, [r4, 0x1E]
- b _080D86D0
- .align 2, 0
-_080D85B8: .4byte gUnknown_083D9D98
-_080D85BC: .4byte REG_BLDALPHA
-_080D85C0:
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r1, r0, r4
- ldrh r0, [r1, 0x1E]
- adds r0, 0x1
- strh r0, [r1, 0x1E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x51
- bne _080D86D0
- movs r0, 0x5
- strh r0, [r1, 0x1E]
- ldrh r0, [r1, 0x20]
- adds r0, 0x1
- strh r0, [r1, 0x20]
- b _080D86D0
-_080D85E2:
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r4, r0, r4
- ldrh r0, [r4, 0x1C]
- adds r0, 0x1
- strh r0, [r4, 0x1C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bne _080D86D0
- movs r0, 0
- strh r0, [r4, 0x1C]
- ldrh r1, [r4, 0x1E]
- subs r1, 0x1
- strh r1, [r4, 0x1E]
- ldr r2, _080D8620 @ =REG_BLDALPHA
- movs r0, 0x10
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- strh r1, [r2]
- movs r0, 0x1E
- ldrsh r1, [r4, r0]
- cmp r1, 0
- bne _080D86D0
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- strh r0, [r4, 0x20]
- strh r1, [r4, 0x1E]
- b _080D86D0
- .align 2, 0
-_080D8620: .4byte REG_BLDALPHA
-_080D8624:
- mov r0, sp
- bl sub_8078914
- ldr r2, [sp]
- movs r3, 0x80
- lsls r3, 6
- lsls r1, r6, 2
- mov r10, r1
- add r5, sp, 0xC
- movs r7, 0
- ldr r1, _080D86E0 @ =0x040000d4
- movs r4, 0x80
- lsls r4, 5
- mov r8, r5
- ldr r0, _080D86E4 @ =0x85000400
- mov r12, r0
- movs r0, 0x85
- lsls r0, 24
- mov r9, r0
-_080D864A:
- str r7, [sp, 0xC]
- mov r0, r8
- str r0, [r1]
- str r2, [r1, 0x4]
- mov r0, r12
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r2, r4
- subs r3, r4
- cmp r3, r4
- bhi _080D864A
- str r7, [sp, 0xC]
- str r5, [r1]
- str r2, [r1, 0x4]
- lsrs r0, r3, 2
- mov r2, r9
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- ldr r1, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0xC]
- ldr r0, _080D86E0 @ =0x040000d4
- str r5, [r0]
- str r1, [r0, 0x4]
- ldr r1, _080D86E8 @ =0x85000200
- str r1, [r0, 0x8]
- ldr r0, [r0, 0x8]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080D8698
- ldr r2, _080D86EC @ =REG_BG1CNT
- ldrb r1, [r2]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
-_080D8698:
- ldr r0, _080D86F0 @ =gTasks
- mov r5, r10
- adds r1, r5, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x20]
- adds r0, 0x1
- strh r0, [r1, 0x20]
- ldr r3, _080D86F4 @ =gBattle_BG1_X
- ldr r2, _080D86F8 @ =gBattle_BG1_Y
-_080D86AC:
- movs r1, 0
- strh r1, [r3]
- strh r1, [r2]
- ldr r0, _080D86FC @ =REG_BLDCNT
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- ldr r2, _080D86EC @ =REG_BG1CNT
- ldrb r1, [r2]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- adds r0, r6, 0
- bl DestroyAnimVisualTask
-_080D86D0:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D86E0: .4byte 0x040000d4
-_080D86E4: .4byte 0x85000400
-_080D86E8: .4byte 0x85000200
-_080D86EC: .4byte REG_BG1CNT
-_080D86F0: .4byte gTasks
-_080D86F4: .4byte gBattle_BG1_X
-_080D86F8: .4byte gBattle_BG1_Y
-_080D86FC: .4byte REG_BLDCNT
- thumb_func_end sub_80D851C
-
- thumb_func_start sub_80D8700
-sub_80D8700: @ 80D8700
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- ldr r6, _080D87E8 @ =gBattleAnimArgs
- ldrh r0, [r6]
- strh r0, [r5, 0x2E]
- ldr r0, _080D87EC @ =gAnimBankAttacker
- mov r8, r0
- ldrb r0, [r0]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- adds r4, r0, 0
- ldr r7, _080D87F0 @ =gAnimBankTarget
- ldrb r0, [r7]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bcs _080D8734
- movs r0, 0x80
- lsls r0, 8
- strh r0, [r5, 0x3C]
-_080D8734:
- ldr r3, _080D87F4 @ =gBanksBySide
- ldrb r0, [r7]
- adds r0, r3
- ldrb r1, [r0]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _080D8794
- ldrh r0, [r6, 0x2]
- negs r0, r0
- strh r0, [r6, 0x2]
- ldrh r0, [r6, 0x6]
- negs r0, r0
- strh r0, [r6, 0x6]
- movs r1, 0x3C
- ldrsh r0, [r5, r1]
- movs r1, 0x80
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- beq _080D8790
- mov r1, r8
- ldrb r0, [r1]
- adds r0, r3
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _080D8790
- movs r0, 0x1
- bl GetAnimBattlerSpriteId
- ldr r2, _080D87F8 @ =gSprites
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r1, 0x43
- ldrb r0, [r1]
- adds r0, 0x1
- adds r1, r5, 0
- adds r1, 0x43
- strb r0, [r1]
-_080D8790:
- movs r0, 0x1
- strh r0, [r5, 0x3A]
-_080D8794:
- ldr r4, _080D87EC @ =gAnimBankAttacker
- 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]
- ldr r6, _080D87E8 @ =gBattleAnimArgs
- movs r1, 0xE
- ldrsh r0, [r6, r1]
- cmp r0, 0
- beq _080D87FC
- ldrh r0, [r6, 0x2]
- ldrh r1, [r5, 0x20]
- adds r0, r1
- strh r0, [r5, 0x30]
- ldr r4, _080D87F0 @ =gAnimBankTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x6]
- adds r0, r1
- strh r0, [r5, 0x32]
- ldrh r0, [r6, 0x4]
- ldrh r1, [r5, 0x22]
- adds r0, r1
- strh r0, [r5, 0x34]
- ldrb r0, [r4]
- movs r1, 0x3
- b _080D8824
- .align 2, 0
-_080D87E8: .4byte gBattleAnimArgs
-_080D87EC: .4byte gAnimBankAttacker
-_080D87F0: .4byte gAnimBankTarget
-_080D87F4: .4byte gBanksBySide
-_080D87F8: .4byte gSprites
-_080D87FC:
- ldrh r0, [r6, 0x2]
- ldrh r1, [r5, 0x20]
- adds r0, r1
- strh r0, [r5, 0x30]
- ldr r4, _080D886C @ =gAnimBankTarget
- ldrb r0, [r4]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x6]
- adds r0, r1
- strh r0, [r5, 0x32]
- ldrh r0, [r6, 0x4]
- ldrh r1, [r5, 0x22]
- adds r0, r1
- strh r0, [r5, 0x34]
- ldrb r0, [r4]
- movs r1, 0x1
-_080D8824:
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r6, [r6, 0x8]
- adds r0, r6
- strh r0, [r5, 0x36]
- ldrb r0, [r4]
- bl sub_8079ED4
- lsls r0, 24
- lsrs r0, 16
- ldrh r1, [r5, 0x3C]
- orrs r0, r1
- strh r0, [r5, 0x3C]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080D8858
- movs r0, 0x1
- strh r0, [r5, 0x3A]
- adds r1, r5, 0
- adds r1, 0x43
- movs r0, 0x80
- strb r0, [r1]
-_080D8858:
- adds r0, r5, 0
- bl InitAnimLinearTranslation
- ldr r0, _080D8870 @ =sub_80D8874
- str r0, [r5, 0x1C]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D886C: .4byte gAnimBankTarget
-_080D8870: .4byte sub_80D8874
- thumb_func_end sub_80D8700
-
- thumb_func_start sub_80D8874
-sub_80D8874: @ 80D8874
- push {r4-r6,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x3C]
- movs r5, 0xFF
- movs r1, 0xFF
- ands r1, r0
- cmp r1, 0x1
- beq _080D8968
- cmp r1, 0x1
- bgt _080D888E
- cmp r1, 0
- beq _080D8896
- b _080D8AD0
-_080D888E:
- cmp r1, 0x2
- bne _080D8894
- b _080D8A94
-_080D8894:
- b _080D8AD0
-_080D8896:
- adds r0, r4, 0
- bl TranslateAnimLinear
- ldr r1, _080D88C0 @ =gSineTable
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- lsls r0, 1
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- asrs r0, 4
- ldrh r2, [r4, 0x24]
- adds r0, r2
- strh r0, [r4, 0x24]
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080D88C4
- ldrh r0, [r4, 0x38]
- subs r0, 0x8
- b _080D88C8
- .align 2, 0
-_080D88C0: .4byte gSineTable
-_080D88C4:
- ldrh r0, [r4, 0x38]
- adds r0, 0x8
-_080D88C8:
- ands r0, r5
- strh r0, [r4, 0x38]
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0
- ble _080D88D6
- b _080D8AD0
-_080D88D6:
- movs r5, 0x50
- strh r5, [r4, 0x2E]
- ldr r6, _080D8928 @ =gAnimBankTarget
- ldrb r0, [r6]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x26]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- adds r0, 0x1D
- strh r0, [r4, 0x36]
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- ldr r0, _080D892C @ =gMain
- ldr r2, _080D8930 @ =0x0000043d
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080D8938
- ldr r1, _080D8934 @ =gBanksBySide
- ldrb r0, [r6]
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080D8938
- movs r0, 0xCC
- strh r0, [r4, 0x38]
- b _080D893A
- .align 2, 0
-_080D8928: .4byte gAnimBankTarget
-_080D892C: .4byte gMain
-_080D8930: .4byte 0x0000043d
-_080D8934: .4byte gBanksBySide
-_080D8938:
- strh r5, [r4, 0x38]
-_080D893A:
- movs r0, 0
- strh r0, [r4, 0x26]
- ldr r1, _080D8964 @ =gSineTable
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- lsls r0, 1
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- asrs r0, 3
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x38]
- adds r0, 0x2
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x38]
- adds r0, r4, 0
- bl InitAnimLinearTranslation
- b _080D8AD0
- .align 2, 0
-_080D8964: .4byte gSineTable
-_080D8968:
- adds r0, r4, 0
- bl TranslateAnimLinear
- ldr r1, _080D89C8 @ =gSineTable
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- ldrsh r0, [r0, r2]
- asrs r0, 3
- ldrh r2, [r4, 0x24]
- adds r0, r2
- strh r0, [r4, 0x24]
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- adds r0, 0x40
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- ldrsh r1, [r0, r2]
- lsls r0, r1, 1
- adds r0, r1
- negs r0, r0
- asrs r0, 8
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
- ldr r0, _080D89CC @ =gMain
- ldr r2, _080D89D0 @ =0x0000043d
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080D89F2
- ldrh r1, [r4, 0x38]
- adds r0, r1, 0
- subs r0, 0x40
- lsls r0, 16
- lsrs r0, 16
- adds r3, r1, 0
- cmp r0, 0x7F
- bhi _080D89D4
- ldrh r1, [r4, 0x3C]
- lsls r1, 16
- asrs r1, 24
- b _080D89DC
- .align 2, 0
-_080D89C8: .4byte gSineTable
-_080D89CC: .4byte gMain
-_080D89D0: .4byte 0x0000043d
-_080D89D4:
- ldrh r1, [r4, 0x3C]
- lsls r1, 16
- asrs r1, 24
- adds r1, 0x1
-_080D89DC:
- movs r0, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- adds r0, r3, 0x4
- b _080D8A12
-_080D89F2:
- ldrh r0, [r4, 0x38]
- subs r0, 0x40
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x7F
- bhi _080D8A06
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x80
- b _080D8A0C
-_080D8A06:
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x8C
-_080D8A0C:
- strb r0, [r1]
- ldrh r0, [r4, 0x38]
- subs r0, 0x4
-_080D8A12:
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x38]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bgt _080D8AD0
- movs r2, 0
- movs r0, 0xC0
- lsls r0, 2
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x24]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x26]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- adds r0, 0x4
- strh r0, [r4, 0x36]
- ldr r0, _080D8A68 @ =gMain
- ldr r1, _080D8A6C @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080D8A78
- ldr r1, _080D8A70 @ =gBanksBySide
- ldr r0, _080D8A74 @ =gAnimBankTarget
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080D8A78
- movs r0, 0x80
- lsls r0, 1
- b _080D8A7A
- .align 2, 0
-_080D8A68: .4byte gMain
-_080D8A6C: .4byte 0x0000043d
-_080D8A70: .4byte gBanksBySide
-_080D8A74: .4byte gAnimBankTarget
-_080D8A78:
- ldr r0, _080D8A90 @ =0x0000fff0
-_080D8A7A:
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0x3C]
- strh r1, [r4, 0x26]
- strh r1, [r4, 0x24]
- adds r0, r4, 0
- bl sub_8078BD4
- b _080D8AD0
- .align 2, 0
-_080D8A90: .4byte 0x0000fff0
-_080D8A94:
- adds r0, r4, 0
- bl TranslateAnimLinear
- lsls r0, 24
- cmp r0, 0
- beq _080D8AD0
- ldrb r0, [r4, 0x1]
- lsls r0, 30
- lsrs r0, 30
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080D8AC2
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
-_080D8AC2:
- adds r0, r4, 0
- bl DestroySprite
- ldr r1, _080D8AD8 @ =gAnimVisualTaskCount
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
-_080D8AD0:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D8AD8: .4byte gAnimVisualTaskCount
- thumb_func_end sub_80D8874
-
- thumb_func_start sub_80D8ADC
-sub_80D8ADC: @ 80D8ADC
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080D8AF0 @ =gTasks
- adds r1, r0
- ldr r0, _080D8AF4 @ =sub_80D8AF8
- str r0, [r1]
- bx lr
- .align 2, 0
-_080D8AF0: .4byte gTasks
-_080D8AF4: .4byte sub_80D8AF8
- thumb_func_end sub_80D8ADC
-
- thumb_func_start sub_80D8AF8
-sub_80D8AF8: @ 80D8AF8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _080D8B1C @ =gTasks
- adds r4, r0, r1
- movs r0, 0x8
- ldrsh r5, [r4, r0]
- cmp r5, 0x1
- beq _080D8B3C
- cmp r5, 0x1
- bgt _080D8B20
- cmp r5, 0
- beq _080D8B26
- b _080D8BA0
- .align 2, 0
-_080D8B1C: .4byte gTasks
-_080D8B20:
- cmp r5, 0x2
- beq _080D8B92
- b _080D8BA0
-_080D8B26:
- ldrh r0, [r4, 0x10]
- adds r0, 0x1
- strh r0, [r4, 0x10]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080D8BA0
- strh r5, [r4, 0x10]
- strh r5, [r4, 0x12]
- strh r5, [r4, 0xC]
- b _080D8B78
-_080D8B3C:
- ldrh r1, [r4, 0x12]
- movs r3, 0x12
- ldrsh r0, [r4, r3]
- cmp r0, 0
- bne _080D8B8C
- ldrb r0, [r4, 0xE]
- ldrb r1, [r4, 0xC]
- movs r3, 0x1
- bl sub_80D8BA8
- lsls r0, 24
- cmp r0, 0
- beq _080D8B5C
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
-_080D8B5C:
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- bne _080D8B88
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xA
- bne _080D8B80
-_080D8B78:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080D8BA0
-_080D8B80:
- ldrh r0, [r4, 0x8]
- subs r0, 0x1
- strh r0, [r4, 0x8]
- b _080D8BA0
-_080D8B88:
- strh r5, [r4, 0x12]
- b _080D8BA0
-_080D8B8C:
- subs r0, r1, 0x1
- strh r0, [r4, 0x12]
- b _080D8BA0
-_080D8B92:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080D8BA0
- adds r0, r2, 0
- bl DestroyAnimVisualTask
-_080D8BA0:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80D8AF8
-
- thumb_func_start sub_80D8BA8
-sub_80D8BA8: @ 80D8BA8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp]
- lsls r3, 24
- lsrs r3, 24
- mov r10, r3
- movs r1, 0
- str r1, [sp, 0x4]
- ldr r1, _080D8C20 @ =gUnknown_083D9DC4
- lsrs r0, 22
- adds r4, r0, r1
- ldrb r0, [r4, 0x3]
- lsls r0, 24
- asrs r0, 28
- mov r8, r0
- cmp r0, 0x2
- beq _080D8C94
- ldrh r0, [r4, 0x2]
- lsls r0, 20
- lsrs r0, 24
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r5, 0
- bl IsAnimBankSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080D8C94
- movs r0, 0x1
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r5, 0
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r6, r0, 24
- mov r1, r8
- cmp r1, 0
- beq _080D8C24
- cmp r1, 0x1
- beq _080D8C5A
- b _080D8CA6
- .align 2, 0
-_080D8C20: .4byte gUnknown_083D9DC4
-_080D8C24:
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_807A100
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x6
- bl __divsi3
- lsls r1, r7, 16
- asrs r1, 16
- subs r1, r0
- lsls r1, 16
- lsrs r7, r1, 16
- adds r0, r5, 0
- movs r1, 0
- bl sub_807A100
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x6
- bl __divsi3
- lsls r1, r6, 16
- asrs r1, 16
- subs r1, r0
- b _080D8C8E
-_080D8C5A:
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_807A100
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x6
- bl __divsi3
- lsls r1, r7, 16
- asrs r1, 16
- adds r1, r0
- lsls r1, 16
- lsrs r7, r1, 16
- adds r0, r5, 0
- movs r1, 0
- bl sub_807A100
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x6
- bl __divsi3
- lsls r1, r6, 16
- asrs r1, 16
- adds r1, r0
-_080D8C8E:
- lsls r1, 16
- lsrs r6, r1, 16
- b _080D8CA6
-_080D8C94:
- ldrh r0, [r4]
- lsls r0, 22
- asrs r0, 6
- lsrs r7, r0, 16
- ldr r0, [r4]
- lsls r0, 12
- asrs r0, 22
- lsls r0, 16
- lsrs r6, r0, 16
-_080D8CA6:
- lsls r0, r6, 16
- asrs r0, 16
- adds r0, 0x8
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- lsls r1, r7, 16
- asrs r1, 16
- subs r1, r0
- ldr r0, _080D8D00 @ =gSpriteTemplate_83D9E3C
- lsls r1, 16
- asrs r1, 16
- movs r2, 0x8
- negs r2, r2
- movs r3, 0x12
- bl CreateSprite
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x40
- beq _080D8D08
- lsls r4, r5, 4
- adds r4, r5
- lsls r4, 2
- ldr r0, _080D8D04 @ =gSprites
- adds r4, r0
- adds r0, r4, 0
- mov r1, r9
- bl StartSpriteAffineAnim
- mov r0, sp
- ldrh r0, [r0, 0x4]
- strh r0, [r4, 0x2E]
- strh r7, [r4, 0x34]
- strh r6, [r4, 0x36]
- mov r1, r9
- strh r1, [r4, 0x38]
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r4, 0x3A]
- mov r1, r10
- strh r1, [r4, 0x3C]
- movs r0, 0x1
- b _080D8D0A
- .align 2, 0
-_080D8D00: .4byte gSpriteTemplate_83D9E3C
-_080D8D04: .4byte gSprites
-_080D8D08:
- movs r0, 0
-_080D8D0A:
- 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_80D8BA8
-
- thumb_func_start sub_80D8D1C
-sub_80D8D1C: @ 80D8D1C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x20]
- adds r0, 0x4
- strh r0, [r4, 0x20]
- ldrh r1, [r4, 0x22]
- adds r2, r1, 0
- adds r2, 0x8
- strh r2, [r4, 0x22]
- lsls r0, 16
- asrs r0, 16
- movs r3, 0x34
- ldrsh r1, [r4, r3]
- cmp r0, r1
- bge _080D8D46
- lsls r0, r2, 16
- asrs r0, 16
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- cmp r0, r1
- blt _080D8DF6
-_080D8D46:
- movs r3, 0x2E
- ldrsh r0, [r4, r3]
- cmp r0, 0x1
- bne _080D8DC8
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080D8DC8
- ldr r0, _080D8DBC @ =gBattleAnimSpriteTemplate_83D9C78
- movs r2, 0x34
- ldrsh r1, [r4, r2]
- movs r3, 0x36
- ldrsh r2, [r4, r3]
- adds r3, r4, 0
- adds r3, 0x43
- ldrb r3, [r3]
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x2E]
- cmp r0, 0x40
- beq _080D8DAA
- ldr r2, _080D8DC0 @ =gSprites
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r2, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _080D8DC4 @ =sub_80D8E00
- str r1, [r0]
- movs r3, 0x2E
- ldrsh r1, [r4, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r4, 0x3A]
- strh r1, [r0, 0x3A]
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r4, 0x3C]
- strh r1, [r0, 0x3C]
-_080D8DAA:
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- adds r0, r4, 0
- bl DestroySprite
- b _080D8DF6
- .align 2, 0
-_080D8DBC: .4byte gBattleAnimSpriteTemplate_83D9C78
-_080D8DC0: .4byte gSprites
-_080D8DC4: .4byte sub_80D8E00
-_080D8DC8:
- ldr r3, _080D8DFC @ =gTasks
- movs r2, 0x3C
- ldrsh r1, [r4, r2]
- lsls r1, 1
- movs r0, 0x3A
- ldrsh r2, [r4, r0]
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0
- adds r3, 0x8
- adds r1, r3
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- adds r0, r4, 0
- bl DestroySprite
-_080D8DF6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D8DFC: .4byte gTasks
- thumb_func_end sub_80D8D1C
-
- thumb_func_start sub_80D8E00
-sub_80D8E00: @ 80D8E00
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- bne _080D8E40
- ldr r3, _080D8E48 @ =gTasks
- movs r0, 0x3C
- ldrsh r1, [r4, r0]
- lsls r1, 1
- movs r0, 0x3A
- ldrsh r2, [r4, r0]
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0
- adds r3, 0x8
- adds r1, r3
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- adds r0, r4, 0
- bl DestroySprite
-_080D8E40:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D8E48: .4byte gTasks
- thumb_func_end sub_80D8E00
-
- thumb_func_start unc_080B06FC
-unc_080B06FC: @ 80D8E4C
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r0, _080D8ECC @ =gAnimDisableStructPtr
- ldr r0, [r0]
- ldrb r1, [r0, 0x11]
- lsrs r0, r1, 4
- lsls r1, 28
- lsrs r1, 28
- subs r0, r1
- subs r0, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x4
- bls _080D8E6A
- movs r1, 0x4
-_080D8E6A:
- adds r0, r5, 0
- bl StartSpriteAffineAnim
- adds r0, r5, 0
- movs r1, 0x1
- bl InitAnimSpritePos
- ldr r6, _080D8ED0 @ =gBattleAnimArgs
- ldrh r0, [r6, 0x8]
- strh r0, [r5, 0x2E]
- ldr r0, _080D8ED4 @ =gAnimBankAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D8E92
- ldrh r0, [r6, 0x4]
- negs r0, r0
- strh r0, [r6, 0x4]
-_080D8E92:
- ldr r4, _080D8ED8 @ =gAnimBankTarget
- 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]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x6]
- adds r0, r1
- strh r0, [r5, 0x36]
- ldrh r0, [r6, 0xA]
- strh r0, [r5, 0x38]
- adds r0, r5, 0
- bl InitAnimArcTranslation
- ldr r0, _080D8EDC @ =sub_80D8EE0
- str r0, [r5, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D8ECC: .4byte gAnimDisableStructPtr
-_080D8ED0: .4byte gBattleAnimArgs
-_080D8ED4: .4byte gAnimBankAttacker
-_080D8ED8: .4byte gAnimBankTarget
-_080D8EDC: .4byte sub_80D8EE0
- thumb_func_end unc_080B06FC
-
- thumb_func_start sub_80D8EE0
-sub_80D8EE0: @ 80D8EE0
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimArc
- lsls r0, 24
- cmp r0, 0
- beq _080D8F02
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r0, _080D8F08 @ =sub_8078600
- str r0, [r4, 0x1C]
- ldr r1, _080D8F0C @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData
-_080D8F02:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D8F08: .4byte sub_8078600
-_080D8F0C: .4byte DestroyAnimSprite
- thumb_func_end sub_80D8EE0
-
- thumb_func_start sub_80D8F10
-sub_80D8F10: @ 80D8F10
- push {r4-r6,lr}
- adds r4, r0, 0
- ldrh r2, [r4, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- adds r1, 0x8
- ldr r3, _080D8F64 @ =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldr r0, _080D8F68 @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r4, 0x4]
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_8078764
- bl Random
- movs r5, 0xFF
- ands r5, r0
- movs r0, 0x80
- lsls r0, 1
- adds r6, r0, 0
- orrs r5, r6
- bl Random
- ldr r1, _080D8F6C @ =0x000001ff
- ands r1, r0
- adds r0, r1, 0
- cmp r0, 0xFF
- ble _080D8F56
- subs r0, r6, r0
- lsls r0, 16
- lsrs r1, r0, 16
-_080D8F56:
- strh r5, [r4, 0x30]
- strh r1, [r4, 0x32]
- ldr r0, _080D8F70 @ =sub_80D8F74
- str r0, [r4, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D8F64: .4byte 0x000003ff
-_080D8F68: .4byte 0xfffffc00
-_080D8F6C: .4byte 0x000001ff
-_080D8F70: .4byte sub_80D8F74
- thumb_func_end sub_80D8F10
-
- thumb_func_start sub_80D8F74
-sub_80D8F74: @ 80D8F74
- push {r4,lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x30]
- ldrh r1, [r2, 0x34]
- adds r3, r0, r1
- strh r3, [r2, 0x34]
- ldrh r1, [r2, 0x32]
- ldrh r4, [r2, 0x36]
- adds r1, r4
- strh r1, [r2, 0x36]
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _080D8F98
- lsls r0, r3, 16
- asrs r0, 24
- negs r0, r0
- b _080D8F9C
-_080D8F98:
- lsls r0, r3, 16
- asrs r0, 24
-_080D8F9C:
- strh r0, [r2, 0x24]
- ldrh r0, [r2, 0x36]
- lsls r0, 16
- asrs r0, 24
- strh r0, [r2, 0x26]
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x15
- bne _080D8FBA
- adds r0, r2, 0
- bl DestroyAnimSprite
-_080D8FBA:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80D8F74
-
- thumb_func_start sub_80D8FC0
-sub_80D8FC0: @ 80D8FC0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080D8FE8 @ =gBattleAnimArgs
- ldrb r3, [r1]
- lsls r3, 1
- adds r3, r1
- ldr r1, _080D8FEC @ =gAnimDisableStructPtr
- ldr r1, [r1]
- ldrb r1, [r1, 0x11]
- lsrs r2, r1, 4
- lsls r1, 28
- lsrs r1, 28
- subs r2, r1
- subs r2, 0x1
- strh r2, [r3]
- bl DestroyAnimVisualTask
- pop {r0}
- bx r0
- .align 2, 0
-_080D8FE8: .4byte gBattleAnimArgs
-_080D8FEC: .4byte gAnimDisableStructPtr
- thumb_func_end sub_80D8FC0
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s
index c5c6eb144..42bfad289 100644
--- a/data/battle_anim_scripts.s
+++ b/data/battle_anim_scripts.s
@@ -2247,15 +2247,15 @@ Move_ICY_WIND: @ 81CA650
waitbgfadein
end
_81CA6A8:
- createsprite gBattleAnimSpriteTemplate_83D9CA8, 168, 0, 0, 0, 0, 72, 1
+ createsprite gSmallSnowballSpriteTemplate1, 168, 0, 0, 0, 0, 72, 1
delay 5
- createsprite gBattleAnimSpriteTemplate_83D9CA8, 168, 0, 10, 0, 10, 72, 1
+ createsprite gSmallSnowballSpriteTemplate1, 168, 0, 10, 0, 10, 72, 1
delay 5
- createsprite gBattleAnimSpriteTemplate_83D9CA8, 168, 0, -10, 0, -10, 72, 1
+ createsprite gSmallSnowballSpriteTemplate1, 168, 0, -10, 0, -10, 72, 1
delay 5
- createsprite gBattleAnimSpriteTemplate_83D9CA8, 168, 0, 15, 0, 15, 72, 1
+ createsprite gSmallSnowballSpriteTemplate1, 168, 0, 15, 0, 15, 72, 1
delay 5
- createsprite gBattleAnimSpriteTemplate_83D9CA8, 168, 0, -5, 0, -5, 72, 1
+ createsprite gSmallSnowballSpriteTemplate1, 168, 0, -5, 0, -5, 72, 1
return
Move_SMOKESCREEN: @ 81CA710
@@ -3477,7 +3477,7 @@ Move_HAIL: @ 81CC076
loadspritegfx 10141
createvisualtask sub_80E2A38, 10, 1, 3, 0, 6, 0
waitforvisualfinish
- createvisualtask sub_80D8ADC, 5
+ createvisualtask AnimTask_Hail1, 5
loopsewithpan SE_W258, 0, 8, 10
waitforvisualfinish
createvisualtask sub_80E2A38, 10, 1, 3, 6, 0, 0
@@ -3946,14 +3946,14 @@ Move_MIST_BALL: @ 81CCA72
loadspritegfx 10270
delay 0
playsewithpan SE_W081, 192
- createsprite gBattleAnimSpriteTemplate_83D9D80, 128, 0, 0, 0, 0, 30, 0
+ createsprite gMistBallSpriteTemplate, 128, 0, 0, 0, 0, 30, 0
waitforvisualfinish
playsewithpan SE_W028, 63
createvisualtask AnimTask_ShakeMon, 2, ANIM_BANK_TARGET, 5, 0, 10, 0
createsprite gBattleAnimSpriteTemplate_83DB3DC, 0, 1, 1, 1, 32279, 16, 32767, 16
delay 0
playsewithpan SE_W114, 0
- createvisualtask sub_80D8414, 5
+ createvisualtask AnimTask_LoadMistTiles, 5
createvisualtask sub_80E2A38, 10, 4, 3, 0, 16, 32767
delay 8
createvisualtask AnimTask_ShakeMon, 2, ANIM_BANK_TARGET, 4, 0, 70, 0
@@ -4662,15 +4662,15 @@ Move_ICE_PUNCH: @ 81CDB3E
createvisualtask sub_80E2A38, 10, 4, 2, 0, 9, 32588
delay 20
playsewithpan SE_W081, 63
- createsprite gBattleAnimSpriteTemplate_83D9BF8, 2, 0
- createsprite gBattleAnimSpriteTemplate_83D9BF8, 2, 64
- createsprite gBattleAnimSpriteTemplate_83D9BF8, 2, 128
- createsprite gBattleAnimSpriteTemplate_83D9BF8, 2, 192
+ createsprite gSmallIcePunchCrystalSpriteTemplate, 2, 0
+ createsprite gSmallIcePunchCrystalSpriteTemplate, 2, 64
+ createsprite gSmallIcePunchCrystalSpriteTemplate, 2, 128
+ createsprite gSmallIcePunchCrystalSpriteTemplate, 2, 192
delay 5
- createsprite gBattleAnimSpriteTemplate_83D9BE0, 2, 32
- createsprite gBattleAnimSpriteTemplate_83D9BE0, 2, 96
- createsprite gBattleAnimSpriteTemplate_83D9BE0, 2, 160
- createsprite gBattleAnimSpriteTemplate_83D9BE0, 2, 224
+ createsprite gLargeIcePunchCrystalSpriteTemplate, 2, 32
+ createsprite gLargeIcePunchCrystalSpriteTemplate, 2, 96
+ createsprite gLargeIcePunchCrystalSpriteTemplate, 2, 160
+ createsprite gLargeIcePunchCrystalSpriteTemplate, 2, 224
delay 17
createsprite gFistFootSpriteTemplate, 4, 0, -10, 8, 1, 0
createsprite gBasicHitSplatSpriteTemplate, 3, 0, -10, 1, 1
@@ -4679,7 +4679,7 @@ Move_ICE_PUNCH: @ 81CDB3E
createvisualtask AnimTask_ShakeMon, 5, 1, 0, 5, 3, 1
waitforvisualfinish
delay 15
- call Unknown_81D5C36
+ call Effect_LightIceDamage
delay 5
createvisualtask sub_80E2A38, 10, 4, 2, 9, 0, 32588
waitforvisualfinish
@@ -5148,7 +5148,7 @@ Move_SMOG: @ 81CE672
blendoff
end
_81CE6D7:
- createsprite gBattleAnimSpriteTemplate_83D9D54, 2, 0, -24, 48, 240, 1, 0
+ createsprite gSmogCloudSpriteTemplate, 2, 0, -24, 48, 240, 1, 0
delay 7
return
@@ -5355,8 +5355,8 @@ Move_ICE_BEAM: @ 81CEB4D
createsprite gSimplePaletteBlendSpriteTemplate, 2, 1, 1, 0, 7, rgb(0, 0, 0)
waitforvisualfinish
createsoundtask sub_812B058, 183, -64, 63, 4, 4, 0, 10
- createsprite gBattleAnimSpriteTemplate_83D9C3C, 2, 20, 12, 0, 12, 20
- createsprite gBattleAnimSpriteTemplate_83D9C3C, 2, 20, -12, 0, -12, 20
+ createsprite gIceBeamOuterParticleSpriteTemplate, 2, 20, 12, 0, 12, 20
+ createsprite gIceBeamOuterParticleSpriteTemplate, 2, 20, -12, 0, -12, 20
delay 1
call _81CEC4E
call _81CEC4E
@@ -5371,12 +5371,12 @@ Move_ICE_BEAM: @ 81CEB4D
call _81CEC4E
call _81CEC4E
call _81CEC4E
- createsprite gBattleAnimSpriteTemplate_83D9C24, 2, 20, 0, 0, 0, 11
+ createsprite IceBeamCenterParticleSpriteTemplate, 2, 20, 0, 0, 0, 11
delay 1
- createsprite gBattleAnimSpriteTemplate_83D9C24, 2, 20, 0, 0, 0, 11
+ createsprite IceBeamCenterParticleSpriteTemplate, 2, 20, 0, 0, 0, 11
waitforvisualfinish
delay 20
- call Unknown_81D5C36
+ call Effect_LightIceDamage
createsprite gSimplePaletteBlendSpriteTemplate, 2, 4, 5, 7, 0, rgb(0, 20, 31)
waitforvisualfinish
createsprite gSimplePaletteBlendSpriteTemplate, 2, 1, 0, 7, 0, rgb(0, 0, 0)
@@ -5385,9 +5385,9 @@ Move_ICE_BEAM: @ 81CEB4D
blendoff
end
_81CEC4E:
- createsprite gBattleAnimSpriteTemplate_83D9C3C, 2, 20, 12, 0, 12, 20
- createsprite gBattleAnimSpriteTemplate_83D9C3C, 2, 20, -12, 0, -12, 20
- createsprite gBattleAnimSpriteTemplate_83D9C24, 2, 20, 0, 0, 0, 11
+ createsprite gIceBeamOuterParticleSpriteTemplate, 2, 20, 12, 0, 12, 20
+ createsprite gIceBeamOuterParticleSpriteTemplate, 2, 20, -12, 0, -12, 20
+ createsprite IceBeamCenterParticleSpriteTemplate, 2, 20, 0, 0, 0, 11
delay 1
return
@@ -5403,7 +5403,7 @@ Move_AURORA_BEAM: @ 81CEC91
waitbgfadein
playsewithpan SE_W062, 192
setarg 7, 0
- createvisualtask sub_80D3490, 10, 130
+ createvisualtask AnimTask_RotateMonPalette1, 10, 130
call _81CED18
createvisualtask AnimTask_ShakeMon2, 5, 1, 1, 0, 17, 1
call _81CED18
@@ -5423,13 +5423,13 @@ Move_AURORA_BEAM: @ 81CEC91
waitbgfadein
end
_81CED18:
- createsprite gBattleAnimSpriteTemplate_83D91C4, 130, 20, 0, 0, 0, 17
+ createsprite RainbowRingSpriteTemplate, 130, 20, 0, 0, 0, 17
delay 1
- createsprite gBattleAnimSpriteTemplate_83D91C4, 130, 20, 0, 0, 0, 17
+ createsprite RainbowRingSpriteTemplate, 130, 20, 0, 0, 0, 17
delay 1
- createsprite gBattleAnimSpriteTemplate_83D91C4, 130, 20, 0, 0, 0, 17
+ createsprite RainbowRingSpriteTemplate, 130, 20, 0, 0, 0, 17
delay 1
- createsprite gBattleAnimSpriteTemplate_83D91C4, 130, 20, 0, 0, 0, 17
+ createsprite RainbowRingSpriteTemplate, 130, 20, 0, 0, 0, 17
delay 1
return
@@ -5538,7 +5538,7 @@ _81CEFD0:
call _81CF00A
playsewithpan SE_W059B, 63
waitforvisualfinish
- call Unknown_81D5CBA
+ call Effect_HeavyIceDamage
waitforvisualfinish
clearmonbg ANIM_BANK_DEF_PARTNER
delay 20
@@ -5548,26 +5548,26 @@ _81CEFD0:
waitbgfadein
end
_81CF00A:
- createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -10, 0, -10, 72, 1
- createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, 0, 0, 0, 80, 0, 0, 1
+ createsprite gSmallSnowballSpriteTemplate1, 40, 0, -10, 0, -10, 72, 1
+ createsprite gLargeSnowballSpriteTemplate, 40, 0, 0, 0, 0, 80, 0, 0, 1
delay 3
- createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -15, 0, -15, 72, 1
- createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, -10, 0, -10, 80, 0, 0, 1
+ createsprite gSmallSnowballSpriteTemplate1, 40, 0, -15, 0, -15, 72, 1
+ createsprite gLargeSnowballSpriteTemplate, 40, 0, -10, 0, -10, 80, 0, 0, 1
delay 3
- createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -5, 0, -5, 72, 1
- createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, 10, 0, 10, 80, 0, 0, 1
+ createsprite gSmallSnowballSpriteTemplate1, 40, 0, -5, 0, -5, 72, 1
+ createsprite gLargeSnowballSpriteTemplate, 40, 0, 10, 0, 10, 80, 0, 0, 1
delay 3
- createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -10, 0, -10, 72, 1
- createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, -20, 0, -20, 80, 0, 0, 1
+ createsprite gSmallSnowballSpriteTemplate1, 40, 0, -10, 0, -10, 72, 1
+ createsprite gLargeSnowballSpriteTemplate, 40, 0, -20, 0, -20, 80, 0, 0, 1
delay 3
- createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -20, 0, -20, 72, 1
- createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, 15, 0, 15, 80, 0, 0, 1
+ createsprite gSmallSnowballSpriteTemplate1, 40, 0, -20, 0, -20, 72, 1
+ createsprite gLargeSnowballSpriteTemplate, 40, 0, 15, 0, 15, 80, 0, 0, 1
delay 3
- createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -15, 0, -15, 72, 1
- createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, -20, 0, -20, 80, 0, 0, 1
+ createsprite gSmallSnowballSpriteTemplate1, 40, 0, -15, 0, -15, 72, 1
+ createsprite gLargeSnowballSpriteTemplate, 40, 0, -20, 0, -20, 80, 0, 0, 1
delay 3
- createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -25, 0, -25, 72, 1
- createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, 20, 0, 20, 80, 0, 0, 1
+ createsprite gSmallSnowballSpriteTemplate1, 40, 0, -25, 0, -25, 72, 1
+ createsprite gLargeSnowballSpriteTemplate, 40, 0, 20, 0, 20, 80, 0, 0, 1
delay 3
return
_81CF13F:
@@ -5585,26 +5585,26 @@ Move_POWDER_SNOW: @ 81CF146
playsewithpan SE_W016B, 63
waitforvisualfinish
waitsound
- call Unknown_81D5CBA
+ call Effect_HeavyIceDamage
waitforvisualfinish
clearmonbg ANIM_BANK_DEF_PARTNER
delay 20
createsprite gSimplePaletteBlendSpriteTemplate, 2, 31, 1, 3, 0, rgb(0, 0, 0)
end
_81CF190:
- createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, 0, 0, 0, 56, 4, 4, 1
+ createsprite gSmallSnowballSpriteTemplate2, 40, 0, 0, 0, 0, 56, 4, 4, 1
delay 3
- createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, -10, 0, -10, 56, 4, 4, 1
+ createsprite gSmallSnowballSpriteTemplate2, 40, 0, -10, 0, -10, 56, 4, 4, 1
delay 3
- createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, 10, 0, 10, 56, -4, 3, 1
+ createsprite gSmallSnowballSpriteTemplate2, 40, 0, 10, 0, 10, 56, -4, 3, 1
delay 3
- createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, -20, 0, -20, 56, -4, 5, 1
+ createsprite gSmallSnowballSpriteTemplate2, 40, 0, -20, 0, -20, 56, -4, 5, 1
delay 3
- createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, 15, 0, 15, 56, 4, 4, 1
+ createsprite gSmallSnowballSpriteTemplate2, 40, 0, 15, 0, 15, 56, 4, 4, 1
delay 3
- createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, -20, 0, -20, 56, 4, 4, 1
+ createsprite gSmallSnowballSpriteTemplate2, 40, 0, -20, 0, -20, 56, 4, 4, 1
delay 3
- createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, 20, 0, 20, 56, 4, 4, 1
+ createsprite gSmallSnowballSpriteTemplate2, 40, 0, 20, 0, 20, 56, 4, 4, 1
delay 3
return
@@ -6919,14 +6919,14 @@ Move_MIST: @ 81D1073
blendoff
end
_81D10BE:
- createsprite gBattleAnimSpriteTemplate_83D9D3C, 2, 0, -24, 48, 240, 0, 1
+ createsprite gMistCloudSpriteTemplate, 2, 0, -24, 48, 240, 0, 1
delay 7
return
Move_HAZE: @ 81D10D4
waitforvisualfinish
playsewithpan SE_W114, 0
- createvisualtask sub_80D80E0, 5
+ createvisualtask AnimTask_Haze1, 5
delay 30
createvisualtask sub_80E2A38, 10, 1920, 2, 0, 16, 0
delay 90
@@ -7063,22 +7063,22 @@ Move_POISON_GAS: @ 81D1474
setalpha 12, 8
delay 0
playsewithpan SE_W054, 192
- createsprite gBattleAnimSpriteTemplate_83D9DAC, 128, 64, 0, 0, -32, -6, 4192, 1072, 0
+ createsprite gPoisonGasCloudSpriteTemplate, 128, 64, 0, 0, -32, -6, 4192, 1072, 0
delay 4
playsewithpan SE_W054, 192
- createsprite gBattleAnimSpriteTemplate_83D9DAC, 128, 64, 0, 0, -32, -6, 4192, 1072, 0
+ createsprite gPoisonGasCloudSpriteTemplate, 128, 64, 0, 0, -32, -6, 4192, 1072, 0
delay 4
playsewithpan SE_W054, 192
- createsprite gBattleAnimSpriteTemplate_83D9DAC, 128, 64, 0, 0, -32, -6, 4192, 1072, 0
+ createsprite gPoisonGasCloudSpriteTemplate, 128, 64, 0, 0, -32, -6, 4192, 1072, 0
delay 4
playsewithpan SE_W054, 192
- createsprite gBattleAnimSpriteTemplate_83D9DAC, 128, 64, 0, 0, -32, -6, 4192, 1072, 0
+ createsprite gPoisonGasCloudSpriteTemplate, 128, 64, 0, 0, -32, -6, 4192, 1072, 0
delay 4
playsewithpan SE_W054, 192
- createsprite gBattleAnimSpriteTemplate_83D9DAC, 128, 64, 0, 0, -32, -6, 4192, 1072, 0
+ createsprite gPoisonGasCloudSpriteTemplate, 128, 64, 0, 0, -32, -6, 4192, 1072, 0
delay 4
playsewithpan SE_W054, 192
- createsprite gBattleAnimSpriteTemplate_83D9DAC, 128, 64, 0, 0, -32, -6, 4192, 1072, 0
+ createsprite gPoisonGasCloudSpriteTemplate, 128, 64, 0, 0, -32, -6, 4192, 1072, 0
delay 40
loopsewithpan SE_W054, 63, 28, 6
createvisualtask sub_80E1F8C, 2, 4, 6, 2, 0, 12, 26650
@@ -8029,7 +8029,7 @@ Move_TRI_ATTACK: @ 81D2A0F
createvisualtask sub_80E2324, 2, 257, 257, 257
waitforvisualfinish
loadspritegfx 10141
- call Unknown_81D5C36
+ call Effect_LightIceDamage
createsprite gSimplePaletteBlendSpriteTemplate, 2, 1, 2, 16, 0, rgb(0, 0, 0)
waitforvisualfinish
end
@@ -9734,21 +9734,21 @@ Move_MAGICAL_LEAF: @ 81D5699
Move_ICE_BALL: @ 81D57BA
loadspritegfx 10043
loadspritegfx 10141
- createvisualtask sub_80D8FC0, 5, 0
+ createvisualtask AnimTask_CountIceBallThrows, 5, 0
jumpargeq 0, 4, _81D5831
_81D57D1:
playsewithpan SE_W196, 192
- createsprite gBattleAnimSpriteTemplate_83D9EF4, 130, 15, 0, -12, -16, 30, -40
+ createsprite gIceBallSpriteTemplate, 130, 15, 0, -12, -16, 30, -40
delay 28
playsewithpan SE_W280, 63
- createvisualtask sub_80D8FC0, 5, 0
+ createvisualtask AnimTask_CountIceBallThrows, 5, 0
jumpargeq 0, 0, _81D5842
jumpargeq 0, 1, _81D5871
jumpargeq 0, 2, _81D58AA
jumpargeq 0, 3, _81D58ED
jumpargeq 0, 4, _81D5935
_81D581F:
- createvisualtask sub_80D8FC0, 5, 0
+ createvisualtask AnimTask_CountIceBallThrows, 5, 0
jumpargeq 0, 4, _81D5838
_81D5830:
end
@@ -9818,7 +9818,7 @@ _81D5935:
call _81D597D
goto _81D581F
_81D597D:
- createsprite gBattleAnimSpriteTemplate_83D9F0C, 132, -12, -16
+ createsprite gIceBallParticleSpriteTemplate, 132, -12, -16
return
Move_WEATHER_BALL: @ 81D5989
@@ -9900,18 +9900,18 @@ _81D5AF9:
_81D5B99:
loadspritegfx 10263
loadspritegfx 10141
- createsprite gBattleAnimSpriteTemplate_83D9E54, 130, -30, -100, 25, 25, -40, 20
+ createsprite gWeatherBallHailSpriteTemplate, 130, -30, -100, 25, 25, -40, 20
playsewithpan SE_W258, 63
delay 10
- createsprite gBattleAnimSpriteTemplate_83D9E54, 130, -30, -100, 25, 25, 40, 0
+ createsprite gWeatherBallHailSpriteTemplate, 130, -30, -100, 25, 25, 40, 0
playsewithpan SE_W258, 63
delay 10
- createsprite gBattleAnimSpriteTemplate_83D9E54, 130, -30, -100, 25, 25, 0, 0
+ createsprite gWeatherBallHailSpriteTemplate, 130, -30, -100, 25, 25, 0, 0
playsewithpan SE_W258, 63
waitforvisualfinish
createvisualtask AnimTask_ShakeMon2, 2, ANIM_BANK_TARGET, 2, 0, 8, 1
playsewithpan SE_W196, 63
- call Unknown_81D5C36
+ call Effect_LightIceDamage
waitforvisualfinish
end
@@ -9927,102 +9927,102 @@ PoundCopy: @ 81D5C05
blendoff
end
-Unknown_81D5C36: @ 81D5C36
- createsprite gBattleAnimSpriteTemplate_83D9C78, 130, -10, -10, 0
+Effect_LightIceDamage: @ 81D5C36
+ createsprite gLargeIceEffectParticleSpriteTemplate, 130, -10, -10, 0
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 10, 20, 0
+ createsprite gSmallIceEffectParticleSpriteTemplate, 130, 10, 20, 0
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C78, 130, -5, 10, 0
+ createsprite gLargeIceEffectParticleSpriteTemplate, 130, -5, 10, 0
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 17, -12, 0
+ createsprite gSmallIceEffectParticleSpriteTemplate, 130, 17, -12, 0
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C90, 130, -15, 15, 0
+ createsprite gSmallIceEffectParticleSpriteTemplate, 130, -15, 15, 0
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 0, 0, 0
+ createsprite gSmallIceEffectParticleSpriteTemplate, 130, 0, 0, 0
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C78, 130, 20, 2, 0
+ createsprite gLargeIceEffectParticleSpriteTemplate, 130, 20, 2, 0
playsewithpan SE_W196, 63
return
-Unknown_81D5CBA: @ 81D5CBA
- createsprite gBattleAnimSpriteTemplate_83D9C78, 130, -10, -10, 1
+Effect_HeavyIceDamage: @ 81D5CBA
+ createsprite gLargeIceEffectParticleSpriteTemplate, 130, -10, -10, 1
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 10, 20, 1
+ createsprite gSmallIceEffectParticleSpriteTemplate, 130, 10, 20, 1
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C78, 130, -29, 0, 1
+ createsprite gLargeIceEffectParticleSpriteTemplate, 130, -29, 0, 1
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 29, -20, 1
+ createsprite gSmallIceEffectParticleSpriteTemplate, 130, 29, -20, 1
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C78, 130, -5, 10, 1
+ createsprite gLargeIceEffectParticleSpriteTemplate, 130, -5, 10, 1
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 17, -12, 1
+ createsprite gSmallIceEffectParticleSpriteTemplate, 130, 17, -12, 1
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C78, 130, -20, 0, 1
+ createsprite gLargeIceEffectParticleSpriteTemplate, 130, -20, 0, 1
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C90, 130, -15, 15, 1
+ createsprite gSmallIceEffectParticleSpriteTemplate, 130, -15, 15, 1
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 26, -5, 1
+ createsprite gSmallIceEffectParticleSpriteTemplate, 130, 26, -5, 1
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 0, 0, 1
+ createsprite gSmallIceEffectParticleSpriteTemplate, 130, 0, 0, 1
playsewithpan SE_W196, 63
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9C78, 130, 20, 2, 1
+ createsprite gLargeIceEffectParticleSpriteTemplate, 130, 20, 2, 1
playsewithpan SE_W196, 63
return
Unknown_81D5D8A: @ 81D5D8A
loopsewithpan SE_W196, 63, 6, 4
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 0, 24, 0
+ createsprite gIceSpikeSpriteTemplate, 130, 0, 24, 0
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 8, 24, 0
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -8, 24, 0
+ createsprite gIceSpikeSpriteTemplate, 130, 8, 24, 0
+ createsprite gIceSpikeSpriteTemplate, 130, -8, 24, 0
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 16, 24, 0
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -16, 24, 0
+ createsprite gIceSpikeSpriteTemplate, 130, 16, 24, 0
+ createsprite gIceSpikeSpriteTemplate, 130, -16, 24, 0
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 24, 24, 0
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -24, 24, 0
+ createsprite gIceSpikeSpriteTemplate, 130, 24, 24, 0
+ createsprite gIceSpikeSpriteTemplate, 130, -24, 24, 0
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 32, 24, 0
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -32, 24, 0
+ createsprite gIceSpikeSpriteTemplate, 130, 32, 24, 0
+ createsprite gIceSpikeSpriteTemplate, 130, -32, 24, 0
return
-Unknown_81D5E0E: @ 81D5E0E
+Unknown_81D5E0E: @ 81D5E0E Icy Wind animates end bit with the wavy shiz
loopsewithpan SE_W196, 63, 6, 4
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 0, 24, 1
+ createsprite gIceSpikeSpriteTemplate, 130, 0, 24, 1
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 8, 24, 1
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -8, 24, 1
+ createsprite gIceSpikeSpriteTemplate, 130, 8, 24, 1
+ createsprite gIceSpikeSpriteTemplate, 130, -8, 24, 1
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 16, 24, 1
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -16, 24, 1
+ createsprite gIceSpikeSpriteTemplate, 130, 16, 24, 1
+ createsprite gIceSpikeSpriteTemplate, 130, -16, 24, 1
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 24, 24, 1
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -24, 24, 1
+ createsprite gIceSpikeSpriteTemplate, 130, 24, 24, 1
+ createsprite gIceSpikeSpriteTemplate, 130, -24, 24, 1
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 32, 24, 1
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -32, 24, 1
+ createsprite gIceSpikeSpriteTemplate, 130, 32, 24, 1
+ createsprite gIceSpikeSpriteTemplate, 130, -32, 24, 1
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 40, 24, 1
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -40, 24, 1
+ createsprite gIceSpikeSpriteTemplate, 130, 40, 24, 1
+ createsprite gIceSpikeSpriteTemplate, 130, -40, 24, 1
delay 4
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 48, 24, 1
- createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -48, 24, 1
+ createsprite gIceSpikeSpriteTemplate, 130, 48, 24, 1
+ createsprite gIceSpikeSpriteTemplate, 130, -48, 24, 1
return
Unknown_81D5ECA: @ 81D5ECA
diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h
index 5be158c54..55c0f46c2 100644
--- a/include/rom_8077ABC.h
+++ b/include/rom_8077ABC.h
@@ -75,6 +75,7 @@ void sub_8078764(struct Sprite *sprite, u8);
void StartAnimLinearTranslation(struct Sprite *sprite);
void sub_8078D60(struct Sprite *sprite);
void InitAnimArcTranslation(struct Sprite *sprite);
+void sub_8078D8C(struct Sprite *sprite);
void WaitAnimForDuration(struct Sprite *sprite);
void sub_8078CC0(struct Sprite *sprite);
void sub_8078600(struct Sprite *sprite);
diff --git a/ld_script.txt b/ld_script.txt
index 88bbd3d4c..552feb804 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -279,7 +279,6 @@ SECTIONS {
src/battle/anim/shock.o(.text);
src/battle/anim/current.o(.text);
src/battle/anim/ice.o(.text);
- asm/ice.o(.text);
src/battle/anim/fight.o(.text);
src/battle/anim/poison.o(.text);
src/battle/anim/flying.o(.text);
diff --git a/src/battle/anim/aurora.c b/src/battle/anim/aurora.c
index c17748440..3564da811 100644
--- a/src/battle/anim/aurora.c
+++ b/src/battle/anim/aurora.c
@@ -9,9 +9,9 @@ extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-void sub_80D33B4(struct Sprite *sprite);
-static void sub_80D344C(struct Sprite *);
-static void sub_80D34D4(u8);
+void AnimAuroraRings(struct Sprite *sprite);
+static void AnimGrowAuroraRings(struct Sprite *);
+static void AnimTask_RotateMonPalette2(u8);
const union AnimCmd gSpriteAnim_83D9190[] =
{
@@ -43,7 +43,8 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D91C0[] =
gSpriteAffineAnim_83D91A8,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91C4 =
+// Multi-colored rings used in Aurora Beam.
+const struct SpriteTemplate RainbowRingSpriteTemplate =
{
.tileTag = 10140,
.paletteTag = 10140,
@@ -51,10 +52,16 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91C4 =
.anims = gSpriteAnimTable_83D91A0,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D91C0,
- .callback = sub_80D33B4,
+ .callback = AnimAuroraRings,
};
-void sub_80D33B4(struct Sprite *sprite)
+// Animates the colorful rings in Aurora Beam linearly towards the target mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: duration
+void AnimAuroraRings(struct Sprite *sprite)
{
s16 r6;
@@ -69,12 +76,14 @@ void sub_80D33B4(struct Sprite *sprite)
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
InitAnimLinearTranslation(sprite);
- sprite->callback = sub_80D344C;
+ sprite->callback = AnimGrowAuroraRings;
sprite->affineAnimPaused = TRUE;
sprite->callback(sprite);
}
-static void sub_80D344C(struct Sprite *sprite)
+// Grows the rings in Aurora Beam.
+// arg 7: if -1, grow the rings
+static void AnimGrowAuroraRings(struct Sprite *sprite)
{
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
{
@@ -85,14 +94,17 @@ static void sub_80D344C(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_80D3490(u8 taskId)
+// This seems to rotate the palette of the attacking mon, but the visual
+// effect is not noticeable in-game.
+// arg 0: duration
+void AnimTask_RotateMonPalette1(u8 taskId)
{
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[2] = 0x100 + IndexOfSpritePaletteTag(0x279C) * 16;
- gTasks[taskId].func = sub_80D34D4;
+ gTasks[taskId].func = AnimTask_RotateMonPalette2;
}
-static void sub_80D34D4(u8 taskId)
+static void AnimTask_RotateMonPalette2(u8 taskId)
{
gTasks[taskId].data[10]++;
if (gTasks[taskId].data[10] == 3)
diff --git a/src/battle/anim/ice.c b/src/battle/anim/ice.c
index 50c8b9030..0ff236523 100644
--- a/src/battle/anim/ice.c
+++ b/src/battle/anim/ice.c
@@ -1,25 +1,59 @@
#include "global.h"
+#include "main.h"
+#include "trig.h"
#include "rom_8077ABC.h"
+#include "battle.h"
#include "battle_anim.h"
+#include "constants/battle_constants.h"
+#include "task.h"
+#include "decompress.h"
+#include "palette.h"
+#include "random.h"
extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-void sub_80D7704(struct Sprite *sprite);
-void sub_80D78EC(struct Sprite *sprite);
-void sub_80D792C(struct Sprite *sprite);
-void sub_80D79B4(struct Sprite *sprite);
-void sub_80D7A64(struct Sprite *sprite);
-void sub_80D7CD4(struct Sprite *sprite);
-void sub_80D7E88(struct Sprite *sprite);
-void sub_80D7F10(struct Sprite *sprite);
-void sub_80D83E0(struct Sprite *sprite);
-void sub_80D8700(struct Sprite *sprite);
-void sub_80D8D1C(struct Sprite *sprite);
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+extern u8 gAnimVisualTaskCount;
+extern u8 gBanksBySide[];
+extern u8 gBankSpriteIds[];
+
+extern u16 gBattle_BG1_X;
+extern u16 gBattle_BG1_Y;
+
+extern const u8 gUnknown_083970E8[];
+
+extern struct INCBIN_U8 gBattleAnimFogTilemap;
+extern struct INCBIN_U8 gWeatherFog1Tiles;
+
+static void sub_80D7704(struct Sprite *sprite);
+static void AnimIcePunchSwirlingParticle(struct Sprite *sprite);
+static void AnimIceBeamParticle(struct Sprite *sprite);
+static void AnimIceEffectParticle(struct Sprite *sprite);
+static void AnimFlickerIceEffectParticle(struct Sprite *sprite);
+static void AnimMoveParticleBeyondTarget(struct Sprite *sprite);
+static void AnimWaveFromCenterOfTarget(struct Sprite *sprite);
+static void InitSwirlingFogAnim(struct Sprite *sprite);
+static void AnimThrowMistBall(struct Sprite *sprite);
+static void InitPoisonGasCloudAnim(struct Sprite *sprite);
+static void AnimHailBegin(struct Sprite *sprite);
void sub_807A9BC(struct Sprite *sprite);
-void unc_080B06FC(struct Sprite *sprite);
-void sub_80D8F10(struct Sprite *sprite);
+static void InitIceBallAnim(struct Sprite *sprite);
+static void InitIceBallParticle(struct Sprite *sprite);
+static void AnimSwirlingSnowball_Step1(struct Sprite *sprite);
+static void AnimSwirlingSnowball_Step2(struct Sprite *sprite);
+static void AnimSwirlingSnowball_Step3(struct Sprite *sprite);
+static void AnimSwirlingSnowball_End(struct Sprite *sprite);
+static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite);
+static void AnimSwirlingFogAnim(struct Sprite *sprite);
+static void sub_80D8874(struct Sprite *sprite);
+static void AnimHailContinue(struct Sprite *sprite);
+static void AnimThrowIceBall(struct Sprite *sprite);
+static void AnimIceBallParticle(struct Sprite *sprite);
+
+static void AnimTask_Haze2(u8 taskId);
+static void AnimTask_OverlayFogTiles(u8 taskId);
+static void AnimTask_Hail2(u8 taskId);
+bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4);
const union AnimCmd gSpriteAnim_83D9B58[] =
{
@@ -33,6 +67,7 @@ const union AnimCmd *const gSpriteAnimTable_83D9B64[] =
gSpriteAnim_83D9B58,
};
+// unknown sprite template
const struct SpriteTemplate gSpriteTemplate_83D9B68 =
{
.tileTag = 10141,
@@ -122,7 +157,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9BDC[] =
gSpriteAffineAnim_83D9BCC,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BE0 =
+const struct SpriteTemplate gLargeIcePunchCrystalSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -130,10 +165,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BE0 =
.anims = gSpriteAnimTable_83D9BB8,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D9BDC,
- .callback = sub_80D78EC,
+ .callback = AnimIcePunchSwirlingParticle,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BF8 =
+const struct SpriteTemplate gSmallIcePunchCrystalSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -141,7 +176,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BF8 =
.anims = gSpriteAnimTable_83D9BBC,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D78EC,
+ .callback = AnimIcePunchSwirlingParticle,
};
const union AffineAnimCmd gSpriteAffineAnim_83D9C10[] =
@@ -155,7 +190,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C20[] =
gSpriteAffineAnim_83D9C10,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C24 =
+const struct SpriteTemplate IceBeamCenterParticleSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -163,10 +198,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C24 =
.anims = gSpriteAnimTable_83D9BB8,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D9C20,
- .callback = sub_80D792C,
+ .callback = AnimIceBeamParticle,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C3C =
+const struct SpriteTemplate gIceBeamOuterParticleSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -174,7 +209,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C3C =
.anims = gSpriteAnimTable_83D9BBC,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D792C,
+ .callback = AnimIceBeamParticle,
};
const union AffineAnimCmd gSpriteAffineAnim_83D9C54[] =
@@ -190,7 +225,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C74[] =
gSpriteAffineAnim_83D9C54,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C78 =
+const struct SpriteTemplate gLargeIceEffectParticleSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -198,10 +233,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C78 =
.anims = gSpriteAnimTable_83D9BB8,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D9C74,
- .callback = sub_80D79B4,
+ .callback = AnimIceEffectParticle,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C90 =
+const struct SpriteTemplate gSmallIceEffectParticleSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -209,10 +244,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C90 =
.anims = gSpriteAnimTable_83D9BBC,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D9C74,
- .callback = sub_80D79B4,
+ .callback = AnimIceEffectParticle,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CA8 =
+const struct SpriteTemplate gSmallSnowballSpriteTemplate1 =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -220,10 +255,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CA8 =
.anims = gSpriteAnimTable_83D9BC0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D7A64,
+ .callback = AnimSwirlingSnowball_Step1,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CC0 =
+const struct SpriteTemplate gLargeSnowballSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -231,10 +266,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CC0 =
.anims = gSpriteAnimTable_83D9BC4,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D7CD4,
+ .callback = AnimMoveParticleBeyondTarget,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CD8 =
+const struct SpriteTemplate gSmallSnowballSpriteTemplate2 =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -242,7 +277,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CD8 =
.anims = gSpriteAnimTable_83D9BC0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D7CD4,
+ .callback = AnimMoveParticleBeyondTarget,
};
const union AnimCmd gSpriteAnim_83D9CF0[] =
@@ -262,7 +297,7 @@ const union AnimCmd *const gSpriteAnimTable_83D9D10[] =
gSpriteAnim_83D9CF0,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D14 =
+const struct SpriteTemplate gIceSpikeSpriteTemplate =
{
.tileTag = 10142,
.paletteTag = 10142,
@@ -270,7 +305,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D14 =
.anims = gSpriteAnimTable_83D9D10,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D7E88,
+ .callback = AnimWaveFromCenterOfTarget,
};
const union AnimCmd gSpriteAnim_83D9D2C[] =
@@ -285,7 +320,7 @@ const union AnimCmd *const gSpriteAnimTable_83D9D38[] =
gSpriteAnim_83D9D2C,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D3C =
+const struct SpriteTemplate gMistCloudSpriteTemplate =
{
.tileTag = 10144,
.paletteTag = 10144,
@@ -293,10 +328,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D3C =
.anims = gSpriteAnimTable_83D9D38,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D7F10,
+ .callback = InitSwirlingFogAnim,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D54 =
+const struct SpriteTemplate gSmogCloudSpriteTemplate =
{
.tileTag = 10172,
.paletteTag = 10172,
@@ -304,7 +339,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D54 =
.anims = gSpriteAnimTable_83D9D38,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D7F10,
+ .callback = InitSwirlingFogAnim,
};
const u8 gUnknown_083D9D6C[] =
@@ -312,7 +347,7 @@ const u8 gUnknown_083D9D6C[] =
0, 1, 2, 2, 2, 2, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 8, 9,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D80 =
+const struct SpriteTemplate gMistBallSpriteTemplate =
{
.tileTag = 10155,
.paletteTag = 10155,
@@ -320,7 +355,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D80 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D83E0,
+ .callback = AnimThrowMistBall,
};
const u8 gUnknown_083D9D98[] =
@@ -328,7 +363,7 @@ const u8 gUnknown_083D9D98[] =
0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9DAC =
+const struct SpriteTemplate gPoisonGasCloudSpriteTemplate =
{
.tileTag = 10172,
.paletteTag = 10172,
@@ -336,22 +371,21 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9DAC =
.anims = gSpriteAnimTable_83D9D38,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D8700,
+ .callback = InitPoisonGasCloudAnim,
};
-// bitfield array
-const u32 gUnknown_083D9DC4[] =
+const u8 gUnknown_083D9DC4[][4] =
{
- 0x2001E064,
- 0x0001E055,
- 0x1011E0F2,
- 0x1021E042,
- 0x0031E0B6,
- 0x2001E03C,
- 0x0011E0D6,
- 0x1001E071,
- 0x1031E0D2,
- 0x0021E026,
+ {0x64, 0xE0, 0x01, 0x20},
+ {0x55, 0xE0, 0x01, 0x00},
+ {0xF2, 0xE0, 0x11, 0x10},
+ {0x42, 0xE0, 0x21, 0x10},
+ {0xB6, 0xE0, 0x31, 0x00},
+ {0x3C, 0xE0, 0x01, 0x20},
+ {0xD6, 0xE0, 0x11, 0x00},
+ {0x71, 0xE0, 0x01, 0x10},
+ {0xD2, 0xE0, 0x31, 0x10},
+ {0x26, 0xE0, 0x21, 0x00},
};
const union AffineAnimCmd gSpriteAffineAnim_83D9DEC[] =
@@ -390,7 +424,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9E38[] =
gSpriteAffineAnim_83D9E1C,
};
-const struct SpriteTemplate gSpriteTemplate_83D9E3C =
+const struct SpriteTemplate gHailSpriteTemplate =
{
.tileTag = 10263,
.paletteTag = 10263,
@@ -398,10 +432,10 @@ const struct SpriteTemplate gSpriteTemplate_83D9E3C =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D9E2C,
- .callback = sub_80D8D1C,
+ .callback = AnimHailBegin,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9E54 =
+const struct SpriteTemplate gWeatherBallHailSpriteTemplate =
{
.tileTag = 10263,
.paletteTag = 10263,
@@ -472,7 +506,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9EE0[] =
gSpriteAffineAnim_83D9ED0,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9EF4 =
+const struct SpriteTemplate gIceBallSpriteTemplate =
{
.tileTag = 10043,
.paletteTag = 10043,
@@ -480,10 +514,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9EF4 =
.anims = gSpriteAnimTable_83D9E88,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D9EE0,
- .callback = unc_080B06FC,
+ .callback = InitIceBallAnim,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F0C =
+const struct SpriteTemplate gIceBallParticleSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -491,5 +525,1798 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F0C =
.anims = gSpriteAnimTable_83D9BBC,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D8F10,
+ .callback = InitIceBallParticle,
};
+
+// unknown - potentially used in weather ball
+// TODO: decompile function and name it
+/*
+// NOT EQUIVALENT
+static void sub_80D7704(struct Sprite *sprite)
+{
+ //
+ //u16 battler1, battler2, battler3, battler4; //
+ u16 r9, r8, r3, r6;
+ //s16 r4, r10;
+
+ sprite->oam.tileNum += 7;
+
+ //u8 battler1, battler2, battler3, battler4;
+
+ //battler1 = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+ //battler2 = GetBattlerSpriteCoord(gAnimBankTarget, 3);
+ //battler3 = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ //battler4 = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+
+ //sprite->oam.tileNum += 7;
+
+ //sprite->data[0] = gBattleAnimArgs[4];
+
+ //sprite->data[1] = battler3 + gBattleAnimArgs[0]; //???
+ //sprite->data[2] = battler1 + gBattleAnimArgs[2];
+ //sprite->data[3] = battler4 + gBattleAnimArgs[1];
+ //sprite->data[4] = battler2 + gBattleAnimArgs[3];
+
+ r9 = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+ r8 = GetBattlerSpriteCoord(gAnimBankTarget, 3);
+ r3 = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ r6 = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+
+ sprite->data[0] = gBattleAnimArgs[4];
+
+ sprite->data[1] = r3 + gBattleAnimArgs[0]; //???
+ sprite->data[2] = r9 + gBattleAnimArgs[2];
+ sprite->data[3] = r6 + gBattleAnimArgs[1];
+ sprite->data[4] = r8 + gBattleAnimArgs[3];
+
+ //sprite->data[0] = gBattleAnimArgs;
+
+
+ sub_8078314(sprite);
+
+ if ((u32)(r9 + 32) <= 304 || (u32)(r8 + 32) <= 224) // cmp 1
+ {
+ r4 = sprite->data[1];
+ r10 = 304;
+
+ // _080D77AA
+ for (int i = 0; i < 3; i++)
+ {
+ //
+ if (((u32)((s16)r9 + r4) + (0x80 << 14)) >> 16 > 304
+ || ((u32)((s16)r8 + r4) + (0x80 << 14)) >> 16 > 0xE0)
+ {
+ break;
+ }
+ }
+ }
+ // _080D77DE
+}
+*/
+
+NAKED static void sub_80D7704(struct Sprite *sprite)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x4\n"
+ "\tadds r5, r0, 0\n"
+ "\tldrh r2, [r5, 0x4]\n"
+ "\tlsls r1, r2, 22\n"
+ "\tlsrs r1, 22\n"
+ "\tadds r1, 0x7\n"
+ "\tldr r3, _080D780C @ =0x000003ff\n"
+ "\tadds r0, r3, 0\n"
+ "\tands r1, r0\n"
+ "\tldr r0, _080D7810 @ =0xfffffc00\n"
+ "\tands r0, r2\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r5, 0x4]\n"
+ "\tldr r4, _080D7814 @ =gAnimBankTarget\n"
+ "\tldrb r0, [r4]\n"
+ "\tmovs r1, 0x2\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tmov r9, r0\n"
+ "\tldrb r0, [r4]\n"
+ "\tmovs r1, 0x3\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tmov r8, r0\n"
+ "\tldr r4, _080D7818 @ =gAnimBankAttacker\n"
+ "\tldrb r0, [r4]\n"
+ "\tmovs r1, 0x2\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r3, r0, 24\n"
+ "\tldrb r0, [r4]\n"
+ "\tmovs r1, 0x3\n"
+ "\tstr r3, [sp]\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tldr r1, _080D781C @ =gBattleAnimArgs\n"
+ "\tldrh r0, [r1, 0x8]\n"
+ "\tstrh r0, [r5, 0x2E]\n"
+ "\tldrh r0, [r1]\n"
+ "\tldr r3, [sp]\n"
+ "\tadds r0, r3\n"
+ "\tstrh r0, [r5, 0x30]\n"
+ "\t ldrh r0, [r1, 0x4]\n"
+ "\t mov r4, r9\n"
+ "\t adds r0, r4, r0\n"
+ "\tstrh r0, [r5, 0x32]\n"
+ "\tldrh r0, [r1, 0x2]\n"
+ "\tadds r0, r6\n"
+ "\tstrh r0, [r5, 0x34]\n"
+ "\tldrh r0, [r1, 0x6]\n"
+ "\tmov r7, r8\n"
+ "\tadds r0, r7, r0\n"
+ "\tstrh r0, [r5, 0x36]\n"
+ "\tadds r0, r5, 0\n"
+ "\tbl sub_8078314\n"
+ "\tadds r4, 0x20\n"
+ "\tmovs r0, 0x98\n"
+ "\tlsls r0, 1\n"
+ "\tmov r12, r0\n"
+ "\tldr r3, [sp]\n"
+ "\tcmp r4, r12\n"
+ "\tbhi _080D77DE\n"
+ "\tadds r0, r7, 0\n"
+ "\tadds r0, 0x20\n"
+ "\tldrh r1, [r5, 0x30]\n"
+ "\tldrh r2, [r5, 0x32]\n"
+ "\tcmp r0, 0xE0\n"
+ "\tbhi _080D77DE\n"
+ "\tadds r4, r1, 0\n"
+ "\tmov r10, r12\n"
+ "_080D77AA:\n"
+ "\tmov r7, r9\n"
+ "\tlsls r1, r7, 16\n"
+ "\tasrs r1, 16\n"
+ "\tadds r1, r4\n"
+ "\tlsls r1, 16\n"
+ "\tmov r7, r8\n"
+ "\tlsls r0, r7, 16\n"
+ "\tasrs r0, 16\n"
+ "\tadds r0, r2\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tmov r8, r0\n"
+ "\tlsrs r0, r1, 16\n"
+ "\tmov r9, r0\n"
+ "\tmovs r7, 0x80\n"
+ "\tlsls r7, 14\n"
+ "\tadds r1, r7\n"
+ "\tlsrs r1, 16\n"
+ "\tcmp r1, r10\n"
+ "\tbhi _080D77DE\n"
+ "\tmov r1, r8\n"
+ "\tlsls r0, r1, 16\n"
+ "\tadds r0, r7\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, 0xE0\n"
+ "\tbls _080D77AA\n"
+ "_080D77DE:\n"
+ "\tldrh r0, [r5, 0x30]\n"
+ "\tnegs r7, r0\n"
+ "\tstrh r7, [r5, 0x30]\n"
+ "\tldrh r0, [r5, 0x32]\n"
+ "\tnegs r4, r0\n"
+ "\tstrh r4, [r5, 0x32]\n"
+ "\tlsls r0, r3, 16\n"
+ "\tmovs r1, 0x80\n"
+ "\tlsls r1, 14\n"
+ "\tadds r0, r1\n"
+ "\tlsrs r0, 16\n"
+ "\tmovs r2, 0x98\n"
+ "\tlsls r2, 1\n"
+ "\tmov r12, r2\n"
+ "\tldr r1, _080D781C @ =gBattleAnimArgs\n"
+ "\tmov r10, r1\n"
+ "\tcmp r0, r12\n"
+ "\tbhi _080D784A\n"
+ "\tlsls r1, r6, 16\n"
+ "\tmovs r2, 0x80\n"
+ "\tlsls r2, 14\n"
+ "\tadds r0, r1, r2\n"
+ "\tb _080D7842\n"
+ "\t.align 2, 0\n"
+ "_080D780C: .4byte 0x000003ff\n"
+ "_080D7810: .4byte 0xfffffc00\n"
+ "_080D7814: .4byte gAnimBankTarget\n"
+ "_080D7818: .4byte gAnimBankAttacker\n"
+ "_080D781C: .4byte gBattleAnimArgs\n"
+ "_080D7820:\n"
+ "\tlsls r1, r3, 16\n"
+ "\tasrs r1, 16\n"
+ "\tadds r1, r7\n"
+ "\tlsls r1, 16\n"
+ "\tasrs r0, r2, 16\n"
+ "\tadds r0, r4\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tlsrs r3, r1, 16\n"
+ "\tmovs r0, 0x80\n"
+ "\tlsls r0, 14\n"
+ "\tadds r1, r0\n"
+ "\tlsrs r1, 16\n"
+ "\tcmp r1, r12\n"
+ "\tbhi _080D784A\n"
+ "\tlsls r1, r6, 16\n"
+ "\tadds r0, r1, r0\n"
+ "_080D7842:\n"
+ "\tlsrs r0, 16\n"
+ "\tadds r2, r1, 0\n"
+ "\tcmp r0, 0xE0\n"
+ "\tbls _080D7820\n"
+ "_080D784A:\n"
+ "\tstrh r3, [r5, 0x20]\n"
+ "\tstrh r6, [r5, 0x22]\n"
+ "\tmov r1, r10\n"
+ "\tldrh r0, [r1, 0x8]\n"
+ "\tstrh r0, [r5, 0x2E]\n"
+ "\tstrh r3, [r5, 0x30]\n"
+ "\tmov r2, r9\n"
+ "\tstrh r2, [r5, 0x32]\n"
+ "\tstrh r6, [r5, 0x34]\n"
+ "\tmov r3, r8\n"
+ "\tstrh r3, [r5, 0x36]\n"
+ "\tadds r0, r5, 0\n"
+ "\tbl sub_8078314\n"
+ "\tmov r7, r10\n"
+ "\tldrh r0, [r7, 0xA]\n"
+ "\tstrh r0, [r5, 0x34]\n"
+ "\tldrh r0, [r7, 0xC]\n"
+ "\tstrh r0, [r5, 0x36]\n"
+ "\tldr r0, _080D7884 @ =sub_80D7888\n"
+ "\tstr r0, [r5, 0x1C]\n"
+ "\tadd sp, 0x4\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_080D7884: .4byte sub_80D7888");
+}
+
+void sub_80D7888(struct Sprite *sprite)
+{
+ if (sprite->data[0] != 0)
+ {
+ sprite->data[5] += sprite->data[1];
+ sprite->data[6] += sprite->data[2];
+ sprite->pos2.x = sprite->data[5];
+ sprite->pos2.y = sprite->data[6];
+ sprite->pos2.x += Sin(sprite->data[7], sprite->data[3]);
+ sprite->pos2.y += Sin(sprite->data[7], sprite->data[3]);
+ sprite->data[7] = (sprite->data[7] + sprite->data[4]) & 0xFF;
+ sprite->data[0] -= 1;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Animates the swirling ice crystals in Ice Punch.
+// arg 0: initial position angle around circle (0-256)
+static void AnimIcePunchSwirlingParticle(struct Sprite *sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = 60;
+ sprite->data[2] = 9;
+ sprite->data[3] = 30;
+ sprite->data[4] = 65024;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+ sprite->callback = sub_8078174;
+ sub_8078174(sprite);
+}
+
+// Animates the ice particles in Ice Beam.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: duration
+static void AnimIceBeamParticle(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, 1);
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ sprite->data[2] -= gBattleAnimArgs[2];
+ else
+ sprite->data[2] += gBattleAnimArgs[2];
+
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
+ sprite->data[0] = gBattleAnimArgs[4];
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+ sprite->callback = StartAnimLinearTranslation;
+}
+
+// Animates the ice crystals at the end of Ice Punch, Ice Beam, Tri Attack,
+// Weather Ball (Hail), Blizzard, and Powder Snow.
+// arg 0: target x offset
+// arg 1: target y offset
+// arg 2: ??? unknown boolean
+static void AnimIceEffectParticle(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sub_8078764(sprite, 1);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y);
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ StoreSpriteCallbackInData(sprite, AnimFlickerIceEffectParticle);
+ sprite->callback = sub_80785E4;
+}
+
+static void AnimFlickerIceEffectParticle(struct Sprite *sprite)
+{
+ sprite->invisible ^= 1;
+ sprite->data[0] += 1;
+ if (sprite->data[0] == 20)
+ move_anim_8074EE0(sprite);
+}
+
+// Animates the small snowballs that swirl around the target in Blizzard and Icy Wind.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: particle speed
+// arg 5: multiple targets? (boolean)
+static void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
+{
+ int i;
+ s16 tempDataHolder[8];
+
+ InitAnimSpritePos(sprite, 1);
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+
+ if (!gBattleAnimArgs[5])
+ {
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
+ }
+
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ sprite->data[2] -= gBattleAnimArgs[2];
+ else
+ sprite->data[2] += gBattleAnimArgs[2];
+
+ for (i = 0; i < 8; i++)
+ tempDataHolder[i] = sprite->data[i];
+
+ sub_8078D60(sprite);
+ sprite->data[1] ^= 1;
+ sprite->data[2] ^= 1;
+
+ while (1)
+ {
+ sprite->data[0] = 1;
+ sub_8078CE8(sprite);
+
+ if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272
+ || sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ break;
+ }
+
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+
+ for (i = 0; i < 8; i++)
+ sprite->data[i] = tempDataHolder[i];
+
+ sprite->callback = sub_8078D8C;
+ StoreSpriteCallbackInData(sprite, AnimSwirlingSnowball_Step2);
+}
+
+static void AnimSwirlingSnowball_Step2(struct Sprite *sprite)
+{
+ s16 tempVar;
+
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[0] = 128;
+
+ tempVar = GetBattlerSide(gAnimBankAttacker) != 0 ? 20 : 65516;
+
+ sprite->data[3] = Sin(sprite->data[0], tempVar);
+ sprite->data[4] = Cos(sprite->data[0], 0xF);
+ sprite->data[5] = 0;
+ sprite->callback = AnimSwirlingSnowball_Step3;
+ AnimSwirlingSnowball_Step3(sprite);
+}
+
+static void AnimSwirlingSnowball_Step3(struct Sprite *sprite)
+{
+ s16 tempVar;
+ tempVar = GetBattlerSide(gAnimBankAttacker) != 0 ? 20 : 65516;
+
+ if (sprite->data[5] <= 31)
+ {
+ sprite->pos2.x = Sin(sprite->data[0], tempVar) - sprite->data[3];
+ sprite->pos2.y = Cos(sprite->data[0], 15) - sprite->data[4];
+ sprite->data[0] = (sprite->data[0] + 16) & 0xFF;
+ sprite->data[5] += 1;
+ }
+ else
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[4] = 0;
+ sprite->data[3] = 0;
+ sprite->callback = AnimSwirlingSnowball_End;
+ }
+}
+
+static void AnimSwirlingSnowball_End(struct Sprite *sprite)
+{
+ sprite->data[0] = 1;
+ sub_8078CE8(sprite);
+
+ if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272
+ || sprite->pos1.y + sprite->pos2.y > 256
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ DestroyAnimSprite(sprite);
+}
+
+// Moves particles towards the target mon and off the screen. Used to animate
+// the large snowballs in Blizzard and the small snowballs in Powder Snow.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: speed
+// arg 5: wave amplitude
+// arg 6: wave frequency
+// arg 7: multiple targets? (boolean)
+static void AnimMoveParticleBeyondTarget(struct Sprite *sprite)
+{
+ int i;
+ s16 tempDataHolder[8];
+
+ InitAnimSpritePos(sprite, 1);
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+
+ if (!gBattleAnimArgs[7])
+ {
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
+ }
+
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ sprite->data[2] -= gBattleAnimArgs[2];
+ else
+ sprite->data[2] += gBattleAnimArgs[2];
+
+ sprite->data[4] += gBattleAnimArgs[3];
+ sub_8078D60(sprite);
+ for (i = 0; i < 8; i++)
+ tempDataHolder[i] = sprite->data[i];
+
+ sprite->data[1] ^= 1;
+ sprite->data[2] ^= 1;
+
+ while (1)
+ {
+ sprite->data[0] = 1;
+ sub_8078CE8(sprite);
+ if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272
+ || sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ break;
+ }
+
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+
+ for (i = 0; i < 8; i++)
+ sprite->data[i] = tempDataHolder[i];
+
+ sprite->data[5] = gBattleAnimArgs[5];
+ sprite->data[6] = gBattleAnimArgs[6];
+ sprite->callback = AnimWiggleParticleTowardsTarget;
+}
+
+// Moves particles in a sine wave towards the target.
+static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite)
+{
+ sub_8078CE8(sprite);
+ if (sprite->data[0] == 0)
+ sprite->data[0] = 1;
+
+ sprite->pos2.y += Sin(sprite->data[7], sprite->data[5]);
+ sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF;
+ if (sprite->data[0] == 1)
+ {
+ if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272
+ || sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Animates the ice pilar wave used by Icy Wind.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: ??? unknown boolean
+static void AnimWaveFromCenterOfTarget(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sub_8078764(sprite, 0);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
+
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ sprite->data[0]++;
+ }
+ else
+ {
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Animates the fog that swirls around the mon in Mist and Smog.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: change in y pixels per rotation
+// arg 3: duration
+// arg 4: animate on opponent? (boolean)
+// arg 5: ??? unknown boolean
+static void InitSwirlingFogAnim(struct Sprite *sprite)
+{
+ s16 tempVar;
+ u8 battler;
+
+ if (gBattleAnimArgs[4] == 0)
+ {
+ if (gBattleAnimArgs[5] == 0)
+ {
+ InitAnimSpritePos(sprite, 0);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankAttacker, 0, &sprite->pos1.x, &sprite->pos1.y);
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ battler = gAnimBankAttacker;
+ }
+ else
+ {
+ if (gBattleAnimArgs[5] == 0)
+ {
+ sub_8078764(sprite, 0);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
+ if (GetBattlerSide(gAnimBankTarget) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ battler = gAnimBankTarget;
+ }
+
+ sprite->data[7] = battler;
+ if (gBattleAnimArgs[5] == 0 || !IsDoubleBattle())
+ tempVar = 0x20;
+ else
+ tempVar = 0x40;
+
+ sprite->data[6] = tempVar;
+ if (GetBattlerSide(gAnimBankTarget) == B_SIDE_PLAYER)
+ sprite->pos1.y += 8;
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[2];
+
+ InitAnimLinearTranslation(sprite);
+
+ sprite->data[5] = 64;
+ sprite->callback = AnimSwirlingFogAnim;
+ AnimSwirlingFogAnim(sprite);
+}
+
+// Animates swirling fog initialized by InitSwirlingFogAnim.
+static void AnimSwirlingFogAnim(struct Sprite *sprite)
+{
+ if (!TranslateAnimLinear(sprite))
+ {
+ sprite->pos2.x += Sin(sprite->data[5], sprite->data[6]);
+ sprite->pos2.y += Cos(sprite->data[5], -6);
+
+ if ((u16)(sprite->data[5] - 64) <= 0x7F)
+ sprite->oam.priority = sub_8079ED4(sprite->data[7]);
+ else
+ sprite->oam.priority = sub_8079ED4(sprite->data[7]) + 1;
+
+ sprite->data[5] = (sprite->data[5] + 3) & 0xFF;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Fades mons to black and places foggy overlay in Haze.
+void AnimTask_Haze1(u8 taskId)
+{
+ struct Struct_sub_8078914 subStruct;
+
+ REG_BLDCNT = 0x3F42;
+ REG_BLDALPHA = 0x1000;
+ REG_BG1CNT_BITFIELD.priority = 1;
+ REG_BG1CNT_BITFIELD.screenSize = 0;
+
+ if (!IsContest())
+ REG_BG1CNT_BITFIELD.charBaseBlock = 1;
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+
+ sub_8078914(&subStruct);
+ DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000);
+ DmaCopy16Defvars(3, &gWeatherFog1Tiles, subStruct.field_0, 0x800);
+ LZDecompressVram(&gBattleAnimFogTilemap, subStruct.field_4);
+ LoadPalette(&gUnknown_083970E8, subStruct.field_8 * 16, 32);
+
+ if (IsContest())
+ sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0);
+
+ gTasks[taskId].func = AnimTask_Haze2;
+}
+
+static void AnimTask_Haze2(u8 taskId)
+{
+ struct Struct_sub_8078914 subStruct;
+
+ gBattle_BG1_X += 0xFFFF;
+ gBattle_BG1_Y += 0;
+
+ switch (gTasks[taskId].data[12])
+ {
+ case 0:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[9]++;
+ gTasks[taskId].data[11] = gUnknown_083D9D6C[gTasks[taskId].data[9]];
+
+ REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8);
+ if (gTasks[taskId].data[11] == 9)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 0x51)
+ {
+ gTasks[taskId].data[11] = 9;
+ gTasks[taskId].data[12]++;
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]--;
+
+ REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8);
+ if (gTasks[taskId].data[11] == 0)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 3:
+ sub_8078914(&subStruct);
+ DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000);
+ DmaClear32(3, subStruct.field_4, 0x800);
+
+ if (!IsContest())
+ REG_BG1CNT_BITFIELD.charBaseBlock = 0;
+
+ gTasks[taskId].data[12]++;
+ // fall through
+ case 4:
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ REG_BG1CNT_BITFIELD.priority = 1;
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+// Throws the ball in Mist Ball.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: targey x offset
+// arg 3: target y offset
+// arg 4: duration
+// arg 5: ??? unknown (seems to vibrate target mon somehow)
+static void AnimThrowMistBall(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ sprite->callback = TranslateAnimSpriteToTargetMonLocation;
+}
+
+// Displays misty background in Mist Ball.
+void AnimTask_LoadMistTiles(u8 taskId)
+{
+ struct Struct_sub_8078914 subStruct;
+
+ REG_BLDCNT = 0x3F42;
+ REG_BLDALPHA = 0x1000;
+ REG_BG1CNT_BITFIELD.priority = 1;
+ REG_BG1CNT_BITFIELD.screenSize = 0;
+
+ if (!IsContest())
+ REG_BG1CNT_BITFIELD.charBaseBlock = 1;
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+
+ sub_8078914(&subStruct);
+ DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000);
+ DmaCopy16Defvars(3, &gWeatherFog1Tiles, subStruct.field_0, 0x800);
+ LZDecompressVram(&gBattleAnimFogTilemap, subStruct.field_4);
+ LoadPalette(&gUnknown_083970E8, subStruct.field_8 * 16, 32);
+
+ if (IsContest())
+ sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0);
+
+ gTasks[taskId].data[15] = -1;
+ gTasks[taskId].func = AnimTask_OverlayFogTiles;
+}
+
+static void AnimTask_OverlayFogTiles(u8 taskId)
+{
+ struct Struct_sub_8078914 subStruct;
+
+ gBattle_BG1_X += gTasks[taskId].data[15];
+ gBattle_BG1_Y += 0;
+
+ switch (gTasks[taskId].data[12])
+ {
+ case 0:
+ gTasks[taskId].data[9] += 1;
+ gTasks[taskId].data[11] = gUnknown_083D9D98[gTasks[taskId].data[9]];
+ REG_BLDALPHA = gTasks[taskId].data[11] | ((17 - gTasks[taskId].data[11]) << 8);
+ if (gTasks[taskId].data[11] == 5)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 0x51)
+ {
+ gTasks[taskId].data[11] = 5;
+ gTasks[taskId].data[12]++;
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11] -= 1;
+ REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8);
+ if (gTasks[taskId].data[11] == 0)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 3:
+ sub_8078914(&subStruct);
+ DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000);
+ DmaClear32(3, subStruct.field_4, 0x800);
+
+ if (!IsContest())
+ REG_BG1CNT_BITFIELD.charBaseBlock = 0;
+
+ gTasks[taskId].data[12]++;
+ // fall through
+ case 4:
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ REG_BG1CNT_BITFIELD.priority = 1;
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+// Initializes gas clouds in the Poison Gas animation.
+// arg 0: duration
+// arg 1: ? target x offset
+// arg 2: ? target y offset
+// arg 3: ? swirl start x
+// arg 4: ? swirl start y
+// arg 5: ??? unknown
+// arg 6: ??? unknown
+// arg 7: ??? unknown boolean
+static void InitPoisonGasCloudAnim(struct Sprite *sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[0];
+
+ if (GetBattlerSpriteCoord(gAnimBankAttacker, 2) < GetBattlerSpriteCoord(gAnimBankTarget, 2))
+ sprite->data[7] = 0x8000;
+
+ if (!(gBanksBySide[gAnimBankTarget] & 1))
+ {
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+
+ if ((sprite->data[7] & 0x8000) && !(gBanksBySide[gAnimBankAttacker] & 1))
+ sprite->subpriority = gSprites[GetAnimBattlerSpriteId(1)].subpriority + 1;
+
+ sprite->data[6] = 1;
+ }
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ if (gBattleAnimArgs[7])
+ {
+ sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1];
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[3];
+ sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[4];
+ sprite->data[7] |= sub_8079ED4(gAnimBankTarget) << 8;
+ }
+ else
+ {
+ sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1];
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 0) + gBattleAnimArgs[3];
+ sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + gBattleAnimArgs[4];
+ sprite->data[7] |= sub_8079ED4(gAnimBankTarget) << 8;
+ }
+
+ if (IsContest())
+ {
+ sprite->data[6] = 1;
+ sprite->subpriority = 0x80;
+ }
+
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = sub_80D8874;
+}
+
+// Animates the gas clouds towards the target mon in Poison Gas.
+// functionally correct, but there appears to be an unused local variable causing
+// switch case 1 to not match
+#ifdef NONMATCHING
+static void sub_80D8874(struct Sprite *sprite)
+{
+ int value;
+ register s16 value2 asm("r5");
+
+ switch (sprite->data[7] & 0xFF)
+ {
+ case 0:
+ TranslateAnimLinear(sprite);
+ value = gSineTable[sprite->data[5]];
+ sprite->pos2.x += value >> 4;
+ if (sprite->data[6])
+ sprite->data[5] = (sprite->data[5] - 8) & 0xFF;
+ else
+ sprite->data[5] = (sprite->data[5] + 8) & 0xFF;
+
+ if (sprite->data[0] <= 0)
+ {
+ value2 = 80;
+ sprite->data[0] = value2;
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0);
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->pos1.y + 29;
+ sprite->data[7]++;
+ if (gMain.inBattle && gBanksBySide[gAnimBankTarget] & 1)
+ sprite->data[5] = 204;
+ else
+ sprite->data[5] = value2;
+
+ sprite->pos2.y = 0;
+ value = gSineTable[sprite->data[5]];
+ sprite->pos2.x = value >> 3;
+ sprite->data[5] = (sprite->data[5] + 2) & 0xFF;
+ InitAnimLinearTranslation(sprite);
+ }
+ break;
+ case 1:
+ TranslateAnimLinear(sprite);
+ value = gSineTable[sprite->data[5]];
+ sprite->pos2.x += value >> 3;
+ sprite->pos2.y += (gSineTable[sprite->data[5] + 0x40] * -3) >> 8;
+ if (gMain.inBattle)
+ {
+ u16 var0 = sprite->data[5] - 0x40;
+ if (var0 <= 0x7F)
+ sprite->oam.priority = sprite->data[7] >> 8;
+ else
+ sprite->oam.priority = (sprite->data[7] >> 8) + 1;
+
+ sprite->data[5] = (sprite->data[5] + 4) & 0xFF;
+ }
+ else
+ {
+ u16 var0 = sprite->data[5] - 0x40;
+ if (var0 <= 0x7F)
+ sprite->subpriority = 128;
+ else
+ sprite->subpriority = 140;
+
+ sprite->data[5] = (sprite->data[5] - 4) & 0xFF;
+ }
+
+ if (sprite->data[0] <= 0)
+ {
+ asm("mov r2, #0"); // unused local variable?
+ sprite->data[0] = 0x300;
+ sprite->data[1] = sprite->pos1.x += sprite->pos2.x;
+ sprite->data[3] = sprite->pos1.y += sprite->pos2.y;
+ sprite->data[4] = sprite->pos1.y + 4;
+ if (gMain.inBattle && gBanksBySide[gAnimBankTarget] & 1)
+ sprite->data[2] = 0x100;
+ else
+ sprite->data[2] = -0x10;
+
+ sprite->data[7]++;
+ sprite->pos2.x = sprite->pos2.y = 0;
+ sub_8078BD4(sprite);
+ }
+ break;
+ case 2:
+ if (TranslateAnimLinear(sprite))
+ {
+ if (sprite->oam.affineMode & 1)
+ {
+ FreeOamMatrix(sprite->oam.matrixNum);
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
+ }
+
+ DestroySprite(sprite);
+ gAnimVisualTaskCount--;
+ }
+ break;
+ }
+}
+#else
+NAKED static void sub_80D8874(struct Sprite *sprite)
+{
+ asm_unified("\tpush {r4-r6,lr}\n"
+ "\tadds r4, r0, 0\n"
+ "\tldrh r0, [r4, 0x3C]\n"
+ "\tmovs r5, 0xFF\n"
+ "\tmovs r1, 0xFF\n"
+ "\tands r1, r0\n"
+ "\tcmp r1, 0x1\n"
+ "\tbeq _080D8968\n"
+ "\tcmp r1, 0x1\n"
+ "\tbgt _080D888E\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _080D8896\n"
+ "\tb _080D8AD0\n"
+ "_080D888E:\n"
+ "\tcmp r1, 0x2\n"
+ "\tbne _080D8894\n"
+ "\tb _080D8A94\n"
+ "_080D8894:\n"
+ "\tb _080D8AD0\n"
+ "_080D8896:\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl TranslateAnimLinear\n"
+ "\tldr r1, _080D88C0 @ =gSineTable\n"
+ "\tmovs r2, 0x38\n"
+ "\tldrsh r0, [r4, r2]\n"
+ "\tlsls r0, 1\n"
+ "\tadds r0, r1\n"
+ "\tmovs r1, 0\n"
+ "\tldrsh r0, [r0, r1]\n"
+ "\tasrs r0, 4\n"
+ "\tldrh r2, [r4, 0x24]\n"
+ "\tadds r0, r2\n"
+ "\tstrh r0, [r4, 0x24]\n"
+ "\tmovs r1, 0x3A\n"
+ "\tldrsh r0, [r4, r1]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D88C4\n"
+ "\tldrh r0, [r4, 0x38]\n"
+ "\tsubs r0, 0x8\n"
+ "\tb _080D88C8\n"
+ "\t.align 2, 0\n"
+ "_080D88C0: .4byte gSineTable\n"
+ "_080D88C4:\n"
+ "\tldrh r0, [r4, 0x38]\n"
+ "\tadds r0, 0x8\n"
+ "_080D88C8:\n"
+ "\tands r0, r5\n"
+ "\tstrh r0, [r4, 0x38]\n"
+ "\tmovs r2, 0x2E\n"
+ "\tldrsh r0, [r4, r2]\n"
+ "\tcmp r0, 0\n"
+ "\tble _080D88D6\n"
+ "\tb _080D8AD0\n"
+ "_080D88D6:\n"
+ "\tmovs r5, 0x50\n"
+ "\tstrh r5, [r4, 0x2E]\n"
+ "\tldr r6, _080D8928 @ =gAnimBankTarget\n"
+ "\tldrb r0, [r6]\n"
+ "\tmovs r1, 0\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tstrh r0, [r4, 0x20]\n"
+ "\tstrh r0, [r4, 0x30]\n"
+ "\tstrh r0, [r4, 0x32]\n"
+ "\tldrh r0, [r4, 0x26]\n"
+ "\tldrh r1, [r4, 0x22]\n"
+ "\tadds r0, r1\n"
+ "\tstrh r0, [r4, 0x22]\n"
+ "\tstrh r0, [r4, 0x34]\n"
+ "\tadds r0, 0x1D\n"
+ "\tstrh r0, [r4, 0x36]\n"
+ "\tldrh r0, [r4, 0x3C]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r4, 0x3C]\n"
+ "\tldr r0, _080D892C @ =gMain\n"
+ "\tldr r2, _080D8930 @ =0x0000043d\n"
+ "\tadds r0, r2\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r0, 0x2\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8938\n"
+ "\tldr r1, _080D8934 @ =gBanksBySide\n"
+ "\tldrb r0, [r6]\n"
+ "\tadds r0, r1\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r0, 0x1\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8938\n"
+ "\tmovs r0, 0xCC\n"
+ "\tstrh r0, [r4, 0x38]\n"
+ "\tb _080D893A\n"
+ "\t.align 2, 0\n"
+ "_080D8928: .4byte gAnimBankTarget\n"
+ "_080D892C: .4byte gMain\n"
+ "_080D8930: .4byte 0x0000043d\n"
+ "_080D8934: .4byte gBanksBySide\n"
+ "_080D8938:\n"
+ "\tstrh r5, [r4, 0x38]\n"
+ "_080D893A:\n"
+ "\tmovs r0, 0\n"
+ "\tstrh r0, [r4, 0x26]\n"
+ "\tldr r1, _080D8964 @ =gSineTable\n"
+ "\tmovs r2, 0x38\n"
+ "\tldrsh r0, [r4, r2]\n"
+ "\tlsls r0, 1\n"
+ "\tadds r0, r1\n"
+ "\tmovs r1, 0\n"
+ "\tldrsh r0, [r0, r1]\n"
+ "\tasrs r0, 3\n"
+ "\tstrh r0, [r4, 0x24]\n"
+ "\tldrh r0, [r4, 0x38]\n"
+ "\tadds r0, 0x2\n"
+ "\tmovs r1, 0xFF\n"
+ "\tands r0, r1\n"
+ "\tstrh r0, [r4, 0x38]\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl InitAnimLinearTranslation\n"
+ "\tb _080D8AD0\n"
+ "\t.align 2, 0\n"
+ "_080D8964: .4byte gSineTable\n"
+ "_080D8968:\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl TranslateAnimLinear\n"
+ "\tldr r1, _080D89C8 @ =gSineTable\n"
+ "\tmovs r2, 0x38\n"
+ "\tldrsh r0, [r4, r2]\n"
+ "\tlsls r0, 1\n"
+ "\tadds r0, r1\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r0, [r0, r2]\n"
+ "\tasrs r0, 3\n"
+ "\tldrh r2, [r4, 0x24]\n"
+ "\tadds r0, r2\n"
+ "\tstrh r0, [r4, 0x24]\n"
+ "\tmovs r2, 0x38\n"
+ "\tldrsh r0, [r4, r2]\n"
+ "\tadds r0, 0x40\n"
+ "\tlsls r0, 1\n"
+ "\tadds r0, r1\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r1, [r0, r2]\n"
+ "\tlsls r0, r1, 1\n"
+ "\tadds r0, r1\n"
+ "\tnegs r0, r0\n"
+ "\tasrs r0, 8\n"
+ "\tldrh r1, [r4, 0x26]\n"
+ "\tadds r0, r1\n"
+ "\tstrh r0, [r4, 0x26]\n"
+ "\tldr r0, _080D89CC @ =gMain\n"
+ "\tldr r2, _080D89D0 @ =0x0000043d\n"
+ "\tadds r0, r2\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r0, 0x2\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D89F2\n"
+ "\tldrh r1, [r4, 0x38]\n"
+ "\tadds r0, r1, 0\n"
+ "\tsubs r0, 0x40\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tadds r3, r1, 0\n"
+ "\tcmp r0, 0x7F\n"
+ "\tbhi _080D89D4\n"
+ "\tldrh r1, [r4, 0x3C]\n"
+ "\tlsls r1, 16\n"
+ "\tasrs r1, 24\n"
+ "\tb _080D89DC\n"
+ "\t.align 2, 0\n"
+ "_080D89C8: .4byte gSineTable\n"
+ "_080D89CC: .4byte gMain\n"
+ "_080D89D0: .4byte 0x0000043d\n"
+ "_080D89D4:\n"
+ "\tldrh r1, [r4, 0x3C]\n"
+ "\tlsls r1, 16\n"
+ "\tasrs r1, 24\n"
+ "\tadds r1, 0x1\n"
+ "_080D89DC:\n"
+ "\tmovs r0, 0x3\n"
+ "\tands r1, r0\n"
+ "\tlsls r1, 2\n"
+ "\tldrb r2, [r4, 0x5]\n"
+ "\tmovs r0, 0xD\n"
+ "\tnegs r0, r0\n"
+ "\tands r0, r2\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r4, 0x5]\n"
+ "\tadds r0, r3, 0x4\n"
+ "\tb _080D8A12\n"
+ "_080D89F2:\n"
+ "\tldrh r0, [r4, 0x38]\n"
+ "\tsubs r0, 0x40\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, 0x7F\n"
+ "\tbhi _080D8A06\n"
+ "\tadds r1, r4, 0\n"
+ "\tadds r1, 0x43\n"
+ "\tmovs r0, 0x80\n"
+ "\tb _080D8A0C\n"
+ "_080D8A06:\n"
+ "\tadds r1, r4, 0\n"
+ "\tadds r1, 0x43\n"
+ "\tmovs r0, 0x8C\n"
+ "_080D8A0C:\n"
+ "\tstrb r0, [r1]\n"
+ "\tldrh r0, [r4, 0x38]\n"
+ "\tsubs r0, 0x4\n"
+ "_080D8A12:\n"
+ "\tmovs r1, 0xFF\n"
+ "\tands r0, r1\n"
+ "\tstrh r0, [r4, 0x38]\n"
+ "\tmovs r1, 0x2E\n"
+ "\tldrsh r0, [r4, r1]\n"
+ "\tcmp r0, 0\n"
+ "\tbgt _080D8AD0\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r0, 0xC0\n"
+ "\tlsls r0, 2\n"
+ "\tstrh r0, [r4, 0x2E]\n"
+ "\tldrh r0, [r4, 0x24]\n"
+ "\tldrh r1, [r4, 0x20]\n"
+ "\tadds r0, r1\n"
+ "\tstrh r0, [r4, 0x20]\n"
+ "\tstrh r0, [r4, 0x30]\n"
+ "\tldrh r0, [r4, 0x26]\n"
+ "\tldrh r1, [r4, 0x22]\n"
+ "\tadds r0, r1\n"
+ "\tstrh r0, [r4, 0x22]\n"
+ "\tstrh r0, [r4, 0x34]\n"
+ "\tadds r0, 0x4\n"
+ "\tstrh r0, [r4, 0x36]\n"
+ "\tldr r0, _080D8A68 @ =gMain\n"
+ "\tldr r1, _080D8A6C @ =0x0000043d\n"
+ "\tadds r0, r1\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r0, 0x2\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8A78\n"
+ "\tldr r1, _080D8A70 @ =gBanksBySide\n"
+ "\tldr r0, _080D8A74 @ =gAnimBankTarget\n"
+ "\tldrb r0, [r0]\n"
+ "\tadds r0, r1\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r0, 0x1\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8A78\n"
+ "\tmovs r0, 0x80\n"
+ "\tlsls r0, 1\n"
+ "\tb _080D8A7A\n"
+ "\t.align 2, 0\n"
+ "_080D8A68: .4byte gMain\n"
+ "_080D8A6C: .4byte 0x0000043d\n"
+ "_080D8A70: .4byte gBanksBySide\n"
+ "_080D8A74: .4byte gAnimBankTarget\n"
+ "_080D8A78:\n"
+ "\tldr r0, _080D8A90 @ =0x0000fff0\n"
+ "_080D8A7A:\n"
+ "\tstrh r0, [r4, 0x32]\n"
+ "\tldrh r0, [r4, 0x3C]\n"
+ "\tadds r0, 0x1\n"
+ "\tmovs r1, 0\n"
+ "\tstrh r0, [r4, 0x3C]\n"
+ "\tstrh r1, [r4, 0x26]\n"
+ "\tstrh r1, [r4, 0x24]\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl sub_8078BD4\n"
+ "\tb _080D8AD0\n"
+ "\t.align 2, 0\n"
+ "_080D8A90: .4byte 0x0000fff0\n"
+ "_080D8A94:\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl TranslateAnimLinear\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8AD0\n"
+ "\tldrb r0, [r4, 0x1]\n"
+ "\tlsls r0, 30\n"
+ "\tlsrs r0, 30\n"
+ "\tmovs r1, 0x1\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8AC2\n"
+ "\tldrb r0, [r4, 0x3]\n"
+ "\tlsls r0, 26\n"
+ "\tlsrs r0, 27\n"
+ "\tbl FreeOamMatrix\n"
+ "\tldrb r1, [r4, 0x1]\n"
+ "\tmovs r0, 0x4\n"
+ "\tnegs r0, r0\n"
+ "\tands r0, r1\n"
+ "\tstrb r0, [r4, 0x1]\n"
+ "_080D8AC2:\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl DestroySprite\n"
+ "\tldr r1, _080D8AD8 @ =gAnimVisualTaskCount\n"
+ "\tldrb r0, [r1]\n"
+ "\tsubs r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "_080D8AD0:\n"
+ "\tpop {r4-r6}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_080D8AD8: .4byte gAnimVisualTaskCount");
+}
+#endif // NONMATCHING
+
+// Creates Hail.
+void AnimTask_Hail1(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->func = AnimTask_Hail2;
+}
+
+static void AnimTask_Hail2(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[4] > 2)
+ {
+ task->data[4] = 0;
+ task->data[5] = 0;
+ task->data[2] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 1:
+ if (task->data[5] == 0)
+ {
+ if (sub_80D8BA8(task->data[3], task->data[2], taskId, 1))
+ task->data[1]++;
+
+ if (++task->data[2] == 3)
+ {
+ if (++task->data[3] == 10)
+ task->data[0]++;
+ else
+ task->data[0]--;
+ }
+ else
+ {
+ task->data[5] = 1;
+ }
+
+ }
+ else
+ {
+ task->data[5]--;
+ }
+ break;
+ case 2:
+ if (task->data[1] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+
+/*
+// Something to do with Hail.
+// possibly equivalent, possibly not
+bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)//(u8 spriteId, u8 taskId, u8 a3)//(u8 taskId)
+{
+ //
+ //struct Task *task = &gTasks[a2];
+ //u16 i, j;
+ //task->data[3]++;
+ //u8 r5bank = ;
+
+ //const struct SpriteTemplate *spriteTemplate;
+ u8 spriteId;
+
+ s16 r6, r7;
+
+ u32 tempA, tempB; // u32? s16? u16? u8? int?
+
+ //u8 r6, r7;
+
+ tempA = a3 + 0;
+ tempB = 0;
+
+ // is that gunknown a tempvar?
+
+ if (gUnknown_083D9DC4[a1][3] != 2
+ || IsAnimBankSpriteVisible(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2])))
+ {
+ //return TRUE;
+ tempB = 1;
+
+ r7 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 2);
+ r6 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 3);
+
+ switch (gUnknown_083D9DC4[a1][3])
+ {
+ case 0:
+ //
+ r7 -= sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6;
+ r6 -= sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6;
+ break;
+ case 1:
+ //
+ r7 += sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6;
+ r6 += sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6;
+ }
+ }
+
+ else
+ {
+ // _94
+ r7 = gUnknown_083D9DC4[a1][0];
+ r6 = gUnknown_083D9DC4[a1][1];
+ }
+
+ spriteId = CreateSprite(&HailSpriteTemplate, r7 - r6, -0x8, 0x12);
+
+ if (spriteId != 0x40)
+ {
+ //
+ StartSpriteAffineAnim(&gSprites[spriteId], a2);
+
+ gSprites[spriteId].data[0] = tempB;
+ gSprites[spriteId].data[3] = r7;
+ gSprites[spriteId].data[4] = r6;
+
+ gSprites[spriteId].data[5] = a2;
+ gSprites[spriteId].data[6] = tempA;
+ gSprites[spriteId].data[7] = a4;
+
+ return TRUE;
+ }
+
+ return FALSE;
+
+}
+//*/
+
+//*
+NAKED bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x8\n"
+ "\tlsls r0, 24\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r1, 24\n"
+ "\tmov r9, r1\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r2, 24\n"
+ "\tstr r2, [sp]\n"
+ "\tlsls r3, 24\n"
+ "\tlsrs r3, 24\n"
+ "\tmov r10, r3\n"
+ "\tmovs r1, 0\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tldr r1, _080D8C20 @ =gUnknown_083D9DC4\n"
+ "\tlsrs r0, 22\n"
+ "\tadds r4, r0, r1\n"
+ "\tldrb r0, [r4, 0x3]\n"
+ "\tlsls r0, 24\n"
+ "\tasrs r0, 28\n"
+ "\tmov r8, r0\n"
+ "\tcmp r0, 0x2\n"
+ "\tbeq _080D8C94\n"
+ "\tldrh r0, [r4, 0x2]\n"
+ "\tlsls r0, 20\n"
+ "\tlsrs r0, 24\n"
+ "\tbl GetBattlerAtPosition\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tadds r0, r5, 0\n"
+ "\tbl IsAnimBankSpriteVisible\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8C94\n"
+ "\tmovs r0, 0x1\n"
+ "\tstr r0, [sp, 0x4]\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0x2\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r7, r0, 24\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0x3\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tmov r1, r8\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _080D8C24\n"
+ "\tcmp r1, 0x1\n"
+ "\tbeq _080D8C5A\n"
+ "\tb _080D8CA6\n"
+ "\t.align 2, 0\n"
+ "_080D8C20: .4byte gUnknown_083D9DC4\n"
+ "_080D8C24:\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0x1\n"
+ "\tbl sub_807A100\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tmovs r1, 0x6\n"
+ "\tbl __divsi3\n"
+ "\tlsls r1, r7, 16\n"
+ "\tasrs r1, 16\n"
+ "\tsubs r1, r0\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r7, r1, 16\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0\n"
+ "\tbl sub_807A100\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tmovs r1, 0x6\n"
+ "\tbl __divsi3\n"
+ "\tlsls r1, r6, 16\n"
+ "\tasrs r1, 16\n"
+ "\tsubs r1, r0\n"
+ "\tb _080D8C8E\n"
+ "_080D8C5A:\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0x1\n"
+ "\tbl sub_807A100\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tmovs r1, 0x6\n"
+ "\tbl __divsi3\n"
+ "\tlsls r1, r7, 16\n"
+ "\tasrs r1, 16\n"
+ "\tadds r1, r0\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r7, r1, 16\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0\n"
+ "\tbl sub_807A100\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tmovs r1, 0x6\n"
+ "\tbl __divsi3\n"
+ "\tlsls r1, r6, 16\n"
+ "\tasrs r1, 16\n"
+ "\tadds r1, r0\n"
+ "_080D8C8E:\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r6, r1, 16\n"
+ "\tb _080D8CA6\n"
+ "_080D8C94:\n"
+ "\tldrh r0, [r4]\n"
+ "\tlsls r0, 22\n"
+ "\tasrs r0, 6\n"
+ "\tlsrs r7, r0, 16\n"
+ "\tldr r0, [r4]\n"
+ "\tlsls r0, 12\n"
+ "\tasrs r0, 22\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "_080D8CA6:\n"
+ "\tlsls r0, r6, 16\n"
+ "\tasrs r0, 16\n"
+ "\tadds r0, 0x8\n"
+ "\tlsrs r1, r0, 31\n"
+ "\tadds r0, r1\n"
+ "\tasrs r0, 1\n"
+ "\tlsls r1, r7, 16\n"
+ "\tasrs r1, 16\n"
+ "\tsubs r1, r0\n"
+ "\tldr r0, _080D8D00 @ =HailSpriteTemplate\n"
+ "\tlsls r1, 16\n"
+ "\tasrs r1, 16\n"
+ "\tmovs r2, 0x8\n"
+ "\tnegs r2, r2\n"
+ "\tmovs r3, 0x12\n"
+ "\tbl CreateSprite\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tcmp r5, 0x40\n"
+ "\tbeq _080D8D08\n"
+ "\tlsls r4, r5, 4\n"
+ "\tadds r4, r5\n"
+ "\tlsls r4, 2\n"
+ "\tldr r0, _080D8D04 @ =gSprites\n"
+ "\tadds r4, r0\n"
+ "\tadds r0, r4, 0\n"
+ "\tmov r1, r9\n"
+ "\tbl StartSpriteAffineAnim\n"
+ "\tmov r0, sp\n"
+ "\tldrh r0, [r0, 0x4]\n"
+ "\tstrh r0, [r4, 0x2E]\n"
+ "\tstrh r7, [r4, 0x34]\n"
+ "\tstrh r6, [r4, 0x36]\n"
+ "\tmov r1, r9\n"
+ "\tstrh r1, [r4, 0x38]\n"
+ "\tmov r0, sp\n"
+ "\tldrh r0, [r0]\n"
+ "\tstrh r0, [r4, 0x3A]\n"
+ "\tmov r1, r10\n"
+ "\tstrh r1, [r4, 0x3C]\n"
+ "\tmovs r0, 0x1\n"
+ "\tb _080D8D0A\n"
+ "\t.align 2, 0\n"
+ "_080D8D00: .4byte gHailSpriteTemplate\n"
+ "_080D8D04: .4byte gSprites\n"
+ "_080D8D08:\n"
+ "\tmovs r0, 0\n"
+ "_080D8D0A:\n"
+ "\tadd sp, 0x8\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+}
+//*/
+
+static void AnimHailBegin(struct Sprite *sprite)
+{
+ u8 spriteId;
+
+ sprite->pos1.x += 4;
+ sprite->pos1.y += 8;
+
+ if (sprite->pos1.x < sprite->data[3] && sprite->pos1.y < sprite->data[4])
+ return;
+
+ if (sprite->data[0] == 1 && sprite->data[5] == 0)
+ {
+ spriteId = CreateSprite(&gLargeIceEffectParticleSpriteTemplate,
+ sprite->data[3], sprite->data[4], sprite->subpriority);
+
+ sprite->data[0] = spriteId;
+ if (spriteId != 64)
+ {
+ gSprites[sprite->data[0]].callback = AnimHailContinue;
+ gSprites[sprite->data[0]].data[6] = sprite->data[6];
+ gSprites[sprite->data[0]].data[7] = sprite->data[7];
+ }
+
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+ }
+ else
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+ }
+}
+
+static void AnimHailContinue(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 20)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+ }
+}
+
+// Initializes the animation for Ice Ball.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: duration
+// arg 5: arc height (negative)
+static void InitIceBallAnim(struct Sprite *sprite)
+{
+ u8 animNum = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1 - 1;
+
+ if (animNum > 4)
+ animNum = 4;
+
+ StartSpriteAffineAnim(sprite, animNum);
+ InitAnimSpritePos(sprite, 1);
+
+ sprite->data[0] = gBattleAnimArgs[4];
+
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
+ sprite->data[5] = gBattleAnimArgs[5];
+
+ InitAnimArcTranslation(sprite);
+
+ sprite->callback = AnimThrowIceBall;
+}
+
+// Throws the ball of ice in Ice Ball.
+static void AnimThrowIceBall(struct Sprite *sprite)
+{
+ if (!TranslateAnimArc(sprite))
+ return;
+
+ StartSpriteAnim(sprite, 1);
+ sprite->callback = sub_8078600;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+}
+
+// Initializes the particles that scatter at the end of the Ice Ball animation.
+static void InitIceBallParticle(struct Sprite *sprite)
+{
+ s16 randA, randB;
+
+ sprite->oam.tileNum += 8;
+ sub_8078764(sprite, 1);
+
+ randA = (Random() & 0xFF) + 256;
+ randB = Random() & 0x1FF;
+
+ if (randB > 0xFF)
+ randB = 256 - randB;
+
+ sprite->data[1] = randA;
+ sprite->data[2] = randB;
+ sprite->callback = AnimIceBallParticle;
+}
+
+// Animates the particles created by InitIceBallParticle.
+static void AnimIceBallParticle(struct Sprite *sprite)
+{
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+
+ if (sprite->data[1] & 1)
+ sprite->pos2.x = -(sprite->data[3] >> 8);
+ else
+ sprite->pos2.x = sprite->data[3] >> 8;
+
+ sprite->pos2.y = sprite->data[4] >> 8;
+
+ if (++sprite->data[0] == 21)
+ DestroyAnimSprite(sprite);
+}
+
+// Counter for Ice Ball.
+void AnimTask_CountIceBallThrows(u8 taskId)
+{
+ u8 arg = gBattleAnimArgs[0];
+
+ gBattleAnimArgs[arg] = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1 - 1;
+ DestroyAnimVisualTask(taskId);
+}