summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfieldy101 <fieldy101@gmail.com>2020-04-22 22:29:35 +1000
committerfieldy101 <fieldy101@gmail.com>2020-04-22 23:30:44 +1000
commit9634b58d7ae9acb42c1cad41553a1806879d47cf (patch)
treeb476adc421013dc2ed420db9345aadac1e854a4e
parentcdc705f7e36436924b4ce5f7815983a862c52873 (diff)
Port emerald water functions into firered
-rw-r--r--asm/water.s3775
-rw-r--r--data/battle_anim_effects_misc.s210
-rw-r--r--data/battle_anim_scripts.s256
-rw-r--r--graphics/battle_anims/backgrounds/water_contest.bin (renamed from graphics/unknown/unknown_E822B8.bin)0
-rw-r--r--graphics/battle_anims/backgrounds/water_opponent.bin (renamed from graphics/unknown/unknown_E81D14.bin)bin4096 -> 4096 bytes
-rw-r--r--graphics/battle_anims/backgrounds/water_player.bin (renamed from graphics/unknown/unknown_E81FE4.bin)0
-rw-r--r--include/battle_anim.h16
-rw-r--r--include/graphics.h6
-rw-r--r--include/random.h2
-rw-r--r--src/battle_anim_mons.c2
-rw-r--r--src/battle_anim_status_effects.c2
-rw-r--r--src/fire.c2
-rw-r--r--src/graphics.c14
-rw-r--r--src/ground.c2
-rw-r--r--src/ice.c4
-rw-r--r--src/normal.c2
-rw-r--r--src/poison.c6
-rw-r--r--src/rock.c4
-rw-r--r--src/water.c2225
19 files changed, 2391 insertions, 4137 deletions
diff --git a/asm/water.s b/asm/water.s
deleted file mode 100644
index 89fcfa3c8..000000000
--- a/asm/water.s
+++ /dev/null
@@ -1,3775 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80AABC0
-sub_80AABC0: @ 80AABC0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r6, r0, 0
- ldr r1, _080AAC48 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r5, r0, r1
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080AABE8
- ldr r1, _080AAC4C @ =gBattleAnimArgs
- ldrh r0, [r1]
- strh r0, [r5, 0xA]
- ldrh r0, [r1, 0x2]
- strh r0, [r5, 0xC]
- ldrh r0, [r1, 0x4]
- strh r0, [r5, 0xE]
-_080AABE8:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r2, 0x8
- ldrsh r0, [r5, r2]
- movs r2, 0xC
- ldrsh r1, [r5, r2]
- bl __modsi3
- cmp r0, 0x1
- bne _080AAC30
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF0
- bl __umodsi3
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x50
- bl __umodsi3
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- ldr r0, _080AAC50 @ =gUnknown_83E5898
- adds r1, r4, 0
- movs r3, 0x4
- bl CreateSprite
-_080AAC30:
- movs r0, 0x8
- ldrsh r1, [r5, r0]
- movs r2, 0xE
- ldrsh r0, [r5, r2]
- cmp r1, r0
- bne _080AAC42
- adds r0, r6, 0
- bl DestroyAnimVisualTask
-_080AAC42:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AAC48: .4byte gTasks
-_080AAC4C: .4byte gBattleAnimArgs
-_080AAC50: .4byte gUnknown_83E5898
- thumb_func_end sub_80AABC0
-
- thumb_func_start sub_80AAC54
-sub_80AAC54: @ 80AAC54
- ldr r1, _080AAC5C @ =sub_80AAC60
- str r1, [r0, 0x1C]
- bx lr
- .align 2, 0
-_080AAC5C: .4byte sub_80AAC60
- thumb_func_end sub_80AAC54
-
- thumb_func_start sub_80AAC60
-sub_80AAC60: @ 80AAC60
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xD
- bgt _080AAC7E
- ldrh r0, [r2, 0x24]
- adds r0, 0x1
- strh r0, [r2, 0x24]
- ldrh r0, [r2, 0x26]
- adds r0, 0x4
- strh r0, [r2, 0x26]
-_080AAC7E:
- adds r0, r2, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080AAC92
- adds r0, r2, 0
- bl DestroySprite
-_080AAC92:
- pop {r0}
- bx r0
- thumb_func_end sub_80AAC60
-
- thumb_func_start sub_80AAC98
-sub_80AAC98: @ 80AAC98
- push {r4-r6,lr}
- adds r6, r0, 0
- ldr r5, _080AACC0 @ =gBattleAnimAttacker
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AACC8
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _080AACC4 @ =gBattleAnimArgs
- ldrh r1, [r4]
- subs r0, r1
- b _080AACDA
- .align 2, 0
-_080AACC0: .4byte gBattleAnimAttacker
-_080AACC4: .4byte gBattleAnimArgs
-_080AACC8:
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- ldr r4, _080AADA0 @ =gBattleAnimArgs
- lsrs r0, 24
- ldrh r1, [r4]
- adds r0, r1
-_080AACDA:
- strh r0, [r6, 0x20]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r4, [r4, 0x2]
- adds r0, r4
- strh r0, [r6, 0x22]
- adds r2, r6, 0
- adds r2, 0x2C
- ldrb r0, [r2]
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _080AADA4 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AAD10
- ldr r1, _080AADA0 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- negs r0, r0
- strh r0, [r1, 0x4]
-_080AAD10:
- ldr r5, _080AADA0 @ =gBattleAnimArgs
- ldrh r0, [r5, 0xC]
- strh r0, [r6, 0x2E]
- ldrh r0, [r6, 0x20]
- strh r0, [r6, 0x30]
- ldr r4, _080AADA8 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0x32]
- ldrh r0, [r6, 0x22]
- strh r0, [r6, 0x34]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0x36]
- adds r0, r6, 0
- bl InitAnimLinearTranslation
- ldr r0, _080AADAC @ =SpriteCallbackDummy
- bl CreateInvisibleSpriteWithCallback
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- strh r4, [r6, 0x38]
- ldrb r0, [r5, 0x8]
- movs r2, 0x4
- ldrsh r1, [r5, r2]
- bl Sin
- ldrh r1, [r6, 0x20]
- subs r1, r0
- strh r1, [r6, 0x20]
- ldrb r0, [r5, 0x8]
- movs r2, 0x6
- ldrsh r1, [r5, r2]
- bl Cos
- ldrh r1, [r6, 0x22]
- subs r1, r0
- strh r1, [r6, 0x22]
- ldr r0, _080AADB0 @ =gSprites
- lsls r1, r4, 4
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrh r0, [r5, 0x4]
- strh r0, [r1, 0x2E]
- ldrh r0, [r5, 0x6]
- strh r0, [r1, 0x30]
- ldrh r0, [r5, 0xA]
- strh r0, [r1, 0x32]
- ldrb r0, [r5, 0x8]
- lsls r0, 8
- strh r0, [r1, 0x34]
- ldrh r0, [r5, 0xC]
- strh r0, [r1, 0x36]
- ldr r1, _080AADB4 @ =sub_80AADB8
- str r1, [r6, 0x1C]
- adds r0, r6, 0
- bl _call_via_r1
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AADA0: .4byte gBattleAnimArgs
-_080AADA4: .4byte gBattleAnimAttacker
-_080AADA8: .4byte gBattleAnimTarget
-_080AADAC: .4byte SpriteCallbackDummy
-_080AADB0: .4byte gSprites
-_080AADB4: .4byte sub_80AADB8
- thumb_func_end sub_80AAC98
-
- thumb_func_start sub_80AADB8
-sub_80AADB8: @ 80AADB8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r1, [r5, 0x38]
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _080AAE20 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r7, r0, r2
- ldrh r4, [r7, 0x36]
- lsls r4, 24
- lsrs r4, 24
- ldrh r0, [r7, 0x34]
- mov r8, r0
- movs r0, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r5, 0
- bl AnimTranslateLinear
- mov r1, r8
- lsrs r6, r1, 8
- movs r0, 0x2E
- ldrsh r1, [r7, r0]
- adds r0, r6, 0
- bl Sin
- ldrh r1, [r5, 0x24]
- adds r0, r1
- strh r0, [r5, 0x24]
- movs r0, 0x30
- ldrsh r1, [r7, r0]
- adds r0, r6, 0
- bl Cos
- ldrh r1, [r5, 0x26]
- adds r0, r1
- strh r0, [r5, 0x26]
- ldrh r0, [r7, 0x32]
- mov r1, r8
- adds r1, r0
- strh r1, [r7, 0x34]
- subs r4, 0x1
- lsls r4, 24
- lsrs r4, 24
- cmp r4, 0
- beq _080AAE24
- strh r4, [r7, 0x36]
- b _080AAE2E
- .align 2, 0
-_080AAE20: .4byte gSprites
-_080AAE24:
- ldr r0, _080AAE3C @ =sub_80AAE40
- str r0, [r5, 0x1C]
- adds r0, r7, 0
- bl DestroySprite
-_080AAE2E:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AAE3C: .4byte sub_80AAE40
- thumb_func_end sub_80AADB8
-
- thumb_func_start sub_80AAE40
-sub_80AAE40: @ 80AAE40
- push {lr}
- adds r3, r0, 0
- adds r3, 0x2C
- ldrb r2, [r3]
- movs r1, 0x41
- negs r1, r1
- ands r1, r2
- strb r1, [r3]
- ldr r1, _080AAE60 @ =RunStoredCallbackWhenAnimEnds
- str r1, [r0, 0x1C]
- ldr r1, _080AAE64 @ =sub_80AAE68
- bl StoreSpriteCallbackInData6
- pop {r0}
- bx r0
- .align 2, 0
-_080AAE60: .4byte RunStoredCallbackWhenAnimEnds
-_080AAE64: .4byte sub_80AAE68
- thumb_func_end sub_80AAE40
-
- thumb_func_start sub_80AAE68
-sub_80AAE68: @ 80AAE68
- push {lr}
- movs r1, 0xA
- strh r1, [r0, 0x2E]
- ldr r1, _080AAE7C @ =WaitAnimForDuration
- str r1, [r0, 0x1C]
- ldr r1, _080AAE80 @ =DestroySpriteAndMatrix
- bl StoreSpriteCallbackInData6
- pop {r0}
- bx r0
- .align 2, 0
-_080AAE7C: .4byte WaitAnimForDuration
-_080AAE80: .4byte DestroySpriteAndMatrix
- thumb_func_end sub_80AAE68
-
- thumb_func_start sub_80AAE84
-sub_80AAE84: @ 80AAE84
- push {r4-r7,lr}
- adds r5, r0, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
- ldr r0, _080AAEAC @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AAEB4
- ldr r1, _080AAEB0 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- negs r0, r0
- lsls r0, 16
- lsrs r6, r0, 16
- adds r7, r1, 0
- b _080AAEBA
- .align 2, 0
-_080AAEAC: .4byte gBattleAnimAttacker
-_080AAEB0: .4byte gBattleAnimArgs
-_080AAEB4:
- ldr r0, _080AAF10 @ =gBattleAnimArgs
- ldrh r6, [r0, 0x4]
- adds r7, r0, 0
-_080AAEBA:
- ldrh r0, [r7, 0x8]
- strh r0, [r5, 0x2E]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x30]
- ldr r4, _080AAF14 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- adds r0, r6
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x22]
- strh r0, [r5, 0x34]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r7, [r7, 0x6]
- adds r0, r7
- strh r0, [r5, 0x36]
- adds r0, r5, 0
- bl InitAnimLinearTranslation
- ldr r0, _080AAF18 @ =sub_80AAF1C
- str r0, [r5, 0x1C]
- adds r2, r5, 0
- adds r2, 0x2C
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, [r5, 0x1C]
- adds r0, r5, 0
- bl _call_via_r1
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AAF10: .4byte gBattleAnimArgs
-_080AAF14: .4byte gBattleAnimTarget
-_080AAF18: .4byte sub_80AAF1C
- thumb_func_end sub_80AAE84
-
- thumb_func_start sub_80AAF1C
-sub_80AAF1C: @ 80AAF1C
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080AAF58 @ =gBattleAnimArgs
- ldrh r1, [r0, 0xE]
- ldr r0, _080AAF5C @ =0x0000ffff
- cmp r1, r0
- bne _080AAF3E
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
- adds r2, r4, 0
- adds r2, 0x2C
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
-_080AAF3E:
- adds r0, r4, 0
- bl AnimTranslateLinear
- lsls r0, 24
- cmp r0, 0
- beq _080AAF50
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080AAF50:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AAF58: .4byte gBattleAnimArgs
-_080AAF5C: .4byte 0x0000ffff
- thumb_func_end sub_80AAF1C
-
- thumb_func_start sub_80AAF60
-sub_80AAF60: @ 80AAF60
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080AAF94 @ =gTasks
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- adds r4, r1
- ldr r0, _080AAF98 @ =gBattleAnimArgs
- ldrh r0, [r0]
- strh r0, [r4, 0x8]
- ldr r0, _080AAF9C @ =0x0000279c
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 20
- movs r1, 0x80
- lsls r1, 1
- adds r0, r1
- strh r0, [r4, 0xC]
- ldr r0, _080AAFA0 @ =sub_80AAFA4
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AAF94: .4byte gTasks
-_080AAF98: .4byte gBattleAnimArgs
-_080AAF9C: .4byte 0x0000279c
-_080AAFA0: .4byte sub_80AAFA4
- thumb_func_end sub_80AAF60
-
- thumb_func_start sub_80AAFA4
-sub_80AAFA4: @ 80AAFA4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _080AB01C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r2, r0, r1
- ldrh r0, [r2, 0x1C]
- adds r0, 0x1
- strh r0, [r2, 0x1C]
- lsls r0, 16
- asrs r0, 16
- mov r12, r1
- cmp r0, 0x3
- bne _080AAFF6
- movs r0, 0
- strh r0, [r2, 0x1C]
- ldrh r0, [r2, 0xC]
- adds r0, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r1, _080AB020 @ =gPlttBufferFaded
- lsls r0, r5, 1
- adds r0, r1
- ldrh r6, [r0]
- adds r7, r1, 0
- adds r3, r0, 0x2
- movs r1, 0x6
- adds r2, r0, 0
-_080AAFE0:
- ldrh r0, [r3]
- strh r0, [r2]
- adds r3, 0x2
- adds r2, 0x2
- subs r1, 0x1
- cmp r1, 0
- bge _080AAFE0
- adds r0, r5, 0x7
- lsls r0, 1
- adds r0, r7
- strh r6, [r0]
-_080AAFF6:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- add r0, r12
- ldrh r1, [r0, 0x1E]
- adds r1, 0x1
- strh r1, [r0, 0x1E]
- lsls r1, 16
- asrs r1, 16
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- cmp r1, r0
- bne _080AB016
- adds r0, r4, 0
- bl DestroyAnimVisualTask
-_080AB016:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AB01C: .4byte gTasks
-_080AB020: .4byte gPlttBufferFaded
- thumb_func_end sub_80AAFA4
-
- thumb_func_start sub_80AB024
-sub_80AB024: @ 80AB024
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
- movs r0, 0x1E
- strh r0, [r5, 0x2E]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x30]
- ldr r4, _080AB08C @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x22]
- strh r0, [r5, 0x34]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x36]
- adds r0, r5, 0
- bl InitAnimLinearTranslation
- movs r0, 0x2E
- ldrsh r1, [r5, r0]
- movs r0, 0xD2
- lsls r0, 8
- bl __divsi3
- strh r0, [r5, 0x38]
- ldr r0, _080AB090 @ =gBattleAnimArgs
- ldrh r2, [r0, 0x6]
- strh r2, [r5, 0x3C]
- ldrh r1, [r0, 0xE]
- movs r3, 0xE
- ldrsh r0, [r0, r3]
- cmp r0, 0x7F
- ble _080AB094
- adds r0, r1, 0
- subs r0, 0x7F
- lsls r0, 8
- strh r0, [r5, 0x3A]
- negs r0, r2
- strh r0, [r5, 0x3C]
- b _080AB098
- .align 2, 0
-_080AB08C: .4byte gBattleAnimTarget
-_080AB090: .4byte gBattleAnimArgs
-_080AB094:
- lsls r0, r1, 8
- strh r0, [r5, 0x3A]
-_080AB098:
- ldr r1, _080AB0A8 @ =sub_80AB0AC
- str r1, [r5, 0x1C]
- adds r0, r5, 0
- bl _call_via_r1
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AB0A8: .4byte sub_80AB0AC
- thumb_func_end sub_80AB024
-
- thumb_func_start sub_80AB0AC
-sub_80AB0AC: @ 80AB0AC
- push {r4,lr}
- adds r4, r0, 0
- bl AnimTranslateLinear
- lsls r0, 24
- cmp r0, 0
- beq _080AB0C0
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080AB0C0:
- ldrh r0, [r4, 0x3A]
- lsls r0, 16
- asrs r0, 24
- movs r2, 0x3C
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
- movs r2, 0x3A
- ldrsh r0, [r4, r2]
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- adds r0, r1
- asrs r0, 8
- cmp r0, 0x7F
- ble _080AB0F0
- movs r0, 0
- strh r0, [r4, 0x3A]
- ldrh r0, [r4, 0x3C]
- negs r0, r0
- strh r0, [r4, 0x3C]
- b _080AB0F8
-_080AB0F0:
- ldrh r0, [r4, 0x38]
- ldrh r1, [r4, 0x3A]
- adds r0, r1
- strh r0, [r4, 0x3A]
-_080AB0F8:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AB0AC
-
- thumb_func_start sub_80AB100
-sub_80AB100: @ 80AB100
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080AB120 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r3, _080AB124 @ =gBattleAnimArgs
- ldrh r0, [r3]
- movs r2, 0
- strh r0, [r1, 0x8]
- strh r2, [r3, 0xE]
- ldr r0, _080AB128 @ =sub_80AB12C
- str r0, [r1]
- bx lr
- .align 2, 0
-_080AB120: .4byte gTasks
-_080AB124: .4byte gBattleAnimArgs
-_080AB128: .4byte sub_80AB12C
- thumb_func_end sub_80AB100
-
- thumb_func_start sub_80AB12C
-sub_80AB12C: @ 80AB12C
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r2, _080AB160 @ =gBattleAnimArgs
- ldrh r0, [r2, 0xE]
- adds r0, 0x3
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r2, 0xE]
- ldr r1, _080AB164 @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x8]
- subs r1, 0x1
- strh r1, [r0, 0x8]
- lsls r1, 16
- cmp r1, 0
- bne _080AB15A
- adds r0, r3, 0
- bl DestroyAnimVisualTask
-_080AB15A:
- pop {r0}
- bx r0
- .align 2, 0
-_080AB160: .4byte gBattleAnimArgs
-_080AB164: .4byte gTasks
- thumb_func_end sub_80AB12C
-
- thumb_func_start sub_80AB168
-sub_80AB168: @ 80AB168
- push {r4-r7,lr}
- adds r4, r0, 0
- ldr r7, _080AB1B4 @ =gBattleAnimAttacker
- ldrb r0, [r7]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x20]
- ldrb r0, [r7]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x22]
- ldr r6, _080AB1B8 @ =0x0000fff6
- strh r6, [r4, 0x26]
- ldrb r0, [r7]
- bl GetBattlerSpriteSubpriority
- lsls r0, 24
- lsrs r5, r0, 24
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080AB1C2
- ldrb r0, [r7]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080AB1BC
- movs r0, 0xA
- strh r0, [r4, 0x24]
- b _080AB1C4
- .align 2, 0
-_080AB1B4: .4byte gBattleAnimAttacker
-_080AB1B8: .4byte 0x0000fff6
-_080AB1BC:
- strh r6, [r4, 0x24]
- subs r0, r5, 0x2
- b _080AB1C6
-_080AB1C2:
- strh r6, [r4, 0x24]
-_080AB1C4:
- adds r0, r5, 0x2
-_080AB1C6:
- adds r1, r4, 0
- adds r1, 0x43
- strb r0, [r1]
- ldr r0, _080AB1D8 @ =sub_80AB1DC
- str r0, [r4, 0x1C]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AB1D8: .4byte sub_80AB1DC
- thumb_func_end sub_80AB168
-
- thumb_func_start sub_80AB1DC
-sub_80AB1DC: @ 80AB1DC
- push {lr}
- adds r2, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080AB1F2
- adds r0, r2, 0
- bl DestroyAnimSprite
-_080AB1F2:
- pop {r0}
- bx r0
- thumb_func_end sub_80AB1DC
-
- thumb_func_start sub_80AB1F8
-sub_80AB1F8: @ 80AB1F8
- push {r4-r7,lr}
- adds r6, r0, 0
- ldr r5, _080AB2B8 @ =gBattleAnimAttacker
- ldrb r0, [r5]
- bl GetBattlerSide
- adds r4, r0, 0
- ldr r0, _080AB2BC @ =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _080AB242
- ldr r4, _080AB2C0 @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r4, r1]
- negs r0, r0
- strh r0, [r4]
- ldrb r0, [r5]
- bl GetBattlerPosition
- lsls r0, 24
- cmp r0, 0
- beq _080AB23A
- ldrb r0, [r5]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080AB242
-_080AB23A:
- movs r1, 0
- ldrsh r0, [r4, r1]
- negs r0, r0
- strh r0, [r4]
-_080AB242:
- ldr r5, _080AB2C0 @ =gBattleAnimArgs
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- movs r1, 0xFF
- lsls r1, 8
- ands r0, r1
- movs r1, 0
- cmp r0, 0
- bne _080AB256
- movs r1, 0x1
-_080AB256:
- ldrb r0, [r5, 0xA]
- movs r7, 0x1
- cmp r0, 0
- bne _080AB260
- movs r7, 0x3
-_080AB260:
- adds r0, r6, 0
- bl InitSpritePosToAnimAttacker
- ldr r0, _080AB2B8 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AB27A
- ldrh r0, [r5, 0x4]
- negs r0, r0
- strh r0, [r5, 0x4]
-_080AB27A:
- ldrh r0, [r5, 0x8]
- strh r0, [r6, 0x2E]
- ldr r4, _080AB2BC @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x4]
- adds r0, r1
- strh r0, [r6, 0x32]
- ldrb r0, [r4]
- adds r1, r7, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r5, [r5, 0x6]
- adds r0, r5
- strh r0, [r6, 0x36]
- ldr r0, _080AB2C4 @ =StartAnimLinearTranslation
- str r0, [r6, 0x1C]
- ldr r1, _080AB2C8 @ =DestroyAnimSprite
- adds r0, r6, 0
- bl StoreSpriteCallbackInData6
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AB2B8: .4byte gBattleAnimAttacker
-_080AB2BC: .4byte gBattleAnimTarget
-_080AB2C0: .4byte gBattleAnimArgs
-_080AB2C4: .4byte StartAnimLinearTranslation
-_080AB2C8: .4byte DestroyAnimSprite
- thumb_func_end sub_80AB1F8
-
- thumb_func_start sub_80AB2CC
-sub_80AB2CC: @ 80AB2CC
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl InitSpritePosToAnimTarget
- ldr r0, _080AB2FC @ =gBattleAnimArgs
- ldrh r1, [r0, 0x8]
- strh r1, [r4, 0x2E]
- ldrh r0, [r0, 0x4]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x22]
- adds r1, r0
- strh r1, [r4, 0x36]
- ldr r0, _080AB300 @ =StartAnimLinearTranslation
- str r0, [r4, 0x1C]
- ldr r1, _080AB304 @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AB2FC: .4byte gBattleAnimArgs
-_080AB300: .4byte StartAnimLinearTranslation
-_080AB304: .4byte DestroyAnimSprite
- thumb_func_end sub_80AB2CC
-
- thumb_func_start sub_80AB308
-sub_80AB308: @ 80AB308
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080AB320 @ =gBattleAnimArgs
- movs r1, 0x6
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _080AB324
- adds r0, r4, 0
- movs r1, 0x1
- bl InitSpritePosToAnimTarget
- b _080AB32C
- .align 2, 0
-_080AB320: .4byte gBattleAnimArgs
-_080AB324:
- adds r0, r4, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
-_080AB32C:
- ldr r0, _080AB33C @ =gBattleAnimArgs
- ldrh r0, [r0, 0x4]
- strh r0, [r4, 0x3C]
- ldr r0, _080AB340 @ =sub_80AB344
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AB33C: .4byte gBattleAnimArgs
-_080AB340: .4byte sub_80AB344
- thumb_func_end sub_80AB308
-
- thumb_func_start sub_80AB344
-sub_80AB344: @ 80AB344
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0xB
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x2E]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- movs r1, 0x4
- bl Sin
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x30]
- adds r0, 0x30
- strh r0, [r4, 0x30]
- lsls r0, 16
- asrs r0, 24
- negs r0, r0
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3C]
- subs r0, 0x1
- strh r0, [r4, 0x3C]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _080AB384
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080AB384:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AB344
-
- thumb_func_start sub_80AB38C
-sub_80AB38C: @ 80AB38C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r1, _080AB3FC @ =0x00003f42
- movs r0, 0x50
- bl SetGpuReg
- movs r1, 0x80
- lsls r1, 5
- movs r0, 0x52
- bl SetGpuReg
- movs r0, 0x1
- movs r1, 0x4
- movs r2, 0x1
- bl SetAnimBgAttribute
- movs r0, 0x1
- movs r1, 0
- movs r2, 0x1
- bl SetAnimBgAttribute
- mov r0, sp
- bl sub_80752A0
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080AB418
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0x1
- bl SetAnimBgAttribute
- ldr r0, _080AB400 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080AB408
- mov r0, sp
- ldrb r0, [r0, 0x9]
- ldr r1, _080AB404 @ =gFile_graphics_unknown_unknown_E81D14_tilemap
- bl AnimLoadCompressedBgTilemap
- b _080AB42E
- .align 2, 0
-_080AB3FC: .4byte 0x00003f42
-_080AB400: .4byte gBattleAnimAttacker
-_080AB404: .4byte gFile_graphics_unknown_unknown_E81D14_tilemap
-_080AB408:
- mov r0, sp
- ldrb r0, [r0, 0x9]
- ldr r1, _080AB414 @ =gFile_graphics_unknown_unknown_E81FE4_tilemap
- bl AnimLoadCompressedBgTilemap
- b _080AB42E
- .align 2, 0
-_080AB414: .4byte gFile_graphics_unknown_unknown_E81FE4_tilemap
-_080AB418:
- ldr r0, _080AB458 @ =gFile_graphics_unknown_unknown_E822B8_tilemap
- ldr r1, [sp, 0x4]
- bl LZDecompressVram
- mov r0, sp
- ldrb r0, [r0, 0x8]
- ldr r1, [sp, 0x4]
- movs r2, 0
- movs r3, 0x1
- bl sub_80730C0
-_080AB42E:
- mov r0, sp
- ldrb r0, [r0, 0x9]
- ldr r1, _080AB45C @ =gFile_graphics_battle_anims_backgrounds_water_sheet
- mov r2, sp
- ldrh r2, [r2, 0xA]
- bl AnimLoadCompressedBgGfx
- ldr r0, _080AB460 @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080AB468
- ldr r0, _080AB464 @ =gFile_graphics_battle_anims_backgrounds_water_palette
- mov r1, sp
- ldrb r1, [r1, 0x8]
- lsls r1, 4
- movs r2, 0x20
- bl LoadCompressedPalette
- b _080AB476
- .align 2, 0
-_080AB458: .4byte gFile_graphics_unknown_unknown_E822B8_tilemap
-_080AB45C: .4byte gFile_graphics_battle_anims_backgrounds_water_sheet
-_080AB460: .4byte gBattleAnimArgs
-_080AB464: .4byte gFile_graphics_battle_anims_backgrounds_water_palette
-_080AB468:
- ldr r0, _080AB4E0 @ =gFile_graphics_battle_anims_backgrounds_water_muddy_palette
- mov r1, sp
- ldrb r1, [r1, 0x8]
- lsls r1, 4
- movs r2, 0x20
- bl LoadCompressedPalette
-_080AB476:
- ldr r0, _080AB4E4 @ =sub_80AB79C
- ldr r4, _080AB4E8 @ =gTasks
- mov r2, r10
- lsls r5, r2, 2
- adds r1, r5, r2
- lsls r1, 3
- adds r6, r1, r4
- ldrb r1, [r6, 0x7]
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r0, 0
- mov r9, r0
- mov r1, r8
- strh r1, [r6, 0x26]
- mov r2, r8
- lsls r0, r2, 2
- add r0, r8
- lsls r0, 3
- adds r7, r0, r4
- mov r0, r9
- strh r0, [r7, 0x8]
- movs r0, 0x80
- lsls r0, 5
- strh r0, [r7, 0xA]
- strh r0, [r7, 0xC]
- bl IsContest
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080AB4F8
- ldr r1, _080AB4EC @ =0x0000ffb0
- adds r0, r1, 0
- ldr r2, _080AB4F0 @ =gBattle_BG1_X
- strh r0, [r2]
- adds r1, 0x20
- adds r0, r1, 0
- ldr r2, _080AB4F4 @ =gBattle_BG1_Y
- strh r0, [r2]
- movs r0, 0x2
- strh r0, [r6, 0x8]
- movs r0, 0x1
- strh r0, [r6, 0xA]
- mov r0, r9
- strh r0, [r7, 0xE]
- b _080AB552
- .align 2, 0
-_080AB4E0: .4byte gFile_graphics_battle_anims_backgrounds_water_muddy_palette
-_080AB4E4: .4byte sub_80AB79C
-_080AB4E8: .4byte gTasks
-_080AB4EC: .4byte 0x0000ffb0
-_080AB4F0: .4byte gBattle_BG1_X
-_080AB4F4: .4byte gBattle_BG1_Y
-_080AB4F8:
- ldr r0, _080AB528 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x1
- bne _080AB53C
- ldr r2, _080AB52C @ =0x0000ff20
- adds r0, r2, 0
- ldr r2, _080AB530 @ =gBattle_BG1_X
- strh r0, [r2]
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- ldr r2, _080AB534 @ =gBattle_BG1_Y
- strh r0, [r2]
- movs r0, 0x2
- strh r0, [r6, 0x8]
- ldr r0, _080AB538 @ =0x0000ffff
- strh r0, [r6, 0xA]
- strh r1, [r7, 0xE]
- b _080AB552
- .align 2, 0
-_080AB528: .4byte gBattleAnimAttacker
-_080AB52C: .4byte 0x0000ff20
-_080AB530: .4byte gBattle_BG1_X
-_080AB534: .4byte gBattle_BG1_Y
-_080AB538: .4byte 0x0000ffff
-_080AB53C:
- ldr r0, _080AB584 @ =gBattle_BG1_X
- strh r4, [r0]
- ldr r1, _080AB588 @ =0x0000ffd0
- adds r0, r1, 0
- ldr r2, _080AB58C @ =gBattle_BG1_Y
- strh r0, [r2]
- ldr r0, _080AB590 @ =0x0000fffe
- strh r0, [r6, 0x8]
- movs r0, 0x1
- strh r0, [r6, 0xA]
- strh r4, [r7, 0xE]
-_080AB552:
- ldr r0, _080AB584 @ =gBattle_BG1_X
- ldrh r1, [r0]
- movs r0, 0x14
- bl SetGpuReg
- ldr r2, _080AB58C @ =gBattle_BG1_Y
- ldrh r1, [r2]
- movs r0, 0x16
- bl SetGpuReg
- ldr r1, _080AB594 @ =gTasks
- mov r2, r8
- lsls r0, r2, 2
- add r0, r8
- lsls r0, 3
- adds r1, r0, r1
- movs r2, 0xE
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _080AB598
- movs r0, 0x30
- strh r0, [r1, 0x10]
- movs r0, 0x70
- b _080AB59C
- .align 2, 0
-_080AB584: .4byte gBattle_BG1_X
-_080AB588: .4byte 0x0000ffd0
-_080AB58C: .4byte gBattle_BG1_Y
-_080AB590: .4byte 0x0000fffe
-_080AB594: .4byte gTasks
-_080AB598:
- movs r0, 0
- strh r0, [r1, 0x10]
-_080AB59C:
- strh r0, [r1, 0x12]
- ldr r1, _080AB5C0 @ =gTasks
- mov r2, r10
- adds r0, r5, r2
- lsls r0, 3
- adds r0, r1
- movs r1, 0x1
- strh r1, [r0, 0x14]
- ldr r1, _080AB5C4 @ =sub_80AB5C8
- str r1, [r0]
- 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
-_080AB5C0: .4byte gTasks
-_080AB5C4: .4byte sub_80AB5C8
- thumb_func_end sub_80AB38C
-
- thumb_func_start sub_80AB5C8
-sub_80AB5C8: @ 80AB5C8
- push {r4-r7,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080AB6F4 @ =gBattle_BG1_X
- ldr r2, _080AB6F8 @ =gBattle_BG1_Y
- ldr r0, _080AB6FC @ =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- ldrh r0, [r4, 0x8]
- ldrh r3, [r1]
- adds r0, r3
- strh r0, [r1]
- ldrh r0, [r4, 0xA]
- ldrh r1, [r2]
- adds r0, r1
- strh r0, [r2]
- mov r0, sp
- bl sub_80752A0
- ldrh r0, [r4, 0xA]
- ldrh r3, [r4, 0xC]
- adds r0, r3
- strh r0, [r4, 0xC]
- ldrh r0, [r4, 0x12]
- adds r0, 0x1
- strh r0, [r4, 0x12]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bne _080AB65C
- ldr r1, _080AB700 @ =gPlttBufferFaded
- mov r0, sp
- ldrb r0, [r0, 0x8]
- lsls r0, 4
- adds r0, 0x7
- lsls r0, 1
- adds r0, r1
- ldrh r6, [r0]
- movs r2, 0x6
- adds r7, r1, 0
- adds r3, r7, 0
- mov r4, sp
-_080AB622:
- ldrb r0, [r4, 0x8]
- lsls r0, 4
- adds r1, r2, 0x1
- adds r0, r1
- lsls r1, r0, 1
- adds r1, r3
- subs r0, 0x1
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- strh r0, [r1]
- subs r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- bne _080AB622
- mov r0, sp
- ldrb r0, [r0, 0x8]
- lsls r0, 4
- adds r0, 0x1
- lsls r0, 1
- adds r0, r7
- strh r6, [r0]
- ldr r1, _080AB6FC @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- strh r2, [r0, 0x12]
-_080AB65C:
- ldr r1, _080AB6FC @ =gTasks
- lsls r2, r5, 2
- adds r0, r2, r5
- lsls r0, 3
- adds r3, r0, r1
- ldrh r0, [r3, 0x14]
- adds r0, 0x1
- strh r0, [r3, 0x14]
- lsls r0, 16
- asrs r0, 16
- adds r4, r1, 0
- adds r6, r2, 0
- cmp r0, 0x1
- ble _080AB6CA
- movs r0, 0
- strh r0, [r3, 0x14]
- ldrh r0, [r3, 0xE]
- adds r2, r0, 0x1
- strh r2, [r3, 0xE]
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0xD
- bgt _080AB6A6
- movs r1, 0x26
- ldrsh r0, [r3, r1]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- movs r0, 0x10
- subs r0, r2
- lsls r0, 8
- orrs r2, r0
- strh r2, [r1, 0xA]
- ldrh r0, [r3, 0x10]
- adds r0, 0x1
- strh r0, [r3, 0x10]
-_080AB6A6:
- movs r1, 0xE
- ldrsh r0, [r3, r1]
- cmp r0, 0x36
- ble _080AB6CA
- ldrh r2, [r3, 0x10]
- subs r2, 0x1
- strh r2, [r3, 0x10]
- movs r1, 0x26
- ldrsh r0, [r3, r1]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- movs r0, 0x10
- subs r0, r2
- lsls r0, 8
- orrs r2, r0
- strh r2, [r1, 0xA]
-_080AB6CA:
- adds r0, r6, r5
- lsls r0, 3
- adds r2, r0, r4
- movs r3, 0x26
- ldrsh r1, [r2, r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- ldrh r0, [r0, 0xA]
- movs r3, 0x1F
- ands r3, r0
- cmp r3, 0
- bne _080AB6EC
- strh r3, [r2, 0x8]
- ldr r0, _080AB704 @ =sub_80AB708
- str r0, [r2]
-_080AB6EC:
- add sp, 0x10
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AB6F4: .4byte gBattle_BG1_X
-_080AB6F8: .4byte gBattle_BG1_Y
-_080AB6FC: .4byte gTasks
-_080AB700: .4byte gPlttBufferFaded
-_080AB704: .4byte sub_80AB708
- thumb_func_end sub_80AB5C8
-
- thumb_func_start sub_80AB708
-sub_80AB708: @ 80AB708
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- ldr r7, _080AB740 @ =gBattle_BG1_X
- ldr r0, _080AB744 @ =gBattle_BG1_Y
- mov r8, r0
- ldr r6, _080AB748 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r6
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080AB74C
- movs r0, 0x1
- bl sub_8075358
- movs r0, 0x2
- bl sub_8075358
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080AB78E
- .align 2, 0
-_080AB740: .4byte gBattle_BG1_X
-_080AB744: .4byte gBattle_BG1_Y
-_080AB748: .4byte gTasks
-_080AB74C:
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080AB760
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0
- bl SetAnimBgAttribute
-_080AB760:
- movs r0, 0
- strh r0, [r7]
- mov r1, r8
- strh r0, [r1]
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- ldr r1, _080AB798 @ =0x0000ffff
- strh r1, [r0, 0x26]
- adds r0, r5, 0
- bl DestroyAnimVisualTask
-_080AB78E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AB798: .4byte 0x0000ffff
- thumb_func_end sub_80AB708
-
- thumb_func_start sub_80AB79C
-sub_80AB79C: @ 80AB79C
- push {r4-r7,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- ldr r1, _080AB7C4 @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- bne _080AB7B8
- b _080AB8F0
-_080AB7B8:
- cmp r0, 0x1
- bgt _080AB7C8
- cmp r0, 0
- beq _080AB7D0
- b _080ABA66
- .align 2, 0
-_080AB7C4: .4byte gTasks
-_080AB7C8:
- cmp r0, 0x2
- bne _080AB7CE
- b _080AB9BC
-_080AB7CE:
- b _080ABA66
-_080AB7D0:
- movs r3, 0
- movs r2, 0x10
- ldrsh r0, [r4, r2]
- ldr r1, _080AB8A0 @ =gScanlineEffectRegBuffers
- mov r12, r1
- cmp r3, r0
- bge _080AB80E
- mov r7, r12
- movs r5, 0xF0
- lsls r5, 3
- add r5, r12
- ldr r6, _080AB8A4 @ =0x0000ffff
-_080AB7E8:
- lsls r2, r3, 16
- asrs r2, 16
- lsls r1, r2, 1
- adds r3, r1, r7
- adds r1, r5
- ldrh r0, [r4, 0xC]
- strh r0, [r1]
- ldrh r1, [r4, 0xC]
- adds r0, r6, 0
- ands r0, r1
- strh r0, [r3]
- adds r2, 0x1
- lsls r2, 16
- lsrs r3, r2, 16
- asrs r2, 16
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- cmp r2, r0
- blt _080AB7E8
-_080AB80E:
- ldrh r3, [r4, 0x10]
- lsls r2, r3, 16
- asrs r1, r2, 16
- movs r3, 0x12
- ldrsh r0, [r4, r3]
- cmp r1, r0
- bge _080AB848
- ldr r5, _080AB8A0 @ =gScanlineEffectRegBuffers
- movs r0, 0xF0
- lsls r0, 3
- adds r6, r5, r0
- ldr r7, _080AB8A4 @ =0x0000ffff
-_080AB826:
- asrs r2, 16
- lsls r1, r2, 1
- adds r3, r1, r5
- adds r1, r6
- ldrh r0, [r4, 0xA]
- strh r0, [r1]
- ldrh r1, [r4, 0xA]
- adds r0, r7, 0
- ands r0, r1
- strh r0, [r3]
- adds r2, 0x1
- lsls r2, 16
- asrs r1, r2, 16
- movs r3, 0x12
- ldrsh r0, [r4, r3]
- cmp r1, r0
- blt _080AB826
-_080AB848:
- ldrh r3, [r4, 0x12]
- lsls r2, r3, 16
- asrs r0, r2, 16
- cmp r0, 0x9F
- bgt _080AB87E
- ldr r5, _080AB8A0 @ =gScanlineEffectRegBuffers
- movs r0, 0xF0
- lsls r0, 3
- adds r6, r5, r0
- ldr r7, _080AB8A4 @ =0x0000ffff
-_080AB85C:
- asrs r2, 16
- lsls r1, r2, 1
- adds r3, r1, r5
- adds r1, r6
- ldrh r0, [r4, 0xC]
- strh r0, [r1]
- ldrh r1, [r4, 0xC]
- adds r0, r7, 0
- ands r0, r1
- strh r0, [r3]
- adds r2, 0x1
- lsls r2, 16
- lsrs r3, r2, 16
- lsls r2, r3, 16
- asrs r0, r2, 16
- cmp r0, 0x9F
- ble _080AB85C
-_080AB87E:
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080AB8A8
- lsls r0, r3, 16
- asrs r0, 15
- mov r3, r12
- adds r2, r0, r3
- movs r1, 0xF0
- lsls r1, 3
- add r1, r12
- adds r0, r1
- ldrh r1, [r4, 0xA]
- strh r1, [r0]
- ldrh r0, [r4, 0xA]
- b _080AB8BE
- .align 2, 0
-_080AB8A0: .4byte gScanlineEffectRegBuffers
-_080AB8A4: .4byte 0x0000ffff
-_080AB8A8:
- lsls r0, r3, 16
- asrs r0, 15
- mov r1, r12
- adds r2, r0, r1
- movs r1, 0xF0
- lsls r1, 3
- add r1, r12
- adds r0, r1
- ldrh r1, [r4, 0xC]
- strh r1, [r0]
- ldrh r0, [r4, 0xC]
-_080AB8BE:
- strh r0, [r2]
- ldr r0, _080AB8E8 @ =0x04000052
- str r0, [sp]
- ldr r0, _080AB8EC @ =0xa2600001
- str r0, [sp, 0x4]
- mov r1, sp
- movs r2, 0
- movs r0, 0x1
- strb r0, [r1, 0x8]
- mov r0, sp
- strb r2, [r0, 0x9]
- ldr r0, [sp]
- ldr r1, [sp, 0x4]
- ldr r2, [sp, 0x8]
- bl ScanlineEffect_SetParams
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080ABA66
- .align 2, 0
-_080AB8E8: .4byte 0x04000052
-_080AB8EC: .4byte 0xa2600001
-_080AB8F0:
- movs r2, 0xE
- ldrsh r1, [r4, r2]
- cmp r1, 0
- bne _080AB908
- ldrh r0, [r4, 0x10]
- subs r0, 0x1
- strh r0, [r4, 0x10]
- lsls r0, 16
- cmp r0, 0
- bgt _080AB91C
- strh r1, [r4, 0x10]
- b _080AB916
-_080AB908:
- ldrh r0, [r4, 0x12]
- adds r0, 0x1
- strh r0, [r4, 0x12]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x6F
- ble _080AB91C
-_080AB916:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080AB91C:
- movs r3, 0
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- cmp r3, r0
- bge _080AB950
- ldr r6, _080AB9B4 @ =gScanlineEffectRegBuffers
- ldr r5, _080AB9B8 @ =gScanlineEffect
-_080AB92A:
- lsls r1, r3, 16
- asrs r1, 16
- lsls r3, r1, 1
- ldrb r2, [r5, 0x14]
- lsls r0, r2, 4
- subs r0, r2
- lsls r0, 7
- adds r3, r0
- adds r3, r6
- ldrh r0, [r4, 0xC]
- strh r0, [r3]
- adds r1, 0x1
- lsls r1, 16
- lsrs r3, r1, 16
- asrs r1, 16
- movs r2, 0x10
- ldrsh r0, [r4, r2]
- cmp r1, r0
- blt _080AB92A
-_080AB950:
- ldrh r3, [r4, 0x10]
- lsls r2, r3, 16
- asrs r1, r2, 16
- movs r3, 0x12
- ldrsh r0, [r4, r3]
- cmp r1, r0
- bge _080AB984
- ldr r6, _080AB9B4 @ =gScanlineEffectRegBuffers
- ldr r5, _080AB9B8 @ =gScanlineEffect
-_080AB962:
- asrs r3, r2, 16
- lsls r2, r3, 1
- ldrb r1, [r5, 0x14]
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 7
- adds r2, r0
- adds r2, r6
- ldrh r0, [r4, 0xA]
- strh r0, [r2]
- adds r3, 0x1
- lsls r2, r3, 16
- asrs r1, r2, 16
- movs r3, 0x12
- ldrsh r0, [r4, r3]
- cmp r1, r0
- blt _080AB962
-_080AB984:
- ldrh r3, [r4, 0x12]
- lsls r1, r3, 16
- asrs r0, r1, 16
- cmp r0, 0x9F
- bgt _080ABA66
- ldr r6, _080AB9B4 @ =gScanlineEffectRegBuffers
- ldr r5, _080AB9B8 @ =gScanlineEffect
-_080AB992:
- asrs r3, r1, 16
- lsls r2, r3, 1
- ldrb r1, [r5, 0x14]
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 7
- adds r2, r0
- adds r2, r6
- ldrh r0, [r4, 0xC]
- strh r0, [r2]
- adds r3, 0x1
- lsls r1, r3, 16
- asrs r0, r1, 16
- cmp r0, 0x9F
- ble _080AB992
- b _080ABA66
- .align 2, 0
-_080AB9B4: .4byte gScanlineEffectRegBuffers
-_080AB9B8: .4byte gScanlineEffect
-_080AB9BC:
- movs r3, 0
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- cmp r3, r0
- bge _080AB9F0
- ldr r6, _080ABA70 @ =gScanlineEffectRegBuffers
- ldr r5, _080ABA74 @ =gScanlineEffect
-_080AB9CA:
- lsls r1, r3, 16
- asrs r1, 16
- lsls r3, r1, 1
- ldrb r2, [r5, 0x14]
- lsls r0, r2, 4
- subs r0, r2
- lsls r0, 7
- adds r3, r0
- adds r3, r6
- ldrh r0, [r4, 0xC]
- strh r0, [r3]
- adds r1, 0x1
- lsls r1, 16
- lsrs r3, r1, 16
- asrs r1, 16
- movs r2, 0x10
- ldrsh r0, [r4, r2]
- cmp r1, r0
- blt _080AB9CA
-_080AB9F0:
- ldrh r3, [r4, 0x10]
- lsls r2, r3, 16
- asrs r1, r2, 16
- movs r3, 0x12
- ldrsh r0, [r4, r3]
- cmp r1, r0
- bge _080ABA24
- ldr r6, _080ABA70 @ =gScanlineEffectRegBuffers
- ldr r5, _080ABA74 @ =gScanlineEffect
-_080ABA02:
- asrs r3, r2, 16
- lsls r2, r3, 1
- ldrb r1, [r5, 0x14]
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 7
- adds r2, r0
- adds r2, r6
- ldrh r0, [r4, 0xA]
- strh r0, [r2]
- adds r3, 0x1
- lsls r2, r3, 16
- asrs r1, r2, 16
- movs r3, 0x12
- ldrsh r0, [r4, r3]
- cmp r1, r0
- blt _080ABA02
-_080ABA24:
- ldrh r3, [r4, 0x12]
- lsls r1, r3, 16
- asrs r0, r1, 16
- cmp r0, 0x9F
- bgt _080ABA50
- ldr r6, _080ABA70 @ =gScanlineEffectRegBuffers
- ldr r5, _080ABA74 @ =gScanlineEffect
-_080ABA32:
- asrs r3, r1, 16
- lsls r2, r3, 1
- ldrb r1, [r5, 0x14]
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 7
- adds r2, r0
- adds r2, r6
- ldrh r0, [r4, 0xC]
- strh r0, [r2]
- adds r3, 0x1
- lsls r1, r3, 16
- asrs r0, r1, 16
- cmp r0, 0x9F
- ble _080ABA32
-_080ABA50:
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _080ABA66
- bl ScanlineEffect_Stop
- adds r0, r7, 0
- bl DestroyTask
-_080ABA66:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080ABA70: .4byte gScanlineEffectRegBuffers
-_080ABA74: .4byte gScanlineEffect
- thumb_func_end sub_80AB79C
-
- thumb_func_start sub_80ABA78
-sub_80ABA78: @ 80ABA78
- push {r4-r6,lr}
- adds r4, r0, 0
- ldrh r2, [r4, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- adds r1, 0x8
- ldr r3, _080ABACC @ =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldr r0, _080ABAD0 @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r4, 0x4]
- adds r0, r4, 0
- movs r1, 0x1
- bl InitSpritePosToAnimTarget
- 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, _080ABAD4 @ =0x000001ff
- ands r1, r0
- adds r0, r1, 0
- cmp r0, 0xFF
- ble _080ABABE
- subs r0, r6, r0
- lsls r0, 16
- lsrs r1, r0, 16
-_080ABABE:
- strh r5, [r4, 0x30]
- strh r1, [r4, 0x32]
- ldr r0, _080ABAD8 @ =sub_80ABADC
- str r0, [r4, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080ABACC: .4byte 0x000003ff
-_080ABAD0: .4byte 0xfffffc00
-_080ABAD4: .4byte 0x000001ff
-_080ABAD8: .4byte sub_80ABADC
- thumb_func_end sub_80ABA78
-
- thumb_func_start sub_80ABADC
-sub_80ABADC: @ 80ABADC
- 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 _080ABB00
- lsls r0, r3, 16
- asrs r0, 24
- negs r0, r0
- b _080ABB04
-_080ABB00:
- lsls r0, r3, 16
- asrs r0, 24
-_080ABB04:
- 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 _080ABB22
- adds r0, r2, 0
- bl DestroyAnimSprite
-_080ABB22:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80ABADC
-
- thumb_func_start sub_80ABB28
-sub_80ABB28: @ 80ABB28
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, _080ABB78 @ =gTasks
- adds r4, r0
- movs r0, 0
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x26]
- ldr r2, _080ABB7C @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r0, [r0, 0x22]
- strh r0, [r4, 0x12]
- bl sub_80ABDC8
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0x26]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl PrepareBattlerSpriteForRotScale
- ldr r0, _080ABB80 @ =sub_80ABB84
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080ABB78: .4byte gTasks
-_080ABB7C: .4byte gSprites
-_080ABB80: .4byte sub_80ABB84
- thumb_func_end sub_80ABB28
-
- thumb_func_start sub_80ABB84
-sub_80ABB84: @ 80ABB84
- push {r4-r6,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _080ABBAC @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x7
- bls _080ABBA0
- b _080ABDBE
-_080ABBA0:
- lsls r0, 2
- ldr r1, _080ABBB0 @ =_080ABBB4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080ABBAC: .4byte gTasks
-_080ABBB0: .4byte _080ABBB4
- .align 2, 0
-_080ABBB4:
- .4byte _080ABBD4
- .4byte _080ABBFA
- .4byte _080ABC8C
- .4byte _080ABCC2
- .4byte _080ABCD6
- .4byte _080ABCE4
- .4byte _080ABD64
- .4byte _080ABDB0
-_080ABBD4:
- ldrh r1, [r4, 0x26]
- lsls r1, 24
- lsrs r1, 24
- movs r3, 0x80
- lsls r3, 1
- movs r0, 0xE0
- str r0, [sp]
- movs r0, 0x80
- lsls r0, 2
- str r0, [sp, 0x4]
- movs r0, 0x20
- str r0, [sp, 0x8]
- adds r0, r4, 0
- adds r2, r3, 0
- bl sub_80765D4
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080ABBFA:
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080ABC56
- movs r0, 0
- strh r0, [r4, 0xE]
- ldrh r0, [r4, 0x10]
- adds r0, 0x1
- strh r0, [r4, 0x10]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080ABC44
- ldr r2, _080ABC40 @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strh r1, [r0, 0x24]
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x22]
- adds r1, 0x1
- strh r1, [r0, 0x22]
- b _080ABC56
- .align 2, 0
-_080ABC40: .4byte gSprites
-_080ABC44:
- ldr r2, _080ABC84 @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _080ABC88 @ =0x0000fffd
- strh r1, [r0, 0x24]
-_080ABC56:
- adds r0, r4, 0
- bl sub_8076640
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- beq _080ABC66
- b _080ABDBE
-_080ABC66:
- ldrh r0, [r4, 0x26]
- lsls r0, 24
- lsrs r0, 24
- bl SetBattlerSpriteYOffsetFromYScale
- ldr r2, _080ABC84 @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r5, [r0, 0x24]
- strh r5, [r4, 0xE]
- b _080ABDA0
- .align 2, 0
-_080ABC84: .4byte gSprites
-_080ABC88: .4byte 0x0000fffd
-_080ABC8C:
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bgt _080ABC9C
- b _080ABDBE
-_080ABC9C:
- ldrh r1, [r4, 0x26]
- lsls r1, 24
- lsrs r1, 24
- movs r3, 0x80
- lsls r3, 2
- movs r0, 0xC0
- lsls r0, 1
- str r0, [sp]
- movs r0, 0xE0
- str r0, [sp, 0x4]
- movs r0, 0x8
- str r0, [sp, 0x8]
- adds r0, r4, 0
- movs r2, 0xE0
- bl sub_80765D4
- movs r0, 0
- strh r0, [r4, 0xE]
- b _080ABDA2
-_080ABCC2:
- adds r0, r4, 0
- bl sub_8076640
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080ABDBE
- strh r0, [r4, 0xE]
- strh r0, [r4, 0x10]
- b _080ABDA2
-_080ABCD6:
- adds r0, r4, 0
- adds r1, r2, 0
- bl sub_80ABE4C
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080ABCE4:
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080ABDBE
- movs r0, 0
- strh r0, [r4, 0xE]
- ldrh r0, [r4, 0x10]
- adds r0, 0x1
- strh r0, [r4, 0x10]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080ABD1C
- ldr r2, _080ABD18 @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x26]
- adds r1, 0x2
- b _080ABD2E
- .align 2, 0
-_080ABD18: .4byte gSprites
-_080ABD1C:
- ldr r2, _080ABD60 @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x26]
- subs r1, 0x2
-_080ABD2E:
- strh r1, [r0, 0x26]
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- cmp r0, 0xA
- bne _080ABDBE
- ldrh r1, [r4, 0x26]
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0xC0
- lsls r2, 1
- movs r0, 0x80
- lsls r0, 1
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x8
- str r0, [sp, 0x8]
- adds r0, r4, 0
- movs r3, 0xE0
- bl sub_80765D4
- movs r0, 0
- strh r0, [r4, 0xE]
- strh r0, [r4, 0x10]
- b _080ABDA2
- .align 2, 0
-_080ABD60: .4byte gSprites
-_080ABD64:
- ldr r6, _080ABDAC @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrh r1, [r0, 0x22]
- subs r1, 0x1
- strh r1, [r0, 0x22]
- adds r0, r4, 0
- bl sub_8076640
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _080ABDBE
- ldrh r0, [r4, 0x26]
- lsls r0, 24
- lsrs r0, 24
- bl ResetSpriteRotScale
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrh r1, [r4, 0x12]
- strh r1, [r0, 0x22]
-_080ABDA0:
- strh r5, [r4, 0x10]
-_080ABDA2:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080ABDBE
- .align 2, 0
-_080ABDAC: .4byte gSprites
-_080ABDB0:
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080ABDBE
- adds r0, r2, 0
- bl DestroyAnimVisualTask
-_080ABDBE:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80ABB84
-
- thumb_func_start sub_80ABDC8
-sub_80ABDC8: @ 80ABDC8
- push {r4,r5,lr}
- ldr r4, _080ABDEC @ =gBattleAnimAttacker
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080ABDFC
- ldr r1, _080ABDF0 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080ABDF4 @ =gPlayerParty
- b _080ABE0C
- .align 2, 0
-_080ABDEC: .4byte gBattleAnimAttacker
-_080ABDF0: .4byte gBattlerPartyIndexes
-_080ABDF4: .4byte gPlayerParty
-_080ABDF8:
- adds r0, r2, 0
- b _080ABE3E
-_080ABDFC:
- ldr r1, _080ABE44 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080ABE48 @ =gEnemyParty
-_080ABE0C:
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0x3A
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- adds r0, r5, 0
- movs r1, 0x39
- bl GetMonData
- lsls r0, 16
- lsrs r3, r0, 16
- lsrs r4, 18
- movs r2, 0
-_080ABE2A:
- adds r1, r2, 0x1
- adds r0, r4, 0
- muls r0, r1
- cmp r3, r0
- blt _080ABDF8
- lsls r0, r1, 24
- lsrs r2, r0, 24
- cmp r2, 0x2
- bls _080ABE2A
- movs r0, 0x3
-_080ABE3E:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080ABE44: .4byte gBattlerPartyIndexes
-_080ABE48: .4byte gEnemyParty
- thumb_func_end sub_80ABDC8
-
- thumb_func_start sub_80ABE4C
-sub_80ABE4C: @ 80ABE4C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- adds r7, r0, 0
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- ldr r4, _080ABF54 @ =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0xAC
- ldrb r0, [r4]
- bl GetBattlerSpriteSubpriority
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x8]
- ldrh r1, [r7, 0xA]
- movs r0, 0x4
- subs r0, r1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r0, 0
- bgt _080ABE9C
- movs r1, 0x1
-_080ABE9C:
- movs r0, 0
- str r0, [sp, 0x4]
- lsls r0, r1, 16
- mov r10, r8
- mov r9, r6
- mov r1, r10
- lsls r1, 4
- str r1, [sp, 0xC]
- mov r1, r9
- lsls r1, 4
- str r1, [sp, 0x10]
- asrs r0, 16
- mov r8, r0
-_080ABEB6:
- ldr r0, _080ABF58 @ =gUnknown_83E5AE0
- mov r1, r10
- mov r2, r9
- ldr r3, [sp, 0x8]
- bl CreateSprite
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r6, r5, 16
- cmp r2, 0x40
- beq _080ABF1E
- ldr r1, _080ABF5C @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r5, r0, r1
- mov r0, sp
- ldrh r0, [r0, 0x4]
- strh r0, [r5, 0x30]
- mov r1, sp
- ldrh r1, [r1, 0xC]
- strh r1, [r5, 0x32]
- mov r0, sp
- ldrh r0, [r0, 0x10]
- strh r0, [r5, 0x34]
- asrs r4, r6, 16
- adds r0, r4, 0
- movs r1, 0x40
- bl Cos
- strh r0, [r5, 0x36]
- adds r0, r4, 0
- movs r1, 0x40
- bl Sin
- strh r0, [r5, 0x38]
- mov r1, sp
- ldrh r1, [r1]
- strh r1, [r5, 0x3A]
- movs r0, 0x2
- strh r0, [r5, 0x3C]
- ldrh r1, [r7, 0xC]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080ABF18
- adds r0, r5, 0
- bl sub_80ABF60
-_080ABF18:
- ldrh r0, [r7, 0xC]
- adds r0, 0x1
- strh r0, [r7, 0xC]
-_080ABF1E:
- mov r1, r8
- lsls r0, r1, 1
- asrs r1, r6, 16
- adds r1, r0
- lsls r1, 16
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- lsrs r5, r0, 16
- ldr r1, [sp, 0x4]
- lsls r0, r1, 16
- asrs r0, 16
- add r0, r8
- lsls r0, 16
- lsrs r1, r0, 16
- str r1, [sp, 0x4]
- asrs r0, 16
- cmp r0, 0x13
- ble _080ABEB6
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080ABF54: .4byte gBattleAnimAttacker
-_080ABF58: .4byte gUnknown_83E5AE0
-_080ABF5C: .4byte gSprites
- thumb_func_end sub_80ABE4C
-
- thumb_func_start sub_80ABF60
-sub_80ABF60: @ 80ABF60
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080ABF72
- cmp r0, 0x1
- beq _080ABFA8
- b _080AC002
-_080ABF72:
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- movs r1, 0x6
- bl __modsi3
- lsls r0, 16
- asrs r0, 16
- lsls r1, r0, 1
- adds r1, r0
- ldrh r0, [r4, 0x36]
- adds r1, r0
- strh r1, [r4, 0x36]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x3
- bl __modsi3
- lsls r0, 16
- asrs r0, 16
- lsls r1, r0, 1
- adds r1, r0
- ldrh r2, [r4, 0x38]
- adds r1, r2
- strh r1, [r4, 0x38]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_080ABFA8:
- ldrh r0, [r4, 0x36]
- ldrh r1, [r4, 0x32]
- adds r0, r1
- strh r0, [r4, 0x32]
- ldrh r1, [r4, 0x38]
- ldrh r2, [r4, 0x34]
- adds r1, r2
- strh r1, [r4, 0x34]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r4, 0x20]
- lsls r1, 16
- asrs r2, r1, 20
- strh r2, [r4, 0x22]
- adds r0, 0x8
- lsls r0, 16
- movs r1, 0x80
- lsls r1, 17
- cmp r0, r1
- bhi _080ABFDE
- adds r1, r2, 0
- movs r0, 0x8
- negs r0, r0
- cmp r1, r0
- blt _080ABFDE
- cmp r1, 0x78
- ble _080AC002
-_080ABFDE:
- ldr r3, _080AC008 @ =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]
- adds r0, r4, 0
- bl DestroySprite
-_080AC002:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AC008: .4byte gTasks
- thumb_func_end sub_80ABF60
-
- thumb_func_start sub_80AC00C
-sub_80AC00C: @ 80AC00C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080AC03C @ =gTasks
- adds r4, r1, r0
- bl sub_80ABDC8
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0xA]
- ldr r0, _080AC040 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080AC044
- movs r0, 0x88
- strh r0, [r4, 0x10]
- movs r0, 0x28
- b _080AC04A
- .align 2, 0
-_080AC03C: .4byte gTasks
-_080AC040: .4byte gBattleAnimAttacker
-_080AC044:
- movs r0, 0x10
- strh r0, [r4, 0x10]
- movs r0, 0x50
-_080AC04A:
- strh r0, [r4, 0x14]
- movs r0, 0x62
- strh r0, [r4, 0x12]
- ldrh r0, [r4, 0x10]
- adds r0, 0x31
- strh r0, [r4, 0x16]
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- lsls r0, r1, 2
- adds r0, r1
- adds r0, 0x5
- strh r0, [r4, 0x20]
- ldr r0, _080AC06C @ =sub_80AC070
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AC06C: .4byte sub_80AC070
- thumb_func_end sub_80AC00C
-
- thumb_func_start sub_80AC070
-sub_80AC070: @ 80AC070
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r1, r0, 24
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- ldr r7, _080AC094 @ =gTasks
- adds r4, r0, r7
- movs r0, 0x8
- ldrsh r2, [r4, r0]
- cmp r2, 0
- beq _080AC098
- cmp r2, 0x1
- beq _080AC148
- b _080AC156
- .align 2, 0
-_080AC094: .4byte gTasks
-_080AC098:
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080AC0AE
- strh r2, [r4, 0xC]
- adds r0, r4, 0
- bl sub_80AC160
-_080AC0AE:
- movs r1, 0x1C
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080AC128
- movs r2, 0x22
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080AC128
- ldr r5, _080AC13C @ =gBattleAnimArgs
- movs r1, 0x1
- mov r8, r1
- mov r2, r8
- strh r2, [r5]
- strh r0, [r5, 0x2]
- movs r0, 0xC
- strh r0, [r5, 0x4]
- ldr r6, _080AC140 @ =sub_80B94B4
- adds r0, r6, 0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _080AC0F8
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r7
- ldr r1, [r0]
- adds r0, r2, 0
- bl _call_via_r1
- ldr r1, _080AC144 @ =gAnimVisualTaskCount
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_080AC0F8:
- movs r0, 0x3
- strh r0, [r5]
- adds r0, r6, 0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _080AC124
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r7
- ldr r1, [r0]
- adds r0, r2, 0
- bl _call_via_r1
- ldr r1, _080AC144 @ =gAnimVisualTaskCount
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_080AC124:
- mov r0, r8
- strh r0, [r4, 0x22]
-_080AC128:
- movs r2, 0x1E
- ldrsh r1, [r4, r2]
- movs r2, 0x20
- ldrsh r0, [r4, r2]
- cmp r1, r0
- blt _080AC156
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080AC156
- .align 2, 0
-_080AC13C: .4byte gBattleAnimArgs
-_080AC140: .4byte sub_80B94B4
-_080AC144: .4byte gAnimVisualTaskCount
-_080AC148:
- movs r2, 0x1A
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080AC156
- adds r0, r1, 0
- bl DestroyAnimVisualTask
-_080AC156:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80AC070
-
- thumb_func_start sub_80AC160
-sub_80AC160: @ 80AC160
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r6, r1, 24
- ldr r1, _080AC1EC @ =gSineTable
- movs r2, 0x18
- ldrsh r0, [r4, r2]
- lsls r0, 1
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- adds r0, 0x3
- asrs r0, 4
- ldrh r2, [r4, 0x14]
- adds r0, r2
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, _080AC1F0 @ =gUnknown_83E5AE0
- movs r2, 0x16
- ldrsh r1, [r4, r2]
- movs r2, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _080AC1BA
- ldr r3, _080AC1F4 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r3, 0
- adds r1, 0x1C
- adds r1, r0, r1
- ldr r2, _080AC1F8 @ =sub_80AC204
- str r2, [r1]
- adds r0, r3
- strh r5, [r0, 0x38]
- strh r6, [r0, 0x3A]
- movs r1, 0x9
- strh r1, [r0, 0x3C]
- ldrh r0, [r4, 0x1A]
- adds r0, 0x1
- strh r0, [r4, 0x1A]
-_080AC1BA:
- ldrh r0, [r4, 0x1E]
- adds r0, 0x1
- strh r0, [r4, 0x1E]
- ldrh r0, [r4, 0x18]
- adds r0, 0x27
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x18]
- movs r0, 0x16
- ldrsh r1, [r4, r0]
- ldr r0, _080AC1FC @ =0x41c64e6d
- muls r0, r1
- ldr r1, _080AC200 @ =0x00003039
- adds r0, r1
- movs r2, 0x12
- ldrsh r1, [r4, r2]
- bl __modsi3
- ldrh r1, [r4, 0x10]
- adds r1, r0
- strh r1, [r4, 0x16]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AC1EC: .4byte gSineTable
-_080AC1F0: .4byte gUnknown_83E5AE0
-_080AC1F4: .4byte gSprites
-_080AC1F8: .4byte sub_80AC204
-_080AC1FC: .4byte 0x41c64e6d
-_080AC200: .4byte 0x00003039
- thumb_func_end sub_80AC160
-
- thumb_func_start sub_80AC204
-sub_80AC204: @ 80AC204
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080AC29A
- ldrh r0, [r5, 0x22]
- adds r0, 0x8
- strh r0, [r5, 0x22]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x38
- ldrsh r1, [r5, r2]
- cmp r0, r1
- blt _080AC29A
- ldr r2, _080AC2A0 @ =gTasks
- movs r3, 0x3A
- ldrsh r1, [r5, r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x1
- strh r1, [r0, 0x1C]
- ldr r0, _080AC2A4 @ =gUnknown_83E7C38
- movs r2, 0x20
- ldrsh r1, [r5, r2]
- movs r3, 0x22
- ldrsh r2, [r5, r3]
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x30]
- cmp r0, 0x40
- beq _080AC294
- movs r0, 0x30
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _080AC2A8 @ =gSprites
- adds r0, r4
- movs r1, 0x3
- bl StartSpriteAffineAnim
- movs r2, 0x30
- ldrsh r1, [r5, r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r5, 0x3A]
- strh r1, [r0, 0x3A]
- movs r3, 0x30
- ldrsh r1, [r5, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r5, 0x3C]
- strh r1, [r0, 0x3C]
- movs r0, 0x30
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, _080AC2AC @ =sub_80AC2B0
- str r1, [r0]
-_080AC294:
- adds r0, r5, 0
- bl DestroySprite
-_080AC29A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AC2A0: .4byte gTasks
-_080AC2A4: .4byte gUnknown_83E7C38
-_080AC2A8: .4byte gSprites
-_080AC2AC: .4byte sub_80AC2B0
- thumb_func_end sub_80AC204
-
- thumb_func_start sub_80AC2B0
-sub_80AC2B0: @ 80AC2B0
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080AC31C
- movs r0, 0
- strh r0, [r4, 0x30]
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- 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
- strb r0, [r3]
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- strh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xC
- bne _080AC31C
- ldr r3, _080AC324 @ =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
-_080AC31C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AC324: .4byte gTasks
- thumb_func_end sub_80AC2B0
-
- thumb_func_start sub_80AC328
-sub_80AC328: @ 80AC328
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080AC3AC @ =gTasks
- adds r5, r1, r0
- ldr r4, _080AC3B0 @ =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- movs r6, 0
- strh r0, [r5, 0xE]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x10]
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- movs r2, 0x1
- negs r2, r2
- adds r1, r2, 0
- cmp r0, 0
- bne _080AC36C
- movs r1, 0x1
-_080AC36C:
- strh r1, [r5, 0x16]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080AC380
- movs r1, 0x16
- ldrsh r0, [r5, r1]
- negs r0, r0
- strh r0, [r5, 0x16]
-_080AC380:
- movs r2, 0x16
- ldrsh r0, [r5, r2]
- lsls r0, 3
- ldrh r1, [r5, 0xE]
- adds r0, r1
- strh r0, [r5, 0x12]
- movs r2, 0x16
- ldrsh r1, [r5, r2]
- lsls r1, 3
- ldrh r0, [r5, 0x10]
- subs r0, r1
- strh r0, [r5, 0x14]
- ldr r0, _080AC3B4 @ =0x0000ffe0
- strh r0, [r5, 0x1A]
- strh r6, [r5, 0xA]
- strh r6, [r5, 0x8]
- ldr r0, _080AC3B8 @ =sub_80AC3BC
- str r0, [r5]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AC3AC: .4byte gTasks
-_080AC3B0: .4byte gBattleAnimAttacker
-_080AC3B4: .4byte 0x0000ffe0
-_080AC3B8: .4byte sub_80AC3BC
- thumb_func_end sub_80AC328
-
- thumb_func_start sub_80AC3BC
-sub_80AC3BC: @ 80AC3BC
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _080AC3E0 @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x6
- bls _080AC3D6
- b _080AC4F6
-_080AC3D6:
- lsls r0, 2
- ldr r1, _080AC3E4 @ =_080AC3E8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080AC3E0: .4byte gTasks
-_080AC3E4: .4byte _080AC3E8
- .align 2, 0
-_080AC3E8:
- .4byte _080AC404
- .4byte _080AC414
- .4byte _080AC42E
- .4byte _080AC470
- .4byte _080AC492
- .4byte _080AC4C0
- .4byte _080AC4E6
-_080AC404:
- adds r0, r4, 0
- bl sub_80AC504
- movs r1, 0x1C
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080AC4FC
- b _080AC4EE
-_080AC414:
- adds r0, r4, 0
- bl sub_80AC504
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x10
- ble _080AC4FC
- movs r0, 0
- strh r0, [r4, 0xA]
- b _080AC4EE
-_080AC42E:
- adds r0, r4, 0
- bl sub_80AC504
- movs r1, 0x16
- ldrsh r0, [r4, r1]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 1
- ldrh r0, [r4, 0x12]
- adds r1, r0
- movs r2, 0
- strh r1, [r4, 0x12]
- adds r1, 0x10
- lsls r1, 16
- movs r0, 0x88
- lsls r0, 17
- cmp r1, r0
- bls _080AC4FC
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- strh r0, [r4, 0x20]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080AC46C
- movs r0, 0x1
- strh r0, [r4, 0x22]
- movs r0, 0x6
- strh r0, [r4, 0x8]
- strh r2, [r4, 0xA]
- b _080AC4FC
-_080AC46C:
- strh r2, [r4, 0xA]
- b _080AC4EE
-_080AC470:
- adds r0, r4, 0
- bl sub_80AC504
- movs r0, 0x16
- ldrsh r1, [r4, r0]
- lsls r1, 1
- ldrh r0, [r4, 0x14]
- subs r0, r1
- strh r0, [r4, 0x14]
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _080AC4FC
- b _080AC4EE
-_080AC492:
- adds r0, r4, 0
- bl sub_80AC504
- movs r1, 0x16
- ldrsh r0, [r4, r1]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 1
- ldrh r0, [r4, 0x12]
- subs r0, r1
- strh r0, [r4, 0x12]
- adds r0, 0x10
- lsls r0, 16
- movs r1, 0x88
- lsls r1, 17
- cmp r0, r1
- bls _080AC4FC
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- strh r0, [r4, 0x20]
- movs r0, 0
- strh r0, [r4, 0xA]
- b _080AC4EE
-_080AC4C0:
- adds r0, r4, 0
- bl sub_80AC504
- movs r0, 0x16
- ldrsh r1, [r4, r0]
- lsls r1, 1
- ldrh r0, [r4, 0x14]
- subs r0, r1
- strh r0, [r4, 0x14]
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _080AC4FC
- movs r0, 0x2
- strh r0, [r4, 0x8]
- b _080AC4FC
-_080AC4E6:
- movs r1, 0x18
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080AC4FC
-_080AC4EE:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080AC4FC
-_080AC4F6:
- adds r0, r2, 0
- bl DestroyAnimVisualTask
-_080AC4FC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AC3BC
-
- thumb_func_start sub_80AC504
-sub_80AC504: @ 80AC504
- push {r4-r6,lr}
- adds r6, r0, 0
- ldrh r0, [r6, 0xC]
- adds r0, 0x1
- strh r0, [r6, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080AC55E
- movs r0, 0
- strh r0, [r6, 0xC]
- ldr r0, _080AC564 @ =gUnknown_83E5AE0
- movs r2, 0xE
- ldrsh r1, [r6, r2]
- movs r3, 0x10
- ldrsh r2, [r6, r3]
- movs r3, 0xA
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080AC55E
- ldr r5, _080AC568 @ =gSprites
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r0, r4, r5
- movs r1, 0x10
- strh r1, [r0, 0x2E]
- ldrh r1, [r6, 0x12]
- strh r1, [r0, 0x32]
- ldrh r1, [r6, 0x14]
- strh r1, [r0, 0x36]
- ldrh r1, [r6, 0x1A]
- strh r1, [r0, 0x38]
- bl InitAnimArcTranslation
- adds r5, 0x1C
- adds r4, r5
- ldr r0, _080AC56C @ =sub_80AC570
- str r0, [r4]
- ldrh r0, [r6, 0x18]
- adds r0, 0x1
- strh r0, [r6, 0x18]
-_080AC55E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AC564: .4byte gUnknown_83E5AE0
-_080AC568: .4byte gSprites
-_080AC56C: .4byte sub_80AC570
- thumb_func_end sub_80AC504
-
- thumb_func_start sub_80AC570
-sub_80AC570: @ 80AC570
- push {r4-r6,lr}
- adds r6, r0, 0
- bl TranslateAnimHorizontalArc
- lsls r0, 24
- cmp r0, 0
- beq _080AC5CA
- ldrh r0, [r6, 0x24]
- ldrh r1, [r6, 0x20]
- adds r0, r1
- strh r0, [r6, 0x20]
- ldrh r0, [r6, 0x26]
- ldrh r1, [r6, 0x22]
- adds r0, r1
- strh r0, [r6, 0x22]
- movs r0, 0x6
- strh r0, [r6, 0x2E]
- bl Random
- movs r4, 0x1F
- adds r1, r4, 0
- ands r1, r0
- ldr r5, _080AC5D0 @ =0x0000fff0
- adds r1, r5
- ldrh r0, [r6, 0x20]
- adds r1, r0
- strh r1, [r6, 0x32]
- bl Random
- ands r4, r0
- adds r4, r5
- ldrh r1, [r6, 0x22]
- adds r4, r1
- strh r4, [r6, 0x36]
- bl Random
- movs r1, 0x7
- ands r1, r0
- mvns r1, r1
- strh r1, [r6, 0x38]
- adds r0, r6, 0
- bl InitAnimArcTranslation
- ldr r0, _080AC5D4 @ =sub_80AC5D8
- str r0, [r6, 0x1C]
-_080AC5CA:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AC5D0: .4byte 0x0000fff0
-_080AC5D4: .4byte sub_80AC5D8
- thumb_func_end sub_80AC570
-
- thumb_func_start sub_80AC5D8
-sub_80AC5D8: @ 80AC5D8
- push {r4-r6,lr}
- adds r5, r0, 0
- bl TranslateAnimHorizontalArc
- lsls r0, 24
- cmp r0, 0
- beq _080AC614
- movs r4, 0
- ldr r6, _080AC61C @ =gTasks
-_080AC5EA:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r2, r0, r6
- ldr r1, [r2]
- ldr r0, _080AC620 @ =sub_80AC3BC
- cmp r1, r0
- bne _080AC60A
- movs r0, 0x1
- strh r0, [r2, 0x1C]
- ldrh r0, [r2, 0x18]
- subs r0, 0x1
- strh r0, [r2, 0x18]
- adds r0, r5, 0
- bl DestroySprite
-_080AC60A:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0xF
- bls _080AC5EA
-_080AC614:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AC61C: .4byte gTasks
-_080AC620: .4byte sub_80AC3BC
- thumb_func_end sub_80AC5D8
-
- thumb_func_start sub_80AC624
-sub_80AC624: @ 80AC624
- ldr r2, _080AC644 @ =gBattleAnimArgs
- ldrh r1, [r2]
- strh r1, [r0, 0x20]
- ldrh r1, [r2, 0x2]
- strh r1, [r0, 0x22]
- ldrh r1, [r2, 0x4]
- strh r1, [r0, 0x2E]
- ldrh r1, [r2, 0x6]
- strh r1, [r0, 0x30]
- ldrh r1, [r2, 0x8]
- strh r1, [r0, 0x32]
- ldrh r1, [r2, 0xA]
- strh r1, [r0, 0x34]
- ldr r1, _080AC648 @ =sub_80AC64C
- str r1, [r0, 0x1C]
- bx lr
- .align 2, 0
-_080AC644: .4byte gBattleAnimArgs
-_080AC648: .4byte sub_80AC64C
- thumb_func_end sub_80AC624
-
- thumb_func_start sub_80AC64C
-sub_80AC64C: @ 80AC64C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x36]
- ldrh r1, [r4, 0x2E]
- subs r0, r1
- strh r0, [r4, 0x36]
- movs r1, 0x36
- ldrsh r0, [r4, r1]
- movs r1, 0xA
- bl __divsi3
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x30]
- ldrh r2, [r4, 0x38]
- adds r0, r2
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x38]
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- movs r2, 0x32
- ldrsh r1, [r4, r2]
- bl Sin
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x34]
- subs r0, 0x1
- strh r0, [r4, 0x34]
- lsls r0, 16
- cmp r0, 0
- bne _080AC690
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080AC690:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AC64C
-
- thumb_func_start sub_80AC698
-sub_80AC698: @ 80AC698
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x30]
- ldrh r1, [r4, 0x34]
- adds r0, r1
- strh r0, [r4, 0x34]
- ldrh r1, [r4, 0x32]
- ldrh r2, [r4, 0x36]
- adds r1, r2
- strh r1, [r4, 0x36]
- lsls r0, 16
- asrs r0, 23
- strh r0, [r4, 0x24]
- lsls r1, 16
- asrs r1, 23
- strh r1, [r4, 0x26]
- ldrh r0, [r4, 0x2E]
- subs r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- cmp r0, 0
- bne _080AC6D0
- adds r0, r4, 0
- bl FreeSpriteOamMatrix
- adds r0, r4, 0
- bl DestroySprite
-_080AC6D0:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AC698
-
- thumb_func_start AnimWaterPulseRing
-AnimWaterPulseRing: @ 80AC6D8
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
- ldr r5, _080AC714 @ =gBattleAnimTarget
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x30]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x32]
- ldr r1, _080AC718 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- strh r0, [r4, 0x34]
- ldrh r0, [r1, 0x6]
- strh r0, [r4, 0x36]
- ldr r0, _080AC71C @ =sub_80AC720
- str r0, [r4, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AC714: .4byte gBattleAnimTarget
-_080AC718: .4byte gBattleAnimArgs
-_080AC71C: .4byte sub_80AC720
- thumb_func_end AnimWaterPulseRing
-
- thumb_func_start sub_80AC720
-sub_80AC720: @ 80AC720
- push {r4-r6,lr}
- adds r4, r0, 0
- movs r0, 0x30
- ldrsh r1, [r4, r0]
- movs r2, 0x20
- ldrsh r0, [r4, r2]
- subs r6, r1, r0
- movs r0, 0x32
- ldrsh r1, [r4, r0]
- movs r2, 0x22
- ldrsh r0, [r4, r2]
- subs r5, r1, r0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- muls r0, r6
- movs r2, 0x34
- ldrsh r1, [r4, r2]
- bl __divsi3
- strh r0, [r4, 0x24]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- muls r0, r5
- movs r2, 0x34
- ldrsh r1, [r4, r2]
- bl __divsi3
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- cmp r0, r1
- bne _080AC778
- movs r0, 0
- strh r0, [r4, 0x38]
- adds r0, r4, 0
- adds r1, r6, 0
- adds r2, r5, 0
- bl sub_80AC798
-_080AC778:
- movs r0, 0x34
- ldrsh r1, [r4, r0]
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _080AC78A
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080AC78A:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80AC720
-
- thumb_func_start sub_80AC798
-sub_80AC798: @ 80AC798
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- adds r4, r1, 0
- adds r5, r2, 0
- movs r2, 0x2E
- ldrsh r1, [r0, r2]
- lsrs r2, r1, 31
- adds r1, r2
- lsls r1, 15
- lsrs r1, 16
- str r1, [sp]
- ldrh r1, [r0, 0x24]
- ldrh r3, [r0, 0x20]
- adds r1, r3
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- ldrh r1, [r0, 0x26]
- ldrh r0, [r0, 0x22]
- adds r1, r0
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- adds r0, r5, r0
- subs r0, 0x5
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- bl Random
- negs r4, r4
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- adds r4, r0
- subs r4, 0x5
- lsls r4, 16
- lsrs r7, r4, 16
- movs r6, 0
- mov r0, r8
- lsls r0, 16
- mov r8, r0
- mov r1, r10
- lsls r1, 16
- str r1, [sp, 0xC]
- ldr r2, [sp]
- lsls r2, 16
- str r2, [sp, 0x10]
- asrs r1, 16
- lsls r0, r7, 16
- asrs r5, r0, 16
- str r0, [sp, 0x14]
- negs r3, r5
- str r3, [sp, 0x4]
- asrs r0, r2, 16
- adds r1, r0
- lsls r1, 16
- mov r10, r1
-_080AC826:
- ldr r0, _080AC868 @ =gUnknown_83E5B88
- mov r2, r8
- asrs r1, r2, 16
- mov r3, r10
- asrs r2, r3, 16
- movs r3, 0x82
- bl CreateSprite
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _080AC86C @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r4, r0, r1
- movs r0, 0x14
- strh r0, [r4, 0x2E]
- mov r0, r9
- strh r0, [r4, 0x30]
- ldr r0, _080AC870 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSpriteSubpriority
- subs r0, 0x1
- adds r1, r4, 0
- adds r1, 0x43
- strb r0, [r1]
- cmp r5, 0
- bge _080AC874
- mov r1, sp
- ldrh r1, [r1, 0x4]
- strh r1, [r4, 0x32]
- b _080AC876
- .align 2, 0
-_080AC868: .4byte gUnknown_83E5B88
-_080AC86C: .4byte gSprites
-_080AC870: .4byte gBattleAnimAttacker
-_080AC874:
- strh r7, [r4, 0x32]
-_080AC876:
- lsls r0, r6, 16
- movs r2, 0x80
- lsls r2, 9
- adds r0, r2
- lsrs r6, r0, 16
- cmp r0, 0
- ble _080AC826
- movs r6, 0
- ldr r3, [sp, 0xC]
- asrs r1, r3, 16
- ldr r0, [sp, 0x14]
- asrs r5, r0, 16
- negs r2, r5
- str r2, [sp, 0x8]
- ldr r3, [sp, 0x10]
- asrs r0, r3, 16
- subs r1, r0
- lsls r1, 16
- mov r10, r1
-_080AC89C:
- ldr r0, _080AC8E0 @ =gUnknown_83E5B88
- mov r2, r8
- asrs r1, r2, 16
- mov r3, r10
- asrs r2, r3, 16
- movs r3, 0x82
- bl CreateSprite
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _080AC8E4 @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r4, r0, r1
- movs r0, 0x14
- strh r0, [r4, 0x2E]
- mov r0, r9
- strh r0, [r4, 0x30]
- ldr r0, _080AC8E8 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSpriteSubpriority
- subs r0, 0x1
- adds r1, r4, 0
- adds r1, 0x43
- strb r0, [r1]
- cmp r5, 0
- ble _080AC8EC
- mov r1, sp
- ldrh r1, [r1, 0x8]
- strh r1, [r4, 0x32]
- b _080AC8EE
- .align 2, 0
-_080AC8E0: .4byte gUnknown_83E5B88
-_080AC8E4: .4byte gSprites
-_080AC8E8: .4byte gBattleAnimAttacker
-_080AC8EC:
- strh r7, [r4, 0x32]
-_080AC8EE:
- lsls r0, r6, 16
- movs r2, 0x80
- lsls r2, 9
- adds r0, r2
- lsrs r6, r0, 16
- cmp r0, 0
- ble _080AC89C
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80AC798
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/battle_anim_effects_misc.s b/data/battle_anim_effects_misc.s
deleted file mode 100644
index c6cb89e24..000000000
--- a/data/battle_anim_effects_misc.s
+++ /dev/null
@@ -1,210 +0,0 @@
-#include "constants/maps.h"
-#include "constants/species.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-gUnknown_83E44F4:: @ 83E44F4
- .incbin "graphics/battle_anims/unk_83E4874.4bpp"
-
-gUnknown_83E4874::
- .incbin "graphics/battle_anims/unk_83E4874.bin"
-
-gUnknown_83E5874:: @ 83E5874
- obj_image_anim_frame 0, 2
- obj_image_anim_frame 8, 2
- obj_image_anim_frame 16, 2
- obj_image_anim_frame 24, 6
- obj_image_anim_frame 32, 2
- obj_image_anim_frame 40, 2
- obj_image_anim_frame 48, 2
- obj_image_anim_end
-
-gUnknown_83E5894:: @ 83E5894
- .4byte gUnknown_83E5874
-
-gUnknown_83E5898:: @ 83E5898
- spr_template 10115, 10115, gOamData_AffineOff_ObjNormal_16x32, gUnknown_83E5894, NULL, gDummySpriteAffineAnimTable, sub_80AAC54
-
-gUnknown_83E58B0:: @ 83E58B0
- obj_rot_scal_anim_frame -5, -5, 0, 10
- obj_rot_scal_anim_frame 5, 5, 0, 10
- obj_rot_scal_anim_jump 0
-
-gUnknown_83E58C8:: @ 83E58C8
- .4byte gUnknown_83E58B0
-
-gUnknown_83E58CC:: @ 83E58CC
- obj_image_anim_frame 0, 1
- obj_image_anim_frame 4, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_end
-
-gUnknown_83E58DC:: @ 83E58DC
- .4byte gUnknown_83E58CC
-
-gUnknown_83E58E0:: @ 83E58E0
- spr_template 10146, 10146, gOamData_AffineNormal_ObjBlend_16x16, gUnknown_83E58DC, NULL, gUnknown_83E58C8, sub_80AAC98
-
-gUnknown_83E58F8:: @ 83E58F8
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
-gUnknown_83E5900:: @ 83E5900
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
-gUnknown_83E5908:: @ 83E5908
- .4byte gUnknown_83E58F8
- .4byte gUnknown_83E5900
-
-gUnknown_83E5910:: @ 83E5910
- obj_rot_scal_anim_frame 0, 0, 0, 1
- obj_rot_scal_anim_frame 96, 96, 0, 1
- obj_rot_scal_anim_end
-
-gUnknown_83E5928:: @ 83E5928
- .4byte gUnknown_83E5910
-
-gUnknown_83E592C:: @ 83E592C
- spr_template 10140, 10140, gOamData_AffineDouble_ObjNormal_8x16, gUnknown_83E5908, NULL, gUnknown_83E5928, sub_80AAE84
-
-gUnknown_83E5944:: @ 83E5944
- obj_image_anim_frame 0, 1
- obj_image_anim_frame 4, 1
- obj_image_anim_frame 8, 1
- obj_image_anim_frame 12, 1
- obj_image_anim_jump 0
-
-gUnknown_83E5958:: @ 83E5958
- .4byte gUnknown_83E5944
-
-gUnknown_83E595C:: @ 83E595C
- spr_template 10149, 10149, gOamData_AffineOff_ObjBlend_16x16, gUnknown_83E5958, NULL, gDummySpriteAffineAnimTable, sub_80AB024
-
-gUnknown_83E5974:: @ 83E5974
- spr_template 10259, 10259, gOamData_AffineOff_ObjBlend_16x16, gUnknown_83E5958, NULL, gDummySpriteAffineAnimTable, sub_80AB024
-
-gUnknown_83E598C:: @ 83E598C
- spr_template 10264, 10264, gOamData_AffineOff_ObjNormal_8x8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80AB024
-
-gUnknown_83E59A4:: @ 83E59A4
- spr_template 10265, 10265, gOamData_AffineOff_ObjNormal_8x8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80AB024
-
-gUnknown_83E59BC:: @ 83E59BC
- obj_image_anim_frame 16, 2
- obj_image_anim_frame 32, 2
- obj_image_anim_frame 48, 2
- obj_image_anim_jump 0
-
-gUnknown_83E59CC:: @ 83E59CC
- .4byte gUnknown_83E59BC
-
-gUnknown_83E59D0:: @ 83E59D0
- spr_template 10029, 10029, gOamData_AffineOff_ObjNormal_32x32, gUnknown_83E59CC, NULL, gDummySpriteAffineAnimTable, sub_80AB024
-
-gUnknown_83E59E8:: @ 83E59E8
- spr_template 10165, 10165, gOamData_AffineDouble_ObjNormal_16x32, gDummySpriteAnimTable, NULL, gGrowingRingAffineAnimTable, sub_80AB024
-
-gUnknown_83E5A00:: @ 83E5A00
- obj_rot_scal_anim_frame 3, 3, 10, 50
- obj_rot_scal_anim_frame 0, 0, 0, 10
- obj_rot_scal_anim_frame -20, -20, 246, 20
- obj_rot_scal_anim_end
-
-gUnknown_83E5A20:: @ 83E5A20
- obj_rot_scal_anim_frame 336, 336, 0, 0
- obj_rot_scal_anim_end
-
-gUnknown_83E5A30:: @ 83E5A30
- .4byte gUnknown_83E5A00
-
-gUnknown_83E5A34:: @ 83E5A34
- .4byte gUnknown_83E5A20
-
-gUnknown_83E5A38:: @ 83E5A38
- spr_template 10149, 10149, gOamData_AffineDouble_ObjBlend_16x16, gUnknown_83E5958, NULL, gUnknown_83E5A30, sub_80AB168
-
-gUnknown_83E5A50:: @ 83E5A50
- spr_template 10149, 10149, gOamData_AffineDouble_ObjBlend_16x16, gUnknown_83E5958, NULL, gUnknown_83E5A34, sub_80AB1F8
-
-gUnknown_83E5A68:: @ 83E5A68
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
-gUnknown_83E5A70:: @ 83E5A70
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
-gUnknown_83E5A78:: @ 83E5A78
- .4byte gUnknown_83E5A68
-
-gUnknown_83E5A7C:: @ 83E5A7C
- .4byte gUnknown_83E5A70
-
-gUnknown_83E5A80:: @ 83E5A80
- spr_template 10155, 10155, gOamData_AffineOff_ObjBlend_16x16, gUnknown_83E5A78, NULL, gDummySpriteAffineAnimTable, AnimThrowProjectile
-
-gUnknown_83E5A98:: @ 83E5A98
- spr_template 10155, 10155, gOamData_AffineDouble_ObjBlend_16x16, gUnknown_83E5A7C, NULL, gUnknown_83E6A80, sub_80AB2CC
-
-gUnknown_83E5AB0:: @ 83E5AB0
- spr_template 10141, 10141, gOamData_AffineOff_ObjNormal_8x8, gUnknown_83E6330, NULL, gDummySpriteAffineAnimTable, sub_80AB308
-
-gUnknown_83E5AC8:: @ 83E5AC8
- spr_template 10155, 10155, gOamData_AffineOff_ObjNormal_8x8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80ABA78
-
-gUnknown_83E5AE0:: @ 83E5AE0
- spr_template 10268, 10268, gOamData_AffineOff_ObjNormal_8x8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80ABF60
-
-gUnknown_83E5AF8:: @ 83E5AF8
- obj_image_anim_frame 8, 1
- obj_image_anim_end
-
-gUnknown_83E5B00:: @ 83E5B00
- obj_image_anim_frame 9, 1
- obj_image_anim_end
-
-gUnknown_83E5B08:: @ 83E5B08
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
-gUnknown_83E5B10:: @ 83E5B10
- .4byte gUnknown_83E5AF8
- .4byte gUnknown_83E5B00
-
-gUnknown_83E5B18:: @ 83E5B18
- .4byte gUnknown_83E5B08
-
-gUnknown_83E5B1C:: @ 83E5B1C
- obj_rot_scal_anim_frame 256, 256, 0, 0
- obj_rot_scal_anim_frame -10, -10, 0, 15
- obj_rot_scal_anim_end
-
-gUnknown_83E5B34:: @ 83E5B34
- obj_rot_scal_anim_frame 224, 224, 0, 0
- obj_rot_scal_anim_frame -8, -8, 0, 15
- obj_rot_scal_anim_end
-
-gUnknown_83E5B4C:: @ 83E5B4C
- obj_rot_scal_anim_frame 336, 336, 0, 0
- obj_rot_scal_anim_frame 0, 0, 0, 15
- obj_rot_scal_anim_end
-
-gUnknown_83E5B64:: @ 83E5B64
- .4byte gUnknown_83E5B1C
- .4byte gUnknown_83E5B34
-
-gUnknown_83E5B6C:: @ 83E5B6C
- .4byte gUnknown_83E5B4C
-
-gUnknown_83E5B70:: @ 83E5B70
- spr_template 10155, 10155, gOamData_AffineOff_ObjNormal_8x8, gUnknown_83E5B10, NULL, gDummySpriteAffineAnimTable, sub_80AC624
-
-gUnknown_83E5B88:: @ 83E5B88
- spr_template 10155, 10155, gOamData_AffineNormal_ObjNormal_8x8, gUnknown_83E5B10, NULL, gUnknown_83E5B64, sub_80AC698
-
-gUnknown_83E5BA0:: @ 83E5BA0
- spr_template 10155, 10155, gOamData_AffineNormal_ObjNormal_16x16, gUnknown_83E5B18, NULL, gUnknown_83E5B6C, sub_8077350
diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s
index 05f298340..d87c4053e 100644
--- a/data/battle_anim_scripts.s
+++ b/data/battle_anim_scripts.s
@@ -1612,28 +1612,28 @@ Move_WATERFALL:: @ 81C8BC1
createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 23, 1
delay 5
playsewithpan SE_W152, 192
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 10, 10, 25, 0
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 25, 0
delay 4
playsewithpan SE_W152, 192
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -15, 0, 25, 0
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, -15, 0, 25, 0
delay 4
playsewithpan SE_W152, 192
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 20, 10, 25, 0
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 20, 10, 25, 0
delay 4
playsewithpan SE_W152, 192
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 0, -10, 25, 0
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0, -10, 25, 0
delay 4
playsewithpan SE_W152, 192
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -10, 15, 25, 0
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, -10, 15, 25, 0
delay 4
playsewithpan SE_W152, 192
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 25, 20, 25, 0
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 25, 20, 25, 0
delay 4
playsewithpan SE_W152, 192
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -20, 20, 25, 0
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, -20, 20, 25, 0
delay 4
playsewithpan SE_W152, 192
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 12, 0, 25, 0
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 12, 0, 25, 0
waitforvisualfinish
delay 10
createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 5
@@ -1647,41 +1647,41 @@ Move_WATERFALL:: @ 81C8BC1
gUnknown_81C8CA2:: @ 81C8CA2
playsewithpan SE_W127, 63
createvisualtask AnimTask_ShakeMon2, 5, 1, 4, 0, 17, 1
- createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 20, 1, 1
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 20
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 20
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, 1, 1
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 20
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 20
delay 2
- createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 15, 1, 1
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 15
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 15
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 15, 1, 1
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 15
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 15
delay 2
- createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 10, 1, 1
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 10
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 10
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, 1, 1
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 10
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 10
delay 2
- createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 5, 1, 1
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 5
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 5
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 1, 1
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 5
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 5
delay 2
- createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 0, 1, 1
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 0
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 0
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 0
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 0
delay 2
- createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, -5, 1, 1
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -5
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -5
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -5, 1, 1
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -5
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -5
delay 2
- createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, -10, 1, 1
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -10
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -10
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, 1, 1
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -10
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -10
delay 2
- createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, -15, 1, 1
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -15
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -15
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -15, 1, 1
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -15
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -15
delay 2
- createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, -20, 1, 1
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -20
- createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -20
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -20, 1, 1
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -20
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -20
return
Move_EXPLOSION:: @ 81C8E15
@@ -2277,22 +2277,22 @@ Move_BUBBLE_BEAM:: @ 81C9D13
end
gUnknown_81C9D4D:: @ 81C9D4D
- createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 35, 70, 0, 256, 50
+ createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 35, 70, 0, 256, 50
playsewithpan SE_W145, 192
delay 3
- createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 20, 40, -10, 256, 50
+ createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 20, 40, -10, 256, 50
playsewithpan SE_W145, 192
delay 3
- createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 10, -60, 0, 256, 50
+ createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 10, -60, 0, 256, 50
playsewithpan SE_W145, 192
delay 3
- createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 15, -15, 10, 256, 50
+ createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 15, -15, 10, 256, 50
playsewithpan SE_W145, 192
delay 3
- createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 30, 10, -10, 256, 50
+ createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 30, 10, -10, 256, 50
playsewithpan SE_W145, 192
delay 3
- createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 25, -30, 10, 256, 50
+ createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 25, -30, 10, 256, 50
playsewithpan SE_W145, 192
delay 3
return
@@ -2672,8 +2672,8 @@ Move_LOW_KICK:: @ 81CA674
end
Move_EARTHQUAKE:: @ 81CA6D1
- createvisualtask sub_80B94B4, 5, 5, 10, 50
- createvisualtask sub_80B94B4, 5, 4, 10, 50
+ createvisualtask AnimTask_HorizontalShake, 5, 5, 10, 50
+ createvisualtask AnimTask_HorizontalShake, 5, 4, 10, 50
playsewithpan SE_W089, 0
delay 10
createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, 0, 14, RGB_WHITE, 14
@@ -2683,8 +2683,8 @@ Move_EARTHQUAKE:: @ 81CA6D1
Move_FISSURE:: @ 81CA71E
loadspritegfx ANIM_TAG_MUD_SAND
- createvisualtask sub_80B94B4, 3, 5, 10, 50
- createvisualtask sub_80B94B4, 3, 1, 10, 50
+ createvisualtask AnimTask_HorizontalShake, 3, 5, 10, 50
+ createvisualtask AnimTask_HorizontalShake, 3, 1, 10, 50
playsewithpan SE_W089, 63
delay 8
call gUnknown_81CA79F
@@ -3016,7 +3016,7 @@ gUnknown_81CAD40:: @ 81CAD40
waitforvisualfinish
delay 12
createvisualtask AnimTask_BlendSelected, 10, 2, 1, 8, 0, RGB_BLACK
- createvisualtask sub_80B94B4, 5, 0, 2, 16
+ createvisualtask AnimTask_HorizontalShake, 5, 0, 2, 16
loopsewithpan SE_W287, 192, 4, 8
createvisualtask AnimTask_BlendSelected, 10, 2, 1, 0, 15, RGB_WHITE
delay 20
@@ -3033,7 +3033,7 @@ gUnknown_81CADB7:: @ 81CADB7
waitforvisualfinish
delay 12
createvisualtask AnimTask_BlendSelected, 10, 2, 1, 8, 0, RGB_BLACK
- createvisualtask sub_80B94B4, 5, 0, 2, 16
+ createvisualtask AnimTask_HorizontalShake, 5, 0, 2, 16
playsewithpan SE_W287, 192
delay 8
createvisualtask AnimTask_BlendSelected, 10, 2, 1, 0, 15, RGB_WHITE
@@ -3416,14 +3416,14 @@ gUnknown_81CB468:: @ 81CB468
end
gUnknown_81CB469:: @ 81CB469
- createvisualtask sub_80B94B4, 5, 5, 0, 50
- createvisualtask sub_80B94B4, 5, 4, 0, 50
+ createvisualtask AnimTask_HorizontalShake, 5, 5, 0, 50
+ createvisualtask AnimTask_HorizontalShake, 5, 4, 0, 50
loopsewithpan SE_W070, 63, 8, 10
goto gUnknown_81CB468
gUnknown_81CB48E:: @ 81CB48E
- createvisualtask sub_80B94B4, 5, 5, 0, 50
- createvisualtask sub_80B94B4, 5, 4, 0, 50
+ createvisualtask AnimTask_HorizontalShake, 5, 5, 0, 50
+ createvisualtask AnimTask_HorizontalShake, 5, 4, 0, 50
loopsewithpan SE_W070, 63, 8, 10
delay 10
createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, 0, 14, RGB_WHITE, 14
@@ -3915,8 +3915,8 @@ Move_ERUPTION:: @ 81CBEEF
createsprite gUnknown_83E5E60, ANIM_ATTACKER, 40, 110, -32, 64, 50, 0
createsprite gUnknown_83E5E60, ANIM_ATTACKER, 40, 60, -32, 80, 70, 1
delay 22
- createvisualtask sub_80B94B4, 5, 5, 8, 60
- createvisualtask sub_80B94B4, 5, 4, 8, 60
+ createvisualtask AnimTask_HorizontalShake, 5, 5, 8, 60
+ createvisualtask AnimTask_HorizontalShake, 5, 4, 8, 60
loopsewithpan SE_W088, 63, 16, 12
delay 80
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, 31, 4, 4, 0, 31
@@ -3946,7 +3946,7 @@ Move_IMPRISON:: @ 81CC007
waitforvisualfinish
delay 4
createsprite gUnknown_83E705C, ANIM_ATTACKER, 5, 0, 40
- createvisualtask sub_80B94B4, 5, 4, 1, 10
+ createvisualtask AnimTask_HorizontalShake, 5, 4, 1, 10
playsewithpan SE_W063, 192
clearmonbg 3
call gUnknown_81D59C7
@@ -4040,7 +4040,7 @@ Move_LUSTER_PURGE:: @ 81CC0FB
createvisualtask sub_80DD3DC, 5, 208, 63
waitforvisualfinish
createvisualtask AnimTask_BlendExcept, 5, 5, 2, 16, 0, -1
- createvisualtask sub_80B94B4, 5, 1, 5, 14
+ createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14
waitforvisualfinish
clearmonbg 0
blendoff
@@ -4389,13 +4389,13 @@ Move_WATER_SPOUT:: @ 81CCB48
loadspritegfx ANIM_TAG_WATER_IMPACT
monbg 3
setalpha 12, 8
- createvisualtask sub_80ABB28, 5,
+ createvisualtask AnimTask_WaterSpoutLaunch, 5,
playsewithpan SE_W029, 192
delay 44
playsewithpan SE_W291, 192
waitforvisualfinish
delay 16
- createvisualtask sub_80AC00C, 5,
+ createvisualtask AnimTask_WaterSpoutRain, 5,
playsewithpan SE_W057, 63
clearmonbg 3
blendoff
@@ -4559,7 +4559,7 @@ Move_VOLT_TACKLE:: @ 81CCD79
Move_WATER_SPORT:: @ 81CCE71
loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB
- createvisualtask sub_80AC328, 5,
+ createvisualtask AnimTask_WaterSport, 5,
delay 8
playsewithpan SE_W057, 192
delay 44
@@ -5210,27 +5210,27 @@ Move_BUBBLE:: @ 81CDD4A
monbg 1
setalpha 12, 8
delay 1
- createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 15, -15, 10, 128, 100
+ createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 15, -15, 10, 128, 100
playsewithpan SE_W145, 192
waitplaysewithpan SE_W145B, 63, 100
delay 6
- createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 35, 37, 40, 128, 100
+ createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 35, 37, 40, 128, 100
playsewithpan SE_W145, 192
waitplaysewithpan SE_W145B, 63, 100
delay 6
- createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 10, -37, 30, 128, 100
+ createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 10, -37, 30, 128, 100
playsewithpan SE_W145, 192
waitplaysewithpan SE_W145B, 63, 100
delay 6
- createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 30, 10, 15, 128, 100
+ createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 30, 10, 15, 128, 100
playsewithpan SE_W145, 192
waitplaysewithpan SE_W145B, 63, 100
delay 6
- createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 20, 33, 20, 128, 100
+ createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 20, 33, 20, 128, 100
playsewithpan SE_W145, 192
waitplaysewithpan SE_W145B, 63, 100
delay 6
- createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 25, -30, 10, 128, 100
+ createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 25, -30, 10, 128, 100
playsewithpan SE_W145, 192
waitplaysewithpan SE_W145B, 63, 100
waitforvisualfinish
@@ -5394,8 +5394,8 @@ Move_RAIN_DANCE:: @ 81CE145
playsewithpan SE_W240, 192
createvisualtask AnimTask_BlendSelected, 10, 1 | (0xF << 7), 2, 0, 4, RGB_BLACK
waitforvisualfinish
- createvisualtask sub_80AABC0, 2, 0, 3, 120
- createvisualtask sub_80AABC0, 2, 0, 3, 120
+ createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 120
+ createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 120
delay 120
delay 30
waitforvisualfinish
@@ -5522,7 +5522,7 @@ Move_AURORA_BEAM:: @ 81CE43F
waitbgfadein
playsewithpan SE_W062, 192
setarg 7, 0
- createvisualtask sub_80AAF60, 10, 130
+ createvisualtask AnimTask_RotateAuroraRingColors, 10, 130
call gUnknown_81CE4C6
createvisualtask AnimTask_ShakeMon2, 5, 1, 1, 0, 17, 1
call gUnknown_81CE4C6
@@ -5543,13 +5543,13 @@ Move_AURORA_BEAM:: @ 81CE43F
end
gUnknown_81CE4C6:: @ 81CE4C6
- createsprite gUnknown_83E592C, ANIM_TARGET, 2, 20, 0, 0, 0, 17
+ createsprite gAuroraBeamRingSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 0, 17
delay 1
- createsprite gUnknown_83E592C, ANIM_TARGET, 2, 20, 0, 0, 0, 17
+ createsprite gAuroraBeamRingSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 0, 17
delay 1
- createsprite gUnknown_83E592C, ANIM_TARGET, 2, 20, 0, 0, 0, 17
+ createsprite gAuroraBeamRingSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 0, 17
delay 1
- createsprite gUnknown_83E592C, ANIM_TARGET, 2, 20, 0, 0, 0, 17
+ createsprite gAuroraBeamRingSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 0, 17
delay 1
return
@@ -5746,7 +5746,7 @@ Move_HYDRO_PUMP:: @ 81CE9EE
createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 40, 1
delay 6
panse_1B SE_W056, 192, 63, 2, 0
- createvisualtask sub_80AB100, 5, 100
+ createvisualtask AnimTask_StartSinAnimTimer, 5, 100
call gUnknown_81CEA8D
call gUnknown_81CEA8D
call gUnknown_81CEA8D
@@ -5773,17 +5773,17 @@ Move_HYDRO_PUMP:: @ 81CE9EE
end
gUnknown_81CEA8D:: @ 81CEA8D
- createsprite gUnknown_83E595C, ANIM_ATTACKER, 3, 10, 10, 0, 16
- createsprite gUnknown_83E595C, ANIM_ATTACKER, 3, 10, 10, 0, -16
+ createsprite gHydroPumpOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 16
+ createsprite gHydroPumpOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, -16
delay 1
- createsprite gUnknown_83E595C, ANIM_ATTACKER, 3, 10, 10, 0, 16
- createsprite gUnknown_83E595C, ANIM_ATTACKER, 3, 10, 10, 0, -16
+ createsprite gHydroPumpOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 16
+ createsprite gHydroPumpOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, -16
delay 1
return
gUnknown_81CEACE:: @ 81CEACE
- createsprite gUnknown_83E7C38, ANIM_ATTACKER, 4, 0, 15, 1, 1
- createsprite gUnknown_83E7C38, ANIM_ATTACKER, 4, 0, -15, 1, 1
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 15, 1, 1
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, -15, 1, 1
return
Move_SIGNAL_BEAM:: @ 81CEAED
@@ -5793,7 +5793,7 @@ Move_SIGNAL_BEAM:: @ 81CEAED
createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 25, 1
delay 6
panse_1B SE_W062, 192, 63, 1, 0
- createvisualtask sub_80AB100, 5, 100
+ createvisualtask AnimTask_StartSinAnimTimer, 5, 100
call gUnknown_81CEBB4
call gUnknown_81CEBB4
call gUnknown_81CEBB4
@@ -5823,8 +5823,8 @@ Move_SIGNAL_BEAM:: @ 81CEAED
end
gUnknown_81CEBB4:: @ 81CEBB4
- createsprite gUnknown_83E598C, ANIM_TARGET, 3, 10, 10, 0, 16
- createsprite gUnknown_83E59A4, ANIM_TARGET, 3, 10, 10, 0, -16
+ createsprite gSignalBeamRedOrbSpriteTemplate, ANIM_TARGET, 3, 10, 10, 0, 16
+ createsprite gSignalBeamGreenOrbSpriteTemplate, ANIM_TARGET, 3, 10, 10, 0, -16
delay 1
return
@@ -6381,18 +6381,18 @@ Move_WATER_GUN:: @ 81CF87A
monbg 3
monbgprio_28 1
setalpha 12, 8
- createsprite gUnknown_83E5A80, ANIM_ATTACKER, 2, 20, 0, 0, 0, 40, -25
+ createsprite gWaterGunProjectileSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, 0, 0, 40, -25
playsewithpan SE_W145, 192
waitforvisualfinish
createvisualtask AnimTask_ShakeMon2, 5, 1, 1, 0, 8, 1
- createsprite gUnknown_83E7C38, ANIM_ATTACKER, 4, 0, 0, 1, 2
- createsprite gUnknown_83E5A98, ANIM_ATTACKER, 2, 0, -15, 0, 15, 55
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 1, 2
+ createsprite gWaterGunDropletSpriteTemplate, ANIM_ATTACKER, 2, 0, -15, 0, 15, 55
playsewithpan SE_W152, 63
delay 10
- createsprite gUnknown_83E5A98, ANIM_ATTACKER, 2, 15, -20, 0, 15, 50
+ createsprite gWaterGunDropletSpriteTemplate, ANIM_ATTACKER, 2, 15, -20, 0, 15, 50
playsewithpan SE_W152, 63
delay 10
- createsprite gUnknown_83E5A98, ANIM_ATTACKER, 2, -15, -10, 0, 10, 45
+ createsprite gWaterGunDropletSpriteTemplate, ANIM_ATTACKER, 2, -15, -10, 0, 10, 45
playsewithpan SE_W152, 63
waitforvisualfinish
clearmonbg 3
@@ -6404,7 +6404,7 @@ Move_CRABHAMMER:: @ 81CF907
loadspritegfx ANIM_TAG_WATER_IMPACT
monbg 3
setalpha 12, 8
- createsprite gUnknown_83E7C38, ANIM_ATTACKER, 4, 0, 0, 1, 0
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 1, 0
playsewithpan SE_W233B, 63
delay 1
createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 32429, 10, 0, 0
@@ -6416,28 +6416,28 @@ Move_CRABHAMMER:: @ 81CF907
waitforvisualfinish
loopsewithpan SE_W152, 63, 20, 3
createvisualtask AnimTask_ShakeMon, 5, 1, 0, 4, 8, 1
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 10, 10, 20, 1
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 20, 1
delay 4
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 20, -20, 20, 1
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 20, -20, 20, 1
delay 4
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -15, 15, 20, 1
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, -15, 15, 20, 1
delay 4
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 0, 0, 20, 1
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 20, 1
delay 4
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -10, -20, 20, 1
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, -10, -20, 20, 1
delay 4
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 16, -8, 20, 1
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 16, -8, 20, 1
delay 4
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 5, 8, 20, 1
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 5, 8, 20, 1
delay 4
- createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -16, 0, 20, 1
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, 20, 1
waitforvisualfinish
clearmonbg 3
blendoff
end
Move_SURF:: @ 81CFA01
- createvisualtask sub_80AB38C, 2, 0
+ createvisualtask AnimTask_CreateSurfWave, 2, 0
delay 24
panse_1B SE_W057, 192, 63, 2, 0
waitforvisualfinish
@@ -6450,7 +6450,7 @@ Move_FLAMETHROWER:: @ 81CFA15
setalpha 12, 8
createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 46, 1
delay 6
- createvisualtask sub_80AB100, 5, 100
+ createvisualtask AnimTask_StartSinAnimTimer, 5, 100
panse_1B SE_W053, 192, 63, 2, 0
call gUnknown_81CFA8F
call gUnknown_81CFA8F
@@ -6470,9 +6470,9 @@ Move_FLAMETHROWER:: @ 81CFA15
end
gUnknown_81CFA8F:: @ 81CFA8F
- createsprite gUnknown_83E59D0, ANIM_ATTACKER, 3, 10, 10, 0, 16
+ createsprite gFlamethrowerFlameSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 16
delay 2
- createsprite gUnknown_83E59D0, ANIM_ATTACKER, 3, 10, 10, 0, 16
+ createsprite gFlamethrowerFlameSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 16
delay 2
return
@@ -7318,7 +7318,7 @@ Move_PSYWAVE:: @ 81D0E4A
loadspritegfx ANIM_TAG_BLUE_RING
playsewithpan SE_W060, 192
call gUnknown_81D59BB
- createvisualtask sub_80AB100, 5, 100
+ createvisualtask AnimTask_StartSinAnimTimer, 5, 100
createsoundtask mas_80DCF38, 196, -64, 63, 2, 9, 0, 10
call gUnknown_81D0EAD
call gUnknown_81D0EAD
@@ -7333,9 +7333,9 @@ Move_PSYWAVE:: @ 81D0E4A
end
gUnknown_81D0EAD:: @ 81D0EAD
- createsprite gUnknown_83E59E8, ANIM_TARGET, 3, 10, 10, 0, 16
+ createsprite gPsywaveRingSpriteTemplate, ANIM_TARGET, 3, 10, 10, 0, 16
delay 4
- createsprite gUnknown_83E59E8, ANIM_TARGET, 3, 10, 10, 0, 16
+ createsprite gPsywaveRingSpriteTemplate, ANIM_TARGET, 3, 10, 10, 0, 16
delay 4
return
@@ -8763,7 +8763,7 @@ gUnknown_81D2F14:: @ 81D2F14
Move_MUDDY_WATER:: @ 81D2F28
panse_1B SE_W250, 192, 63, 2, 0
- createvisualtask sub_80AB38C, 2, 1
+ createvisualtask AnimTask_CreateSurfWave, 2, 1
waitforvisualfinish
end
@@ -8860,7 +8860,7 @@ Move_MUD_SHOT:: @ 81D3239
setalpha 12, 8
createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 46, 1
delay 6
- createvisualtask sub_80AB100, 5, 100
+ createvisualtask AnimTask_StartSinAnimTimer, 5, 100
panse_1B SE_W250, 192, 63, 1, 0
call gUnknown_81D32B3
call gUnknown_81D32B3
@@ -8880,9 +8880,9 @@ Move_MUD_SHOT:: @ 81D3239
end
gUnknown_81D32B3:: @ 81D32B3
- createsprite gUnknown_83E5974, ANIM_ATTACKER, 3, 10, 10, 0, 16
+ createsprite gMudShotOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 16
delay 2
- createsprite gUnknown_83E5974, ANIM_ATTACKER, 3, 10, 10, 0, 16
+ createsprite gMudShotOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 16
delay 2
return
@@ -9556,24 +9556,24 @@ Move_HYDRO_CANNON:: @ 81D45B2
monbg 3
setalpha 12, 8
playsewithpan SE_W057, 192
- createsprite gUnknown_83E5A38, ANIM_TARGET, 2,
+ createsprite gHydroCannonChargeSpriteTemplate, ANIM_TARGET, 2,
delay 10
createvisualtask sub_80BA0E8, 2, 257, 257, 257
delay 30
panse_1B SE_W056, 192, 63, 2, 0
call gUnknown_81D467C
createvisualtask AnimTask_ShakeMon, 5, 1, 10, 0, 40, 1
- createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0
call gUnknown_81D467C
- createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0
call gUnknown_81D467C
- createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0
call gUnknown_81D467C
- createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0
call gUnknown_81D467C
- createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0
call gUnknown_81D467C
- createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0
waitforvisualfinish
createvisualtask sub_80BA0E8, 2, 257, 257, 257
waitforvisualfinish
@@ -9582,15 +9582,15 @@ Move_HYDRO_CANNON:: @ 81D45B2
end
gUnknown_81D467C:: @ 81D467C
- createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257
+ createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257
delay 1
- createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257
+ createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257
delay 1
- createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257
+ createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257
delay 1
- createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257
+ createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257
delay 1
- createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257
+ createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257
return
Move_ASTONISH:: @ 81D46E4
@@ -9697,11 +9697,11 @@ Move_WATER_PULSE:: @ 81D48A6
playsewithpan SE_W145C, 192
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 7, 29472
delay 10
- createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 100, 100, 8, 1, 20, 40, 0
- createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 20, 100, 16, 2, 10, 35, 1
- createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 200, 80, 8, 1, 40, 20, 0
- createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 80, 60, 10, 3, 20, 50, 0
- createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 140, 100, 16, 1, 20, 30, 1
+ createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 100, 100, 8, 1, 20, 40, 0
+ createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 20, 100, 16, 2, 10, 35, 1
+ createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 200, 80, 8, 1, 40, 20, 0
+ createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 80, 60, 10, 3, 20, 50, 0
+ createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 140, 100, 16, 1, 20, 30, 1
playsewithpan SE_W145C, 63
waitforvisualfinish
playsewithpan SE_W202, 192
@@ -10113,13 +10113,13 @@ gUnknown_81D5205:: @ 81D5205
gUnknown_81D5269:: @ 81D5269
loadspritegfx ANIM_TAG_SMALL_BUBBLES
- createsprite gUnknown_83E5BA0, ANIM_TARGET, 2, -30, -100, 25, 1, 50, 10
+ createsprite gWeatherBallWaterDownSpriteTemplate, ANIM_TARGET, 2, -30, -100, 25, 1, 50, 10
playsewithpan SE_W152, 63
delay 8
- createsprite gUnknown_83E5BA0, ANIM_TARGET, 2, -30, -100, 25, 1, -20, 20
+ createsprite gWeatherBallWaterDownSpriteTemplate, ANIM_TARGET, 2, -30, -100, 25, 1, -20, 20
playsewithpan SE_W152, 63
delay 13
- createsprite gUnknown_83E5BA0, ANIM_TARGET, 2, -30, -100, 25, 1, 0, 0
+ createsprite gWeatherBallWaterDownSpriteTemplate, ANIM_TARGET, 2, -30, -100, 25, 1, 0, 0
playsewithpan SE_W152, 63
waitforvisualfinish
createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 8, 1
@@ -10759,8 +10759,8 @@ General_Rain:: @ 81D5F8F
playsewithpan SE_W240, 192
createvisualtask AnimTask_BlendSelected, 10, 1 | (0xF << 7), 2, 0, 4, RGB_BLACK
waitforvisualfinish
- createvisualtask sub_80AABC0, 2, 0, 3, 60
- createvisualtask sub_80AABC0, 2, 0, 3, 60
+ createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60
+ createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60
delay 50
waitforvisualfinish
createvisualtask AnimTask_BlendSelected, 10, 1 | (0xF << 7), 2, 4, 0, RGB_BLACK
diff --git a/graphics/unknown/unknown_E822B8.bin b/graphics/battle_anims/backgrounds/water_contest.bin
index 6312b8645..6312b8645 100644
--- a/graphics/unknown/unknown_E822B8.bin
+++ b/graphics/battle_anims/backgrounds/water_contest.bin
diff --git a/graphics/unknown/unknown_E81D14.bin b/graphics/battle_anims/backgrounds/water_opponent.bin
index d48de1d6f..d48de1d6f 100644
--- a/graphics/unknown/unknown_E81D14.bin
+++ b/graphics/battle_anims/backgrounds/water_opponent.bin
Binary files differ
diff --git a/graphics/unknown/unknown_E81FE4.bin b/graphics/battle_anims/backgrounds/water_player.bin
index 6a6f7c049..6a6f7c049 100644
--- a/graphics/unknown/unknown_E81FE4.bin
+++ b/graphics/battle_anims/backgrounds/water_player.bin
diff --git a/include/battle_anim.h b/include/battle_anim.h
index e987457c7..eacb51f2c 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -218,6 +218,7 @@ void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite);
void sub_80A2F0C(u8 taskId);
// battle_anim_effects_2.c
+extern const union AffineAnimCmd *const gGrowingRingAffineAnimTable[];
void sub_80A6E48(struct Sprite *);
void sub_80A6E98(struct Sprite *);
void sub_80A6F8C(struct Sprite *);
@@ -345,7 +346,6 @@ void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId);
// battle_anim_mons.c
extern const struct MonCoords gCastformFrontSpriteCoords[];
-
u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType);
u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType);
u8 GetBattlerSpriteDefault_Y(u8 battlerId);
@@ -447,7 +447,7 @@ void sub_8076F58(struct Sprite *sprite);
void sub_8076FD0(struct Sprite *sprite);
void sub_8077030(u8 taskId);
void sub_807729C(struct Sprite *sprite);
-void sub_8077350(struct Sprite *sprite);
+void AnimWeatherBallDown(struct Sprite *sprite);
// battle_anim_mon_movement.c
void AnimTask_ShakeMon(u8 taskId);
@@ -467,6 +467,7 @@ void sub_8099BD4(u8 taskId);
// normal.c
extern const struct SpriteTemplate gUnknown_83E7C98;
extern const struct SpriteTemplate gBasicHitSplatSpriteTemplate;
+extern const struct SpriteTemplate gWaterHitSplatSpriteTemplate;
u32 UnpackSelectedBattleAnimPalettes(s16 selector);
void AnimTask_CurseBlendEffect(u8 taskId);
void sub_80B9CE4(u8 taskId);
@@ -478,7 +479,7 @@ void sub_80BA47C(u8 taskId);
// ground.c
void sub_80B8E94(u8 taskId);
void sub_80B90EC(u8 taskId);
-void sub_80B94B4(u8 taskId);
+void AnimTask_HorizontalShake(u8 taskId);
void AnimTask_IsPowerOver99(u8 taskId);
void sub_80B9800(u8 taskId);
@@ -527,10 +528,14 @@ void sub_80B194C(u8 taskId);
void sub_80B1D3C(struct Sprite *sprite);
void sub_80B2868(u8 taskId);
+// poison.c
+extern const union AffineAnimCmd *const gAffineAnims_Droplet[];
+
// fighting.c
void sub_80B1530(u8 taskId);
// ice.c
+extern const union AnimCmd *const gAnims_SmallBubblePair[];
void AnimTask_Haze1(u8 taskId);
void AnimTask_LoadMistTiles(u8 taskId);
void AnimTask_Hail1(u8 taskId);
@@ -546,15 +551,14 @@ void sub_80AEFA0(u8 taskId);
// fire.c
extern const union AnimCmd *const gUnknown_83E5D48[];
-
void sub_80ACEA4(u8 taskId);
void sub_80ADAD8(u8 taskId);
void AnimTask_BlendBackground(u8 taskId);
void sub_80AD800(u8 taskId);
// water.s
-extern const union AnimCmd *const gUnknown_83E5958[];
-extern const union AnimCmd *const gUnknown_83E5A78[];
+extern const union AnimCmd *const gAnims_WaterMudOrb[];
+extern const union AnimCmd *const gAnims_WaterBubble[];
void AnimWaterPulseRing(struct Sprite *sprite);
// smokescreen.s
diff --git a/include/graphics.h b/include/graphics.h
index 40a41b87e..35ef29391 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4241,6 +4241,7 @@ extern const u32 gBattleAnimBgImage_Cosmic[];
extern const u32 gBattleAnimBgImage_InAir[];
extern const u32 gBattleAnimBgImage_Aurora[];
extern const u32 gBattleAnimBgImage_Fissure[];
+extern const u32 gBattleAnimBgImage_Surf[];
extern const u32 gBattleAnimBgPalette_Dark[];
extern const u32 gBattleAnimBgPalette_Ghost[];
extern const u32 gBattleAnimBgPalette_Psychic[];
@@ -4252,11 +4253,13 @@ extern const u32 gBattleAnimBgPalette_Guillotine[];
extern const u32 gBattleAnimBgPalette_Ice[];
extern const u32 gBattleAnimBgPalette_Cosmic[];
extern const u32 gBattleAnimBgPalette_InAir[];
+extern const u32 gBattleAnimBgPalette_MuddyWater[];
extern const u32 gBattleAnimBgPalette_Sky[];
extern const u32 gBattleAnimBgPalette_Aurora[];
extern const u32 gBattleAnimBgPalette_Fissure[];
extern const u32 gBattleAnimBgPalette_Bug[];
extern const u32 gBattleAnimBgPalette_Solarbeam[];
+extern const u32 gBattleAnimBgPalette_Surf[];
extern const u32 gBattleAnimBgTilemap_Dark[];
extern const u32 gBattleAnimBgTilemap_Ghost[];
extern const u32 gBattleAnimBgTilemap_Psychic[];
@@ -4276,6 +4279,9 @@ extern const u32 gBattleAnimBgTilemap_Cosmic[];
extern const u32 gBattleAnimBgTilemap_InAir[];
extern const u32 gBattleAnimBgTilemap_Aurora[];
extern const u32 gBattleAnimBgTilemap_Fissure[];
+extern const u32 gBattleAnimBgTilemap_SurfOpponent[];
+extern const u32 gBattleAnimBgTilemap_SurfPlayer[];
+extern const u32 gBattleAnimBgTilemap_SurfContest[];
// dark
extern const u32 gMetalShineGfx[];
diff --git a/include/random.h b/include/random.h
index 139316f9d..1eaff3245 100644
--- a/include/random.h
+++ b/include/random.h
@@ -13,6 +13,8 @@ u16 Random2(void);
//Returns a 32-bit pseudorandom number
#define Random32() (Random() | (Random() << 16))
+#define ISO_RANDOMIZE2(val)(1103515245 * (val) + 12345)
+
//Sets the initial seed value of the pseudorandom number generator
void SeedRng(u16 seed);
void SeedRng2(u16 seed);
diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c
index 741fdf312..d6c601572 100644
--- a/src/battle_anim_mons.c
+++ b/src/battle_anim_mons.c
@@ -2225,7 +2225,7 @@ static void sub_80772F4(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_8077350(struct Sprite *sprite)
+void AnimWeatherBallDown(struct Sprite *sprite)
{
s32 x;
diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c
index 4eb475a5c..8797670db 100644
--- a/src/battle_anim_status_effects.c
+++ b/src/battle_anim_status_effects.c
@@ -87,7 +87,7 @@ const struct SpriteTemplate gSpriteTemplate_83BF44C =
.anims = sSpriteAnimTable_83BF430,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8077350,
+ .callback = AnimWeatherBallDown,
};
static const union AnimCmd sUnknown_83BF464[] =
diff --git a/src/fire.c b/src/fire.c
index a5a2ee5f6..51c9dff84 100644
--- a/src/fire.c
+++ b/src/fire.c
@@ -337,7 +337,7 @@ const struct SpriteTemplate gUnknown_83E5E14 =
.anims = gUnknown_83E5D48,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8077350,
+ .callback = AnimWeatherBallDown,
};
static const struct SpriteTemplate gUnknown_83E5E2C =
diff --git a/src/graphics.c b/src/graphics.c
index 7eee42bf0..655bf43bc 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -1019,7 +1019,7 @@ const u32 gBattleAnimBgTilemap_InAir[] = INCBIN_U32("graphics/battle_anims/backg
const u32 gBattleAnimSpriteGfx_Protect[] = INCBIN_U32("graphics/battle_anims/sprites/protect.4bpp.lz");
const u32 gBattleAnimSpritePal_Protect[] = INCBIN_U32("graphics/battle_anims/sprites/protect.gbapal.lz");
-const u32 gFile_graphics_battle_anims_backgrounds_water_muddy_palette[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_muddy.gbapal.lz");
+const u32 gBattleAnimBgPalette_MuddyWater[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_muddy.gbapal.lz");
const u32 gFile_graphics_battle_interface_enemy_mon_shadow_sheet[] = INCBIN_U32("graphics/battle_interface/enemy_mon_shadow.4bpp.lz");
@@ -1085,11 +1085,13 @@ const u32 gBattleAnimSpritePal_Bird[] = INCBIN_U32("graphics/battle_anims/sprite
const u32 gBattleAnimSpriteGfx_CrossImpact[] = INCBIN_U32("graphics/battle_anims/sprites/cross_impact.4bpp.lz");
const u32 gBattleAnimSpritePal_CrossImpact[] = INCBIN_U32("graphics/battle_anims/sprites/cross_impact.gbapal.lz");
-const u32 gFile_graphics_battle_anims_backgrounds_water_sheet[] = INCBIN_U32("graphics/battle_anims/backgrounds/water.4bpp.lz");
-const u32 gFile_graphics_battle_anims_backgrounds_water_palette[] = INCBIN_U32("graphics/battle_anims/backgrounds/water.gbapal.lz");
-const u32 gFile_graphics_unknown_unknown_E81D14_tilemap[] = INCBIN_U32("graphics/unknown/unknown_E81D14.bin.lz");
-const u32 gFile_graphics_unknown_unknown_E81FE4_tilemap[] = INCBIN_U32("graphics/unknown/unknown_E81FE4.bin.lz");
-const u32 gFile_graphics_unknown_unknown_E822B8_tilemap[] = INCBIN_U32("graphics/unknown/unknown_E822B8.bin.lz");
+const u32 gBattleAnimBgImage_Surf[] = INCBIN_U32("graphics/battle_anims/backgrounds/water.4bpp.lz");
+const u32 gBattleAnimBgPalette_Surf[] = INCBIN_U32("graphics/battle_anims/backgrounds/water.gbapal.lz");
+
+// TODO Rename and move graphics
+const u32 gBattleAnimBgTilemap_SurfOpponent[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_opponent.bin.lz");
+const u32 gBattleAnimBgTilemap_SurfPlayer[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_player.bin.lz");
+const u32 gBattleAnimBgTilemap_SurfContest[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_contest.bin.lz");
const u32 gBattleAnimSpritePal_Slash2[] = INCBIN_U32("graphics/battle_anims/sprites/slash_2.gbapal.lz");
diff --git a/src/ground.c b/src/ground.c
index 423671112..5c4291623 100644
--- a/src/ground.c
+++ b/src/ground.c
@@ -538,7 +538,7 @@ static void AnimDigDirtMound(struct Sprite *sprite)
sprite->callback = WaitAnimForDuration;
}
-void sub_80B94B4(u8 taskId)
+void AnimTask_HorizontalShake(u8 taskId)
{
u16 i;
struct Task *task = &gTasks[taskId];
diff --git a/src/ice.c b/src/ice.c
index c00358357..9a0ef0a15 100644
--- a/src/ice.c
+++ b/src/ice.c
@@ -130,7 +130,7 @@ static const union AnimCmd *const gUnknown_83E632C[] =
gUnknown_83E6308,
};
-const union AnimCmd *const gUnknown_83E6330[] =
+const union AnimCmd *const gAnims_SmallBubblePair[] =
{
gUnknown_83E6310,
};
@@ -432,7 +432,7 @@ const struct SpriteTemplate gUnknown_83E65BC =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E65A0,
- .callback = sub_8077350,
+ .callback = AnimWeatherBallDown,
};
static const union AnimCmd gUnknown_83E65D4[] =
diff --git a/src/normal.c b/src/normal.c
index 5a4d98907..c20316942 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -186,7 +186,7 @@ const struct SpriteTemplate gUnknown_83E7C20 =
.callback = sub_80BA5F8,
};
-const struct SpriteTemplate gUnknown_83E7C38 =
+const struct SpriteTemplate gWaterHitSplatSpriteTemplate =
{
.tileTag = ANIM_TAG_WATER_IMPACT,
.paletteTag = ANIM_TAG_WATER_IMPACT,
diff --git a/src/poison.c b/src/poison.c
index af7f8ee86..250fbcac4 100644
--- a/src/poison.c
+++ b/src/poison.c
@@ -134,7 +134,7 @@ static const union AffineAnimCmd gUnknown_83E6A68[] =
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_83E6A80[] =
+const union AffineAnimCmd *const gAffineAnims_Droplet[] =
{
gUnknown_83E6A68,
};
@@ -146,7 +146,7 @@ const struct SpriteTemplate gUnknown_83E6A84 =
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gUnknown_83E69E0,
.images = NULL,
- .affineAnims = gUnknown_83E6A80,
+ .affineAnims = gAffineAnims_Droplet,
.callback = sub_80B17C4,
};
@@ -178,7 +178,7 @@ const struct SpriteTemplate gWaterBubbleSpriteTemplate =
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
- .anims = gUnknown_83E5A78,
+ .anims = gAnims_WaterBubble,
.images = NULL,
.affineAnims = gUnknown_83E6AB4,
.callback = AnimBubbleEffect,
diff --git a/src/rock.c b/src/rock.c
index a2d28d057..565ce9461 100644
--- a/src/rock.c
+++ b/src/rock.c
@@ -100,7 +100,7 @@ const struct SpriteTemplate gUnknown_83E7420 =
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
- .anims = gUnknown_83E5958,
+ .anims = gAnims_WaterMudOrb,
.images = NULL,
.affineAnims = gUnknown_83E741C,
.callback = sub_80B477C,
@@ -310,7 +310,7 @@ const struct SpriteTemplate gUnknown_83E7590 =
.anims = gUnknown_83E74B0,
.images = NULL,
.affineAnims = gUnknown_83E7540,
- .callback = sub_8077350,
+ .callback = AnimWeatherBallDown,
};
static void sub_80B4634(struct Sprite *sprite)
diff --git a/src/water.c b/src/water.c
new file mode 100644
index 000000000..31a4b32e7
--- /dev/null
+++ b/src/water.c
@@ -0,0 +1,2225 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "decompress.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "palette.h"
+#include "pokemon.h"
+#include "random.h"
+#include "scanline_effect.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "util.h"
+
+static void AnimRainDrop(struct Sprite *);
+static void AnimRainDrop_Step(struct Sprite *);
+static void AnimWaterBubbleProjectile(struct Sprite *);
+static void AnimWaterBubbleProjectile_Step1(struct Sprite *);
+static void AnimWaterBubbleProjectile_Step2(struct Sprite *);
+static void AnimWaterBubbleProjectile_Step3(struct Sprite *);
+static void AnimAuroraBeamRings(struct Sprite *);
+static void AnimAuroraBeamRings_Step(struct Sprite *);
+static void AnimToTargetInSinWave(struct Sprite *);
+static void AnimToTargetInSinWave_Step(struct Sprite *);
+static void AnimHydroCannonCharge(struct Sprite *);
+static void AnimHydroCannonCharge_Step(struct Sprite *);
+static void AnimHydroCannonBeam(struct Sprite *);
+static void AnimWaterGunDroplet(struct Sprite *);
+static void AnimSmallBubblePair(struct Sprite *);
+static void AnimSmallBubblePair_Step(struct Sprite *);
+static void AnimSmallDriftingBubbles(struct Sprite *);
+static void AnimSmallDriftingBubbles_Step(struct Sprite *);
+static void AnimSmallWaterOrb(struct Sprite *);
+static void AnimWaterSpoutRain(struct Sprite *);
+static void AnimWaterSpoutRainHit(struct Sprite *);
+static void AnimWaterSportDroplet(struct Sprite *);
+static void AnimWaterSportDroplet_Step(struct Sprite *);
+static void AnimWaterPulseBubble(struct Sprite *);
+static void AnimWaterPulseBubble_Step(struct Sprite *);
+static void AnimWaterPulseRingBubble(struct Sprite *);
+static void AnimWaterPulseRing_Step(struct Sprite *);
+static void AnimTask_RotateAuroraRingColors_Step(u8);
+static void AnimTask_RunSinAnimTimer(u8);
+static void AnimTask_CreateSurfWave_Step1(u8);
+static void AnimTask_CreateSurfWave_Step2(u8);
+static void AnimTask_SurfWaveScanlineEffect(u8);
+static void AnimTask_WaterSpoutLaunch_Step(u8);
+static void AnimTask_WaterSpoutRain_Step(u8);
+static u8 GetWaterSpoutPowerForAnim(void);
+static void CreateWaterSpoutLaunchDroplets(struct Task*, u8);
+static void CreateWaterSpoutRainDroplet(struct Task*, u8);
+static void AnimTask_WaterSport_Step(u8);
+static void CreateWaterSportDroplet(struct Task*);
+static void CreateWaterPulseRingBubbles(struct Sprite*, int, int);
+
+// Both unused? Comment copied from pokeemerald
+const u8 gUnknown_83E44F4[] = INCBIN_U8("graphics/battle_anims/unk_83E4874.4bpp");
+const u8 gUnknown_83E4874[] = INCBIN_U8("graphics/battle_anims/unk_83E4874.bin");
+
+static const union AnimCmd sAnim_RainDrop[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(8, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(24, 6),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(40, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sAnims_RainDrop[] =
+{
+ sAnim_RainDrop,
+};
+
+const struct SpriteTemplate gRainDropSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_RAIN_DROPS,
+ .paletteTag = ANIM_TAG_RAIN_DROPS,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = sAnims_RainDrop,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimRainDrop,
+};
+
+static const union AffineAnimCmd sAffineAnim_WaterBubbleProjectile[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 10),
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd *const sAffineAnims_WaterBubbleProjectile[] =
+{
+ sAffineAnim_WaterBubbleProjectile,
+};
+
+static const union AnimCmd sAnim_WaterBubbleProjectile[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sAnims_WaterBubbleProjectile[] =
+{
+ sAnim_WaterBubbleProjectile,
+};
+
+const struct SpriteTemplate gWaterBubbleProjectileSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_BUBBLE,
+ .paletteTag = ANIM_TAG_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = sAnims_WaterBubbleProjectile,
+ .images = NULL,
+ .affineAnims = sAffineAnims_WaterBubbleProjectile,
+ .callback = AnimWaterBubbleProjectile,
+};
+
+static const union AnimCmd sAnim_AuroraBeamRing_0[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sAnim_AuroraBeamRing_1[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sAnims_AuroraBeamRing[] =
+{
+ sAnim_AuroraBeamRing_0,
+ sAnim_AuroraBeamRing_1,
+};
+
+static const union AffineAnimCmd sAffineAnim_AuroraBeamRing[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1),
+ AFFINEANIMCMD_FRAME(0x60, 0x60, 0, 1),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const sAffineAnims_AuroraBeamRing[] =
+{
+ sAffineAnim_AuroraBeamRing,
+};
+
+const struct SpriteTemplate gAuroraBeamRingSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_RAINBOW_RINGS,
+ .paletteTag = ANIM_TAG_RAINBOW_RINGS,
+ .oam = &gOamData_AffineDouble_ObjNormal_8x16,
+ .anims = sAnims_AuroraBeamRing,
+ .images = NULL,
+ .affineAnims = sAffineAnims_AuroraBeamRing,
+ .callback = AnimAuroraBeamRings,
+};
+
+static const union AnimCmd sAnim_WaterMudOrb[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_FRAME(12, 1),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gAnims_WaterMudOrb[] =
+{
+ sAnim_WaterMudOrb,
+};
+
+const struct SpriteTemplate gHydroPumpOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
+ .anims = gAnims_WaterMudOrb,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimToTargetInSinWave,
+};
+
+const struct SpriteTemplate gMudShotOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_BROWN_ORB,
+ .paletteTag = ANIM_TAG_BROWN_ORB,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
+ .anims = gAnims_WaterMudOrb,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimToTargetInSinWave,
+};
+
+const struct SpriteTemplate gSignalBeamRedOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_GLOWY_RED_ORB,
+ .paletteTag = ANIM_TAG_GLOWY_RED_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimToTargetInSinWave,
+};
+
+const struct SpriteTemplate gSignalBeamGreenOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_GLOWY_GREEN_ORB,
+ .paletteTag = ANIM_TAG_GLOWY_GREEN_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimToTargetInSinWave,
+};
+
+static const union AnimCmd sAnim_FlamethrowerFlame[] =
+{
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const sAnims_FlamethrowerFlame[] =
+{
+ sAnim_FlamethrowerFlame,
+};
+
+const struct SpriteTemplate gFlamethrowerFlameSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = sAnims_FlamethrowerFlame,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimToTargetInSinWave,
+};
+
+const struct SpriteTemplate gPsywaveRingSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_BLUE_RING,
+ .paletteTag = ANIM_TAG_BLUE_RING,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gGrowingRingAffineAnimTable,
+ .callback = AnimToTargetInSinWave,
+};
+
+static const union AffineAnimCmd sAffineAnim_HydroCannonCharge[] =
+{
+ AFFINEANIMCMD_FRAME(0x3, 0x3, 10, 50),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFEC, 0xFFEC, -10, 20),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sAffineAnim_HydroCannonBeam[] =
+{
+ AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const sAffineAnims_HydroCannonCharge[] =
+{
+ sAffineAnim_HydroCannonCharge,
+};
+
+static const union AffineAnimCmd *const sAffineAnims_HydroCannonBeam[] =
+{
+ sAffineAnim_HydroCannonBeam,
+};
+
+const struct SpriteTemplate gHydroCannonChargeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineDouble_ObjBlend_16x16,
+ .anims = gAnims_WaterMudOrb,
+ .images = NULL,
+ .affineAnims = sAffineAnims_HydroCannonCharge,
+ .callback = AnimHydroCannonCharge,
+};
+
+const struct SpriteTemplate gHydroCannonBeamSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineDouble_ObjBlend_16x16,
+ .anims = gAnims_WaterMudOrb,
+ .images = NULL,
+ .affineAnims = sAffineAnims_HydroCannonBeam,
+ .callback = AnimHydroCannonBeam,
+};
+
+static const union AnimCmd sAnim_WaterBubble[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sAnim_WaterGunDroplet[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gAnims_WaterBubble[] =
+{
+ sAnim_WaterBubble,
+};
+
+static const union AnimCmd *const sAnims_WaterGunDroplet[] =
+{
+ sAnim_WaterGunDroplet,
+};
+
+const struct SpriteTemplate gWaterGunProjectileSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_BUBBLES,
+ .paletteTag = ANIM_TAG_SMALL_BUBBLES,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
+ .anims = gAnims_WaterBubble,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimThrowProjectile,
+};
+
+const struct SpriteTemplate gWaterGunDropletSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_BUBBLES,
+ .paletteTag = ANIM_TAG_SMALL_BUBBLES,
+ .oam = &gOamData_AffineDouble_ObjBlend_16x16,
+ .anims = sAnims_WaterGunDroplet,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Droplet,
+ .callback = AnimWaterGunDroplet,
+};
+
+const struct SpriteTemplate gSmallBubblePairSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS, // ice_crystals_4, which are bubbles
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gAnims_SmallBubblePair,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSmallBubblePair,
+};
+
+const struct SpriteTemplate gSmallDriftingBubblesSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_BUBBLES,
+ .paletteTag = ANIM_TAG_SMALL_BUBBLES,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSmallDriftingBubbles,
+};
+
+// Used by Water Spout / Water Sport
+const struct SpriteTemplate gSmallWaterOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_GLOWY_BLUE_ORB,
+ .paletteTag = ANIM_TAG_GLOWY_BLUE_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSmallWaterOrb,
+};
+
+static const union AnimCmd sAnim_WaterPulseBubble_0[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sAnim_WaterPulseBubble_1[] =
+{
+ ANIMCMD_FRAME(9, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sAnim_WeatherBallWaterDown[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sAnims_WaterPulseBubble[] =
+{
+ sAnim_WaterPulseBubble_0,
+ sAnim_WaterPulseBubble_1,
+};
+
+static const union AnimCmd *const sAnims_WeatherBallWaterDown[] =
+{
+ sAnim_WeatherBallWaterDown,
+};
+
+static const union AffineAnimCmd sAffineAnim_WaterPulseRingBubble_0[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sAffineAnim_WaterPulseRingBubble_1[] =
+{
+ AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sAffineAnim_WeatherBallWaterDown[] =
+{
+ AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const sAffineAnims_WaterPulseRingBubble[] =
+{
+ sAffineAnim_WaterPulseRingBubble_0,
+ sAffineAnim_WaterPulseRingBubble_1,
+};
+
+static const union AffineAnimCmd *const sAffineAnims_WeatherBallWaterDown[] =
+{
+ sAffineAnim_WeatherBallWaterDown,
+};
+
+const struct SpriteTemplate gWaterPulseBubbleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_BUBBLES,
+ .paletteTag = ANIM_TAG_SMALL_BUBBLES,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_WaterPulseBubble,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimWaterPulseBubble,
+};
+
+const struct SpriteTemplate gWaterPulseRingBubbleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_BUBBLES,
+ .paletteTag = ANIM_TAG_SMALL_BUBBLES,
+ .oam = &gOamData_AffineNormal_ObjNormal_8x8,
+ .anims = sAnims_WaterPulseBubble,
+ .images = NULL,
+ .affineAnims = sAffineAnims_WaterPulseRingBubble,
+ .callback = AnimWaterPulseRingBubble,
+};
+
+const struct SpriteTemplate gWeatherBallWaterDownSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_BUBBLES,
+ .paletteTag = ANIM_TAG_SMALL_BUBBLES,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = sAnims_WeatherBallWaterDown,
+ .images = NULL,
+ .affineAnims = sAffineAnims_WeatherBallWaterDown,
+ .callback = AnimWeatherBallDown,
+};
+
+void AnimTask_CreateRaindrops(u8 taskId)
+{
+ u8 x, y;
+
+ if (gTasks[taskId].data[0] == 0)
+ {
+ gTasks[taskId].data[1] = gBattleAnimArgs[0];
+ gTasks[taskId].data[2] = gBattleAnimArgs[1];
+ gTasks[taskId].data[3] = gBattleAnimArgs[2];
+ }
+ gTasks[taskId].data[0]++;
+ if (gTasks[taskId].data[0] % gTasks[taskId].data[2] == 1)
+ {
+ x = Random() % 240;
+ y = Random() % 80;
+ CreateSprite(&gRainDropSpriteTemplate, x, y, 4);
+ }
+ if (gTasks[taskId].data[0] == gTasks[taskId].data[3])
+ DestroyAnimVisualTask(taskId);
+}
+
+static void AnimRainDrop(struct Sprite *sprite) {
+ sprite->callback = AnimRainDrop_Step;
+}
+
+static void AnimRainDrop_Step(struct Sprite *sprite) {
+ if (++sprite->data[0] < 14) // Was 13 in emerald
+ {
+ sprite->pos2.x += 1;
+ sprite->pos2.y += 4;
+ }
+ if (sprite->animEnded)
+ {
+ DestroySprite(sprite);
+ }
+}
+
+// For water bubbles that move to a dest, as in Bubble/Bubblebeam
+static void AnimWaterBubbleProjectile(struct Sprite *sprite)
+{
+ u8 spriteId;
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) - gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1];
+ sprite->animPaused = TRUE;
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1];
+ sprite->animPaused = TRUE;
+ }
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ sprite->data[0] = gBattleAnimArgs[6];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ InitAnimLinearTranslation(sprite);
+ spriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ sprite->data[5] = spriteId;
+ sprite->pos1.x -= Sin((u8)gBattleAnimArgs[4], gBattleAnimArgs[2]);
+ sprite->pos1.y -= Cos((u8)gBattleAnimArgs[4], gBattleAnimArgs[3]);
+ gSprites[spriteId].data[0] = gBattleAnimArgs[2];
+ gSprites[spriteId].data[1] = gBattleAnimArgs[3];
+ gSprites[spriteId].data[2] = gBattleAnimArgs[5];
+ gSprites[spriteId].data[3] = (u8)gBattleAnimArgs[4] * 256;
+ gSprites[spriteId].data[4] = gBattleAnimArgs[6];
+ sprite->callback = AnimWaterBubbleProjectile_Step1;
+ sprite->callback(sprite);
+}
+
+static void AnimWaterBubbleProjectile_Step1(struct Sprite *sprite)
+{
+ u8 otherSpriteId = sprite->data[5];
+ u8 timer = gSprites[otherSpriteId].data[4];
+ u16 trigIndex = gSprites[otherSpriteId].data[3];
+
+ sprite->data[0] = 1;
+ AnimTranslateLinear(sprite);
+ sprite->pos2.x += Sin(trigIndex >> 8, gSprites[otherSpriteId].data[0]);
+ sprite->pos2.y += Cos(trigIndex >> 8, gSprites[otherSpriteId].data[1]);
+ gSprites[otherSpriteId].data[3] = trigIndex + gSprites[otherSpriteId].data[2];
+ if (--timer != 0)
+ {
+ gSprites[otherSpriteId].data[4] = timer;
+ }
+ else
+ {
+ sprite->callback = AnimWaterBubbleProjectile_Step2;
+ DestroySprite(&gSprites[otherSpriteId]);
+ }
+}
+
+static void AnimWaterBubbleProjectile_Step2(struct Sprite *sprite)
+{
+ sprite->animPaused = FALSE;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ StoreSpriteCallbackInData6(sprite, AnimWaterBubbleProjectile_Step3);
+}
+
+static void AnimWaterBubbleProjectile_Step3(struct Sprite *sprite)
+{
+ sprite->data[0] = 10;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+}
+
+static void AnimAuroraBeamRings(struct Sprite *sprite)
+{
+ s16 unkArg;
+
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ unkArg = -gBattleAnimArgs[2];
+ else
+ unkArg = gBattleAnimArgs[2];
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + unkArg;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = AnimAuroraBeamRings_Step;
+ sprite->affineAnimPaused = TRUE;
+ sprite->callback(sprite);
+}
+
+static void AnimAuroraBeamRings_Step(struct Sprite *sprite)
+{
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->affineAnimPaused = FALSE;
+ }
+ if (AnimTranslateLinear(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+// Updates the palette on the rainbow rings used in Aurora Beam to make them appear to be rotating counterclockwise
+void AnimTask_RotateAuroraRingColors(u8 taskId)
+{
+ gTasks[taskId].data[0] = gBattleAnimArgs[0];
+ gTasks[taskId].data[2] = IndexOfSpritePaletteTag(ANIM_TAG_RAINBOW_RINGS) * 16 + 256;
+ gTasks[taskId].func = AnimTask_RotateAuroraRingColors_Step;
+}
+
+#ifdef NONMATCHING
+static void AnimTask_RotateAuroraRingColors_Step(u8 taskId)
+{
+ int i;
+ u16 palIndex;
+ u16 *palPtr1;
+ u16 *palPtr2;
+ u16 rgbBuffer;
+
+ if (++gTasks[taskId].data[10] == 3)
+ {
+ gTasks[taskId].data[10] = 0;
+ palIndex = gTasks[taskId].data[2] + 1;
+ palPtr1 = &gPlttBufferFaded[palIndex];
+ rgbBuffer = *palPtr1;
+ palPtr2 = &palPtr1[1];
+ for (i = 0; i < 7; i++)
+ palPtr1[i] = palPtr2[i];
+ gPlttBufferFaded[palIndex + 7] = rgbBuffer;
+ }
+ if (++gTasks[taskId].data[11] == gTasks[taskId].data[0])
+ DestroyAnimVisualTask(taskId);
+}
+#else
+NAKED
+static void AnimTask_RotateAuroraRingColors_Step(u8 taskId)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ ldr r1, =gTasks\n\
+ lsls r0, r4, 2\n\
+ adds r0, r4\n\
+ lsls r0, 3\n\
+ adds r2, r0, r1\n\
+ ldrh r0, [r2, 0x1C]\n\
+ adds r0, 0x1\n\
+ strh r0, [r2, 0x1C]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ mov r12, r1\n\
+ cmp r0, 0x3\n\
+ bne _081075BE\n\
+ movs r0, 0\n\
+ strh r0, [r2, 0x1C]\n\
+ ldrh r0, [r2, 0xC]\n\
+ adds r0, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ ldr r1, =gPlttBufferFaded\n\
+ lsls r0, r5, 1\n\
+ adds r0, r1\n\
+ ldrh r6, [r0]\n\
+ adds r7, r1, 0\n\
+ adds r3, r0, 0x2\n\
+ movs r1, 0x6\n\
+ adds r2, r0, 0\n\
+_081075A8:\n\
+ ldrh r0, [r3]\n\
+ strh r0, [r2]\n\
+ adds r3, 0x2\n\
+ adds r2, 0x2\n\
+ subs r1, 0x1\n\
+ cmp r1, 0\n\
+ bge _081075A8\n\
+ adds r0, r5, 0x7\n\
+ lsls r0, 1\n\
+ adds r0, r7\n\
+ strh r6, [r0]\n\
+_081075BE:\n\
+ lsls r0, r4, 2\n\
+ adds r0, r4\n\
+ lsls r0, 3\n\
+ add r0, r12\n\
+ ldrh r1, [r0, 0x1E]\n\
+ adds r1, 0x1\n\
+ strh r1, [r0, 0x1E]\n\
+ lsls r1, 16\n\
+ asrs r1, 16\n\
+ movs r2, 0x8\n\
+ ldrsh r0, [r0, r2]\n\
+ cmp r1, r0\n\
+ bne _081075DE\n\
+ adds r0, r4, 0\n\
+ bl DestroyAnimVisualTask\n\
+_081075DE:\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n");
+}
+#endif
+
+// For animating undulating beam attacks (e.g. Flamethrower, Hydro Pump, Signal Beam)
+static void AnimToTargetInSinWave(struct Sprite *sprite)
+{
+ u16 retArg;
+
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[0] = 30;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = 0xD200 / sprite->data[0];
+ sprite->data[7] = gBattleAnimArgs[3];
+ retArg = gBattleAnimArgs[7];
+ if (gBattleAnimArgs[7] > 127)
+ {
+ sprite->data[6] = (retArg - 127) * 256;
+ sprite->data[7] = -sprite->data[7];
+ }
+ else
+ {
+ sprite->data[6] = retArg * 256;
+ }
+ sprite->callback = AnimToTargetInSinWave_Step;
+ sprite->callback(sprite);
+}
+
+static void AnimToTargetInSinWave_Step(struct Sprite *sprite)
+{
+ if (AnimTranslateLinear(sprite))
+ DestroyAnimSprite(sprite);
+ sprite->pos2.y += Sin(sprite->data[6] >> 8, sprite->data[7]);
+ if ((sprite->data[6] + sprite->data[5]) >> 8 > 127)
+ {
+ sprite->data[6] = 0;
+ sprite->data[7] = -sprite->data[7];
+ }
+ else
+ {
+ sprite->data[6] += sprite->data[5];
+ }
+}
+
+void AnimTask_StartSinAnimTimer(u8 taskId)
+{
+ gTasks[taskId].data[0] = gBattleAnimArgs[0];
+ gBattleAnimArgs[7] = 0;
+ gTasks[taskId].func = AnimTask_RunSinAnimTimer;
+}
+
+static void AnimTask_RunSinAnimTimer(u8 taskId)
+{
+ gBattleAnimArgs[7] = (gBattleAnimArgs[7] + 3) & 0xFF;
+ if (--gTasks[taskId].data[0] == 0)
+ DestroyAnimVisualTask(taskId);
+}
+
+// Flashing blue orbs grow in size near the attacker. First stage of Hydro Cannon
+static void AnimHydroCannonCharge(struct Sprite *sprite)
+{
+ u8 priority;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ sprite->pos2.y = -10;
+ priority = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
+ if (!IsContest())
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ sprite->pos2.x = 10;
+ sprite->subpriority = priority + 2;
+ }
+ else
+ {
+ sprite->pos2.x = -10;
+ sprite->subpriority = priority - 2;
+ }
+ }
+ else
+ {
+ sprite->pos2.x = -10;
+ sprite->subpriority = priority + 2;
+ }
+ sprite->callback = AnimHydroCannonCharge_Step;
+}
+
+static void AnimHydroCannonCharge_Step(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ DestroyAnimSprite(sprite);
+}
+
+// Flashing blue orbs move from the attacker to the target. Second stage of Hydro Cannon
+static void AnimHydroCannonBeam(struct Sprite *sprite)
+{
+ bool8 animType;
+ u8 coordType;
+ if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
+ {
+ gBattleAnimArgs[0] *= -1;
+ if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT)
+ gBattleAnimArgs[0] *= -1;
+ }
+ if ((gBattleAnimArgs[5] & 0xFF00) == 0)
+ animType = TRUE;
+ else
+ animType = FALSE;
+ if ((u8)gBattleAnimArgs[5] == 0)
+ coordType = 3;
+ else
+ coordType = 1;
+ InitSpritePosToAnimAttacker(sprite, animType);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + gBattleAnimArgs[3];
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// Water droplet appears and drips down. Used by Water Gun on impact
+static void AnimWaterGunDroplet(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
+ sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[4];
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+static void AnimSmallBubblePair(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[3] != ANIM_ATTACKER)
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ else
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[7] = gBattleAnimArgs[2];
+ sprite->callback = AnimSmallBubblePair_Step;
+}
+
+static void AnimSmallBubblePair_Step(struct Sprite *sprite)
+{
+ sprite->data[0] = (sprite->data[0] + 11) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[0], 4);
+ sprite->data[1] += 48;
+ sprite->pos2.y = -(sprite->data[1] >> 8);
+ if (--sprite->data[7] == -1)
+ DestroyAnimSprite(sprite);
+}
+
+#ifdef NONMATCHING
+void AnimTask_CreateSurfWave(u8 taskId)
+{
+ struct BattleAnimBgData animBg;
+ u8 taskId2;
+
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1);
+ sub_80752A0(&animBg);
+ if (!IsContest())
+ {
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimBgTilemap_SurfOpponent);
+ else
+ AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimBgTilemap_SurfPlayer);
+ }
+ else
+ {
+ // Changed from Emerald
+ LZDecompressVram(gBattleAnimBgTilemap_SurfContest, animBg->bgTilemap);
+ sub_80730C0(animBg.paletteId, animBg.bgTilemap, 0, 1);
+ }
+ AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Surf, animBg.tilesOffset);
+ if (gBattleAnimArgs[0] == 0)
+ LoadCompressedPalette(gBattleAnimBgPalette_Surf, animBg.paletteId * 16, 32);
+ else
+ LoadCompressedPalette(gBattleAnimBgPalette_MuddyWater, animBg.paletteId * 16, 32);
+ taskId2 = CreateTask(AnimTask_SurfWaveScanlineEffect, gTasks[taskId].priority + 1);
+ gTasks[taskId].data[15] = taskId2;
+ gTasks[taskId2].data[0] = 0;
+ gTasks[taskId2].data[1] = 0x1000;
+ gTasks[taskId2].data[2] = 0x1000;
+ if (IsContest())
+ {
+ gBattle_BG1_X = -80;
+ gBattle_BG1_Y = -48;
+ gTasks[taskId].data[0] = 2;
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId2].data[3] = 0;
+ }
+ else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ {
+ gBattle_BG1_X = -224;
+ gBattle_BG1_Y = 256;
+ gTasks[taskId].data[0] = 2;
+ gTasks[taskId].data[1] = -1;
+ gTasks[taskId2].data[3] = 1;
+ }
+ else
+ {
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = -48;
+ gTasks[taskId].data[0] = -2;
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId2].data[3] = 0;
+ }
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ if (gTasks[taskId2].data[3] == 0)
+ {
+ gTasks[taskId2].data[4] = 48;
+ gTasks[taskId2].data[5] = 112;
+ }
+ else
+ {
+ gTasks[taskId2].data[4] = 0;
+ gTasks[taskId2].data[5] = 0;
+ }
+ gTasks[taskId].data[6] = 1;
+ gTasks[taskId].func = AnimTask_CreateSurfWave_Step1;
+}
+#else
+NAKED
+void AnimTask_CreateSurfWave(u8 taskId)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x10\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r10, r0\n\
+ ldr r1, =0x00003f42\n\
+ movs r0, 0x50\n\
+ bl SetGpuReg\n\
+ movs r1, 0x80\n\
+ lsls r1, 5\n\
+ movs r0, 0x52\n\
+ bl SetGpuReg\n\
+ movs r0, 0x1\n\
+ movs r1, 0x4\n\
+ movs r2, 0x1\n\
+ bl SetAnimBgAttribute\n\
+ movs r0, 0x1\n\
+ movs r1, 0\n\
+ movs r2, 0x1\n\
+ bl SetAnimBgAttribute\n\
+ mov r0, sp\n\
+ bl sub_80752A0\n\
+ bl IsContest\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _081079E0\n\
+ movs r0, 0x1\n\
+ movs r1, 0x3\n\
+ movs r2, 0x1\n\
+ bl SetAnimBgAttribute\n\
+ ldr r0, =gBattleAnimAttacker\n\
+ ldrb r0, [r0]\n\
+ bl GetBattlerSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _081079D0\n\
+ mov r0, sp\n\
+ ldrb r0, [r0, 0x9]\n\
+ ldr r1, =gBattleAnimBgTilemap_SurfOpponent\n\
+ bl AnimLoadCompressedBgTilemap\n\
+ b _081079EA\n\
+ .pool\n\
+_081079D0:\n\
+ mov r0, sp\n\
+ ldrb r0, [r0, 0x9]\n\
+ ldr r1, =gBattleAnimBgTilemap_SurfPlayer\n\
+ bl AnimLoadCompressedBgTilemap\n\
+ b _081079EA\n\
+ .pool\n\
+_081079E0:\n\
+ ldr r0, =gBattleAnimBgTilemap_SurfContest\n\
+ ldr r1, [sp, 0x4]\n\
+ bl LZDecompressVram\n\
+ mov r0, sp\n\
+ ldrb r0, [r0, 0x8]\n\
+ ldr r1, [sp, 0x4]\n\
+ movs r2, 0\n\
+ movs r3, 0x1\n\
+ bl sub_80730C0\n\
+_081079EA:\n\
+ mov r0, sp\n\
+ ldrb r0, [r0, 0x9]\n\
+ ldr r1, =gBattleAnimBgImage_Surf\n\
+ mov r2, sp\n\
+ ldrh r2, [r2, 0xA]\n\
+ bl AnimLoadCompressedBgGfx\n\
+ ldr r0, =gBattleAnimArgs\n\
+ movs r1, 0\n\
+ ldrsh r0, [r0, r1]\n\
+ cmp r0, 0\n\
+ bne _08107A24\n\
+ ldr r0, =gBattleAnimBgPalette_Surf\n\
+ mov r1, sp\n\
+ ldrb r1, [r1, 0x8]\n\
+ lsls r1, 4\n\
+ movs r2, 0x20\n\
+ bl LoadCompressedPalette\n\
+ b _08107A32\n\
+ .pool\n\
+_08107A24:\n\
+ ldr r0, =gBattleAnimBgPalette_MuddyWater\n\
+ mov r1, sp\n\
+ ldrb r1, [r1, 0x8]\n\
+ lsls r1, 4\n\
+ movs r2, 0x20\n\
+ bl LoadCompressedPalette\n\
+_08107A32:\n\
+ ldr r0, =AnimTask_SurfWaveScanlineEffect\n\
+ ldr r4, =gTasks\n\
+ mov r2, r10\n\
+ lsls r5, r2, 2\n\
+ adds r1, r5, r2\n\
+ lsls r1, 3\n\
+ adds r6, r1, r4\n\
+ ldrb r1, [r6, 0x7]\n\
+ adds r1, 0x1\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ bl CreateTask\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ movs r0, 0\n\
+ mov r9, r0\n\
+ mov r1, r8\n\
+ strh r1, [r6, 0x26]\n\
+ mov r2, r8\n\
+ lsls r0, r2, 2\n\
+ add r0, r8\n\
+ lsls r0, 3\n\
+ adds r7, r0, r4\n\
+ mov r0, r9\n\
+ strh r0, [r7, 0x8]\n\
+ movs r0, 0x80\n\
+ lsls r0, 5\n\
+ strh r0, [r7, 0xA]\n\
+ strh r0, [r7, 0xC]\n\
+ bl IsContest\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0\n\
+ beq _08107AB4\n\
+ ldr r1, =0x0000ffb0\n\
+ adds r0, r1, 0\n\
+ ldr r2, =gBattle_BG1_X\n\
+ strh r0, [r2]\n\
+ adds r1, 0x20\n\
+ adds r0, r1, 0\n\
+ ldr r2, =gBattle_BG1_Y\n\
+ strh r0, [r2]\n\
+ movs r0, 0x2\n\
+ strh r0, [r6, 0x8]\n\
+ movs r0, 0x1\n\
+ strh r0, [r6, 0xA]\n\
+ mov r0, r9\n\
+ strh r0, [r7, 0xE]\n\
+ b _08107B0E\n\
+ .pool\n\
+_08107AB4:\n\
+ ldr r0, =gBattleAnimAttacker\n\
+ ldrb r0, [r0]\n\
+ bl GetBattlerSide\n\
+ lsls r0, 24\n\
+ lsrs r1, r0, 24\n\
+ cmp r1, 0x1\n\
+ bne _08107AF8\n\
+ ldr r2, =0x0000ff20\n\
+ adds r0, r2, 0\n\
+ ldr r2, =gBattle_BG1_X\n\
+ strh r0, [r2]\n\
+ movs r2, 0x80\n\
+ lsls r2, 1\n\
+ adds r0, r2, 0\n\
+ ldr r2, =gBattle_BG1_Y\n\
+ strh r0, [r2]\n\
+ movs r0, 0x2\n\
+ strh r0, [r6, 0x8]\n\
+ ldr r0, =0x0000ffff\n\
+ strh r0, [r6, 0xA]\n\
+ strh r1, [r7, 0xE]\n\
+ b _08107B0E\n\
+ .pool\n\
+_08107AF8:\n\
+ ldr r0, =gBattle_BG1_X\n\
+ strh r4, [r0]\n\
+ ldr r1, =0x0000ffd0\n\
+ adds r0, r1, 0\n\
+ ldr r2, =gBattle_BG1_Y\n\
+ strh r0, [r2]\n\
+ ldr r0, =0x0000fffe\n\
+ strh r0, [r6, 0x8]\n\
+ movs r0, 0x1\n\
+ strh r0, [r6, 0xA]\n\
+ strh r4, [r7, 0xE]\n\
+_08107B0E:\n\
+ ldr r0, =gBattle_BG1_X\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x14\n\
+ bl SetGpuReg\n\
+ ldr r2, =gBattle_BG1_Y\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x16\n\
+ bl SetGpuReg\n\
+ ldr r1, =gTasks\n\
+ mov r2, r8\n\
+ lsls r0, r2, 2\n\
+ add r0, r8\n\
+ lsls r0, 3\n\
+ adds r1, r0, r1\n\
+ movs r2, 0xE\n\
+ ldrsh r0, [r1, r2]\n\
+ cmp r0, 0\n\
+ bne _08107B54\n\
+ movs r0, 0x30\n\
+ strh r0, [r1, 0x10]\n\
+ movs r0, 0x70\n\
+ b _08107B58\n\
+ .pool\n\
+_08107B54:\n\
+ movs r0, 0\n\
+ strh r0, [r1, 0x10]\n\
+_08107B58:\n\
+ strh r0, [r1, 0x12]\n\
+ ldr r1, =gTasks\n\
+ mov r2, r10\n\
+ adds r0, r5, r2\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ movs r1, 0x1\n\
+ strh r1, [r0, 0x14]\n\
+ ldr r1, =AnimTask_CreateSurfWave_Step1\n\
+ str r1, [r0]\n\
+ add sp, 0x10\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n");
+}
+#endif
+
+#ifdef NONMATCHING
+static void AnimTask_CreateSurfWave_Step1(u8 taskId)
+{
+ struct BattleAnimBgData animBg;
+ u8 i;
+ u16 rgbBuffer;
+ u16 *BGptrX = &gBattle_BG1_X;
+ u16 *BGptrY = &gBattle_BG1_Y;
+ s16 unkUse;
+ u32 palOffset;
+ u16 palNum;
+
+ *BGptrX += gTasks[taskId].data[0];
+ *BGptrY += gTasks[taskId].data[1];
+ sub_80752A0(&animBg);
+ gTasks[taskId].data[2] += gTasks[taskId].data[1];
+ if (++gTasks[taskId].data[5] == 4)
+ {
+ rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7];
+ for (i = 6; i != 0; i--)
+ {
+ palNum = animBg.paletteId * 16;
+ palOffset = 1 + i;
+ gPlttBufferFaded[palNum + palOffset] = gPlttBufferFaded[palNum + palOffset - 1];
+ }
+ gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer;
+ gTasks[taskId].data[5] = 0;
+ }
+ if (++gTasks[taskId].data[6] > 1)
+ {
+ gTasks[taskId].data[6] = 0;
+ unkUse = ++gTasks[taskId].data[3];
+ if (unkUse <= 13)
+ {
+ gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256);
+ gTasks[taskId].data[4]++;
+ }
+ if (gTasks[taskId].data[3] > 54)
+ {
+ unkUse = --gTasks[taskId].data[4];
+ gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256);
+ }
+ }
+ if (!(gTasks[gTasks[taskId].data[15]].data[1] & 0x1F))
+ {
+ gTasks[taskId].data[0] = gTasks[gTasks[taskId].data[15]].data[1] & 0x1F;
+ gTasks[taskId].func = AnimTask_CreateSurfWave_Step2;
+ }
+}
+#else
+NAKED
+static void AnimTask_CreateSurfWave_Step1(u8 taskId)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ sub sp, 0x10\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ ldr r1, =gBattle_BG1_X\n\
+ ldr r2, =gBattle_BG1_Y\n\
+ ldr r0, =gTasks\n\
+ lsls r4, r5, 2\n\
+ adds r4, r5\n\
+ lsls r4, 3\n\
+ adds r4, r0\n\
+ ldrh r0, [r4, 0x8]\n\
+ ldrh r3, [r1]\n\
+ adds r0, r3\n\
+ strh r0, [r1]\n\
+ ldrh r0, [r4, 0xA]\n\
+ ldrh r1, [r2]\n\
+ adds r0, r1\n\
+ strh r0, [r2]\n\
+ mov r0, sp\n\
+ bl sub_80752A0\n\
+ ldrh r0, [r4, 0xA]\n\
+ ldrh r3, [r4, 0xC]\n\
+ adds r0, r3\n\
+ strh r0, [r4, 0xC]\n\
+ ldrh r0, [r4, 0x12]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x12]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x4\n\
+ bne _08107C18\n\
+ ldr r1, =gPlttBufferFaded\n\
+ mov r0, sp\n\
+ ldrb r0, [r0, 0x8]\n\
+ lsls r0, 4\n\
+ adds r0, 0x7\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r6, [r0]\n\
+ movs r2, 0x6\n\
+ adds r7, r1, 0\n\
+ adds r3, r7, 0\n\
+ mov r4, sp\n\
+_08107BDE:\n\
+ ldrb r0, [r4, 0x8]\n\
+ lsls r0, 4\n\
+ adds r1, r2, 0x1\n\
+ adds r0, r1\n\
+ lsls r1, r0, 1\n\
+ adds r1, r3\n\
+ subs r0, 0x1\n\
+ lsls r0, 1\n\
+ adds r0, r3\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r1]\n\
+ subs r0, r2, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ cmp r2, 0\n\
+ bne _08107BDE\n\
+ mov r0, sp\n\
+ ldrb r0, [r0, 0x8]\n\
+ lsls r0, 4\n\
+ adds r0, 0x1\n\
+ lsls r0, 1\n\
+ adds r0, r7\n\
+ strh r6, [r0]\n\
+ ldr r1, =gTasks\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ strh r2, [r0, 0x12]\n\
+_08107C18:\n\
+ ldr r1, =gTasks\n\
+ lsls r2, r5, 2\n\
+ adds r0, r2, r5\n\
+ lsls r0, 3\n\
+ adds r3, r0, r1\n\
+ ldrh r0, [r3, 0x14]\n\
+ adds r0, 0x1\n\
+ strh r0, [r3, 0x14]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ adds r4, r1, 0\n\
+ adds r6, r2, 0\n\
+ cmp r0, 0x1\n\
+ ble _08107C86\n\
+ movs r0, 0\n\
+ strh r0, [r3, 0x14]\n\
+ ldrh r0, [r3, 0xE]\n\
+ adds r2, r0, 0x1\n\
+ strh r2, [r3, 0xE]\n\
+ lsls r0, r2, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0xD\n\
+ bgt _08107C62\n\
+ movs r1, 0x26\n\
+ ldrsh r0, [r3, r1]\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 3\n\
+ adds r1, r4\n\
+ movs r0, 0x10\n\
+ subs r0, r2\n\
+ lsls r0, 8\n\
+ orrs r2, r0\n\
+ strh r2, [r1, 0xA]\n\
+ ldrh r0, [r3, 0x10]\n\
+ adds r0, 0x1\n\
+ strh r0, [r3, 0x10]\n\
+_08107C62:\n\
+ movs r1, 0xE\n\
+ ldrsh r0, [r3, r1]\n\
+ cmp r0, 0x36\n\
+ ble _08107C86\n\
+ ldrh r2, [r3, 0x10]\n\
+ subs r2, 0x1\n\
+ strh r2, [r3, 0x10]\n\
+ movs r1, 0x26\n\
+ ldrsh r0, [r3, r1]\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 3\n\
+ adds r1, r4\n\
+ movs r0, 0x10\n\
+ subs r0, r2\n\
+ lsls r0, 8\n\
+ orrs r2, r0\n\
+ strh r2, [r1, 0xA]\n\
+_08107C86:\n\
+ adds r0, r6, r5\n\
+ lsls r0, 3\n\
+ adds r2, r0, r4\n\
+ movs r3, 0x26\n\
+ ldrsh r1, [r2, r3]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r0, r4\n\
+ ldrh r0, [r0, 0xA]\n\
+ movs r3, 0x1F\n\
+ ands r3, r0\n\
+ cmp r3, 0\n\
+ bne _08107CA8\n\
+ strh r3, [r2, 0x8]\n\
+ ldr r0, =AnimTask_CreateSurfWave_Step2\n\
+ str r0, [r2]\n\
+_08107CA8:\n\
+ add sp, 0x10\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n");
+}
+#endif
+
+static void AnimTask_CreateSurfWave_Step2(u8 taskId)
+{
+ u16 *BGptrX = &gBattle_BG1_X;
+ u16 *BGptrY = &gBattle_BG1_Y;
+ if (gTasks[taskId].data[0] == 0)
+ {
+ sub_8075358(1);
+ sub_8075358(2);
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+ *BGptrX = 0;
+ *BGptrY = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
+ gTasks[gTasks[taskId].data[15]].data[15] = -1;
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+static void AnimTask_SurfWaveScanlineEffect(u8 taskId)
+{
+ s16 i;
+ struct ScanlineEffectParams params;
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ for (i = 0; i < task->data[4]; i++)
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
+ for (i = task->data[4]; i < task->data[5]; i++)
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[1];
+ for (i = task->data[5]; i < 160; i++)
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
+
+ if (task->data[4] == 0)
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[1];
+ else
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
+
+ params.dmaDest = (vu16 *)REG_ADDR_BLDALPHA;
+ params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ params.initState = 1;
+ params.unused9 = 0;
+ ScanlineEffect_SetParams(params);
+ task->data[0]++;
+ break;
+ case 1:
+ if (task->data[3] == 0)
+ {
+ if (--task->data[4] <= 0)
+ {
+ task->data[4] = 0;
+ task->data[0]++;
+ }
+ }
+ else if (++task->data[5] > 111)
+ {
+ task->data[0]++;
+ }
+
+ for (i = 0; i < task->data[4]; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
+ for (i = task->data[4]; i < task->data[5]; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[1];
+ for (i = task->data[5]; i < 160; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
+ break;
+ case 2:
+ for (i = 0; i < task->data[4]; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
+ for (i = task->data[4]; i < task->data[5]; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[1];
+ for (i = task->data[5]; i < 160; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
+
+ if (task->data[15] == -1)
+ {
+ ScanlineEffect_Stop();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+static void AnimSmallDriftingBubbles(struct Sprite *sprite)
+{
+ s16 randData;
+ s16 randData2;
+
+ sprite->oam.tileNum += 8;
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ randData = (Random() & 0xFF) | 256;
+ randData2 = (Random() & 0x1FF);
+ if (randData2 > 255)
+ randData2 = 256 - randData2;
+ sprite->data[1] = randData;
+ sprite->data[2] = randData2;
+ sprite->callback = AnimSmallDriftingBubbles_Step;
+}
+
+static void AnimSmallDriftingBubbles_Step(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);
+}
+
+void AnimTask_WaterSpoutLaunch(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[5] = gSprites[task->data[15]].pos1.y;
+ task->data[1] = GetWaterSpoutPowerForAnim();
+ PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
+ task->func = AnimTask_WaterSpoutLaunch_Step;
+}
+
+static void AnimTask_WaterSpoutLaunch_Step(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ sub_80765D4(task, task->data[15], 0x100, 0x100, 224, 0x200, 32);
+ task->data[0]++;
+ case 1:
+ if (++task->data[3] > 1)
+ {
+ task->data[3] = 0;
+ if (++task->data[4] & 1)
+ {
+ gSprites[task->data[15]].pos2.x = 3;
+ gSprites[task->data[15]].pos1.y++;
+ }
+ else
+ {
+ gSprites[task->data[15]].pos2.x = -3;
+ }
+ }
+ if (sub_8076640(task) == 0)
+ {
+ SetBattlerSpriteYOffsetFromYScale(task->data[15]);
+ gSprites[task->data[15]].pos2.x = 0;
+ task->data[3] = 0;
+ task->data[4] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ if (++task->data[3] > 4)
+ {
+ sub_80765D4(task, task->data[15], 224, 0x200, 384, 224, 8);
+ task->data[3] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 3:
+ if (sub_8076640(task) == 0)
+ {
+ task->data[3] = 0;
+ task->data[4] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 4:
+ CreateWaterSpoutLaunchDroplets(task, taskId);
+ task->data[0]++;
+ case 5:
+ if (++task->data[3] > 1)
+ {
+ task->data[3] = 0;
+ if (++task->data[4] & 1)
+ gSprites[task->data[15]].pos2.y += 2;
+ else
+ gSprites[task->data[15]].pos2.y -= 2;
+ if (task->data[4] == 10)
+ {
+ sub_80765D4(task, task->data[15], 384, 224, 0x100, 0x100, 8);
+ task->data[3] = 0;
+ task->data[4] = 0;
+ task->data[0]++;
+ }
+ }
+ break;
+ case 6:
+ gSprites[task->data[15]].pos1.y--;
+ if (sub_8076640(task) == 0)
+ {
+ ResetSpriteRotScale(task->data[15]);
+ gSprites[task->data[15]].pos1.y = task->data[5];
+ task->data[4] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 7:
+ if (task->data[2] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+// Returns a value 0-3 relative to which quarter HP the attacker is in
+// A higher number results in more water sprites during the Water Spout animation
+static u8 GetWaterSpoutPowerForAnim(void)
+{
+ u8 i;
+ u16 hp;
+ u16 maxhp;
+ u16 partyIndex;
+ struct Pokemon *slot;
+
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ partyIndex = gBattlerPartyIndexes[gBattleAnimAttacker];
+ slot = &gPlayerParty[partyIndex];
+ maxhp = GetMonData(slot, MON_DATA_MAX_HP);
+ hp = GetMonData(slot, MON_DATA_HP);
+ maxhp /= 4;
+ }
+ else
+ {
+ partyIndex = gBattlerPartyIndexes[gBattleAnimAttacker];
+ slot = &gEnemyParty[partyIndex];
+ maxhp = GetMonData(slot, MON_DATA_MAX_HP);
+ hp = GetMonData(slot, MON_DATA_HP);
+ maxhp /= 4;
+ }
+ for (i = 0; i < 3; i++)
+ {
+ if (hp < maxhp * (i + 1))
+ return i;
+ }
+ return 3;
+}
+
+static void CreateWaterSpoutLaunchDroplets(struct Task *task, u8 taskId)
+{
+ s16 i;
+ s16 attackerCoordX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ s16 attackerCoordY = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ s16 trigIndex = 172;
+ u8 subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
+ s16 increment = 4 - task->data[1];
+ u8 spriteId;
+
+ if (increment <= 0)
+ increment = 1;
+ for (i = 0; i < 20; i += increment)
+ {
+ spriteId = CreateSprite(&gSmallWaterOrbSpriteTemplate, attackerCoordX, attackerCoordY, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[1] = i;
+ gSprites[spriteId].data[2] = attackerCoordX * 16;
+ gSprites[spriteId].data[3] = attackerCoordY * 16;
+ gSprites[spriteId].data[4] = Cos(trigIndex, 64);
+ gSprites[spriteId].data[5] = Sin(trigIndex, 64);
+ gSprites[spriteId].data[6] = taskId;
+ gSprites[spriteId].data[7] = 2;
+ if (task->data[2] & 1)
+ AnimSmallWaterOrb(&gSprites[spriteId]);
+ task->data[2]++;
+ }
+ trigIndex = (trigIndex + increment * 2);
+ trigIndex &= 0xFF;
+ }
+}
+
+static void AnimSmallWaterOrb(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[4] += (sprite->data[1] % 6) * 3;
+ sprite->data[5] += (sprite->data[1] % 3) * 3;
+ sprite->data[0]++;
+ case 1:
+ sprite->data[2] += sprite->data[4];
+ sprite->data[3] += sprite->data[5];
+ sprite->pos1.x = sprite->data[2] >> 4;
+ sprite->pos1.y = sprite->data[3] >> 4;
+ if (sprite->pos1.x < -8 || sprite->pos1.x > 248 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ DestroySprite(sprite);
+ }
+ break;
+ }
+}
+
+void AnimTask_WaterSpoutRain(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[1] = GetWaterSpoutPowerForAnim();
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ task->data[4] = 136;
+ task->data[6] = 40;
+ }
+ else
+ {
+ task->data[4] = 16;
+ task->data[6] = 80;
+ }
+ task->data[5] = 98;
+ task->data[7] = task->data[4] + 49;
+ task->data[12] = task->data[1] * 5 + 5;
+ task->func = AnimTask_WaterSpoutRain_Step;
+}
+
+static void AnimTask_WaterSpoutRain_Step(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ u8 taskId2;
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[2] > 2)
+ {
+ task->data[2] = 0;
+ CreateWaterSpoutRainDroplet(task, taskId);
+ }
+ if (task->data[10] != 0 && task->data[13] == 0)
+ {
+ gBattleAnimArgs[0] = ANIM_TARGET;
+ gBattleAnimArgs[1] = 0;
+ gBattleAnimArgs[2] = 12;
+ taskId2 = CreateTask(AnimTask_HorizontalShake, 80);
+ if (taskId2 != 0xFF)
+ {
+ gTasks[taskId2].func(taskId2);
+ gAnimVisualTaskCount++;
+ }
+ gBattleAnimArgs[0] = ANIM_DEF_PARTNER;
+ taskId2 = CreateTask(AnimTask_HorizontalShake, 80);
+ if (taskId2 != 0xFF)
+ {
+ gTasks[taskId2].func(taskId2);
+ gAnimVisualTaskCount++;
+ }
+ task->data[13] = 1;
+ }
+ if (task->data[11] >= task->data[12])
+ task->data[0]++;
+ break;
+ case 1:
+ if (task->data[9] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void CreateWaterSpoutRainDroplet(struct Task *task, u8 taskId)
+{
+ u16 yPosArg = ((gSineTable[task->data[8]] + 3) >> 4) + task->data[6];
+ u8 spriteId = CreateSprite(&gSmallWaterOrbSpriteTemplate, task->data[7], 0, 0);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].callback = AnimWaterSpoutRain;
+ gSprites[spriteId].data[5] = yPosArg;
+ gSprites[spriteId].data[6] = taskId;
+ gSprites[spriteId].data[7] = 9;
+ task->data[9]++;
+ }
+ task->data[11]++;
+ task->data[8] = (task->data[8] + 39) & 0xFF;
+ task->data[7] = (ISO_RANDOMIZE2(task->data[7]) % task->data[5]) + task->data[4];
+}
+
+static void AnimWaterSpoutRain(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->pos1.y += 8;
+ if (sprite->pos1.y >= sprite->data[5])
+ {
+ gTasks[sprite->data[6]].data[10] = 1;
+ sprite->data[1] = CreateSprite(&gWaterHitSplatSpriteTemplate, sprite->pos1.x, sprite->pos1.y, 1);
+ if (sprite->data[1] != MAX_SPRITES)
+ {
+ StartSpriteAffineAnim(&gSprites[sprite->data[1]], 3);
+ gSprites[sprite->data[1]].data[6] = sprite->data[6];
+ gSprites[sprite->data[1]].data[7] = sprite->data[7];
+ gSprites[sprite->data[1]].callback = AnimWaterSpoutRainHit;
+ }
+ DestroySprite(sprite);
+ }
+ }
+}
+
+static void AnimWaterSpoutRainHit(struct Sprite *sprite)
+{
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ sprite->invisible ^= 1;
+ if (++sprite->data[2] == 12)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+ }
+ }
+}
+
+void AnimTask_WaterSport(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ task->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ task->data[7] = (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) ? 1 : -1;
+ if (IsContest())
+ task->data[7] *= -1;
+ task->data[5] = task->data[3] + task->data[7] * 8;
+ task->data[6] = task->data[4] - task->data[7] * 8;
+ task->data[9] = -32;
+ task->data[1] = 0;
+ task->data[0] = 0;
+ task->func = AnimTask_WaterSport_Step;
+}
+
+static void AnimTask_WaterSport_Step(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ CreateWaterSportDroplet(task);
+ if (task->data[10] != 0)
+ task->data[0]++;
+ break;
+ case 1:
+ CreateWaterSportDroplet(task);
+ if (++task->data[1] > 16)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ CreateWaterSportDroplet(task);
+ task->data[5] += task->data[7] * 6;
+ if (!(task->data[5] >= -16 && task->data[5] <= 256))
+ {
+ if (++task->data[12] > 2)
+ {
+ task->data[13] = 1;
+ task->data[0] = 6;
+ task->data[1] = 0;
+ }
+ else
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ }
+ break;
+ case 3:
+ CreateWaterSportDroplet(task);
+ task->data[6] -= task->data[7] * 2;
+ if (++task->data[1] > 7)
+ task->data[0]++;
+ break;
+ case 4:
+ CreateWaterSportDroplet(task);
+ task->data[5] -= task->data[7] * 6;
+ if (!(task->data[5] >= -16 && task->data[5] <= 256))
+ {
+ task->data[12]++;
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 5:
+ CreateWaterSportDroplet(task);
+ task->data[6] -= task->data[7] * 2;
+ if (++task->data[1] > 7)
+ task->data[0] = 2;
+ break;
+ case 6:
+ if (task->data[8] == 0)
+ task->data[0]++;
+ break;
+ default:
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void CreateWaterSportDroplet(struct Task *task)
+{
+ u8 spriteId;
+
+ if (++task->data[2] > 1)
+ {
+ task->data[2] = 0;
+ spriteId = CreateSprite(&gSmallWaterOrbSpriteTemplate, task->data[3], task->data[4], 10);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = 16;
+ gSprites[spriteId].data[2] = task->data[5];
+ gSprites[spriteId].data[4] = task->data[6];
+ gSprites[spriteId].data[5] = task->data[9];
+ InitAnimArcTranslation(&gSprites[spriteId]);
+ gSprites[spriteId].callback = AnimWaterSportDroplet;
+ task->data[8]++;
+ }
+ }
+}
+
+static void AnimWaterSportDroplet(struct Sprite *sprite)
+{
+ if (TranslateAnimHorizontalArc(sprite))
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->data[0] = 6;
+ sprite->data[2] = (Random() & 0x1F) - 16 + sprite->pos1.x;
+ sprite->data[4] = (Random() & 0x1F) - 16 + sprite->pos1.y;
+ sprite->data[5] = ~(Random() & 7);
+ InitAnimArcTranslation(sprite);
+ sprite->callback = AnimWaterSportDroplet_Step;
+ }
+}
+
+static void AnimWaterSportDroplet_Step(struct Sprite *sprite)
+{
+ u16 i;
+
+ if (TranslateAnimHorizontalArc(sprite))
+ {
+ for (i = 0; i < NUM_TASKS; i++)
+ {
+ if (gTasks[i].func == AnimTask_WaterSport_Step)
+ {
+ gTasks[i].data[10] = 1;
+ gTasks[i].data[8]--;
+ DestroySprite(sprite);
+ }
+ }
+ }
+}
+
+static void AnimWaterPulseBubble(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = gBattleAnimArgs[4];
+ sprite->data[3] = gBattleAnimArgs[5];
+ sprite->callback = AnimWaterPulseBubble_Step;
+}
+
+static void AnimWaterPulseBubble_Step(struct Sprite *sprite)
+{
+ sprite->data[4] -= sprite->data[0];
+ sprite->pos2.y = sprite->data[4] / 10;
+ sprite->data[5] = (sprite->data[5] + sprite->data[1]) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[5], sprite->data[2]);
+ if (--sprite->data[3] == 0)
+ DestroyAnimSprite(sprite);
+}
+
+static void AnimWaterPulseRingBubble(struct Sprite *sprite)
+{
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+ sprite->pos2.x = sprite->data[3] >> 7;
+ sprite->pos2.y = sprite->data[4] >> 7;
+ if (--sprite->data[0] == 0)
+ {
+ FreeSpriteOamMatrix(sprite);
+ DestroySprite(sprite);
+ }
+}
+
+void AnimWaterPulseRing(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[3] = gBattleAnimArgs[2];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->callback = AnimWaterPulseRing_Step;
+}
+
+static void AnimWaterPulseRing_Step(struct Sprite *sprite)
+{
+ int xDiff = sprite->data[1] - sprite->pos1.x;
+ int yDiff = sprite->data[2] - sprite->pos1.y;
+
+ sprite->pos2.x = (sprite->data[0] * xDiff) / sprite->data[3];
+ sprite->pos2.y = (sprite->data[0] * yDiff) / sprite->data[3];
+ if (++sprite->data[5] == sprite->data[4])
+ {
+ sprite->data[5] = 0;
+ CreateWaterPulseRingBubbles(sprite, xDiff, yDiff);
+ }
+ if (sprite->data[3] == sprite->data[0])
+ DestroyAnimSprite(sprite);
+ sprite->data[0]++;
+}
+
+#ifdef NONMATCHING
+static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff)
+{
+ s16 something = sprite->data[0] / 2;
+ s16 combinedX = sprite->pos1.x + sprite->pos2.x;
+ s16 combinedY = sprite->pos1.y + sprite->pos2.y;
+ s16 randomSomethingY = yDiff + (Random() % 10) - 5;
+ s16 randomSomethingX = -xDiff + (Random() % 10) - 5;
+ s16 i;
+ u8 spriteId;
+
+ for (i = 0; i <= 0; i++)
+ {
+ spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY + something, 130);
+ gSprites[spriteId].data[0] = 20;
+ gSprites[spriteId].data[1] = randomSomethingY;
+ gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
+ if (randomSomethingX < 0)
+ gSprites[spriteId].data[2] = -randomSomethingX;
+ else
+ gSprites[spriteId].data[2] = randomSomethingX;
+ }
+ for (i = 0; i <= 0; i++)
+ {
+ spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY - something, 130);
+ gSprites[spriteId].data[0] = 20;
+ gSprites[spriteId].data[1] = randomSomethingY;
+ gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
+ if (randomSomethingX > 0)
+ gSprites[spriteId].data[2] = -randomSomethingX;
+ else
+ gSprites[spriteId].data[2] = randomSomethingX;
+ }
+}
+#else
+NAKED
+static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x18\n\
+ adds r4, r1, 0\n\
+ adds r5, r2, 0\n\
+ movs r2, 0x2E\n\
+ ldrsh r1, [r0, r2]\n\
+ lsrs r2, r1, 31\n\
+ adds r1, r2\n\
+ lsls r1, 15\n\
+ lsrs r1, 16\n\
+ str r1, [sp]\n\
+ ldrh r1, [r0, 0x24]\n\
+ ldrh r3, [r0, 0x20]\n\
+ adds r1, r3\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ mov r8, r1\n\
+ ldrh r1, [r0, 0x26]\n\
+ ldrh r0, [r0, 0x22]\n\
+ adds r1, r0\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ mov r10, r1\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0xA\n\
+ bl __umodsi3\n\
+ adds r0, r5, r0\n\
+ subs r0, 0x5\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r9, r0\n\
+ bl Random\n\
+ negs r4, r4\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0xA\n\
+ bl __umodsi3\n\
+ adds r4, r0\n\
+ subs r4, 0x5\n\
+ lsls r4, 16\n\
+ lsrs r7, r4, 16\n\
+ movs r6, 0\n\
+ mov r0, r8\n\
+ lsls r0, 16\n\
+ mov r8, r0\n\
+ mov r1, r10\n\
+ lsls r1, 16\n\
+ str r1, [sp, 0xC]\n\
+ ldr r2, [sp]\n\
+ lsls r2, 16\n\
+ str r2, [sp, 0x10]\n\
+ asrs r1, 16\n\
+ lsls r0, r7, 16\n\
+ asrs r5, r0, 16\n\
+ str r0, [sp, 0x14]\n\
+ negs r3, r5\n\
+ str r3, [sp, 0x4]\n\
+ asrs r0, r2, 16\n\
+ adds r1, r0\n\
+ lsls r1, 16\n\
+ mov r10, r1\n\
+_08108DE2:\n\
+ ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\
+ mov r2, r8\n\
+ asrs r1, r2, 16\n\
+ mov r3, r10\n\
+ asrs r2, r3, 16\n\
+ movs r3, 0x82\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ ldr r1, =gSprites\n\
+ lsls r0, r2, 4\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ adds r4, r0, r1\n\
+ movs r0, 0x14\n\
+ strh r0, [r4, 0x2E]\n\
+ mov r0, r9\n\
+ strh r0, [r4, 0x30]\n\
+ ldr r0, =gBattleAnimAttacker\n\
+ ldrb r0, [r0]\n\
+ bl GetBattlerSpriteSubpriority\n\
+ subs r0, 0x1\n\
+ adds r1, r4, 0\n\
+ adds r1, 0x43\n\
+ strb r0, [r1]\n\
+ cmp r5, 0\n\
+ bge _08108E30\n\
+ mov r1, sp\n\
+ ldrh r1, [r1, 0x4]\n\
+ strh r1, [r4, 0x32]\n\
+ b _08108E32\n\
+ .pool\n\
+_08108E30:\n\
+ strh r7, [r4, 0x32]\n\
+_08108E32:\n\
+ lsls r0, r6, 16\n\
+ movs r2, 0x80\n\
+ lsls r2, 9\n\
+ adds r0, r2\n\
+ lsrs r6, r0, 16\n\
+ cmp r0, 0\n\
+ ble _08108DE2\n\
+ movs r6, 0\n\
+ ldr r3, [sp, 0xC]\n\
+ asrs r1, r3, 16\n\
+ ldr r0, [sp, 0x14]\n\
+ asrs r5, r0, 16\n\
+ negs r2, r5\n\
+ str r2, [sp, 0x8]\n\
+ ldr r3, [sp, 0x10]\n\
+ asrs r0, r3, 16\n\
+ subs r1, r0\n\
+ lsls r1, 16\n\
+ mov r10, r1\n\
+_08108E58:\n\
+ ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\
+ mov r2, r8\n\
+ asrs r1, r2, 16\n\
+ mov r3, r10\n\
+ asrs r2, r3, 16\n\
+ movs r3, 0x82\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ ldr r1, =gSprites\n\
+ lsls r0, r2, 4\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ adds r4, r0, r1\n\
+ movs r0, 0x14\n\
+ strh r0, [r4, 0x2E]\n\
+ mov r0, r9\n\
+ strh r0, [r4, 0x30]\n\
+ ldr r0, =gBattleAnimAttacker\n\
+ ldrb r0, [r0]\n\
+ bl GetBattlerSpriteSubpriority\n\
+ subs r0, 0x1\n\
+ adds r1, r4, 0\n\
+ adds r1, 0x43\n\
+ strb r0, [r1]\n\
+ cmp r5, 0\n\
+ ble _08108EA8\n\
+ mov r1, sp\n\
+ ldrh r1, [r1, 0x8]\n\
+ strh r1, [r4, 0x32]\n\
+ b _08108EAA\n\
+ .pool\n\
+_08108EA8:\n\
+ strh r7, [r4, 0x32]\n\
+_08108EAA:\n\
+ lsls r0, r6, 16\n\
+ movs r2, 0x80\n\
+ lsls r2, 9\n\
+ adds r0, r2\n\
+ lsrs r6, r0, 16\n\
+ cmp r0, 0\n\
+ ble _08108E58\n\
+ add sp, 0x18\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n");
+}
+#endif \ No newline at end of file