summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2019-11-19 10:58:44 -0500
committerGitHub <noreply@github.com>2019-11-19 10:58:44 -0500
commit89dc26755ad2818c10b37a34ed46f5c79dc571c8 (patch)
treeabd075a205c401b3a5406efb37378544e94c9190
parent83cba310335678aa8ecac24b58708b3c924b581a (diff)
parent63f8834b6bc2d6413da606d7df88a304edc3c625 (diff)
Merge pull request #138 from jiangzhengwenjz/battle
battle (4th take)
-rw-r--r--asm/battle_controller_pokedude.s7632
-rw-r--r--asm/electric.s2675
-rw-r--r--asm/fighting.s1746
-rw-r--r--asm/fire.s2500
-rw-r--r--asm/ice.s3099
-rw-r--r--asm/poison.s362
-rw-r--r--common_syms/battle_controller_pokedude.txt1
-rw-r--r--data/battle_anim_effects_misc.s269
-rw-r--r--data/battle_anim_scripts.s140
-rw-r--r--data/data_8471F00.s24
-rw-r--r--data/field_weather.s2
-rw-r--r--data/graphics.s2
-rw-r--r--include/battle.h2
-rw-r--r--include/battle_anim.h118
-rw-r--r--include/battle_controllers.h17
-rw-r--r--include/gba/macro.h14
-rw-r--r--include/graphics.h6
-rw-r--r--include/party_menu.h1
-rw-r--r--include/quest_log_815A008.h9
-rw-r--r--include/strings.h22
-rw-r--r--include/unk_8159F40.h10
-rw-r--r--ld_script.txt21
-rw-r--r--src/battle_anim_mon_movement.c2
-rw-r--r--src/battle_anim_mons.c14
-rw-r--r--src/battle_anim_utility_funcs.c4
-rw-r--r--src/battle_controller_oak_old_man.c6
-rw-r--r--src/battle_controller_opponent.c2
-rw-r--r--src/battle_controller_player.c3
-rw-r--r--src/battle_controller_pokedude.c2739
-rw-r--r--src/battle_controllers.c12
-rw-r--r--src/battle_script_commands.c2
-rw-r--r--src/battle_setup.c2
-rw-r--r--src/bug.c14
-rw-r--r--src/electric.c1272
-rw-r--r--src/fighting.c971
-rw-r--r--src/fire.c1193
-rw-r--r--src/flying.c30
-rw-r--r--src/ghost.c12
-rw-r--r--src/ground.c8
-rw-r--r--src/ice.c1477
-rw-r--r--src/poison.c298
-rw-r--r--src/pokemon.c20
-rw-r--r--src/psychic.c22
-rw-r--r--src/quest_log.c2
-rw-r--r--src/quest_log_815A008.c (renamed from src/unk_8159F40.c)147
-rw-r--r--src/rock.c8
-rw-r--r--src/teachy_tv.c2
-rw-r--r--sym_common.txt5
48 files changed, 8242 insertions, 18697 deletions
diff --git a/asm/battle_controller_pokedude.s b/asm/battle_controller_pokedude.s
deleted file mode 100644
index e685d786d..000000000
--- a/asm/battle_controller_pokedude.s
+++ /dev/null
@@ -1,7632 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start nullsub_99
-nullsub_99: @ 81560A0
- bx lr
- thumb_func_end nullsub_99
-
- thumb_func_start SetControllerToPokeDude
-SetControllerToPokeDude: @ 81560A4
- ldr r1, _081560C8 @ =gBattlerControllerFuncs
- ldr r0, _081560CC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _081560D0 @ =sub_81560DC
- str r1, [r0]
- ldr r2, _081560D4 @ =gBattleStruct
- ldr r0, [r2]
- adds r0, 0x96
- ldr r1, _081560D8 @ =gSpecialVar_0x8004
- ldrh r1, [r1]
- strb r1, [r0]
- ldr r0, [r2]
- adds r0, 0x97
- movs r1, 0
- strb r1, [r0]
- bx lr
- .align 2, 0
-_081560C8: .4byte gBattlerControllerFuncs
-_081560CC: .4byte gActiveBattler
-_081560D0: .4byte sub_81560DC
-_081560D4: .4byte gBattleStruct
-_081560D8: .4byte gSpecialVar_0x8004
- thumb_func_end SetControllerToPokeDude
-
- thumb_func_start sub_81560DC
-sub_81560DC: @ 81560DC
- push {r4,r5,lr}
- ldr r2, _08156120 @ =gBattleControllerExecFlags
- ldr r1, _08156124 @ =gBitTable
- ldr r5, _08156128 @ =gActiveBattler
- ldrb r3, [r5]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08156138
- ldr r4, _0815612C @ =gBattleBufferA
- lsls r0, r3, 9
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x38
- bhi _08156134
- bl sub_8159AB8
- lsls r0, 24
- cmp r0, 0
- bne _08156138
- ldr r1, _08156130 @ =gUnknown_8478F1C
- ldrb r0, [r5]
- lsls r0, 9
- adds r0, r4
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- b _08156138
- .align 2, 0
-_08156120: .4byte gBattleControllerExecFlags
-_08156124: .4byte gBitTable
-_08156128: .4byte gActiveBattler
-_0815612C: .4byte gBattleBufferA
-_08156130: .4byte gUnknown_8478F1C
-_08156134:
- bl PlayerPartnerBufferExecCompleted
-_08156138:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81560DC
-
- thumb_func_start sub_8156140
-sub_8156140: @ 8156140
- push {lr}
- bl sub_8159824
- pop {r0}
- bx r0
- thumb_func_end sub_8156140
-
- thumb_func_start sub_815614C
-sub_815614C: @ 815614C
- push {lr}
- ldr r2, _08156174 @ =gSprites
- ldr r1, _08156178 @ =gBattlerSpriteIds
- ldr r0, _0815617C @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _08156180 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08156170
- bl PlayerPartnerBufferExecCompleted
-_08156170:
- pop {r0}
- bx r0
- .align 2, 0
-_08156174: .4byte gSprites
-_08156178: .4byte gBattlerSpriteIds
-_0815617C: .4byte gActiveBattler
-_08156180: .4byte SpriteCallbackDummy
- thumb_func_end sub_815614C
-
- thumb_func_start sub_8156184
-sub_8156184: @ 8156184
- push {r4-r7,lr}
- ldr r2, _081561E0 @ =gSprites
- ldr r0, _081561E4 @ =gBattlerSpriteIds
- ldr r7, _081561E8 @ =gActiveBattler
- ldrb r3, [r7]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 27
- lsrs r2, r0, 31
- cmp r2, 0x1
- bne _08156230
- movs r4, 0x24
- ldrsh r0, [r1, r4]
- cmp r0, 0
- bne _08156230
- ldr r6, _081561EC @ =gBattleSpritesDataPtr
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- lsls r4, r3, 1
- adds r0, r4, r3
- lsls r0, 2
- adds r1, r0, r1
- ldrb r5, [r1]
- movs r0, 0x80
- ands r0, r5
- cmp r0, 0
- bne _081561F8
- ldr r0, _081561F0 @ =gBattlerPartyIndexes
- adds r0, r4, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _081561F4 @ =gEnemyParty
- adds r1, r0
- adds r0, r3, 0
- bl sub_80F1720
- b _08156230
- .align 2, 0
-_081561E0: .4byte gSprites
-_081561E4: .4byte gBattlerSpriteIds
-_081561E8: .4byte gActiveBattler
-_081561EC: .4byte gBattleSpritesDataPtr
-_081561F0: .4byte gBattlerPartyIndexes
-_081561F4: .4byte gEnemyParty
-_081561F8:
- ldrb r0, [r1, 0x1]
- ands r2, r0
- cmp r2, 0
- beq _08156230
- movs r0, 0x7F
- ands r0, r5
- strb r0, [r1]
- ldr r0, [r6]
- ldrb r2, [r7]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r4, _08156238 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- bl PlayerPartnerBufferExecCompleted
-_08156230:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08156238: .4byte 0x000027f9
- thumb_func_end sub_8156184
-
- thumb_func_start sub_815623C
-sub_815623C: @ 815623C
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _0815624E
- bl PlayerPartnerBufferExecCompleted
-_0815624E:
- pop {r0}
- bx r0
- thumb_func_end sub_815623C
-
- thumb_func_start sub_8156254
-sub_8156254: @ 8156254
- push {lr}
- ldr r0, _08156284 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0815627E
- ldr r2, _08156288 @ =gMain
- ldr r0, _0815628C @ =0x00000439
- adds r3, r2, r0
- ldrb r1, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldr r0, _08156290 @ =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, [r2, 0x8]
- bl SetMainCallback2
-_0815627E:
- pop {r0}
- bx r0
- .align 2, 0
-_08156284: .4byte gPaletteFade
-_08156288: .4byte gMain
-_0815628C: .4byte 0x00000439
-_08156290: .4byte gPreBattleCallback1
- thumb_func_end sub_8156254
-
- thumb_func_start sub_8156294
-sub_8156294: @ 8156294
- push {r4,lr}
- ldr r0, _081562DC @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r4, _081562E0 @ =gActiveBattler
- ldrb r1, [r4]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _081562D4
- ldr r0, _081562E4 @ =c3_0802FDF4
- movs r1, 0xA
- bl CreateTask
- ldr r2, _081562E8 @ =gBattlerPartyIndexes
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _081562EC @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- bl PlayerPartnerBufferExecCompleted
-_081562D4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081562DC: .4byte gBattleSpritesDataPtr
-_081562E0: .4byte gActiveBattler
-_081562E4: .4byte c3_0802FDF4
-_081562E8: .4byte gBattlerPartyIndexes
-_081562EC: .4byte gPlayerParty
- thumb_func_end sub_8156294
-
- thumb_func_start sub_81562F0
-sub_81562F0: @ 81562F0
- push {r4-r6,lr}
- ldr r2, _08156388 @ =gSprites
- ldr r0, _0815638C @ =gHealthboxSpriteIds
- ldr r6, _08156390 @ =gActiveBattler
- ldrb r3, [r6]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _08156394 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08156380
- ldr r5, _08156398 @ =gBattleSpritesDataPtr
- ldr r0, [r5]
- ldr r1, [r0, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r2, r0, r1
- ldrb r1, [r2, 0x1]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08156380
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- ldr r0, [r5]
- ldrb r2, [r6]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r4, _0815639C @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r0, [r5]
- ldrb r2, [r6]
- ldr r1, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08156374
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl InitAndLaunchSpecialAnimation
-_08156374:
- ldr r0, _081563A0 @ =gBattlerControllerFuncs
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _081563A4 @ =sub_8156294
- str r0, [r1]
-_08156380:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08156388: .4byte gSprites
-_0815638C: .4byte gHealthboxSpriteIds
-_08156390: .4byte gActiveBattler
-_08156394: .4byte SpriteCallbackDummy
-_08156398: .4byte gBattleSpritesDataPtr
-_0815639C: .4byte 0x000027f9
-_081563A0: .4byte gBattlerControllerFuncs
-_081563A4: .4byte sub_8156294
- thumb_func_end sub_81562F0
-
- thumb_func_start sub_81563A8
-sub_81563A8: @ 81563A8
- push {r4-r6,lr}
- ldr r6, _0815645C @ =gBattleSpritesDataPtr
- ldr r0, [r6]
- ldr r5, _08156460 @ =gActiveBattler
- ldrb r2, [r5]
- ldr r1, [r0, 0x4]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- bne _081563DA
- ldr r0, _08156464 @ =gBattlerPartyIndexes
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08156468 @ =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_081563DA:
- ldr r4, _0815646C @ =gSprites
- ldr r0, _08156470 @ =gUnknown_3004FFC
- ldrb r2, [r5]
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r3, r0, 2
- adds r0, r4, 0
- adds r0, 0x1C
- adds r0, r3, r0
- ldr r1, [r0]
- ldr r0, _08156474 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08156454
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _08156454
- adds r0, r3, r4
- bl DestroySprite
- ldr r4, _08156478 @ =gHealthboxSpriteIds
- ldrb r1, [r5]
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _08156464 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _08156468 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r5]
- bl sub_804BD94
- ldrb r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldrb r0, [r5]
- bl CopyBattleSpriteInvisibility
- ldr r1, _0815647C @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08156480 @ =sub_81562F0
- str r1, [r0]
-_08156454:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0815645C: .4byte gBattleSpritesDataPtr
-_08156460: .4byte gActiveBattler
-_08156464: .4byte gBattlerPartyIndexes
-_08156468: .4byte gPlayerParty
-_0815646C: .4byte gSprites
-_08156470: .4byte gUnknown_3004FFC
-_08156474: .4byte SpriteCallbackDummy
-_08156478: .4byte gHealthboxSpriteIds
-_0815647C: .4byte gBattlerControllerFuncs
-_08156480: .4byte sub_81562F0
- thumb_func_end sub_81563A8
-
- thumb_func_start sub_8156484
-sub_8156484: @ 8156484
- push {lr}
- ldr r0, _08156498 @ =gDoingBattleAnim
- ldrb r0, [r0]
- cmp r0, 0
- bne _08156492
- bl PlayerPartnerBufferExecCompleted
-_08156492:
- pop {r0}
- bx r0
- .align 2, 0
-_08156498: .4byte gDoingBattleAnim
- thumb_func_end sub_8156484
-
- thumb_func_start sub_815649C
-sub_815649C: @ 815649C
- push {r4,lr}
- ldr r4, _081564DC @ =gBattleSpritesDataPtr
- ldr r1, [r4]
- ldr r3, _081564E0 @ =gActiveBattler
- ldrb r0, [r3]
- ldr r2, [r1, 0x4]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x9]
- subs r0, 0x1
- strb r0, [r1, 0x9]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _081564D4
- ldr r0, [r4]
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x9]
- bl PlayerPartnerBufferExecCompleted
-_081564D4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081564DC: .4byte gBattleSpritesDataPtr
-_081564E0: .4byte gActiveBattler
- thumb_func_end sub_815649C
-
- thumb_func_start sub_81564E4
-sub_81564E4: @ 81564E4
- push {lr}
- bl sub_8159998
- pop {r0}
- bx r0
- thumb_func_end sub_81564E4
-
- thumb_func_start sub_81564F0
-sub_81564F0: @ 81564F0
- push {lr}
- ldr r0, _08156524 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08156520
- ldr r1, _08156528 @ =gBattlerControllerFuncs
- ldr r2, _0815652C @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08156530 @ =sub_8156538
- str r1, [r0]
- ldr r1, _08156534 @ =gUnknown_3004FFC
- ldrb r0, [r2]
- adds r0, r1
- ldrb r0, [r0]
- bl DestroyTask
- bl FreeAllWindowBuffers
- bl sub_8127968
-_08156520:
- pop {r0}
- bx r0
- .align 2, 0
-_08156524: .4byte gPaletteFade
-_08156528: .4byte gBattlerControllerFuncs
-_0815652C: .4byte gActiveBattler
-_08156530: .4byte sub_8156538
-_08156534: .4byte gUnknown_3004FFC
- thumb_func_end sub_81564F0
-
- thumb_func_start sub_8156538
-sub_8156538: @ 8156538
- push {lr}
- ldr r0, _08156568 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _0815656C @ =BattleMainCB2
- cmp r1, r0
- bne _0815658E
- ldr r0, _08156570 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0815658E
- ldr r0, _08156574 @ =gUnknown_203B0C0
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08156580
- ldr r0, _08156578 @ =gUnknown_203B0C1
- ldrb r1, [r0]
- ldr r2, _0815657C @ =gUnknown_203B0DC
- movs r0, 0x1
- bl BtlController_EmitChosenMonReturnValue
- b _0815658A
- .align 2, 0
-_08156568: .4byte gMain
-_0815656C: .4byte BattleMainCB2
-_08156570: .4byte gPaletteFade
-_08156574: .4byte gUnknown_203B0C0
-_08156578: .4byte gUnknown_203B0C1
-_0815657C: .4byte gUnknown_203B0DC
-_08156580:
- movs r0, 0x1
- movs r1, 0x6
- movs r2, 0
- bl BtlController_EmitChosenMonReturnValue
-_0815658A:
- bl PlayerPartnerBufferExecCompleted
-_0815658E:
- pop {r0}
- bx r0
- thumb_func_end sub_8156538
-
- thumb_func_start sub_8156594
-sub_8156594: @ 8156594
- push {lr}
- ldr r0, _081565C8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081565E2
- ldr r1, _081565CC @ =gBattlerControllerFuncs
- ldr r0, _081565D0 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _081565D4 @ =sub_81565E8
- str r1, [r0]
- bl nullsub_44
- bl FreeAllWindowBuffers
- ldr r0, _081565D8 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0x1
- beq _081565C4
- cmp r0, 0x3
- beq _081565DC
-_081565C4:
- movs r0, 0x7
- b _081565DE
- .align 2, 0
-_081565C8: .4byte gPaletteFade
-_081565CC: .4byte gBattlerControllerFuncs
-_081565D0: .4byte gActiveBattler
-_081565D4: .4byte sub_81565E8
-_081565D8: .4byte gSpecialVar_0x8004
-_081565DC:
- movs r0, 0x8
-_081565DE:
- bl sub_810B108
-_081565E2:
- pop {r0}
- bx r0
- thumb_func_end sub_8156594
-
- thumb_func_start sub_81565E8
-sub_81565E8: @ 81565E8
- push {lr}
- ldr r0, _08156614 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _08156618 @ =BattleMainCB2
- cmp r1, r0
- bne _0815660E
- ldr r0, _0815661C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0815660E
- ldr r0, _08156620 @ =gSpecialVar_ItemId
- ldrh r1, [r0]
- movs r0, 0x1
- bl BtlController_EmitOneReturnValue
- bl PlayerPartnerBufferExecCompleted
-_0815660E:
- pop {r0}
- bx r0
- .align 2, 0
-_08156614: .4byte gMain
-_08156618: .4byte BattleMainCB2
-_0815661C: .4byte gPaletteFade
-_08156620: .4byte gSpecialVar_ItemId
- thumb_func_end sub_81565E8
-
- thumb_func_start sub_8156624
-sub_8156624: @ 8156624
- push {r4-r7,lr}
- ldr r4, _08156788 @ =gBattleSpritesDataPtr
- ldr r0, [r4]
- ldr r5, _0815678C @ =gActiveBattler
- ldrb r2, [r5]
- ldr r1, [r0, 0x4]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r7, 0x88
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- bne _08156658
- ldr r0, _08156790 @ =gBattlerPartyIndexes
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08156794 @ =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_08156658:
- ldr r1, [r4]
- ldrb r0, [r5]
- movs r6, 0x2
- adds r2, r6, 0
- eors r2, r0
- ldr r1, [r1, 0x4]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- bne _0815668A
- ldr r0, _08156790 @ =gBattlerPartyIndexes
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08156794 @ =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_0815668A:
- ldr r0, [r4]
- ldrb r2, [r5]
- ldr r3, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0]
- movs r4, 0x8
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- bne _08156780
- adds r1, r6, 0
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- bne _08156780
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _0815671E
- ldr r0, _08156798 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0815671E
- ldr r1, _0815679C @ =gUnknown_3004FFC
- ldrb r0, [r5]
- eors r0, r6
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _081567A0 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r4, _081567A4 @ =gHealthboxSpriteIds
- ldrb r0, [r5]
- adds r1, r6, 0
- eors r1, r0
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _08156790 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _08156794 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r5]
- eors r0, r6
- bl sub_804BD94
- ldrb r0, [r5]
- eors r0, r6
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
-_0815671E:
- ldr r1, _0815679C @ =gUnknown_3004FFC
- ldr r4, _0815678C @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _081567A0 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r5, _081567A4 @ =gHealthboxSpriteIds
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, _08156790 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _08156794 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r4]
- bl sub_804BD94
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldr r0, _08156788 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r2, [r0, 0x8]
- ldrb r1, [r2, 0x9]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x9]
- ldr r1, _081567A8 @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _081567AC @ =sub_81567B0
- str r1, [r0]
-_08156780:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08156788: .4byte gBattleSpritesDataPtr
-_0815678C: .4byte gActiveBattler
-_08156790: .4byte gBattlerPartyIndexes
-_08156794: .4byte gPlayerParty
-_08156798: .4byte gBattleTypeFlags
-_0815679C: .4byte gUnknown_3004FFC
-_081567A0: .4byte gSprites
-_081567A4: .4byte gHealthboxSpriteIds
-_081567A8: .4byte gBattlerControllerFuncs
-_081567AC: .4byte sub_81567B0
- thumb_func_end sub_8156624
-
- thumb_func_start sub_81567B0
-sub_81567B0: @ 81567B0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r4, 0
- ldr r2, _081568B0 @ =gSprites
- ldr r0, _081568B4 @ =gHealthboxSpriteIds
- ldr r1, _081568B8 @ =gActiveBattler
- mov r8, r1
- ldrb r3, [r1]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _081568BC @ =SpriteCallbackDummy
- cmp r1, r0
- bne _081567DA
- movs r4, 0x1
-_081567DA:
- cmp r4, 0
- beq _081568A6
- ldr r7, _081568C0 @ =gBattleSpritesDataPtr
- ldr r0, [r7]
- ldr r4, [r0, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r2, r0, r4
- ldrb r1, [r2, 0x1]
- movs r5, 0x1
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _081568A6
- movs r6, 0x2
- adds r1, r6, 0
- eors r1, r3
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0, 0x1]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _081568A6
- ldrb r1, [r2]
- movs r3, 0x7F
- adds r0, r3, 0
- ands r0, r1
- strb r0, [r2]
- ldr r0, [r7]
- mov r1, r8
- ldrb r2, [r1]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r4, 0x2
- negs r4, r4
- adds r0, r4, 0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r2, [r7]
- mov r1, r8
- ldrb r0, [r1]
- adds r1, r6, 0
- eors r1, r0
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- ands r3, r1
- strb r3, [r0]
- ldr r2, [r7]
- mov r1, r8
- ldrb r0, [r1]
- adds r1, r6, 0
- eors r1, r0
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- ands r4, r1
- strb r4, [r0, 0x1]
- ldr r4, _081568C4 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r0, _081568C8 @ =c3_0802FDF4
- movs r1, 0xA
- bl CreateTask
- ldr r2, _081568CC @ =gBattlerPartyIndexes
- mov r0, r8
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _081568D0 @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- ldr r1, _081568D4 @ =gBattlerControllerFuncs
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _081568D8 @ =sub_815649C
- str r1, [r0]
-_081568A6:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081568B0: .4byte gSprites
-_081568B4: .4byte gHealthboxSpriteIds
-_081568B8: .4byte gActiveBattler
-_081568BC: .4byte SpriteCallbackDummy
-_081568C0: .4byte gBattleSpritesDataPtr
-_081568C4: .4byte 0x000027f9
-_081568C8: .4byte c3_0802FDF4
-_081568CC: .4byte gBattlerPartyIndexes
-_081568D0: .4byte gPlayerParty
-_081568D4: .4byte gBattlerControllerFuncs
-_081568D8: .4byte sub_815649C
- thumb_func_end sub_81567B0
-
- thumb_func_start sub_81568DC
-sub_81568DC: @ 81568DC
- 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 r9, r0
- ldr r1, _081569DC @ =gTasks
- lsls r0, 2
- add r0, r9
- lsls r0, 3
- adds r0, r1
- mov r8, r0
- ldrb r0, [r0, 0x8]
- mov r10, r0
- mov r1, r8
- ldrb r7, [r1, 0xC]
- str r7, [sp, 0x8]
- ldrh r2, [r1, 0xA]
- str r2, [sp, 0xC]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08156922
- ldr r1, _081569E0 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r10, r0
- bne _08156922
- b _08156A38
-_08156922:
- movs r0, 0x64
- mov r1, r10
- muls r1, r0
- ldr r0, _081569E4 @ =gPlayerParty
- adds r6, r1, r0
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x4]
- ldr r3, _081569E8 @ =gExperienceTables
- adds r4, 0x1
- lsls r4, 2
- ldr r2, _081569EC @ =gBaseStats
- lsls r1, r5, 3
- subs r1, r5
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x13]
- movs r1, 0xCA
- lsls r1, 1
- muls r1, r2
- adds r4, r1
- adds r4, r3
- ldr r2, [r4]
- str r2, [sp]
- ldr r3, [sp, 0xC]
- lsls r1, r3, 16
- asrs r1, 16
- adds r0, r1
- cmp r0, r2
- bcc _08156A10
- adds r0, r6, 0
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- adds r0, r6, 0
- bl CalculateMonStats
- ldr r2, [sp]
- add r0, sp, 0x4
- ldrh r0, [r0]
- subs r2, r0
- ldr r0, [sp, 0xC]
- subs r2, r0, r2
- ldr r4, _081569F0 @ =gActiveBattler
- ldrb r5, [r4]
- strb r7, [r4]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xB
- bl BtlController_EmitTwoReturnValues
- strb r5, [r4]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081569F8
- ldr r2, _081569E0 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r0, r2
- mov r1, r10
- ldrh r0, [r0]
- cmp r1, r0
- beq _081569D6
- movs r0, 0x2
- eors r7, r0
- lsls r0, r7, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r1, r0
- bne _081569F8
-_081569D6:
- ldr r0, _081569F4 @ =sub_8156C68
- b _08156A3A
- .align 2, 0
-_081569DC: .4byte gTasks
-_081569E0: .4byte gBattlerPartyIndexes
-_081569E4: .4byte gPlayerParty
-_081569E8: .4byte gExperienceTables
-_081569EC: .4byte gBaseStats
-_081569F0: .4byte gActiveBattler
-_081569F4: .4byte sub_8156C68
-_081569F8:
- ldr r0, _08156A08 @ =gTasks
- mov r2, r9
- lsls r1, r2, 2
- add r1, r9
- lsls r1, 3
- adds r1, r0
- ldr r0, _08156A0C @ =sub_8156D80
- b _08156A3C
- .align 2, 0
-_08156A08: .4byte gTasks
-_08156A0C: .4byte sub_8156D80
-_08156A10:
- str r0, [sp, 0x4]
- add r2, sp, 0x4
- adds r0, r6, 0
- movs r1, 0x19
- bl SetMonData
- ldr r1, _08156A30 @ =gBattlerControllerFuncs
- ldr r3, [sp, 0x8]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, _08156A34 @ =sub_8156EE8
- str r1, [r0]
- mov r0, r9
- bl DestroyTask
- b _08156A3E
- .align 2, 0
-_08156A30: .4byte gBattlerControllerFuncs
-_08156A34: .4byte sub_8156EE8
-_08156A38:
- ldr r0, _08156A50 @ =sub_8156A54
-_08156A3A:
- mov r1, r8
-_08156A3C:
- str r0, [r1]
-_08156A3E:
- 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
-_08156A50: .4byte sub_8156A54
- thumb_func_end sub_81568DC
-
- thumb_func_start sub_8156A54
-sub_8156A54: @ 8156A54
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08156B0C @ =gTasks
- lsls r2, r0, 2
- mov r8, r2
- add r8, r0
- mov r0, r8
- lsls r0, 3
- mov r8, r0
- add r8, r1
- mov r2, r8
- ldrb r1, [r2, 0x8]
- movs r0, 0xA
- ldrsh r2, [r2, r0]
- mov r9, r2
- mov r2, r8
- ldrb r2, [r2, 0xC]
- mov r10, r2
- movs r0, 0x64
- adds r6, r1, 0
- muls r6, r0
- ldr r0, _08156B10 @ =gPlayerParty
- adds r6, r0
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- movs r1, 0x19
- bl GetMonData
- adds r3, r0, 0
- ldr r6, _08156B14 @ =gExperienceTables
- lsls r1, r4, 2
- ldr r2, _08156B18 @ =gBaseStats
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- adds r0, r2
- ldrb r2, [r0, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r2
- adds r1, r0
- adds r1, r6
- ldr r1, [r1]
- subs r3, r1
- adds r4, 0x1
- lsls r4, 2
- adds r4, r0
- adds r4, r6
- ldr r2, [r4]
- subs r2, r1
- ldr r0, _08156B1C @ =gHealthboxSpriteIds
- add r0, r10
- ldrb r1, [r0]
- mov r0, r9
- negs r0, r0
- str r0, [sp]
- mov r0, r10
- bl SetBattleBarStruct
- movs r0, 0x1B
- bl PlaySE
- ldr r0, _08156B20 @ =sub_8156B24
- mov r1, r8
- str r0, [r1]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08156B0C: .4byte gTasks
-_08156B10: .4byte gPlayerParty
-_08156B14: .4byte gExperienceTables
-_08156B18: .4byte gBaseStats
-_08156B1C: .4byte gHealthboxSpriteIds
-_08156B20: .4byte sub_8156B24
- thumb_func_end sub_8156A54
-
- thumb_func_start sub_8156B24
-sub_8156B24: @ 8156B24
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, _08156B50 @ =gTasks
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- adds r6, r0, r1
- ldrh r1, [r6, 0x1C]
- movs r2, 0x1C
- ldrsh r0, [r6, r2]
- cmp r0, 0xC
- bgt _08156B54
- adds r0, r1, 0x1
- strh r0, [r6, 0x1C]
- b _08156C50
- .align 2, 0
-_08156B50: .4byte gTasks
-_08156B54:
- ldrb r0, [r6, 0x8]
- mov r9, r0
- ldrh r2, [r6, 0xA]
- mov r10, r2
- ldrb r7, [r6, 0xC]
- ldr r5, _08156C1C @ =gHealthboxSpriteIds
- adds r5, r7, r5
- ldrb r1, [r5]
- adds r0, r7, 0
- movs r2, 0x1
- movs r3, 0
- bl MoveBattleBar
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- bl SetHealthboxSpriteVisible
- lsls r4, 16
- asrs r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- bne _08156C50
- movs r0, 0x1B
- bl m4aSongNumStop
- movs r0, 0x64
- mov r1, r9
- muls r1, r0
- ldr r0, _08156C20 @ =gPlayerParty
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r3, _08156C24 @ =gExperienceTables
- adds r4, 0x1
- lsls r4, 2
- ldr r2, _08156C28 @ =gBaseStats
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r1
- adds r4, r0
- adds r4, r3
- ldr r1, [r4]
- str r1, [sp]
- mov r2, r10
- lsls r0, r2, 16
- asrs r4, r0, 16
- ldr r0, [sp, 0x4]
- adds r0, r4
- cmp r0, r1
- blt _08156C34
- adds r0, r5, 0
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- adds r0, r5, 0
- bl CalculateMonStats
- ldr r2, [sp]
- add r0, sp, 0x4
- ldrh r0, [r0]
- subs r2, r0
- subs r2, r4, r2
- ldr r4, _08156C2C @ =gActiveBattler
- ldrb r5, [r4]
- strb r7, [r4]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xB
- bl BtlController_EmitTwoReturnValues
- strb r5, [r4]
- ldr r0, _08156C30 @ =sub_8156C68
- str r0, [r6]
- b _08156C50
- .align 2, 0
-_08156C1C: .4byte gHealthboxSpriteIds
-_08156C20: .4byte gPlayerParty
-_08156C24: .4byte gExperienceTables
-_08156C28: .4byte gBaseStats
-_08156C2C: .4byte gActiveBattler
-_08156C30: .4byte sub_8156C68
-_08156C34:
- str r0, [sp, 0x4]
- add r2, sp, 0x4
- adds r0, r5, 0
- movs r1, 0x19
- bl SetMonData
- ldr r1, _08156C60 @ =gBattlerControllerFuncs
- lsls r0, r7, 2
- adds r0, r1
- ldr r1, _08156C64 @ =sub_8156EE8
- str r1, [r0]
- mov r0, r8
- bl DestroyTask
-_08156C50:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08156C60: .4byte gBattlerControllerFuncs
-_08156C64: .4byte sub_8156EE8
- thumb_func_end sub_8156B24
-
- thumb_func_start sub_8156C68
-sub_8156C68: @ 8156C68
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08156CBC @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldrb r4, [r0, 0xC]
- ldrb r6, [r0, 0x8]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08156C9C
- ldr r1, _08156CC0 @ =gBattlerPartyIndexes
- movs r0, 0x2
- adds r2, r4, 0
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r6, r0
- bne _08156C9C
- adds r4, r2, 0
-_08156C9C:
- adds r0, r4, 0
- adds r1, r4, 0
- adds r2, r4, 0
- movs r3, 0
- bl InitAndLaunchSpecialAnimation
- ldr r0, _08156CBC @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _08156CC4 @ =sub_8156CC8
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08156CBC: .4byte gTasks
-_08156CC0: .4byte gBattlerPartyIndexes
-_08156CC4: .4byte sub_8156CC8
- thumb_func_end sub_8156C68
-
- thumb_func_start sub_8156CC8
-sub_8156CC8: @ 8156CC8
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _08156D34 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r2, r0, r1
- ldrb r5, [r2, 0xC]
- ldr r0, _08156D38 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08156D6A
- ldrb r4, [r2, 0x8]
- movs r0, 0x64
- adds r1, r4, 0
- muls r1, r0
- ldr r0, _08156D3C @ =gPlayerParty
- adds r7, r1, r0
- adds r0, r7, 0
- movs r1, 0x38
- bl GetMonData
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08156D48
- ldr r1, _08156D40 @ =gBattlerPartyIndexes
- movs r0, 0x2
- adds r2, r5, 0
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- bne _08156D48
- ldr r0, _08156D44 @ =gHealthboxSpriteIds
- adds r0, r2, r0
- ldrb r0, [r0]
- adds r1, r7, 0
- movs r2, 0
- bl UpdateHealthboxAttribute
- b _08156D5C
- .align 2, 0
-_08156D34: .4byte gTasks
-_08156D38: .4byte gBattleSpritesDataPtr
-_08156D3C: .4byte gPlayerParty
-_08156D40: .4byte gBattlerPartyIndexes
-_08156D44: .4byte gHealthboxSpriteIds
-_08156D48:
- ldr r0, _08156D70 @ =gHealthboxSpriteIds
- adds r0, r5, r0
- ldrb r0, [r0]
- movs r1, 0x64
- muls r1, r4
- ldr r2, _08156D74 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
-_08156D5C:
- ldr r0, _08156D78 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _08156D7C @ =sub_8156D80
- str r0, [r1]
-_08156D6A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08156D70: .4byte gHealthboxSpriteIds
-_08156D74: .4byte gPlayerParty
-_08156D78: .4byte gTasks
-_08156D7C: .4byte sub_8156D80
- thumb_func_end sub_8156CC8
-
- thumb_func_start sub_8156D80
-sub_8156D80: @ 8156D80
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _08156DBC @ =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- ldrb r1, [r4, 0x8]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08156DC0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- bl GetMonData
- ldrb r0, [r4, 0xC]
- ldr r1, _08156DC4 @ =gBattlerControllerFuncs
- lsls r0, 2
- adds r0, r1
- ldr r1, _08156DC8 @ =sub_8156EE8
- str r1, [r0]
- adds r0, r5, 0
- bl DestroyTask
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08156DBC: .4byte gTasks
-_08156DC0: .4byte gPlayerParty
-_08156DC4: .4byte gBattlerControllerFuncs
-_08156DC8: .4byte sub_8156EE8
- thumb_func_end sub_8156D80
-
- thumb_func_start sub_8156DCC
-sub_8156DCC: @ 8156DCC
- push {r4-r6,lr}
- ldr r4, _08156E2C @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08156E3C
- ldr r6, _08156E30 @ =gSprites
- ldr r5, _08156E34 @ =gBattlerSpriteIds
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, r0, r6
- movs r1, 0x22
- ldrsh r0, [r2, r1]
- movs r3, 0x26
- ldrsh r1, [r2, r3]
- adds r0, r1
- cmp r0, 0xA0
- ble _08156E66
- ldrb r0, [r2, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- ldr r1, _08156E38 @ =gHealthboxSpriteIds
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerPartnerBufferExecCompleted
- b _08156E66
- .align 2, 0
-_08156E2C: .4byte gActiveBattler
-_08156E30: .4byte gSprites
-_08156E34: .4byte gBattlerSpriteIds
-_08156E38: .4byte gHealthboxSpriteIds
-_08156E3C:
- ldr r2, _08156E6C @ =gSprites
- ldr r0, _08156E70 @ =gBattlerSpriteIds
- ldrb r3, [r4]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- bne _08156E66
- ldr r0, _08156E74 @ =gHealthboxSpriteIds
- adds r0, r3, r0
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerPartnerBufferExecCompleted
-_08156E66:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08156E6C: .4byte gSprites
-_08156E70: .4byte gBattlerSpriteIds
-_08156E74: .4byte gHealthboxSpriteIds
- thumb_func_end sub_8156DCC
-
- thumb_func_start sub_8156E78
-sub_8156E78: @ 8156E78
- push {r4-r6,lr}
- ldr r5, _08156EB8 @ =gActiveBattler
- ldrb r0, [r5]
- ldr r6, _08156EBC @ =gHealthboxSpriteIds
- adds r1, r0, r6
- ldrb r1, [r1]
- movs r2, 0
- movs r3, 0
- bl MoveBattleBar
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- lsls r4, 16
- asrs r1, r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08156EC0
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- movs r2, 0
- bl UpdateHpTextInHealthbox
- b _08156EDA
- .align 2, 0
-_08156EB8: .4byte gActiveBattler
-_08156EBC: .4byte gHealthboxSpriteIds
-_08156EC0:
- ldr r2, _08156EE0 @ =gBattlerPartyIndexes
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _08156EE4 @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- bl PlayerPartnerBufferExecCompleted
-_08156EDA:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08156EE0: .4byte gBattlerPartyIndexes
-_08156EE4: .4byte gPlayerParty
- thumb_func_end sub_8156E78
-
- thumb_func_start sub_8156EE8
-sub_8156EE8: @ 8156EE8
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _08156EFA
- bl PlayerPartnerBufferExecCompleted
-_08156EFA:
- pop {r0}
- bx r0
- thumb_func_end sub_8156EE8
-
- thumb_func_start sub_8156F00
-sub_8156F00: @ 8156F00
- push {r4,lr}
- ldr r1, _08156F3C @ =gBattlerSpriteIds
- ldr r0, _08156F40 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- ldr r2, _08156F44 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, r0, r2
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- cmp r0, 0x20
- bne _08156F4C
- movs r3, 0
- movs r0, 0
- strh r0, [r4, 0x30]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- subs r0, 0x5
- ands r0, r1
- strb r0, [r2]
- ldr r0, _08156F48 @ =gDoingBattleAnim
- strb r3, [r0]
- bl PlayerPartnerBufferExecCompleted
- b _08156F76
- .align 2, 0
-_08156F3C: .4byte gBattlerSpriteIds
-_08156F40: .4byte gActiveBattler
-_08156F44: .4byte gSprites
-_08156F48: .4byte gDoingBattleAnim
-_08156F4C:
- ldrh r0, [r4, 0x30]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _08156F70
- 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]
-_08156F70:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
-_08156F76:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8156F00
-
- thumb_func_start sub_8156F7C
-sub_8156F7C: @ 8156F7C
- push {r4-r6,lr}
- ldr r0, _08156FD8 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r6, _08156FDC @ =gActiveBattler
- ldrb r2, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08156FD0
- ldr r5, _08156FE0 @ =gBattlerSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _08156FE4 @ =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, _08156FE8 @ =gHealthboxSpriteIds
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerPartnerBufferExecCompleted
-_08156FD0:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08156FD8: .4byte gBattleSpritesDataPtr
-_08156FDC: .4byte gActiveBattler
-_08156FE0: .4byte gBattlerSpriteIds
-_08156FE4: .4byte gSprites
-_08156FE8: .4byte gHealthboxSpriteIds
- thumb_func_end sub_8156F7C
-
- thumb_func_start sub_8156FEC
-sub_8156FEC: @ 8156FEC
- push {lr}
- ldr r2, _08157014 @ =gSprites
- ldr r1, _08157018 @ =gBattlerSpriteIds
- ldr r0, _0815701C @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _08157020 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08157010
- bl PlayerPartnerBufferExecCompleted
-_08157010:
- pop {r0}
- bx r0
- .align 2, 0
-_08157014: .4byte gSprites
-_08157018: .4byte gBattlerSpriteIds
-_0815701C: .4byte gActiveBattler
-_08157020: .4byte SpriteCallbackDummy
- thumb_func_end sub_8156FEC
-
- thumb_func_start sub_8157024
-sub_8157024: @ 8157024
- push {lr}
- ldr r0, _0815704C @ =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, _08157050 @ =gActiveBattler
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _08157046
- bl PlayerPartnerBufferExecCompleted
-_08157046:
- pop {r0}
- bx r0
- .align 2, 0
-_0815704C: .4byte gBattleSpritesDataPtr
-_08157050: .4byte gActiveBattler
- thumb_func_end sub_8157024
-
- thumb_func_start sub_8157054
-sub_8157054: @ 8157054
- push {lr}
- ldr r0, _0815707C @ =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, _08157080 @ =gActiveBattler
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _08157076
- bl PlayerPartnerBufferExecCompleted
-_08157076:
- pop {r0}
- bx r0
- .align 2, 0
-_0815707C: .4byte gBattleSpritesDataPtr
-_08157080: .4byte gActiveBattler
- thumb_func_end sub_8157054
-
- thumb_func_start PlayerPartnerBufferExecCompleted
-PlayerPartnerBufferExecCompleted: @ 8157084
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _081570C4 @ =gBattlerControllerFuncs
- ldr r4, _081570C8 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _081570CC @ =sub_81560DC
- str r1, [r0]
- ldr r0, _081570D0 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _081570D8
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl PrepareBufferDataTransferLink
- ldr r1, _081570D4 @ =gBattleBufferA
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _081570EA
- .align 2, 0
-_081570C4: .4byte gBattlerControllerFuncs
-_081570C8: .4byte gActiveBattler
-_081570CC: .4byte sub_81560DC
-_081570D0: .4byte gBattleTypeFlags
-_081570D4: .4byte gBattleBufferA
-_081570D8:
- ldr r2, _081570F4 @ =gBattleControllerExecFlags
- ldr r1, _081570F8 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_081570EA:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081570F4: .4byte gBattleControllerExecFlags
-_081570F8: .4byte gBitTable
- thumb_func_end PlayerPartnerBufferExecCompleted
-
- thumb_func_start CompleteOnFinishedStatusAnimation_7
-CompleteOnFinishedStatusAnimation_7: @ 81570FC
- push {lr}
- ldr r0, _08157124 @ =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, _08157128 @ =gActiveBattler
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0815711E
- bl PlayerPartnerBufferExecCompleted
-_0815711E:
- pop {r0}
- bx r0
- .align 2, 0
-_08157124: .4byte gBattleSpritesDataPtr
-_08157128: .4byte gActiveBattler
- thumb_func_end CompleteOnFinishedStatusAnimation_7
-
- thumb_func_start sub_815712C
-sub_815712C: @ 815712C
- push {r4-r6,lr}
- sub sp, 0x100
- movs r6, 0
- ldr r1, _08157158 @ =gBattleBufferA
- ldr r0, _0815715C @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _08157164
- ldr r0, _08157160 @ =gBattlerPartyIndexes
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- mov r1, sp
- bl sub_81571A0
- adds r6, r0, 0
- b _08157186
- .align 2, 0
-_08157158: .4byte gBattleBufferA
-_0815715C: .4byte gActiveBattler
-_08157160: .4byte gBattlerPartyIndexes
-_08157164:
- ldrb r4, [r1]
- movs r5, 0
-_08157168:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0815717E
- lsls r0, r5, 24
- lsrs r0, 24
- mov r2, sp
- adds r1, r2, r6
- bl sub_81571A0
- adds r6, r0
-_0815717E:
- lsrs r4, 1
- adds r5, 0x1
- cmp r5, 0x5
- ble _08157168
-_08157186:
- lsls r1, r6, 16
- lsrs r1, 16
- movs r0, 0x1
- mov r2, sp
- bl BtlController_EmitDataTransfer
- bl PlayerPartnerBufferExecCompleted
- add sp, 0x100
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_815712C
-
- thumb_func_start sub_81571A0
-sub_81571A0: @ 81571A0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8C
- adds r7, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0
- ldr r0, _081571CC @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _081571D4
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _081571D0 @ =gPlayerParty
- b _081571DC
- .align 2, 0
-_081571CC: .4byte gActiveBattler
-_081571D0: .4byte gPlayerParty
-_081571D4:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _081571FC @ =gEnemyParty
-_081571DC:
- adds r6, r1, r0
- ldr r3, _08157200 @ =gBattleBufferA
- ldr r2, _08157204 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 9
- adds r1, r3, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x3B
- bls _081571F2
- b _0815773C
-_081571F2:
- lsls r0, 2
- ldr r1, _08157208 @ =_0815720C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_081571FC: .4byte gEnemyParty
-_08157200: .4byte gBattleBufferA
-_08157204: .4byte gActiveBattler
-_08157208: .4byte _0815720C
- .align 2, 0
-_0815720C:
- .4byte _081572FC
- .4byte _08157508
- .4byte _0815750E
- .4byte _08157514
- .4byte _08157564
- .4byte _08157564
- .4byte _08157564
- .4byte _08157564
- .4byte _08157574
- .4byte _0815759A
- .4byte _0815759A
- .4byte _0815759A
- .4byte _0815759A
- .4byte _0815773C
- .4byte _0815773C
- .4byte _0815773C
- .4byte _0815773C
- .4byte _081575AA
- .4byte _081575B0
- .4byte _081575D4
- .4byte _081575DA
- .4byte _081575E0
- .4byte _081575E6
- .4byte _081575EC
- .4byte _081575F2
- .4byte _081575F8
- .4byte _081575FE
- .4byte _08157604
- .4byte _0815760A
- .4byte _08157610
- .4byte _08157616
- .4byte _0815761C
- .4byte _0815765C
- .4byte _08157662
- .4byte _08157668
- .4byte _0815766E
- .4byte _08157674
- .4byte _0815767A
- .4byte _08157680
- .4byte _08157686
- .4byte _0815768C
- .4byte _081576B4
- .4byte _081576BA
- .4byte _081576C0
- .4byte _081576C6
- .4byte _081576CC
- .4byte _081576D2
- .4byte _081576D8
- .4byte _081576DE
- .4byte _081576F4
- .4byte _081576FA
- .4byte _08157700
- .4byte _08157706
- .4byte _0815770C
- .4byte _08157712
- .4byte _08157718
- .4byte _0815771E
- .4byte _08157724
- .4byte _0815772A
- .4byte _08157730
-_081572FC:
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- mov r1, sp
- strh r0, [r1]
- adds r0, r6, 0
- movs r1, 0xC
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2E]
- movs r4, 0
- add r0, sp, 0x24
- mov r8, r0
- movs r1, 0x3B
- add r1, sp
- mov r9, r1
- movs r2, 0x2B
- add r2, sp
- mov r10, r2
- mov r0, sp
- adds r0, 0x2A
- str r0, [sp, 0x7C]
- mov r1, sp
- adds r1, 0x68
- str r1, [sp, 0x88]
- mov r2, sp
- adds r2, 0x30
- str r2, [sp, 0x80]
- adds r0, 0x12
- str r0, [sp, 0x84]
- add r5, sp, 0xC
-_0815733E:
- adds r1, r4, 0
- adds r1, 0xD
- adds r0, r6, 0
- bl GetMonData
- strh r0, [r5]
- adds r1, r4, 0
- adds r1, 0x11
- adds r0, r6, 0
- bl GetMonData
- mov r2, r8
- adds r1, r2, r4
- strb r0, [r1]
- adds r5, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- ble _0815733E
- adds r0, r6, 0
- movs r1, 0x15
- bl GetMonData
- mov r1, r9
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x20
- bl GetMonData
- mov r2, r10
- strb r0, [r2]
- adds r0, r6, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x44]
- adds r0, r6, 0
- movs r1, 0x27
- bl GetMonData
- mov r3, sp
- movs r4, 0x1F
- ands r0, r4
- ldrb r2, [r3, 0x14]
- movs r1, 0x20
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x14]
- adds r0, r6, 0
- movs r1, 0x28
- bl GetMonData
- mov r3, sp
- movs r5, 0x1F
- ands r0, r5
- lsls r0, 5
- ldrh r2, [r3, 0x14]
- ldr r1, _081574FC @ =0xfffffc1f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x14]
- adds r0, r6, 0
- movs r1, 0x29
- bl GetMonData
- mov r3, sp
- ands r0, r4
- lsls r0, 2
- ldrb r2, [r3, 0x15]
- movs r1, 0x7D
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x15]
- adds r0, r6, 0
- movs r1, 0x2A
- bl GetMonData
- movs r1, 0x1F
- ands r1, r0
- lsls r1, 15
- ldr r0, [sp, 0x14]
- ldr r2, _08157500 @ =0xfff07fff
- ands r0, r2
- orrs r0, r1
- str r0, [sp, 0x14]
- adds r0, r6, 0
- movs r1, 0x2B
- bl GetMonData
- mov r3, sp
- ands r0, r5
- lsls r0, 4
- ldrh r2, [r3, 0x16]
- ldr r1, _08157504 @ =0xfffffe0f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x16]
- adds r0, r6, 0
- movs r1, 0x2C
- bl GetMonData
- mov r3, sp
- ands r0, r4
- lsls r0, 1
- ldrb r2, [r3, 0x17]
- movs r1, 0x3F
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r6, 0
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x48]
- adds r0, r6, 0
- movs r1, 0x37
- bl GetMonData
- str r0, [sp, 0x4C]
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- ldr r1, [sp, 0x7C]
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x39
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x28]
- adds r0, r6, 0
- movs r1, 0x3A
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2C]
- adds r0, r6, 0
- movs r1, 0x3B
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2]
- adds r0, r6, 0
- movs r1, 0x3C
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x4]
- adds r0, r6, 0
- movs r1, 0x3D
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x6]
- adds r0, r6, 0
- movs r1, 0x3E
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x8]
- adds r0, r6, 0
- movs r1, 0x3F
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0xA]
- adds r0, r6, 0
- movs r1, 0x2D
- bl GetMonData
- mov r3, sp
- movs r1, 0x1
- ands r0, r1
- lsls r0, 6
- ldrb r2, [r3, 0x17]
- movs r1, 0x41
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r6, 0
- movs r1, 0x2E
- bl GetMonData
- mov r3, sp
- lsls r0, 7
- ldrb r2, [r3, 0x17]
- movs r1, 0x7F
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x17]
- adds r0, r6, 0
- movs r1, 0x1
- bl GetMonData
- str r0, [sp, 0x54]
- adds r0, r6, 0
- movs r1, 0x2
- ldr r2, [sp, 0x88]
- bl GetMonData
- ldr r0, [sp, 0x80]
- ldr r1, [sp, 0x88]
- bl StringCopy10
- adds r0, r6, 0
- movs r1, 0x7
- ldr r2, [sp, 0x84]
- bl GetMonData
- mov r2, sp
- movs r4, 0
-_081574EC:
- adds r0, r7, r4
- adds r1, r2, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r4, 0x1
- cmp r4, 0x57
- bls _081574EC
- b _0815773C
- .align 2, 0
-_081574FC: .4byte 0xfffffc1f
-_08157500: .4byte 0xfff07fff
-_08157504: .4byte 0xfffffe0f
-_08157508:
- adds r0, r6, 0
- movs r1, 0xB
- b _081576E2
-_0815750E:
- adds r0, r6, 0
- movs r1, 0xC
- b _081576E2
-_08157514:
- movs r4, 0
- add r2, sp, 0x58
- mov r8, r2
- add r0, sp, 0x60
- mov r9, r0
- mov r5, r8
-_08157520:
- adds r1, r4, 0
- adds r1, 0xD
- adds r0, r6, 0
- bl GetMonData
- strh r0, [r5]
- adds r1, r4, 0
- adds r1, 0x11
- adds r0, r6, 0
- bl GetMonData
- mov r2, r9
- adds r1, r2, r4
- strb r0, [r1]
- adds r5, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- ble _08157520
- adds r0, r6, 0
- movs r1, 0x15
- bl GetMonData
- mov r1, r8
- strb r0, [r1, 0xC]
- mov r2, r8
- movs r4, 0
-_08157554:
- adds r0, r7, r4
- adds r1, r2, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r4, 0x1
- cmp r4, 0xF
- bls _08157554
- b _0815773C
-_08157564:
- ldrb r0, [r2]
- lsls r0, 9
- adds r1, r3, 0x1
- adds r0, r1
- ldrb r1, [r0]
- adds r1, 0x9
- adds r0, r6, 0
- b _081576E2
-_08157574:
- movs r4, 0
-_08157576:
- adds r1, r4, 0
- adds r1, 0x11
- adds r0, r6, 0
- bl GetMonData
- adds r1, r7, r4
- strb r0, [r1]
- adds r4, 0x1
- cmp r4, 0x3
- ble _08157576
- adds r0, r6, 0
- movs r1, 0x15
- bl GetMonData
- adds r1, r7, r4
- strb r0, [r1]
- adds r4, 0x1
- b _0815773C
-_0815759A:
- ldrb r0, [r2]
- lsls r0, 9
- adds r1, r3, 0x1
- adds r0, r1
- ldrb r1, [r0]
- adds r1, 0x8
- adds r0, r6, 0
- b _08157734
-_081575AA:
- adds r0, r6, 0
- movs r1, 0x1
- b _081575B4
-_081575B0:
- adds r0, r6, 0
- movs r1, 0x19
-_081575B4:
- bl GetMonData
- adds r1, r0, 0
- strb r1, [r7]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- lsrs r0, 16
- strb r0, [r7, 0x2]
- movs r4, 0x3
- b _0815773C
-_081575D4:
- adds r0, r6, 0
- movs r1, 0x1A
- b _08157734
-_081575DA:
- adds r0, r6, 0
- movs r1, 0x1B
- b _08157734
-_081575E0:
- adds r0, r6, 0
- movs r1, 0x1C
- b _08157734
-_081575E6:
- adds r0, r6, 0
- movs r1, 0x1D
- b _08157734
-_081575EC:
- adds r0, r6, 0
- movs r1, 0x1E
- b _08157734
-_081575F2:
- adds r0, r6, 0
- movs r1, 0x1F
- b _08157734
-_081575F8:
- adds r0, r6, 0
- movs r1, 0x20
- b _08157734
-_081575FE:
- adds r0, r6, 0
- movs r1, 0x22
- b _08157734
-_08157604:
- adds r0, r6, 0
- movs r1, 0x23
- b _08157734
-_0815760A:
- adds r0, r6, 0
- movs r1, 0x24
- b _08157734
-_08157610:
- adds r0, r6, 0
- movs r1, 0x25
- b _08157734
-_08157616:
- adds r0, r6, 0
- movs r1, 0x26
- b _08157734
-_0815761C:
- adds r0, r6, 0
- movs r1, 0x27
- bl GetMonData
- strb r0, [r7]
- adds r0, r6, 0
- movs r1, 0x28
- bl GetMonData
- strb r0, [r7, 0x1]
- adds r0, r6, 0
- movs r1, 0x29
- bl GetMonData
- strb r0, [r7, 0x2]
- adds r0, r6, 0
- movs r1, 0x2A
- bl GetMonData
- strb r0, [r7, 0x3]
- adds r0, r6, 0
- movs r1, 0x2B
- bl GetMonData
- strb r0, [r7, 0x4]
- adds r0, r6, 0
- movs r1, 0x2C
- bl GetMonData
- strb r0, [r7, 0x5]
- movs r4, 0x6
- b _0815773C
-_0815765C:
- adds r0, r6, 0
- movs r1, 0x27
- b _08157734
-_08157662:
- adds r0, r6, 0
- movs r1, 0x28
- b _08157734
-_08157668:
- adds r0, r6, 0
- movs r1, 0x29
- b _08157734
-_0815766E:
- adds r0, r6, 0
- movs r1, 0x2A
- b _08157734
-_08157674:
- adds r0, r6, 0
- movs r1, 0x2B
- b _08157734
-_0815767A:
- adds r0, r6, 0
- movs r1, 0x2C
- b _08157734
-_08157680:
- adds r0, r6, 0
- movs r1, 0
- b _08157690
-_08157686:
- adds r0, r6, 0
- movs r1, 0x9
- b _081576E2
-_0815768C:
- adds r0, r6, 0
- movs r1, 0x37
-_08157690:
- bl GetMonData
- adds r1, r0, 0
- strb r1, [r7]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- lsrs r0, 16
- strb r0, [r7, 0x2]
- lsrs r0, r1, 24
- strb r0, [r7, 0x3]
- movs r4, 0x4
- b _0815773C
-_081576B4:
- adds r0, r6, 0
- movs r1, 0x38
- b _08157734
-_081576BA:
- adds r0, r6, 0
- movs r1, 0x39
- b _081576E2
-_081576C0:
- adds r0, r6, 0
- movs r1, 0x3A
- b _081576E2
-_081576C6:
- adds r0, r6, 0
- movs r1, 0x3B
- b _081576E2
-_081576CC:
- adds r0, r6, 0
- movs r1, 0x3C
- b _081576E2
-_081576D2:
- adds r0, r6, 0
- movs r1, 0x3D
- b _081576E2
-_081576D8:
- adds r0, r6, 0
- movs r1, 0x3E
- b _081576E2
-_081576DE:
- adds r0, r6, 0
- movs r1, 0x3F
-_081576E2:
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- strb r0, [r7]
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r4, 0x2
- b _0815773C
-_081576F4:
- adds r0, r6, 0
- movs r1, 0x16
- b _08157734
-_081576FA:
- adds r0, r6, 0
- movs r1, 0x17
- b _08157734
-_08157700:
- adds r0, r6, 0
- movs r1, 0x18
- b _08157734
-_08157706:
- adds r0, r6, 0
- movs r1, 0x21
- b _08157734
-_0815770C:
- adds r0, r6, 0
- movs r1, 0x2F
- b _08157734
-_08157712:
- adds r0, r6, 0
- movs r1, 0x30
- b _08157734
-_08157718:
- adds r0, r6, 0
- movs r1, 0x32
- b _08157734
-_0815771E:
- adds r0, r6, 0
- movs r1, 0x33
- b _08157734
-_08157724:
- adds r0, r6, 0
- movs r1, 0x34
- b _08157734
-_0815772A:
- adds r0, r6, 0
- movs r1, 0x35
- b _08157734
-_08157730:
- adds r0, r6, 0
- movs r1, 0x36
-_08157734:
- bl GetMonData
- strb r0, [r7]
- movs r4, 0x1
-_0815773C:
- adds r0, r4, 0
- add sp, 0x8C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_81571A0
-
- thumb_func_start sub_8157750
-sub_8157750: @ 8157750
- push {lr}
- bl PlayerHandleGetRawMonData
- pop {r0}
- bx r0
- thumb_func_end sub_8157750
-
- thumb_func_start sub_815775C
-sub_815775C: @ 815775C
- push {r4,r5,lr}
- ldr r1, _08157780 @ =gBattleBufferA
- ldr r0, _08157784 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _0815778C
- ldr r0, _08157788 @ =gBattlerPartyIndexes
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- bl sub_81577B4
- b _081577AA
- .align 2, 0
-_08157780: .4byte gBattleBufferA
-_08157784: .4byte gActiveBattler
-_08157788: .4byte gBattlerPartyIndexes
-_0815778C:
- ldrb r4, [r1]
- movs r5, 0
-_08157790:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0815779E
- adds r0, r5, 0
- bl sub_81577B4
-_0815779E:
- lsrs r4, 1
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _08157790
-_081577AA:
- bl PlayerPartnerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_815775C
-
- thumb_func_start sub_81577B4
-sub_81577B4: @ 81577B4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x30
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _081577E4 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r2, r0, 9
- ldr r1, _081577E8 @ =gBattleBufferA + 3
- adds r5, r2, r1
- mov r8, r5
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _081577F0
- movs r0, 0x64
- adds r1, r4, 0
- muls r1, r0
- ldr r0, _081577EC @ =gPlayerParty
- b _081577F8
- .align 2, 0
-_081577E4: .4byte gActiveBattler
-_081577E8: .4byte gBattleBufferA + 3
-_081577EC: .4byte gPlayerParty
-_081577F0:
- movs r0, 0x64
- adds r1, r4, 0
- muls r1, r0
- ldr r0, _0815781C @ =gEnemyParty
-_081577F8:
- adds r6, r1, r0
- ldr r2, _08157820 @ =gBattleBufferA
- ldr r0, _08157824 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, r2, 0x1
- adds r0, r1
- ldrb r0, [r0]
- adds r3, r2, 0
- cmp r0, 0x3B
- bls _08157812
- bl _0815809A
-_08157812:
- lsls r0, 2
- ldr r1, _08157828 @ =_0815782C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0815781C: .4byte gEnemyParty
-_08157820: .4byte gBattleBufferA
-_08157824: .4byte gActiveBattler
-_08157828: .4byte _0815782C
- .align 2, 0
-_0815782C:
- .4byte _0815791C
- .4byte _08157AA4
- .4byte _08157AC0
- .4byte _08157ADC
- .4byte _08157B16
- .4byte _08157B16
- .4byte _08157B16
- .4byte _08157B16
- .4byte _08157B2C
- .4byte _08157B88
- .4byte _08157B88
- .4byte _08157B88
- .4byte _08157B88
- .4byte _0815809A
- .4byte _0815809A
- .4byte _0815809A
- .4byte _0815809A
- .4byte _08157BA8
- .4byte _08157BC4
- .4byte _08157BE0
- .4byte _08157BFC
- .4byte _08157C18
- .4byte _08157C34
- .4byte _08157C50
- .4byte _08157C6C
- .4byte _08157C88
- .4byte _08157CA4
- .4byte _08157CC0
- .4byte _08157CDC
- .4byte _08157CF8
- .4byte _08157D14
- .4byte _08157D30
- .4byte _08157D94
- .4byte _08157DB0
- .4byte _08157DCC
- .4byte _08157DE8
- .4byte _08157E04
- .4byte _08157E20
- .4byte _08157E3C
- .4byte _08157E58
- .4byte _08157E74
- .4byte _08157E90
- .4byte _08157EAC
- .4byte _08157EC8
- .4byte _08157EE4
- .4byte _08157F00
- .4byte _08157F1C
- .4byte _08157F38
- .4byte _08157F54
- .4byte _08157F70
- .4byte _08157F8C
- .4byte _08157FA8
- .4byte _08157FC4
- .4byte _08157FE0
- .4byte _08157FFC
- .4byte _08158018
- .4byte _08158034
- .4byte _08158050
- .4byte _0815806C
- .4byte _08158088
-_0815791C:
- adds r0, r6, 0
- movs r1, 0xB
- mov r2, r8
- bl SetMonData
- mov r2, r8
- adds r2, 0x2E
- adds r0, r6, 0
- movs r1, 0xC
- bl SetMonData
- movs r4, 0
- movs r0, 0x3B
- add r0, r8
- mov r9, r0
- movs r1, 0x2B
- add r1, r8
- mov r10, r1
- mov r2, r8
- adds r2, 0x44
- str r2, [sp, 0x10]
- mov r0, r8
- adds r0, 0x48
- str r0, [sp, 0x14]
- mov r1, r8
- adds r1, 0x4C
- str r1, [sp, 0x18]
- subs r2, 0x1A
- str r2, [sp, 0x8]
- subs r0, 0x20
- str r0, [sp, 0x4]
- subs r1, 0x20
- str r1, [sp, 0xC]
- subs r2, 0x28
- str r2, [sp, 0x1C]
- subs r0, 0x24
- str r0, [sp, 0x20]
- subs r1, 0x26
- str r1, [sp, 0x24]
- adds r2, 0x6
- str r2, [sp, 0x28]
- adds r0, 0x6
- str r0, [sp, 0x2C]
- mov r7, r8
- adds r7, 0x24
- mov r5, r8
- adds r5, 0xC
-_0815797A:
- adds r1, r4, 0
- adds r1, 0xD
- adds r0, r6, 0
- adds r2, r5, 0
- bl SetMonData
- adds r1, r4, 0
- adds r1, 0x11
- adds r0, r6, 0
- adds r2, r7, 0
- bl SetMonData
- adds r7, 0x1
- adds r5, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- ble _0815797A
- adds r0, r6, 0
- movs r1, 0x15
- mov r2, r9
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x20
- mov r2, r10
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x19
- ldr r2, [sp, 0x10]
- bl SetMonData
- mov r1, r8
- ldrb r0, [r1, 0x14]
- lsls r0, 27
- lsrs r0, 27
- mov r1, sp
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x27
- mov r2, sp
- bl SetMonData
- mov r1, sp
- mov r2, r8
- ldrh r0, [r2, 0x14]
- lsls r0, 22
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x28
- mov r2, sp
- bl SetMonData
- mov r1, sp
- mov r2, r8
- ldrb r0, [r2, 0x15]
- lsls r0, 25
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x29
- mov r2, sp
- bl SetMonData
- mov r1, sp
- mov r2, r8
- ldr r0, [r2, 0x14]
- lsls r0, 12
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x2A
- mov r2, sp
- bl SetMonData
- mov r1, sp
- mov r2, r8
- ldrh r0, [r2, 0x16]
- lsls r0, 23
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x2B
- mov r2, sp
- bl SetMonData
- mov r1, sp
- mov r2, r8
- ldrb r0, [r2, 0x17]
- lsls r0, 26
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x2C
- mov r2, sp
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0
- ldr r2, [sp, 0x14]
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x37
- ldr r2, [sp, 0x18]
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x38
- ldr r2, [sp, 0x8]
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x39
- ldr r2, [sp, 0x4]
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x3A
- ldr r2, [sp, 0xC]
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x3B
- ldr r2, [sp, 0x1C]
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x3C
- ldr r2, [sp, 0x20]
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x3D
- ldr r2, [sp, 0x24]
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x3E
- ldr r2, [sp, 0x28]
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x3F
- ldr r2, [sp, 0x2C]
- bl SetMonData
- b _0815809A
-_08157AA4:
- ldr r0, _08157AB8 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157ABC @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0xB
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157AB8: .4byte gActiveBattler
-_08157ABC: .4byte gBattleBufferA + 3
-_08157AC0:
- ldr r0, _08157AD4 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157AD8 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0xC
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157AD4: .4byte gActiveBattler
-_08157AD8: .4byte gBattleBufferA + 3
-_08157ADC:
- movs r4, 0
- movs r0, 0xC
- adds r0, r5
- mov r8, r0
- adds r7, r5, 0
- adds r7, 0x8
-_08157AE8:
- adds r1, r4, 0
- adds r1, 0xD
- adds r0, r6, 0
- adds r2, r5, 0
- bl SetMonData
- adds r1, r4, 0
- adds r1, 0x11
- adds r0, r6, 0
- adds r2, r7, 0
- bl SetMonData
- adds r7, 0x1
- adds r5, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- ble _08157AE8
- adds r0, r6, 0
- movs r1, 0x15
- mov r2, r8
- bl SetMonData
- b _0815809A
-_08157B16:
- ldr r0, _08157B28 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- adds r0, r3, 0x1
- adds r0, r2, r0
- ldrb r1, [r0]
- adds r1, 0x9
- b _08157B96
- .align 2, 0
-_08157B28: .4byte gActiveBattler
-_08157B2C:
- ldr r5, _08157B80 @ =gActiveBattler
- ldrb r2, [r5]
- lsls r2, 9
- ldr r4, _08157B84 @ =gBattleBufferA + 3
- adds r2, r4
- adds r0, r6, 0
- movs r1, 0x11
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r4, 0x1
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x12
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r4, 0x2
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x13
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r4, 0x3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x14
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r4, 0x4
- adds r2, r4
- adds r0, r6, 0
- movs r1, 0x15
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157B80: .4byte gActiveBattler
-_08157B84: .4byte gBattleBufferA + 3
-_08157B88:
- ldr r0, _08157BA4 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- adds r0, r3, 0x1
- adds r0, r2, r0
- ldrb r1, [r0]
- adds r1, 0x8
-_08157B96:
- adds r0, r3, 0x3
- adds r2, r0
- adds r0, r6, 0
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157BA4: .4byte gActiveBattler
-_08157BA8:
- ldr r0, _08157BBC @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157BC0 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x1
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157BBC: .4byte gActiveBattler
-_08157BC0: .4byte gBattleBufferA + 3
-_08157BC4:
- ldr r0, _08157BD8 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157BDC @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x19
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157BD8: .4byte gActiveBattler
-_08157BDC: .4byte gBattleBufferA + 3
-_08157BE0:
- ldr r0, _08157BF4 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157BF8 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x1A
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157BF4: .4byte gActiveBattler
-_08157BF8: .4byte gBattleBufferA + 3
-_08157BFC:
- ldr r0, _08157C10 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157C14 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x1B
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157C10: .4byte gActiveBattler
-_08157C14: .4byte gBattleBufferA + 3
-_08157C18:
- ldr r0, _08157C2C @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157C30 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x1C
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157C2C: .4byte gActiveBattler
-_08157C30: .4byte gBattleBufferA + 3
-_08157C34:
- ldr r0, _08157C48 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157C4C @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x1D
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157C48: .4byte gActiveBattler
-_08157C4C: .4byte gBattleBufferA + 3
-_08157C50:
- ldr r0, _08157C64 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157C68 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x1E
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157C64: .4byte gActiveBattler
-_08157C68: .4byte gBattleBufferA + 3
-_08157C6C:
- ldr r0, _08157C80 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157C84 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x1F
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157C80: .4byte gActiveBattler
-_08157C84: .4byte gBattleBufferA + 3
-_08157C88:
- ldr r0, _08157C9C @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157CA0 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x20
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157C9C: .4byte gActiveBattler
-_08157CA0: .4byte gBattleBufferA + 3
-_08157CA4:
- ldr r0, _08157CB8 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157CBC @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x22
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157CB8: .4byte gActiveBattler
-_08157CBC: .4byte gBattleBufferA + 3
-_08157CC0:
- ldr r0, _08157CD4 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157CD8 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x23
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157CD4: .4byte gActiveBattler
-_08157CD8: .4byte gBattleBufferA + 3
-_08157CDC:
- ldr r0, _08157CF0 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157CF4 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x24
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157CF0: .4byte gActiveBattler
-_08157CF4: .4byte gBattleBufferA + 3
-_08157CF8:
- ldr r0, _08157D0C @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157D10 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x25
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157D0C: .4byte gActiveBattler
-_08157D10: .4byte gBattleBufferA + 3
-_08157D14:
- ldr r0, _08157D28 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157D2C @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x26
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157D28: .4byte gActiveBattler
-_08157D2C: .4byte gBattleBufferA + 3
-_08157D30:
- ldr r5, _08157D8C @ =gActiveBattler
- ldrb r2, [r5]
- lsls r2, 9
- ldr r4, _08157D90 @ =gBattleBufferA + 3
- adds r2, r4
- adds r0, r6, 0
- movs r1, 0x27
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r4, 0x1
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x28
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r4, 0x2
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x29
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r4, 0x3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x2A
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r4, 0x4
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x2B
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r4, 0x5
- adds r2, r4
- b _08157E2A
- .align 2, 0
-_08157D8C: .4byte gActiveBattler
-_08157D90: .4byte gBattleBufferA + 3
-_08157D94:
- ldr r0, _08157DA8 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157DAC @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x27
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157DA8: .4byte gActiveBattler
-_08157DAC: .4byte gBattleBufferA + 3
-_08157DB0:
- ldr r0, _08157DC4 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157DC8 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x28
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157DC4: .4byte gActiveBattler
-_08157DC8: .4byte gBattleBufferA + 3
-_08157DCC:
- ldr r0, _08157DE0 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157DE4 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x29
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157DE0: .4byte gActiveBattler
-_08157DE4: .4byte gBattleBufferA + 3
-_08157DE8:
- ldr r0, _08157DFC @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157E00 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x2A
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157DFC: .4byte gActiveBattler
-_08157E00: .4byte gBattleBufferA + 3
-_08157E04:
- ldr r0, _08157E18 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157E1C @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x2B
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157E18: .4byte gActiveBattler
-_08157E1C: .4byte gBattleBufferA + 3
-_08157E20:
- ldr r0, _08157E34 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157E38 @ =gBattleBufferA + 3
- adds r2, r0
-_08157E2A:
- adds r0, r6, 0
- movs r1, 0x2C
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157E34: .4byte gActiveBattler
-_08157E38: .4byte gBattleBufferA + 3
-_08157E3C:
- ldr r0, _08157E50 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157E54 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157E50: .4byte gActiveBattler
-_08157E54: .4byte gBattleBufferA + 3
-_08157E58:
- ldr r0, _08157E6C @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157E70 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x9
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157E6C: .4byte gActiveBattler
-_08157E70: .4byte gBattleBufferA + 3
-_08157E74:
- ldr r0, _08157E88 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157E8C @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x37
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157E88: .4byte gActiveBattler
-_08157E8C: .4byte gBattleBufferA + 3
-_08157E90:
- ldr r0, _08157EA4 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157EA8 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x38
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157EA4: .4byte gActiveBattler
-_08157EA8: .4byte gBattleBufferA + 3
-_08157EAC:
- ldr r0, _08157EC0 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157EC4 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x39
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157EC0: .4byte gActiveBattler
-_08157EC4: .4byte gBattleBufferA + 3
-_08157EC8:
- ldr r0, _08157EDC @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157EE0 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x3A
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157EDC: .4byte gActiveBattler
-_08157EE0: .4byte gBattleBufferA + 3
-_08157EE4:
- ldr r0, _08157EF8 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157EFC @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x3B
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157EF8: .4byte gActiveBattler
-_08157EFC: .4byte gBattleBufferA + 3
-_08157F00:
- ldr r0, _08157F14 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157F18 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x3C
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157F14: .4byte gActiveBattler
-_08157F18: .4byte gBattleBufferA + 3
-_08157F1C:
- ldr r0, _08157F30 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157F34 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x3D
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157F30: .4byte gActiveBattler
-_08157F34: .4byte gBattleBufferA + 3
-_08157F38:
- ldr r0, _08157F4C @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157F50 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x3E
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157F4C: .4byte gActiveBattler
-_08157F50: .4byte gBattleBufferA + 3
-_08157F54:
- ldr r0, _08157F68 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157F6C @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x3F
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157F68: .4byte gActiveBattler
-_08157F6C: .4byte gBattleBufferA + 3
-_08157F70:
- ldr r0, _08157F84 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157F88 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x16
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157F84: .4byte gActiveBattler
-_08157F88: .4byte gBattleBufferA + 3
-_08157F8C:
- ldr r0, _08157FA0 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157FA4 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x17
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157FA0: .4byte gActiveBattler
-_08157FA4: .4byte gBattleBufferA + 3
-_08157FA8:
- ldr r0, _08157FBC @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157FC0 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x18
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157FBC: .4byte gActiveBattler
-_08157FC0: .4byte gBattleBufferA + 3
-_08157FC4:
- ldr r0, _08157FD8 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157FDC @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x21
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157FD8: .4byte gActiveBattler
-_08157FDC: .4byte gBattleBufferA + 3
-_08157FE0:
- ldr r0, _08157FF4 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08157FF8 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x2F
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08157FF4: .4byte gActiveBattler
-_08157FF8: .4byte gBattleBufferA + 3
-_08157FFC:
- ldr r0, _08158010 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08158014 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x30
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08158010: .4byte gActiveBattler
-_08158014: .4byte gBattleBufferA + 3
-_08158018:
- ldr r0, _0815802C @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08158030 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x32
- bl SetMonData
- b _0815809A
- .align 2, 0
-_0815802C: .4byte gActiveBattler
-_08158030: .4byte gBattleBufferA + 3
-_08158034:
- ldr r0, _08158048 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _0815804C @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x33
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08158048: .4byte gActiveBattler
-_0815804C: .4byte gBattleBufferA + 3
-_08158050:
- ldr r0, _08158064 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08158068 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x34
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08158064: .4byte gActiveBattler
-_08158068: .4byte gBattleBufferA + 3
-_0815806C:
- ldr r0, _08158080 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _08158084 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x35
- bl SetMonData
- b _0815809A
- .align 2, 0
-_08158080: .4byte gActiveBattler
-_08158084: .4byte gBattleBufferA + 3
-_08158088:
- ldr r0, _081580C4 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- ldr r0, _081580C8 @ =gBattleBufferA + 3
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x36
- bl SetMonData
-_0815809A:
- ldr r2, _081580CC @ =gBattlerPartyIndexes
- ldr r0, _081580C4 @ =gActiveBattler
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _081580D0 @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- add sp, 0x30
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081580C4: .4byte gActiveBattler
-_081580C8: .4byte gBattleBufferA + 3
-_081580CC: .4byte gBattlerPartyIndexes
-_081580D0: .4byte gPlayerParty
- thumb_func_end sub_81577B4
-
- thumb_func_start sub_81580D4
-sub_81580D4: @ 81580D4
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81580D4
-
- thumb_func_start sub_81580E0
-sub_81580E0: @ 81580E0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r6, _08158214 @ =gActiveBattler
- ldrb r0, [r6]
- lsls r0, 1
- ldr r1, _08158218 @ =gBattlerPartyIndexes
- adds r0, r1
- ldrh r0, [r0]
- movs r7, 0x64
- muls r0, r7
- ldr r2, _0815821C @ =gEnemyParty
- mov r10, r2
- add r0, r10
- movs r1, 0xB
- bl GetMonData
- mov r8, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldrb r1, [r6]
- lsls r0, r1, 1
- ldr r2, _08158218 @ =gBattlerPartyIndexes
- adds r0, r2
- ldrh r0, [r0]
- muls r0, r7
- add r0, r10
- bl BattleLoadOpponentMonSpriteGfx
- ldrb r0, [r6]
- bl GetBattlerSpriteDefault_Y
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldrb r0, [r6]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _08158220 @ =gMultiuseSpriteTemplate
- mov r9, r0
- ldrb r0, [r6]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldrb r0, [r6]
- bl GetBattlerSpriteSubpriority
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r9
- adds r1, r4, 0
- adds r2, r5, 0
- bl CreateSprite
- ldr r4, _08158224 @ =gBattlerSpriteIds
- ldrb r1, [r6]
- adds r1, r4
- strb r0, [r1]
- ldr r5, _08158228 @ =gSprites
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _0815822C @ =0x0000ff10
- strh r1, [r0, 0x24]
- ldrb r2, [r6]
- adds r0, r2, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x2E]
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r8
- strh r1, [r0, 0x32]
- ldrb r3, [r6]
- adds r0, r3, r4
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r2, [r6]
- adds r4, r2, r4
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _08158230 @ =gBattleMonForms
- adds r2, r1
- ldrb r1, [r2]
- bl StartSpriteAnim
- ldrb r4, [r6]
- lsls r0, r4, 1
- ldr r2, _08158218 @ =gBattlerPartyIndexes
- adds r0, r2
- ldrh r0, [r0]
- muls r0, r7
- add r0, r10
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl SetBattlerShadowSpriteCallback
- ldr r1, _08158234 @ =gBattlerControllerFuncs
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08158238 @ =sub_8156184
- str r1, [r0]
- bl PlayerPartnerBufferExecCompleted
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08158214: .4byte gActiveBattler
-_08158218: .4byte gBattlerPartyIndexes
-_0815821C: .4byte gEnemyParty
-_08158220: .4byte gMultiuseSpriteTemplate
-_08158224: .4byte gBattlerSpriteIds
-_08158228: .4byte gSprites
-_0815822C: .4byte 0x0000ff10
-_08158230: .4byte gBattleMonForms
-_08158234: .4byte gBattlerControllerFuncs
-_08158238: .4byte sub_8156184
- thumb_func_end sub_81580E0
-
- thumb_func_start sub_815823C
-sub_815823C: @ 815823C
- push {r4,r5,lr}
- ldr r5, _081582A0 @ =gActiveBattler
- ldrb r0, [r5]
- ldr r4, _081582A4 @ =gBattleBufferA
- lsls r1, r0, 9
- adds r2, r4, 0x2
- adds r1, r2
- ldrb r1, [r1]
- bl ClearTemporarySpeciesSpriteData
- ldr r2, _081582A8 @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r1, r0, 1
- adds r1, r2
- lsls r0, 9
- adds r4, 0x1
- adds r0, r4
- ldrb r0, [r0]
- movs r4, 0
- strh r0, [r1]
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _081582AC @ =gPlayerParty
- adds r0, r2
- bl BattleLoadPlayerMonSpriteGfx
- ldr r1, _081582B0 @ =gActionSelectionCursor
- ldrb r0, [r5]
- adds r0, r1
- strb r4, [r0]
- ldr r1, _081582B4 @ =gMoveSelectionCursor
- ldrb r0, [r5]
- adds r0, r1
- strb r4, [r0]
- ldrb r0, [r5]
- bl sub_8159478
- ldr r1, _081582B8 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _081582BC @ =sub_81563A8
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081582A0: .4byte gActiveBattler
-_081582A4: .4byte gBattleBufferA
-_081582A8: .4byte gBattlerPartyIndexes
-_081582AC: .4byte gPlayerParty
-_081582B0: .4byte gActionSelectionCursor
-_081582B4: .4byte gMoveSelectionCursor
-_081582B8: .4byte gBattlerControllerFuncs
-_081582BC: .4byte sub_81563A8
- thumb_func_end sub_815823C
-
- thumb_func_start sub_81582C0
-sub_81582C0: @ 81582C0
- push {r4-r6,lr}
- ldr r0, _081582EC @ =gBattleBufferA
- ldr r6, _081582F0 @ =gActiveBattler
- ldrb r2, [r6]
- lsls r1, r2, 9
- adds r0, 0x1
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0
- bne _081582FC
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x1
- bl InitAndLaunchSpecialAnimation
- ldr r0, _081582F4 @ =gBattlerControllerFuncs
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _081582F8 @ =sub_8156F7C
- str r0, [r1]
- b _08158332
- .align 2, 0
-_081582EC: .4byte gBattleBufferA
-_081582F0: .4byte gActiveBattler
-_081582F4: .4byte gBattlerControllerFuncs
-_081582F8: .4byte sub_8156F7C
-_081582FC:
- ldr r5, _08158338 @ =gBattlerSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _0815833C @ =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, _08158340 @ =gHealthboxSpriteIds
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerPartnerBufferExecCompleted
-_08158332:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08158338: .4byte gBattlerSpriteIds
-_0815833C: .4byte gSprites
-_08158340: .4byte gHealthboxSpriteIds
- thumb_func_end sub_81582C0
-
- thumb_func_start sub_8158344
-sub_8158344: @ 8158344
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r7, _081583D8 @ =gActiveBattler
- ldrb r0, [r7]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _081583F0
- ldrb r1, [r7]
- movs r0, 0x4
- bl DecompressTrainerBackPalette
- ldrb r0, [r7]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x4
- bl SetMultiuseSpriteTemplateToTrainerBack
- ldr r0, _081583DC @ =gMultiuseSpriteTemplate
- ldr r1, _081583E0 @ =gTrainerBackPicCoords
- ldrb r1, [r1, 0x10]
- movs r2, 0x8
- subs r2, r1
- lsls r2, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r2, r1
- asrs r2, 16
- movs r1, 0x50
- movs r3, 0x1E
- bl CreateSprite
- ldr r5, _081583E4 @ =gBattlerSpriteIds
- ldrb r1, [r7]
- adds r1, r5
- strb r0, [r1]
- ldr r4, _081583E8 @ =gSprites
- ldrb r0, [r7]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0xF0
- strh r1, [r0, 0x24]
- ldrb r0, [r7]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _081583EC @ =0x0000fffe
- strh r1, [r0, 0x2E]
- ldrb r3, [r7]
- adds r0, r3, r5
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- b _081584E2
- .align 2, 0
-_081583D8: .4byte gActiveBattler
-_081583DC: .4byte gMultiuseSpriteTemplate
-_081583E0: .4byte gTrainerBackPicCoords
-_081583E4: .4byte gBattlerSpriteIds
-_081583E8: .4byte gSprites
-_081583EC: .4byte 0x0000fffe
-_081583F0:
- ldrb r1, [r7]
- movs r0, 0x84
- bl DecompressTrainerFrontPic
- ldrb r0, [r7]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x84
- bl SetMultiuseSpriteTemplateToTrainerBack
- ldr r5, _08158510 @ =gMultiuseSpriteTemplate
- ldr r0, _08158514 @ =gTrainerFrontPicCoords
- movs r1, 0x84
- mov r8, r1
- movs r1, 0x84
- lsls r1, 2
- adds r0, r1
- ldrb r0, [r0]
- movs r4, 0x8
- subs r4, r0
- lsls r4, 18
- movs r0, 0xA0
- lsls r0, 14
- adds r4, r0
- asrs r4, 16
- ldrb r0, [r7]
- bl GetBattlerSpriteSubpriority
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r5, 0
- movs r1, 0xB0
- adds r2, r4, 0
- bl CreateSprite
- ldr r5, _08158518 @ =gBattlerSpriteIds
- ldrb r1, [r7]
- adds r1, r5
- strb r0, [r1]
- ldr r4, _0815851C @ =gSprites
- ldrb r0, [r7]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _08158520 @ =0x0000ff10
- strh r1, [r0, 0x24]
- ldrb r0, [r7]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x2
- strh r1, [r0, 0x2E]
- ldr r0, _08158524 @ =gTrainerFrontPicPaletteTable
- mov r1, r8
- lsls r6, r1, 3
- adds r0, r6
- ldrh r0, [r0, 0x4]
- bl IndexOfSpritePaletteTag
- ldrb r1, [r7]
- adds r1, r5
- ldrb r1, [r1]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- adds r2, r4
- lsls r0, 4
- ldrb r3, [r2, 0x5]
- movs r1, 0xF
- ands r1, r3
- orrs r1, r0
- strb r1, [r2, 0x5]
- ldrb r0, [r7]
- adds r0, r5
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r0, [r1, 0x4]
- lsls r0, 22
- lsrs r0, 22
- strh r0, [r1, 0x38]
- ldr r0, _08158528 @ =gTrainerFrontPicTable
- adds r0, r6
- ldrh r0, [r0, 0x6]
- bl GetSpriteTileStartByTag
- ldrb r1, [r7]
- adds r1, r5
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldr r2, _0815852C @ =0x000003ff
- ands r2, r0
- ldrh r3, [r1, 0x4]
- ldr r0, _08158530 @ =0xfffffc00
- ands r0, r3
- orrs r0, r2
- strh r0, [r1, 0x4]
- ldrb r0, [r7]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- mov r1, r8
- strh r1, [r0, 0x6]
-_081584E2:
- ldrb r0, [r7]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, _08158534 @ =sub_8033EEC
- str r1, [r0]
- ldr r1, _08158538 @ =gBattlerControllerFuncs
- ldr r0, _0815853C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08158540 @ =sub_815614C
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08158510: .4byte gMultiuseSpriteTemplate
-_08158514: .4byte gTrainerFrontPicCoords
-_08158518: .4byte gBattlerSpriteIds
-_0815851C: .4byte gSprites
-_08158520: .4byte 0x0000ff10
-_08158524: .4byte gTrainerFrontPicPaletteTable
-_08158528: .4byte gTrainerFrontPicTable
-_0815852C: .4byte 0x000003ff
-_08158530: .4byte 0xfffffc00
-_08158534: .4byte sub_8033EEC
-_08158538: .4byte gBattlerControllerFuncs
-_0815853C: .4byte gActiveBattler
-_08158540: .4byte sub_815614C
- thumb_func_end sub_8158344
-
- thumb_func_start sub_8158544
-sub_8158544: @ 8158544
- push {r4-r6,lr}
- ldr r4, _081585EC @ =gActiveBattler
- ldrb r1, [r4]
- movs r0, 0x4
- bl DecompressTrainerBackPalette
- ldrb r0, [r4]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x4
- bl SetMultiuseSpriteTemplateToTrainerBack
- ldr r0, _081585F0 @ =gMultiuseSpriteTemplate
- ldr r1, _081585F4 @ =gTrainerBackPicCoords
- ldrb r1, [r1, 0x10]
- movs r2, 0x8
- subs r2, r1
- lsls r2, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r2, r1
- asrs r2, 16
- movs r1, 0x50
- movs r3, 0x1E
- bl CreateSprite
- ldr r6, _081585F8 @ =gBattlerSpriteIds
- ldrb r1, [r4]
- adds r1, r6
- strb r0, [r1]
- ldr r5, _081585FC @ =gSprites
- ldrb r3, [r4]
- adds r0, r3, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _08158600 @ =0x0000ffa0
- strh r1, [r0, 0x24]
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x2
- strh r1, [r0, 0x2E]
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r5, 0x1C
- adds r0, r5
- ldr r1, _08158604 @ =sub_8033EEC
- str r1, [r0]
- ldr r1, _08158608 @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0815860C @ =sub_8156FEC
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081585EC: .4byte gActiveBattler
-_081585F0: .4byte gMultiuseSpriteTemplate
-_081585F4: .4byte gTrainerBackPicCoords
-_081585F8: .4byte gBattlerSpriteIds
-_081585FC: .4byte gSprites
-_08158600: .4byte 0x0000ffa0
-_08158604: .4byte sub_8033EEC
-_08158608: .4byte gBattlerControllerFuncs
-_0815860C: .4byte sub_8156FEC
- thumb_func_end sub_8158544
-
- thumb_func_start sub_8158610
-sub_8158610: @ 8158610
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8158610
-
- thumb_func_start sub_815861C
-sub_815861C: @ 815861C
- push {r4-r6,lr}
- ldr r6, _08158668 @ =gBattleSpritesDataPtr
- ldr r4, [r6]
- ldr r5, _0815866C @ =gActiveBattler
- ldrb r2, [r5]
- ldr r0, [r4, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r3, r1, r0
- ldrb r0, [r3, 0x4]
- cmp r0, 0
- bne _08158670
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08158650
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_08158650:
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x4]
- adds r1, 0x1
- strb r1, [r0, 0x4]
- b _0815872A
- .align 2, 0
-_08158668: .4byte gBattleSpritesDataPtr
-_0815866C: .4byte gActiveBattler
-_08158670:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0815872A
- strb r0, [r3, 0x4]
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _081586FC
- ldr r2, _081586E8 @ =gBattlerPartyIndexes
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _081586EC @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- movs r1, 0x40
- negs r1, r1
- movs r0, 0x10
- bl PlaySE12WithPanning
- ldr r2, _081586F0 @ =gSprites
- ldr r3, _081586F4 @ =gBattlerSpriteIds
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r4, [r0, 0x30]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x5
- strh r1, [r0, 0x32]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _081586F8 @ =sub_8012110
- b _0815871A
- .align 2, 0
-_081586E8: .4byte gBattlerPartyIndexes
-_081586EC: .4byte gPlayerParty
-_081586F0: .4byte gSprites
-_081586F4: .4byte gBattlerSpriteIds
-_081586F8: .4byte sub_8012110
-_081586FC:
- movs r0, 0x10
- movs r1, 0x3F
- bl PlaySE12WithPanning
- ldr r2, _08158730 @ =gSprites
- ldr r1, _08158734 @ =gBattlerSpriteIds
- ldrb r0, [r5]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _08158738 @ =SpriteCB_FaintOpponentMon
-_0815871A:
- str r1, [r0]
- ldr r1, _0815873C @ =gBattlerControllerFuncs
- ldr r0, _08158740 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08158744 @ =sub_8156DCC
- str r1, [r0]
-_0815872A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08158730: .4byte gSprites
-_08158734: .4byte gBattlerSpriteIds
-_08158738: .4byte SpriteCB_FaintOpponentMon
-_0815873C: .4byte gBattlerControllerFuncs
-_08158740: .4byte gActiveBattler
-_08158744: .4byte sub_8156DCC
- thumb_func_end sub_815861C
-
- thumb_func_start sub_8158748
-sub_8158748: @ 8158748
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8158748
-
- thumb_func_start sub_8158754
-sub_8158754: @ 8158754
- push {r4,r5,lr}
- ldr r0, _08158794 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x8]
- movs r0, 0x4
- strb r0, [r1, 0x8]
- ldr r1, _08158798 @ =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldr r5, _0815879C @ =gActiveBattler
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x3
- bl InitAndLaunchSpecialAnimation
- ldr r1, _081587A0 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _081587A4 @ =sub_8156484
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08158794: .4byte gBattleSpritesDataPtr
-_08158798: .4byte gDoingBattleAnim
-_0815879C: .4byte gActiveBattler
-_081587A0: .4byte gBattlerControllerFuncs
-_081587A4: .4byte sub_8156484
- thumb_func_end sub_8158754
-
- thumb_func_start sub_81587A8
-sub_81587A8: @ 81587A8
- push {r4,r5,lr}
- ldr r1, _081587F0 @ =gBattleBufferA
- ldr r5, _081587F4 @ =gActiveBattler
- ldrb r0, [r5]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r1, [r0]
- ldr r0, _081587F8 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r0, [r0, 0x8]
- strb r1, [r0, 0x8]
- ldr r1, _081587FC @ =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x3
- bl InitAndLaunchSpecialAnimation
- ldr r1, _08158800 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08158804 @ =sub_8156484
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081587F0: .4byte gBattleBufferA
-_081587F4: .4byte gActiveBattler
-_081587F8: .4byte gBattleSpritesDataPtr
-_081587FC: .4byte gDoingBattleAnim
-_08158800: .4byte gBattlerControllerFuncs
-_08158804: .4byte sub_8156484
- thumb_func_end sub_81587A8
-
- thumb_func_start sub_8158808
-sub_8158808: @ 8158808
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8158808
-
- thumb_func_start sub_8158814
-sub_8158814: @ 8158814
- push {r4-r6,lr}
- ldr r0, _081588E8 @ =gBattleBufferA
- mov r12, r0
- ldr r6, _081588EC @ =gActiveBattler
- ldrb r2, [r6]
- lsls r2, 9
- adds r0, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- mov r1, r12
- adds r1, 0x2
- adds r1, r2, r1
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- ldr r5, _081588F0 @ =gAnimMoveTurn
- mov r1, r12
- adds r1, 0x3
- adds r2, r1
- ldrb r1, [r2]
- strb r1, [r5]
- ldr r4, _081588F4 @ =gAnimMovePower
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x4
- adds r1, r2, r1
- ldrb r3, [r1]
- mov r1, r12
- adds r1, 0x5
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 8
- orrs r3, r1
- strh r3, [r4]
- ldr r4, _081588F8 @ =gAnimMoveDmg
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x6
- adds r1, r2, r1
- ldrb r3, [r1]
- mov r1, r12
- adds r1, 0x7
- adds r1, r2, r1
- ldrb r1, [r1]
- lsls r1, 8
- orrs r3, r1
- mov r1, r12
- adds r1, 0x8
- adds r1, r2, r1
- ldrb r1, [r1]
- lsls r1, 16
- orrs r3, r1
- mov r1, r12
- adds r1, 0x9
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 24
- orrs r3, r1
- str r3, [r4]
- ldr r3, _081588FC @ =gAnimFriendship
- ldrb r1, [r6]
- lsls r1, 9
- mov r2, r12
- adds r2, 0xA
- adds r1, r2
- ldrb r1, [r1]
- strb r1, [r3]
- ldr r4, _08158900 @ =gWeatherMoveAnim
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0xC
- adds r1, r2, r1
- ldrb r3, [r1]
- mov r1, r12
- adds r1, 0xD
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 8
- orrs r3, r1
- strh r3, [r4]
- ldr r3, _08158904 @ =gAnimDisableStructPtr
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x10
- adds r2, r1
- str r2, [r3]
- ldr r3, _08158908 @ =gTransformedPersonalities
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r3
- ldr r2, [r2]
- str r2, [r1]
- ldrb r1, [r5]
- bl IsMoveWithoutAnimation
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _0815890C
- bl PlayerPartnerBufferExecCompleted
- b _0815892A
- .align 2, 0
-_081588E8: .4byte gBattleBufferA
-_081588EC: .4byte gActiveBattler
-_081588F0: .4byte gAnimMoveTurn
-_081588F4: .4byte gAnimMovePower
-_081588F8: .4byte gAnimMoveDmg
-_081588FC: .4byte gAnimFriendship
-_08158900: .4byte gWeatherMoveAnim
-_08158904: .4byte gAnimDisableStructPtr
-_08158908: .4byte gTransformedPersonalities
-_0815890C:
- ldr r0, _08158930 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r3, [r0, 0x4]
- ldr r1, _08158934 @ =gBattlerControllerFuncs
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08158938 @ =sub_815893C
- str r1, [r0]
-_0815892A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08158930: .4byte gBattleSpritesDataPtr
-_08158934: .4byte gBattlerControllerFuncs
-_08158938: .4byte sub_815893C
- thumb_func_end sub_8158814
-
- thumb_func_start sub_815893C
-sub_815893C: @ 815893C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r2, _08158980 @ =gBattleBufferA
- ldr r6, _08158984 @ =gActiveBattler
- ldrb r3, [r6]
- lsls r1, r3, 9
- adds r0, r2, 0x1
- mov r9, r0
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r2, 0x2
- mov r8, r2
- add r1, r8
- ldrb r0, [r1]
- lsls r0, 8
- orrs r4, r0
- ldr r7, _08158988 @ =gBattleSpritesDataPtr
- ldr r5, [r7]
- ldr r1, [r5, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r2, [r0, 0x4]
- cmp r2, 0x1
- beq _081589C6
- cmp r2, 0x1
- bgt _0815898C
- cmp r2, 0
- beq _08158996
- b _08158A7C
- .align 2, 0
-_08158980: .4byte gBattleBufferA
-_08158984: .4byte gActiveBattler
-_08158988: .4byte gBattleSpritesDataPtr
-_0815898C:
- cmp r2, 0x2
- beq _081589F0
- cmp r2, 0x3
- beq _08158A40
- b _08158A7C
-_08158996:
- ldr r1, [r5]
- lsls r0, r3, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _081589B2
- adds r0, r3, 0
- adds r1, r3, 0
- adds r2, r3, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_081589B2:
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0, 0x4]
- b _08158A7C
-_081589C6:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08158A7C
- movs r0, 0
- bl sub_8035450
- adds r0, r4, 0
- bl DoMoveAnim
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2
- strb r1, [r0, 0x4]
- b _08158A7C
-_081589F0:
- ldr r0, _08158A38 @ =gAnimScriptCallback
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, _08158A3C @ =gAnimScriptActive
- ldrb r0, [r0]
- cmp r0, 0
- bne _08158A7C
- movs r0, 0x1
- bl sub_8035450
- ldr r0, [r7]
- ldrb r2, [r6]
- ldr r1, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08158A24
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl InitAndLaunchSpecialAnimation
-_08158A24:
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strb r1, [r0, 0x4]
- b _08158A7C
- .align 2, 0
-_08158A38: .4byte gAnimScriptCallback
-_08158A3C: .4byte gAnimScriptActive
-_08158A40:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _08158A7C
- bl CopyAllBattleSpritesInvisibilities
- ldrb r0, [r6]
- lsls r2, r0, 9
- mov r3, r9
- adds r1, r2, r3
- ldrb r1, [r1]
- add r2, r8
- ldrb r2, [r2]
- lsls r2, 8
- orrs r1, r2
- bl TrySetBehindSubstituteSpriteBit
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r4, [r0, 0x4]
- bl PlayerPartnerBufferExecCompleted
-_08158A7C:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_815893C
-
- thumb_func_start sub_8158A88
-sub_8158A88: @ 8158A88
- push {r4,lr}
- ldr r0, _08158ABC @ =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _08158AC0 @ =gBattle_BG0_Y
- strh r1, [r0]
- ldr r0, _08158AC4 @ =gActiveBattler
- ldrb r4, [r0]
- lsls r4, 9
- ldr r0, _08158AC8 @ =gBattleBufferA + 2
- adds r4, r0
- ldrh r0, [r4]
- bl BufferStringBattle
- ldrh r0, [r4]
- bl sub_80D89B0
- lsls r0, 24
- cmp r0, 0
- beq _08158AD0
- ldr r0, _08158ACC @ =gDisplayedStringBattle
- movs r1, 0x40
- bl BattlePutTextOnWindow
- b _08158AD8
- .align 2, 0
-_08158ABC: .4byte gBattle_BG0_X
-_08158AC0: .4byte gBattle_BG0_Y
-_08158AC4: .4byte gActiveBattler
-_08158AC8: .4byte gBattleBufferA + 2
-_08158ACC: .4byte gDisplayedStringBattle
-_08158AD0:
- ldr r0, _08158AEC @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
-_08158AD8:
- ldr r1, _08158AF0 @ =gBattlerControllerFuncs
- ldr r0, _08158AF4 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08158AF8 @ =sub_815623C
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08158AEC: .4byte gDisplayedStringBattle
-_08158AF0: .4byte gBattlerControllerFuncs
-_08158AF4: .4byte gActiveBattler
-_08158AF8: .4byte sub_815623C
- thumb_func_end sub_8158A88
-
- thumb_func_start sub_8158AFC
-sub_8158AFC: @ 8158AFC
- push {lr}
- ldr r0, _08158B14 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08158B18
- bl sub_8158A88
- b _08158B1C
- .align 2, 0
-_08158B14: .4byte gActiveBattler
-_08158B18:
- bl PlayerPartnerBufferExecCompleted
-_08158B1C:
- pop {r0}
- bx r0
- thumb_func_end sub_8158AFC
-
- thumb_func_start sub_8158B20
-sub_8158B20: @ 8158B20
- push {lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _08158B46
- ldr r0, _08158B4C @ =gBattle_BG0_X
- strh r1, [r0]
- ldr r1, _08158B50 @ =gBattle_BG0_Y
- movs r0, 0xA0
- strh r0, [r1]
- ldr r1, _08158B54 @ =gBattlerControllerFuncs
- ldr r0, _08158B58 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08158B5C @ =sub_8156140
- str r1, [r0]
-_08158B46:
- pop {r0}
- bx r0
- .align 2, 0
-_08158B4C: .4byte gBattle_BG0_X
-_08158B50: .4byte gBattle_BG0_Y
-_08158B54: .4byte gBattlerControllerFuncs
-_08158B58: .4byte gActiveBattler
-_08158B5C: .4byte sub_8156140
- thumb_func_end sub_8158B20
-
- thumb_func_start sub_8158B60
-sub_8158B60: @ 8158B60
- push {r4,lr}
- ldr r4, _08158BBC @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08158BDC
- ldr r1, _08158BC0 @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08158BC4 @ =sub_8158B20
- str r1, [r0]
- ldr r0, _08158BC8 @ =gUnknown_83FDA4C
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _08158BCC @ =gUnknown_83FE725
- movs r1, 0x2
- bl BattlePutTextOnWindow
- movs r4, 0
-_08158B8E:
- lsls r0, r4, 24
- lsrs r0, 24
- bl ActionSelectionDestroyCursorAt
- adds r4, 0x1
- cmp r4, 0x3
- ble _08158B8E
- ldr r1, _08158BD0 @ =gActionSelectionCursor
- ldr r0, _08158BBC @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
- ldr r0, _08158BD4 @ =gText_WhatWillPkmnDo
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _08158BD8 @ =gDisplayedStringBattle
- movs r1, 0x1
- bl BattlePutTextOnWindow
- b _08158BE8
- .align 2, 0
-_08158BBC: .4byte gActiveBattler
-_08158BC0: .4byte gBattlerControllerFuncs
-_08158BC4: .4byte sub_8158B20
-_08158BC8: .4byte gUnknown_83FDA4C
-_08158BCC: .4byte gUnknown_83FE725
-_08158BD0: .4byte gActionSelectionCursor
-_08158BD4: .4byte gText_WhatWillPkmnDo
-_08158BD8: .4byte gDisplayedStringBattle
-_08158BDC:
- ldr r0, _08158BF0 @ =gBattlerControllerFuncs
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _08158BF4 @ =sub_8156140
- str r0, [r1]
-_08158BE8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08158BF0: .4byte gBattlerControllerFuncs
-_08158BF4: .4byte sub_8156140
- thumb_func_end sub_8158B60
-
- thumb_func_start sub_8158BF8
-sub_8158BF8: @ 8158BF8
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8158BF8
-
- thumb_func_start sub_8158C04
-sub_8158C04: @ 8158C04
- push {lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _08158C2E
- ldr r0, _08158C34 @ =gBattle_BG0_X
- strh r1, [r0]
- ldr r1, _08158C38 @ =gBattle_BG0_Y
- movs r2, 0xA0
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _08158C3C @ =gBattlerControllerFuncs
- ldr r0, _08158C40 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08158C44 @ =sub_81564E4
- str r1, [r0]
-_08158C2E:
- pop {r0}
- bx r0
- .align 2, 0
-_08158C34: .4byte gBattle_BG0_X
-_08158C38: .4byte gBattle_BG0_Y
-_08158C3C: .4byte gBattlerControllerFuncs
-_08158C40: .4byte gActiveBattler
-_08158C44: .4byte sub_81564E4
- thumb_func_end sub_8158C04
-
- thumb_func_start sub_8158C48
-sub_8158C48: @ 8158C48
- push {r4,lr}
- ldr r4, _08158C68 @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08158C74
- bl InitMoveSelectionsVarsAndStrings
- ldr r0, _08158C6C @ =gBattlerControllerFuncs
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _08158C70 @ =sub_8158C04
- b _08158C7E
- .align 2, 0
-_08158C68: .4byte gActiveBattler
-_08158C6C: .4byte gBattlerControllerFuncs
-_08158C70: .4byte sub_8158C04
-_08158C74:
- ldr r0, _08158C88 @ =gBattlerControllerFuncs
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _08158C8C @ =sub_81564E4
-_08158C7E:
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08158C88: .4byte gBattlerControllerFuncs
-_08158C8C: .4byte sub_81564E4
- thumb_func_end sub_8158C48
-
- thumb_func_start sub_8158C90
-sub_8158C90: @ 8158C90
- push {r4,r5,lr}
- sub sp, 0x4
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _08158CDC @ =gBattlerControllerFuncs
- ldr r2, _08158CE0 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08158CE4 @ =sub_8156594
- str r1, [r0]
- ldr r1, _08158CE8 @ =gBattlerInMenuId
- ldrb r0, [r2]
- strb r0, [r1]
- movs r3, 0
- ldr r5, _08158CEC @ =gUnknown_203B0DC
- ldr r4, _08158CF0 @ =gBattleBufferA
-_08158CBE:
- adds r0, r3, r5
- ldrb r1, [r2]
- lsls r1, 9
- adds r1, 0x1
- adds r1, r3, r1
- adds r1, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r3, 0x1
- cmp r3, 0x2
- ble _08158CBE
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08158CDC: .4byte gBattlerControllerFuncs
-_08158CE0: .4byte gActiveBattler
-_08158CE4: .4byte sub_8156594
-_08158CE8: .4byte gBattlerInMenuId
-_08158CEC: .4byte gUnknown_203B0DC
-_08158CF0: .4byte gBattleBufferA
- thumb_func_end sub_8158C90
-
- thumb_func_start sub_8158CF4
-sub_8158CF4: @ 8158CF4
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r0, _08158DA4 @ =TaskDummy
- movs r1, 0xFF
- bl CreateTask
- ldr r3, _08158DA8 @ =gUnknown_3004FFC
- ldr r4, _08158DAC @ =gActiveBattler
- ldrb r1, [r4]
- adds r1, r3
- strb r0, [r1]
- ldr r5, _08158DB0 @ =gTasks
- ldrb r2, [r4]
- adds r3, r2, r3
- ldrb r0, [r3]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- ldr r5, _08158DB4 @ =gBattleBufferA
- lsls r2, 9
- adds r6, r5, 0x1
- adds r2, r6
- ldrb r2, [r2]
- movs r0, 0xF
- ands r0, r2
- strh r0, [r1, 0x8]
- ldr r3, _08158DB8 @ =gBattleStruct
- ldr r1, [r3]
- adds r1, 0x49
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r6
- ldrb r0, [r0]
- lsrs r0, 4
- strb r0, [r1]
- ldr r2, [r3]
- adds r2, 0x8B
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, r5, 0x2
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- ldr r2, [r3]
- adds r2, 0xAC
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, r5, 0x3
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- movs r2, 0
- ldr r3, _08158DBC @ =gUnknown_203B0DC
-_08158D60:
- adds r0, r2, r3
- ldrb r1, [r4]
- lsls r1, 9
- adds r1, 0x4
- adds r1, r2, r1
- adds r1, r5
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x2
- ble _08158D60
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _08158DC0 @ =gBattlerControllerFuncs
- ldr r2, _08158DAC @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08158DC4 @ =sub_81564F0
- str r1, [r0]
- ldr r1, _08158DC8 @ =gBattlerInMenuId
- ldrb r0, [r2]
- strb r0, [r1]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08158DA4: .4byte TaskDummy
-_08158DA8: .4byte gUnknown_3004FFC
-_08158DAC: .4byte gActiveBattler
-_08158DB0: .4byte gTasks
-_08158DB4: .4byte gBattleBufferA
-_08158DB8: .4byte gBattleStruct
-_08158DBC: .4byte gUnknown_203B0DC
-_08158DC0: .4byte gBattlerControllerFuncs
-_08158DC4: .4byte sub_81564F0
-_08158DC8: .4byte gBattlerInMenuId
- thumb_func_end sub_8158CF4
-
- thumb_func_start sub_8158DCC
-sub_8158DCC: @ 8158DCC
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8158DCC
-
- thumb_func_start sub_8158DD8
-sub_8158DD8: @ 8158DD8
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r4, _08158DFC @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08158E08
- ldr r1, _08158E00 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08158E04 @ =gPlayerParty
- b _08158E18
- .align 2, 0
-_08158DFC: .4byte gActiveBattler
-_08158E00: .4byte gBattlerPartyIndexes
-_08158E04: .4byte gPlayerParty
-_08158E08:
- ldr r1, _08158E68 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08158E6C @ =gEnemyParty
-_08158E18:
- adds r5, r1, r0
- movs r0, 0
- bl LoadBattleBarGfx
- ldr r3, _08158E70 @ =gBattleBufferA
- ldr r7, _08158E74 @ =gActiveBattler
- ldrb r1, [r7]
- lsls r1, 9
- adds r0, r3, 0x2
- adds r0, r1, r0
- ldrb r2, [r0]
- adds r3, 0x3
- adds r1, r3
- ldrb r0, [r1]
- lsls r0, 8
- orrs r2, r0
- lsls r2, 16
- asrs r6, r2, 16
- ldr r0, _08158E78 @ =0x00007fff
- cmp r6, r0
- beq _08158E80
- adds r0, r5, 0
- movs r1, 0x3A
- bl GetMonData
- adds r4, r0, 0
- adds r0, r5, 0
- movs r1, 0x39
- bl GetMonData
- adds r3, r0, 0
- ldrb r0, [r7]
- ldr r1, _08158E7C @ =gHealthboxSpriteIds
- adds r1, r0, r1
- ldrb r1, [r1]
- str r6, [sp]
- adds r2, r4, 0
- bl SetBattleBarStruct
- b _08158EA8
- .align 2, 0
-_08158E68: .4byte gBattlerPartyIndexes
-_08158E6C: .4byte gEnemyParty
-_08158E70: .4byte gBattleBufferA
-_08158E74: .4byte gActiveBattler
-_08158E78: .4byte 0x00007fff
-_08158E7C: .4byte gHealthboxSpriteIds
-_08158E80:
- adds r0, r5, 0
- movs r1, 0x3A
- bl GetMonData
- adds r2, r0, 0
- ldrb r0, [r7]
- ldr r4, _08158EC0 @ =gHealthboxSpriteIds
- adds r1, r0, r4
- ldrb r1, [r1]
- str r6, [sp]
- movs r3, 0
- bl SetBattleBarStruct
- ldrb r0, [r7]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0
- movs r2, 0
- bl UpdateHpTextInHealthbox
-_08158EA8:
- ldr r1, _08158EC4 @ =gBattlerControllerFuncs
- ldr r0, _08158EC8 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08158ECC @ =sub_8156E78
- str r1, [r0]
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08158EC0: .4byte gHealthboxSpriteIds
-_08158EC4: .4byte gBattlerControllerFuncs
-_08158EC8: .4byte gActiveBattler
-_08158ECC: .4byte sub_8156E78
- thumb_func_end sub_8158DD8
-
- thumb_func_start sub_8158ED0
-sub_8158ED0: @ 8158ED0
- push {r4-r7,lr}
- ldr r5, _08158EFC @ =gBattleBufferA
- ldr r6, _08158F00 @ =gActiveBattler
- ldrb r0, [r6]
- lsls r0, 9
- adds r1, r5, 0x1
- adds r0, r1
- ldrb r7, [r0]
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, _08158F04 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x63
- bls _08158F08
- bl PlayerPartnerBufferExecCompleted
- b _08158F54
- .align 2, 0
-_08158EFC: .4byte gBattleBufferA
-_08158F00: .4byte gActiveBattler
-_08158F04: .4byte gPlayerParty
-_08158F08:
- movs r0, 0x1
- bl LoadBattleBarGfx
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- ldrb r1, [r6]
- lsls r1, 9
- adds r0, r5, 0x2
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r0, r5, 0x3
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 8
- orrs r4, r0
- ldr r0, _08158F5C @ =sub_81568DC
- movs r1, 0xA
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08158F60 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r7, [r1, 0x8]
- strh r4, [r1, 0xA]
- ldrb r0, [r6]
- strh r0, [r1, 0xC]
- ldr r1, _08158F64 @ =gBattlerControllerFuncs
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08158F68 @ =nullsub_99
- str r1, [r0]
-_08158F54:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08158F5C: .4byte sub_81568DC
-_08158F60: .4byte gTasks
-_08158F64: .4byte gBattlerControllerFuncs
-_08158F68: .4byte nullsub_99
- thumb_func_end sub_8158ED0
-
- thumb_func_start sub_8158F6C
-sub_8158F6C: @ 8158F6C
- push {r4,lr}
- ldr r4, _08158F9C @ =gActiveBattler
- ldrb r0, [r4]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _08158FF2
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08158FA8
- ldr r1, _08158FA0 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08158FA4 @ =gPlayerParty
- b _08158FB8
- .align 2, 0
-_08158F9C: .4byte gActiveBattler
-_08158FA0: .4byte gBattlerPartyIndexes
-_08158FA4: .4byte gPlayerParty
-_08158FA8:
- ldr r1, _08158FF8 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08158FFC @ =gEnemyParty
-_08158FB8:
- adds r2, r1, r0
- ldr r1, _08159000 @ =gHealthboxSpriteIds
- ldr r4, _08159004 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- adds r1, r2, 0
- movs r2, 0x9
- bl UpdateHealthboxAttribute
- ldrb r2, [r4]
- ldr r0, _08159008 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r1, _0815900C @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08159010 @ =sub_8157054
- str r1, [r0]
-_08158FF2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08158FF8: .4byte gBattlerPartyIndexes
-_08158FFC: .4byte gEnemyParty
-_08159000: .4byte gHealthboxSpriteIds
-_08159004: .4byte gActiveBattler
-_08159008: .4byte gBattleSpritesDataPtr
-_0815900C: .4byte gBattlerControllerFuncs
-_08159010: .4byte sub_8157054
- thumb_func_end sub_8158F6C
-
- thumb_func_start sub_8159014
-sub_8159014: @ 8159014
- push {r4,r5,lr}
- ldr r5, _0815906C @ =gActiveBattler
- ldrb r0, [r5]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _08159064
- ldr r4, _08159070 @ =gBattleBufferA
- ldrb r3, [r5]
- lsls r3, 9
- adds r0, r4, 0x1
- adds r0, r3, r0
- ldrb r0, [r0]
- adds r1, r4, 0x2
- adds r1, r3, r1
- ldrb r1, [r1]
- adds r2, r4, 0x3
- adds r2, r3, r2
- ldrb r2, [r2]
- lsls r2, 8
- orrs r1, r2
- adds r2, r4, 0x4
- adds r2, r3, r2
- ldrb r2, [r2]
- lsls r2, 16
- orrs r1, r2
- adds r4, 0x5
- adds r3, r4
- ldrb r2, [r3]
- lsls r2, 24
- orrs r1, r2
- bl InitAndLaunchChosenStatusAnimation
- ldr r1, _08159074 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08159078 @ =sub_8157054
- str r1, [r0]
-_08159064:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0815906C: .4byte gActiveBattler
-_08159070: .4byte gBattleBufferA
-_08159074: .4byte gBattlerControllerFuncs
-_08159078: .4byte sub_8157054
- thumb_func_end sub_8159014
-
- thumb_func_start sub_815907C
-sub_815907C: @ 815907C
- push {r4,lr}
- sub sp, 0x4
- ldr r4, _081590A0 @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _081590AC
- ldr r1, _081590A4 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _081590A8 @ =gPlayerParty
- b _081590BC
- .align 2, 0
-_081590A0: .4byte gActiveBattler
-_081590A4: .4byte gBattlerPartyIndexes
-_081590A8: .4byte gPlayerParty
-_081590AC:
- ldr r1, _081590F0 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _081590F4 @ =gEnemyParty
-_081590BC:
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- ldr r2, _081590F8 @ =gBattleBufferA
- ldr r1, _081590FC @ =gActiveBattler
- ldrb r1, [r1]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- eors r0, r1
- mov r1, sp
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x37
- mov r2, sp
- bl SetMonData
- bl PlayerPartnerBufferExecCompleted
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081590F0: .4byte gBattlerPartyIndexes
-_081590F4: .4byte gEnemyParty
-_081590F8: .4byte gBattleBufferA
-_081590FC: .4byte gActiveBattler
- thumb_func_end sub_815907C
-
- thumb_func_start sub_8159100
-sub_8159100: @ 8159100
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159100
-
- thumb_func_start sub_815910C
-sub_815910C: @ 815910C
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_815910C
-
- thumb_func_start sub_8159118
-sub_8159118: @ 8159118
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159118
-
- thumb_func_start sub_8159124
-sub_8159124: @ 8159124
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159124
-
- thumb_func_start sub_8159130
-sub_8159130: @ 8159130
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159130
-
- thumb_func_start sub_815913C
-sub_815913C: @ 815913C
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_815913C
-
- thumb_func_start sub_8159148
-sub_8159148: @ 8159148
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159148
-
- thumb_func_start sub_8159154
-sub_8159154: @ 8159154
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159154
-
- thumb_func_start sub_8159160
-sub_8159160: @ 8159160
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159160
-
- thumb_func_start sub_815916C
-sub_815916C: @ 815916C
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_815916C
-
- thumb_func_start sub_8159178
-sub_8159178: @ 8159178
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159178
-
- thumb_func_start sub_8159184
-sub_8159184: @ 8159184
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159184
-
- thumb_func_start sub_8159190
-sub_8159190: @ 8159190
- push {r4,lr}
- ldr r3, _081591B8 @ =gSprites
- ldr r2, _081591BC @ =gBattlerSpriteIds
- ldr r4, _081591C0 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r2
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 29
- cmp r0, 0
- bge _081591C4
- bl PlayerPartnerBufferExecCompleted
- b _081591EE
- .align 2, 0
-_081591B8: .4byte gSprites
-_081591BC: .4byte gBattlerSpriteIds
-_081591C0: .4byte gActiveBattler
-_081591C4:
- ldr r1, _081591F4 @ =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r2
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- movs r1, 0
- strh r1, [r0, 0x30]
- ldrb r0, [r4]
- bl DoHitAnimHealthboxEffect
- ldr r1, _081591F8 @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _081591FC @ =sub_8156F00
- str r1, [r0]
-_081591EE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081591F4: .4byte gDoingBattleAnim
-_081591F8: .4byte gBattlerControllerFuncs
-_081591FC: .4byte sub_8156F00
- thumb_func_end sub_8159190
-
- thumb_func_start sub_8159200
-sub_8159200: @ 8159200
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159200
-
- thumb_func_start sub_815920C
-sub_815920C: @ 815920C
- push {lr}
- ldr r2, _08159234 @ =gBattleBufferA
- ldr r0, _08159238 @ =gActiveBattler
- ldrb r1, [r0]
- lsls r1, 9
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- bl PlaySE
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08159234: .4byte gBattleBufferA
-_08159238: .4byte gActiveBattler
- thumb_func_end sub_815920C
-
- thumb_func_start sub_815923C
-sub_815923C: @ 815923C
- push {lr}
- ldr r2, _08159264 @ =gBattleBufferA
- ldr r0, _08159268 @ =gActiveBattler
- ldrb r1, [r0]
- lsls r1, 9
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- bl PlayFanfare
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08159264: .4byte gBattleBufferA
-_08159268: .4byte gActiveBattler
- thumb_func_end sub_815923C
-
- thumb_func_start sub_815926C
-sub_815926C: @ 815926C
- push {r4,lr}
- ldr r4, _08159290 @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0815929C
- ldr r1, _08159294 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08159298 @ =gPlayerParty
- b _081592AC
- .align 2, 0
-_08159290: .4byte gActiveBattler
-_08159294: .4byte gBattlerPartyIndexes
-_08159298: .4byte gPlayerParty
-_0815929C:
- ldr r1, _081592C8 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _081592CC @ =gEnemyParty
-_081592AC:
- adds r0, r1, r0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x19
- bl PlayCry1
- bl PlayerPartnerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081592C8: .4byte gBattlerPartyIndexes
-_081592CC: .4byte gEnemyParty
- thumb_func_end sub_815926C
-
- thumb_func_start sub_81592D0
-sub_81592D0: @ 81592D0
- push {lr}
- ldr r1, _081592F8 @ =gBattleBufferA
- ldr r0, _081592FC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl HandleIntroSlide
- ldr r2, _08159300 @ =gIntroSlideFlags
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_081592F8: .4byte gBattleBufferA
-_081592FC: .4byte gActiveBattler
-_08159300: .4byte gIntroSlideFlags
- thumb_func_end sub_81592D0
-
- thumb_func_start sub_8159304
-sub_8159304: @ 8159304
- push {r4-r7,lr}
- ldr r6, _0815943C @ =gBattlerSpriteIds
- ldr r7, _08159440 @ =gActiveBattler
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _08159444 @ =gSprites
- adds r0, r5
- bl SetSpritePrimaryCoordsFromSecondaryCoords
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x32
- strh r1, [r0, 0x2E]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _08159448 @ =0x0000ffd8
- strh r1, [r0, 0x32]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrh r1, [r0, 0x22]
- strh r1, [r0, 0x36]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _0815944C @ =StartAnimLinearTranslation
- str r1, [r0]
- ldrb r2, [r7]
- adds r0, r2, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x38]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _08159450 @ =sub_80335F8
- bl StoreSpriteCallbackInData6
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r0, _08159454 @ =0x0000d6f8
- bl AllocSpritePalette
- adds r4, r0, 0
- lsls r4, 24
- ldr r0, _08159458 @ =gTrainerBackPicPaletteTable
- ldr r0, [r0, 0x20]
- lsrs r4, 20
- movs r2, 0x80
- lsls r2, 1
- adds r1, r4, r2
- movs r2, 0x20
- bl LoadCompressedPalette
- ldrb r0, [r7]
- adds r0, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r4
- strb r0, [r1, 0x5]
- ldr r0, _0815945C @ =sub_81595EC
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _08159460 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- ldrb r0, [r7]
- strh r0, [r1, 0x8]
- ldr r3, _08159464 @ =gBattleSpritesDataPtr
- ldr r0, [r3]
- ldrb r2, [r7]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0815941C
- ldr r0, _08159468 @ =gBattlerStatusSummaryTaskId
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- ldr r1, _0815946C @ =Task_HidePartyStatusSummary
- str r1, [r0]
-_0815941C:
- ldr r0, [r3]
- ldr r2, [r0, 0x8]
- ldrb r0, [r2, 0x9]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x9]
- ldr r1, _08159470 @ =gBattlerControllerFuncs
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08159474 @ =nullsub_99
- str r1, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0815943C: .4byte gBattlerSpriteIds
-_08159440: .4byte gActiveBattler
-_08159444: .4byte gSprites
-_08159448: .4byte 0x0000ffd8
-_0815944C: .4byte StartAnimLinearTranslation
-_08159450: .4byte sub_80335F8
-_08159454: .4byte 0x0000d6f8
-_08159458: .4byte gTrainerBackPicPaletteTable
-_0815945C: .4byte sub_81595EC
-_08159460: .4byte gTasks
-_08159464: .4byte gBattleSpritesDataPtr
-_08159468: .4byte gBattlerStatusSummaryTaskId
-_0815946C: .4byte Task_HidePartyStatusSummary
-_08159470: .4byte gBattlerControllerFuncs
-_08159474: .4byte nullsub_99
- thumb_func_end sub_8159304
-
- thumb_func_start sub_8159478
-sub_8159478: @ 8159478
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- ldr r0, _081595C0 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0]
- lsls r0, r6, 2
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x2]
- ldr r0, _081595C4 @ =gBattlerPartyIndexes
- lsls r2, r6, 1
- adds r2, r0
- ldr r0, _081595C8 @ =gBattleBufferA
- lsls r1, r6, 9
- adds r0, 0x1
- adds r1, r0
- ldrb r0, [r1]
- strh r0, [r2]
- ldrh r1, [r2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081595CC @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- mov r8, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, _081595D0 @ =sub_8033E3C
- bl CreateInvisibleSpriteWithCallback
- ldr r1, _081595D4 @ =gUnknown_3004FFC
- mov r9, r1
- add r9, r6
- mov r1, r9
- strb r0, [r1]
- adds r0, r6, 0
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _081595D8 @ =gMultiuseSpriteTemplate
- mov r10, r0
- adds r0, r6, 0
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r6, 0
- bl GetBattlerSpriteDefault_Y
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- bl GetBattlerSpriteSubpriority
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r10
- adds r1, r5, 0
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, _081595DC @ =gBattlerSpriteIds
- adds r4, r6, r4
- strb r0, [r4]
- ldr r5, _081595E0 @ =gSprites
- mov r0, r9
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r4]
- strh r1, [r0, 0x30]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r6, [r0, 0x2E]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r8
- strh r1, [r0, 0x32]
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, r6, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _081595E4 @ =gBattleMonForms
- adds r6, r1
- ldrb r1, [r6]
- bl StartSpriteAnim
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _081595E8 @ =SpriteCallbackDummy
- str r1, [r0]
- movs r0, 0
- movs r1, 0xFF
- bl DoPokeballSendOutAnimation
- mov r1, r9
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x2E]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081595C0: .4byte gBattleSpritesDataPtr
-_081595C4: .4byte gBattlerPartyIndexes
-_081595C8: .4byte gBattleBufferA
-_081595CC: .4byte gPlayerParty
-_081595D0: .4byte sub_8033E3C
-_081595D4: .4byte gUnknown_3004FFC
-_081595D8: .4byte gMultiuseSpriteTemplate
-_081595DC: .4byte gBattlerSpriteIds
-_081595E0: .4byte gSprites
-_081595E4: .4byte gBattleMonForms
-_081595E8: .4byte SpriteCallbackDummy
- thumb_func_end sub_8159478
-
- thumb_func_start sub_81595EC
-sub_81595EC: @ 81595EC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _0815960C @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r1, r0, r1
- ldrh r2, [r1, 0xA]
- movs r3, 0xA
- ldrsh r0, [r1, r3]
- cmp r0, 0x1E
- bgt _08159610
- adds r0, r2, 0x1
- strh r0, [r1, 0xA]
- b _08159646
- .align 2, 0
-_0815960C: .4byte gTasks
-_08159610:
- ldr r4, _0815964C @ =gActiveBattler
- ldrb r5, [r4]
- ldrh r0, [r1, 0x8]
- strb r0, [r4]
- ldr r0, _08159650 @ =gBattleBufferA
- ldrb r1, [r4]
- lsls r2, r1, 9
- adds r0, 0x1
- adds r2, r0
- ldr r0, _08159654 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
- strb r0, [r2]
- ldrb r0, [r4]
- bl sub_8159478
- ldr r1, _08159658 @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0815965C @ =sub_8156624
- str r1, [r0]
- strb r5, [r4]
- adds r0, r6, 0
- bl DestroyTask
-_08159646:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0815964C: .4byte gActiveBattler
-_08159650: .4byte gBattleBufferA
-_08159654: .4byte gBattlerPartyIndexes
-_08159658: .4byte gBattlerControllerFuncs
-_0815965C: .4byte sub_8156624
- thumb_func_end sub_81595EC
-
- thumb_func_start sub_8159660
-sub_8159660: @ 8159660
- push {r4,r5,lr}
- ldr r1, _08159688 @ =gBattleBufferA
- ldr r0, _0815968C @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _08159690
- adds r0, r2, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08159690
- bl PlayerPartnerBufferExecCompleted
- b _081596CE
- .align 2, 0
-_08159688: .4byte gBattleBufferA
-_0815968C: .4byte gActiveBattler
-_08159690:
- ldr r0, _081596D4 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r5, _081596D8 @ =gActiveBattler
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- ldrb r0, [r5]
- lsls r4, r0, 9
- ldr r3, _081596DC @ =gBattleBufferA + 4
- adds r1, r4, r3
- subs r2, r3, 0x3
- adds r2, r4, r2
- ldrb r2, [r2]
- subs r3, 0x2
- adds r4, r3
- ldrb r3, [r4]
- bl CreatePartyStatusSummarySprites
- ldr r2, _081596E0 @ =gBattlerStatusSummaryTaskId
- ldrb r1, [r5]
- adds r1, r2
- strb r0, [r1]
- bl PlayerPartnerBufferExecCompleted
-_081596CE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081596D4: .4byte gBattleSpritesDataPtr
-_081596D8: .4byte gActiveBattler
-_081596DC: .4byte gBattleBufferA + 4
-_081596E0: .4byte gBattlerStatusSummaryTaskId
- thumb_func_end sub_8159660
-
- thumb_func_start sub_81596E4
-sub_81596E4: @ 81596E4
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81596E4
-
- thumb_func_start sub_81596F0
-sub_81596F0: @ 81596F0
- push {r4,lr}
- ldr r4, _08159710 @ =gActiveBattler
- ldrb r0, [r4]
- movs r1, 0x1
- bl EndBounceEffect
- ldrb r0, [r4]
- movs r1, 0
- bl EndBounceEffect
- bl PlayerPartnerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08159710: .4byte gActiveBattler
- thumb_func_end sub_81596F0
-
- thumb_func_start sub_8159714
-sub_8159714: @ 8159714
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8159714
-
- thumb_func_start sub_8159720
-sub_8159720: @ 8159720
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r5, _08159758 @ =gBattleBufferA
- ldr r6, _0815975C @ =gActiveBattler
- ldrb r2, [r6]
- lsls r1, r2, 9
- adds r0, r5, 0x1
- adds r0, r1, r0
- ldrb r3, [r0]
- adds r0, r5, 0x2
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r5, 0x3
- adds r1, r5
- ldrb r0, [r1]
- lsls r0, 8
- orrs r4, r0
- str r4, [sp]
- adds r0, r2, 0
- adds r1, r2, 0
- bl TryHandleLaunchBattleTableAnimation
- lsls r0, 24
- cmp r0, 0
- beq _08159760
- bl PlayerPartnerBufferExecCompleted
- b _0815976C
- .align 2, 0
-_08159758: .4byte gBattleBufferA
-_0815975C: .4byte gActiveBattler
-_08159760:
- ldr r0, _08159774 @ =gBattlerControllerFuncs
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _08159778 @ =sub_8157024
- str r0, [r1]
-_0815976C:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08159774: .4byte gBattlerControllerFuncs
-_08159778: .4byte sub_8157024
- thumb_func_end sub_8159720
-
- thumb_func_start sub_815977C
-sub_815977C: @ 815977C
- push {r4,lr}
- ldr r1, _081597B0 @ =gBattleBufferA
- ldr r4, _081597B4 @ =gActiveBattler
- ldrb r2, [r4]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- blt _081597A4
- cmp r0, 0x1
- bgt _081597A4
- adds r0, r2, 0
- movs r1, 0x1
- bl EndBounceEffect
- ldrb r0, [r4]
- movs r1, 0
- bl EndBounceEffect
-_081597A4:
- bl PlayerPartnerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081597B0: .4byte gBattleBufferA
-_081597B4: .4byte gActiveBattler
- thumb_func_end sub_815977C
-
- thumb_func_start sub_81597B8
-sub_81597B8: @ 81597B8
- push {lr}
- bl PlayerPartnerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_81597B8
-
- thumb_func_start sub_81597C4
-sub_81597C4: @ 81597C4
- push {r4,lr}
- ldr r2, _08159808 @ =gBattleOutcome
- ldr r1, _0815980C @ =gBattleBufferA
- ldr r4, _08159810 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- movs r0, 0x5
- bl FadeOutMapMusic
- movs r0, 0x3
- bl BeginFastPaletteFade
- bl PlayerPartnerBufferExecCompleted
- ldr r0, _08159814 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x6
- ands r0, r1
- cmp r0, 0x2
- bne _08159800
- ldr r0, _08159818 @ =gBattlerControllerFuncs
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0815981C @ =sub_8156254
- str r0, [r1]
-_08159800:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08159808: .4byte gBattleOutcome
-_0815980C: .4byte gBattleBufferA
-_08159810: .4byte gActiveBattler
-_08159814: .4byte gBattleTypeFlags
-_08159818: .4byte gBattlerControllerFuncs
-_0815981C: .4byte sub_8156254
- thumb_func_end sub_81597C4
-
- thumb_func_start nullsub_100
-nullsub_100: @ 8159820
- bx lr
- thumb_func_end nullsub_100
-
- thumb_func_start sub_8159824
-sub_8159824: @ 8159824
- push {r4-r7,lr}
- ldr r1, _081598B4 @ =gUnknown_8479060
- ldr r0, _081598B8 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x96
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r7, [r0]
- ldr r4, _081598BC @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0815985C
- ldrb r0, [r4]
- movs r1, 0x1
- movs r2, 0x7
- movs r3, 0x1
- bl DoBounceEffect
- ldrb r0, [r4]
- movs r1, 0
- movs r2, 0x7
- movs r3, 0x1
- bl DoBounceEffect
-_0815985C:
- ldr r6, _081598C0 @ =gUnknown_3005EE0
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r6
- ldr r1, [r0]
- ldrb r0, [r1]
- lsls r0, 3
- adds r0, r7
- adds r3, r0, r2
- ldrb r0, [r3, 0x4]
- ldrb r1, [r1, 0x2]
- cmp r0, r1
- bne _0815992C
- adds r0, r2, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08159888
- movs r0, 0x5
- bl PlaySE
-_08159888:
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r1, [r0]
- movs r0, 0
- strb r0, [r1, 0x2]
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r6
- ldr r0, [r0]
- ldrb r0, [r0]
- lsls r0, 3
- adds r0, r7
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _081598D4
- cmp r0, 0x1
- bgt _081598C4
- cmp r0, 0
- beq _081598CE
- b _081598F0
- .align 2, 0
-_081598B4: .4byte gUnknown_8479060
-_081598B8: .4byte gBattleStruct
-_081598BC: .4byte gActiveBattler
-_081598C0: .4byte gUnknown_3005EE0
-_081598C4:
- cmp r0, 0x2
- beq _081598DA
- cmp r0, 0x3
- beq _081598E6
- b _081598F0
-_081598CE:
- movs r0, 0x1
- movs r1, 0
- b _081598DE
-_081598D4:
- movs r0, 0x1
- movs r1, 0x1
- b _081598DE
-_081598DA:
- movs r0, 0x1
- movs r1, 0x2
-_081598DE:
- movs r2, 0
- bl BtlController_EmitTwoReturnValues
- b _081598F0
-_081598E6:
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0
- bl BtlController_EmitTwoReturnValues
-_081598F0:
- bl PlayerPartnerBufferExecCompleted
- ldr r3, _08159924 @ =gUnknown_3005EE0
- ldr r2, _08159928 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r3
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r3
- ldr r2, [r0]
- ldrb r0, [r2]
- lsls r0, 3
- adds r0, r7
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x4
- bne _08159984
- movs r0, 0
- strb r0, [r2]
- b _08159984
- .align 2, 0
-_08159924: .4byte gUnknown_3005EE0
-_08159928: .4byte gActiveBattler
-_0815992C:
- ldr r5, _0815998C @ =gActionSelectionCursor
- adds r0, r2, r5
- ldrb r0, [r0]
- ldrb r2, [r3]
- cmp r0, r2
- beq _08159972
- ldrb r0, [r3, 0x4]
- lsrs r0, 1
- cmp r0, r1
- bne _08159972
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r2, r1, r5
- lsls r0, r1, 2
- adds r0, r6
- ldr r0, [r0]
- ldrb r0, [r0]
- lsls r0, 3
- adds r0, r7
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
-_08159972:
- ldr r1, _08159990 @ =gUnknown_3005EE0
- ldr r0, _08159994 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldrb r0, [r1, 0x2]
- adds r0, 0x1
- strb r0, [r1, 0x2]
-_08159984:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0815998C: .4byte gActionSelectionCursor
-_08159990: .4byte gUnknown_3005EE0
-_08159994: .4byte gActiveBattler
- thumb_func_end sub_8159824
-
- thumb_func_start sub_8159998
-sub_8159998: @ 8159998
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r1, _08159A38 @ =gUnknown_84790D8
- ldr r0, _08159A3C @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x96
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r7, [r0]
- ldr r0, _08159A40 @ =gUnknown_3005EE0
- mov r8, r0
- ldr r6, _08159A44 @ =gActiveBattler
- ldrb r2, [r6]
- lsls r0, r2, 2
- add r0, r8
- ldr r1, [r0]
- ldrb r0, [r1, 0x1]
- lsls r0, 3
- adds r0, r7
- adds r3, r0, r2
- ldrb r0, [r3, 0x4]
- ldrb r4, [r1, 0x2]
- cmp r0, r4
- bne _08159A48
- adds r0, r2, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _081599DE
- movs r0, 0x5
- bl PlaySE
-_081599DE:
- ldrb r0, [r6]
- lsls r0, 2
- add r0, r8
- ldr r0, [r0]
- movs r4, 0
- strb r4, [r0, 0x2]
- ldrb r1, [r6]
- lsls r0, r1, 2
- add r0, r8
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- lsls r0, 3
- adds r0, r7
- adds r0, r1
- ldrb r2, [r0]
- movs r0, 0x1
- eors r1, r0
- lsls r1, 8
- orrs r2, r1
- movs r0, 0x1
- movs r1, 0xA
- bl BtlController_EmitTwoReturnValues
- bl PlayerPartnerBufferExecCompleted
- ldrb r0, [r6]
- lsls r0, 2
- add r0, r8
- ldr r1, [r0]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- ldrb r1, [r6]
- lsls r0, r1, 2
- add r0, r8
- ldr r2, [r0]
- ldrb r0, [r2, 0x1]
- lsls r0, 3
- adds r0, r7
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _08159AA0
- strb r4, [r2, 0x1]
- b _08159AA0
- .align 2, 0
-_08159A38: .4byte gUnknown_84790D8
-_08159A3C: .4byte gBattleStruct
-_08159A40: .4byte gUnknown_3005EE0
-_08159A44: .4byte gActiveBattler
-_08159A48:
- ldr r5, _08159AAC @ =gMoveSelectionCursor
- adds r1, r2, r5
- ldrb r0, [r3]
- ldrb r1, [r1]
- cmp r0, r1
- beq _08159A8E
- ldrb r0, [r3, 0x4]
- lsrs r0, 1
- cmp r0, r4
- bne _08159A8E
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r6]
- adds r0, r5
- ldrb r0, [r0]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r6]
- adds r2, r1, r5
- lsls r0, r1, 2
- add r0, r8
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- lsls r0, 3
- adds r0, r7
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
-_08159A8E:
- ldr r1, _08159AB0 @ =gUnknown_3005EE0
- ldr r0, _08159AB4 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldrb r0, [r1, 0x2]
- adds r0, 0x1
- strb r0, [r1, 0x2]
-_08159AA0:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08159AAC: .4byte gMoveSelectionCursor
-_08159AB0: .4byte gUnknown_3005EE0
-_08159AB4: .4byte gActiveBattler
- thumb_func_end sub_8159998
-
- thumb_func_start sub_8159AB8
-sub_8159AB8: @ 8159AB8
- push {r4-r7,lr}
- ldr r1, _08159B54 @ =gUnknown_8479198
- ldr r4, _08159B58 @ =gBattleStruct
- ldr r2, [r4]
- adds r0, r2, 0
- adds r0, 0x96
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r6, [r0]
- ldr r3, _08159B5C @ =gActiveBattler
- ldrb r5, [r3]
- lsls r1, r5, 9
- ldr r0, _08159B60 @ =gBattleBufferA + 2
- adds r7, r1, r0
- mov r12, r7
- subs r0, 0x2
- adds r1, r0
- adds r2, 0x97
- ldrb r0, [r2]
- lsls r0, 3
- adds r0, r6
- ldrb r1, [r1]
- adds r7, r4, 0
- adds r4, r3, 0
- ldrb r2, [r0]
- cmp r1, r2
- bne _08159B70
- ldrb r2, [r0, 0x1]
- cmp r5, r2
- bne _08159B70
- cmp r1, 0x10
- bne _08159B04
- ldrh r0, [r0, 0x2]
- mov r1, r12
- ldrh r1, [r1]
- cmp r0, r1
- bne _08159B70
-_08159B04:
- ldr r0, [r7]
- adds r3, r0, 0
- adds r3, 0x97
- ldrb r1, [r3]
- lsls r0, r1, 3
- adds r0, r6
- ldr r2, [r0, 0x4]
- cmp r2, 0
- beq _08159B6C
- ldr r1, _08159B64 @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- str r2, [r0]
- ldr r2, _08159B68 @ =gUnknown_3005EE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r2
- ldr r1, [r0]
- movs r0, 0
- strb r0, [r1, 0x2]
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r2
- ldr r1, [r0]
- ldr r0, [r7]
- adds r0, 0x97
- ldrb r0, [r0]
- lsls r0, 3
- adds r0, r6
- ldrh r0, [r0, 0x2]
- strb r0, [r1, 0x3]
- ldr r1, [r7]
- adds r1, 0x97
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r0, 0x1
- b _08159B72
- .align 2, 0
-_08159B54: .4byte gUnknown_8479198
-_08159B58: .4byte gBattleStruct
-_08159B5C: .4byte gActiveBattler
-_08159B60: .4byte gBattleBufferA + 2
-_08159B64: .4byte gBattlerControllerFuncs
-_08159B68: .4byte gUnknown_3005EE0
-_08159B6C:
- adds r0, r1, 0x1
- strb r0, [r3]
-_08159B70:
- movs r0, 0
-_08159B72:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8159AB8
-
- thumb_func_start sub_8159B78
-sub_8159B78: @ 8159B78
- ldr r1, _08159B98 @ =gUnknown_3005EE0
- ldr r2, _08159B9C @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0
- strb r0, [r1, 0x2]
- ldr r1, _08159BA0 @ =gBattlerControllerFuncs
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08159BA4 @ =sub_81560DC
- str r1, [r0]
- bx lr
- .align 2, 0
-_08159B98: .4byte gUnknown_3005EE0
-_08159B9C: .4byte gActiveBattler
-_08159BA0: .4byte gBattlerControllerFuncs
-_08159BA4: .4byte sub_81560DC
- thumb_func_end sub_8159B78
-
- thumb_func_start sub_8159BA8
-sub_8159BA8: @ 8159BA8
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r1, _08159BD0 @ =gUnknown_3005EE0
- ldr r2, _08159BD4 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldrb r0, [r0, 0x2]
- adds r5, r1, 0
- adds r4, r2, 0
- cmp r0, 0x4
- bls _08159BC4
- b _08159CEE
-_08159BC4:
- lsls r0, 2
- ldr r1, _08159BD8 @ =_08159BDC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08159BD0: .4byte gUnknown_3005EE0
-_08159BD4: .4byte gActiveBattler
-_08159BD8: .4byte _08159BDC
- .align 2, 0
-_08159BDC:
- .4byte _08159BF0
- .4byte _08159C14
- .4byte _08159C44
- .4byte _08159C64
- .4byte _08159CB4
-_08159BF0:
- ldr r0, _08159C10 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _08159CEE
- movs r0, 0x81
- negs r0, r0
- str r1, [sp]
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x8
- b _08159C90
- .align 2, 0
-_08159C10: .4byte gPaletteFade
-_08159C14:
- ldr r0, _08159C3C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08159CEE
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- ldr r0, _08159C40 @ =gBattle_BG0_Y
- ldrh r0, [r0]
- strb r0, [r1, 0x4]
- bl sub_80EB30C
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r5
- b _08159C9E
- .align 2, 0
-_08159C3C: .4byte gPaletteFade
-_08159C40: .4byte gBattle_BG0_Y
-_08159C44:
- ldr r1, _08159C5C @ =gBattle_BG0_Y
- movs r0, 0
- strh r0, [r1]
- bl sub_8159EF0
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _08159C60 @ =gDisplayedStringBattle
- movs r1, 0x18
- bl BattlePutTextOnWindow
- b _08159C94
- .align 2, 0
-_08159C5C: .4byte gBattle_BG0_Y
-_08159C60: .4byte gDisplayedStringBattle
-_08159C64:
- movs r0, 0x18
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- bne _08159CEE
- ldr r0, _08159CA8 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08159CEE
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x81
- negs r0, r0
- str r4, [sp]
- movs r1, 0x4
- movs r2, 0x8
- movs r3, 0
-_08159C90:
- bl BeginNormalPaletteFade
-_08159C94:
- ldr r1, _08159CAC @ =gUnknown_3005EE0
- ldr r0, _08159CB0 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
-_08159C9E:
- ldr r1, [r0]
- ldrb r0, [r1, 0x2]
- adds r0, 0x1
- strb r0, [r1, 0x2]
- b _08159CEE
- .align 2, 0
-_08159CA8: .4byte gMain
-_08159CAC: .4byte gUnknown_3005EE0
-_08159CB0: .4byte gActiveBattler
-_08159CB4:
- ldr r0, _08159CF8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08159CEE
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r5
- ldr r0, [r0]
- ldrb r0, [r0, 0x3]
- cmp r0, 0xD
- bne _08159CD8
- bl BattleStopLowHpSound
- ldr r0, _08159CFC @ =0x00000137
- bl PlayBGM
-_08159CD8:
- ldr r1, _08159D00 @ =gBattle_BG0_Y
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r5
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- strh r0, [r1]
- bl sub_80EB524
- bl sub_8159B78
-_08159CEE:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08159CF8: .4byte gPaletteFade
-_08159CFC: .4byte 0x00000137
-_08159D00: .4byte gBattle_BG0_Y
- thumb_func_end sub_8159BA8
-
- thumb_func_start sub_8159D04
-sub_8159D04: @ 8159D04
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r1, _08159D28 @ =gUnknown_3005EE0
- ldr r2, _08159D2C @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldrb r0, [r0, 0x2]
- adds r3, r1, 0
- cmp r0, 0x6
- bls _08159D1E
- b _08159EDE
-_08159D1E:
- lsls r0, 2
- ldr r1, _08159D30 @ =_08159D34
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08159D28: .4byte gUnknown_3005EE0
-_08159D2C: .4byte gActiveBattler
-_08159D30: .4byte _08159D34
- .align 2, 0
-_08159D34:
- .4byte _08159D50
- .4byte _08159D98
- .4byte _08159DDC
- .4byte _08159DF4
- .4byte _08159E0C
- .4byte _08159E64
- .4byte _08159EA4
-_08159D50:
- ldr r0, _08159D90 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _08159D62
- b _08159EDE
-_08159D62:
- ldr r0, _08159D94 @ =gBattleStruct
- ldr r4, [r0]
- adds r5, r4, 0
- adds r5, 0x95
- adds r4, 0x94
- movs r0, 0
- bl GetBattlerAtPosition
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80EEFC8
- movs r0, 0x81
- negs r0, r0
- str r6, [sp]
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x8
- b _08159E80
- .align 2, 0
-_08159D90: .4byte gPaletteFade
-_08159D94: .4byte gBattleStruct
-_08159D98:
- ldr r0, _08159DD0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _08159DAA
- b _08159EDE
-_08159DAA:
- ldr r2, _08159DD4 @ =gBitTable
- ldr r0, _08159DD8 @ =gBattleStruct
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0x95
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r2
- adds r0, 0x94
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldr r1, [r1]
- ldr r0, [r0]
- orrs r1, r0
- lsls r0, r1, 16
- str r3, [sp]
- b _08159E7A
- .align 2, 0
-_08159DD0: .4byte gPaletteFade
-_08159DD4: .4byte gBitTable
-_08159DD8: .4byte gBattleStruct
-_08159DDC:
- ldr r0, _08159DF0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08159DEA
- b _08159EDE
-_08159DEA:
- bl sub_80EB30C
- b _08159E84
- .align 2, 0
-_08159DF0: .4byte gPaletteFade
-_08159DF4:
- bl sub_8159EF0
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _08159E08 @ =gDisplayedStringBattle
- movs r1, 0x18
- bl BattlePutTextOnWindow
- b _08159E84
- .align 2, 0
-_08159E08: .4byte gDisplayedStringBattle
-_08159E0C:
- movs r0, 0x18
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- bne _08159EDE
- ldr r0, _08159E58 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08159EDE
- movs r0, 0x5
- bl PlaySE
- ldr r2, _08159E5C @ =gBitTable
- ldr r0, _08159E60 @ =gBattleStruct
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0x95
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r2
- adds r0, 0x94
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldr r1, [r1]
- ldr r0, [r0]
- orrs r1, r0
- lsls r0, r1, 16
- str r4, [sp]
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x8
- b _08159E80
- .align 2, 0
-_08159E58: .4byte gMain
-_08159E5C: .4byte gBitTable
-_08159E60: .4byte gBattleStruct
-_08159E64:
- ldr r0, _08159E98 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _08159EDE
- movs r0, 0x81
- negs r0, r0
- str r1, [sp]
-_08159E7A:
- movs r1, 0x4
- movs r2, 0x8
- movs r3, 0
-_08159E80:
- bl BeginNormalPaletteFade
-_08159E84:
- ldr r1, _08159E9C @ =gUnknown_3005EE0
- ldr r0, _08159EA0 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldrb r0, [r1, 0x2]
- adds r0, 0x1
- strb r0, [r1, 0x2]
- b _08159EDE
- .align 2, 0
-_08159E98: .4byte gPaletteFade
-_08159E9C: .4byte gUnknown_3005EE0
-_08159EA0: .4byte gActiveBattler
-_08159EA4:
- ldr r0, _08159EE8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08159EDE
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- ldrb r0, [r0, 0x3]
- cmp r0, 0xD
- bne _08159EC8
- bl BattleStopLowHpSound
- ldr r0, _08159EEC @ =0x00000137
- bl PlayBGM
-_08159EC8:
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- bl sub_80EF0E0
- bl sub_80EB524
- bl sub_8159B78
-_08159EDE:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08159EE8: .4byte gPaletteFade
-_08159EEC: .4byte 0x00000137
- thumb_func_end sub_8159D04
-
- thumb_func_start sub_8159EF0
-sub_8159EF0: @ 8159EF0
- push {lr}
- ldr r0, _08159F10 @ =gBattleStruct
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0x96
- ldrb r1, [r1]
- cmp r1, 0x1
- beq _08159F18
- cmp r1, 0x1
- ble _08159F0C
- cmp r1, 0x2
- beq _08159F20
- cmp r1, 0x3
- beq _08159F28
-_08159F0C:
- ldr r1, _08159F14 @ =gUnknown_84791A8
- b _08159F2A
- .align 2, 0
-_08159F10: .4byte gBattleStruct
-_08159F14: .4byte gUnknown_84791A8
-_08159F18:
- ldr r1, _08159F1C @ =gUnknown_84791B8
- b _08159F2A
- .align 2, 0
-_08159F1C: .4byte gUnknown_84791B8
-_08159F20:
- ldr r1, _08159F24 @ =gUnknown_84791CC
- b _08159F2A
- .align 2, 0
-_08159F24: .4byte gUnknown_84791CC
-_08159F28:
- ldr r1, _08159F3C @ =gUnknown_84791E8
-_08159F2A:
- adds r0, 0x97
- ldrb r0, [r0]
- subs r0, 0x1
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- pop {r1}
- bx r1
- .align 2, 0
-_08159F3C: .4byte gUnknown_84791E8
- thumb_func_end sub_8159EF0
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/electric.s b/asm/electric.s
deleted file mode 100644
index fa92c096a..000000000
--- a/asm/electric.s
+++ /dev/null
@@ -1,2675 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80ADBEC
-sub_80ADBEC: @ 80ADBEC
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080ADC0C @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080ADC14
- ldr r0, _080ADC10 @ =gBattleAnimArgs
- ldrh r1, [r4, 0x20]
- ldrh r2, [r0]
- subs r1, r2
- strh r1, [r4, 0x20]
- b _080ADC20
- .align 2, 0
-_080ADC0C: .4byte gBattleAnimAttacker
-_080ADC10: .4byte gBattleAnimArgs
-_080ADC14:
- ldr r1, _080ADC34 @ =gBattleAnimArgs
- ldrh r0, [r1]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r4, 0x20]
- adds r0, r1, 0
-_080ADC20:
- ldrh r0, [r0, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
- ldr r0, _080ADC38 @ =sub_80ADC3C
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080ADC34: .4byte gBattleAnimArgs
-_080ADC38: .4byte sub_80ADC3C
- thumb_func_end sub_80ADBEC
-
- thumb_func_start sub_80ADC3C
-sub_80ADC3C: @ 80ADC3C
- push {lr}
- adds r2, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080ADC52
- adds r0, r2, 0
- bl DestroyAnimSprite
-_080ADC52:
- pop {r0}
- bx r0
- thumb_func_end sub_80ADC3C
-
- thumb_func_start sub_80ADC58
-sub_80ADC58: @ 80ADC58
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080ADC78 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080ADC80
- ldr r0, _080ADC7C @ =gBattleAnimArgs
- ldrh r1, [r4, 0x20]
- ldrh r0, [r0]
- subs r1, r0
- strh r1, [r4, 0x20]
- b _080ADC8A
- .align 2, 0
-_080ADC78: .4byte gBattleAnimAttacker
-_080ADC7C: .4byte gBattleAnimArgs
-_080ADC80:
- ldr r0, _080ADC94 @ =gBattleAnimArgs
- ldrh r0, [r0]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
-_080ADC8A:
- ldr r0, _080ADC98 @ =sub_80ADC9C
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080ADC94: .4byte gBattleAnimArgs
-_080ADC98: .4byte sub_80ADC9C
- thumb_func_end sub_80ADC58
-
- thumb_func_start sub_80ADC9C
-sub_80ADC9C: @ 80ADC9C
- push {lr}
- adds r2, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080ADCB2
- adds r0, r2, 0
- bl DestroySpriteAndMatrix
-_080ADCB2:
- pop {r0}
- bx r0
- thumb_func_end sub_80ADC9C
-
- thumb_func_start sub_80ADCB8
-sub_80ADCB8: @ 80ADCB8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, _080ADCFC @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r0, _080ADD00 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080ADD08
- ldr r2, _080ADD04 @ =gBattleAnimArgs
- ldrh r0, [r5, 0x20]
- ldrh r1, [r2]
- subs r0, r1
- strh r0, [r5, 0x20]
- ldrh r0, [r5, 0x22]
- ldrh r1, [r2, 0x2]
- subs r0, r1
- strh r0, [r5, 0x22]
- b _080ADD1C
- .align 2, 0
-_080ADCFC: .4byte gBattleAnimTarget
-_080ADD00: .4byte gBattleAnimAttacker
-_080ADD04: .4byte gBattleAnimArgs
-_080ADD08:
- ldr r0, _080ADD40 @ =gBattleAnimArgs
- ldrh r1, [r0]
- ldrh r2, [r5, 0x20]
- adds r1, r2
- strh r1, [r5, 0x20]
- ldrh r1, [r0, 0x2]
- ldrh r2, [r5, 0x22]
- adds r1, r2
- strh r1, [r5, 0x22]
- adds r2, r0, 0
-_080ADD1C:
- movs r0, 0
- strh r0, [r5, 0x2E]
- ldrh r0, [r2, 0x4]
- strh r0, [r5, 0x30]
- ldrh r0, [r2, 0x6]
- strh r0, [r5, 0x32]
- ldrh r0, [r2, 0x8]
- strh r0, [r5, 0x34]
- ldr r1, _080ADD44 @ =DestroySpriteAndMatrix
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- ldr r0, _080ADD48 @ =TranslateSpriteInCircleOverDuration
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080ADD40: .4byte gBattleAnimArgs
-_080ADD44: .4byte DestroySpriteAndMatrix
-_080ADD48: .4byte TranslateSpriteInCircleOverDuration
- thumb_func_end sub_80ADCB8
-
- thumb_func_start sub_80ADD4C
-sub_80ADD4C: @ 80ADD4C
- push {r4-r7,lr}
- adds r5, r0, 0
- ldr r0, _080ADD64 @ =gBattleAnimArgs
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- cmp r0, 0x1
- beq _080ADDC4
- cmp r0, 0x1
- bgt _080ADD68
- cmp r0, 0
- beq _080ADD72
- b _080ADDC4
- .align 2, 0
-_080ADD64: .4byte gBattleAnimArgs
-_080ADD68:
- cmp r0, 0x2
- beq _080ADD7C
- cmp r0, 0x3
- beq _080ADDA0
- b _080ADDC4
-_080ADD72:
- ldr r0, _080ADD78 @ =gBattleAnimAttacker
- b _080ADDC6
- .align 2, 0
-_080ADD78: .4byte gBattleAnimAttacker
-_080ADD7C:
- ldr r4, _080ADD94 @ =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r6, 0x2
- eors r0, r6
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- bne _080ADD98
- ldrb r4, [r4]
- b _080ADDC8
- .align 2, 0
-_080ADD94: .4byte gBattleAnimAttacker
-_080ADD98:
- ldrb r0, [r4]
- adds r4, r6, 0
- eors r4, r0
- b _080ADDC8
-_080ADDA0:
- ldr r0, _080ADDBC @ =gBattleAnimAttacker
- ldrb r0, [r0]
- movs r4, 0x2
- eors r0, r4
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080ADDC4
- ldr r0, _080ADDC0 @ =gBattleAnimTarget
- ldrb r0, [r0]
- eors r4, r0
- b _080ADDC8
- .align 2, 0
-_080ADDBC: .4byte gBattleAnimAttacker
-_080ADDC0: .4byte gBattleAnimTarget
-_080ADDC4:
- ldr r0, _080ADDE8 @ =gBattleAnimTarget
-_080ADDC6:
- ldrb r4, [r0]
-_080ADDC8:
- ldr r0, _080ADDEC @ =gBattleAnimArgs
- movs r2, 0xA
- ldrsh r0, [r0, r2]
- cmp r0, 0
- bne _080ADDF0
- adds r0, r4, 0
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- adds r0, r4, 0
- movs r1, 0x1
- b _080ADE02
- .align 2, 0
-_080ADDE8: .4byte gBattleAnimTarget
-_080ADDEC: .4byte gBattleAnimArgs
-_080ADDF0:
- adds r0, r4, 0
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- adds r0, r4, 0
- movs r1, 0x3
-_080ADE02:
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r7, _080ADEA0 @ =gSineTable
- ldr r6, _080ADEA4 @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r6, r1]
- lsls r0, 1
- adds r0, r7
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r2, 0x2
- ldrsh r0, [r6, r2]
- muls r0, r1
- asrs r0, 8
- strh r0, [r5, 0x24]
- movs r1, 0
- ldrsh r0, [r6, r1]
- adds r0, 0x40
- lsls r0, 1
- adds r0, r7
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r2, 0x2
- ldrsh r0, [r6, r2]
- muls r0, r1
- asrs r0, 8
- strh r0, [r5, 0x26]
- ldrh r1, [r6, 0xC]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080ADE66
- adds r0, r4, 0
- bl GetBattlerSpriteBGPriority
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- lsls r0, 2
- ldrb r2, [r5, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x5]
-_080ADE66:
- ldrb r2, [r5, 0x3]
- lsls r2, 26
- lsrs r2, 27
- movs r0, 0x4
- ldrsh r1, [r6, r0]
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- ldr r3, _080ADEA8 @ =gOamMatrices
- lsls r2, 3
- adds r2, r3
- adds r1, 0x40
- lsls r1, 1
- adds r1, r7
- ldrh r1, [r1]
- strh r1, [r2, 0x6]
- strh r1, [r2]
- strh r0, [r2, 0x2]
- lsls r0, 16
- asrs r0, 16
- negs r0, r0
- strh r0, [r2, 0x4]
- ldrh r0, [r6, 0x6]
- strh r0, [r5, 0x2E]
- ldr r0, _080ADEAC @ =sub_80B1D3C
- str r0, [r5, 0x1C]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080ADEA0: .4byte gSineTable
-_080ADEA4: .4byte gBattleAnimArgs
-_080ADEA8: .4byte gOamMatrices
-_080ADEAC: .4byte sub_80B1D3C
- thumb_func_end sub_80ADD4C
-
- thumb_func_start sub_80ADEB0
-sub_80ADEB0: @ 80ADEB0
- push {r4-r6,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
- ldr r5, _080ADF24 @ =gBattleAnimArgs
- ldrh r0, [r5, 0x6]
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- ldr r6, _080ADF28 @ =gBattleAnimTarget
- ldrb r0, [r6]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- ldrb r0, [r6]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x36]
- adds r0, r4, 0
- bl InitAnimLinearTranslation
- ldrh r0, [r5, 0x4]
- strh r0, [r4, 0x38]
- ldrh r0, [r5, 0xA]
- strh r0, [r4, 0x3A]
- ldrh r0, [r5, 0x8]
- strh r0, [r4, 0x3C]
- ldrh r2, [r4, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- movs r3, 0xC
- ldrsh r0, [r5, r3]
- lsls r0, 2
- adds r1, r0
- ldr r3, _080ADF2C @ =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldr r0, _080ADF30 @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r4, 0x4]
- ldr r1, _080ADF34 @ =sub_80ADF38
- str r1, [r4, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080ADF24: .4byte gBattleAnimArgs
-_080ADF28: .4byte gBattleAnimTarget
-_080ADF2C: .4byte 0x000003ff
-_080ADF30: .4byte 0xfffffc00
-_080ADF34: .4byte sub_80ADF38
- thumb_func_end sub_80ADEB0
-
- thumb_func_start sub_80ADF38
-sub_80ADF38: @ 80ADF38
- push {r4,lr}
- adds r4, r0, 0
- bl AnimTranslateLinear
- lsls r0, 24
- cmp r0, 0
- bne _080ADFA2
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x24]
- adds r0, r1
- strh r0, [r4, 0x24]
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Cos
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- ldrh r2, [r4, 0x3C]
- adds r0, r2
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x3C]
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- movs r1, 0x3
- bl __modsi3
- lsls r0, 16
- cmp r0, 0
- bne _080ADFA8
- 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]
- b _080ADFA8
-_080ADFA2:
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080ADFA8:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80ADF38
-
- thumb_func_start sub_80ADFB0
-sub_80ADFB0: @ 80ADFB0
- push {lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x38]
- subs r0, 0x1
- strh r0, [r3, 0x38]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _080ADFE8
- movs r0, 0x3E
- adds r0, r3
- mov r12, r0
- ldrb r2, [r0]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
- ldrh r0, [r3, 0x36]
- strh r0, [r3, 0x38]
-_080ADFE8:
- ldrh r0, [r3, 0x34]
- subs r1, r0, 0x1
- strh r1, [r3, 0x34]
- lsls r0, 16
- cmp r0, 0
- bgt _080ADFFA
- adds r0, r3, 0
- bl DestroyAnimSprite
-_080ADFFA:
- pop {r0}
- bx r0
- thumb_func_end sub_80ADFB0
-
- thumb_func_start sub_80AE000
-sub_80AE000: @ 80AE000
- push {r4-r6,lr}
- adds r6, r0, 0
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080AE01C
- ldr r0, _080AE060 @ =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080AE024
-_080AE01C:
- ldr r1, _080AE064 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x2]
- negs r0, r0
- strh r0, [r1, 0x2]
-_080AE024:
- ldr r5, _080AE060 @ =gBattleAnimTarget
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- ldr r4, _080AE064 @ =gBattleAnimArgs
- lsrs r0, 24
- ldrh r1, [r4, 0x2]
- adds r0, r1
- strh r0, [r6, 0x20]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x4]
- adds r0, r1
- strh r0, [r6, 0x22]
- ldrh r0, [r4]
- strh r0, [r6, 0x34]
- ldrh r0, [r4, 0x6]
- strh r0, [r6, 0x36]
- strh r0, [r6, 0x38]
- ldr r0, _080AE068 @ =sub_80ADFB0
- str r0, [r6, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AE060: .4byte gBattleAnimTarget
-_080AE064: .4byte gBattleAnimArgs
-_080AE068: .4byte sub_80ADFB0
- thumb_func_end sub_80AE000
-
- thumb_func_start sub_80AE06C
-sub_80AE06C: @ 80AE06C
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r1, _080AE088 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x6]
- strh r0, [r5, 0x2E]
- movs r2, 0xE
- ldrsh r0, [r1, r2]
- movs r1, 0x80
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- beq _080AE090
- ldr r0, _080AE08C @ =gBattleAnimTarget
- b _080AE092
- .align 2, 0
-_080AE088: .4byte gBattleAnimArgs
-_080AE08C: .4byte gBattleAnimTarget
-_080AE090:
- ldr r0, _080AE118 @ =gBattleAnimAttacker
-_080AE092:
- ldrb r6, [r0]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080AE0AA
- adds r0, r6, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080AE0B2
-_080AE0AA:
- ldr r1, _080AE11C @ =gBattleAnimArgs
- ldrh r0, [r1]
- negs r0, r0
- strh r0, [r1]
-_080AE0B2:
- adds r0, r6, 0
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- ldr r4, _080AE11C @ =gBattleAnimArgs
- lsrs r0, 24
- ldrh r3, [r4]
- adds r0, r3
- strh r0, [r5, 0x20]
- adds r0, r6, 0
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x2]
- adds r0, r1
- strh r0, [r5, 0x22]
- ldrh r1, [r4, 0xE]
- ldr r0, _080AE120 @ =0x00007fff
- ands r0, r1
- strh r0, [r5, 0x36]
- ldrh r0, [r4, 0x4]
- strh r0, [r5, 0x38]
- ldrh r0, [r4, 0xA]
- strh r0, [r5, 0x3A]
- ldrh r0, [r4, 0x8]
- strh r0, [r5, 0x3C]
- ldrh r2, [r5, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- movs r3, 0xC
- ldrsh r0, [r4, r3]
- lsls r0, 2
- adds r1, r0
- ldr r3, _080AE124 @ =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldr r0, _080AE128 @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x4]
- ldr r1, _080AE12C @ =sub_80AE130
- str r1, [r5, 0x1C]
- adds r0, r5, 0
- bl _call_via_r1
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AE118: .4byte gBattleAnimAttacker
-_080AE11C: .4byte gBattleAnimArgs
-_080AE120: .4byte 0x00007fff
-_080AE124: .4byte 0x000003ff
-_080AE128: .4byte 0xfffffc00
-_080AE12C: .4byte sub_80AE130
- thumb_func_end sub_80AE06C
-
- thumb_func_start sub_80AE130
-sub_80AE130: @ 80AE130
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- strh r0, [r4, 0x24]
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Cos
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- ldrh r1, [r4, 0x3C]
- adds r0, r1
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x3C]
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- bl __modsi3
- cmp r0, 0
- bne _080AE186
- 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]
-_080AE186:
- ldrh r0, [r4, 0x2E]
- subs r1, r0, 0x1
- strh r1, [r4, 0x2E]
- lsls r0, 16
- cmp r0, 0
- bgt _080AE198
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080AE198:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AE130
-
- thumb_func_start sub_80AE1A0
-sub_80AE1A0: @ 80AE1A0
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0
- bl InitSpritePosToAnimTarget
- ldrh r2, [r4, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- ldr r3, _080AE1DC @ =gBattleAnimArgs
- movs r5, 0x6
- ldrsh r0, [r3, r5]
- lsls r0, 2
- adds r1, r0
- ldr r5, _080AE1E0 @ =0x000003ff
- adds r0, r5, 0
- ands r1, r0
- ldr r0, _080AE1E4 @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r4, 0x4]
- movs r1, 0x6
- ldrsh r0, [r3, r1]
- cmp r0, 0x1
- bne _080AE1E8
- ldrb r0, [r4, 0x3]
- movs r1, 0x3F
- negs r1, r1
- ands r1, r0
- movs r0, 0x10
- b _080AE1F6
- .align 2, 0
-_080AE1DC: .4byte gBattleAnimArgs
-_080AE1E0: .4byte 0x000003ff
-_080AE1E4: .4byte 0xfffffc00
-_080AE1E8:
- cmp r0, 0x2
- bne _080AE1FA
- ldrb r0, [r4, 0x3]
- movs r1, 0x3F
- negs r1, r1
- ands r1, r0
- movs r0, 0x20
-_080AE1F6:
- orrs r1, r0
- strb r1, [r4, 0x3]
-_080AE1FA:
- ldr r0, _080AE214 @ =gBattleAnimArgs
- ldrh r0, [r0, 0x4]
- strh r0, [r4, 0x2E]
- ldr r0, _080AE218 @ =WaitAnimForDuration
- str r0, [r4, 0x1C]
- ldr r1, _080AE21C @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AE214: .4byte gBattleAnimArgs
-_080AE218: .4byte WaitAnimForDuration
-_080AE21C: .4byte DestroyAnimSprite
- thumb_func_end sub_80AE1A0
-
- thumb_func_start sub_80AE220
-sub_80AE220: @ 80AE220
- push {r4-r6,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r6, _080AE268 @ =gBattleAnimTarget
- ldrb r0, [r6]
- movs r1, 0
- bl GetBattlerSpriteCoord
- ldr r1, _080AE26C @ =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r1
- lsls r0, 24
- ldr r5, _080AE270 @ =gBattleAnimArgs
- lsrs r0, 24
- ldrh r1, [r5]
- adds r0, r1
- strh r0, [r4, 0x8]
- ldrb r0, [r6]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x2]
- adds r0, r1
- strh r0, [r4, 0xA]
- ldrh r0, [r5, 0x4]
- strh r0, [r4, 0xC]
- ldr r0, _080AE274 @ =sub_80AE278
- str r0, [r4]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AE268: .4byte gBattleAnimTarget
-_080AE26C: .4byte gTasks
-_080AE270: .4byte gBattleAnimArgs
-_080AE274: .4byte sub_80AE278
- thumb_func_end sub_80AE220
-
- thumb_func_start sub_80AE278
-sub_80AE278: @ 80AE278
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r5, 0
- movs r7, 0
- ldr r1, _080AE2B8 @ =gTasks
- lsls r0, 2
- add r0, r9
- lsls r0, 3
- adds r0, r1
- ldrb r2, [r0, 0xC]
- str r2, [sp]
- ldrh r4, [r0, 0x8]
- ldrh r6, [r0, 0xA]
- movs r3, 0xC
- ldrsh r0, [r0, r3]
- mov r10, r1
- cmp r0, 0
- bne _080AE2BC
- movs r0, 0
- mov r8, r0
- movs r2, 0x1
- movs r1, 0x10
- mov r12, r1
- b _080AE2C6
- .align 2, 0
-_080AE2B8: .4byte gTasks
-_080AE2BC:
- movs r2, 0x10
- mov r12, r2
- movs r3, 0x8
- mov r8, r3
- movs r2, 0x4
-_080AE2C6:
- mov r0, r9
- lsls r1, r0, 2
- adds r0, r1, r0
- lsls r0, 3
- add r0, r10
- movs r3, 0x1C
- ldrsh r0, [r0, r3]
- mov r10, r1
- cmp r0, 0xA
- bhi _080AE3BC
- lsls r0, 2
- ldr r1, _080AE2E4 @ =_080AE2E8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080AE2E4: .4byte _080AE2E8
- .align 2, 0
-_080AE2E8:
- .4byte _080AE314
- .4byte _080AE3BC
- .4byte _080AE328
- .4byte _080AE3BC
- .4byte _080AE348
- .4byte _080AE3BC
- .4byte _080AE35E
- .4byte _080AE3BC
- .4byte _080AE380
- .4byte _080AE3BC
- .4byte _080AE3B4
-_080AE314:
- ldr r0, _080AE324 @ =gUnknown_83E60A0
- lsls r1, r4, 16
- asrs r1, 16
- lsls r2, r6, 16
- asrs r2, 16
- mov r4, r12
- lsls r3, r4, 16
- b _080AE396
- .align 2, 0
-_080AE324: .4byte gUnknown_83E60A0
-_080AE328:
- mov r0, r12
- lsls r3, r0, 17
- mov r1, r8
- adds r0, r1, r2
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, _080AE344 @ =gUnknown_83E60A0
- lsls r1, r4, 16
- asrs r1, 16
- lsls r2, r6, 16
- asrs r2, 16
- b _080AE396
- .align 2, 0
-_080AE344: .4byte gUnknown_83E60A0
-_080AE348:
- mov r3, r12
- lsls r0, r3, 16
- asrs r0, 16
- lsls r3, r0, 1
- adds r3, r0
- lsls r0, r2, 1
- add r0, r8
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- b _080AE38A
-_080AE35E:
- mov r0, r12
- lsls r3, r0, 18
- lsls r0, r2, 1
- adds r0, r2
- add r0, r8
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, _080AE37C @ =gUnknown_83E60A0
- lsls r1, r4, 16
- asrs r1, 16
- lsls r2, r6, 16
- asrs r2, 16
- b _080AE396
- .align 2, 0
-_080AE37C: .4byte gUnknown_83E60A0
-_080AE380:
- mov r1, r12
- lsls r0, r1, 16
- asrs r0, 16
- lsls r3, r0, 2
- adds r3, r0
-_080AE38A:
- ldr r0, _080AE3B0 @ =gUnknown_83E60A0
- lsls r1, r4, 16
- asrs r1, 16
- lsls r2, r6, 16
- asrs r2, 16
- lsls r3, 16
-_080AE396:
- asrs r3, 16
- adds r2, r3
- lsls r2, 16
- asrs r2, 16
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- b _080AE3BC
- .align 2, 0
-_080AE3B0: .4byte gUnknown_83E60A0
-_080AE3B4:
- mov r0, r9
- bl DestroyAnimVisualTask
- b _080AE400
-_080AE3BC:
- cmp r7, 0
- beq _080AE3F0
- ldr r4, _080AE410 @ =gSprites
- lsls r3, r5, 4
- adds r3, r5
- lsls r3, 2
- adds r0, r3, r4
- ldrh r5, [r0, 0x4]
- lsls r2, r5, 22
- lsrs r2, 22
- add r2, r8
- ldr r6, _080AE414 @ =0x000003ff
- adds r1, r6, 0
- ands r2, r1
- ldr r1, _080AE418 @ =0xfffffc00
- ands r1, r5
- orrs r1, r2
- strh r1, [r0, 0x4]
- mov r1, sp
- ldrh r1, [r1]
- strh r1, [r0, 0x2E]
- adds r4, 0x1C
- adds r3, r4
- ldr r1, [r3]
- bl _call_via_r1
-_080AE3F0:
- ldr r0, _080AE41C @ =gTasks
- mov r1, r10
- add r1, r9
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x1C]
- adds r0, 0x1
- strh r0, [r1, 0x1C]
-_080AE400:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AE410: .4byte gSprites
-_080AE414: .4byte 0x000003ff
-_080AE418: .4byte 0xfffffc00
-_080AE41C: .4byte gTasks
- thumb_func_end sub_80AE278
-
- thumb_func_start sub_80AE420
-sub_80AE420: @ 80AE420
- push {lr}
- adds r3, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r3, r1]
- cmp r0, 0
- bne _080AE442
- ldrb r1, [r3, 0x1]
- movs r2, 0x3F
- adds r0, r2, 0
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r3, 0x1]
- ldrb r0, [r3, 0x3]
- ands r2, r0
- strb r2, [r3, 0x3]
- b _080AE456
-_080AE442:
- ldrb r2, [r3, 0x1]
- movs r1, 0x3F
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r3, 0x1]
- ldrb r0, [r3, 0x3]
- ands r1, r0
- movs r0, 0x40
- orrs r1, r0
- strb r1, [r3, 0x3]
-_080AE456:
- ldrh r0, [r3, 0x30]
- adds r0, 0x1
- strh r0, [r3, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xF
- bne _080AE46A
- adds r0, r3, 0
- bl DestroySprite
-_080AE46A:
- pop {r0}
- bx r0
- thumb_func_end sub_80AE420
-
- thumb_func_start sub_80AE470
-sub_80AE470: @ 80AE470
- push {r4-r7,lr}
- adds r4, r0, 0
- ldr r0, _080AE4D8 @ =gBattleAnimArgs
- ldrh r1, [r0]
- ldrh r2, [r4, 0x20]
- adds r1, r2
- strh r1, [r4, 0x20]
- ldrh r0, [r0, 0x2]
- ldrh r3, [r4, 0x22]
- adds r0, r3
- strh r0, [r4, 0x22]
- ldr r0, _080AE4DC @ =gUnknown_83E60B8
- adds r1, 0x20
- lsls r1, 16
- asrs r1, 16
- movs r7, 0x22
- ldrsh r2, [r4, r7]
- adds r3, r4, 0
- adds r3, 0x43
- ldrb r3, [r3]
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _080AE4E0 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r6, r2, r3
- ldrh r5, [r6, 0x4]
- lsls r1, r5, 22
- lsrs r1, 22
- adds r1, 0x8
- ldr r7, _080AE4E4 @ =0x000003ff
- adds r0, r7, 0
- ands r1, r0
- ldr r0, _080AE4E8 @ =0xfffffc00
- ands r0, r5
- orrs r0, r1
- strh r0, [r6, 0x4]
- ldr r1, _080AE4EC @ =gAnimVisualTaskCount
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- adds r3, 0x1C
- adds r2, r3
- ldr r0, _080AE4F0 @ =sub_80AE4F4
- str r0, [r2]
- str r0, [r4, 0x1C]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AE4D8: .4byte gBattleAnimArgs
-_080AE4DC: .4byte gUnknown_83E60B8
-_080AE4E0: .4byte gSprites
-_080AE4E4: .4byte 0x000003ff
-_080AE4E8: .4byte 0xfffffc00
-_080AE4EC: .4byte gAnimVisualTaskCount
-_080AE4F0: .4byte sub_80AE4F4
- thumb_func_end sub_80AE470
-
- thumb_func_start sub_80AE4F4
-sub_80AE4F4: @ 80AE4F4
- push {lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- bne _080AE528
- movs r0, 0
- strh r0, [r3, 0x2E]
- movs r0, 0x3E
- adds r0, r3
- mov r12, r0
- ldrb r2, [r0]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
-_080AE528:
- ldrh r0, [r3, 0x30]
- adds r0, 0x1
- strh r0, [r3, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x33
- bne _080AE53C
- adds r0, r3, 0
- bl DestroyAnimSprite
-_080AE53C:
- pop {r0}
- bx r0
- thumb_func_end sub_80AE4F4
-
- thumb_func_start sub_80AE540
-sub_80AE540: @ 80AE540
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080AE560 @ =gTasks
- adds r5, r1, r0
- ldr r0, _080AE564 @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080AE56C
- ldr r4, _080AE568 @ =gBattleAnimAttacker
- b _080AE56E
- .align 2, 0
-_080AE560: .4byte gTasks
-_080AE564: .4byte gBattleAnimArgs
-_080AE568: .4byte gBattleAnimAttacker
-_080AE56C:
- ldr r4, _080AE5B0 @ =gBattleAnimTarget
-_080AE56E:
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x24]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x26]
- ldr r2, _080AE5B4 @ =gBattleAnimArgs
- ldrh r0, [r2, 0x2]
- movs r1, 0
- strh r0, [r5, 0x14]
- strh r1, [r5, 0x16]
- strh r1, [r5, 0x18]
- strh r1, [r5, 0x1A]
- strh r1, [r5, 0x1C]
- ldrh r0, [r2, 0x6]
- strh r0, [r5, 0x1E]
- strh r1, [r5, 0x20]
- ldrh r0, [r2, 0x4]
- strh r0, [r5, 0x22]
- ldr r0, _080AE5B8 @ =sub_80AE5BC
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AE5B0: .4byte gBattleAnimTarget
-_080AE5B4: .4byte gBattleAnimArgs
-_080AE5B8: .4byte sub_80AE5BC
- thumb_func_end sub_80AE540
-
- thumb_func_start sub_80AE5BC
-sub_80AE5BC: @ 80AE5BC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- adds r2, r6, 0
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _080AE6A4 @ =gTasks
- adds r5, r0, r1
- movs r1, 0x14
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _080AE6BC
- ldrh r0, [r5, 0x20]
- adds r0, 0x1
- movs r7, 0
- strh r0, [r5, 0x20]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x22
- ldrsh r1, [r5, r2]
- cmp r0, r1
- ble _080AE6CA
- strh r7, [r5, 0x20]
- ldr r0, _080AE6A8 @ =gUnknown_83E6120
- movs r3, 0x24
- ldrsh r1, [r5, r3]
- movs r3, 0x26
- ldrsh r2, [r5, r3]
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080AE6CA
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _080AE6AC @ =gSprites
- adds r4, r0
- ldr r1, _080AE6B0 @ =gUnknown_83E60D0
- movs r2, 0x1A
- ldrsh r0, [r5, r2]
- lsls r0, 1
- adds r0, r1
- movs r3, 0
- ldrsb r3, [r0, r3]
- ldrh r0, [r4, 0x20]
- adds r3, r0
- strh r3, [r4, 0x20]
- movs r2, 0x1A
- ldrsh r0, [r5, r2]
- lsls r0, 1
- adds r1, 0x1
- adds r0, r1
- movs r2, 0
- ldrsb r2, [r0, r2]
- ldrh r0, [r4, 0x22]
- adds r2, r0
- strh r2, [r4, 0x22]
- movs r1, 0x18
- ldrsh r0, [r5, r1]
- lsls r1, r0, 2
- adds r1, r0
- movs r0, 0x28
- subs r0, r1
- strh r0, [r4, 0x2E]
- strh r3, [r4, 0x30]
- ldrh r0, [r5, 0x24]
- strh r0, [r4, 0x32]
- strh r2, [r4, 0x34]
- ldrh r0, [r5, 0x26]
- strh r0, [r4, 0x36]
- strh r6, [r4, 0x38]
- adds r0, r4, 0
- bl InitAnimLinearTranslation
- ldr r1, _080AE6B4 @ =sub_80AE704
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- ldr r0, _080AE6B8 @ =RunStoredCallbackWhenAnimEnds
- str r0, [r4, 0x1C]
- ldrh r0, [r5, 0x1A]
- adds r0, 0x1
- strh r0, [r5, 0x1A]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xF
- ble _080AE674
- strh r7, [r5, 0x1A]
-_080AE674:
- ldrh r0, [r5, 0x1C]
- adds r0, 0x1
- strh r0, [r5, 0x1C]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x1E
- ldrsh r1, [r5, r2]
- cmp r0, r1
- blt _080AE696
- strh r7, [r5, 0x1C]
- ldrh r1, [r5, 0x18]
- movs r3, 0x18
- ldrsh r0, [r5, r3]
- cmp r0, 0x5
- bgt _080AE696
- adds r0, r1, 0x1
- strh r0, [r5, 0x18]
-_080AE696:
- ldrh r0, [r5, 0x16]
- adds r0, 0x1
- strh r0, [r5, 0x16]
- ldrh r0, [r5, 0x14]
- subs r0, 0x1
- strh r0, [r5, 0x14]
- b _080AE6CA
- .align 2, 0
-_080AE6A4: .4byte gTasks
-_080AE6A8: .4byte gUnknown_83E6120
-_080AE6AC: .4byte gSprites
-_080AE6B0: .4byte gUnknown_83E60D0
-_080AE6B4: .4byte sub_80AE704
-_080AE6B8: .4byte RunStoredCallbackWhenAnimEnds
-_080AE6BC:
- movs r1, 0x16
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080AE6CA
- adds r0, r2, 0
- bl DestroyAnimVisualTask
-_080AE6CA:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80AE5BC
-
- thumb_func_start sub_80AE6D0
-sub_80AE6D0: @ 80AE6D0
- push {r4,lr}
- adds r4, r0, 0
- bl AnimTranslateLinear
- lsls r0, 24
- cmp r0, 0
- beq _080AE6F8
- ldr r2, _080AE700 @ =gTasks
- movs r0, 0x38
- ldrsh r1, [r4, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrh r1, [r0, 0x16]
- subs r1, 0x1
- strh r1, [r0, 0x16]
- adds r0, r4, 0
- bl DestroySprite
-_080AE6F8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AE700: .4byte gTasks
- thumb_func_end sub_80AE6D0
-
- thumb_func_start sub_80AE704
-sub_80AE704: @ 80AE704
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r0, _080AE718 @ =sub_80AE6D0
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AE718: .4byte sub_80AE6D0
- thumb_func_end sub_80AE704
-
- thumb_func_start sub_80AE71C
-sub_80AE71C: @ 80AE71C
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _080AE730 @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080AE738
- ldr r4, _080AE734 @ =gBattleAnimAttacker
- b _080AE73A
- .align 2, 0
-_080AE730: .4byte gBattleAnimArgs
-_080AE734: .4byte gBattleAnimAttacker
-_080AE738:
- ldr r4, _080AE768 @ =gBattleAnimTarget
-_080AE73A:
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r1, _080AE76C @ =DestroySpriteAndMatrix
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- ldr r0, _080AE770 @ =RunStoredCallbackWhenAffineAnimEnds
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AE768: .4byte gBattleAnimTarget
-_080AE76C: .4byte DestroySpriteAndMatrix
-_080AE770: .4byte RunStoredCallbackWhenAffineAnimEnds
- thumb_func_end sub_80AE71C
-
- thumb_func_start sub_80AE774
-sub_80AE774: @ 80AE774
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _080AE788 @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080AE790
- ldr r4, _080AE78C @ =gBattleAnimAttacker
- b _080AE792
- .align 2, 0
-_080AE788: .4byte gBattleAnimArgs
-_080AE78C: .4byte gBattleAnimAttacker
-_080AE790:
- ldr r4, _080AE7CC @ =gBattleAnimTarget
-_080AE792:
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r1, _080AE7D0 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x2]
- strh r0, [r5, 0x24]
- ldrh r0, [r1, 0x4]
- strh r0, [r5, 0x26]
- ldr r1, _080AE7D4 @ =DestroyAnimSprite
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- ldr r0, _080AE7D8 @ =RunStoredCallbackWhenAnimEnds
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AE7CC: .4byte gBattleAnimTarget
-_080AE7D0: .4byte gBattleAnimArgs
-_080AE7D4: .4byte DestroyAnimSprite
-_080AE7D8: .4byte RunStoredCallbackWhenAnimEnds
- thumb_func_end sub_80AE774
-
- thumb_func_start sub_80AE7DC
-sub_80AE7DC: @ 80AE7DC
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
- ldr r4, _080AE834 @ =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- movs r0, 0
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x3A]
- movs r0, 0x10
- strh r0, [r5, 0x3C]
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080AE82A
- movs r1, 0x3C
- ldrsh r0, [r5, r1]
- negs r0, r0
- strh r0, [r5, 0x3C]
-_080AE82A:
- ldr r0, _080AE838 @ =sub_80AE83C
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AE834: .4byte gBattleAnimAttacker
-_080AE838: .4byte sub_80AE83C
- thumb_func_end sub_80AE7DC
-
- thumb_func_start sub_80AE83C
-sub_80AE83C: @ 80AE83C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080AE84E
- cmp r0, 0x1
- beq _080AE864
- b _080AE894
-_080AE84E:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x28
- ble _080AE894
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _080AE894
-_080AE864:
- ldrh r2, [r4, 0x3C]
- ldrh r1, [r4, 0x20]
- adds r0, r2, r1
- strh r0, [r4, 0x20]
- ldr r3, _080AE89C @ =gSprites
- movs r0, 0x3A
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r1, [r0, 0x24]
- adds r2, r1
- strh r2, [r0, 0x24]
- ldrh r0, [r4, 0x20]
- adds r0, 0x50
- lsls r0, 16
- movs r1, 0xC8
- lsls r1, 17
- cmp r0, r1
- bls _080AE894
- adds r0, r4, 0
- bl DestroySpriteAndMatrix
-_080AE894:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AE89C: .4byte gSprites
- thumb_func_end sub_80AE83C
-
- thumb_func_start sub_80AE8A0
-sub_80AE8A0: @ 80AE8A0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- ldr r1, _080AE8C4 @ =gTasks
- adds r5, r0, r1
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- beq _080AE934
- cmp r0, 0x1
- bgt _080AE8C8
- cmp r0, 0
- beq _080AE8D4
- b _080AEA04
- .align 2, 0
-_080AE8C4: .4byte gTasks
-_080AE8C8:
- cmp r0, 0x2
- beq _080AE990
- cmp r0, 0x3
- bne _080AE8D2
- b _080AE9E4
-_080AE8D2:
- b _080AEA04
-_080AE8D4:
- movs r0, 0
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- movs r6, 0
- strh r0, [r5, 0x26]
- ldr r4, _080AE908 @ =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x24]
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080AE910
- ldr r0, _080AE90C @ =0x0000ffe0
- strh r0, [r5, 0x24]
- movs r0, 0x2
- b _080AE916
- .align 2, 0
-_080AE908: .4byte gBattleAnimAttacker
-_080AE90C: .4byte 0x0000ffe0
-_080AE910:
- movs r0, 0x20
- strh r0, [r5, 0x24]
- ldr r0, _080AE92C @ =0x0000fffe
-_080AE916:
- strh r0, [r5, 0x22]
- ldr r2, _080AE930 @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r5, 0x24]
- strh r1, [r0, 0x24]
- b _080AE9D6
- .align 2, 0
-_080AE92C: .4byte 0x0000fffe
-_080AE930: .4byte gSprites
-_080AE934:
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080AEA04
- movs r0, 0
- strh r0, [r5, 0xA]
- ldr r4, _080AE98C @ =gSprites
- movs r1, 0x26
- ldrsh r0, [r5, r1]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r4
- adds r2, 0x3E
- ldrb r3, [r2]
- lsls r0, r3, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldrh r1, [r5, 0x24]
- movs r2, 0x24
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _080AE9D6
- ldrh r2, [r5, 0x22]
- adds r2, r1, r2
- strh r2, [r5, 0x24]
- movs r0, 0x26
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- strh r2, [r0, 0x24]
- b _080AEA04
- .align 2, 0
-_080AE98C: .4byte gSprites
-_080AE990:
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080AEA04
- movs r0, 0
- strh r0, [r5, 0xA]
- ldr r1, _080AE9E0 @ =gSprites
- movs r2, 0x26
- ldrsh r0, [r5, r2]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- adds r2, 0x3E
- ldrb r3, [r2]
- lsls r0, r3, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x8
- bne _080AEA04
-_080AE9D6:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- b _080AEA04
- .align 2, 0
-_080AE9E0: .4byte gSprites
-_080AE9E4:
- ldr r2, _080AEA0C @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- adds r0, r3, 0
- bl DestroyAnimVisualTask
-_080AEA04:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AEA0C: .4byte gSprites
- thumb_func_end sub_80AE8A0
-
- thumb_func_start sub_80AEA10
-sub_80AEA10: @ 80AEA10
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _080AEA34 @ =gTasks
- adds r5, r0, r1
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- bne _080AEA2A
- b _080AEB50
-_080AEA2A:
- cmp r0, 0x1
- bgt _080AEA38
- cmp r0, 0
- beq _080AEA40
- b _080AEB92
- .align 2, 0
-_080AEA34: .4byte gTasks
-_080AEA38:
- cmp r0, 0x2
- bne _080AEA3E
- b _080AEB84
-_080AEA3E:
- b _080AEB92
-_080AEA40:
- ldr r4, _080AEA80 @ =gBattleAnimAttacker
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- movs r2, 0x1
- negs r2, r2
- adds r1, r2, 0
- cmp r0, 0
- bne _080AEA56
- movs r1, 0x1
-_080AEA56:
- movs r6, 0
- strh r1, [r5, 0xA]
- ldr r0, _080AEA84 @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r2, [r0, r1]
- adds r3, r0, 0
- cmp r2, 0
- beq _080AEA8C
- cmp r2, 0x4
- beq _080AEAB4
- ldrh r1, [r3]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080AEAEC
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r5, 0xE]
- ldr r0, _080AEA88 @ =0x0000fff0
- b _080AEAF4
- .align 2, 0
-_080AEA80: .4byte gBattleAnimAttacker
-_080AEA84: .4byte gBattleAnimArgs
-_080AEA88: .4byte 0x0000fff0
-_080AEA8C:
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0xE]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x12]
- movs r2, 0xA
- ldrsh r0, [r5, r2]
- lsls r0, 7
- adds r0, 0x78
- strh r0, [r5, 0x10]
- b _080AEB2A
-_080AEAB4:
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- lsls r1, 7
- movs r0, 0x78
- subs r0, r1
- strh r0, [r5, 0xE]
- ldr r4, _080AEAE8 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x12]
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0xA
- ldrsh r1, [r5, r2]
- lsls r1, 5
- subs r0, r1
- strh r0, [r5, 0x10]
- b _080AEB2A
- .align 2, 0
-_080AEAE8: .4byte gBattleAnimTarget
-_080AEAEC:
- ldr r0, _080AEB10 @ =0x0000fff0
- strh r0, [r5, 0xE]
- movs r0, 0x80
- lsls r0, 1
-_080AEAF4:
- strh r0, [r5, 0x10]
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- bne _080AEB14
- movs r2, 0
- ldrsh r0, [r3, r2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 1
- movs r0, 0x50
- subs r0, r1
- strh r0, [r5, 0x12]
- b _080AEB2A
- .align 2, 0
-_080AEB10: .4byte 0x0000fff0
-_080AEB14:
- movs r0, 0
- ldrsh r1, [r3, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 1
- adds r0, 0x28
- strh r0, [r5, 0x12]
- ldrh r1, [r5, 0xE]
- ldrh r0, [r5, 0x10]
- strh r0, [r5, 0xE]
- strh r1, [r5, 0x10]
-_080AEB2A:
- movs r2, 0xE
- ldrsh r1, [r5, r2]
- movs r2, 0x10
- ldrsh r0, [r5, r2]
- cmp r1, r0
- bge _080AEB40
- movs r1, 0
- movs r0, 0x1
- strh r0, [r5, 0xA]
- strh r1, [r5, 0x14]
- b _080AEB7C
-_080AEB40:
- ldr r0, _080AEB4C @ =0x0000ffff
- strh r0, [r5, 0xA]
- movs r0, 0x3
- strh r0, [r5, 0x14]
- b _080AEB7C
- .align 2, 0
-_080AEB4C: .4byte 0x0000ffff
-_080AEB50:
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- ble _080AEB92
- movs r0, 0
- strh r0, [r5, 0xC]
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80AEB98
- lsls r0, 24
- cmp r0, 0
- bne _080AEB7C
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80AEB98
- lsls r0, 24
- cmp r0, 0
- beq _080AEB92
-_080AEB7C:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- b _080AEB92
-_080AEB84:
- movs r1, 0x16
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080AEB92
- adds r0, r4, 0
- bl DestroyAnimVisualTask
-_080AEB92:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80AEA10
-
- thumb_func_start sub_80AEB98
-sub_80AEB98: @ 80AEB98
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, _080AEC24 @ =gUnknown_83E6278
- movs r2, 0xE
- ldrsh r1, [r4, r2]
- movs r3, 0x12
- ldrsh r2, [r4, r3]
- movs r3, 0x23
- bl CreateSprite
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _080AEBCE
- ldr r1, _080AEC28 @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- strh r5, [r0, 0x3A]
- movs r1, 0x7
- strh r1, [r0, 0x3C]
- ldrh r0, [r4, 0x16]
- adds r0, 0x1
- strh r0, [r4, 0x16]
-_080AEBCE:
- ldrh r1, [r4, 0xA]
- ldrh r5, [r4, 0x14]
- adds r0, r1, r5
- strh r0, [r4, 0x14]
- lsls r0, 16
- cmp r0, 0
- bge _080AEBE0
- movs r0, 0x3
- strh r0, [r4, 0x14]
-_080AEBE0:
- movs r2, 0x14
- ldrsh r0, [r4, r2]
- cmp r0, 0x3
- ble _080AEBEC
- movs r0, 0
- strh r0, [r4, 0x14]
-_080AEBEC:
- movs r3, 0xA
- ldrsh r0, [r4, r3]
- lsls r0, 4
- ldrh r5, [r4, 0xE]
- adds r2, r0, r5
- strh r2, [r4, 0xE]
- lsls r0, r1, 16
- asrs r3, r0, 16
- cmp r3, 0x1
- bne _080AEC0C
- lsls r0, r2, 16
- asrs r0, 16
- movs r5, 0x10
- ldrsh r1, [r4, r5]
- cmp r0, r1
- bge _080AEC20
-_080AEC0C:
- movs r0, 0x1
- negs r0, r0
- cmp r3, r0
- bne _080AEC2C
- lsls r0, r2, 16
- asrs r0, 16
- movs r2, 0x10
- ldrsh r1, [r4, r2]
- cmp r0, r1
- bgt _080AEC2C
-_080AEC20:
- movs r0, 0x1
- b _080AEC2E
- .align 2, 0
-_080AEC24: .4byte gUnknown_83E6278
-_080AEC28: .4byte gSprites
-_080AEC2C:
- movs r0, 0
-_080AEC2E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80AEB98
-
- thumb_func_start sub_80AEC34
-sub_80AEC34: @ 80AEC34
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xC
- ble _080AEC74
- ldr r3, _080AEC7C @ =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
-_080AEC74:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AEC7C: .4byte gTasks
- thumb_func_end sub_80AEC34
-
- thumb_func_start sub_80AEC80
-sub_80AEC80: @ 80AEC80
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _080AEC92
- cmp r0, 0x1
- beq _080AECC4
- b _080AECD8
-_080AEC92:
- ldr r4, _080AECC0 @ =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- adds r0, r5, 0
- movs r1, 0x2
- bl StartSpriteAffineAnim
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- b _080AECD8
- .align 2, 0
-_080AECC0: .4byte gBattleAnimAttacker
-_080AECC4:
- adds r0, r5, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080AECD8
- adds r0, r5, 0
- bl DestroySpriteAndMatrix
-_080AECD8:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80AEC80
-
- thumb_func_start sub_80AECE0
-sub_80AECE0: @ 80AECE0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _080AED04 @ =gTasks
- adds r5, r0, r1
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0x4
- bls _080AECFA
- b _080AEE6C
-_080AECFA:
- lsls r0, 2
- ldr r1, _080AED08 @ =_080AED0C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080AED04: .4byte gTasks
-_080AED08: .4byte _080AED0C
- .align 2, 0
-_080AED0C:
- .4byte _080AED20
- .4byte _080AEDB0
- .4byte _080AEDEC
- .4byte _080AEE48
- .4byte _080AEE58
-_080AED20:
- ldr r4, _080AEDA4 @ =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x14]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x16]
- movs r0, 0x4
- strh r0, [r5, 0x18]
- ldr r0, _080AEDA8 @ =gBattleAnimTarget
- ldrb r0, [r0]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x1C]
- movs r2, 0x1C
- ldrsh r0, [r5, r2]
- movs r2, 0x14
- ldrsh r1, [r5, r2]
- subs r0, r1
- movs r1, 0x5
- bl __divsi3
- strh r0, [r5, 0x1A]
- movs r0, 0x7
- strh r0, [r5, 0x10]
- ldr r0, _080AEDAC @ =0x0000ffff
- strh r0, [r5, 0x12]
- movs r0, 0xC
- strh r0, [r5, 0x1E]
- subs r0, 0x4C
- bl BattleAnimAdjustPanning
- lsls r0, 24
- asrs r0, 24
- strh r0, [r5, 0x20]
- movs r0, 0x3F
- bl BattleAnimAdjustPanning
- lsls r0, 24
- asrs r0, 24
- strh r0, [r5, 0x22]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x24]
- movs r1, 0x22
- ldrsh r0, [r5, r1]
- movs r2, 0x20
- ldrsh r1, [r5, r2]
- subs r0, r1
- movs r1, 0x3
- bl __divsi3
- strh r0, [r5, 0x26]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- b _080AEE6A
- .align 2, 0
-_080AEDA4: .4byte gBattleAnimAttacker
-_080AEDA8: .4byte gBattleAnimTarget
-_080AEDAC: .4byte 0x0000ffff
-_080AEDB0:
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- lsls r0, 16
- cmp r0, 0
- ble _080AEDE0
- movs r0, 0
- strh r0, [r5, 0xA]
- adds r0, r5, 0
- adds r1, r2, 0
- bl sub_80AEE74
- lsls r0, 24
- cmp r0, 0
- beq _080AEDE0
- movs r1, 0xC
- ldrsh r0, [r5, r1]
- cmp r0, 0x5
- bne _080AEDDA
- movs r0, 0x3
- b _080AEDDE
-_080AEDDA:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
-_080AEDDE:
- strh r0, [r5, 0x8]
-_080AEDE0:
- ldrh r1, [r5, 0x1E]
- movs r2, 0x1E
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _080AEE6C
- b _080AEE62
-_080AEDEC:
- ldrh r1, [r5, 0x1E]
- movs r2, 0x1E
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _080AEDFA
- subs r0, r1, 0x1
- strh r0, [r5, 0x1E]
-_080AEDFA:
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- movs r3, 0
- strh r0, [r5, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _080AEE6C
- strh r3, [r5, 0xA]
- ldrh r1, [r5, 0xC]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _080AEE26
- movs r0, 0x4
- strh r0, [r5, 0x16]
- movs r0, 0x44
- strh r0, [r5, 0x18]
- strh r3, [r5, 0x10]
- strh r2, [r5, 0x12]
- b _080AEE36
-_080AEE26:
- movs r0, 0x44
- strh r0, [r5, 0x16]
- movs r0, 0x4
- strh r0, [r5, 0x18]
- movs r0, 0x7
- strh r0, [r5, 0x10]
- ldr r0, _080AEE44 @ =0x0000ffff
- strh r0, [r5, 0x12]
-_080AEE36:
- movs r1, 0x1E
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _080AEE68
- movs r0, 0x4
- b _080AEE6A
- .align 2, 0
-_080AEE44: .4byte 0x0000ffff
-_080AEE48:
- movs r1, 0xE
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080AEE6C
- adds r0, r2, 0
- bl DestroyAnimVisualTask
- b _080AEE6C
-_080AEE58:
- ldrh r1, [r5, 0x1E]
- movs r2, 0x1E
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _080AEE68
-_080AEE62:
- subs r0, r1, 0x1
- strh r0, [r5, 0x1E]
- b _080AEE6C
-_080AEE68:
- movs r0, 0x1
-_080AEE6A:
- strh r0, [r5, 0x8]
-_080AEE6C:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80AECE0
-
- thumb_func_start sub_80AEE74
-sub_80AEE74: @ 80AEE74
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, _080AEF3C @ =gUnknown_83E62A8
- movs r2, 0x14
- ldrsh r1, [r4, r2]
- movs r3, 0x16
- ldrsh r2, [r4, r3]
- movs r3, 0x23
- bl CreateSprite
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _080AEEE0
- ldr r1, _080AEF40 @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r3, r0, r1
- ldrh r2, [r3, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- ldrh r6, [r4, 0x10]
- adds r1, r6
- ldr r6, _080AEF44 @ =0x000003ff
- adds r0, r6, 0
- ands r1, r0
- ldr r0, _080AEF48 @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, 0x4]
- ldrh r0, [r4, 0x12]
- ldrh r1, [r4, 0x10]
- adds r0, r1
- strh r0, [r4, 0x10]
- lsls r0, 16
- cmp r0, 0
- bge _080AEEC8
- movs r0, 0x7
- strh r0, [r4, 0x10]
-_080AEEC8:
- movs r2, 0x10
- ldrsh r0, [r4, r2]
- cmp r0, 0x7
- ble _080AEED4
- movs r0, 0
- strh r0, [r4, 0x10]
-_080AEED4:
- strh r5, [r3, 0x3A]
- movs r0, 0x3
- strh r0, [r3, 0x3C]
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
-_080AEEE0:
- movs r3, 0x10
- ldrsh r0, [r4, r3]
- cmp r0, 0
- bne _080AEF02
- movs r5, 0x12
- ldrsh r0, [r4, r5]
- cmp r0, 0
- ble _080AEF02
- ldrh r1, [r4, 0x26]
- ldrh r6, [r4, 0x24]
- adds r1, r6
- strh r1, [r4, 0x24]
- lsls r1, 24
- asrs r1, 24
- movs r0, 0x6F
- bl PlaySE12WithPanning
-_080AEF02:
- movs r0, 0x12
- ldrsh r3, [r4, r0]
- ldrh r2, [r4, 0x16]
- cmp r3, 0
- bge _080AEF18
- lsls r0, r2, 16
- asrs r0, 16
- movs r5, 0x18
- ldrsh r1, [r4, r5]
- cmp r0, r1
- ble _080AEF28
-_080AEF18:
- cmp r3, 0
- ble _080AEF4C
- lsls r0, r2, 16
- asrs r0, 16
- movs r6, 0x18
- ldrsh r1, [r4, r6]
- cmp r0, r1
- blt _080AEF4C
-_080AEF28:
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- ldrh r0, [r4, 0x1A]
- ldrh r1, [r4, 0x14]
- adds r0, r1
- strh r0, [r4, 0x14]
- movs r0, 0x1
- b _080AEF58
- .align 2, 0
-_080AEF3C: .4byte gUnknown_83E62A8
-_080AEF40: .4byte gSprites
-_080AEF44: .4byte 0x000003ff
-_080AEF48: .4byte 0xfffffc00
-_080AEF4C:
- movs r3, 0x12
- ldrsh r0, [r4, r3]
- lsls r0, 3
- adds r0, r2, r0
- strh r0, [r4, 0x16]
- movs r0, 0
-_080AEF58:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80AEE74
-
- thumb_func_start sub_80AEF60
-sub_80AEF60: @ 80AEF60
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xC
- ble _080AEF96
- ldr r3, _080AEF9C @ =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
-_080AEF96:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AEF9C: .4byte gTasks
- thumb_func_end sub_80AEF60
-
- thumb_func_start sub_80AEFA0
-sub_80AEFA0: @ 80AEFA0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _080AEFC4 @ =gTasks
- adds r5, r0, r1
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- beq _080AF01C
- cmp r0, 0x1
- bgt _080AEFC8
- cmp r0, 0
- beq _080AEFCE
- b _080AF052
- .align 2, 0
-_080AEFC4: .4byte gTasks
-_080AEFC8:
- cmp r0, 0x2
- beq _080AF044
- b _080AF052
-_080AEFCE:
- ldr r0, _080AF018 @ =gBattleAnimTarget
- ldrb r0, [r0]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x20
- strh r0, [r5, 0x26]
- strh r0, [r5, 0x24]
- cmp r0, 0x10
- ble _080AEFF8
- adds r2, r0, 0
-_080AEFE8:
- adds r1, r2, 0
- subs r1, 0x20
- adds r2, r1, 0
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, 0x10
- bgt _080AEFE8
- strh r1, [r5, 0x24]
-_080AEFF8:
- ldr r4, _080AF018 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldrb r0, [r4]
- bl GetBattlerSpriteSubpriority
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x2
- strh r0, [r5, 0x20]
- b _080AF03C
- .align 2, 0
-_080AF018: .4byte gBattleAnimTarget
-_080AF01C:
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080AF052
- movs r0, 0
- strh r0, [r5, 0xA]
- adds r0, r5, 0
- adds r1, r2, 0
- bl sub_80AF058
- lsls r0, 24
- cmp r0, 0
- beq _080AF052
-_080AF03C:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- b _080AF052
-_080AF044:
- movs r1, 0x1C
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080AF052
- adds r0, r2, 0
- bl DestroyAnimVisualTask
-_080AF052:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80AEFA0
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/fighting.s b/asm/fighting.s
deleted file mode 100644
index 89168ced6..000000000
--- a/asm/fighting.s
+++ /dev/null
@@ -1,1746 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start unc_080B08A0
-unc_080B08A0: @ 80B08A0
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _080B08D0 @ =gBattleAnimArgs
- movs r0, 0
- ldrsh r1, [r5, r0]
- adds r0, r4, 0
- bl SetAnimSpriteInitialXOffset
- ldrh r0, [r5, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
- movs r0, 0xF
- strh r0, [r4, 0x2E]
- ldr r0, _080B08D4 @ =WaitAnimForDuration
- str r0, [r4, 0x1C]
- ldr r1, _080B08D8 @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B08D0: .4byte gBattleAnimArgs
-_080B08D4: .4byte WaitAnimForDuration
-_080B08D8: .4byte DestroyAnimSprite
- thumb_func_end unc_080B08A0
-
- thumb_func_start sub_80B08DC
-sub_80B08DC: @ 80B08DC
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, _080B0920 @ =gBattleAnimArgs
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- bne _080B0904
- ldr r0, _080B0924 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080B0904
- ldrh r0, [r4, 0x2]
- negs r0, r0
- strh r0, [r4, 0x2]
- ldrh r0, [r4, 0x6]
- negs r0, r0
- strh r0, [r4, 0x6]
-_080B0904:
- ldr r4, _080B0920 @ =gBattleAnimArgs
- ldrb r1, [r4, 0xC]
- adds r0, r5, 0
- bl StartSpriteAnim
- movs r0, 0
- strh r0, [r4, 0xC]
- adds r0, r5, 0
- bl sub_8075F0C
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0920: .4byte gBattleAnimArgs
-_080B0924: .4byte gBattleAnimAttacker
- thumb_func_end sub_80B08DC
-
- thumb_func_start sub_80B0928
-sub_80B0928: @ 80B0928
- push {r4,lr}
- adds r4, r0, 0
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080B0944
- ldr r0, _080B0950 @ =gBattleAnimArgs
- ldrh r1, [r0, 0x2]
- negs r1, r1
- strh r1, [r0, 0x2]
- ldrh r1, [r0, 0x6]
- negs r1, r1
- strh r1, [r0, 0x6]
-_080B0944:
- adds r0, r4, 0
- bl sub_80B08DC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0950: .4byte gBattleAnimArgs
- thumb_func_end sub_80B0928
-
- thumb_func_start sub_80B0954
-sub_80B0954: @ 80B0954
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, _080B0974 @ =gBattleAnimArgs
- ldrb r1, [r4, 0x8]
- bl StartSpriteAnim
- movs r1, 0x6
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B0978
- adds r0, r5, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
- b _080B0980
- .align 2, 0
-_080B0974: .4byte gBattleAnimArgs
-_080B0978:
- adds r0, r5, 0
- movs r1, 0x1
- bl InitSpritePosToAnimTarget
-_080B0980:
- ldr r0, _080B0998 @ =gBattleAnimArgs
- ldrh r0, [r0, 0x4]
- strh r0, [r5, 0x2E]
- ldr r0, _080B099C @ =WaitAnimForDuration
- str r0, [r5, 0x1C]
- ldr r1, _080B09A0 @ =DestroyAnimSprite
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0998: .4byte gBattleAnimArgs
-_080B099C: .4byte WaitAnimForDuration
-_080B09A0: .4byte DestroyAnimSprite
- thumb_func_end sub_80B0954
-
- thumb_func_start sub_80B09A4
-sub_80B09A4: @ 80B09A4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r5, r0, 0
- ldr r0, _080B09C0 @ =gBattleAnimArgs
- movs r2, 0
- ldrsh r1, [r0, r2]
- mov r9, r0
- cmp r1, 0
- bne _080B09C8
- ldr r0, _080B09C4 @ =gBattleAnimAttacker
- b _080B09CA
- .align 2, 0
-_080B09C0: .4byte gBattleAnimArgs
-_080B09C4: .4byte gBattleAnimAttacker
-_080B09C8:
- ldr r0, _080B0B10 @ =gBattleAnimTarget
-_080B09CA:
- ldrb r0, [r0]
- mov r8, r0
- mov r4, r9
- movs r3, 0x4
- ldrsh r0, [r4, r3]
- cmp r0, 0
- bge _080B09E8
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x5
- bl __umodsi3
- strh r0, [r4, 0x4]
-_080B09E8:
- ldrb r1, [r4, 0x4]
- adds r0, r5, 0
- bl StartSpriteAnim
- mov r0, r8
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- mov r0, r8
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- mov r0, r8
- movs r1, 0x1
- bl GetBattlerSpriteCoordAttr
- lsls r0, 16
- asrs r1, r0, 16
- lsrs r0, 31
- adds r1, r0
- lsls r1, 15
- lsrs r6, r1, 16
- mov r0, r8
- movs r1, 0
- bl GetBattlerSpriteCoordAttr
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0
- bge _080B0A32
- adds r0, 0x3
-_080B0A32:
- lsls r4, r0, 14
- lsrs r4, 16
- bl Random
- lsls r0, 16
- lsrs r0, 16
- lsls r1, r6, 16
- asrs r1, 16
- bl __modsi3
- lsls r0, 16
- lsrs r6, r0, 16
- bl Random
- lsls r0, 16
- lsrs r0, 16
- lsls r4, 16
- asrs r4, 16
- adds r1, r4, 0
- bl __modsi3
- lsls r0, 16
- lsrs r4, r0, 16
- bl Random
- movs r7, 0x1
- adds r1, r7, 0
- ands r1, r0
- cmp r1, 0
- beq _080B0A74
- lsls r0, r6, 16
- negs r0, r0
- lsrs r6, r0, 16
-_080B0A74:
- bl Random
- adds r1, r7, 0
- ands r1, r0
- cmp r1, 0
- beq _080B0A86
- lsls r0, r4, 16
- negs r0, r0
- lsrs r4, r0, 16
-_080B0A86:
- ldr r0, _080B0B14 @ =gBattlerPositions
- add r0, r8
- ldrb r1, [r0]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- bne _080B0A9C
- lsls r0, r4, 16
- ldr r1, _080B0B18 @ =0xfff00000
- adds r0, r1
- lsrs r4, r0, 16
-_080B0A9C:
- lsls r0, r6, 16
- asrs r0, 16
- ldrh r2, [r5, 0x20]
- adds r0, r2
- strh r0, [r5, 0x20]
- lsls r0, r4, 16
- asrs r0, 16
- ldrh r3, [r5, 0x22]
- adds r0, r3
- strh r0, [r5, 0x22]
- mov r1, r9
- ldrh r0, [r1, 0x2]
- strh r0, [r5, 0x2E]
- ldr r0, _080B0B1C @ =gBasicHitSplatSpriteTemplate
- movs r2, 0x20
- ldrsh r1, [r5, r2]
- movs r3, 0x22
- ldrsh r2, [r5, r3]
- adds r3, r5, 0
- adds r3, 0x43
- ldrb r3, [r3]
- adds r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x3C]
- cmp r0, 0x40
- beq _080B0B00
- movs r0, 0x3C
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _080B0B20 @ =gSprites
- adds r0, r4
- movs r1, 0
- bl StartSpriteAffineAnim
- movs r2, 0x3C
- ldrsh r1, [r5, r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, _080B0B24 @ =SpriteCallbackDummy
- str r1, [r0]
-_080B0B00:
- ldr r0, _080B0B28 @ =sub_80B0B2C
- str r0, [r5, 0x1C]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0B10: .4byte gBattleAnimTarget
-_080B0B14: .4byte gBattlerPositions
-_080B0B18: .4byte 0xfff00000
-_080B0B1C: .4byte gBasicHitSplatSpriteTemplate
-_080B0B20: .4byte gSprites
-_080B0B24: .4byte SpriteCallbackDummy
-_080B0B28: .4byte sub_80B0B2C
- thumb_func_end sub_80B09A4
-
- thumb_func_start sub_80B0B2C
-sub_80B0B2C: @ 80B0B2C
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r1, [r5, 0x2E]
- movs r2, 0x2E
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _080B0B74
- movs r1, 0x3C
- ldrsh r0, [r5, r1]
- cmp r0, 0x40
- beq _080B0B68
- ldr r4, _080B0B70 @ =gSprites
- adds r1, r0, 0
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- movs r0, 0x3C
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
-_080B0B68:
- adds r0, r5, 0
- bl DestroyAnimSprite
- b _080B0B78
- .align 2, 0
-_080B0B70: .4byte gSprites
-_080B0B74:
- subs r0, r1, 0x1
- strh r0, [r5, 0x2E]
-_080B0B78:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80B0B2C
-
- thumb_func_start sub_80B0B80
-sub_80B0B80: @ 80B0B80
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl InitSpritePosToAnimTarget
- movs r0, 0x1E
- strh r0, [r4, 0x2E]
- ldr r0, _080B0BA0 @ =gBattleAnimArgs
- movs r1, 0x4
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080B0BA4
- ldrh r0, [r4, 0x20]
- subs r0, 0x14
- strh r0, [r4, 0x32]
- b _080B0BB6
- .align 2, 0
-_080B0BA0: .4byte gBattleAnimArgs
-_080B0BA4:
- ldrh r0, [r4, 0x20]
- adds r0, 0x14
- strh r0, [r4, 0x32]
- adds r2, r4, 0
- adds r2, 0x3F
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
-_080B0BB6:
- ldrh r0, [r4, 0x22]
- subs r0, 0x14
- strh r0, [r4, 0x36]
- ldr r0, _080B0BD0 @ =StartAnimLinearTranslation
- str r0, [r4, 0x1C]
- ldr r1, _080B0BD4 @ =sub_80B0BD8
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0BD0: .4byte StartAnimLinearTranslation
-_080B0BD4: .4byte sub_80B0BD8
- thumb_func_end sub_80B0B80
-
- thumb_func_start sub_80B0BD8
-sub_80B0BD8: @ 80B0BD8
- push {r4-r6,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0x38]
- adds r0, 0x1
- movs r6, 0
- strh r0, [r5, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB
- bne _080B0C18
- ldrh r2, [r5, 0x20]
- ldrh r4, [r5, 0x24]
- subs r0, r2, r4
- strh r0, [r5, 0x32]
- ldrh r1, [r5, 0x22]
- ldrh r3, [r5, 0x26]
- subs r0, r1, r3
- strh r0, [r5, 0x36]
- movs r0, 0x8
- strh r0, [r5, 0x2E]
- adds r2, r4
- strh r2, [r5, 0x20]
- adds r1, r3
- strh r1, [r5, 0x22]
- strh r6, [r5, 0x26]
- strh r6, [r5, 0x24]
- ldr r0, _080B0C20 @ =StartAnimLinearTranslation
- str r0, [r5, 0x1C]
- ldr r1, _080B0C24 @ =DestroyAnimSprite
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
-_080B0C18:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0C20: .4byte StartAnimLinearTranslation
-_080B0C24: .4byte DestroyAnimSprite
- thumb_func_end sub_80B0BD8
-
- thumb_func_start sub_80B0C28
-sub_80B0C28: @ 80B0C28
- push {r4-r6,lr}
- adds r6, r0, 0
- ldr r0, _080B0CA4 @ =gBattleAnimAttacker
- ldrb r1, [r0]
- movs r0, 0x2
- ldr r2, _080B0CA8 @ =gBattleAnimTarget
- eors r0, r1
- ldrb r1, [r2]
- cmp r0, r1
- bne _080B0C54
- ldrb r0, [r2]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _080B0C54
- ldr r1, _080B0CAC @ =gBattleAnimArgs
- movs r2, 0
- ldrsh r0, [r1, r2]
- negs r0, r0
- strh r0, [r1]
-_080B0C54:
- adds r0, r6, 0
- movs r1, 0x1
- bl InitSpritePosToAnimTarget
- ldr r0, _080B0CA4 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080B0C72
- ldr r1, _080B0CAC @ =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- negs r0, r0
- strh r0, [r1, 0x4]
-_080B0C72:
- ldr r4, _080B0CAC @ =gBattleAnimArgs
- ldrh r0, [r4, 0x6]
- movs r5, 0
- strh r0, [r6, 0x2E]
- ldrh r0, [r6, 0x20]
- strh r0, [r6, 0x30]
- ldrh r1, [r4, 0x4]
- adds r0, r1
- strh r0, [r6, 0x32]
- ldrh r0, [r6, 0x22]
- strh r0, [r6, 0x34]
- strh r0, [r6, 0x36]
- adds r0, r6, 0
- bl InitAnimLinearTranslation
- ldrh r0, [r4, 0xA]
- strh r0, [r6, 0x38]
- ldrh r0, [r4, 0x8]
- strh r0, [r6, 0x3A]
- strh r5, [r6, 0x3C]
- ldr r0, _080B0CB0 @ =sub_80B0CB4
- str r0, [r6, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0CA4: .4byte gBattleAnimAttacker
-_080B0CA8: .4byte gBattleAnimTarget
-_080B0CAC: .4byte gBattleAnimArgs
-_080B0CB0: .4byte sub_80B0CB4
- thumb_func_end sub_80B0C28
-
- thumb_func_start sub_80B0CB4
-sub_80B0CB4: @ 80B0CB4
- push {r4,lr}
- adds r4, r0, 0
- bl AnimTranslateLinear
- lsls r0, 24
- cmp r0, 0
- bne _080B0CE0
- ldrh r0, [r4, 0x3C]
- lsls r0, 16
- asrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- ldrh r2, [r4, 0x3C]
- adds r0, r2
- strh r0, [r4, 0x3C]
- b _080B0CE6
-_080B0CE0:
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080B0CE6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B0CB4
-
- thumb_func_start sub_80B0CEC
-sub_80B0CEC: @ 80B0CEC
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl InitSpritePosToAnimTarget
- ldr r5, _080B0D18 @ =gBattleAnimArgs
- ldrb r1, [r5, 0x4]
- adds r0, r4, 0
- bl StartSpriteAnim
- ldrh r0, [r5, 0x6]
- strh r0, [r4, 0x2E]
- ldr r0, _080B0D1C @ =WaitAnimForDuration
- str r0, [r4, 0x1C]
- ldr r1, _080B0D20 @ =sub_80B0D24
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0D18: .4byte gBattleAnimArgs
-_080B0D1C: .4byte WaitAnimForDuration
-_080B0D20: .4byte sub_80B0D24
- thumb_func_end sub_80B0CEC
-
- thumb_func_start sub_80B0D24
-sub_80B0D24: @ 80B0D24
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0
- bl StartSpriteAffineAnim
- adds r2, r4, 0
- adds r2, 0x2C
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x14
- strh r0, [r4, 0x2E]
- ldr r0, _080B0D50 @ =WaitAnimForDuration
- str r0, [r4, 0x1C]
- ldr r1, _080B0D54 @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0D50: .4byte WaitAnimForDuration
-_080B0D54: .4byte DestroyAnimSprite
- thumb_func_end sub_80B0D24
-
- thumb_func_start sub_80B0D58
-sub_80B0D58: @ 80B0D58
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl InitSpritePosToAnimTarget
- ldr r0, _080B0D74 @ =gBattleAnimArgs
- ldrh r0, [r0, 0x4]
- strh r0, [r4, 0x2E]
- ldr r0, _080B0D78 @ =sub_80B0D7C
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0D74: .4byte gBattleAnimArgs
-_080B0D78: .4byte sub_80B0D7C
- thumb_func_end sub_80B0D58
-
- thumb_func_start sub_80B0D7C
-sub_80B0D7C: @ 80B0D7C
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0x2E]
- subs r0, 0x1
- strh r0, [r5, 0x2E]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _080B0DC0
- movs r0, 0x6
- strh r0, [r5, 0x2E]
- ldr r4, _080B0DC8 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x36]
- ldr r0, _080B0DCC @ =StartAnimLinearTranslation
- str r0, [r5, 0x1C]
- ldr r1, _080B0DD0 @ =sub_80B0DD4
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
-_080B0DC0:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0DC8: .4byte gBattleAnimTarget
-_080B0DCC: .4byte StartAnimLinearTranslation
-_080B0DD0: .4byte sub_80B0DD4
- thumb_func_end sub_80B0D7C
-
- thumb_func_start sub_80B0DD4
-sub_80B0DD4: @ 80B0DD4
- push {lr}
- movs r1, 0xF
- strh r1, [r0, 0x2E]
- ldr r1, _080B0DE8 @ =WaitAnimForDuration
- str r1, [r0, 0x1C]
- ldr r1, _080B0DEC @ =DestroyAnimSprite
- bl StoreSpriteCallbackInData6
- pop {r0}
- bx r0
- .align 2, 0
-_080B0DE8: .4byte WaitAnimForDuration
-_080B0DEC: .4byte DestroyAnimSprite
- thumb_func_end sub_80B0DD4
-
- thumb_func_start sub_80B0DF0
-sub_80B0DF0: @ 80B0DF0
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B0E1C
- adds r0, r4, 0
- movs r1, 0x1
- bl InitSpritePosToAnimTarget
- ldr r1, _080B0E18 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- strh r0, [r4, 0x30]
- ldrh r0, [r1, 0x6]
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _080B0E78
- .align 2, 0
-_080B0E18: .4byte gBattleAnimArgs
-_080B0E1C:
- ldrh r0, [r4, 0x30]
- ldrh r2, [r4, 0x36]
- adds r0, r2
- strh r0, [r4, 0x36]
- lsls r0, 16
- asrs r0, 24
- strh r0, [r4, 0x24]
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- movs r2, 0x32
- ldrsh r1, [r4, r2]
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x34]
- adds r0, 0x3
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x34]
- cmp r0, 0x64
- ble _080B0E6A
- movs r0, 0x34
- ldrsh r1, [r4, r0]
- lsrs r0, r1, 31
- adds r0, r1, r0
- asrs r0, 1
- lsls r0, 1
- subs r1, r0
- adds r3, r4, 0
- adds r3, 0x3E
- movs r0, 0x1
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
-_080B0E6A:
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- cmp r0, 0x78
- ble _080B0E78
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080B0E78:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B0DF0
-
- thumb_func_start sub_80B0E80
-sub_80B0E80: @ 80B0E80
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _080B0E94 @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080B0E9C
- ldr r4, _080B0E98 @ =gBattleAnimAttacker
- b _080B0E9E
- .align 2, 0
-_080B0E94: .4byte gBattleAnimArgs
-_080B0E98: .4byte gBattleAnimAttacker
-_080B0E9C:
- ldr r4, _080B0EE4 @ =gBattleAnimTarget
-_080B0E9E:
- ldrb r0, [r4]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r1, _080B0EE8 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x2]
- ldrh r2, [r5, 0x20]
- adds r0, r2
- movs r2, 0
- strh r0, [r5, 0x20]
- ldrh r0, [r1, 0x4]
- ldrh r3, [r5, 0x22]
- adds r0, r3
- strh r0, [r5, 0x22]
- strh r2, [r5, 0x2E]
- ldrh r0, [r1, 0x6]
- strh r0, [r5, 0x30]
- ldrh r0, [r1, 0x8]
- strh r0, [r5, 0x32]
- strh r2, [r5, 0x34]
- ldr r0, _080B0EEC @ =sub_80B0EF0
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0EE4: .4byte gBattleAnimTarget
-_080B0EE8: .4byte gBattleAnimArgs
-_080B0EEC: .4byte sub_80B0EF0
- thumb_func_end sub_80B0E80
-
- thumb_func_start sub_80B0EF0
-sub_80B0EF0: @ 80B0EF0
- push {lr}
- adds r1, r0, 0
- movs r0, 0x2E
- ldrsh r2, [r1, r0]
- cmp r2, 0
- beq _080B0F02
- cmp r2, 0x1
- beq _080B0F26
- b _080B0F60
-_080B0F02:
- ldrh r0, [r1, 0x30]
- subs r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _080B0F60
- movs r2, 0x32
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _080B0F1E
- adds r0, r1, 0
- bl DestroyAnimSprite
- b _080B0F60
-_080B0F1E:
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
- b _080B0F60
-_080B0F26:
- ldrh r0, [r1, 0x30]
- adds r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080B0F4E
- movs r0, 0
- strh r0, [r1, 0x30]
- ldrh r0, [r1, 0x34]
- adds r0, 0x1
- strh r0, [r1, 0x34]
- ands r0, r2
- lsls r0, 16
- cmp r0, 0
- beq _080B0F4A
- movs r0, 0x2
- b _080B0F4C
-_080B0F4A:
- ldr r0, _080B0F64 @ =0x0000fffe
-_080B0F4C:
- strh r0, [r1, 0x24]
-_080B0F4E:
- ldrh r0, [r1, 0x32]
- subs r0, 0x1
- strh r0, [r1, 0x32]
- lsls r0, 16
- cmp r0, 0
- bne _080B0F60
- adds r0, r1, 0
- bl DestroyAnimSprite
-_080B0F60:
- pop {r0}
- bx r0
- .align 2, 0
-_080B0F64: .4byte 0x0000fffe
- thumb_func_end sub_80B0EF0
-
- thumb_func_start sub_80B0F68
-sub_80B0F68: @ 80B0F68
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r6, _080B0F8C @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _080B0F94
- ldr r4, _080B0F90 @ =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r2, [r6, 0x4]
- adds r0, r2
- b _080B0FA6
- .align 2, 0
-_080B0F8C: .4byte gBattleAnimArgs
-_080B0F90: .4byte gBattleAnimAttacker
-_080B0F94:
- ldr r4, _080B0FF0 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x4]
- adds r0, r1
-_080B0FA6:
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r6, [r6, 0x6]
- adds r0, r6
- strh r0, [r5, 0x22]
- ldrh r2, [r5, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- ldr r3, _080B0FF4 @ =gBattleAnimArgs
- movs r4, 0x2
- ldrsh r0, [r3, r4]
- lsls r0, 4
- adds r1, r0
- ldr r4, _080B0FF8 @ =0x000003ff
- adds r0, r4, 0
- ands r1, r0
- ldr r0, _080B0FFC @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x4]
- movs r1, 0
- movs r0, 0
- strh r0, [r5, 0x2E]
- movs r2, 0x2
- ldrsh r0, [r3, r2]
- cmp r0, 0x1
- beq _080B1014
- cmp r0, 0x1
- bgt _080B1000
- cmp r0, 0
- beq _080B100A
- b _080B103A
- .align 2, 0
-_080B0FF0: .4byte gBattleAnimTarget
-_080B0FF4: .4byte gBattleAnimArgs
-_080B0FF8: .4byte 0x000003ff
-_080B0FFC: .4byte 0xfffffc00
-_080B1000:
- cmp r0, 0x2
- beq _080B1024
- cmp r0, 0x3
- beq _080B1034
- b _080B103A
-_080B100A:
- ldr r0, _080B1010 @ =0x0000fffd
- b _080B1034
- .align 2, 0
-_080B1010: .4byte 0x0000fffd
-_080B1014:
- movs r0, 0x3
- strh r0, [r5, 0x3A]
- ldr r0, _080B1020 @ =0x0000fffd
- strh r0, [r5, 0x3C]
- b _080B1042
- .align 2, 0
-_080B1020: .4byte 0x0000fffd
-_080B1024:
- ldr r0, _080B1030 @ =0x0000fffd
- strh r0, [r5, 0x3A]
- movs r0, 0x3
- strh r0, [r5, 0x3C]
- b _080B1042
- .align 2, 0
-_080B1030: .4byte 0x0000fffd
-_080B1034:
- strh r0, [r5, 0x3A]
- strh r0, [r5, 0x3C]
- b _080B1042
-_080B103A:
- adds r0, r5, 0
- bl DestroyAnimSprite
- b _080B1046
-_080B1042:
- ldr r0, _080B104C @ =sub_80B1050
- str r0, [r5, 0x1C]
-_080B1046:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B104C: .4byte sub_80B1050
- thumb_func_end sub_80B0F68
-
- thumb_func_start sub_80B1050
-sub_80B1050: @ 80B1050
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x3A]
- ldrh r2, [r1, 0x20]
- adds r0, r2
- strh r0, [r1, 0x20]
- ldrh r0, [r1, 0x3C]
- ldrh r2, [r1, 0x22]
- adds r0, r2
- strh r0, [r1, 0x22]
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x28
- ble _080B1078
- adds r0, r1, 0
- bl DestroyAnimSprite
-_080B1078:
- pop {r0}
- bx r0
- thumb_func_end sub_80B1050
-
- thumb_func_start sub_80B107C
-sub_80B107C: @ 80B107C
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _080B10C8 @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080B10D8
- ldr r4, _080B10CC @ =gBattlerAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r0, _080B10D0 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSpriteBGPriority
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- ldr r0, _080B10D4 @ =gBattleAnimTarget
- b _080B10F4
- .align 2, 0
-_080B10C8: .4byte gBattleAnimArgs
-_080B10CC: .4byte gBattlerAttacker
-_080B10D0: .4byte gBattleAnimAttacker
-_080B10D4: .4byte gBattleAnimTarget
-_080B10D8:
- ldr r0, _080B1110 @ =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSpriteBGPriority
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- ldr r0, _080B1114 @ =gBattleAnimAttacker
-_080B10F4:
- ldrb r0, [r0]
- strh r0, [r5, 0x3C]
- movs r0, 0
- strh r0, [r5, 0x2E]
- movs r0, 0xC
- strh r0, [r5, 0x30]
- movs r0, 0x8
- strh r0, [r5, 0x32]
- ldr r0, _080B1118 @ =sub_80B111C
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B1110: .4byte gBattleAnimTarget
-_080B1114: .4byte gBattleAnimAttacker
-_080B1118: .4byte sub_80B111C
- thumb_func_end sub_80B107C
-
- thumb_func_start sub_80B111C
-sub_80B111C: @ 80B111C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB4
- bne _080B1178
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x3C]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- ldrh r0, [r4, 0x3C]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x36]
- adds r0, r4, 0
- bl InitAnimLinearTranslation
- ldr r1, _080B1180 @ =DestroySpriteAndMatrix
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- ldr r0, _080B1184 @ =sub_807563C
- str r0, [r4, 0x1C]
-_080B1178:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B1180: .4byte DestroySpriteAndMatrix
-_080B1184: .4byte sub_807563C
- thumb_func_end sub_80B111C
-
- thumb_func_start sub_80B1188
-sub_80B1188: @ 80B1188
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, _080B11D4 @ =gBattleAnimArgs
- ldrh r0, [r4]
- strh r0, [r5, 0x20]
- movs r2, 0x78
- strh r2, [r5, 0x22]
- ldrh r0, [r4, 0x6]
- strh r0, [r5, 0x2E]
- adds r0, r5, 0
- adds r0, 0x36
- adds r1, r5, 0
- adds r1, 0x38
- lsls r2, 8
- bl StorePointerInVars
- ldrh r0, [r4, 0x2]
- strh r0, [r5, 0x3A]
- ldrh r2, [r5, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- movs r3, 0x4
- ldrsh r0, [r4, r3]
- lsls r0, 2
- adds r1, r0
- ldr r3, _080B11D8 @ =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldr r0, _080B11DC @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x4]
- ldr r0, _080B11E0 @ =sub_80B11E4
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B11D4: .4byte gBattleAnimArgs
-_080B11D8: .4byte 0x000003ff
-_080B11DC: .4byte 0xfffffc00
-_080B11E0: .4byte sub_80B11E4
- thumb_func_end sub_80B1188
-
- thumb_func_start sub_80B11E4
-sub_80B11E4: @ 80B11E4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r7, r1]
- cmp r0, 0
- beq _080B1236
- movs r2, 0x36
- ldrsh r0, [r7, r2]
- movs r2, 0x38
- ldrsh r1, [r7, r2]
- bl LoadPointerFromVars
- adds r4, r0, 0
- movs r1, 0x3A
- ldrsh r0, [r7, r1]
- subs r4, r0
- adds r0, r7, 0
- adds r0, 0x36
- adds r1, r7, 0
- adds r1, 0x38
- adds r2, r4, 0
- bl StorePointerInVars
- asrs r4, 8
- strh r4, [r7, 0x22]
- lsls r4, 16
- asrs r4, 16
- movs r0, 0x8
- negs r0, r0
- cmp r4, r0
- bge _080B122E
- adds r0, r7, 0
- bl DestroyAnimSprite
- b _080B128C
-_080B122E:
- ldrh r0, [r7, 0x2E]
- subs r0, 0x1
- strh r0, [r7, 0x2E]
- b _080B128C
-_080B1236:
- ldr r4, _080B1298 @ =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r2, _080B129C @ =gBattleAnimTarget
- mov r8, r2
- ldrb r0, [r2]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- mov r1, r8
- ldrb r0, [r1]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- subs r4, r6
- strh r4, [r7, 0x2E]
- lsrs r0, 24
- subs r0, r5
- strh r0, [r7, 0x30]
- ldrh r0, [r7, 0x20]
- lsls r0, 4
- strh r0, [r7, 0x32]
- ldrh r0, [r7, 0x22]
- lsls r0, 4
- strh r0, [r7, 0x34]
- ldr r0, _080B12A0 @ =sub_80B12A4
- str r0, [r7, 0x1C]
-_080B128C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B1298: .4byte gBattleAnimAttacker
-_080B129C: .4byte gBattleAnimTarget
-_080B12A0: .4byte sub_80B12A4
- thumb_func_end sub_80B11E4
-
- thumb_func_start sub_80B12A4
-sub_80B12A4: @ 80B12A4
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x2E]
- ldrh r1, [r2, 0x32]
- adds r0, r1
- strh r0, [r2, 0x32]
- ldrh r1, [r2, 0x30]
- ldrh r3, [r2, 0x34]
- adds r1, r3
- strh r1, [r2, 0x34]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r2, 0x20]
- lsls r1, 16
- asrs r3, r1, 20
- strh r3, [r2, 0x22]
- adds r0, 0x8
- lsls r0, 16
- movs r1, 0x80
- lsls r1, 17
- cmp r0, r1
- bhi _080B12DE
- adds r1, r3, 0
- movs r0, 0x8
- negs r0, r0
- cmp r1, r0
- blt _080B12DE
- cmp r1, 0x78
- ble _080B12E4
-_080B12DE:
- adds r0, r2, 0
- bl DestroyAnimSprite
-_080B12E4:
- pop {r0}
- bx r0
- thumb_func_end sub_80B12A4
-
- thumb_func_start sub_80B12E8
-sub_80B12E8: @ 80B12E8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _080B131C @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080B132C
- ldr r4, _080B1320 @ =gBattlerAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r0, _080B1324 @ =gBattleAnimTarget
- ldrb r4, [r0]
- ldr r0, _080B1328 @ =gBattleAnimAttacker
- b _080B1332
- .align 2, 0
-_080B131C: .4byte gBattleAnimArgs
-_080B1320: .4byte gBattlerAttacker
-_080B1324: .4byte gBattleAnimTarget
-_080B1328: .4byte gBattleAnimAttacker
-_080B132C:
- ldr r0, _080B1364 @ =gBattleAnimAttacker
- ldrb r4, [r0]
- ldr r0, _080B1368 @ =gBattleAnimTarget
-_080B1332:
- ldrb r0, [r0]
- bl GetBattlerSpriteBGPriority
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080B136C
- ldrb r2, [r5, 0x3]
- lsls r1, r2, 26
- lsrs r1, 27
- movs r0, 0x8
- orrs r1, r0
- lsls r1, 1
- subs r0, 0x47
- b _080B1386
- .align 2, 0
-_080B1364: .4byte gBattleAnimAttacker
-_080B1368: .4byte gBattleAnimTarget
-_080B136C:
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080B138C
- ldrb r2, [r5, 0x3]
- lsls r1, r2, 26
- lsrs r1, 27
- movs r0, 0x18
- orrs r1, r0
- lsls r1, 1
- subs r0, 0x57
-_080B1386:
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x3]
-_080B138C:
- movs r0, 0x10
- strh r0, [r5, 0x2E]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x30]
- adds r0, r4, 0
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x22]
- strh r0, [r5, 0x34]
- adds r0, r4, 0
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x36]
- adds r0, r5, 0
- bl InitAnimLinearTranslation
- ldr r1, _080B13CC @ =DestroyAnimSprite
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- ldr r0, _080B13D0 @ =sub_807563C
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B13CC: .4byte DestroyAnimSprite
-_080B13D0: .4byte sub_807563C
- thumb_func_end sub_80B12E8
-
- thumb_func_start sub_80B13D4
-sub_80B13D4: @ 80B13D4
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- movs r2, 0x36
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _080B13EA
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080B13EA:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B13D4
-
- thumb_func_start sub_80B13F8
-sub_80B13F8: @ 80B13F8
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r4, _080B1474 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r1, _080B1478 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x6]
- strh r0, [r5, 0x30]
- ldrh r0, [r1]
- strh r0, [r5, 0x32]
- ldrh r0, [r1, 0x2]
- strh r0, [r5, 0x34]
- ldrh r0, [r1, 0x4]
- strh r0, [r5, 0x36]
- ldr r0, _080B147C @ =gAnimMoveTurn
- ldrb r6, [r0]
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080B1442
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_080B1442:
- movs r0, 0x1
- ands r6, r0
- cmp r6, 0
- beq _080B1456
- ldrh r0, [r5, 0x32]
- negs r0, r0
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x30]
- adds r0, 0x1
- strh r0, [r5, 0x30]
-_080B1456:
- ldrh r1, [r5, 0x30]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl StartSpriteAnim
- ldrh r0, [r5, 0x32]
- strh r0, [r5, 0x24]
- ldrh r0, [r5, 0x34]
- strh r0, [r5, 0x26]
- ldr r0, _080B1480 @ =sub_80B13D4
- str r0, [r5, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B1474: .4byte gBattleAnimTarget
-_080B1478: .4byte gBattleAnimArgs
-_080B147C: .4byte gAnimMoveTurn
-_080B1480: .4byte sub_80B13D4
- thumb_func_end sub_80B13F8
-
- thumb_func_start sub_80B1484
-sub_80B1484: @ 80B1484
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080B149C @ =gBattleAnimArgs
- movs r1, 0x4
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080B14A0
- adds r0, r4, 0
- movs r1, 0
- bl InitSpritePosToAnimAttacker
- b _080B14A8
- .align 2, 0
-_080B149C: .4byte gBattleAnimArgs
-_080B14A0:
- adds r0, r4, 0
- movs r1, 0
- bl InitSpritePosToAnimTarget
-_080B14A8:
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080B14BC
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
- b _080B14D2
-_080B14BC:
- ldr r0, _080B14E4 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080B14D2
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
-_080B14D2:
- ldr r0, _080B14E8 @ =RunStoredCallbackWhenAnimEnds
- str r0, [r4, 0x1C]
- ldr r1, _080B14EC @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B14E4: .4byte gBattleAnimAttacker
-_080B14E8: .4byte RunStoredCallbackWhenAnimEnds
-_080B14EC: .4byte DestroyAnimSprite
- thumb_func_end sub_80B1484
-
- thumb_func_start sub_80B14F0
-sub_80B14F0: @ 80B14F0
- push {r4,lr}
- adds r4, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080B152A
- ldrh r0, [r4, 0x30]
- adds r0, 0x28
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x2
- bl Sin
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x28
- ble _080B152A
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080B152A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B14F0
-
- thumb_func_start sub_80B1530
-sub_80B1530: @ 80B1530
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _080B1560 @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _080B1568
- cmp r0, 0x1
- bgt _080B1582
- cmp r0, 0
- bne _080B1582
- movs r0, 0
- bl sub_8075458
- ldr r0, _080B1564 @ =gBattleAnimArgs
- ldrh r0, [r0]
- strh r0, [r4, 0x18]
- b _080B157A
- .align 2, 0
-_080B1560: .4byte gTasks
-_080B1564: .4byte gBattleAnimArgs
-_080B1568:
- ldrh r0, [r4, 0x18]
- subs r0, 0x1
- strh r0, [r4, 0x18]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _080B158E
-_080B157A:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080B158E
-_080B1582:
- movs r2, 0xA0
- lsls r2, 3
- adds r0, r2, 0
- ldrh r1, [r4, 0x1A]
- adds r0, r1
- strh r0, [r4, 0x1A]
-_080B158E:
- movs r2, 0xB0
- lsls r2, 4
- adds r0, r2, 0
- ldrh r1, [r4, 0x1C]
- adds r0, r1
- strh r0, [r4, 0x1C]
- ldr r0, _080B15BC @ =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080B15C4
- ldr r1, _080B15C0 @ =gBattle_BG3_X
- ldrh r0, [r4, 0x1A]
- lsls r0, 16
- asrs r0, 24
- ldrh r2, [r1]
- adds r0, r2
- strh r0, [r1]
- adds r7, r1, 0
- b _080B15D4
- .align 2, 0
-_080B15BC: .4byte gBattleAnimTarget
-_080B15C0: .4byte gBattle_BG3_X
-_080B15C4:
- ldr r2, _080B1614 @ =gBattle_BG3_X
- ldrh r1, [r4, 0x1A]
- lsls r1, 16
- asrs r1, 24
- ldrh r0, [r2]
- subs r0, r1
- strh r0, [r2]
- adds r7, r2, 0
-_080B15D4:
- ldr r3, _080B1618 @ =gBattle_BG3_Y
- ldrh r2, [r4, 0x1C]
- lsls r0, r2, 16
- asrs r0, 24
- ldrh r1, [r3]
- adds r0, r1
- strh r0, [r3]
- movs r0, 0xFF
- ldrb r1, [r4, 0x1A]
- movs r5, 0
- strh r1, [r4, 0x1A]
- ands r0, r2
- strh r0, [r4, 0x1C]
- ldr r0, _080B161C @ =gBattleAnimArgs
- movs r2, 0xE
- ldrsh r1, [r0, r2]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _080B160C
- strh r5, [r7]
- strh r5, [r3]
- movs r0, 0x1
- bl sub_8075458
- adds r0, r6, 0
- bl DestroyAnimVisualTask
-_080B160C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B1614: .4byte gBattle_BG3_X
-_080B1618: .4byte gBattle_BG3_Y
-_080B161C: .4byte gBattleAnimArgs
- thumb_func_end sub_80B1530
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/fire.s b/asm/fire.s
deleted file mode 100644
index efdfc8315..000000000
--- a/asm/fire.s
+++ /dev/null
@@ -1,2500 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80AC90C
-sub_80AC90C: @ 80AC90C
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080AC940 @ =gBattleAnimArgs
- ldrh r0, [r0]
- strh r0, [r4, 0x2E]
- movs r0, 0x3C
- strh r0, [r4, 0x30]
- movs r0, 0x9
- strh r0, [r4, 0x32]
- movs r0, 0x1E
- strh r0, [r4, 0x34]
- movs r0, 0xFE
- lsls r0, 8
- strh r0, [r4, 0x36]
- ldr r1, _080AC944 @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- ldr r1, _080AC948 @ =TranslateSpriteInGrowingCircleOverDuration
- str r1, [r4, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AC940: .4byte gBattleAnimArgs
-_080AC944: .4byte DestroyAnimSprite
-_080AC948: .4byte TranslateSpriteInGrowingCircleOverDuration
- thumb_func_end sub_80AC90C
-
- thumb_func_start sub_80AC94C
-sub_80AC94C: @ 80AC94C
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _080AC984 @ =gBattleAnimArgs
- movs r0, 0
- ldrsh r1, [r5, r0]
- adds r0, r4, 0
- bl SetAnimSpriteInitialXOffset
- ldrh r0, [r5, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
- ldrh r0, [r5, 0x8]
- strh r0, [r4, 0x2E]
- ldrh r0, [r5, 0x4]
- strh r0, [r4, 0x30]
- ldrh r0, [r5, 0x6]
- strh r0, [r4, 0x32]
- ldr r0, _080AC988 @ =TranslateSpriteLinearFixedPoint
- str r0, [r4, 0x1C]
- ldr r1, _080AC98C @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AC984: .4byte gBattleAnimArgs
-_080AC988: .4byte TranslateSpriteLinearFixedPoint
-_080AC98C: .4byte DestroyAnimSprite
- thumb_func_end sub_80AC94C
-
- thumb_func_start sub_80AC990
-sub_80AC990: @ 80AC990
- push {r4,lr}
- adds r4, r0, 0
- bl SetSpriteCoordsToAnimAttackerCoords
- ldr r0, _080AC9C4 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AC9CC
- ldr r2, _080AC9C8 @ =gBattleAnimArgs
- ldrh r0, [r4, 0x20]
- ldrh r1, [r2]
- subs r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r2, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
- ldrh r0, [r2, 0x8]
- negs r0, r0
- strh r0, [r4, 0x32]
- adds r1, r2, 0
- b _080AC9E2
- .align 2, 0
-_080AC9C4: .4byte gBattleAnimAttacker
-_080AC9C8: .4byte gBattleAnimArgs
-_080AC9CC:
- ldr r1, _080AC9F8 @ =gBattleAnimArgs
- ldrh r0, [r1]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r4, 0x20]
- ldrh r0, [r1, 0x2]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
- ldrh r0, [r1, 0x8]
- strh r0, [r4, 0x32]
-_080AC9E2:
- ldrh r0, [r1, 0x4]
- strh r0, [r4, 0x30]
- ldrh r0, [r1, 0x6]
- strh r0, [r4, 0x36]
- ldrh r0, [r1, 0xA]
- strh r0, [r4, 0x34]
- ldr r0, _080AC9FC @ =sub_80ACA6C
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AC9F8: .4byte gBattleAnimArgs
-_080AC9FC: .4byte sub_80ACA6C
- thumb_func_end sub_80AC990
-
- thumb_func_start sub_80ACA00
-sub_80ACA00: @ 80ACA00
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080ACA2C @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080ACA34
- ldr r2, _080ACA30 @ =gBattleAnimArgs
- ldrh r0, [r4, 0x20]
- ldrh r1, [r2]
- subs r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r2, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
- ldrh r0, [r2, 0x8]
- strh r0, [r4, 0x32]
- adds r1, r2, 0
- b _080ACA4C
- .align 2, 0
-_080ACA2C: .4byte gBattleAnimAttacker
-_080ACA30: .4byte gBattleAnimArgs
-_080ACA34:
- ldr r1, _080ACA64 @ =gBattleAnimArgs
- ldrh r0, [r1]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r4, 0x20]
- ldrh r0, [r1, 0x2]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
- ldrh r0, [r1, 0x8]
- negs r0, r0
- strh r0, [r4, 0x32]
-_080ACA4C:
- ldrh r0, [r1, 0x4]
- strh r0, [r4, 0x30]
- ldrh r0, [r1, 0x6]
- strh r0, [r4, 0x36]
- ldrh r0, [r1, 0xA]
- strh r0, [r4, 0x34]
- ldr r0, _080ACA68 @ =sub_80ACA6C
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080ACA64: .4byte gBattleAnimArgs
-_080ACA68: .4byte sub_80ACA6C
- thumb_func_end sub_80ACA00
-
- thumb_func_start sub_80ACA6C
-sub_80ACA6C: @ 80ACA6C
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
- lsls r0, 16
- asrs r0, 16
- movs r3, 0x36
- ldrsh r1, [r2, r3]
- cmp r0, r1
- bge _080ACA92
- ldrh r0, [r2, 0x32]
- ldrh r1, [r2, 0x24]
- adds r0, r1
- strh r0, [r2, 0x24]
- ldrh r0, [r2, 0x34]
- ldrh r3, [r2, 0x26]
- adds r0, r3
- strh r0, [r2, 0x26]
-_080ACA92:
- movs r0, 0x2E
- ldrsh r1, [r2, r0]
- movs r3, 0x30
- ldrsh r0, [r2, r3]
- cmp r1, r0
- bne _080ACAA4
- adds r0, r2, 0
- bl DestroySpriteAndMatrix
-_080ACAA4:
- pop {r0}
- bx r0
- thumb_func_end sub_80ACA6C
-
- thumb_func_start sub_80ACAA8
-sub_80ACAA8: @ 80ACAA8
- push {r4,lr}
- adds r4, r0, 0
- bl SetSpriteCoordsToAnimAttackerCoords
- ldr r0, _080ACACC @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080ACAD4
- ldr r0, _080ACAD0 @ =gBattleAnimArgs
- ldrh r1, [r4, 0x20]
- ldrh r2, [r0]
- subs r1, r2
- strh r1, [r4, 0x20]
- b _080ACAE6
- .align 2, 0
-_080ACACC: .4byte gBattleAnimAttacker
-_080ACAD0: .4byte gBattleAnimArgs
-_080ACAD4:
- ldr r0, _080ACB14 @ =gBattleAnimArgs
- ldrh r1, [r0]
- ldrh r2, [r4, 0x20]
- adds r1, r2
- strh r1, [r4, 0x20]
- adds r2, r4, 0
- adds r2, 0x43
- movs r1, 0x8
- strb r1, [r2]
-_080ACAE6:
- adds r2, r0, 0
- ldrh r0, [r2, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- movs r1, 0
- strh r0, [r4, 0x22]
- ldrh r0, [r2, 0x4]
- strh r0, [r4, 0x2E]
- ldrh r0, [r2, 0x6]
- strh r0, [r4, 0x30]
- ldrh r0, [r2, 0x8]
- strh r0, [r4, 0x32]
- ldrh r0, [r2, 0xA]
- strh r0, [r4, 0x34]
- ldrh r0, [r2, 0xC]
- strh r0, [r4, 0x36]
- strh r1, [r4, 0x38]
- ldr r0, _080ACB18 @ =sub_80ACB1C
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080ACB14: .4byte gBattleAnimArgs
-_080ACB18: .4byte sub_80ACB1C
- thumb_func_end sub_80ACAA8
-
- thumb_func_start sub_80ACB1C
-sub_80ACB1C: @ 80ACB1C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080ACBA4
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- ldr r0, _080ACB88 @ =0x00002710
- cmp r1, r0
- ble _080ACB3A
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1
- strb r0, [r1]
-_080ACB3A:
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- ldrh r1, [r4, 0x38]
- lsls r1, 16
- asrs r1, 24
- ldrh r2, [r4, 0x30]
- adds r1, r2
- lsls r1, 16
- asrs r1, 16
- bl Sin
- strh r0, [r4, 0x24]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- ldrh r1, [r4, 0x38]
- lsls r1, 16
- asrs r1, 24
- ldrh r2, [r4, 0x30]
- adds r1, r2
- lsls r1, 16
- asrs r1, 16
- bl Cos
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x32]
- ldrh r2, [r4, 0x2E]
- adds r1, r0, r2
- strh r1, [r4, 0x2E]
- ldrh r0, [r4, 0x36]
- ldrh r2, [r4, 0x38]
- adds r0, r2
- strh r0, [r4, 0x38]
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, 0xFF
- ble _080ACB90
- ldr r2, _080ACB8C @ =0xffffff00
- b _080ACB98
- .align 2, 0
-_080ACB88: .4byte 0x00002710
-_080ACB8C: .4byte 0xffffff00
-_080ACB90:
- cmp r0, 0
- bge _080ACB9C
- movs r2, 0x80
- lsls r2, 1
-_080ACB98:
- adds r0, r1, r2
- strh r0, [r4, 0x2E]
-_080ACB9C:
- ldrh r0, [r4, 0x34]
- subs r0, 0x1
- strh r0, [r4, 0x34]
- b _080ACBAA
-_080ACBA4:
- adds r0, r4, 0
- bl DestroySpriteAndMatrix
-_080ACBAA:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80ACB1C
-
- thumb_func_start sub_80ACBB0
-sub_80ACBB0: @ 80ACBB0
- push {lr}
- movs r1, 0
- strh r1, [r0, 0x20]
- strh r1, [r0, 0x22]
- movs r1, 0x3C
- strh r1, [r0, 0x2E]
- movs r1, 0x8C
- strh r1, [r0, 0x32]
- movs r1, 0x50
- strh r1, [r0, 0x36]
- ldr r1, _080ACBD4 @ =StartAnimLinearTranslation
- str r1, [r0, 0x1C]
- ldr r1, _080ACBD8 @ =DestroyAnimSprite
- bl StoreSpriteCallbackInData6
- pop {r0}
- bx r0
- .align 2, 0
-_080ACBD4: .4byte StartAnimLinearTranslation
-_080ACBD8: .4byte DestroyAnimSprite
- thumb_func_end sub_80ACBB0
-
- thumb_func_start sub_80ACBDC
-sub_80ACBDC: @ 80ACBDC
- push {r4-r6,lr}
- adds r6, r0, 0
- ldr r5, _080ACC34 @ =gBattleAnimAttacker
- ldrb r0, [r5]
- bl GetBattlerSide
- adds r4, r0, 0
- ldr r0, _080ACC38 @ =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _080ACC22
- movs r0, 0x2
- bl GetBattlerAtPosition
- ldrb r1, [r5]
- lsls r0, 24
- lsrs r0, 24
- cmp r1, r0
- beq _080ACC1A
- movs r0, 0x3
- bl GetBattlerAtPosition
- ldrb r1, [r5]
- lsls r0, 24
- lsrs r0, 24
- cmp r1, r0
- bne _080ACC22
-_080ACC1A:
- ldr r1, _080ACC3C @ =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- negs r0, r0
- strh r0, [r1, 0x4]
-_080ACC22:
- ldr r1, _080ACC40 @ =sub_8075F0C
- str r1, [r6, 0x1C]
- adds r0, r6, 0
- bl _call_via_r1
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080ACC34: .4byte gBattleAnimAttacker
-_080ACC38: .4byte gBattleAnimTarget
-_080ACC3C: .4byte gBattleAnimArgs
-_080ACC40: .4byte sub_8075F0C
- thumb_func_end sub_80ACBDC
-
- thumb_func_start sub_80ACC44
-sub_80ACC44: @ 80ACC44
- ldr r2, _080ACC58 @ =gBattleAnimArgs
- ldrh r1, [r2]
- negs r1, r1
- strh r1, [r2]
- ldrh r1, [r2, 0x4]
- negs r1, r1
- strh r1, [r2, 0x4]
- ldr r1, _080ACC5C @ =sub_8075F0C
- str r1, [r0, 0x1C]
- bx lr
- .align 2, 0
-_080ACC58: .4byte gBattleAnimArgs
-_080ACC5C: .4byte sub_8075F0C
- thumb_func_end sub_80ACC44
-
- thumb_func_start sub_80ACC60
-sub_80ACC60: @ 80ACC60
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
- ldr r0, _080ACC80 @ =gBattleAnimArgs
- ldrh r0, [r0, 0x4]
- movs r1, 0
- strh r0, [r4, 0x3C]
- strh r1, [r4, 0x2E]
- ldr r0, _080ACC84 @ =sub_80ACC88
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080ACC80: .4byte gBattleAnimArgs
-_080ACC84: .4byte sub_80ACC88
- thumb_func_end sub_80ACC60
-
- thumb_func_start sub_80ACC88
-sub_80ACC88: @ 80ACC88
- push {r4,r5,lr}
- adds r5, r0, 0
- bl sub_80ACD7C
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x12
- bne _080ACCD2
- movs r0, 0x19
- strh r0, [r5, 0x2E]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x30]
- ldr r4, _080ACCD8 @ =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
- ldr r0, _080ACCDC @ =sub_80ACCE0
- str r0, [r5, 0x1C]
-_080ACCD2:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080ACCD8: .4byte gBattleAnimTarget
-_080ACCDC: .4byte sub_80ACCE0
- thumb_func_end sub_80ACC88
-
- thumb_func_start sub_80ACCE0
-sub_80ACCE0: @ 80ACCE0
- push {r4-r6,lr}
- adds r6, r0, 0
- bl AnimTranslateLinear
- lsls r0, 24
- cmp r0, 0
- beq _080ACD28
- movs r4, 0
- strh r4, [r6, 0x2E]
- ldr r5, _080ACD20 @ =gBattleAnimTarget
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0x20]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0x22]
- strh r4, [r6, 0x26]
- strh r4, [r6, 0x24]
- ldr r1, _080ACD24 @ =sub_80ACD58
- str r1, [r6, 0x1C]
- adds r0, r6, 0
- bl _call_via_r1
- b _080ACD52
- .align 2, 0
-_080ACD20: .4byte gBattleAnimTarget
-_080ACD24: .4byte sub_80ACD58
-_080ACD28:
- movs r1, 0x3C
- ldrsh r0, [r6, r1]
- movs r1, 0x1C
- bl Sin
- ldrh r1, [r6, 0x24]
- adds r0, r1
- strh r0, [r6, 0x24]
- movs r1, 0x3C
- ldrsh r0, [r6, r1]
- movs r1, 0x1C
- bl Cos
- ldrh r1, [r6, 0x26]
- adds r0, r1
- strh r0, [r6, 0x26]
- ldrh r0, [r6, 0x3C]
- adds r0, 0x14
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r6, 0x3C]
-_080ACD52:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80ACCE0
-
- thumb_func_start sub_80ACD58
-sub_80ACD58: @ 80ACD58
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80ACD7C
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1F
- bne _080ACD74
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080ACD74:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80ACD58
-
- thumb_func_start sub_80ACD7C
-sub_80ACD7C: @ 80ACD7C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- movs r1, 0x1C
- bl Sin
- strh r0, [r4, 0x24]
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- movs r1, 0x1C
- bl Cos
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3C]
- adds r0, 0x14
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x3C]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80ACD7C
-
- thumb_func_start sub_80ACDA8
-sub_80ACDA8: @ 80ACDA8
- push {r4,lr}
- adds r4, r0, 0
- ldr r1, _080ACDDC @ =gBattleAnimArgs
- ldrh r0, [r1]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r4, 0x20]
- ldrh r0, [r1, 0x2]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
- ldrh r0, [r1, 0x4]
- strh r0, [r4, 0x2E]
- ldrh r0, [r1, 0x6]
- strh r0, [r4, 0x30]
- ldrh r0, [r1, 0x8]
- strh r0, [r4, 0x32]
- ldr r1, _080ACDE0 @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- ldr r0, _080ACDE4 @ =TranslateSpriteLinear
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080ACDDC: .4byte gBattleAnimArgs
-_080ACDE0: .4byte DestroyAnimSprite
-_080ACDE4: .4byte TranslateSpriteLinear
- thumb_func_end sub_80ACDA8
-
- thumb_func_start sub_80ACDE8
-sub_80ACDE8: @ 80ACDE8
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
- ldr r1, _080ACE1C @ =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- strh r0, [r4, 0x30]
- ldrh r0, [r1, 0x6]
- strh r0, [r4, 0x2E]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _080ACE20 @ =WaitAnimForDuration
- str r0, [r4, 0x1C]
- ldr r1, _080ACE24 @ =sub_80ACE28
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080ACE1C: .4byte gBattleAnimArgs
-_080ACE20: .4byte WaitAnimForDuration
-_080ACE24: .4byte sub_80ACE28
- thumb_func_end sub_80ACDE8
-
- thumb_func_start sub_80ACE28
-sub_80ACE28: @ 80ACE28
- push {lr}
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r3]
- ldrh r1, [r0, 0x30]
- movs r2, 0
- strh r1, [r0, 0x2E]
- strh r2, [r0, 0x30]
- ldr r1, _080ACE4C @ =sub_80ACE50
- str r1, [r0, 0x1C]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_080ACE4C: .4byte sub_80ACE50
- thumb_func_end sub_80ACE28
-
- thumb_func_start sub_80ACE50
-sub_80ACE50: @ 80ACE50
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- ldrh r1, [r4, 0x32]
- lsls r1, 16
- asrs r1, 24
- bl Sin
- strh r0, [r4, 0x24]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- ldrh r1, [r4, 0x32]
- lsls r1, 16
- asrs r1, 24
- bl Cos
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x30]
- adds r0, 0xA
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x32]
- adds r0, 0xD0
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x2E]
- subs r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _080ACE9C
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080ACE9C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80ACE50
-
- thumb_func_start sub_80ACEA4
-sub_80ACEA4: @ 80ACEA4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, _080ACF04 @ =gTasks
- adds r4, r0
- movs r0, 0
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- movs r5, 0
- strh r0, [r4, 0x26]
- strh r5, [r4, 0x8]
- strh r5, [r4, 0xA]
- strh r5, [r4, 0xC]
- strh r5, [r4, 0xE]
- ldr r2, _080ACF08 @ =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, 0x10]
- ldr r0, _080ACF0C @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x12]
- strh r5, [r4, 0x14]
- ldrh r0, [r4, 0x26]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl PrepareBattlerSpriteForRotScale
- ldr r0, _080ACF10 @ =sub_80ACF14
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080ACF04: .4byte gTasks
-_080ACF08: .4byte gSprites
-_080ACF0C: .4byte gBattleAnimAttacker
-_080ACF10: .4byte sub_80ACF14
- thumb_func_end sub_80ACEA4
-
- thumb_func_start sub_80ACF14
-sub_80ACF14: @ 80ACF14
- push {r4,r5,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _080ACF3C @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x6
- bls _080ACF30
- b _080AD1EE
-_080ACF30:
- lsls r0, 2
- ldr r1, _080ACF40 @ =_080ACF44
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080ACF3C: .4byte gTasks
-_080ACF40: .4byte _080ACF44
- .align 2, 0
-_080ACF44:
- .4byte _080ACF60
- .4byte _080ACF86
- .4byte _080AD038
- .4byte _080AD098
- .4byte _080AD0B6
- .4byte _080AD18C
- .4byte _080AD1E0
-_080ACF60:
- 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]
-_080ACF86:
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080ACFCE
- movs r0, 0
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080ACFBC
- ldr r2, _080ACFB8 @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- b _080ACFCC
- .align 2, 0
-_080ACFB8: .4byte gSprites
-_080ACFBC:
- ldr r2, _080AD030 @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _080AD034 @ =0x0000fffd
-_080ACFCC:
- strh r1, [r0, 0x24]
-_080ACFCE:
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080ACFFC
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _080ACFFC
- movs r0, 0
- strh r0, [r4, 0xE]
- ldr r2, _080AD030 @ =gSprites
- 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]
-_080ACFFC:
- adds r0, r4, 0
- bl sub_8076640
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- beq _080AD00C
- b _080AD1EE
-_080AD00C:
- ldrh r0, [r4, 0x26]
- lsls r0, 24
- lsrs r0, 24
- bl SetBattlerSpriteYOffsetFromYScale
- ldr r2, _080AD030 @ =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, 0xA]
- strh r5, [r4, 0xC]
- strh r5, [r4, 0xE]
- b _080AD1D4
- .align 2, 0
-_080AD030: .4byte gSprites
-_080AD034: .4byte 0x0000fffd
-_080AD038:
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bgt _080AD048
- b _080AD1EE
-_080AD048:
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080AD072
- 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, 0xF0
- str r0, [sp, 0x4]
- movs r0, 0x6
- str r0, [sp, 0x8]
- adds r0, r4, 0
- movs r2, 0xE0
- bl sub_80765D4
- b _080AD092
-_080AD072:
- 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, 0xC0
- str r0, [sp, 0x4]
- movs r0, 0x6
- str r0, [sp, 0x8]
- adds r0, r4, 0
- movs r2, 0xE0
- bl sub_80765D4
-_080AD092:
- movs r0, 0
- strh r0, [r4, 0xA]
- b _080AD1D4
-_080AD098:
- adds r0, r4, 0
- bl sub_8076640
- lsls r0, 24
- cmp r0, 0
- beq _080AD0A6
- b _080AD1EE
-_080AD0A6:
- ldrh r0, [r4, 0x26]
- lsls r0, 24
- lsrs r0, 24
- adds r1, r5, 0
- movs r2, 0x6
- bl sub_80AD1F8
- b _080AD1D4
-_080AD0B6:
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080AD104
- movs r0, 0
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080AD0F0
- ldr r2, _080AD0EC @ =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, 0x3
- b _080AD102
- .align 2, 0
-_080AD0EC: .4byte gSprites
-_080AD0F0:
- ldr r2, _080AD13C @ =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, 0x3
-_080AD102:
- strh r1, [r0, 0x26]
-_080AD104:
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x18
- ble _080AD1EE
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080AD140
- 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, 0xF0
- bl sub_80765D4
- b _080AD15E
- .align 2, 0
-_080AD13C: .4byte gSprites
-_080AD140:
- 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, 0xC0
- bl sub_80765D4
-_080AD15E:
- ldrh r1, [r4, 0xC]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080AD17C
- ldr r2, _080AD188 @ =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, 0x3
- strh r1, [r0, 0x26]
-_080AD17C:
- movs r0, 0
- strh r0, [r4, 0xA]
- strh r0, [r4, 0xC]
- strh r0, [r4, 0xE]
- b _080AD1D4
- .align 2, 0
-_080AD188: .4byte gSprites
-_080AD18C:
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080AD1A8
- ldr r2, _080AD1DC @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x22]
- subs r1, 0x1
- strh r1, [r0, 0x22]
-_080AD1A8:
- adds r0, r4, 0
- bl sub_8076640
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _080AD1EE
- ldr r2, _080AD1DC @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r4, 0x10]
- strh r1, [r0, 0x22]
- ldrh r0, [r4, 0x26]
- lsls r0, 24
- lsrs r0, 24
- bl ResetSpriteRotScale
- strh r5, [r4, 0xC]
-_080AD1D4:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080AD1EE
- .align 2, 0
-_080AD1DC: .4byte gSprites
-_080AD1E0:
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080AD1EE
- adds r0, r5, 0
- bl DestroyAnimVisualTask
-_080AD1EE:
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80ACF14
-
- thumb_func_start sub_80AD1F8
-sub_80AD1F8: @ 80AD1F8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- adds r0, r4, 0
- bl sub_80AD374
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- ldr r1, _080AD248 @ =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrh r4, [r0, 0x20]
- ldr r0, _080AD24C @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080AD250
- adds r0, r4, 0
- subs r0, 0xC
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0x1
- b _080AD25A
- .align 2, 0
-_080AD248: .4byte gSprites
-_080AD24C: .4byte gBattleAnimAttacker
-_080AD250:
- adds r0, r4, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0xFF
-_080AD25A:
- movs r6, 0
- movs r5, 0
- lsls r4, 16
- str r4, [sp, 0x8]
- mov r1, r9
- lsls r1, 16
- str r1, [sp, 0x4]
- ldr r2, _080AD314 @ =gUnknown_83E5E44
- mov r9, r2
- lsls r0, 24
- asrs r0, 24
- str r0, [sp]
- mov r3, r8
- lsls r3, 1
- mov r10, r3
-_080AD278:
- ldr r0, _080AD318 @ =gUnknown_83E5E2C
- ldr r2, [sp, 0x8]
- asrs r1, r2, 16
- ldr r3, [sp, 0x4]
- asrs r2, r3, 16
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _080AD2FA
- ldr r1, _080AD31C @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r4, r0, r1
- ldrh r2, [r4, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- lsls r0, r5, 2
- adds r0, 0x40
- adds r1, r0
- ldr r3, _080AD320 @ =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldr r3, _080AD324 @ =0xfffffc00
- adds r0, r3, 0
- ands r2, r0
- orrs r2, r1
- strh r2, [r4, 0x4]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x4
- bls _080AD2C2
- movs r5, 0
-_080AD2C2:
- lsls r2, r6, 2
- mov r1, r9
- adds r0, r2, r1
- ldrh r0, [r0]
- ldr r3, [sp]
- adds r1, r0, 0
- muls r1, r3
- lsls r1, 16
- asrs r1, 16
- ldr r0, _080AD328 @ =gUnknown_83E5E46
- adds r2, r0
- movs r3, 0
- ldrsh r2, [r2, r3]
- adds r0, r4, 0
- bl sub_80AD3C8
- strh r7, [r4, 0x3A]
- mov r0, r8
- strh r0, [r4, 0x3C]
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- add r0, r10
- ldr r1, _080AD32C @ =gTasks+0x8
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- strh r1, [r0]
-_080AD2FA:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x6
- bls _080AD278
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AD314: .4byte gUnknown_83E5E44
-_080AD318: .4byte gUnknown_83E5E2C
-_080AD31C: .4byte gSprites
-_080AD320: .4byte 0x000003ff
-_080AD324: .4byte 0xfffffc00
-_080AD328: .4byte gUnknown_83E5E46
-_080AD32C: .4byte gTasks+0x8
- thumb_func_end sub_80AD1F8
-
- thumb_func_start sub_80AD330
-sub_80AD330: @ 80AD330
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80AD3E4
- adds r0, r4, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080AD36A
- ldr r3, _080AD370 @ =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
-_080AD36A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AD370: .4byte gTasks
- thumb_func_end sub_80AD330
-
- thumb_func_start sub_80AD374
-sub_80AD374: @ 80AD374
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080AD3AC @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrh r2, [r1, 0x26]
- ldrh r0, [r1, 0x22]
- adds r2, r0
- adds r1, 0x29
- movs r0, 0
- ldrsb r0, [r1, r0]
- adds r0, r2
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, _080AD3B0 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080AD3B4
- lsls r0, r4, 16
- movs r1, 0x94
- lsls r1, 15
- b _080AD3BA
- .align 2, 0
-_080AD3AC: .4byte gSprites
-_080AD3B0: .4byte gBattleAnimAttacker
-_080AD3B4:
- lsls r0, r4, 16
- movs r1, 0xB0
- lsls r1, 14
-_080AD3BA:
- adds r0, r1
- lsrs r4, r0, 16
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80AD374
-
- thumb_func_start sub_80AD3C8
-sub_80AD3C8: @ 80AD3C8
- movs r3, 0
- strh r3, [r0, 0x2E]
- strh r3, [r0, 0x30]
- ldrh r3, [r0, 0x20]
- lsls r3, 3
- strh r3, [r0, 0x32]
- ldrh r3, [r0, 0x22]
- lsls r3, 3
- strh r3, [r0, 0x34]
- lsls r1, 3
- strh r1, [r0, 0x36]
- lsls r2, 3
- strh r2, [r0, 0x38]
- bx lr
- thumb_func_end sub_80AD3C8
-
- thumb_func_start sub_80AD3E4
-sub_80AD3E4: @ 80AD3E4
- 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, 0x2
- ble _080AD40E
- movs r0, 0
- strh r0, [r2, 0x2E]
- ldrh r0, [r2, 0x30]
- adds r0, 0x1
- strh r0, [r2, 0x30]
- ldrh r0, [r2, 0x30]
- adds r1, r0, 0
- muls r1, r0
- adds r0, r1, 0
- ldrh r3, [r2, 0x34]
- adds r0, r3
- strh r0, [r2, 0x34]
-_080AD40E:
- ldrh r0, [r2, 0x36]
- ldrh r1, [r2, 0x32]
- adds r0, r1
- strh r0, [r2, 0x32]
- lsls r0, 16
- asrs r0, 19
- strh r0, [r2, 0x20]
- ldrh r1, [r2, 0x38]
- ldrh r3, [r2, 0x34]
- adds r1, r3
- strh r1, [r2, 0x34]
- lsls r1, 16
- asrs r3, r1, 19
- strh r3, [r2, 0x22]
- adds r0, 0x8
- lsls r0, 16
- movs r1, 0x80
- lsls r1, 17
- cmp r0, r1
- bhi _080AD444
- adds r1, r3, 0
- movs r0, 0x8
- negs r0, r0
- cmp r1, r0
- blt _080AD444
- cmp r1, 0x78
- ble _080AD450
-_080AD444:
- adds r0, r2, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_080AD450:
- pop {r0}
- bx r0
- thumb_func_end sub_80AD3E4
-
- thumb_func_start sub_80AD454
-sub_80AD454: @ 80AD454
- push {r4,r5,lr}
- ldr r3, _080AD498 @ =gBattleAnimArgs
- ldrh r1, [r3]
- movs r2, 0
- strh r1, [r0, 0x20]
- ldrh r1, [r3, 0x2]
- strh r1, [r0, 0x22]
- strh r2, [r0, 0x2E]
- strh r2, [r0, 0x30]
- strh r2, [r0, 0x32]
- ldrh r1, [r3, 0x4]
- strh r1, [r0, 0x3A]
- ldrh r1, [r3, 0x6]
- strh r1, [r0, 0x3C]
- ldrh r4, [r0, 0x4]
- lsls r2, r4, 22
- lsrs r2, 22
- movs r5, 0x8
- ldrsh r1, [r3, r5]
- lsls r1, 4
- adds r2, r1
- ldr r3, _080AD49C @ =0x000003ff
- adds r1, r3, 0
- ands r2, r1
- ldr r1, _080AD4A0 @ =0xfffffc00
- ands r1, r4
- orrs r1, r2
- strh r1, [r0, 0x4]
- ldr r1, _080AD4A4 @ =sub_80AD4A8
- str r1, [r0, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AD498: .4byte gBattleAnimArgs
-_080AD49C: .4byte 0x000003ff
-_080AD4A0: .4byte 0xfffffc00
-_080AD4A4: .4byte sub_80AD4A8
- thumb_func_end sub_80AD454
-
- thumb_func_start sub_80AD4A8
-sub_80AD4A8: @ 80AD4A8
- push {r4,lr}
- adds r2, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0x1
- beq _080AD4DA
- cmp r0, 0x1
- bgt _080AD4BE
- cmp r0, 0
- beq _080AD4C4
- b _080AD538
-_080AD4BE:
- cmp r0, 0x2
- beq _080AD4F8
- b _080AD538
-_080AD4C4:
- ldrh r1, [r2, 0x3A]
- movs r3, 0x3A
- ldrsh r0, [r2, r3]
- cmp r0, 0
- beq _080AD4D4
- subs r0, r1, 0x1
- strh r0, [r2, 0x3A]
- b _080AD538
-_080AD4D4:
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
-_080AD4DA:
- ldrh r0, [r2, 0x22]
- adds r0, 0x8
- strh r0, [r2, 0x22]
- lsls r0, 16
- asrs r0, 16
- ldrh r3, [r2, 0x3C]
- movs r4, 0x3C
- ldrsh r1, [r2, r4]
- cmp r0, r1
- blt _080AD538
- strh r3, [r2, 0x22]
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
- b _080AD538
-_080AD4F8:
- ldrh r0, [r2, 0x30]
- adds r0, 0x1
- strh r0, [r2, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080AD524
- movs r0, 0
- strh r0, [r2, 0x30]
- ldrh r0, [r2, 0x32]
- adds r0, 0x1
- strh r0, [r2, 0x32]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080AD520
- ldr r0, _080AD51C @ =0x0000fffd
- b _080AD522
- .align 2, 0
-_080AD51C: .4byte 0x0000fffd
-_080AD520:
- movs r0, 0x3
-_080AD522:
- strh r0, [r2, 0x26]
-_080AD524:
- ldrh r0, [r2, 0x34]
- adds r0, 0x1
- strh r0, [r2, 0x34]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x10
- ble _080AD538
- adds r0, r2, 0
- bl DestroyAnimSprite
-_080AD538:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AD4A8
-
- thumb_func_start sub_80AD540
-sub_80AD540: @ 80AD540
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- beq _080AD5B4
- cmp r0, 0x1
- bgt _080AD556
- cmp r0, 0
- beq _080AD55C
- b _080AD682
-_080AD556:
- cmp r0, 0x2
- beq _080AD612
- b _080AD682
-_080AD55C:
- adds r0, r5, 0
- movs r1, 0
- bl InitSpritePosToAnimAttacker
- ldr r4, _080AD584 @ =gBattleAnimArgs
- ldrb r1, [r4, 0x4]
- adds r0, r5, 0
- bl StartSpriteAnim
- ldrh r0, [r4, 0x4]
- strh r0, [r5, 0x3C]
- ldr r0, _080AD588 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AD58C
- movs r0, 0x4
- b _080AD58E
- .align 2, 0
-_080AD584: .4byte gBattleAnimArgs
-_080AD588: .4byte gBattleAnimAttacker
-_080AD58C:
- ldr r0, _080AD5AC @ =0x0000fffc
-_080AD58E:
- strh r0, [r5, 0x36]
- ldr r0, _080AD5B0 @ =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSpriteBGPriority
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- b _080AD60A
- .align 2, 0
-_080AD5AC: .4byte 0x0000fffc
-_080AD5B0: .4byte gBattleAnimTarget
-_080AD5B4:
- ldrh r0, [r5, 0x30]
- adds r0, 0xC0
- strh r0, [r5, 0x30]
- ldr r0, _080AD5D4 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AD5D8
- ldrh r0, [r5, 0x30]
- lsls r0, 16
- asrs r0, 24
- negs r0, r0
- b _080AD5DE
- .align 2, 0
-_080AD5D4: .4byte gBattleAnimAttacker
-_080AD5D8:
- ldrh r0, [r5, 0x30]
- lsls r0, 16
- asrs r0, 24
-_080AD5DE:
- strh r0, [r5, 0x26]
- movs r2, 0x32
- ldrsh r0, [r5, r2]
- movs r2, 0x36
- ldrsh r1, [r5, r2]
- bl Sin
- strh r0, [r5, 0x24]
- ldrh r0, [r5, 0x32]
- adds r0, 0x4
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x34]
- adds r0, 0x1
- strh r0, [r5, 0x34]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- bne _080AD682
- movs r0, 0
- strh r0, [r5, 0x34]
-_080AD60A:
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- b _080AD682
-_080AD612:
- movs r1, 0x32
- ldrsh r0, [r5, r1]
- movs r2, 0x36
- ldrsh r1, [r5, r2]
- bl Sin
- adds r2, r0, 0
- movs r3, 0
- strh r2, [r5, 0x24]
- ldrh r0, [r5, 0x32]
- adds r0, 0x4
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x34]
- adds r0, 0x1
- strh r0, [r5, 0x34]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1F
- bne _080AD682
- ldrh r0, [r5, 0x20]
- adds r1, r2, r0
- strh r1, [r5, 0x20]
- ldrh r0, [r5, 0x26]
- ldrh r2, [r5, 0x22]
- adds r0, r2
- strh r0, [r5, 0x22]
- strh r3, [r5, 0x26]
- strh r3, [r5, 0x24]
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r5, 0x2E]
- strh r1, [r5, 0x30]
- ldr r4, _080AD688 @ =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 sub_8075678
- ldr r0, _080AD68C @ =sub_80AD690
- str r0, [r5, 0x1C]
-_080AD682:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AD688: .4byte gBattleAnimTarget
-_080AD68C: .4byte sub_80AD690
- thumb_func_end sub_80AD540
-
- thumb_func_start sub_80AD690
-sub_80AD690: @ 80AD690
- push {r4,lr}
- adds r4, r0, 0
- bl AnimTranslateLinear
- lsls r0, 24
- cmp r0, 0
- bne _080AD6E8
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- movs r1, 0x10
- bl Sin
- ldrh r1, [r4, 0x24]
- adds r0, r1
- strh r0, [r4, 0x24]
- ldrh r2, [r4, 0x38]
- adds r0, r2, 0x4
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x38]
- ldrh r0, [r4, 0x38]
- lsls r2, 16
- asrs r2, 16
- cmp r2, 0
- beq _080AD6C6
- cmp r2, 0xC4
- ble _080AD6EE
-_080AD6C6:
- lsls r0, 16
- cmp r0, 0
- ble _080AD6EE
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080AD6EE
- ldr r0, _080AD6E4 @ =gUnknown_2037F24
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r0, 0x89
- bl PlaySE12WithPanning
- b _080AD6EE
- .align 2, 0
-_080AD6E4: .4byte gUnknown_2037F24
-_080AD6E8:
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080AD6EE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AD690
-
- thumb_func_start sub_80AD6F4
-sub_80AD6F4: @ 80AD6F4
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x2E]
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080AD70C
- ldr r0, _080AD778 @ =gBattleAnimArgs
- ldrh r0, [r0]
- strh r0, [r4, 0x30]
- adds r0, r1, 0x1
- strh r0, [r4, 0x2E]
-_080AD70C:
- movs r0, 0xC0
- lsls r0, 1
- adds r1, r0, 0
- ldrh r2, [r4, 0x34]
- adds r1, r2
- strh r1, [r4, 0x34]
- ldrh r0, [r4, 0x36]
- adds r0, 0xA0
- strh r0, [r4, 0x36]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- lsls r1, 16
- asrs r1, 24
- bl Sin
- strh r0, [r4, 0x24]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- ldrh r1, [r4, 0x36]
- lsls r1, 16
- asrs r1, 24
- bl Cos
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x30]
- adds r0, 0x7
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x30]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080AD7A8
- ldrh r0, [r4, 0x30]
- subs r0, 0x40
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x83
- bls _080AD780
- ldr r0, _080AD77C @ =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSpriteBGPriority
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- b _080AD7C4
- .align 2, 0
-_080AD778: .4byte gBattleAnimArgs
-_080AD77C: .4byte gBattleAnimTarget
-_080AD780:
- ldr r0, _080AD7A4 @ =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSpriteBGPriority
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- lsls r0, 2
- ldrb r2, [r4, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x5]
- b _080AD7C4
- .align 2, 0
-_080AD7A4: .4byte gBattleAnimTarget
-_080AD7A8:
- ldrh r0, [r4, 0x30]
- subs r0, 0x40
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x83
- bls _080AD7BC
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1D
- b _080AD7C2
-_080AD7BC:
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1F
-_080AD7C2:
- strb r0, [r1]
-_080AD7C4:
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- strh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _080AD7EC
- 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]
-_080AD7EC:
- movs r2, 0x32
- ldrsh r0, [r4, r2]
- cmp r0, 0x1E
- bne _080AD7FA
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080AD7FA:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AD6F4
-
- thumb_func_start sub_80AD800
-sub_80AD800: @ 80AD800
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080AD860 @ =gTasks
- adds r4, r1, r0
- ldr r0, _080AD864 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- movs r2, 0x1
- negs r2, r2
- adds r1, r2, 0
- cmp r0, 0
- bne _080AD826
- movs r1, 0x1
-_080AD826:
- strh r1, [r4, 0x20]
- ldr r0, _080AD868 @ =gBattleAnimTarget
- ldrb r1, [r0]
- movs r0, 0x2
- eors r0, r1
- bl IsBattlerSpriteVisible
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1
- strh r0, [r4, 0x22]
- movs r0, 0x1
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x24]
- movs r0, 0x3
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x26]
- ldr r0, _080AD86C @ =sub_80AD870
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AD860: .4byte gTasks
-_080AD864: .4byte gBattleAnimAttacker
-_080AD868: .4byte gBattleAnimTarget
-_080AD86C: .4byte sub_80AD870
- thumb_func_end sub_80AD800
-
- thumb_func_start sub_80AD870
-sub_80AD870: @ 80AD870
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _080AD894 @ =gTasks
- adds r2, r0, r1
- movs r0, 0x8
- ldrsh r3, [r2, r0]
- cmp r3, 0x1
- beq _080AD938
- cmp r3, 0x1
- bgt _080AD898
- cmp r3, 0
- beq _080AD8A6
- b _080ADA98
- .align 2, 0
-_080AD894: .4byte gTasks
-_080AD898:
- cmp r3, 0x2
- bne _080AD89E
- b _080AD9C0
-_080AD89E:
- cmp r3, 0x3
- bne _080AD8A4
- b _080ADA54
-_080AD8A4:
- b _080ADA98
-_080AD8A6:
- movs r1, 0x20
- ldrsh r0, [r2, r1]
- lsls r0, 1
- ldrh r5, [r2, 0x1C]
- adds r0, r5
- strh r0, [r2, 0x1C]
- ldrh r0, [r2, 0xA]
- adds r0, 0x1
- strh r0, [r2, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080AD8D8
- strh r3, [r2, 0xA]
- ldrh r0, [r2, 0xC]
- adds r0, 0x1
- strh r0, [r2, 0xC]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080AD8D4
- movs r0, 0x2
- b _080AD8D6
-_080AD8D4:
- ldr r0, _080AD930 @ =0x0000fffe
-_080AD8D6:
- strh r0, [r2, 0x1E]
-_080AD8D8:
- movs r1, 0
- strh r1, [r2, 0xE]
- movs r7, 0x22
- ldrsh r0, [r2, r7]
- cmp r1, r0
- bge _080AD91A
- ldr r4, _080AD934 @ =gSprites
- adds r3, r2, 0
- adds r3, 0x8
-_080AD8EA:
- movs r1, 0xE
- ldrsh r0, [r2, r1]
- adds r0, 0xE
- lsls r0, 1
- adds r0, r3, r0
- movs r5, 0
- ldrsh r0, [r0, r5]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r0, [r2, 0x1E]
- ldrh r7, [r2, 0x1C]
- adds r0, r7
- strh r0, [r1, 0x24]
- ldrh r0, [r2, 0xE]
- adds r0, 0x1
- strh r0, [r2, 0xE]
- lsls r0, 16
- asrs r0, 16
- movs r5, 0x22
- ldrsh r1, [r2, r5]
- cmp r0, r1
- blt _080AD8EA
-_080AD91A:
- ldrh r0, [r2, 0x1A]
- adds r0, 0x1
- strh r0, [r2, 0x1A]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x10
- beq _080AD92A
- b _080ADA98
-_080AD92A:
- movs r0, 0
- strh r0, [r2, 0x1A]
- b _080ADA44
- .align 2, 0
-_080AD930: .4byte 0x0000fffe
-_080AD934: .4byte gSprites
-_080AD938:
- ldrh r0, [r2, 0xA]
- adds r0, 0x1
- strh r0, [r2, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _080AD960
- movs r0, 0
- strh r0, [r2, 0xA]
- ldrh r0, [r2, 0xC]
- adds r0, 0x1
- strh r0, [r2, 0xC]
- ands r0, r3
- lsls r0, 16
- cmp r0, 0
- beq _080AD95C
- movs r0, 0x2
- b _080AD95E
-_080AD95C:
- ldr r0, _080AD9B8 @ =0x0000fffe
-_080AD95E:
- strh r0, [r2, 0x1E]
-_080AD960:
- movs r1, 0
- strh r1, [r2, 0xE]
- movs r7, 0x22
- ldrsh r0, [r2, r7]
- cmp r1, r0
- bge _080AD9A2
- ldr r4, _080AD9BC @ =gSprites
- adds r3, r2, 0
- adds r3, 0x8
-_080AD972:
- movs r1, 0xE
- ldrsh r0, [r2, r1]
- adds r0, 0xE
- lsls r0, 1
- adds r0, r3, r0
- movs r5, 0
- ldrsh r0, [r0, r5]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r0, [r2, 0x1E]
- ldrh r7, [r2, 0x1C]
- adds r0, r7
- strh r0, [r1, 0x24]
- ldrh r0, [r2, 0xE]
- adds r0, 0x1
- strh r0, [r2, 0xE]
- lsls r0, 16
- asrs r0, 16
- movs r5, 0x22
- ldrsh r1, [r2, r5]
- cmp r0, r1
- blt _080AD972
-_080AD9A2:
- ldrh r0, [r2, 0x1A]
- adds r0, 0x1
- strh r0, [r2, 0x1A]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x60
- bne _080ADA98
- movs r0, 0
- strh r0, [r2, 0x1A]
- b _080ADA44
- .align 2, 0
-_080AD9B8: .4byte 0x0000fffe
-_080AD9BC: .4byte gSprites
-_080AD9C0:
- movs r7, 0x20
- ldrsh r1, [r2, r7]
- lsls r1, 1
- ldrh r0, [r2, 0x1C]
- subs r0, r1
- strh r0, [r2, 0x1C]
- ldrh r0, [r2, 0xA]
- adds r0, 0x1
- strh r0, [r2, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080AD9F4
- movs r0, 0
- strh r0, [r2, 0xA]
- ldrh r0, [r2, 0xC]
- adds r0, 0x1
- strh r0, [r2, 0xC]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080AD9F0
- strh r3, [r2, 0x1E]
- b _080AD9F4
-_080AD9F0:
- ldr r0, _080ADA4C @ =0x0000fffe
- strh r0, [r2, 0x1E]
-_080AD9F4:
- movs r1, 0
- strh r1, [r2, 0xE]
- movs r3, 0x22
- ldrsh r0, [r2, r3]
- cmp r1, r0
- bge _080ADA36
- ldr r4, _080ADA50 @ =gSprites
- adds r3, r2, 0
- adds r3, 0x8
-_080ADA06:
- movs r5, 0xE
- ldrsh r0, [r2, r5]
- adds r0, 0xE
- lsls r0, 1
- adds r0, r3, r0
- movs r7, 0
- ldrsh r0, [r0, r7]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r0, [r2, 0x1E]
- ldrh r5, [r2, 0x1C]
- adds r0, r5
- strh r0, [r1, 0x24]
- ldrh r0, [r2, 0xE]
- adds r0, 0x1
- strh r0, [r2, 0xE]
- lsls r0, 16
- asrs r0, 16
- movs r7, 0x22
- ldrsh r1, [r2, r7]
- cmp r0, r1
- blt _080ADA06
-_080ADA36:
- ldrh r0, [r2, 0x1A]
- adds r0, 0x1
- strh r0, [r2, 0x1A]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x10
- bne _080ADA98
-_080ADA44:
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
- b _080ADA98
- .align 2, 0
-_080ADA4C: .4byte 0x0000fffe
-_080ADA50: .4byte gSprites
-_080ADA54:
- movs r1, 0
- strh r1, [r2, 0xE]
- movs r3, 0x22
- ldrsh r0, [r2, r3]
- cmp r1, r0
- bge _080ADA92
- ldr r6, _080ADAA0 @ =gSprites
- adds r3, r2, 0
- adds r3, 0x8
- movs r5, 0
-_080ADA68:
- movs r7, 0xE
- ldrsh r0, [r2, r7]
- adds r0, 0xE
- lsls r0, 1
- adds r0, r3, r0
- movs r7, 0
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r5, [r0, 0x24]
- ldrh r0, [r2, 0xE]
- adds r0, 0x1
- strh r0, [r2, 0xE]
- lsls r0, 16
- asrs r0, 16
- movs r7, 0x22
- ldrsh r1, [r2, r7]
- cmp r0, r1
- blt _080ADA68
-_080ADA92:
- adds r0, r4, 0
- bl DestroyAnimVisualTask
-_080ADA98:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080ADAA0: .4byte gSprites
- thumb_func_end sub_80AD870
-
- thumb_func_start sub_80ADAA4
-sub_80ADAA4: @ 80ADAA4
- push {r4,lr}
- sub sp, 0x10
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- mov r0, sp
- bl sub_80752A0
- mov r0, sp
- ldrb r0, [r0, 0x8]
- lsls r0, 4
- ldr r1, _080ADAD4 @ =gBattleAnimArgs
- ldrb r2, [r1]
- ldrh r3, [r1, 0x2]
- movs r1, 0x10
- bl BlendPalette
- adds r0, r4, 0
- bl DestroyAnimVisualTask
- add sp, 0x10
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080ADAD4: .4byte gBattleAnimArgs
- thumb_func_end sub_80ADAA4
-
- thumb_func_start sub_80ADAD8
-sub_80ADAD8: @ 80ADAD8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r1, _080ADB30 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r2, r0, r1
- movs r3, 0x8
- ldrsh r0, [r2, r3]
- mov r9, r1
- ldr r4, _080ADB34 @ =gBattleAnimArgs
- mov r8, r4
- cmp r0, 0
- bne _080ADB0E
- ldrh r0, [r4]
- strh r0, [r2, 0xA]
- ldrh r0, [r4, 0x2]
- strh r0, [r2, 0xC]
- ldrh r0, [r4, 0x4]
- strh r0, [r2, 0xE]
- ldrh r0, [r4, 0x6]
- strh r0, [r2, 0x10]
-_080ADB0E:
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
- ldr r1, _080ADB38 @ =gBattlerSpriteIds
- ldr r0, _080ADB3C @ =gBattleAnimTarget
- ldrb r0, [r0]
- adds r0, r1
- ldrb r6, [r0]
- movs r5, 0x10
- ldrsh r0, [r2, r5]
- cmp r0, 0
- bne _080ADB44
- ldr r4, _080ADB40 @ =gUnknown_83E5EFC
- movs r1, 0x8
- ldrsh r0, [r2, r1]
- b _080ADB4A
- .align 2, 0
-_080ADB30: .4byte gTasks
-_080ADB34: .4byte gBattleAnimArgs
-_080ADB38: .4byte gBattlerSpriteIds
-_080ADB3C: .4byte gBattleAnimTarget
-_080ADB40: .4byte gUnknown_83E5EFC
-_080ADB44:
- ldr r4, _080ADB90 @ =gUnknown_83E5F0C
- movs r3, 0x8
- ldrsh r0, [r2, r3]
-_080ADB4A:
- movs r1, 0xA
- bl __modsi3
- lsls r0, 16
- asrs r0, 16
- adds r0, r4
- ldrb r5, [r0]
- lsls r0, r7, 2
- adds r1, r0, r7
- lsls r1, 3
- add r1, r9
- movs r4, 0xE
- ldrsh r1, [r1, r4]
- mov r12, r0
- cmp r1, 0x1
- bne _080ADB98
- ldr r2, _080ADB94 @ =gSprites
- lsls r3, r6, 4
- adds r0, r3, r6
- lsls r0, 2
- adds r0, r2
- mov r10, r0
- mov r0, r8
- movs r4, 0x2
- ldrsh r1, [r0, r4]
- lsls r0, r5, 24
- asrs r0, 24
- muls r0, r1
- cmp r0, 0
- bge _080ADB88
- negs r0, r0
-_080ADB88:
- mov r5, r10
- strh r0, [r5, 0x26]
- b _080ADBB2
- .align 2, 0
-_080ADB90: .4byte gUnknown_83E5F0C
-_080ADB94: .4byte gSprites
-_080ADB98:
- ldr r3, _080ADBE8 @ =gSprites
- lsls r4, r6, 4
- adds r2, r4, r6
- lsls r2, 2
- adds r2, r3
- lsls r0, r5, 24
- asrs r0, 24
- mov r5, r8
- ldrh r1, [r5, 0x2]
- muls r0, r1
- strh r0, [r2, 0x24]
- adds r2, r3, 0
- adds r3, r4, 0
-_080ADBB2:
- mov r1, r12
- adds r0, r1, r7
- lsls r0, 3
- add r0, r9
- movs r4, 0x8
- ldrsh r1, [r0, r4]
- movs r5, 0xA
- ldrsh r0, [r0, r5]
- cmp r1, r0
- bne _080ADBD8
- adds r0, r3, r6
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strh r1, [r0, 0x24]
- strh r1, [r0, 0x26]
- adds r0, r7, 0
- bl DestroyAnimVisualTask
-_080ADBD8:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080ADBE8: .4byte gSprites
- thumb_func_end sub_80ADAD8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/ice.s b/asm/ice.s
deleted file mode 100644
index a2c8d0472..000000000
--- a/asm/ice.s
+++ /dev/null
@@ -1,3099 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80AF058
-sub_80AF058: @ 80AF058
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, _080AF0B4 @ =gUnknown_83E5F38
- movs r2, 0x22
- ldrsh r1, [r4, r2]
- movs r3, 0x24
- ldrsh r2, [r4, r3]
- ldrh r3, [r4, 0x20]
- lsls r3, 24
- lsrs r3, 24
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _080AF09C
- ldr r3, _080AF0B8 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r3, 0
- adds r1, 0x1C
- adds r1, r0, r1
- ldr r2, _080AF0BC @ =sub_80AF0C8
- str r2, [r1]
- adds r0, r3
- strh r5, [r0, 0x3A]
- movs r1, 0xA
- strh r1, [r0, 0x3C]
- ldrh r0, [r4, 0x1C]
- adds r0, 0x1
- strh r0, [r4, 0x1C]
-_080AF09C:
- ldrh r2, [r4, 0x24]
- movs r0, 0x24
- ldrsh r1, [r4, r0]
- movs r3, 0x26
- ldrsh r0, [r4, r3]
- cmp r1, r0
- bge _080AF0C0
- adds r0, r2, 0
- adds r0, 0x20
- strh r0, [r4, 0x24]
- movs r0, 0
- b _080AF0C2
- .align 2, 0
-_080AF0B4: .4byte gUnknown_83E5F38
-_080AF0B8: .4byte gSprites
-_080AF0BC: .4byte sub_80AF0C8
-_080AF0C0:
- movs r0, 0x1
-_080AF0C2:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80AF058
-
- thumb_func_start sub_80AF0C8
-sub_80AF0C8: @ 80AF0C8
- push {r4,lr}
- adds r4, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080AF0FC
- ldr r3, _080AF104 @ =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
-_080AF0FC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF104: .4byte gTasks
- thumb_func_end sub_80AF0C8
-
- thumb_func_start sub_80AF108
-sub_80AF108: @ 80AF108
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r2, [r5, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- adds r1, 0x7
- ldr r3, _080AF210 @ =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldr r0, _080AF214 @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x4]
- ldr r4, _080AF218 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r4, _080AF21C @ =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r3, r0, 24
- ldrb r0, [r4]
- movs r1, 0x3
- str r3, [sp]
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _080AF220 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x8]
- strh r0, [r5, 0x2E]
- ldrh r0, [r1]
- ldr r3, [sp]
- adds r0, r3
- strh r0, [r5, 0x30]
- ldrh r0, [r1, 0x4]
- mov r4, r9
- adds r0, r4, r0
- strh r0, [r5, 0x32]
- ldrh r0, [r1, 0x2]
- adds r0, r6
- strh r0, [r5, 0x34]
- ldrh r0, [r1, 0x6]
- mov r7, r8
- adds r0, r7, r0
- strh r0, [r5, 0x36]
- adds r0, r5, 0
- bl sub_8074C80
- adds r4, 0x20
- movs r0, 0x98
- lsls r0, 1
- mov r12, r0
- ldr r3, [sp]
- cmp r4, r12
- bhi _080AF1E2
- adds r0, r7, 0
- adds r0, 0x20
- ldrh r1, [r5, 0x30]
- ldrh r2, [r5, 0x32]
- cmp r0, 0xE0
- bhi _080AF1E2
- adds r4, r1, 0
- mov r10, r12
-_080AF1AE:
- mov r7, r9
- lsls r1, r7, 16
- asrs r1, 16
- adds r1, r4
- lsls r1, 16
- mov r7, r8
- lsls r0, r7, 16
- asrs r0, 16
- adds r0, r2
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsrs r0, r1, 16
- mov r9, r0
- movs r7, 0x80
- lsls r7, 14
- adds r1, r7
- lsrs r1, 16
- cmp r1, r10
- bhi _080AF1E2
- mov r1, r8
- lsls r0, r1, 16
- adds r0, r7
- lsrs r0, 16
- cmp r0, 0xE0
- bls _080AF1AE
-_080AF1E2:
- ldrh r0, [r5, 0x30]
- negs r7, r0
- strh r7, [r5, 0x30]
- ldrh r0, [r5, 0x32]
- negs r4, r0
- strh r4, [r5, 0x32]
- lsls r0, r3, 16
- movs r1, 0x80
- lsls r1, 14
- adds r0, r1
- lsrs r0, 16
- movs r2, 0x98
- lsls r2, 1
- mov r12, r2
- ldr r1, _080AF220 @ =gBattleAnimArgs
- mov r10, r1
- cmp r0, r12
- bhi _080AF24E
- lsls r1, r6, 16
- movs r2, 0x80
- lsls r2, 14
- adds r0, r1, r2
- b _080AF246
- .align 2, 0
-_080AF210: .4byte 0x000003ff
-_080AF214: .4byte 0xfffffc00
-_080AF218: .4byte gBattleAnimTarget
-_080AF21C: .4byte gBattleAnimAttacker
-_080AF220: .4byte gBattleAnimArgs
-_080AF224:
- lsls r1, r3, 16
- asrs r1, 16
- adds r1, r7
- lsls r1, 16
- asrs r0, r2, 16
- adds r0, r4
- lsls r0, 16
- lsrs r6, r0, 16
- lsrs r3, r1, 16
- movs r0, 0x80
- lsls r0, 14
- adds r1, r0
- lsrs r1, 16
- cmp r1, r12
- bhi _080AF24E
- lsls r1, r6, 16
- adds r0, r1, r0
-_080AF246:
- lsrs r0, 16
- adds r2, r1, 0
- cmp r0, 0xE0
- bls _080AF224
-_080AF24E:
- strh r3, [r5, 0x20]
- strh r6, [r5, 0x22]
- mov r1, r10
- ldrh r0, [r1, 0x8]
- strh r0, [r5, 0x2E]
- strh r3, [r5, 0x30]
- mov r2, r9
- strh r2, [r5, 0x32]
- strh r6, [r5, 0x34]
- mov r3, r8
- strh r3, [r5, 0x36]
- adds r0, r5, 0
- bl sub_8074C80
- mov r7, r10
- ldrh r0, [r7, 0xA]
- strh r0, [r5, 0x34]
- ldrh r0, [r7, 0xC]
- strh r0, [r5, 0x36]
- ldr r0, _080AF288 @ =sub_80AF28C
- str r0, [r5, 0x1C]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF288: .4byte sub_80AF28C
- thumb_func_end sub_80AF108
-
- thumb_func_start sub_80AF28C
-sub_80AF28C: @ 80AF28C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080AF2E4
- ldrh r1, [r4, 0x30]
- ldrh r2, [r4, 0x38]
- adds r1, r2
- strh r1, [r4, 0x38]
- ldrh r0, [r4, 0x32]
- ldrh r2, [r4, 0x3A]
- adds r0, r2
- strh r0, [r4, 0x3A]
- strh r1, [r4, 0x24]
- strh r0, [r4, 0x26]
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- movs r2, 0x34
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x24]
- adds r0, r1
- strh r0, [r4, 0x24]
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- movs r2, 0x34
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x36]
- ldrh r2, [r4, 0x3C]
- adds r0, r2
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x3C]
- ldrh r0, [r4, 0x2E]
- subs r0, 0x1
- strh r0, [r4, 0x2E]
- b _080AF2EA
-_080AF2E4:
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080AF2EA:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AF28C
-
- thumb_func_start sub_80AF2F0
-sub_80AF2F0: @ 80AF2F0
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080AF324 @ =gBattleAnimArgs
- ldrh r0, [r0]
- strh r0, [r4, 0x2E]
- movs r0, 0x3C
- strh r0, [r4, 0x30]
- movs r0, 0x9
- strh r0, [r4, 0x32]
- movs r0, 0x1E
- strh r0, [r4, 0x34]
- movs r0, 0xFE
- lsls r0, 8
- strh r0, [r4, 0x36]
- ldr r1, _080AF328 @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- ldr r1, _080AF32C @ =TranslateSpriteInGrowingCircleOverDuration
- str r1, [r4, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF324: .4byte gBattleAnimArgs
-_080AF328: .4byte DestroyAnimSprite
-_080AF32C: .4byte TranslateSpriteInGrowingCircleOverDuration
- thumb_func_end sub_80AF2F0
-
- thumb_func_start sub_80AF330
-sub_80AF330: @ 80AF330
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
- ldr r0, _080AF364 @ =gBattleAnimTarget
- ldrb r0, [r0]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x32]
- ldr r0, _080AF368 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AF370
- ldr r0, _080AF36C @ =gBattleAnimArgs
- ldrh r1, [r4, 0x32]
- ldrh r0, [r0, 0x4]
- subs r1, r0
- strh r1, [r4, 0x32]
- b _080AF37A
- .align 2, 0
-_080AF364: .4byte gBattleAnimTarget
-_080AF368: .4byte gBattleAnimAttacker
-_080AF36C: .4byte gBattleAnimArgs
-_080AF370:
- ldr r0, _080AF3A8 @ =gBattleAnimArgs
- ldrh r0, [r0, 0x4]
- ldrh r1, [r4, 0x32]
- adds r0, r1
- strh r0, [r4, 0x32]
-_080AF37A:
- ldr r0, _080AF3AC @ =gBattleAnimTarget
- ldrb r0, [r0]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- ldr r1, _080AF3A8 @ =gBattleAnimArgs
- lsrs r0, 24
- ldrh r2, [r1, 0x6]
- adds r0, r2
- strh r0, [r4, 0x36]
- ldrh r0, [r1, 0x8]
- strh r0, [r4, 0x2E]
- ldr r1, _080AF3B0 @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- ldr r0, _080AF3B4 @ =StartAnimLinearTranslation
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF3A8: .4byte gBattleAnimArgs
-_080AF3AC: .4byte gBattleAnimTarget
-_080AF3B0: .4byte DestroyAnimSprite
-_080AF3B4: .4byte StartAnimLinearTranslation
- thumb_func_end sub_80AF330
-
- thumb_func_start sub_80AF3B8
-sub_80AF3B8: @ 80AF3B8
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _080AF3D0 @ =gBattleAnimArgs
- movs r1, 0x4
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080AF3D4
- adds r0, r4, 0
- movs r1, 0x1
- bl InitSpritePosToAnimTarget
- b _080AF40A
- .align 2, 0
-_080AF3D0: .4byte gBattleAnimArgs
-_080AF3D4:
- ldr r0, _080AF41C @ =gBattleAnimTarget
- ldrb r0, [r0]
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- movs r1, 0x1
- bl SetAverageBattlerPositions
- ldr r0, _080AF420 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AF3FA
- ldrh r0, [r5]
- negs r0, r0
- strh r0, [r5]
-_080AF3FA:
- ldrh r0, [r5]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r5, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
-_080AF40A:
- ldr r1, _080AF424 @ =sub_80AF42C
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- ldr r0, _080AF428 @ =RunStoredCallbackWhenAffineAnimEnds
- str r0, [r4, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF41C: .4byte gBattleAnimTarget
-_080AF420: .4byte gBattleAnimAttacker
-_080AF424: .4byte sub_80AF42C
-_080AF428: .4byte RunStoredCallbackWhenAffineAnimEnds
- thumb_func_end sub_80AF3B8
-
- thumb_func_start sub_80AF42C
-sub_80AF42C: @ 80AF42C
- push {lr}
- adds r3, r0, 0
- movs r0, 0x3E
- adds r0, r3
- mov r12, r0
- ldrb r2, [r0]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- bne _080AF462
- adds r0, r3, 0
- bl DestroySpriteAndMatrix
-_080AF462:
- pop {r0}
- bx r0
- thumb_func_end sub_80AF42C
-
- thumb_func_start sub_80AF468
-sub_80AF468: @ 80AF468
- push {r4-r7,lr}
- sub sp, 0x10
- adds r5, r0, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
- ldr r6, _080AF4B0 @ =gBattleAnimArgs
- ldrh r0, [r6, 0x8]
- strh r0, [r5, 0x2E]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x30]
- ldrh r0, [r5, 0x22]
- strh r0, [r5, 0x34]
- movs r1, 0xA
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _080AF4B8
- ldr r4, _080AF4B4 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r6, [r6, 0x6]
- adds r0, r6
- strh r0, [r5, 0x36]
- b _080AF4CA
- .align 2, 0
-_080AF4B0: .4byte gBattleAnimArgs
-_080AF4B4: .4byte gBattleAnimTarget
-_080AF4B8:
- ldr r0, _080AF4E4 @ =gBattleAnimTarget
- ldrb r0, [r0]
- adds r2, r5, 0
- adds r2, 0x32
- adds r3, r5, 0
- adds r3, 0x36
- movs r1, 0x1
- bl SetAverageBattlerPositions
-_080AF4CA:
- ldr r0, _080AF4E8 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AF4F0
- ldr r0, _080AF4EC @ =gBattleAnimArgs
- ldrh r1, [r5, 0x32]
- ldrh r0, [r0, 0x4]
- subs r1, r0
- strh r1, [r5, 0x32]
- b _080AF4FA
- .align 2, 0
-_080AF4E4: .4byte gBattleAnimTarget
-_080AF4E8: .4byte gBattleAnimAttacker
-_080AF4EC: .4byte gBattleAnimArgs
-_080AF4F0:
- ldr r0, _080AF598 @ =gBattleAnimArgs
- ldrh r0, [r0, 0x4]
- ldrh r2, [r5, 0x32]
- adds r0, r2
- strh r0, [r5, 0x32]
-_080AF4FA:
- adds r7, r5, 0
- adds r7, 0x2E
- adds r2, r7, 0
- mov r1, sp
- movs r4, 0x7
-_080AF504:
- ldrh r0, [r2]
- strh r0, [r1]
- adds r2, 0x2
- adds r1, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080AF504
- adds r0, r5, 0
- bl InitAnimFastLinearTranslationWithSpeed
- ldrh r0, [r5, 0x30]
- movs r1, 0x1
- eors r0, r1
- strh r0, [r5, 0x30]
- ldrh r0, [r5, 0x32]
- eors r0, r1
- strh r0, [r5, 0x32]
-_080AF526:
- movs r0, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r5, 0
- bl AnimFastTranslateLinear
- movs r0, 0x20
- ldrsh r1, [r5, r0]
- movs r2, 0x24
- ldrsh r0, [r5, r2]
- adds r1, r0
- adds r1, 0x10
- movs r0, 0x88
- lsls r0, 1
- cmp r1, r0
- bhi _080AF55A
- movs r0, 0x22
- ldrsh r1, [r5, r0]
- movs r2, 0x26
- ldrsh r0, [r5, r2]
- adds r1, r0
- cmp r1, 0xA0
- bgt _080AF55A
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- bge _080AF526
-_080AF55A:
- ldrh r0, [r5, 0x24]
- ldrh r1, [r5, 0x20]
- adds r0, r1
- movs r1, 0
- strh r0, [r5, 0x20]
- ldrh r0, [r5, 0x26]
- ldrh r2, [r5, 0x22]
- adds r0, r2
- strh r0, [r5, 0x22]
- strh r1, [r5, 0x26]
- strh r1, [r5, 0x24]
- ldr r6, _080AF59C @ =sub_8075830
- ldr r1, _080AF5A0 @ =sub_80AF5A4
- mov r3, sp
- adds r2, r7, 0
- movs r4, 0x7
-_080AF57A:
- ldrh r0, [r3]
- strh r0, [r2]
- adds r3, 0x2
- adds r2, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080AF57A
- str r6, [r5, 0x1C]
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- add sp, 0x10
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF598: .4byte gBattleAnimArgs
-_080AF59C: .4byte sub_8075830
-_080AF5A0: .4byte sub_80AF5A4
- thumb_func_end sub_80AF468
-
- thumb_func_start sub_80AF5A4
-sub_80AF5A4: @ 80AF5A4
- push {r4,r5,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x24]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- movs r5, 0
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x26]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
- strh r5, [r4, 0x26]
- strh r5, [r4, 0x24]
- movs r0, 0x80
- strh r0, [r4, 0x2E]
- ldr r0, _080AF600 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- ldr r1, _080AF604 @ =0x0000ffec
- cmp r0, 0
- beq _080AF5D4
- movs r1, 0x14
-_080AF5D4:
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- lsls r1, 16
- asrs r1, 16
- bl Sin
- strh r0, [r4, 0x34]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- movs r1, 0xF
- bl Cos
- strh r0, [r4, 0x36]
- strh r5, [r4, 0x38]
- ldr r1, _080AF608 @ =sub_80AF60C
- str r1, [r4, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF600: .4byte gBattleAnimAttacker
-_080AF604: .4byte 0x0000ffec
-_080AF608: .4byte sub_80AF60C
- thumb_func_end sub_80AF5A4
-
- thumb_func_start sub_80AF60C
-sub_80AF60C: @ 80AF60C
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080AF660 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- ldr r1, _080AF664 @ =0x0000ffec
- cmp r0, 0
- beq _080AF622
- movs r1, 0x14
-_080AF622:
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- cmp r0, 0x1F
- bgt _080AF668
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- lsls r1, 16
- asrs r1, 16
- bl Sin
- ldrh r1, [r4, 0x34]
- subs r0, r1
- strh r0, [r4, 0x24]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- movs r1, 0xF
- bl Cos
- ldrh r1, [r4, 0x36]
- subs r0, r1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x10
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- b _080AF686
- .align 2, 0
-_080AF660: .4byte gBattleAnimAttacker
-_080AF664: .4byte 0x0000ffec
-_080AF668:
- ldrh r0, [r4, 0x24]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- movs r1, 0
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x26]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
- strh r1, [r4, 0x26]
- strh r1, [r4, 0x24]
- strh r1, [r4, 0x36]
- strh r1, [r4, 0x34]
- ldr r0, _080AF68C @ =sub_80AF690
- str r0, [r4, 0x1C]
-_080AF686:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF68C: .4byte sub_80AF690
- thumb_func_end sub_80AF60C
-
- thumb_func_start sub_80AF690
-sub_80AF690: @ 80AF690
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x1
- strh r0, [r4, 0x2E]
- adds r0, r4, 0
- bl AnimFastTranslateLinear
- movs r1, 0x20
- ldrsh r0, [r4, r1]
- movs r2, 0x24
- ldrsh r1, [r4, r2]
- adds r0, r1
- adds r0, 0x10
- movs r1, 0x88
- lsls r1, 1
- cmp r0, r1
- bhi _080AF6CC
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- movs r2, 0x26
- ldrsh r1, [r4, r2]
- adds r1, r0, r1
- movs r0, 0x80
- lsls r0, 1
- cmp r1, r0
- bgt _080AF6CC
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- bge _080AF6D2
-_080AF6CC:
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080AF6D2:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AF690
-
- thumb_func_start sub_80AF6D8
-sub_80AF6D8: @ 80AF6D8
- push {r4-r7,lr}
- sub sp, 0x10
- adds r5, r0, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
- ldr r1, _080AF71C @ =gBattleAnimArgs
- ldrh r0, [r1, 0x8]
- strh r0, [r5, 0x2E]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x30]
- ldrh r0, [r5, 0x22]
- strh r0, [r5, 0x34]
- movs r2, 0xE
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _080AF724
- ldr r4, _080AF720 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x36]
- b _080AF736
- .align 2, 0
-_080AF71C: .4byte gBattleAnimArgs
-_080AF720: .4byte gBattleAnimTarget
-_080AF724:
- ldr r0, _080AF754 @ =gBattleAnimTarget
- ldrb r0, [r0]
- adds r2, r5, 0
- adds r2, 0x32
- adds r3, r5, 0
- adds r3, 0x36
- movs r1, 0x1
- bl SetAverageBattlerPositions
-_080AF736:
- ldr r0, _080AF758 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AF760
- ldr r0, _080AF75C @ =gBattleAnimArgs
- ldrh r1, [r5, 0x32]
- ldrh r2, [r0, 0x4]
- subs r1, r2
- strh r1, [r5, 0x32]
- adds r1, r0, 0
- b _080AF76A
- .align 2, 0
-_080AF754: .4byte gBattleAnimTarget
-_080AF758: .4byte gBattleAnimAttacker
-_080AF75C: .4byte gBattleAnimArgs
-_080AF760:
- ldr r1, _080AF814 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- ldrh r2, [r5, 0x32]
- adds r0, r2
- strh r0, [r5, 0x32]
-_080AF76A:
- ldrh r0, [r1, 0x6]
- ldrh r1, [r5, 0x36]
- adds r0, r1
- strh r0, [r5, 0x36]
- adds r0, r5, 0
- bl InitAnimFastLinearTranslationWithSpeed
- adds r7, r5, 0
- adds r7, 0x2E
- adds r2, r7, 0
- mov r1, sp
- movs r4, 0x7
-_080AF782:
- ldrh r0, [r2]
- strh r0, [r1]
- adds r2, 0x2
- adds r1, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080AF782
- ldrh r0, [r5, 0x30]
- movs r1, 0x1
- eors r0, r1
- strh r0, [r5, 0x30]
- ldrh r0, [r5, 0x32]
- eors r0, r1
- strh r0, [r5, 0x32]
-_080AF79E:
- movs r0, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r5, 0
- bl AnimFastTranslateLinear
- movs r2, 0x20
- ldrsh r1, [r5, r2]
- movs r2, 0x24
- ldrsh r0, [r5, r2]
- adds r1, r0
- adds r1, 0x10
- movs r0, 0x88
- lsls r0, 1
- cmp r1, r0
- bhi _080AF7D2
- movs r0, 0x22
- ldrsh r1, [r5, r0]
- movs r2, 0x26
- ldrsh r0, [r5, r2]
- adds r1, r0
- cmp r1, 0xA0
- bgt _080AF7D2
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- bge _080AF79E
-_080AF7D2:
- ldrh r0, [r5, 0x24]
- ldrh r1, [r5, 0x20]
- adds r0, r1
- movs r1, 0
- strh r0, [r5, 0x20]
- ldrh r0, [r5, 0x26]
- ldrh r2, [r5, 0x22]
- adds r0, r2
- strh r0, [r5, 0x22]
- strh r1, [r5, 0x26]
- strh r1, [r5, 0x24]
- ldr r1, _080AF814 @ =gBattleAnimArgs
- ldr r6, _080AF818 @ =sub_80AF81C
- mov r3, sp
- adds r2, r7, 0
- movs r4, 0x7
-_080AF7F2:
- ldrh r0, [r3]
- strh r0, [r2]
- adds r3, 0x2
- adds r2, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080AF7F2
- ldrh r0, [r1, 0xA]
- strh r0, [r5, 0x38]
- ldrh r0, [r1, 0xC]
- strh r0, [r5, 0x3A]
- str r6, [r5, 0x1C]
- add sp, 0x10
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF814: .4byte gBattleAnimArgs
-_080AF818: .4byte sub_80AF81C
- thumb_func_end sub_80AF6D8
-
- thumb_func_start sub_80AF81C
-sub_80AF81C: @ 80AF81C
- push {r4,lr}
- adds r4, r0, 0
- bl AnimFastTranslateLinear
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080AF830
- movs r0, 0x1
- strh r0, [r4, 0x2E]
-_080AF830:
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- ldrh r2, [r4, 0x3C]
- adds r0, r2
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x3C]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- bne _080AF886
- movs r2, 0x20
- ldrsh r0, [r4, r2]
- movs r2, 0x24
- ldrsh r1, [r4, r2]
- adds r0, r1
- adds r0, 0x10
- movs r1, 0x88
- lsls r1, 1
- cmp r0, r1
- bhi _080AF880
- movs r0, 0x22
- ldrsh r1, [r4, r0]
- movs r2, 0x26
- ldrsh r0, [r4, r2]
- adds r1, r0
- cmp r1, 0xA0
- bgt _080AF880
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- bge _080AF886
-_080AF880:
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080AF886:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AF81C
-
- thumb_func_start sub_80AF88C
-sub_80AF88C: @ 80AF88C
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080AF8F8
- ldr r5, _080AF8AC @ =gBattleAnimArgs
- movs r1, 0x4
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080AF8B0
- adds r0, r4, 0
- movs r1, 0
- bl InitSpritePosToAnimTarget
- b _080AF8E6
- .align 2, 0
-_080AF8AC: .4byte gBattleAnimArgs
-_080AF8B0:
- ldr r0, _080AF8F0 @ =gBattleAnimTarget
- ldrb r0, [r0]
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- movs r1, 0
- bl SetAverageBattlerPositions
- ldr r0, _080AF8F4 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AF8D6
- ldrh r0, [r5]
- negs r0, r0
- strh r0, [r5]
-_080AF8D6:
- ldrh r0, [r5]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r5, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
-_080AF8E6:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _080AF90C
- .align 2, 0
-_080AF8F0: .4byte gBattleAnimTarget
-_080AF8F4: .4byte gBattleAnimAttacker
-_080AF8F8:
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080AF90C
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080AF90C:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80AF88C
-
- thumb_func_start sub_80AF914
-sub_80AF914: @ 80AF914
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r6, _080AF934 @ =gBattleAnimArgs
- movs r1, 0x8
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _080AF984
- movs r1, 0xA
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _080AF938
- adds r0, r5, 0
- movs r1, 0
- bl InitSpritePosToAnimAttacker
- b _080AF976
- .align 2, 0
-_080AF934: .4byte gBattleAnimArgs
-_080AF938:
- ldr r4, _080AF960 @ =gBattleAnimAttacker
- ldrb r0, [r4]
- adds r2, r5, 0
- adds r2, 0x20
- adds r3, r5, 0
- adds r3, 0x22
- movs r1, 0
- bl SetAverageBattlerPositions
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AF964
- ldrh r0, [r5, 0x20]
- ldrh r1, [r6]
- subs r0, r1
- b _080AF96A
- .align 2, 0
-_080AF960: .4byte gBattleAnimAttacker
-_080AF964:
- ldrh r0, [r6]
- ldrh r1, [r5, 0x20]
- adds r0, r1
-_080AF96A:
- strh r0, [r5, 0x20]
- ldr r0, _080AF97C @ =gBattleAnimArgs
- ldrh r0, [r0, 0x2]
- ldrh r1, [r5, 0x22]
- adds r0, r1
- strh r0, [r5, 0x22]
-_080AF976:
- ldr r0, _080AF980 @ =gBattleAnimAttacker
- b _080AF9D4
- .align 2, 0
-_080AF97C: .4byte gBattleAnimArgs
-_080AF980: .4byte gBattleAnimAttacker
-_080AF984:
- movs r1, 0xA
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _080AF996
- adds r0, r5, 0
- movs r1, 0
- bl InitSpritePosToAnimTarget
- b _080AF9D2
-_080AF996:
- ldr r4, _080AF9BC @ =gBattleAnimTarget
- ldrb r0, [r4]
- adds r2, r5, 0
- adds r2, 0x20
- adds r3, r5, 0
- adds r3, 0x22
- movs r1, 0
- bl SetAverageBattlerPositions
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080AF9C0
- ldrh r0, [r5, 0x20]
- ldrh r1, [r6]
- subs r0, r1
- b _080AF9C6
- .align 2, 0
-_080AF9BC: .4byte gBattleAnimTarget
-_080AF9C0:
- ldrh r0, [r6]
- ldrh r1, [r5, 0x20]
- adds r0, r1
-_080AF9C6:
- strh r0, [r5, 0x20]
- ldr r0, _080AF9F0 @ =gBattleAnimArgs
- ldrh r0, [r0, 0x2]
- ldrh r1, [r5, 0x22]
- adds r0, r1
- strh r0, [r5, 0x22]
-_080AF9D2:
- ldr r0, _080AF9F4 @ =gBattleAnimTarget
-_080AF9D4:
- ldrb r0, [r0]
- strh r0, [r5, 0x3C]
- ldr r0, _080AF9F0 @ =gBattleAnimArgs
- movs r1, 0xA
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _080AF9EC
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _080AF9F8
-_080AF9EC:
- movs r0, 0x20
- b _080AF9FA
- .align 2, 0
-_080AF9F0: .4byte gBattleAnimArgs
-_080AF9F4: .4byte gBattleAnimTarget
-_080AF9F8:
- movs r0, 0x40
-_080AF9FA:
- strh r0, [r5, 0x3A]
- ldr r0, _080AFA40 @ =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080AFA10
- ldrh r0, [r5, 0x22]
- adds r0, 0x8
- strh r0, [r5, 0x22]
-_080AFA10:
- ldr r1, _080AFA44 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x6]
- strh r0, [r5, 0x2E]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x30]
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x22]
- strh r0, [r5, 0x34]
- ldrh r1, [r1, 0x4]
- adds r0, r1
- strh r0, [r5, 0x36]
- adds r0, r5, 0
- bl InitAnimLinearTranslation
- movs r0, 0x40
- strh r0, [r5, 0x38]
- ldr r1, _080AFA48 @ =sub_80AFA4C
- str r1, [r5, 0x1C]
- adds r0, r5, 0
- bl _call_via_r1
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AFA40: .4byte gBattleAnimTarget
-_080AFA44: .4byte gBattleAnimArgs
-_080AFA48: .4byte sub_80AFA4C
- thumb_func_end sub_80AF914
-
- thumb_func_start sub_80AFA4C
-sub_80AFA4C: @ 80AFA4C
- push {r4,lr}
- adds r4, r0, 0
- bl AnimTranslateLinear
- lsls r0, 24
- cmp r0, 0
- bne _080AFAD6
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- movs r2, 0x3A
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x24]
- adds r0, r1
- strh r0, [r4, 0x24]
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- movs r1, 0x6
- negs r1, r1
- bl Cos
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x38]
- subs r0, 0x40
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x7F
- bhi _080AFAA8
- ldrh r0, [r4, 0x3C]
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerSpriteBGPriority
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- b _080AFACA
-_080AFAA8:
- ldrh r0, [r4, 0x3C]
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerSpriteBGPriority
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- lsls r0, 2
- ldrb r2, [r4, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x5]
-_080AFACA:
- ldrh r0, [r4, 0x38]
- adds r0, 0x3
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x38]
- b _080AFADC
-_080AFAD6:
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080AFADC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AFA4C
-
- thumb_func_start sub_80AFAE4
-sub_80AFAE4: @ 80AFAE4
- push {r4,r5,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080AFBA0 @ =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, 0
- bl SetAnimBgAttribute
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080AFB26
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0x1
- bl SetAnimBgAttribute
-_080AFB26:
- ldr r0, _080AFBA4 @ =gBattle_BG1_X
- movs r1, 0
- strh r1, [r0]
- ldr r4, _080AFBA8 @ =gBattle_BG1_Y
- strh r1, [r4]
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- ldrh r1, [r4]
- movs r0, 0x16
- bl SetGpuReg
- mov r0, sp
- bl sub_80752A0
- mov r0, sp
- ldrb r0, [r0, 0x9]
- ldr r1, _080AFBAC @ =gUnknown_83C3540
- movs r2, 0x80
- lsls r2, 4
- mov r3, sp
- ldrh r3, [r3, 0xA]
- bl LoadBgTiles
- mov r0, sp
- ldrb r0, [r0, 0x9]
- ldr r1, _080AFBB0 @ =gFile_graphics_battle_anims_backgrounds_fog_tilemap
- bl AnimLoadCompressedBgTilemap
- ldr r0, _080AFBB4 @ =gUnknown_83C2CE0
- mov r1, sp
- ldrb r1, [r1, 0x8]
- lsls r1, 4
- movs r2, 0x20
- bl LoadPalette
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080AFB88
- mov r0, sp
- ldrb r0, [r0, 0x8]
- ldr r1, [sp, 0x4]
- movs r2, 0
- movs r3, 0
- bl sub_80730C0
-_080AFB88:
- ldr r0, _080AFBB8 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _080AFBBC @ =sub_80AFBC0
- str r0, [r1]
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AFBA0: .4byte 0x00003f42
-_080AFBA4: .4byte gBattle_BG1_X
-_080AFBA8: .4byte gBattle_BG1_Y
-_080AFBAC: .4byte gUnknown_83C3540
-_080AFBB0: .4byte gFile_graphics_battle_anims_backgrounds_fog_tilemap
-_080AFBB4: .4byte gUnknown_83C2CE0
-_080AFBB8: .4byte gTasks
-_080AFBBC: .4byte sub_80AFBC0
- thumb_func_end sub_80AFAE4
-
- thumb_func_start sub_80AFBC0
-sub_80AFBC0: @ 80AFBC0
- push {r4,r5,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _080AFBF4 @ =gBattle_BG1_X
- ldr r2, _080AFBF8 @ =0x0000ffff
- adds r0, r2, 0
- ldrh r2, [r1]
- adds r0, r2
- strh r0, [r1]
- ldr r1, _080AFBFC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r2, 0x20
- ldrsh r0, [r0, r2]
- adds r2, r1, 0
- cmp r0, 0x4
- bls _080AFBEA
- b _080AFD36
-_080AFBEA:
- lsls r0, 2
- ldr r1, _080AFC00 @ =_080AFC04
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080AFBF4: .4byte gBattle_BG1_X
-_080AFBF8: .4byte 0x0000ffff
-_080AFBFC: .4byte gTasks
-_080AFC00: .4byte _080AFC04
- .align 2, 0
-_080AFC04:
- .4byte _080AFC18
- .4byte _080AFC70
- .4byte _080AFC92
- .4byte _080AFCD6
- .4byte _080AFCF8
-_080AFC18:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r4, r0, r2
- ldrh r0, [r4, 0x1C]
- adds r0, 0x1
- movs r5, 0
- strh r0, [r4, 0x1C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- beq _080AFC32
- b _080AFD36
-_080AFC32:
- strh r5, [r4, 0x1C]
- ldrh r0, [r4, 0x1A]
- adds r0, 0x1
- strh r0, [r4, 0x1A]
- ldr r1, _080AFC6C @ =gUnknown_83E64D4
- movs r2, 0x1A
- ldrsh r0, [r4, r2]
- adds r0, r1
- ldrb r1, [r0]
- strh r1, [r4, 0x1E]
- movs r0, 0x10
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- movs r1, 0x1E
- ldrsh r0, [r4, r1]
- cmp r0, 0x9
- bne _080AFD36
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- strh r0, [r4, 0x20]
- strh r5, [r4, 0x1E]
- b _080AFD36
- .align 2, 0
-_080AFC6C: .4byte gUnknown_83E64D4
-_080AFC70:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r2
- ldrh r0, [r1, 0x1E]
- adds r0, 0x1
- strh r0, [r1, 0x1E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x51
- bne _080AFD36
- movs r0, 0x9
- strh r0, [r1, 0x1E]
- ldrh r0, [r1, 0x20]
- adds r0, 0x1
- strh r0, [r1, 0x20]
- b _080AFD36
-_080AFC92:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r4, r0, r2
- ldrh r0, [r4, 0x1C]
- adds r0, 0x1
- strh r0, [r4, 0x1C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bne _080AFD36
- movs r0, 0
- strh r0, [r4, 0x1C]
- ldrh r1, [r4, 0x1E]
- subs r1, 0x1
- strh r1, [r4, 0x1E]
- movs r0, 0x10
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- movs r2, 0x1E
- ldrsh r1, [r4, r2]
- cmp r1, 0
- bne _080AFD36
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- strh r0, [r4, 0x20]
- strh r1, [r4, 0x1E]
- b _080AFD36
-_080AFCD6:
- mov r0, sp
- bl sub_80752A0
- movs r0, 0x1
- bl sub_8075358
- movs r0, 0x2
- bl sub_8075358
- ldr r0, _080AFD40 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x20]
- adds r0, 0x1
- strh r0, [r1, 0x20]
-_080AFCF8:
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080AFD0C
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0
- bl SetAnimBgAttribute
-_080AFD0C:
- ldr r0, _080AFD44 @ =gBattle_BG1_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080AFD48 @ =gBattle_BG1_Y
- strh r1, [r0]
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1
- movs r1, 0x4
- movs r2, 0x1
- bl SetAnimBgAttribute
- adds r0, r4, 0
- bl DestroyAnimVisualTask
-_080AFD36:
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AFD40: .4byte gTasks
-_080AFD44: .4byte gBattle_BG1_X
-_080AFD48: .4byte gBattle_BG1_Y
- thumb_func_end sub_80AFBC0
-
- thumb_func_start sub_80AFD4C
-sub_80AFD4C: @ 80AFD4C
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _080AFD78 @ =gBattleAnimAttacker
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x20]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x22]
- ldr r0, _080AFD7C @ =TranslateAnimSpriteToTargetMonLocation
- str r0, [r4, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AFD78: .4byte gBattleAnimAttacker
-_080AFD7C: .4byte TranslateAnimSpriteToTargetMonLocation
- thumb_func_end sub_80AFD4C
-
- thumb_func_start sub_80AFD80
-sub_80AFD80: @ 80AFD80
- push {r4,r5,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080AFE40 @ =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, 0
- bl SetAnimBgAttribute
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080AFDC2
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0x1
- bl SetAnimBgAttribute
-_080AFDC2:
- ldr r0, _080AFE44 @ =gBattle_BG1_X
- movs r1, 0
- strh r1, [r0]
- ldr r4, _080AFE48 @ =gBattle_BG1_Y
- strh r1, [r4]
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- ldrh r1, [r4]
- movs r0, 0x16
- bl SetGpuReg
- mov r0, sp
- bl sub_80752A0
- mov r0, sp
- ldrb r0, [r0, 0x9]
- ldr r1, _080AFE4C @ =gUnknown_83C3540
- movs r2, 0x80
- lsls r2, 4
- mov r3, sp
- ldrh r3, [r3, 0xA]
- bl LoadBgTiles
- mov r0, sp
- ldrb r0, [r0, 0x9]
- ldr r1, _080AFE50 @ =gFile_graphics_battle_anims_backgrounds_fog_tilemap
- bl AnimLoadCompressedBgTilemap
- ldr r0, _080AFE54 @ =gUnknown_83C2CE0
- mov r1, sp
- ldrb r1, [r1, 0x8]
- lsls r1, 4
- movs r2, 0x20
- bl LoadPalette
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080AFE24
- mov r0, sp
- ldrb r0, [r0, 0x8]
- ldr r1, [sp, 0x4]
- movs r2, 0
- movs r3, 0
- bl sub_80730C0
-_080AFE24:
- ldr r1, _080AFE58 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _080AFE5C @ =0x0000ffff
- strh r1, [r0, 0x26]
- ldr r1, _080AFE60 @ =sub_80AFE64
- str r1, [r0]
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AFE40: .4byte 0x00003f42
-_080AFE44: .4byte gBattle_BG1_X
-_080AFE48: .4byte gBattle_BG1_Y
-_080AFE4C: .4byte gUnknown_83C3540
-_080AFE50: .4byte gFile_graphics_battle_anims_backgrounds_fog_tilemap
-_080AFE54: .4byte gUnknown_83C2CE0
-_080AFE58: .4byte gTasks
-_080AFE5C: .4byte 0x0000ffff
-_080AFE60: .4byte sub_80AFE64
- thumb_func_end sub_80AFD80
-
- thumb_func_start sub_80AFE64
-sub_80AFE64: @ 80AFE64
- push {r4,r5,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r2, _080AFE94 @ =gBattle_BG1_X
- ldr r3, _080AFE98 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r3
- ldrh r0, [r1, 0x26]
- ldrh r5, [r2]
- adds r0, r5
- strh r0, [r2]
- movs r2, 0x20
- ldrsh r0, [r1, r2]
- cmp r0, 0x4
- bls _080AFE8A
- b _080AFFBE
-_080AFE8A:
- lsls r0, 2
- ldr r1, _080AFE9C @ =_080AFEA0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080AFE94: .4byte gBattle_BG1_X
-_080AFE98: .4byte gTasks
-_080AFE9C: .4byte _080AFEA0
- .align 2, 0
-_080AFEA0:
- .4byte _080AFEB4
- .4byte _080AFEF8
- .4byte _080AFF1A
- .4byte _080AFF5E
- .4byte _080AFF80
-_080AFEB4:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r4, r0, r3
- ldrh r0, [r4, 0x1A]
- adds r0, 0x1
- strh r0, [r4, 0x1A]
- ldr r1, _080AFEF4 @ =gUnknown_83E6500
- movs r5, 0x1A
- ldrsh r0, [r4, r5]
- adds r0, r1
- ldrb r1, [r0]
- strh r1, [r4, 0x1E]
- movs r0, 0x11
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- movs r1, 0x1E
- ldrsh r0, [r4, r1]
- cmp r0, 0x5
- bne _080AFFBE
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- strh r0, [r4, 0x20]
- movs r0, 0
- strh r0, [r4, 0x1E]
- b _080AFFBE
- .align 2, 0
-_080AFEF4: .4byte gUnknown_83E6500
-_080AFEF8:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r3
- ldrh r0, [r1, 0x1E]
- adds r0, 0x1
- strh r0, [r1, 0x1E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x51
- bne _080AFFBE
- movs r0, 0x5
- strh r0, [r1, 0x1E]
- ldrh r0, [r1, 0x20]
- adds r0, 0x1
- strh r0, [r1, 0x20]
- b _080AFFBE
-_080AFF1A:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r4, r0, r3
- ldrh r0, [r4, 0x1C]
- adds r0, 0x1
- strh r0, [r4, 0x1C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bne _080AFFBE
- movs r0, 0
- strh r0, [r4, 0x1C]
- ldrh r1, [r4, 0x1E]
- subs r1, 0x1
- strh r1, [r4, 0x1E]
- movs r0, 0x10
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- movs r2, 0x1E
- ldrsh r1, [r4, r2]
- cmp r1, 0
- bne _080AFFBE
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- strh r0, [r4, 0x20]
- strh r1, [r4, 0x1E]
- b _080AFFBE
-_080AFF5E:
- mov r0, sp
- bl sub_80752A0
- movs r0, 0x1
- bl sub_8075358
- movs r0, 0x2
- bl sub_8075358
- ldr r0, _080AFFC8 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x20]
- adds r0, 0x1
- strh r0, [r1, 0x20]
-_080AFF80:
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080AFF94
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0
- bl SetAnimBgAttribute
-_080AFF94:
- ldr r0, _080AFFCC @ =gBattle_BG1_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080AFFD0 @ =gBattle_BG1_Y
- strh r1, [r0]
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1
- movs r1, 0x4
- movs r2, 0x1
- bl SetAnimBgAttribute
- adds r0, r4, 0
- bl DestroyAnimVisualTask
-_080AFFBE:
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AFFC8: .4byte gTasks
-_080AFFCC: .4byte gBattle_BG1_X
-_080AFFD0: .4byte gBattle_BG1_Y
- thumb_func_end sub_80AFE64
-
- thumb_func_start sub_80AFFD4
-sub_80AFFD4: @ 80AFFD4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- ldr r6, _080B00BC @ =gBattleAnimArgs
- ldrh r0, [r6]
- strh r0, [r5, 0x2E]
- ldr r0, _080B00C0 @ =gBattleAnimAttacker
- mov r8, r0
- ldrb r0, [r0]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- adds r4, r0, 0
- ldr r7, _080B00C4 @ =gBattleAnimTarget
- ldrb r0, [r7]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bcs _080B0008
- movs r0, 0x80
- lsls r0, 8
- strh r0, [r5, 0x3C]
-_080B0008:
- ldr r3, _080B00C8 @ =gBattlerPositions
- ldrb r0, [r7]
- adds r0, r3
- ldrb r1, [r0]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _080B0068
- ldrh r0, [r6, 0x2]
- negs r0, r0
- strh r0, [r6, 0x2]
- ldrh r0, [r6, 0x6]
- negs r0, r0
- strh r0, [r6, 0x6]
- movs r1, 0x3C
- ldrsh r0, [r5, r1]
- movs r1, 0x80
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- beq _080B0064
- mov r1, r8
- ldrb r0, [r1]
- adds r0, r3
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _080B0064
- movs r0, 0x1
- bl GetAnimBattlerSpriteId
- ldr r2, _080B00CC @ =gSprites
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r1, 0x43
- ldrb r0, [r1]
- adds r0, 0x1
- adds r1, r5, 0
- adds r1, 0x43
- strb r0, [r1]
-_080B0064:
- movs r0, 0x1
- strh r0, [r5, 0x3A]
-_080B0068:
- ldr r4, _080B00C0 @ =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r6, _080B00BC @ =gBattleAnimArgs
- movs r1, 0xE
- ldrsh r0, [r6, r1]
- cmp r0, 0
- beq _080B00D0
- ldrh r0, [r6, 0x2]
- ldrh r1, [r5, 0x20]
- adds r0, r1
- strh r0, [r5, 0x30]
- ldr r4, _080B00C4 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x6]
- adds r0, r1
- strh r0, [r5, 0x32]
- ldrh r0, [r6, 0x4]
- ldrh r1, [r5, 0x22]
- adds r0, r1
- strh r0, [r5, 0x34]
- ldrb r0, [r4]
- movs r1, 0x3
- b _080B00F8
- .align 2, 0
-_080B00BC: .4byte gBattleAnimArgs
-_080B00C0: .4byte gBattleAnimAttacker
-_080B00C4: .4byte gBattleAnimTarget
-_080B00C8: .4byte gBattlerPositions
-_080B00CC: .4byte gSprites
-_080B00D0:
- ldrh r0, [r6, 0x2]
- ldrh r1, [r5, 0x20]
- adds r0, r1
- strh r0, [r5, 0x30]
- ldr r4, _080B0140 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x6]
- adds r0, r1
- strh r0, [r5, 0x32]
- ldrh r0, [r6, 0x4]
- ldrh r1, [r5, 0x22]
- adds r0, r1
- strh r0, [r5, 0x34]
- ldrb r0, [r4]
- movs r1, 0x1
-_080B00F8:
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r6, [r6, 0x8]
- adds r0, r6
- strh r0, [r5, 0x36]
- ldrb r0, [r4]
- bl GetBattlerSpriteBGPriority
- lsls r0, 24
- lsrs r0, 16
- ldrh r1, [r5, 0x3C]
- orrs r0, r1
- strh r0, [r5, 0x3C]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _080B012C
- movs r0, 0x1
- strh r0, [r5, 0x3A]
- adds r1, r5, 0
- adds r1, 0x43
- movs r0, 0x80
- strb r0, [r1]
-_080B012C:
- adds r0, r5, 0
- bl InitAnimLinearTranslation
- ldr r0, _080B0144 @ =sub_80B0148
- str r0, [r5, 0x1C]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0140: .4byte gBattleAnimTarget
-_080B0144: .4byte sub_80B0148
- thumb_func_end sub_80AFFD4
-
- thumb_func_start sub_80B0148
-sub_80B0148: @ 80B0148
- push {r4-r6,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x3C]
- movs r5, 0xFF
- movs r1, 0xFF
- ands r1, r0
- cmp r1, 0x1
- beq _080B0230
- cmp r1, 0x1
- bgt _080B0162
- cmp r1, 0
- beq _080B016A
- b _080B0380
-_080B0162:
- cmp r1, 0x2
- bne _080B0168
- b _080B0344
-_080B0168:
- b _080B0380
-_080B016A:
- adds r0, r4, 0
- bl AnimTranslateLinear
- ldr r1, _080B0194 @ =gSineTable
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- lsls r0, 1
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- asrs r0, 4
- ldrh r2, [r4, 0x24]
- adds r0, r2
- strh r0, [r4, 0x24]
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080B0198
- ldrh r0, [r4, 0x38]
- subs r0, 0x8
- b _080B019C
- .align 2, 0
-_080B0194: .4byte gSineTable
-_080B0198:
- ldrh r0, [r4, 0x38]
- adds r0, 0x8
-_080B019C:
- ands r0, r5
- strh r0, [r4, 0x38]
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0
- ble _080B01AA
- b _080B0380
-_080B01AA:
- movs r5, 0x50
- strh r5, [r4, 0x2E]
- ldr r6, _080B01F8 @ =gBattleAnimTarget
- ldrb r0, [r6]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x26]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- adds r0, 0x1D
- strh r0, [r4, 0x36]
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080B0200
- ldr r1, _080B01FC @ =gBattlerPositions
- ldrb r0, [r6]
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080B0200
- movs r0, 0xCC
- strh r0, [r4, 0x38]
- b _080B0202
- .align 2, 0
-_080B01F8: .4byte gBattleAnimTarget
-_080B01FC: .4byte gBattlerPositions
-_080B0200:
- strh r5, [r4, 0x38]
-_080B0202:
- movs r0, 0
- strh r0, [r4, 0x26]
- ldr r1, _080B022C @ =gSineTable
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- lsls r0, 1
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- asrs r0, 3
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x38]
- adds r0, 0x2
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x38]
- adds r0, r4, 0
- bl InitAnimLinearTranslation
- b _080B0380
- .align 2, 0
-_080B022C: .4byte gSineTable
-_080B0230:
- adds r0, r4, 0
- bl AnimTranslateLinear
- ldr r1, _080B028C @ =gSineTable
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- ldrsh r0, [r0, r2]
- asrs r0, 3
- ldrh r2, [r4, 0x24]
- adds r0, r2
- strh r0, [r4, 0x24]
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- adds r0, 0x40
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- ldrsh r1, [r0, r2]
- lsls r0, r1, 1
- adds r0, r1
- negs r0, r0
- asrs r0, 8
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080B02AE
- ldrh r1, [r4, 0x38]
- adds r0, r1, 0
- subs r0, 0x40
- lsls r0, 16
- lsrs r0, 16
- adds r3, r1, 0
- cmp r0, 0x7F
- bhi _080B0290
- ldrh r1, [r4, 0x3C]
- lsls r1, 16
- asrs r1, 24
- b _080B0298
- .align 2, 0
-_080B028C: .4byte gSineTable
-_080B0290:
- ldrh r1, [r4, 0x3C]
- lsls r1, 16
- asrs r1, 24
- adds r1, 0x1
-_080B0298:
- movs r0, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- adds r0, r3, 0x4
- b _080B02CE
-_080B02AE:
- ldrh r0, [r4, 0x38]
- subs r0, 0x40
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x7F
- bhi _080B02C2
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x80
- b _080B02C8
-_080B02C2:
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x8C
-_080B02C8:
- strb r0, [r1]
- ldrh r0, [r4, 0x38]
- subs r0, 0x4
-_080B02CE:
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x38]
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bgt _080B0380
- movs r5, 0
- movs r0, 0xC0
- lsls r0, 2
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x24]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x26]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- adds r0, 0x4
- strh r0, [r4, 0x36]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _080B0328
- ldr r1, _080B0320 @ =gBattlerPositions
- ldr r0, _080B0324 @ =gBattleAnimTarget
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080B0328
- movs r0, 0x80
- lsls r0, 1
- b _080B032A
- .align 2, 0
-_080B0320: .4byte gBattlerPositions
-_080B0324: .4byte gBattleAnimTarget
-_080B0328:
- ldr r0, _080B0340 @ =0x0000fff0
-_080B032A:
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0x3C]
- strh r1, [r4, 0x26]
- strh r1, [r4, 0x24]
- adds r0, r4, 0
- bl sub_8075678
- b _080B0380
- .align 2, 0
-_080B0340: .4byte 0x0000fff0
-_080B0344:
- adds r0, r4, 0
- bl AnimTranslateLinear
- lsls r0, 24
- cmp r0, 0
- beq _080B0380
- ldrb r0, [r4, 0x1]
- lsls r0, 30
- lsrs r0, 30
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080B0372
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
-_080B0372:
- adds r0, r4, 0
- bl DestroySprite
- ldr r1, _080B0388 @ =gAnimVisualTaskCount
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
-_080B0380:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0388: .4byte gAnimVisualTaskCount
- thumb_func_end sub_80B0148
-
- thumb_func_start sub_80B038C
-sub_80B038C: @ 80B038C
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080B03A0 @ =gTasks
- adds r1, r0
- ldr r0, _080B03A4 @ =sub_80B03A8
- str r0, [r1]
- bx lr
- .align 2, 0
-_080B03A0: .4byte gTasks
-_080B03A4: .4byte sub_80B03A8
- thumb_func_end sub_80B038C
-
- thumb_func_start sub_80B03A8
-sub_80B03A8: @ 80B03A8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _080B03CC @ =gTasks
- adds r4, r0, r1
- movs r0, 0x8
- ldrsh r5, [r4, r0]
- cmp r5, 0x1
- beq _080B03EC
- cmp r5, 0x1
- bgt _080B03D0
- cmp r5, 0
- beq _080B03D6
- b _080B0450
- .align 2, 0
-_080B03CC: .4byte gTasks
-_080B03D0:
- cmp r5, 0x2
- beq _080B0442
- b _080B0450
-_080B03D6:
- ldrh r0, [r4, 0x10]
- adds r0, 0x1
- strh r0, [r4, 0x10]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080B0450
- strh r5, [r4, 0x10]
- strh r5, [r4, 0x12]
- strh r5, [r4, 0xC]
- b _080B0428
-_080B03EC:
- ldrh r1, [r4, 0x12]
- movs r3, 0x12
- ldrsh r0, [r4, r3]
- cmp r0, 0
- bne _080B043C
- ldrb r0, [r4, 0xE]
- ldrb r1, [r4, 0xC]
- movs r3, 0x1
- bl sub_80B0458
- lsls r0, 24
- cmp r0, 0
- beq _080B040C
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
-_080B040C:
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- bne _080B0438
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xA
- bne _080B0430
-_080B0428:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080B0450
-_080B0430:
- ldrh r0, [r4, 0x8]
- subs r0, 0x1
- strh r0, [r4, 0x8]
- b _080B0450
-_080B0438:
- strh r5, [r4, 0x12]
- b _080B0450
-_080B043C:
- subs r0, r1, 0x1
- strh r0, [r4, 0x12]
- b _080B0450
-_080B0442:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B0450
- adds r0, r2, 0
- bl DestroyAnimVisualTask
-_080B0450:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80B03A8
-
- thumb_func_start sub_80B0458
-sub_80B0458: @ 80B0458
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp]
- lsls r3, 24
- lsrs r3, 24
- mov r10, r3
- movs r1, 0
- str r1, [sp, 0x4]
- ldr r1, _080B04D0 @ =gUnknown_83E652C
- lsrs r0, 22
- adds r4, r0, r1
- ldrb r0, [r4, 0x3]
- lsls r0, 24
- asrs r0, 28
- mov r8, r0
- cmp r0, 0x2
- beq _080B0544
- ldrh r0, [r4, 0x2]
- lsls r0, 20
- lsrs r0, 24
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r5, 0
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _080B0544
- movs r0, 0x1
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r5, 0
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r6, r0, 24
- mov r1, r8
- cmp r1, 0
- beq _080B04D4
- cmp r1, 0x1
- beq _080B050A
- b _080B0556
- .align 2, 0
-_080B04D0: .4byte gUnknown_83E652C
-_080B04D4:
- adds r0, r5, 0
- movs r1, 0x1
- bl GetBattlerSpriteCoordAttr
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x6
- bl __divsi3
- lsls r1, r7, 16
- asrs r1, 16
- subs r1, r0
- lsls r1, 16
- lsrs r7, r1, 16
- adds r0, r5, 0
- movs r1, 0
- bl GetBattlerSpriteCoordAttr
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x6
- bl __divsi3
- lsls r1, r6, 16
- asrs r1, 16
- subs r1, r0
- b _080B053E
-_080B050A:
- adds r0, r5, 0
- movs r1, 0x1
- bl GetBattlerSpriteCoordAttr
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x6
- bl __divsi3
- lsls r1, r7, 16
- asrs r1, 16
- adds r1, r0
- lsls r1, 16
- lsrs r7, r1, 16
- adds r0, r5, 0
- movs r1, 0
- bl GetBattlerSpriteCoordAttr
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x6
- bl __divsi3
- lsls r1, r6, 16
- asrs r1, 16
- adds r1, r0
-_080B053E:
- lsls r1, 16
- lsrs r6, r1, 16
- b _080B0556
-_080B0544:
- ldrh r0, [r4]
- lsls r0, 22
- asrs r0, 6
- lsrs r7, r0, 16
- ldr r0, [r4]
- lsls r0, 12
- asrs r0, 22
- lsls r0, 16
- lsrs r6, r0, 16
-_080B0556:
- lsls r0, r6, 16
- asrs r0, 16
- adds r0, 0x8
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- lsls r1, r7, 16
- asrs r1, 16
- subs r1, r0
- ldr r0, _080B05B0 @ =gUnknown_83E65A4
- lsls r1, 16
- asrs r1, 16
- movs r2, 0x8
- negs r2, r2
- movs r3, 0x12
- bl CreateSprite
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x40
- beq _080B05B8
- lsls r4, r5, 4
- adds r4, r5
- lsls r4, 2
- ldr r0, _080B05B4 @ =gSprites
- adds r4, r0
- adds r0, r4, 0
- mov r1, r9
- bl StartSpriteAffineAnim
- mov r0, sp
- ldrh r0, [r0, 0x4]
- strh r0, [r4, 0x2E]
- strh r7, [r4, 0x34]
- strh r6, [r4, 0x36]
- mov r1, r9
- strh r1, [r4, 0x38]
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r4, 0x3A]
- mov r1, r10
- strh r1, [r4, 0x3C]
- movs r0, 0x1
- b _080B05BA
- .align 2, 0
-_080B05B0: .4byte gUnknown_83E65A4
-_080B05B4: .4byte gSprites
-_080B05B8:
- movs r0, 0
-_080B05BA:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80B0458
-
- thumb_func_start sub_80B05CC
-sub_80B05CC: @ 80B05CC
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x20]
- adds r0, 0x4
- strh r0, [r4, 0x20]
- ldrh r1, [r4, 0x22]
- adds r2, r1, 0
- adds r2, 0x8
- strh r2, [r4, 0x22]
- lsls r0, 16
- asrs r0, 16
- movs r3, 0x34
- ldrsh r1, [r4, r3]
- cmp r0, r1
- bge _080B05F6
- lsls r0, r2, 16
- asrs r0, 16
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- cmp r0, r1
- blt _080B06A6
-_080B05F6:
- movs r3, 0x2E
- ldrsh r0, [r4, r3]
- cmp r0, 0x1
- bne _080B0678
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B0678
- ldr r0, _080B066C @ =gUnknown_83E63E0
- movs r2, 0x34
- ldrsh r1, [r4, r2]
- movs r3, 0x36
- ldrsh r2, [r4, r3]
- adds r3, r4, 0
- adds r3, 0x43
- ldrb r3, [r3]
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x2E]
- cmp r0, 0x40
- beq _080B065A
- ldr r2, _080B0670 @ =gSprites
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r2, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _080B0674 @ =sub_80B06B0
- str r1, [r0]
- movs r3, 0x2E
- ldrsh r1, [r4, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r4, 0x3A]
- strh r1, [r0, 0x3A]
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r4, 0x3C]
- strh r1, [r0, 0x3C]
-_080B065A:
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- adds r0, r4, 0
- bl DestroySprite
- b _080B06A6
- .align 2, 0
-_080B066C: .4byte gUnknown_83E63E0
-_080B0670: .4byte gSprites
-_080B0674: .4byte sub_80B06B0
-_080B0678:
- ldr r3, _080B06AC @ =gTasks
- movs r2, 0x3C
- ldrsh r1, [r4, r2]
- lsls r1, 1
- movs r0, 0x3A
- ldrsh r2, [r4, r0]
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0
- adds r3, 0x8
- adds r1, r3
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- adds r0, r4, 0
- bl DestroySprite
-_080B06A6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B06AC: .4byte gTasks
- thumb_func_end sub_80B05CC
-
- thumb_func_start sub_80B06B0
-sub_80B06B0: @ 80B06B0
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- bne _080B06F0
- ldr r3, _080B06F8 @ =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
-_080B06F0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B06F8: .4byte gTasks
- thumb_func_end sub_80B06B0
-
- thumb_func_start unc_080B06FC
-unc_080B06FC: @ 80B06FC
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r0, _080B077C @ =gAnimDisableStructPtr
- ldr r0, [r0]
- ldrb r1, [r0, 0x11]
- lsrs r0, r1, 4
- lsls r1, 28
- lsrs r1, 28
- subs r0, r1
- subs r0, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x4
- bls _080B071A
- movs r1, 0x4
-_080B071A:
- adds r0, r5, 0
- bl StartSpriteAffineAnim
- adds r0, r5, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
- ldr r6, _080B0780 @ =gBattleAnimArgs
- ldrh r0, [r6, 0x8]
- strh r0, [r5, 0x2E]
- ldr r0, _080B0784 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080B0742
- ldrh r0, [r6, 0x4]
- negs r0, r0
- strh r0, [r6, 0x4]
-_080B0742:
- ldr r4, _080B0788 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x4]
- adds r0, r1
- strh r0, [r5, 0x32]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x6]
- adds r0, r1
- strh r0, [r5, 0x36]
- ldrh r0, [r6, 0xA]
- strh r0, [r5, 0x38]
- adds r0, r5, 0
- bl InitAnimArcTranslation
- ldr r0, _080B078C @ =sub_80B0790
- str r0, [r5, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B077C: .4byte gAnimDisableStructPtr
-_080B0780: .4byte gBattleAnimArgs
-_080B0784: .4byte gBattleAnimAttacker
-_080B0788: .4byte gBattleAnimTarget
-_080B078C: .4byte sub_80B0790
- thumb_func_end unc_080B06FC
-
- thumb_func_start sub_80B0790
-sub_80B0790: @ 80B0790
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimHorizontalArc
- lsls r0, 24
- cmp r0, 0
- beq _080B07B2
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r0, _080B07B8 @ =RunStoredCallbackWhenAnimEnds
- str r0, [r4, 0x1C]
- ldr r1, _080B07BC @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
-_080B07B2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B07B8: .4byte RunStoredCallbackWhenAnimEnds
-_080B07BC: .4byte DestroyAnimSprite
- thumb_func_end sub_80B0790
-
- thumb_func_start sub_80B07C0
-sub_80B07C0: @ 80B07C0
- push {r4-r6,lr}
- adds r4, r0, 0
- ldrh r2, [r4, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- adds r1, 0x8
- ldr r3, _080B0814 @ =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldr r0, _080B0818 @ =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, _080B081C @ =0x000001ff
- ands r1, r0
- adds r0, r1, 0
- cmp r0, 0xFF
- ble _080B0806
- subs r0, r6, r0
- lsls r0, 16
- lsrs r1, r0, 16
-_080B0806:
- strh r5, [r4, 0x30]
- strh r1, [r4, 0x32]
- ldr r0, _080B0820 @ =sub_80B0824
- str r0, [r4, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0814: .4byte 0x000003ff
-_080B0818: .4byte 0xfffffc00
-_080B081C: .4byte 0x000001ff
-_080B0820: .4byte sub_80B0824
- thumb_func_end sub_80B07C0
-
- thumb_func_start sub_80B0824
-sub_80B0824: @ 80B0824
- 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 _080B0848
- lsls r0, r3, 16
- asrs r0, 24
- negs r0, r0
- b _080B084C
-_080B0848:
- lsls r0, r3, 16
- asrs r0, 24
-_080B084C:
- 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 _080B086A
- adds r0, r2, 0
- bl DestroyAnimSprite
-_080B086A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B0824
-
- thumb_func_start sub_80B0870
-sub_80B0870: @ 80B0870
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080B0898 @ =gBattleAnimArgs
- ldrb r3, [r1]
- lsls r3, 1
- adds r3, r1
- ldr r1, _080B089C @ =gAnimDisableStructPtr
- ldr r1, [r1]
- ldrb r1, [r1, 0x11]
- lsrs r2, r1, 4
- lsls r1, 28
- lsrs r1, 28
- subs r2, r1
- subs r2, 0x1
- strh r2, [r3]
- bl DestroyAnimVisualTask
- pop {r0}
- bx r0
- .align 2, 0
-_080B0898: .4byte gBattleAnimArgs
-_080B089C: .4byte gAnimDisableStructPtr
- thumb_func_end sub_80B0870
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/poison.s b/asm/poison.s
deleted file mode 100644
index 0028cf7d8..000000000
--- a/asm/poison.s
+++ /dev/null
@@ -1,362 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80B1620
-sub_80B1620: @ 80B1620
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, _080B1674 @ =gBattleAnimArgs
- movs r1, 0x6
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B1636
- adds r0, r5, 0
- movs r1, 0x2
- bl StartSpriteAnim
-_080B1636:
- adds r0, r5, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
- ldrh r0, [r4, 0x4]
- strh r0, [r5, 0x2E]
- ldr r4, _080B1678 @ =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x36]
- ldr r0, _080B167C @ =0x0000ffe2
- strh r0, [r5, 0x38]
- adds r0, r5, 0
- bl InitAnimArcTranslation
- ldr r0, _080B1680 @ =sub_80B1684
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B1674: .4byte gBattleAnimArgs
-_080B1678: .4byte gBattleAnimTarget
-_080B167C: .4byte 0x0000ffe2
-_080B1680: .4byte sub_80B1684
- thumb_func_end sub_80B1620
-
- thumb_func_start sub_80B1684
-sub_80B1684: @ 80B1684
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimHorizontalArc
- lsls r0, 24
- cmp r0, 0
- beq _080B1698
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080B1698:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B1684
-
- thumb_func_start sub_80B16A0
-sub_80B16A0: @ 80B16A0
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r5, _080B1714 @ =gBattleAnimArgs
- movs r1, 0x6
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080B16B8
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
-_080B16B8:
- adds r0, r4, 0
- movs r1, 0x1
- bl InitSpritePosToAnimAttacker
- ldr r0, _080B1718 @ =gBattleAnimTarget
- ldrb r0, [r0]
- mov r6, sp
- adds r6, 0x2
- movs r1, 0x1
- mov r2, sp
- adds r3, r6, 0
- bl SetAverageBattlerPositions
- ldr r0, _080B171C @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080B16E6
- ldrh r0, [r5, 0x8]
- negs r0, r0
- strh r0, [r5, 0x8]
-_080B16E6:
- ldrh r0, [r5, 0x4]
- strh r0, [r4, 0x2E]
- mov r1, sp
- ldrh r0, [r5, 0x8]
- ldrh r1, [r1]
- adds r0, r1
- strh r0, [r4, 0x32]
- ldrh r0, [r5, 0xA]
- ldrh r6, [r6]
- adds r0, r6
- strh r0, [r4, 0x36]
- ldr r0, _080B1720 @ =0x0000ffe2
- strh r0, [r4, 0x38]
- adds r0, r4, 0
- bl InitAnimArcTranslation
- ldr r0, _080B1724 @ =sub_80B1728
- str r0, [r4, 0x1C]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B1714: .4byte gBattleAnimArgs
-_080B1718: .4byte gBattleAnimTarget
-_080B171C: .4byte gBattleAnimAttacker
-_080B1720: .4byte 0x0000ffe2
-_080B1724: .4byte sub_80B1728
- thumb_func_end sub_80B16A0
-
- thumb_func_start sub_80B1728
-sub_80B1728: @ 80B1728
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimHorizontalArc
- lsls r0, 24
- cmp r0, 0
- beq _080B173C
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080B173C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B1728
-
- thumb_func_start sub_80B1744
-sub_80B1744: @ 80B1744
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _080B1790 @ =gBattleAnimArgs
- ldrh r0, [r5, 0x4]
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- ldrh r1, [r5]
- adds r0, r1
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- ldrh r1, [r5, 0x2]
- adds r0, r1
- strh r0, [r4, 0x36]
- adds r0, r4, 0
- bl InitSpriteDataForLinearTranslation
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r2, 0x4
- ldrsh r1, [r5, r2]
- bl __divsi3
- strh r0, [r4, 0x38]
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- movs r2, 0x4
- ldrsh r1, [r5, r2]
- bl __divsi3
- strh r0, [r4, 0x3A]
- ldr r0, _080B1794 @ =sub_80B1798
- str r0, [r4, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B1790: .4byte gBattleAnimArgs
-_080B1794: .4byte sub_80B1798
- thumb_func_end sub_80B1744
-
- thumb_func_start sub_80B1798
-sub_80B1798: @ 80B1798
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateSpriteLinearFixedPoint
- ldrh r0, [r4, 0x30]
- ldrh r1, [r4, 0x38]
- subs r0, r1
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x32]
- ldrh r1, [r4, 0x3A]
- subs r0, r1
- strh r0, [r4, 0x32]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B17BE
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080B17BE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B1798
-
- thumb_func_start sub_80B17C4
-sub_80B17C4: @ 80B17C4
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080B1824 @ =gBattleAnimTarget
- ldrb r0, [r0]
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- movs r1, 0x1
- bl SetAverageBattlerPositions
- ldr r0, _080B1828 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080B17F0
- ldr r1, _080B182C @ =gBattleAnimArgs
- ldrh r0, [r1]
- negs r0, r0
- strh r0, [r1]
-_080B17F0:
- ldr r0, _080B182C @ =gBattleAnimArgs
- ldrh r2, [r0]
- ldrh r1, [r4, 0x20]
- adds r2, r1
- strh r2, [r4, 0x20]
- ldrh r1, [r0, 0x2]
- ldrh r3, [r4, 0x22]
- adds r1, r3
- strh r1, [r4, 0x22]
- ldrh r3, [r0, 0x8]
- strh r3, [r4, 0x2E]
- ldrh r0, [r0, 0x4]
- adds r2, r0
- strh r2, [r4, 0x32]
- adds r1, r3
- strh r1, [r4, 0x36]
- ldr r0, _080B1830 @ =StartAnimLinearTranslation
- str r0, [r4, 0x1C]
- ldr r1, _080B1834 @ =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B1824: .4byte gBattleAnimTarget
-_080B1828: .4byte gBattleAnimAttacker
-_080B182C: .4byte gBattleAnimArgs
-_080B1830: .4byte StartAnimLinearTranslation
-_080B1834: .4byte DestroyAnimSprite
- thumb_func_end sub_80B17C4
-
- thumb_func_start sub_80B1838
-sub_80B1838: @ 80B1838
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _080B1850 @ =gBattleAnimArgs
- movs r1, 0x4
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080B1854
- adds r0, r4, 0
- movs r1, 0x1
- bl InitSpritePosToAnimTarget
- b _080B188A
- .align 2, 0
-_080B1850: .4byte gBattleAnimArgs
-_080B1854:
- ldr r0, _080B1894 @ =gBattleAnimTarget
- ldrb r0, [r0]
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- movs r1, 0x1
- bl SetAverageBattlerPositions
- ldr r0, _080B1898 @ =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080B187A
- ldrh r0, [r5]
- negs r0, r0
- strh r0, [r5]
-_080B187A:
- ldrh r0, [r5]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r5, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
-_080B188A:
- ldr r0, _080B189C @ =sub_80B18A0
- str r0, [r4, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B1894: .4byte gBattleAnimTarget
-_080B1898: .4byte gBattleAnimAttacker
-_080B189C: .4byte sub_80B18A0
- thumb_func_end sub_80B1838
-
- thumb_func_start sub_80B18A0
-sub_80B18A0: @ 80B18A0
- 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]
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080B18DC
- adds r0, r4, 0
- bl DestroyAnimSprite
-_080B18DC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B18A0
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/common_syms/battle_controller_pokedude.txt b/common_syms/battle_controller_pokedude.txt
new file mode 100644
index 000000000..4986343f1
--- /dev/null
+++ b/common_syms/battle_controller_pokedude.txt
@@ -0,0 +1 @@
+gUnknown_3005EE0
diff --git a/data/battle_anim_effects_misc.s b/data/battle_anim_effects_misc.s
index 69424e5c6..e9e96f2c8 100644
--- a/data/battle_anim_effects_misc.s
+++ b/data/battle_anim_effects_misc.s
@@ -499,7 +499,10 @@ gUnknown_83E5A38::
.incbin "baserom.gba", 0x3E5A38, 0x18
gUnknown_83E5A50::
- .incbin "baserom.gba", 0x3E5A50, 0x30
+ .incbin "baserom.gba", 0x3E5A50, 0x28
+
+gUnknown_83E5A78::
+ .incbin "baserom.gba", 0x3E5A78, 0x8
gUnknown_83E5A80::
.incbin "baserom.gba", 0x3E5A80, 0x18
@@ -522,265 +525,5 @@ gUnknown_83E5B70::
gUnknown_83E5B88:: @ 83E5B88
.incbin "baserom.gba", 0x3E5B88, 0x18
-gUnknown_83E5BA0::
- .incbin "baserom.gba", 0x3E5BA0, 0x40
-
-gUnknown_83E5BE0::
- .incbin "baserom.gba", 0x3E5BE0, 0x18
-
-gUnknown_83E5BF8::
- .incbin "baserom.gba", 0x3E5BF8, 0x78
-
-gUnknown_83E5C70::
- .incbin "baserom.gba", 0x3E5C70, 0x18
-
-gUnknown_83E5C88::
- .incbin "baserom.gba", 0x3E5C88, 0x18
-
-gUnknown_83E5CA0::
- .incbin "baserom.gba", 0x3E5CA0, 0x78
-
-gUnknown_83E5D18::
- .incbin "baserom.gba", 0x3E5D18, 0x30
-
-@ ================
-gUnknown_83E5D48:: @ 83E5D48
- .incbin "baserom.gba", 0x3E5D48, 0x4
-
-gUnknown_83E5D4C::
- .incbin "baserom.gba", 0x3E5D4C, 0x18
-
-gUnknown_83E5D64::
- .incbin "baserom.gba", 0x3E5D64, 0x18
-
-gUnknown_83E5D7C::
- .incbin "baserom.gba", 0x3E5D7C, 0x18
-
-gUnknown_83E5D94::
- .incbin "baserom.gba", 0x3E5D94, 0x50
-
-gUnknown_83E5DE4::
- .incbin "baserom.gba", 0x3E5DE4, 0x18
-
-gUnknown_83E5DFC::
- .incbin "baserom.gba", 0x3E5DFC, 0x18
-
-gUnknown_83E5E14::
- .incbin "baserom.gba", 0x3E5E14, 0x18
-
-gUnknown_83E5E2C:: @ 83E5E2C
- .incbin "baserom.gba", 0x3E5E2C, 0x18
-
-gUnknown_83E5E44:: @ 83E5E44
- .incbin "baserom.gba", 0x3E5E44, 0x2
-
-gUnknown_83E5E46:: @ 83E5E46
- .incbin "baserom.gba", 0x3E5E46, 0x1A
-
-gUnknown_83E5E60::
- .incbin "baserom.gba", 0x3E5E60, 0x54
-
-gUnknown_83E5EB4::
- .incbin "baserom.gba", 0x3E5EB4, 0x30
-
-gUnknown_83E5EE4::
- .incbin "baserom.gba", 0x3E5EE4, 0x18
-
-gUnknown_83E5EFC:: @ 83E5EFC
- .incbin "baserom.gba", 0x3E5EFC, 0x10
-
-gUnknown_83E5F0C:: @ 83E5F0C
- .incbin "baserom.gba", 0x3E5F0C, 0x2C
-
-gUnknown_83E5F38:: @ 83E5F38
- .incbin "baserom.gba", 0x3E5F38, 0x8C
-
-gUnknown_83E5FC4::
- .incbin "baserom.gba", 0x3E5FC4, 0x18
-
-gUnknown_83E5FDC::
- .incbin "baserom.gba", 0x3E5FDC, 0x2C
-
-gUnknown_83E6008::
- .incbin "baserom.gba", 0x3E6008, 0x50
-
-gUnknown_83E6058::
- .incbin "baserom.gba", 0x3E6058, 0x18
-
-gUnknown_83E6070::
- .incbin "baserom.gba", 0x3E6070, 0x18
-
-gUnknown_83E6088::
- .incbin "baserom.gba", 0x3E6088, 0x18
-
-gUnknown_83E60A0:: @ 83E60A0
- .incbin "baserom.gba", 0x3E60A0, 0x18
-
-gUnknown_83E60B8:: @ 83E60B8
- .incbin "baserom.gba", 0x3E60B8, 0x18
-
-gUnknown_83E60D0:: @ 83E60D0
- .incbin "baserom.gba", 0x3E60D0, 0x50
-
-gUnknown_83E6120:: @ 83E6120
- .incbin "baserom.gba", 0x3E6120, 0xB4
-
-gUnknown_83E61D4::
- .incbin "baserom.gba", 0x3E61D4, 0x30
-
-gUnknown_83E6204::
- .incbin "baserom.gba", 0x3E6204, 0x18
-
-gUnknown_83E621C::
- .incbin "baserom.gba", 0x3E621C, 0x5C
-
-gUnknown_83E6278:: @ 83E6278
- .incbin "baserom.gba", 0x3E6278, 0x18
-
-gUnknown_83E6290::
- .incbin "baserom.gba", 0x3E6290, 0x18
-
-gUnknown_83E62A8:: @ 83E62A8
- .incbin "baserom.gba", 0x3E62A8, 0xA0
-
-gUnknown_83E6348::
- .incbin "baserom.gba", 0x3E6348, 0x18
-
-gUnknown_83E6360::
- .incbin "baserom.gba", 0x3E6360, 0x2C
-
-gUnknown_83E638C::
- .incbin "baserom.gba", 0x3E638C, 0x18
-
-gUnknown_83E63A4::
- .incbin "baserom.gba", 0x3E63A4, 0x3C
-
-gUnknown_83E63E0:: @ 83E63E0
- .incbin "baserom.gba", 0x3E63E0, 0x18
-
-gUnknown_83E63F8::
- .incbin "baserom.gba", 0x3E63F8, 0x18
-
-gUnknown_83E6410::
- .incbin "baserom.gba", 0x3E6410, 0x18
-
-gUnknown_83E6428::
- .incbin "baserom.gba", 0x3E6428, 0x18
-
-gUnknown_83E6440::
- .incbin "baserom.gba", 0x3E6440, 0x3C
-
-gUnknown_83E647C::
- .incbin "baserom.gba", 0x3E647C, 0x28
-
-gUnknown_83E64A4::
- .incbin "baserom.gba", 0x3E64A4, 0x18
-
-gUnknown_83E64BC::
- .incbin "baserom.gba", 0x3E64BC, 0x18
-
-gUnknown_83E64D4:: @ 83E64D4
- .incbin "baserom.gba", 0x3E64D4, 0x14
-
-gUnknown_83E64E8::
- .incbin "baserom.gba", 0x3E64E8, 0x18
-
-gUnknown_83E6500:: @ 83E6500
- .incbin "baserom.gba", 0x3E6500, 0x14
-
-gUnknown_83E6514::
- .incbin "baserom.gba", 0x3E6514, 0x18
-
-gUnknown_83E652C:: @ 83E652C
- .incbin "baserom.gba", 0x3E652C, 0x78
-
-gUnknown_83E65A4:: @ 83E65A4
- .incbin "baserom.gba", 0x3E65A4, 0x18
-
-gUnknown_83E65BC::
- .incbin "baserom.gba", 0x3E65BC, 0xA0
-
-gUnknown_83E665C::
- .incbin "baserom.gba", 0x3E665C, 0x18
-
-gUnknown_83E6674::
- .incbin "baserom.gba", 0x3E6674, 0x6C
-
-gUnknown_83E66E0::
- .incbin "baserom.gba", 0x3E66E0, 0x18
-
-gUnknown_83E66F8::
- .incbin "baserom.gba", 0x3E66F8, 0x18
-
-gUnknown_83E6710::
- .incbin "baserom.gba", 0x3E6710, 0x18
-
-gUnknown_83E6728::
- .incbin "baserom.gba", 0x3E6728, 0x18
-
-gUnknown_83E6740::
- .incbin "baserom.gba", 0x3E6740, 0x18
-
-gUnknown_83E6758::
- .incbin "baserom.gba", 0x3E6758, 0x34
-
-gUnknown_83E678C::
- .incbin "baserom.gba", 0x3E678C, 0x34
-
-gUnknown_83E67C0::
- .incbin "baserom.gba", 0x3E67C0, 0x18
-
-gUnknown_83E67D8::
- .incbin "baserom.gba", 0x3E67D8, 0x18
-
-gUnknown_83E67F0::
- .incbin "baserom.gba", 0x3E67F0, 0x18
-
-gUnknown_83E6808::
- .incbin "baserom.gba", 0x3E6808, 0x18
-
-gUnknown_83E6820::
- .incbin "baserom.gba", 0x3E6820, 0x44
-
-gUnknown_83E6864::
- .incbin "baserom.gba", 0x3E6864, 0x18
-
-gUnknown_83E687C::
- .incbin "baserom.gba", 0x3E687C, 0x18
-
-gUnknown_83E6894::
- .incbin "baserom.gba", 0x3E6894, 0x18
-
-gUnknown_83E68AC::
- .incbin "baserom.gba", 0x3E68AC, 0x54
-
-gUnknown_83E6900::
- .incbin "baserom.gba", 0x3E6900, 0x48
-
-gUnknown_83E6948::
- .incbin "baserom.gba", 0x3E6948, 0x34
-
-gUnknown_83E697C::
- .incbin "baserom.gba", 0x3E697C, 0x30
-
-gUnknown_83E69AC::
- .incbin "baserom.gba", 0x3E69AC, 0x74
-
-gUnknown_83E6A20::
- .incbin "baserom.gba", 0x3E6A20, 0x18
-
-gUnknown_83E6A38::
- .incbin "baserom.gba", 0x3E6A38, 0x18
-
-gUnknown_83E6A50::
- .incbin "baserom.gba", 0x3E6A50, 0x34
-
-gUnknown_83E6A84::
- .incbin "baserom.gba", 0x3E6A84, 0x34
-
-gUnknown_83E6AB8::
- .incbin "baserom.gba", 0x3E6AB8, 0x18
-
-gUnknown_83E6AD0::
- .incbin "baserom.gba", 0x3E6AD0, 0x18
-
+gUnknown_83E5BA0:: @ 83E5BA0
+ .incbin "baserom.gba", 0x3E5BA0, 0x18
diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s
index 8f5348fd2..cf4cf25cb 100644
--- a/data/battle_anim_scripts.s
+++ b/data/battle_anim_scripts.s
@@ -924,11 +924,11 @@ Move_LEECH_SEED:: @ 81C7C23
Move_EMBER:: @ 81C7C79
loadspritegfx 10029
loopsewithpan SE_W052, 192, 5, 2
- createsprite gUnknown_83E5D4C, ANIM_TARGET, 2, 20, 0, -16, 24, 20, 1
+ createsprite gEmberSpriteTemplate, ANIM_TARGET, 2, 20, 0, -16, 24, 20, 1
delay 4
- createsprite gUnknown_83E5D4C, ANIM_TARGET, 2, 20, 0, 0, 24, 20, 1
+ createsprite gEmberSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 24, 20, 1
delay 4
- createsprite gUnknown_83E5D4C, ANIM_TARGET, 2, 20, 0, 16, 24, 20, 1
+ createsprite gEmberSpriteTemplate, ANIM_TARGET, 2, 20, 0, 16, 24, 20, 1
delay 16
playsewithpan SE_W172, 63
call gUnknown_81C7CD5
@@ -937,7 +937,7 @@ Move_EMBER:: @ 81C7C79
end
gUnknown_81C7CD5:: @ 81C7CD5
- createsprite gUnknown_83E5D64, ANIM_TARGET, 2, -24, 24, 24, 24, 20, 1, 1
+ createsprite gEmberFlareSpriteTemplate, ANIM_TARGET, 2, -24, 24, 24, 24, 20, 1, 1
delay 4
return
@@ -949,7 +949,7 @@ Move_MEGA_PUNCH:: @ 81C7CED
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 16, 0
setalpha 12, 8
playsewithpan SE_W025, 63
- createsprite gUnknown_83E67C0, ANIM_ATTACKER, 3, 0, 0, 0, 50
+ createsprite gMegaPunchKickSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 50
createvisualtask sub_80BA7F8, 10, 4, 2, 0, 7, 32767
delay 50
call gUnknown_81C7D89
@@ -997,7 +997,7 @@ Move_MEGA_KICK:: @ 81C7DC7
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 16, 0
setalpha 12, 8
playsewithpan SE_W025, 63
- createsprite gUnknown_83E67C0, ANIM_ATTACKER, 3, 0, 0, 1, 50
+ createsprite gMegaPunchKickSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 50
createvisualtask sub_80BA7F8, 10, 4, 2, 0, 7, 32767
delay 50
playsewithpan SE_W025B, 63
@@ -1031,12 +1031,12 @@ gUnknown_81C7E77:: @ 81C7E77
gUnknown_81C7E91:: @ 81C7E91
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, -8, 1, 2
- createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, -8, 0, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -8, 0, 8, 1, 0
goto gUnknown_81C7E77
gUnknown_81C7EB6:: @ 81C7EB6
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, -8, 1, 2
- createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0
goto gUnknown_81C7E77
Move_SONIC_BOOM:: @ 81C7EDB
@@ -1172,24 +1172,24 @@ gUnknown_81C81E3:: @ 81C81E3
gUnknown_81C81E8:: @ 81C81E8
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -20, -20, 1, 2
- createsprite gUnknown_83E6710, ANIM_TARGET, 3, -20, -12, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, -20, -12, 8, 1, 0
createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1
playsewithpan SE_W233B, 63
delay 8
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 8, 0, 1, 2
- createsprite gUnknown_83E6710, ANIM_TARGET, 3, 8, 8, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 8, 8, 8, 1, 0
createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1
playsewithpan SE_W233B, 63
goto gUnknown_81C81E3
gUnknown_81C8259:: @ 81C8259
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 12, -20, 1, 2
- createsprite gUnknown_83E6710, ANIM_TARGET, 3, 12, -12, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 12, -12, 8, 1, 0
createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1
playsewithpan SE_W233B, 63
delay 8
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -12, 0, 1, 2
- createsprite gUnknown_83E6710, ANIM_TARGET, 3, -12, 8, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, -12, 8, 8, 1, 0
createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1
playsewithpan SE_W233B, 63
goto gUnknown_81C81E3
@@ -1283,7 +1283,7 @@ Move_REVERSAL:: @ 81C8445
delay 8
playsewithpan SE_W233B, 63
createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 32767, 8, 0, 0
- createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 10, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 10, 1, 0
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1
createvisualtask sub_8099BD4, 5, 0, 1, 8, 1, 0
end
@@ -1383,7 +1383,7 @@ Move_DIZZY_PUNCH:: @ 81C86FC
monbg 1
setalpha 12, 8
call gUnknown_81C8817
- createsprite gUnknown_83E6710, ANIM_TARGET, 5, 16, 8, 20, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 5, 16, 8, 20, 1, 0
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 16, 0, 1, 1
playsewithpan SE_W004, 63
createsprite gUnknown_83E67F0, ANIM_TARGET, 3, 16, 8, 160, -32
@@ -1394,7 +1394,7 @@ Move_DIZZY_PUNCH:: @ 81C86FC
createsprite gUnknown_83E67F0, ANIM_TARGET, 3, 16, 8, -384, -31
delay 10
call gUnknown_81C8817
- createsprite gUnknown_83E6710, ANIM_TARGET, 5, -16, -8, 20, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 5, -16, -8, 20, 1, 0
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -16, -16, 1, 1
playsewithpan SE_W233B, 63
createsprite gUnknown_83E67F0, ANIM_TARGET, 3, -16, -8, 160, -32
@@ -3196,7 +3196,7 @@ gUnknown_81CB11E:: @ 81CB11E
playsewithpan SE_W026, 192
delay 6
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1
- createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0
playsewithpan SE_W004, 63
createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1
waitforvisualfinish
@@ -3523,7 +3523,7 @@ Move_HEAT_WAVE:: @ 81CB766
loadspritegfx 10261
createvisualtask AnimTask_BlendParticle, 5, 10261, 0, 6, 6, 31
createvisualtask AnimTask_LoadSandstormBackground, 5, 1
- createvisualtask sub_80ADAA4, 6, 6, 31
+ createvisualtask AnimTask_BlendBackground, 6, 6, 31
panse_1B SE_W257, 192, 63, 2, 0
delay 4
createvisualtask sub_80AD800, 5,
@@ -3548,7 +3548,7 @@ Move_HAIL:: @ 81CB816
loadspritegfx 10141
createvisualtask sub_80BA7F8, 10, 1, 3, 0, 6, 0
waitforvisualfinish
- createvisualtask sub_80B038C, 5,
+ createvisualtask AnimTask_Hail1, 5,
loopsewithpan SE_W258, 0, 8, 10
waitforvisualfinish
createvisualtask sub_80BA7F8, 10, 1, 3, 6, 0, 0
@@ -3776,20 +3776,20 @@ gUnknown_81CBC47:: @ 81CBC47
delay 4
delay 1
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -18, -18, 1, 1
- createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, -18, -18, 10, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, -18, -18, 10, 1, 0
playsewithpan SE_W233, 63
delay 20
createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 3, 8
delay 5
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, 18, 1, 1
- createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 18, 18, 10, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, 18, 18, 10, 1, 0
playsewithpan SE_W233, 63
delay 20
createvisualtask AnimTask_WindUpLunge, 2, 0, -24, 0, 24, 10, 24, 3
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 6, 0
delay 37
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1
- createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 0, 0, 10, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 10, 1, 0
playsewithpan SE_W233B, 63
waitforvisualfinish
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 6, 0, 0
@@ -3805,20 +3805,20 @@ gUnknown_81CBD16:: @ 81CBD16
createsprite gUnknown_83E6808, ANIM_ATTACKER, 3, 1, 0, 0, 90, 10
delay 1
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -18, -18, 1, 1
- createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, -18, -18, 10, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, -18, -18, 10, 1, 0
playsewithpan SE_W233, 63
delay 20
createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 3, 8
delay 5
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, 18, 1, 1
- createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 18, 18, 10, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, 18, 18, 10, 1, 0
playsewithpan SE_W233, 63
delay 20
createvisualtask AnimTask_WindUpLunge, 2, 0, -24, 0, 24, 10, 24, 3
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 6, 0
delay 37
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1
- createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 0, 0, 10, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 10, 1, 0
playsewithpan SE_W233B, 63
waitforvisualfinish
createsprite gUnknown_83E6820, ANIM_ATTACKER, 2, 1, 0, -8, -12
@@ -4026,7 +4026,7 @@ Move_MIST_BALL:: @ 81CC212
createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 1, 1, 32279, 16, 32767, 16
delay 0
playsewithpan SE_W114, 0
- createvisualtask sub_80AFD80, 5,
+ createvisualtask AnimTask_LoadMistTiles, 5,
createvisualtask sub_80BA7F8, 10, 4, 3, 0, 16, 32767
delay 8
createvisualtask AnimTask_ShakeMon, 2, 1, 4, 0, 70, 0
@@ -4154,7 +4154,7 @@ Move_NEEDLE_ARM:: @ 81CC513
waitforvisualfinish
createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 18, 1
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1
- createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0
playsewithpan SE_W233B, 63
createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 1, 0, -24, 10
createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 1, 17, -17, 10
@@ -4379,7 +4379,7 @@ Move_SHADOW_PUNCH:: @ 81CCB76
playsewithpan SE_W026, 192
delay 6
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1
- createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0
playsewithpan SE_W004, 63
createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1
waitforvisualfinish
@@ -4749,7 +4749,7 @@ Move_ICE_PUNCH:: @ 81CD2E0
createsprite gUnknown_83E6348, ANIM_ATTACKER, 2, 160
createsprite gUnknown_83E6348, ANIM_ATTACKER, 2, 224
delay 17
- createsprite gUnknown_83E6710, ANIM_ATTACKER, 4, 0, -10, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 4, 0, -10, 8, 1, 0
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, 1, 1
playsewithpan SE_W004, 63
delay 2
@@ -4914,7 +4914,7 @@ Move_THUNDER_PUNCH:: @ 81CD6CA
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 16, 0
waitforvisualfinish
playsewithpan SE_W004, 63
- createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1
delay 1
createvisualtask sub_80BA0E8, 2, 257, 257, 257
@@ -6661,19 +6661,19 @@ gUnknown_81CFEEB:: @ 81CFEEB
end
gUnknown_81CFEF0:: @ 81CFEF0
- createsprite gUnknown_83E6710, ANIM_TARGET, 4, -16, -8, 20, 1, 1
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, -16, -8, 20, 1, 1
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -16, -16, 1, 2
createvisualtask AnimTask_ShakeMon, 5, 1, 4, 0, 6, 1
goto gUnknown_81CFEEB
gUnknown_81CFF26:: @ 81CFF26
- createsprite gUnknown_83E6710, ANIM_TARGET, 4, 8, 8, 20, 1, 1
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 8, 8, 20, 1, 1
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, 0, 1, 2
createvisualtask AnimTask_ShakeMon, 5, 1, 4, 0, 6, 1
goto gUnknown_81CFEEB
gUnknown_81CFF5C:: @ 81CFF5C
- createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 20, 1, 1
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 20, 1, 1
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, -8, 1, 1
createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1
goto gUnknown_81CFEEB
@@ -6687,7 +6687,7 @@ Move_DYNAMIC_PUNCH:: @ 81CFF92
monbg 3
setalpha 12, 8
playsewithpan SE_W233B, 63
- createsprite gUnknown_83E6710, ANIM_TARGET, 3, 0, 0, 20, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 20, 1, 0
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0
createvisualtask AnimTask_ShakeMon, 5, 1, 5, 0, 7, 1
delay 1
@@ -6726,17 +6726,17 @@ Move_COUNTER:: @ 81D005A
playsewithpan SE_W233B, 63
delay 1
createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 25, 1
- createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, -15, 18, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -15, 18, 8, 1, 0
delay 3
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, -4, 1, 0
playsewithpan SE_W233B, 63
delay 1
- createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, 0, -4, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 0, -4, 8, 1, 0
delay 3
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 15, 9, 1, 0
playsewithpan SE_W233B, 63
delay 1
- createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, 15, 9, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 15, 9, 8, 1, 0
delay 5
createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5
waitforvisualfinish
@@ -6775,7 +6775,7 @@ Move_ROCK_SMASH:: @ 81D01A4
setalpha 12, 8
delay 1
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1
- createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 0, 0, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 8, 1, 0
playsewithpan SE_W233B, 63
createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 5, 1
waitforvisualfinish
@@ -7050,7 +7050,7 @@ gUnknown_81D086C:: @ 81D086C
Move_HAZE:: @ 81D0882
waitforvisualfinish
playsewithpan SE_W114, 0
- createvisualtask sub_80AFAE4, 5,
+ createvisualtask AnimTask_Haze1, 5,
delay 30
createvisualtask sub_80BA7F8, 10, 1920, 2, 0, 16, 0
delay 90
@@ -7070,7 +7070,7 @@ Move_FIRE_PUNCH:: @ 81D08B5
createsprite gUnknown_83E5BE0, ANIM_TARGET, 1, 196
playsewithpan SE_W172, 63
waitforvisualfinish
- createsprite gUnknown_83E6710, ANIM_TARGET, 3, 0, 0, 8, 1, 0
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 8, 1, 0
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 1
createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 15, 1
call gUnknown_81D0950
@@ -9935,7 +9935,7 @@ Move_MAGICAL_LEAF:: @ 81D4E6D
Move_ICE_BALL:: @ 81D4F8E
loadspritegfx 10043
loadspritegfx 10141
- createvisualtask sub_80B0870, 5, 0
+ createvisualtask AnimTask_GetRolloutCounter, 5, 0
jumpargeq 0, 4, gUnknown_81D5005
gUnknown_81D4FA5:: @ 81D4FA5
@@ -9943,7 +9943,7 @@ gUnknown_81D4FA5:: @ 81D4FA5
createsprite gUnknown_83E665C, ANIM_TARGET, 2, 15, 0, -12, -16, 30, -40
delay 28
playsewithpan SE_W280, 63
- createvisualtask sub_80B0870, 5, 0
+ createvisualtask AnimTask_GetRolloutCounter, 5, 0
jumpargeq 0, 0, gUnknown_81D5016
jumpargeq 0, 1, gUnknown_81D5045
jumpargeq 0, 2, gUnknown_81D507E
@@ -9951,7 +9951,7 @@ gUnknown_81D4FA5:: @ 81D4FA5
jumpargeq 0, 4, gUnknown_81D5109
gUnknown_81D4FF3:: @ 81D4FF3
- createvisualtask sub_80B0870, 5, 0
+ createvisualtask AnimTask_GetRolloutCounter, 5, 0
jumpargeq 0, 4, gUnknown_81D500C
gUnknown_81D5004:: @ 81D5004
@@ -10272,88 +10272,88 @@ gUnknown_81D5712:: @ 81D5712
return
gUnknown_81D575B:: @ 81D575B
- createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, 10, 10, 0
+ createsprite gPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 10, 10, 0
playsewithpan SE_W092, 63
delay 6
- createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, 20, -20, 0
+ createsprite gPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, -20, 0
playsewithpan SE_W092, 63
delay 6
- createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, -20, 15, 0
+ createsprite gPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, -20, 15, 0
playsewithpan SE_W092, 63
delay 6
- createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, 0, 0, 0
+ createsprite gPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0
playsewithpan SE_W092, 63
delay 6
- createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, -20, -20, 0
+ createsprite gPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, -20, -20, 0
playsewithpan SE_W092, 63
delay 6
- createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, 16, -8, 0
+ createsprite gPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 16, -8, 0
playsewithpan SE_W092, 63
return
gUnknown_81D57CC:: @ 81D57CC
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 10, 10, 0
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 0
playsewithpan SE_W145C, 63
delay 6
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 20, -20, 0
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 20, -20, 0
playsewithpan SE_W145C, 63
delay 6
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -20, 15, 0
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, -20, 15, 0
playsewithpan SE_W145C, 63
delay 6
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 0, 0, 0
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 0
playsewithpan SE_W145C, 63
delay 6
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -20, -20, 0
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, -20, -20, 0
playsewithpan SE_W145C, 63
delay 6
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 16, -8, 0
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 16, -8, 0
playsewithpan SE_W145C, 63
return
gUnknown_81D583D:: @ 81D583D
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 10, 10, 1
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 1
playsewithpan SE_W145C, 63
delay 6
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -28, -10, 1
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, -28, -10, 1
playsewithpan SE_W145C, 63
delay 6
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 20, -20, 1
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 20, -20, 1
playsewithpan SE_W145C, 63
delay 6
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -20, 15, 1
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, -20, 15, 1
playsewithpan SE_W145C, 63
delay 6
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 0, 0, 1
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1
playsewithpan SE_W145C, 63
delay 6
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 27, 8, 1
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 27, 8, 1
playsewithpan SE_W145C, 63
delay 6
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -20, -20, 1
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, -20, -20, 1
playsewithpan SE_W145C, 63
delay 6
- createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 16, -8, 1
+ createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 16, -8, 1
playsewithpan SE_W145C, 63
return
gUnknown_81D58D4:: @ 81D58D4
playsewithpan SE_W085B, 63
- createsprite gUnknown_83E6088, ANIM_TARGET, 2, 5, 0, 5, 0
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0
delay 2
- createsprite gUnknown_83E6088, ANIM_TARGET, 2, -5, 10, 5, 1
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1
delay 2
- createsprite gUnknown_83E6088, ANIM_TARGET, 2, 15, 20, 5, 2
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2
delay 2
- createsprite gUnknown_83E6088, ANIM_TARGET, 2, -15, -10, 5, 0
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0
delay 2
- createsprite gUnknown_83E6088, ANIM_TARGET, 2, 25, 0, 5, 1
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1
delay 2
- createsprite gUnknown_83E6088, ANIM_TARGET, 2, -8, 8, 5, 2
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2
delay 2
- createsprite gUnknown_83E6088, ANIM_TARGET, 2, 2, -8, 5, 0
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0
delay 2
- createsprite gUnknown_83E6088, ANIM_TARGET, 2, -20, 15, 5, 1
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1
return
gUnknown_81D595F:: @ 81D595F
diff --git a/data/data_8471F00.s b/data/data_8471F00.s
index 82d507ea1..62a23c646 100644
--- a/data/data_8471F00.s
+++ b/data/data_8471F00.s
@@ -191,30 +191,6 @@ gUnknown_8478EC4:: @ 8478EC4
gUnknown_8478F14:: @ 8478F14
.incbin "baserom.gba", 0x478F14, 0x8
-gUnknown_8478F1C:: @ 8478F1C
- .incbin "baserom.gba", 0x478F1C, 0x144
-
-gUnknown_8479060:: @ 8479060
- .incbin "baserom.gba", 0x479060, 0x78
-
-gUnknown_84790D8:: @ 84790D8
- .incbin "baserom.gba", 0x4790D8, 0xC0
-
-gUnknown_8479198:: @ 8479198
- .incbin "baserom.gba", 0x479198, 0x10
-
-gUnknown_84791A8:: @ 84791A8
- .incbin "baserom.gba", 0x4791A8, 0x10
-
-gUnknown_84791B8:: @ 84791B8
- .incbin "baserom.gba", 0x4791B8, 0x14
-
-gUnknown_84791CC:: @ 84791CC
- .incbin "baserom.gba", 0x4791CC, 0x1C
-
-gUnknown_84791E8:: @ 84791E8
- .incbin "baserom.gba", 0x4791E8, 0x18
-
.section .rodata.8479668
.align 2
diff --git a/data/field_weather.s b/data/field_weather.s
index 517480d9a..03b3e8faa 100644
--- a/data/field_weather.s
+++ b/data/field_weather.s
@@ -25,7 +25,7 @@ gUnknown_83C2D00:: @ 83C2D00
gUnknown_83C2D20:: @ 83C2D20
.incbin "baserom.gba", 0x3C2D20, 0x820
-gUnknown_83C3540:: @ 83C3540
+gWeatherFog1Tiles:: @ 83C3540
.incbin "baserom.gba", 0x3C3540, 0x3080
gUnknown_83C65C0:: @ 83C65C0
diff --git a/data/graphics.s b/data/graphics.s
index 7ead75c74..5eacc0cb2 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -13760,7 +13760,7 @@ gFile_graphics_battle_anims_sprites_277_sheet:: @ 8E7EE00
.incbin "graphics/battle_anims/sprites/277.4bpp.lz"
.align 2
-gFile_graphics_battle_anims_backgrounds_fog_tilemap:: @ 8E7F1F4
+gBattleAnimFogTilemap:: @ 8E7F1F4
.incbin "graphics/battle_anims/backgrounds/fog.bin.lz"
.align 2
diff --git a/include/battle.h b/include/battle.h
index 122ccc894..00f7dcea9 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -664,7 +664,7 @@ extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
extern void (*gPreBattleCallback1)(void);
extern bool8 gDoingBattleAnim;
-extern void *gUnknown_3005EE0[];
+extern u8 *gUnknown_3005EE0[MAX_BATTLERS_COUNT];
extern u8 *gUnknown_2022BB8;
extern u8 *gUnknown_2022BBC;
extern void (*gBattleMainFunc)(void);
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 9db123f91..ad1a0fed8 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -57,46 +57,53 @@ extern s32 gAnimMoveDmg;
extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT];
extern u8 gUnknown_2037F24;
-extern struct OamData gOamData_83ACA40;
-extern struct OamData gOamData_83AC9C8;
-extern struct OamData gOamData_83ACA38;
-extern struct OamData gOamData_83AC9D0;
-extern struct OamData gOamData_83AC9F8;
-extern struct OamData gOamData_83AC9D8;
-extern struct OamData gOamData_83ACB58;
-extern struct OamData gOamData_83ACAF8;
-extern struct OamData gOamData_83ACB60;
-extern struct OamData gOamData_83ACA30;
-extern struct OamData gOamData_83ACA98;
-extern struct OamData gOamData_83ACA90;
-extern struct OamData gOamData_83ACAF0;
-extern struct OamData gOamData_83ACB10;
-extern struct OamData gOamData_83ACB18;
-extern struct OamData gOamData_83ACB38;
-extern struct OamData gOamData_83ACA18;
-extern struct OamData gOamData_83ACB20;
-extern struct OamData gOamData_83ACB50;
-extern struct OamData gOamData_83ACAB8;
-extern struct OamData gOamData_83ACA00;
-extern struct OamData gOamData_83ACBC0;
-extern struct OamData gOamData_83ACB00;
-extern struct OamData gOamData_83AC9E0;
-extern struct OamData gOamData_83ACA20;
-extern struct OamData gOamData_83ACA80;
-extern struct OamData gOamData_83ACAA0;
-
+extern const struct OamData gOamData_83AC9C8;
+extern const struct OamData gOamData_83AC9D0;
+extern const struct OamData gOamData_83AC9D8;
+extern const struct OamData gOamData_83AC9E0;
+extern const struct OamData gOamData_83AC9F8;
+extern const struct OamData gOamData_83ACA00;
+extern const struct OamData gOamData_83ACA18;
+extern const struct OamData gOamData_83ACA20;
+extern const struct OamData gOamData_83ACA30;
+extern const struct OamData gOamData_83ACA38;
+extern const struct OamData gOamData_83ACA40;
+extern const struct OamData gOamData_83ACA80;
+extern const struct OamData gOamData_83ACA90;
+extern const struct OamData gOamData_83ACA98;
+extern const struct OamData gOamData_83ACAA0;
+extern const struct OamData gOamData_83ACAB8;
+extern const struct OamData gOamData_83ACAC8;
+extern const struct OamData gOamData_83ACAE8;
+extern const struct OamData gOamData_83ACAF0;
+extern const struct OamData gOamData_83ACAF8;
+extern const struct OamData gOamData_83ACB00;
+extern const struct OamData gOamData_83ACB10;
+extern const struct OamData gOamData_83ACB18;
+extern const struct OamData gOamData_83ACB20;
+extern const struct OamData gOamData_83ACB28;
+extern const struct OamData gOamData_83ACB38;
+extern const struct OamData gOamData_83ACB48;
+extern const struct OamData gOamData_83ACB50;
+extern const struct OamData gOamData_83ACB58;
+extern const struct OamData gOamData_83ACB60;
+extern const struct OamData gOamData_83ACB88;
+extern const struct OamData gOamData_83ACBC0;
+extern const struct OamData gOamData_83ACBE8;
+
+// battle_anim.s
+void MoveBattlerSpriteToBG(u8 battlerId, u8);
+void sub_8073128(u8);
void ClearBattleAnimationVars(void);
void DoMoveAnim(u16 move);
void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim);
void DestroyAnimSprite(struct Sprite *sprite);
void DestroyAnimVisualTask(u8 taskId);
void DestroyAnimSoundTask(u8 taskId);
-bool8 IsAnimBankSpriteVisible(u8 bank);
-void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible);
+bool8 IsAnimBankSpriteVisible(u8 battlerId);
bool8 IsContest(void);
s8 BattleAnimAdjustPanning(s8 pan);
s8 BattleAnimAdjustPanning2(s8 pan);
-s16 sub_80A52EC(s16 a);
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
bool8 IsBattlerSpriteVisible(u8 battlerId);
s16 KeepPanInRange(s16 a, s32 oldPan);
@@ -135,23 +142,6 @@ enum
BATTLER_COORD_ATTR_RAW_BOTTOM,
};
-u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId);
-
-bool8 IsBankSpritePresent(u8 battlerId);
-void sub_80A6C68(u8 arg0);
-u8 GetAnimBattlerSpriteId(u8 wantedBank);
-bool8 IsDoubleBattle(void);
-u8 sub_80A6D94(void);
-u8 sub_80A8364(u8);
-void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite *));
-void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite);
-u8 GetBattlerSpriteDefault_Y(u8 battlerId);
-u8 sub_80A82E4(u8 battlerId);
-u8 GetSubstituteSpriteDefault_Y(u8 battlerId);
-u8 GetGhostSpriteDefault_Y(u8 battlerId);
-void MoveBattlerSpriteToBG(u8 battlerId, u8);
-void sub_8073128(u8);
-
// battle_anim_status_effects.s
#define STAT_ANIM_PLUS1 15
#define STAT_ANIM_PLUS2 39
@@ -245,7 +235,7 @@ u8 sub_8075D80(u8 a1);
void AnimSpriteOnMonPos(struct Sprite *sprite);
void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite);
void AnimThrowProjectile(struct Sprite *sprite);
-void sub_8075F0C(struct Sprite *sprite);
+void AnimSnoreZ(struct Sprite *sprite);
s16 CloneBattlerSpriteWithBlend(u8 animBattler);
void obj_delete_but_dont_free_vram(struct Sprite *sprite);
void sub_8076048(u8 taskId);
@@ -293,6 +283,7 @@ void sub_8099BD4(u8 taskId);
// normal.c
extern const struct SpriteTemplate gUnknown_83E7C98;
+extern const struct SpriteTemplate gBasicHitSplatSpriteTemplate;
u32 UnpackSelectedBattleAnimPalettes(s16 selector);
void sub_80B9BDC(u8 taskId);
@@ -353,12 +344,35 @@ void sub_80B194C(u8 taskId);
void sub_80B1D3C(struct Sprite *sprite);
void sub_80B2868(u8 taskId);
-// water.s
-extern const union AnimCmd *const gUnknown_83E5958[];
+// fighting.c
+void sub_80B1530(u8 taskId);
+
+// ice.c
+void AnimTask_Haze1(u8 taskId);
+void AnimTask_LoadMistTiles(u8 taskId);
+void AnimTask_Hail1(u8 taskId);
+void AnimTask_GetRolloutCounter(u8 taskId);
-// fire.s
+// electric.c
+void sub_80AE220(u8 taskId);
+void sub_80AE540(u8 taskId);
+void sub_80AE8A0(u8 taskId);
+void sub_80AEA10(u8 taskId);
+void sub_80AECE0(u8 taskId);
+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[];
+
// battle_anim_utility_funcs.c
void sub_80BA7F8(u8 taskId);
void sub_80BA83C(u8 taskId);
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index 96f57c78a..06a0e2957 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -203,7 +203,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringId);
void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringId);
void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2);
void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
-void BtlController_EmitChooseItem(u8 bufferId, u8* arg1);
+void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1);
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4);
void BtlController_EmitHealthBarUpdate(u8 bufferId, u16 hpValue);
void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints);
@@ -221,7 +221,7 @@ void BtlController_EmitPlayFanfare(u8 bufferId, u16 songId);
void BtlController_EmitFaintingCry(u8 bufferId);
void BtlController_EmitIntroSlide(u8 bufferId, u8 terrainId);
void BtlController_EmitIntroTrainerBallThrow(u8 bufferId);
-void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2);
+void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus *hpAndStatus, u8 arg2);
void BtlController_EmitHidePartyStatusSummary(u8 bufferId);
void BtlController_EmitEndBounceEffect(u8 bufferId);
void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
@@ -246,21 +246,16 @@ void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1);
void MoveSelectionDestroyCursorAt(u8 cursorPos);
void HandleInputChooseMove(void);
-// recorded player controller
-void SetControllerToRecordedPlayer(void);
-
// opponent controller
void SetControllerToOpponent(void);
void OpponentBufferExecCompleted(void);
-// player partner controller
-void SetControllerToPlayerPartner(void);
-
// safari controller
void SetControllerToSafari(void);
// pokedude controller
-void SetControllerToPokeDude(void);
+void SetControllerToPokedude(void);
+void InitPokedudePartyAndOpponent(void);
// oak and old man controller
void SetControllerToOakOrOldMan(void);
@@ -273,10 +268,10 @@ void sub_80E7988(void);
void sub_80EB30C(void);
void sub_80EB524(void);
-// link opponent
+// link opponent controller
void SetControllerToLinkOpponent(void);
-// link partner
+// link partner controller
void SetControllerToLinkPartner(void);
#endif // GUARD_BATTLE_CONTROLLERS_H
diff --git a/include/gba/macro.h b/include/gba/macro.h
index 01bb85b7a..e416c3577 100644
--- a/include/gba/macro.h
+++ b/include/gba/macro.h
@@ -110,12 +110,12 @@
u32 _size = size; \
while (1) \
{ \
- DmaFill##bit(dmaNum, 0, dest, (block)); \
- dest += (block); \
+ DmaFill##bit(dmaNum, 0, dest, (block)); \
+ dest += (block); \
_size -= (block); \
if (_size <= (block)) \
{ \
- DmaFill##bit(dmaNum, 0, dest, _size); \
+ DmaFill##bit(dmaNum, 0, dest, _size); \
break; \
} \
} \
@@ -123,16 +123,16 @@
#define DmaFillLarge(dmaNum, value, dest, size, block, bit) \
{ \
- void *_dest = (void *)dest; \
+ void *_dest = (void *)dest; \
u32 _size = size; \
while (1) \
{ \
- DmaFill##bit(dmaNum, value, _dest, (block)); \
+ DmaFill##bit(dmaNum, value, _dest, (block)); \
_dest += (block); \
_size -= (block); \
if (_size <= (block)) \
{ \
- DmaFill##bit(dmaNum, value, _dest, _size); \
+ DmaFill##bit(dmaNum, value, _dest, _size); \
break; \
} \
} \
@@ -162,7 +162,7 @@
#define DmaFillDefvars(dmaNum, value, dest, size, bit) \
{ \
- void *_dest = (void *)dest; \
+ void *_dest = (void *)dest; \
u32 _size = size; \
DmaFill##bit(dmaNum, value, _dest, _size); \
}
diff --git a/include/graphics.h b/include/graphics.h
index c057da386..354339235 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2915,7 +2915,6 @@ extern const u8 gBerryFixWindow_Tilemap[];
extern const u8 gBerryFixWindow_Pal[];
// item_pc
-
extern const u8 gItemPcTiles[];
extern const u32 gItemPcBgPals[];
extern const u8 gItemPcTilemap[];
@@ -3736,6 +3735,11 @@ extern const u32 gSubstituteDollGfx[];
extern const u32 gSubstituteDollTilemap[];
extern const u32 gSubstituteDollPal[];
+// ice
+extern const u8 gWeatherFog1Tiles[];
+extern const u32 gBattleAnimFogTilemap[];
+extern const u16 gUnknown_83C2CE0[];
+
// credits
extern const u32 gCreditsPokeballBgGfxTiles[];
extern const u32 gCreditsPokeballBgGfxMap[];
diff --git a/include/party_menu.h b/include/party_menu.h
index 6c81a248c..19cdda1dc 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -89,5 +89,6 @@ void CB2_PartyMenuFromStartMenu(void);
void sub_8128198(void);
void sub_8127FF4(u8 slot, u8 slot2);
void LoadHeldItemIcons(void);
+void sub_8127968(void);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/quest_log_815A008.h b/include/quest_log_815A008.h
new file mode 100644
index 000000000..2577450a4
--- /dev/null
+++ b/include/quest_log_815A008.h
@@ -0,0 +1,9 @@
+#ifndef GUARD_QUEST_LOG_815A008_H
+#define GUARD_QUEST_LOG_815A008_H
+
+#include "global.h"
+
+void sub_815A008(struct QuestLog *);
+void sub_815A1F8(struct QuestLog *, struct MapObjectTemplate *);
+
+#endif //GUARD_QUEST_LOG_815A008_H
diff --git a/include/strings.h b/include/strings.h
index 6ad76e2fa..377b6ea39 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -243,6 +243,28 @@ extern const u8 gUnknown_83FDDEB[];
extern const u8 gUnknown_83FDCD2[];
extern const u8 gUnknown_83FE6FA[];
+// battle_controller_pokedude
+extern const u8 gUnknown_81C5F69[];
+extern const u8 gUnknown_81C5FA7[];
+extern const u8 gUnknown_81C5FDC[];
+extern const u8 gUnknown_81C601C[];
+extern const u8 gUnknown_81C60FA[];
+extern const u8 gUnknown_81C615A[];
+extern const u8 gUnknown_81C6196[];
+extern const u8 gUnknown_81C61EA[];
+extern const u8 gUnknown_81C6202[];
+extern const u8 gUnknown_81C6301[];
+extern const u8 gUnknown_81C63A9[];
+extern const u8 gUnknown_81C63F9[];
+extern const u8 gUnknown_81C6446[];
+extern const u8 gUnknown_81C657A[];
+extern const u8 gUnknown_81C6637[];
+extern const u8 gUnknown_81C6645[];
+extern const u8 gUnknown_81C66CF[];
+extern const u8 gUnknown_81C6787[];
+extern const u8 gUnknown_81C684B[];
+extern const u8 gUnknown_81C686C[];
+
// credits
extern const u8 gString_Dummy[];
extern const u8 gString_PokemonFireRed_Staff[]; // FR
diff --git a/include/unk_8159F40.h b/include/unk_8159F40.h
deleted file mode 100644
index 41db36aad..000000000
--- a/include/unk_8159F40.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef GUARD_UNK_8159F40_H
-#define GUARD_UNK_8159F40_H
-
-#include "global.h"
-
-void InitPokedudePartyAndOpponent(void);
-void sub_815A008(struct QuestLog *);
-void sub_815A1F8(struct QuestLog *, struct MapObjectTemplate *);
-
-#endif //GUARD_UNK_8159F40_H
diff --git a/ld_script.txt b/ld_script.txt
index d84a70c7a..50a3b3270 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -157,11 +157,11 @@ SECTIONS {
asm/battle_anim_effects_1.o(.text);
asm/battle_anim_effects_2.o(.text);
asm/water.o(.text);
- asm/fire.o(.text);
- asm/electric.o(.text);
- asm/ice.o(.text);
- asm/fighting.o(.text);
- asm/poison.o(.text);
+ src/fire.o(.text);
+ src/electric.o(.text);
+ src/ice.o(.text);
+ src/fighting.o(.text);
+ src/poison.o(.text);
src/flying.o(.text);
src/psychic.o(.text);
src/bug.o(.text);
@@ -276,8 +276,8 @@ SECTIONS {
src/text_window.o(.text);
src/quest_log_8150454.o(.text);
asm/dodrio_berry_picking.o(.text);
- asm/battle_controller_pokedude.o(.text);
- src/unk_8159F40.o(.text);
+ src/battle_controller_pokedude.o(.text);
+ src/quest_log_815A008.o(.text);
src/dodrio_berry_picking_2.o(.text);
asm/dodrio_berry_picking_2.o(.text);
src/teachy_tv.o(.text);
@@ -448,6 +448,11 @@ SECTIONS {
src/pokemon_size_record.o(.rodata);
src/item_use.o(.rodata);
data/battle_anim_effects_misc.o(.rodata);
+ src/fire.o(.rodata);
+ src/electric.o(.rodata);
+ src/ice.o(.rodata);
+ src/fighting.o(.rodata);
+ src/poison.o(.rodata);
src/flying.o(.rodata);
src/psychic.o(.rodata);
src/bug.o(.rodata);
@@ -547,7 +552,7 @@ SECTIONS {
src/text_window_graphics.o(.rodata);
src/quest_log_8150454.o(.rodata);
data/data_8471F00.o(.rodata);
- src/unk_8159F40.o(.rodata);
+ src/battle_controller_pokedude.o(.rodata);
src/teachy_tv.o(.rodata);
src/unk_815C980.o(.rodata);
data/data_8471F00.o(.rodata.8479668);
diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c
index 21d07246f..ffd66871c 100644
--- a/src/battle_anim_mon_movement.c
+++ b/src/battle_anim_mon_movement.c
@@ -888,7 +888,7 @@ void sub_8099BD4(u8 taskId)
gTasks[taskId].data[12] = 0;
gTasks[taskId].data[10] = gBattleAnimArgs[3];
gTasks[taskId].data[11] = gBattleAnimArgs[4];
- gTasks[taskId].data[7] = GetAnimBattlerSpriteId(1);
+ gTasks[taskId].data[7] = GetAnimBattlerSpriteId(ANIM_TARGET);
gTasks[taskId].data[8] = gSprites[gTasks[taskId].data[7]].pos2.x;
gTasks[taskId].data[9] = gSprites[gTasks[taskId].data[7]].pos2.y;
gTasks[taskId].data[0] = 0;
diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c
index c19af4cb7..a3bd26898 100644
--- a/src/battle_anim_mons.c
+++ b/src/battle_anim_mons.c
@@ -1393,7 +1393,7 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite)
void AnimThrowProjectile(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, 1);
- if (GetBattlerSide(gBattleAnimAttacker))
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
@@ -1409,7 +1409,7 @@ static void AnimThrowProjectile_Step(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_8075F0C(struct Sprite *sprite)
+void AnimSnoreZ(struct Sprite *sprite)
{
bool8 r4;
u8 battlerId, coordType;
@@ -1434,7 +1434,7 @@ void sub_8075F0C(struct Sprite *sprite)
InitSpritePosToAnimTarget(sprite, r4);
battlerId = gBattleAnimTarget;
}
- if (GetBattlerSide(gBattleAnimAttacker))
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
InitSpritePosToAnimTarget(sprite, r4);
sprite->data[0] = gBattleAnimArgs[4];
@@ -2070,7 +2070,7 @@ u8 sub_8076E34(s32 battlerId, u8 spriteId, s32 species)
void sub_8076ED8(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
- if (GetBattlerSide(gBattleAnimAttacker))
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->pos1.x -= gBattleAnimArgs[0];
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
@@ -2113,7 +2113,7 @@ void sub_8076F58(struct Sprite *sprite)
void sub_8076FD0(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
- if (GetBattlerSide(gBattleAnimAttacker))
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
sprite->pos1.x -= gBattleAnimArgs[0];
else
sprite->pos1.x += gBattleAnimArgs[0];
@@ -2210,7 +2210,7 @@ void sub_807729C(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
- if (!GetBattlerSide(gBattleAnimAttacker))
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
sprite->data[0] = 5;
else
sprite->data[0] = -10;
@@ -2237,7 +2237,7 @@ void sub_8077350(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[4];
sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[5];
- if (!GetBattlerSide(gBattleAnimTarget))
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
{
x = (u16)gBattleAnimArgs[4] + 30;
sprite->pos1.x += x;
diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c
index 14c5ef6c8..d9a6754c7 100644
--- a/src/battle_anim_utility_funcs.c
+++ b/src/battle_anim_utility_funcs.c
@@ -309,7 +309,7 @@ void sub_80BACEC(u8 taskId)
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
else
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
- spriteId = GetAnimBattlerSpriteId(0);
+ spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
newSpriteId = sub_8076E34(gBattleAnimAttacker, spriteId, species);
sub_80752A0(&animBgData);
AnimLoadCompressedBgTilemap(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_tilemap);
@@ -354,7 +354,7 @@ static void sub_80BAF38(u8 taskId)
SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
- sprite = &gSprites[GetAnimBattlerSpriteId(0)]; // unused
+ sprite = &gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)]; // unused
sprite = &gSprites[gTasks[taskId].data[0]];
DestroySprite(sprite);
sub_80752A0(&animBgData);
diff --git a/src/battle_controller_oak_old_man.c b/src/battle_controller_oak_old_man.c
index 99391ab3e..a6730cbbb 100644
--- a/src/battle_controller_oak_old_man.c
+++ b/src/battle_controller_oak_old_man.c
@@ -181,7 +181,7 @@ static void OakOldManBufferRunCommand(void)
{
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
- if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sOakOldManBufferCommands))
+ if (gBattleBufferA[gActiveBattler][0] < NELEMS(sOakOldManBufferCommands))
sOakOldManBufferCommands[gBattleBufferA[gActiveBattler][0]]();
else
OakOldManBufferExecCompleted();
@@ -463,7 +463,7 @@ static void sub_80E7CD8(void)
static void Task_GiveExpToMon(u8 taskId)
{
- u32 monId = (u8)(gTasks[taskId].tExpTask_monId);
+ u32 monId = (u8)gTasks[taskId].tExpTask_monId;
u8 battlerId = gTasks[taskId].tExpTask_battler;
s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
@@ -487,7 +487,7 @@ static void Task_GiveExpToMon(u8 taskId)
BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
gActiveBattler = savedActiveBattler;
if (IsDoubleBattle() == TRUE
- && ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]))
+ && ((u16)monId == gBattlerPartyIndexes[battlerId] || (u16)monId == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]))
gTasks[taskId].func = Task_LaunchLvlUpAnim;
else
gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index a9173f1a9..3cb6d1432 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -1497,7 +1497,7 @@ static void OpponentHandleStatusIconUpdate(void)
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
battlerId = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = FALSE;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index f8d5958ba..16bf1ec87 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -1003,7 +1003,6 @@ static void CompleteOnHealthbarDone(void)
s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
-
if (hpValue != -1)
{
UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT);
@@ -2544,7 +2543,7 @@ static void PlayerHandleStatusIconUpdate(void)
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
battlerId = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = FALSE;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
diff --git a/src/battle_controller_pokedude.c b/src/battle_controller_pokedude.c
new file mode 100644
index 000000000..57a405f3c
--- /dev/null
+++ b/src/battle_controller_pokedude.c
@@ -0,0 +1,2739 @@
+#include "global.h"
+#include "task.h"
+#include "pokemon.h"
+#include "party_menu.h"
+#include "pokeball.h"
+#include "bg.h"
+#include "data.h"
+#include "palette.h"
+#include "util.h"
+#include "m4a.h"
+#include "link.h"
+#include "sound.h"
+#include "event_data.h"
+#include "item.h"
+#include "item_menu.h"
+#include "text.h"
+#include "strings.h"
+#include "string_util.h"
+#include "window.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_interface.h"
+#include "battle_message.h"
+#include "reshow_battle_screen.h"
+#include "constants/songs.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/pokemon.h"
+#include "constants/trainers.h"
+
+struct Unk_84790E8
+{
+ u8 unk_0;
+ u8 unk_1;
+ u16 unk_2;
+ void (*unk_4)(void);
+};
+
+struct PokedudeBattlePartyInfo
+{
+ u8 side;
+ u8 level;
+ u16 species;
+ u16 moves[4];
+ u8 nature;
+ u8 gender;
+};
+
+static void PokedudeHandleGetMonData(void);
+static void PokedudeHandleGetRawMonData(void);
+static void PokedudeHandleSetMonData(void);
+static void PokedudeHandleSetRawMonData(void);
+static void PokedudeHandleLoadMonSprite(void);
+static void PokedudeHandleSwitchInAnim(void);
+static void PokedudeHandleReturnMonToBall(void);
+static void PokedudeHandleDrawTrainerPic(void);
+static void PokedudeHandleTrainerSlide(void);
+static void PokedudeHandleTrainerSlideBack(void);
+static void PokedudeHandleFaintAnimation(void);
+static void PokedudeHandlePaletteFade(void);
+static void PokedudeHandleSuccessBallThrowAnim(void);
+static void PokedudeHandleBallThrowAnim(void);
+static void PokedudeHandlePause(void);
+static void PokedudeHandleMoveAnimation(void);
+static void PokedudeHandlePrintString(void);
+static void PokedudeHandlePrintSelectionString(void);
+static void PokedudeHandleChooseAction(void);
+static void PokedudeHandleUnknownYesNoBox(void);
+static void PokedudeHandleChooseMove(void);
+static void PokedudeHandleChooseItem(void);
+static void PokedudeHandleChoosePokemon(void);
+static void PokedudeHandleCmd23(void);
+static void PokedudeHandleHealthBarUpdate(void);
+static void PokedudeHandleExpUpdate(void);
+static void PokedudeHandleStatusIconUpdate(void);
+static void PokedudeHandleStatusAnimation(void);
+static void PokedudeHandleStatusXor(void);
+static void PokedudeHandleDataTransfer(void);
+static void PokedudeHandleDMA3Transfer(void);
+static void PokedudeHandlePlayBGM(void);
+static void PokedudeHandleCmd32(void);
+static void PokedudeHandleTwoReturnValues(void);
+static void PokedudeHandleChosenMonReturnValue(void);
+static void PokedudeHandleOneReturnValue(void);
+static void PokedudeHandleOneReturnValue_Duplicate(void);
+static void PokedudeHandleCmd37(void);
+static void PokedudeHandleCmd38(void);
+static void PokedudeHandleCmd39(void);
+static void PokedudeHandleCmd40(void);
+static void PokedudeHandleHitAnimation(void);
+static void PokedudeHandleCmd42(void);
+static void PokedudeHandlePlaySE(void);
+static void PokedudeHandlePlayFanfare(void);
+static void PokedudeHandleFaintingCry(void);
+static void PokedudeHandleIntroSlide(void);
+static void PokedudeHandleIntroTrainerBallThrow(void);
+static void PokedudeHandleDrawPartyStatusSummary(void);
+static void PokedudeHandleHidePartyStatusSummary(void);
+static void PokedudeHandleEndBounceEffect(void);
+static void PokedudeHandleSpriteInvisibility(void);
+static void PokedudeHandleBattleAnimation(void);
+static void PokedudeHandleLinkStandbyMsg(void);
+static void PokedudeHandleResetActionMoveSelection(void);
+static void PokedudeHandleCmd55(void);
+static void PokedudeCmdEnd(void);
+
+static void sub_8159BA8(void);
+static void sub_8159D04(void);
+static void PokedudeBufferExecCompleted(void);
+static void sub_8159824(void);
+static void PokedudeBufferRunCommand(void);
+static bool8 sub_8159AB8(void);
+static void sub_8159998(void);
+static void WaitForMonSelection(void);
+static void CompleteWhenChoseItem(void);
+static void sub_81567B0(void);
+static void Task_LaunchLvlUpAnim(u8 taskId);
+static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId);
+static void CompleteOnInactiveTextPrinter2(void);
+static void Task_PrepareToGiveExpWithExpBar(u8 taskId);
+static void sub_8156B24(u8 taskId);
+static void Task_UpdateLvlInHealthbox(u8 taskId);
+static u32 CopyPokedudeMonData(u8 monId, u8 *dst);
+static void SetPokedudeMonData(u8 monId);
+static void sub_8159478(u8 battlerId);
+static void PokedudeDoMoveAnimation(void);
+static void sub_81595EC(u8 taskId);
+static const u8 *sub_8159EF0(void);
+
+u8 *gUnknown_3005EE0[MAX_BATTLERS_COUNT];
+
+static void (*const sPokedudeBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
+{
+ PokedudeHandleGetMonData,
+ PokedudeHandleGetRawMonData,
+ PokedudeHandleSetMonData,
+ PokedudeHandleSetRawMonData,
+ PokedudeHandleLoadMonSprite,
+ PokedudeHandleSwitchInAnim,
+ PokedudeHandleReturnMonToBall,
+ PokedudeHandleDrawTrainerPic,
+ PokedudeHandleTrainerSlide,
+ PokedudeHandleTrainerSlideBack,
+ PokedudeHandleFaintAnimation,
+ PokedudeHandlePaletteFade,
+ PokedudeHandleSuccessBallThrowAnim,
+ PokedudeHandleBallThrowAnim,
+ PokedudeHandlePause,
+ PokedudeHandleMoveAnimation,
+ PokedudeHandlePrintString,
+ PokedudeHandlePrintSelectionString,
+ PokedudeHandleChooseAction,
+ PokedudeHandleUnknownYesNoBox,
+ PokedudeHandleChooseMove,
+ PokedudeHandleChooseItem,
+ PokedudeHandleChoosePokemon,
+ PokedudeHandleCmd23,
+ PokedudeHandleHealthBarUpdate,
+ PokedudeHandleExpUpdate,
+ PokedudeHandleStatusIconUpdate,
+ PokedudeHandleStatusAnimation,
+ PokedudeHandleStatusXor,
+ PokedudeHandleDataTransfer,
+ PokedudeHandleDMA3Transfer,
+ PokedudeHandlePlayBGM,
+ PokedudeHandleCmd32,
+ PokedudeHandleTwoReturnValues,
+ PokedudeHandleChosenMonReturnValue,
+ PokedudeHandleOneReturnValue,
+ PokedudeHandleOneReturnValue_Duplicate,
+ PokedudeHandleCmd37,
+ PokedudeHandleCmd38,
+ PokedudeHandleCmd39,
+ PokedudeHandleCmd40,
+ PokedudeHandleHitAnimation,
+ PokedudeHandleCmd42,
+ PokedudeHandlePlaySE,
+ PokedudeHandlePlayFanfare,
+ PokedudeHandleFaintingCry,
+ PokedudeHandleIntroSlide,
+ PokedudeHandleIntroTrainerBallThrow,
+ PokedudeHandleDrawPartyStatusSummary,
+ PokedudeHandleHidePartyStatusSummary,
+ PokedudeHandleEndBounceEffect,
+ PokedudeHandleSpriteInvisibility,
+ PokedudeHandleBattleAnimation,
+ PokedudeHandleLinkStandbyMsg,
+ PokedudeHandleResetActionMoveSelection,
+ PokedudeHandleCmd55,
+ PokedudeCmdEnd,
+};
+
+// not used
+static const u8 gUnknown_8479000[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 };
+
+static const u8 gUnknown_8479008[][8] =
+{
+ { 0, 0, 0, 0, 64, 0, 0, 0 },
+ { 4, 4, 0, 0, 0, 0, 0, 0 },
+};
+
+static const u8 gUnknown_8479018[][8] =
+{
+ { 0, 0, 0, 0, 64, 0, 0, 0 },
+ { 1, 0, 0, 0, 64, 0, 0, 0 },
+ { 0, 0, 0, 0, 64, 0, 0, 0 },
+};
+
+static const u8 gUnknown_8479030[][8] =
+{
+ { 0, 0, 0, 0, 64, 0, 0, 0 },
+ { 2, 0, 0, 0, 64, 0, 0, 0 },
+ { 0, 0, 0, 0, 64, 0, 0, 0 },
+};
+
+static const u8 gUnknown_8479048[][8] =
+{
+ { 0, 0, 0, 0, 64, 0, 0, 0 },
+ { 0, 0, 0, 0, 64, 0, 0, 0 },
+ { 1, 0, 0, 0, 64, 0, 0, 0 },
+};
+
+static const u8 (*const gUnknown_8479060[])[8] =
+{
+ gUnknown_8479008,
+ gUnknown_8479018,
+ gUnknown_8479030,
+ gUnknown_8479048,
+};
+
+static const u8 gUnknown_8479070[][8] =
+{
+ { 2, 2, 0, 0, 64, 0, 0, 0 },
+ { 255, 255, 0, 0, 0, 0, 0, 0 },
+};
+
+static const u8 gUnknown_8479080[][8] =
+{
+ { 2, 2, 0, 0, 64, 0, 0, 0 },
+ { 2, 0, 0, 0, 64, 0, 0, 0 },
+ { 2, 0, 0, 0, 64, 0, 0, 0 },
+ { 255, 255, 0, 0, 0, 0, 0, 0 },
+};
+
+static const u8 gUnknown_84790A0[][8] =
+{
+ { 2, 0, 0, 0, 64, 0, 0, 0 },
+ { 0, 0, 0, 0, 64, 0, 0, 0 },
+ { 0, 0, 0, 0, 64, 0, 0, 0 },
+ { 255, 255, 0, 0, 0, 0, 0, 0 },
+};
+
+static const u8 gUnknown_84790C0[][8] =
+{
+ { 0, 2, 0, 0, 64, 0, 0, 0 },
+ { 2, 2, 0, 0, 64, 0, 0, 0 },
+ { 255, 255, 0, 0, 0, 0, 0, 0 },
+};
+
+static const u8 (*const gUnknown_84790D8[])[8] =
+{
+ gUnknown_8479070,
+ gUnknown_8479080,
+ gUnknown_84790A0,
+ gUnknown_84790C0,
+};
+
+static const struct Unk_84790E8 gUnknown_84790E8[] =
+{
+ {
+ .unk_0 = 18,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 16,
+ .unk_1 = 1,
+ .unk_2 = 4,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 18,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 16,
+ .unk_1 = 0,
+ .unk_2 = 13,
+ .unk_4 = sub_8159BA8,
+ },
+};
+
+static const struct Unk_84790E8 gUnknown_8479108[] =
+{
+ {
+ .unk_0 = 18,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = NULL,
+ },
+ {
+ .unk_0 = 18,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = sub_8159D04,
+ },
+ {
+ .unk_0 = 21,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 16,
+ .unk_1 = 1,
+ .unk_2 = 4,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 16,
+ .unk_1 = 0,
+ .unk_2 = 13,
+ .unk_4 = sub_8159BA8,
+ },
+};
+
+static const struct Unk_84790E8 gUnknown_8479130[] =
+{
+ {
+ .unk_0 = 16,
+ .unk_1 = 1,
+ .unk_2 = 4,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 18,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 22,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 16,
+ .unk_1 = 1,
+ .unk_2 = 4,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 18,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 20,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 16,
+ .unk_1 = 0,
+ .unk_2 = 13,
+ .unk_4 = sub_8159BA8,
+ },
+};
+
+static const struct Unk_84790E8 gUnknown_8479168[] =
+{
+ {
+ .unk_0 = 18,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 18,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = NULL,
+ },
+ {
+ .unk_0 = 18,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 16,
+ .unk_1 = 1,
+ .unk_2 = 107,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 21,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = sub_8159BA8,
+ },
+ {
+ .unk_0 = 55,
+ .unk_1 = 0,
+ .unk_2 = 0,
+ .unk_4 = sub_8159BA8,
+ },
+};
+
+static const struct Unk_84790E8 *const gUnknown_8479198[] =
+{
+ gUnknown_84790E8,
+ gUnknown_8479108,
+ gUnknown_8479130,
+ gUnknown_8479168,
+};
+
+static const u8 *const gUnknown_84791A8[] =
+{
+ gUnknown_81C5F69,
+ gUnknown_81C5FA7,
+ gUnknown_81C5FDC,
+ gUnknown_81C601C,
+};
+
+static const u8 *const gUnknown_84791B8[] =
+{
+ gUnknown_81C60FA,
+ gUnknown_81C60FA,
+ gUnknown_81C615A,
+ gUnknown_81C6196,
+ gUnknown_81C61EA,
+};
+
+static const u8 *const gUnknown_84791CC[] =
+{
+ gUnknown_81C6202,
+ gUnknown_81C6301,
+ gUnknown_81C63A9,
+ gUnknown_81C63F9,
+ gUnknown_81C6446,
+ gUnknown_81C657A,
+ gUnknown_81C6637,
+};
+
+static const u8 *const gUnknown_84791E8[] =
+{
+ gUnknown_81C6645,
+ gUnknown_81C6645,
+ gUnknown_81C66CF,
+ gUnknown_81C6787,
+ gUnknown_81C684B,
+ gUnknown_81C686C,
+};
+
+static const struct PokedudeBattlePartyInfo sParties_Battle[] =
+{
+ {
+ .side = B_SIDE_PLAYER,
+ .level = 15,
+ .species = SPECIES_RATTATA,
+ .moves = { MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK },
+ .nature = NATURE_LONELY,
+ .gender = MALE,
+ },
+ {
+ .side = B_SIDE_OPPONENT,
+ .level = 18,
+ .species = SPECIES_PIDGEY,
+ .moves = { MOVE_TACKLE, MOVE_SAND_ATTACK, MOVE_GUST, MOVE_QUICK_ATTACK },
+ .nature = NATURE_NAUGHTY,
+ .gender = MALE,
+ },
+ {0xFF}
+};
+
+static const struct PokedudeBattlePartyInfo sParties_Status[] =
+{
+ {
+ .side = B_SIDE_PLAYER,
+ .level = 15,
+ .species = SPECIES_RATTATA,
+ .moves = { MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK },
+ .nature = NATURE_LONELY,
+ .gender = MALE,
+ },
+ {
+ .side = B_SIDE_OPPONENT,
+ .level = 14,
+ .species = SPECIES_ODDISH,
+ .moves = { MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER },
+ .nature = NATURE_RASH,
+ .gender = MALE,
+ },
+ {0xFF}
+};
+
+static const struct PokedudeBattlePartyInfo sParties_Matchups[] =
+{
+ {
+ .side = B_SIDE_PLAYER,
+ .level = 15,
+ .species = SPECIES_POLIWAG,
+ .moves = { MOVE_WATER_GUN, MOVE_HYPNOSIS, MOVE_BUBBLE },
+ .nature = NATURE_RASH,
+ .gender = MALE,
+ },
+ {
+ .side = B_SIDE_PLAYER,
+ .level = 15,
+ .species = SPECIES_BUTTERFREE,
+ .moves = { MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_STUN_SPORE, MOVE_SLEEP_POWDER },
+ .nature = NATURE_RASH,
+ .gender = MALE,
+ },
+ {
+ .side = B_SIDE_OPPONENT,
+ .level = 14,
+ .species = SPECIES_ODDISH,
+ .moves = { MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER },
+ .nature = NATURE_RASH,
+ .gender = MALE,
+ },
+ {0xFF}
+};
+
+static const struct PokedudeBattlePartyInfo sParties_Catching[] =
+{
+ {
+ .side = B_SIDE_PLAYER,
+ .level = 15,
+ .species = SPECIES_BUTTERFREE,
+ .moves = { MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_SLEEP_POWDER, MOVE_STUN_SPORE },
+ .nature = NATURE_RASH,
+ .gender = MALE,
+ },
+ {
+ .side = B_SIDE_OPPONENT,
+ .level = 11,
+ .species = SPECIES_JIGGLYPUFF,
+ .moves = { MOVE_SING, MOVE_DEFENSE_CURL, MOVE_POUND },
+ .nature = NATURE_CAREFUL,
+ .gender = MALE,
+ },
+ {0xFF}
+};
+
+
+static const struct PokedudeBattlePartyInfo *const sPokedudeBattlePartyPointers[] =
+{
+ sParties_Battle,
+ sParties_Status,
+ sParties_Matchups,
+ sParties_Catching,
+};
+
+static void nullsub_99(void)
+{
+}
+
+void SetControllerToPokedude(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = PokedudeBufferRunCommand;
+ *(&gBattleStruct->field_96) = gSpecialVar_0x8004;
+ gBattleStruct->field_97 = 0;
+}
+
+static void PokedudeBufferRunCommand(void)
+{
+ if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
+ {
+ if (gBattleBufferA[gActiveBattler][0] < NELEMS(sPokedudeBufferCommands))
+ {
+ if (!sub_8159AB8())
+ sPokedudeBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ }
+ else
+ {
+ PokedudeBufferExecCompleted();
+ }
+ }
+}
+
+static void sub_8156140(void)
+{
+ sub_8159824();
+}
+
+static void CompleteOnBattlerSpriteCallbackDummy(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ PokedudeBufferExecCompleted();
+}
+
+static void sub_8156184(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded == TRUE
+ && gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0)
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80)
+ {
+ sub_80F1720(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ }
+ else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ PokedudeBufferExecCompleted();
+ }
+ }
+}
+
+static void CompleteOnInactiveTextPrinter(void)
+{
+ if (!IsTextPrinterActive(0))
+ PokedudeBufferExecCompleted();
+}
+
+static void sub_8156254(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gMain.inBattle = FALSE;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(gMain.savedCallback);
+ }
+}
+
+static void sub_8156294(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ CreateTask(c3_0802FDF4, 10);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ PokedudeBufferExecCompleted();
+ }
+}
+
+static void sub_81562F0(void)
+{
+ if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
+ gBattlerControllerFuncs[gActiveBattler] = sub_8156294;
+ }
+}
+
+static void sub_81563A8(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ if (gSprites[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy
+ && !(gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive))
+ {
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
+ &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
+ HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+ CopyBattleSpriteInvisibility(gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = sub_81562F0;
+ }
+}
+
+static void CompleteOnSpecialAnimDone(void)
+{
+ if (!gDoingBattleAnim)
+ PokedudeBufferExecCompleted();
+}
+
+static void sub_815649C(void)
+{
+ if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 255)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0;
+ PokedudeBufferExecCompleted();
+ }
+}
+
+static void sub_81564E4(void)
+{
+ sub_8159998();
+}
+
+static void OpenPartyMenuToChooseMon(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection;
+ DestroyTask(gUnknown_3004FFC[gActiveBattler]);
+ FreeAllWindowBuffers();
+ sub_8127968();
+ }
+}
+
+static void WaitForMonSelection(void)
+{
+ if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
+ {
+ if (gUnknown_203B0C0 == 1)
+ BtlController_EmitChosenMonReturnValue(1, gUnknown_203B0C1, gUnknown_203B0DC);
+ else
+ BtlController_EmitChosenMonReturnValue(1, 6, NULL);
+ PokedudeBufferExecCompleted();
+ }
+}
+
+static void OpenBagAndChooseItem(void)
+{
+ u8 callbackId;
+
+ if (!gPaletteFade.active)
+ {
+ gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem;
+ nullsub_44();
+ FreeAllWindowBuffers();
+ switch (gSpecialVar_0x8004)
+ {
+ case 1:
+ default:
+ callbackId = 7;
+ break;
+ case 3:
+ callbackId = 8;
+ break;
+ }
+ sub_810B108(callbackId);
+ }
+}
+
+static void CompleteWhenChoseItem(void)
+{
+ if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
+ {
+ BtlController_EmitOneReturnValue(1, gSpecialVar_ItemId);
+ PokedudeBufferExecCompleted();
+ }
+}
+
+static void sub_8156624(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
+ sub_80F1720(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
+ {
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
+ &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
+ HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler ^ BIT_FLANK);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
+ }
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
+ &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
+ HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+ gBattleSpritesDataPtr->animationData->field_9_x1 = 0;
+ gBattlerControllerFuncs[gActiveBattler] = sub_81567B0;
+ }
+}
+
+static void sub_81567B0(void)
+{
+ bool32 r4 = FALSE;
+
+ if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ r4 = TRUE;
+ if (r4
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ CreateTask(c3_0802FDF4, 10);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = sub_815649C;
+ }
+}
+
+#define tExpTask_monId data[0]
+#define tExpTask_gainedExp data[1]
+#define tExpTask_battler data[2]
+#define tExpTask_frames data[10]
+
+static void Task_GiveExpToMon(u8 taskId)
+{
+ u32 monId = (u8)gTasks[taskId].tExpTask_monId;
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+ s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+
+ if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // Give exp without moving the expbar.
+ {
+ struct Pokemon *mon = &gPlayerParty[monId];
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL);
+ u32 currExp = GetMonData(mon, MON_DATA_EXP);
+ u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+
+ if (currExp + gainedExp >= nextLvlExp)
+ {
+ u8 savedActiveBattler;
+
+ SetMonData(mon, MON_DATA_EXP, &nextLvlExp);
+ CalculateMonStats(mon);
+ gainedExp -= nextLvlExp - currExp;
+ savedActiveBattler = gActiveBattler;
+ gActiveBattler = battlerId;
+ BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
+ gActiveBattler = savedActiveBattler;
+ if (IsDoubleBattle() == TRUE
+ && ((u16)monId == gBattlerPartyIndexes[battlerId] || (u16)monId == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]))
+ gTasks[taskId].func = Task_LaunchLvlUpAnim;
+ else
+ gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
+ }
+ else
+ {
+ currExp += gainedExp;
+ SetMonData(mon, MON_DATA_EXP, &currExp);
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter2;
+ DestroyTask(taskId);
+ }
+ }
+ else
+ {
+ gTasks[taskId].func = Task_PrepareToGiveExpWithExpBar;
+ }
+}
+
+static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
+{
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+ s32 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+ struct Pokemon *mon = &gPlayerParty[monIndex];
+ u8 level = GetMonData(mon, MON_DATA_LEVEL);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u32 exp = GetMonData(mon, MON_DATA_EXP);
+ u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level];
+ u32 expToNextLvl;
+
+ exp -= currLvlExp;
+ expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
+ SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp);
+ PlaySE(SE_EXP);
+ gTasks[taskId].func = sub_8156B24;
+}
+
+static void sub_8156B24(u8 taskId)
+{
+ if (gTasks[taskId].tExpTask_frames < 13)
+ {
+ ++gTasks[taskId].tExpTask_frames;
+ }
+ else
+ {
+ u8 monId = gTasks[taskId].tExpTask_monId;
+ s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+ s16 newExpPoints;
+
+ newExpPoints = MoveBattleBar(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]);
+ if (newExpPoints == -1) // The bar has been filled with given exp points.
+ {
+ u8 level;
+ s32 currExp;
+ u16 species;
+ s32 expOnNextLvl;
+
+ m4aSongNumStop(SE_EXP);
+ level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+ if (currExp + gainedExp >= expOnNextLvl)
+ {
+ u8 savedActiveBattler;
+
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &expOnNextLvl);
+ CalculateMonStats(&gPlayerParty[monId]);
+ gainedExp -= expOnNextLvl - currExp;
+ savedActiveBattler = gActiveBattler;
+ gActiveBattler = battlerId;
+ BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
+ gActiveBattler = savedActiveBattler;
+ gTasks[taskId].func = Task_LaunchLvlUpAnim;
+ }
+ else
+ {
+ currExp += gainedExp;
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp);
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter2;
+ DestroyTask(taskId);
+ }
+ }
+ }
+}
+
+static void Task_LaunchLvlUpAnim(u8 taskId)
+{
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ battlerId ^= BIT_FLANK;
+ InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP);
+ gTasks[taskId].func = Task_UpdateLvlInHealthbox;
+}
+
+static void Task_UpdateLvlInHealthbox(u8 taskId)
+{
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+
+ if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive)
+ {
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+
+ GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value.
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ else
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
+ }
+}
+
+static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
+{
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+ u8 battlerId;
+
+ GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
+ battlerId = gTasks[taskId].tExpTask_battler;
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter2;
+ DestroyTask(taskId);
+}
+
+static void sub_8156DCC(void)
+{
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > DISPLAY_HEIGHT)
+ {
+ FreeOamMatrix(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.matrixNum);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ PokedudeBufferExecCompleted();
+ }
+ }
+ else
+ {
+ if (!gSprites[gBattlerSpriteIds[gActiveBattler]].inUse)
+ {
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ PokedudeBufferExecCompleted();
+ }
+ }
+}
+
+static void CompleteOnHealthbarDone(void)
+{
+ s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
+
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+ if (hpValue != -1)
+ {
+ UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT);
+ }
+ else
+ {
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ PokedudeBufferExecCompleted();
+ }
+}
+
+static void CompleteOnInactiveTextPrinter2(void)
+{
+ if (!IsTextPrinterActive(0))
+ PokedudeBufferExecCompleted();
+}
+
+static void DoHitAnimBlinkSpriteEffect(void)
+{
+ u8 spriteId = gBattlerSpriteIds[gActiveBattler];
+
+ if (gSprites[spriteId].data[1] == 32)
+ {
+ gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gDoingBattleAnim = FALSE;
+ PokedudeBufferExecCompleted();
+ }
+ else
+ {
+ if ((gSprites[spriteId].data[1] % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ ++gSprites[spriteId].data[1];
+ }
+}
+
+static void sub_8156F7C(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ PokedudeBufferExecCompleted();
+ }
+}
+
+static void CompleteOnBattlerSpriteCallbackDummy2(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ PokedudeBufferExecCompleted();
+}
+
+static void CompleteOnFinishedBattleAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive)
+ PokedudeBufferExecCompleted();
+}
+
+static void CompleteOnFinishedStatusAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive)
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeBufferExecCompleted(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = PokedudeBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ PrepareBufferDataTransferLink(2, 4, &playerId);
+ gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ }
+ else
+ {
+ gBattleControllerExecFlags &= ~gBitTable[gActiveBattler];
+ }
+}
+
+// not used
+static void CompleteOnFinishedStatusAnimation2(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive)
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleGetMonData(void)
+{
+ u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data
+ u32 size = 0;
+ u8 monToCheck;
+ s32 i;
+
+ if (gBattleBufferA[gActiveBattler][2] == 0)
+ {
+ size += CopyPokedudeMonData(gBattlerPartyIndexes[gActiveBattler], monData);
+ }
+ else
+ {
+ monToCheck = gBattleBufferA[gActiveBattler][2];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (monToCheck & 1)
+ size += CopyPokedudeMonData(i, monData + size);
+ monToCheck >>= 1;
+ }
+ }
+ BtlController_EmitDataTransfer(1, size, monData);
+ PokedudeBufferExecCompleted();
+}
+
+static u32 CopyPokedudeMonData(u8 monId, u8 *dst)
+{
+ struct BattlePokemon battleMon;
+ struct MovePpInfo moveData;
+ u8 nickname[20];
+ u8 *src;
+ s16 data16;
+ u32 data32;
+ s32 size = 0;
+ struct Pokemon *mon;
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ mon = &gPlayerParty[monId];
+ else
+ mon = &gEnemyParty[monId];
+ switch (gBattleBufferA[gActiveBattler][1])
+ {
+ case REQUEST_ALL_BATTLE:
+ battleMon.species = GetMonData(mon, MON_DATA_SPECIES);
+ battleMon.item = GetMonData(mon, MON_DATA_HELD_ITEM);
+ for (size = 0; size < MAX_MON_MOVES; ++size)
+ {
+ battleMon.moves[size] = GetMonData(mon, MON_DATA_MOVE1 + size);
+ battleMon.pp[size] = GetMonData(mon, MON_DATA_PP1 + size);
+ }
+ battleMon.ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES);
+ battleMon.friendship = GetMonData(mon, MON_DATA_FRIENDSHIP);
+ battleMon.experience = GetMonData(mon, MON_DATA_EXP);
+ battleMon.hpIV = GetMonData(mon, MON_DATA_HP_IV);
+ battleMon.attackIV = GetMonData(mon, MON_DATA_ATK_IV);
+ battleMon.defenseIV = GetMonData(mon, MON_DATA_DEF_IV);
+ battleMon.speedIV = GetMonData(mon, MON_DATA_SPEED_IV);
+ battleMon.spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV);
+ battleMon.spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV);
+ battleMon.personality = GetMonData(mon, MON_DATA_PERSONALITY);
+ battleMon.status1 = GetMonData(mon, MON_DATA_STATUS);
+ battleMon.level = GetMonData(mon, MON_DATA_LEVEL);
+ battleMon.hp = GetMonData(mon, MON_DATA_HP);
+ battleMon.maxHP = GetMonData(mon, MON_DATA_MAX_HP);
+ battleMon.attack = GetMonData(mon, MON_DATA_ATK);
+ battleMon.defense = GetMonData(mon, MON_DATA_DEF);
+ battleMon.speed = GetMonData(mon, MON_DATA_SPEED);
+ battleMon.spAttack = GetMonData(mon, MON_DATA_SPATK);
+ battleMon.spDefense = GetMonData(mon, MON_DATA_SPDEF);
+ battleMon.isEgg = GetMonData(mon, MON_DATA_IS_EGG);
+ battleMon.abilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM);
+ battleMon.otId = GetMonData(mon, MON_DATA_OT_ID);
+ GetMonData(mon, MON_DATA_NICKNAME, nickname);
+ StringCopy10(battleMon.nickname, nickname);
+ GetMonData(mon, MON_DATA_OT_NAME, battleMon.otName);
+ src = (u8 *)&battleMon;
+ for (size = 0; size < sizeof(battleMon); ++size)
+ dst[size] = src[size];
+ break;
+ case REQUEST_SPECIES_BATTLE:
+ data16 = GetMonData(mon, MON_DATA_SPECIES);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ data16 = GetMonData(mon, MON_DATA_HELD_ITEM);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_MOVES_PP_BATTLE:
+ for (size = 0; size < MAX_MON_MOVES; ++size)
+ {
+ moveData.moves[size] = GetMonData(mon, MON_DATA_MOVE1 + size);
+ moveData.pp[size] = GetMonData(mon, MON_DATA_PP1 + size);
+ }
+ moveData.ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES);
+ src = (u8 *)(&moveData);
+ for (size = 0; size < sizeof(moveData); ++size)
+ dst[size] = src[size];
+ break;
+ case REQUEST_MOVE1_BATTLE:
+ case REQUEST_MOVE2_BATTLE:
+ case REQUEST_MOVE3_BATTLE:
+ case REQUEST_MOVE4_BATTLE:
+ data16 = GetMonData(mon, MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_PP_DATA_BATTLE:
+ for (size = 0; size < MAX_MON_MOVES; ++size)
+ dst[size] = GetMonData(mon, MON_DATA_PP1 + size);
+ dst[size] = GetMonData(mon, MON_DATA_PP_BONUSES);
+ ++size;
+ break;
+ case REQUEST_PPMOVE1_BATTLE:
+ case REQUEST_PPMOVE2_BATTLE:
+ case REQUEST_PPMOVE3_BATTLE:
+ case REQUEST_PPMOVE4_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
+ size = 1;
+ break;
+ case REQUEST_OTID_BATTLE:
+ data32 = GetMonData(mon, MON_DATA_OT_ID);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case REQUEST_EXP_BATTLE:
+ data32 = GetMonData(mon, MON_DATA_EXP);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case REQUEST_HP_EV_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_HP_EV);
+ size = 1;
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_ATK_EV);
+ size = 1;
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_DEF_EV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_SPEED_EV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_SPATK_EV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_SPDEF_EV);
+ size = 1;
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_FRIENDSHIP);
+ size = 1;
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_POKERUS);
+ size = 1;
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_MET_LOCATION);
+ size = 1;
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_MET_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_MET_GAME);
+ size = 1;
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_POKEBALL);
+ size = 1;
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_HP_IV);
+ dst[1] = GetMonData(mon, MON_DATA_ATK_IV);
+ dst[2] = GetMonData(mon, MON_DATA_DEF_IV);
+ dst[3] = GetMonData(mon, MON_DATA_SPEED_IV);
+ dst[4] = GetMonData(mon, MON_DATA_SPATK_IV);
+ dst[5] = GetMonData(mon, MON_DATA_SPDEF_IV);
+ size = 6;
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_HP_IV);
+ size = 1;
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_ATK_IV);
+ size = 1;
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_DEF_IV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_SPEED_IV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_SPATK_IV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_SPDEF_IV);
+ size = 1;
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ data32 = GetMonData(mon, MON_DATA_PERSONALITY);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ dst[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case REQUEST_CHECKSUM_BATTLE:
+ data16 = GetMonData(mon, MON_DATA_CHECKSUM);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_STATUS_BATTLE:
+ data32 = GetMonData(mon, MON_DATA_STATUS);
+ dst[0] = (data32 & 0x000000FF);
+ dst[1] = (data32 & 0x0000FF00) >> 8;
+ dst[2] = (data32 & 0x00FF0000) >> 16;
+ dst[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case REQUEST_LEVEL_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_HP_BATTLE:
+ data16 = GetMonData(mon, MON_DATA_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ data16 = GetMonData(mon, MON_DATA_MAX_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_ATK_BATTLE:
+ data16 = GetMonData(mon, MON_DATA_ATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_DEF_BATTLE:
+ data16 = GetMonData(mon, MON_DATA_DEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPEED_BATTLE:
+ data16 = GetMonData(mon, MON_DATA_SPEED);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPATK_BATTLE:
+ data16 = GetMonData(mon, MON_DATA_SPATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ data16 = GetMonData(mon, MON_DATA_SPDEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_COOL_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_COOL);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_BEAUTY);
+ size = 1;
+ break;
+ case REQUEST_CUTE_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_CUTE);
+ size = 1;
+ break;
+ case REQUEST_SMART_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_SMART);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_TOUGH);
+ size = 1;
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_SHEEN);
+ size = 1;
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_COOL_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_BEAUTY_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_CUTE_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_SMART_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ dst[0] = GetMonData(mon, MON_DATA_TOUGH_RIBBON);
+ size = 1;
+ break;
+ }
+ return size;
+}
+
+static void PokedudeHandleGetRawMonData(void)
+{
+ PlayerHandleGetRawMonData();
+}
+
+static void PokedudeHandleSetMonData(void)
+{
+ u8 monToCheck;
+ u8 i;
+
+ if (gBattleBufferA[gActiveBattler][2] == 0)
+ {
+ SetPokedudeMonData(gBattlerPartyIndexes[gActiveBattler]);
+ }
+ else
+ {
+ monToCheck = gBattleBufferA[gActiveBattler][2];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (monToCheck & 1)
+ SetPokedudeMonData(i);
+ monToCheck >>= 1;
+ }
+ }
+ PokedudeBufferExecCompleted();
+}
+
+static void SetPokedudeMonData(u8 monId)
+{
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3];
+ s32 i;
+ struct Pokemon *mon;
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ mon = &gPlayerParty[monId];
+ else
+ mon = &gEnemyParty[monId];
+ switch (gBattleBufferA[gActiveBattler][1])
+ {
+ case REQUEST_ALL_BATTLE:
+ {
+ u8 iv;
+
+ SetMonData(mon, MON_DATA_SPECIES, &battlePokemon->species);
+ SetMonData(mon, MON_DATA_HELD_ITEM, &battlePokemon->item);
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ SetMonData(mon, MON_DATA_MOVE1 + i, &battlePokemon->moves[i]);
+ SetMonData(mon, MON_DATA_PP1 + i, &battlePokemon->pp[i]);
+ }
+ SetMonData(mon, MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses);
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &battlePokemon->friendship);
+ SetMonData(mon, MON_DATA_EXP, &battlePokemon->experience);
+ iv = battlePokemon->hpIV;
+ SetMonData(mon, MON_DATA_HP_IV, &iv);
+ iv = battlePokemon->attackIV;
+ SetMonData(mon, MON_DATA_ATK_IV, &iv);
+ iv = battlePokemon->defenseIV;
+ SetMonData(mon, MON_DATA_DEF_IV, &iv);
+ iv = battlePokemon->speedIV;
+ SetMonData(mon, MON_DATA_SPEED_IV, &iv);
+ iv = battlePokemon->spAttackIV;
+ SetMonData(mon, MON_DATA_SPATK_IV, &iv);
+ iv = battlePokemon->spDefenseIV;
+ SetMonData(mon, MON_DATA_SPDEF_IV, &iv);
+ SetMonData(mon, MON_DATA_PERSONALITY, &battlePokemon->personality);
+ SetMonData(mon, MON_DATA_STATUS, &battlePokemon->status1);
+ SetMonData(mon, MON_DATA_LEVEL, &battlePokemon->level);
+ SetMonData(mon, MON_DATA_HP, &battlePokemon->hp);
+ SetMonData(mon, MON_DATA_MAX_HP, &battlePokemon->maxHP);
+ SetMonData(mon, MON_DATA_ATK, &battlePokemon->attack);
+ SetMonData(mon, MON_DATA_DEF, &battlePokemon->defense);
+ SetMonData(mon, MON_DATA_SPEED, &battlePokemon->speed);
+ SetMonData(mon, MON_DATA_SPATK, &battlePokemon->spAttack);
+ SetMonData(mon, MON_DATA_SPDEF, &battlePokemon->spDefense);
+ }
+ break;
+ case REQUEST_SPECIES_BATTLE:
+ SetMonData(mon, MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ SetMonData(mon, MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MOVES_PP_BATTLE:
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ SetMonData(mon, MON_DATA_MOVE1 + i, &moveData->moves[i]);
+ SetMonData(mon, MON_DATA_PP1 + i, &moveData->pp[i]);
+ }
+ SetMonData(mon, MON_DATA_PP_BONUSES, &moveData->ppBonuses);
+ break;
+ case REQUEST_MOVE1_BATTLE:
+ case REQUEST_MOVE2_BATTLE:
+ case REQUEST_MOVE3_BATTLE:
+ case REQUEST_MOVE4_BATTLE:
+ SetMonData(mon, MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_PP_DATA_BATTLE:
+ SetMonData(mon, MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(mon, MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]);
+ SetMonData(mon, MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]);
+ SetMonData(mon, MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]);
+ SetMonData(mon, MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]);
+ break;
+ case REQUEST_PPMOVE1_BATTLE:
+ case REQUEST_PPMOVE2_BATTLE:
+ case REQUEST_PPMOVE3_BATTLE:
+ case REQUEST_PPMOVE4_BATTLE:
+ SetMonData(mon, MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_OTID_BATTLE:
+ SetMonData(mon, MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_EXP_BATTLE:
+ SetMonData(mon, MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HP_EV_BATTLE:
+ SetMonData(mon, MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ SetMonData(mon, MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ SetMonData(mon, MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ SetMonData(mon, MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ SetMonData(mon, MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ SetMonData(mon, MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ SetMonData(mon, MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ SetMonData(mon, MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ SetMonData(mon, MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ SetMonData(mon, MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ SetMonData(mon, MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ SetMonData(mon, MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(mon, MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]);
+ SetMonData(mon, MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]);
+ SetMonData(mon, MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]);
+ SetMonData(mon, MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]);
+ SetMonData(mon, MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]);
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ SetMonData(mon, MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ SetMonData(mon, MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ SetMonData(mon, MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ SetMonData(mon, MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ SetMonData(mon, MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ SetMonData(mon, MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ SetMonData(mon, MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CHECKSUM_BATTLE:
+ SetMonData(mon, MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_STATUS_BATTLE:
+ SetMonData(mon, MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_LEVEL_BATTLE:
+ SetMonData(mon, MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HP_BATTLE:
+ SetMonData(mon, MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ SetMonData(mon, MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_BATTLE:
+ SetMonData(mon, MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_BATTLE:
+ SetMonData(mon, MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_BATTLE:
+ SetMonData(mon, MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_BATTLE:
+ SetMonData(mon, MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ SetMonData(mon, MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_COOL_BATTLE:
+ SetMonData(mon, MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ SetMonData(mon, MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CUTE_BATTLE:
+ SetMonData(mon, MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SMART_BATTLE:
+ SetMonData(mon, MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ SetMonData(mon, MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ SetMonData(mon, MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ SetMonData(mon, MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ SetMonData(mon, MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ SetMonData(mon, MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ SetMonData(mon, MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ SetMonData(mon, MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ }
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+}
+
+static void PokedudeHandleSetRawMonData(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleLoadMonSprite(void)
+{
+ u32 y;
+ u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
+
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ y = GetBattlerSpriteDefault_Y(gActiveBattler);
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ GetBattlerSpriteCoord(gActiveBattler, 2),
+ y,
+ GetBattlerSpriteSubpriority(gActiveBattler));
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = species;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
+ SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
+ gBattlerControllerFuncs[gActiveBattler] = sub_8156184;
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleSwitchInAnim(void)
+{
+ ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ gActionSelectionCursor[gActiveBattler] = 0;
+ gMoveSelectionCursor[gActiveBattler] = 0;
+ sub_8159478(gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = sub_81563A8;
+}
+
+static void PokedudeHandleReturnMonToBall(void)
+{
+ if (gBattleBufferA[gActiveBattler][1] == 0)
+ {
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON);
+ gBattlerControllerFuncs[gActiveBattler] = sub_8156F7C;
+ }
+ else
+ {
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ PokedudeBufferExecCompleted();
+ }
+}
+
+static void PokedudeHandleDrawTrainerPic(void)
+{
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ DecompressTrainerBackPalette(4, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(4, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ 80,
+ (8 - gTrainerBackPicCoords[4].size) * 4 + 80,
+ 30);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC;
+ }
+ else
+ {
+ u32 tranerPicid = TRAINER_PIC_PROFESSOR_OAK;
+ DecompressTrainerFrontPic(tranerPicid, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(tranerPicid, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ 176,
+ (8 - gTrainerFrontPicCoords[tranerPicid].size) * 4 + 40,
+ GetBattlerSpriteSubpriority(gActiveBattler));
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[tranerPicid].tag);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[tranerPicid].tag);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = tranerPicid;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC;
+ }
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
+}
+
+static void PokedudeHandleTrainerSlide(void)
+{
+ DecompressTrainerBackPalette(4, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(4, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ 80,
+ (8 - gTrainerBackPicCoords[4].size) * 4 + 80,
+ 30);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2;
+}
+
+static void PokedudeHandleTrainerSlideBack(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleFaintAnimation(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0)
+ {
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
+ ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState;
+ }
+ else
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_ATTACKER);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8012110;
+ }
+ else
+ {
+ PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_TARGET);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon;
+ }
+ gBattlerControllerFuncs[gActiveBattler] = sub_8156DCC;
+ }
+ }
+}
+
+static void PokedudeHandlePaletteFade(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleSuccessBallThrowAnim(void)
+{
+ gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
+ gDoingBattleAnim = TRUE;
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
+}
+
+static void PokedudeHandleBallThrowAnim(void)
+{
+ u8 ballThrowCaseId = gBattleBufferA[gActiveBattler][1];
+
+ gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
+ gDoingBattleAnim = TRUE;
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
+}
+
+static void PokedudeHandlePause(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleMoveAnimation(void)
+{
+ u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+
+ gAnimMoveTurn = gBattleBufferA[gActiveBattler][3];
+ gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8);
+ gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24);
+ gAnimFriendship = gBattleBufferA[gActiveBattler][10];
+ gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8);
+ gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
+ gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
+ if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE
+ {
+ PokedudeBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = PokedudeDoMoveAnimation;
+ }
+}
+
+static void PokedudeDoMoveAnimation(void)
+{
+ u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+
+ switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState)
+ {
+ case 0:
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1;
+ break;
+ case 1:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ sub_8035450(0);
+ DoMoveAnim(move);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
+ }
+ break;
+ case 2:
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ sub_8035450(1);
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3;
+ }
+ break;
+ case 3:
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ CopyAllBattleSpritesInvisibilities();
+ TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ PokedudeBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+static void PokedudeHandlePrintString(void)
+{
+ u16 *stringId;
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]);
+ BufferStringBattle(*stringId);
+ if (sub_80D89B0(*stringId))
+ BattlePutTextOnWindow(gDisplayedStringBattle, 64);
+ else
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
+}
+
+static void PokedudeHandlePrintSelectionString(void)
+{
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ PokedudeHandlePrintString();
+ else
+ PokedudeBufferExecCompleted();
+}
+
+static void sub_8158B20(void)
+{
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 160;
+ gBattlerControllerFuncs[gActiveBattler] = sub_8156140;
+ }
+}
+
+static void PokedudeHandleChooseAction(void)
+{
+ s32 i;
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ gBattlerControllerFuncs[gActiveBattler] = sub_8158B20;
+ BattlePutTextOnWindow(gUnknown_83FDA4C, 0);
+ BattlePutTextOnWindow(gUnknown_83FE725, 2);
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ ActionSelectionDestroyCursorAt((u8)i);
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 1);
+ }
+ else
+ {
+ gBattlerControllerFuncs[gActiveBattler] = sub_8156140;
+ }
+}
+
+static void PokedudeHandleUnknownYesNoBox(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void sub_8158C04(void)
+{
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 320;
+ gBattlerControllerFuncs[gActiveBattler] = sub_81564E4;
+ }
+}
+
+static void PokedudeHandleChooseMove(void)
+{
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ InitMoveSelectionsVarsAndStrings();
+ gBattlerControllerFuncs[gActiveBattler] = sub_8158C04;
+ }
+ else
+ {
+ gBattlerControllerFuncs[gActiveBattler] = sub_81564E4;
+ }
+}
+
+static void PokedudeHandleChooseItem(void)
+{
+ s32 i;
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem;
+ gBattlerInMenuId = gActiveBattler;
+ for (i = 0; i < 3; ++i)
+ gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][i + 1];
+}
+
+static void PokedudeHandleChoosePokemon(void)
+{
+ s32 i;
+
+ gUnknown_3004FFC[gActiveBattler] = CreateTask(TaskDummy, 0xFF);
+ gTasks[gUnknown_3004FFC[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF;
+ *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4;
+ *(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2];
+ *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3];
+ for (i = 0; i < 3; ++i)
+ gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][4 + i];
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon;
+ gBattlerInMenuId = gActiveBattler;
+}
+
+static void PokedudeHandleCmd23(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleHealthBarUpdate(void)
+{
+ s16 hpVal;
+ struct Pokemon *mon;
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]];
+ else
+ mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]];
+ LoadBattleBarGfx(0);
+ hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ if (hpVal != INSTANT_HP_BAR_DROP)
+ {
+ u32 maxHP = GetMonData(mon, MON_DATA_MAX_HP);
+ u32 curHP = GetMonData(mon, MON_DATA_HP);
+
+ SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal);
+ }
+ else
+ {
+ u32 maxHP = GetMonData(mon, MON_DATA_MAX_HP);
+
+ SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal);
+ UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], 0, HP_CURRENT);
+ }
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone;
+}
+
+static void PokedudeHandleExpUpdate(void)
+{
+ u8 monId = gBattleBufferA[gActiveBattler][1];
+
+ if (GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL) >= MAX_LEVEL)
+ {
+ PokedudeBufferExecCompleted();
+ }
+ else
+ {
+ s16 expPointsToGive;
+ u8 taskId;
+
+ LoadBattleBarGfx(1);
+ GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // Unused return value.
+ expPointsToGive = T1_READ_16(&gBattleBufferA[gActiveBattler][2]);
+ taskId = CreateTask(Task_GiveExpToMon, 10);
+ gTasks[taskId].tExpTask_monId = monId;
+ gTasks[taskId].tExpTask_gainedExp = expPointsToGive;
+ gTasks[taskId].tExpTask_battler = gActiveBattler;
+ gBattlerControllerFuncs[gActiveBattler] = nullsub_99;
+ }
+}
+
+static void PokedudeHandleStatusIconUpdate(void)
+{
+ if (!mplay_80342A4(gActiveBattler))
+ {
+ u8 battlerId;
+ struct Pokemon *mon;
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]];
+ else
+ mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]];
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_STATUS_ICON);
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = FALSE;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
+ }
+}
+
+static void PokedudeHandleStatusAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBattler))
+ {
+ InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1],
+ gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24));
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
+ }
+}
+
+static void PokedudeHandleStatusXor(void)
+{
+ struct Pokemon *mon;
+ u8 val;
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]];
+ else
+ mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]];
+ val = GetMonData(mon, MON_DATA_STATUS) ^ gBattleBufferA[gActiveBattler][1];
+ SetMonData(mon, MON_DATA_STATUS, &val);
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleDataTransfer(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleDMA3Transfer(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandlePlayBGM(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleCmd32(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleTwoReturnValues(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleChosenMonReturnValue(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleOneReturnValue(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleOneReturnValue_Duplicate(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleCmd37(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleCmd38(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleCmd39(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleCmd40(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleHitAnimation(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE)
+ {
+ PokedudeBufferExecCompleted();
+ }
+ else
+ {
+ gDoingBattleAnim = TRUE;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
+ DoHitAnimHealthboxEffect(gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect;
+ }
+}
+
+static void PokedudeHandleCmd42(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandlePlaySE(void)
+{
+ PlaySE(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandlePlayFanfare(void)
+{
+ PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleFaintingCry(void)
+{
+ struct Pokemon *mon;
+ u16 species;
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]];
+ else
+ mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]];
+ species = GetMonData(mon, MON_DATA_SPECIES);
+ PlayCry1(species, 25);
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleIntroSlide(void)
+{
+ HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ gIntroSlideFlags |= 1;
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleIntroTrainerBallThrow(void)
+{
+ u8 paletteNum;
+ u8 taskId;
+
+ SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
+ StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_80335F8);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
+ paletteNum = AllocSpritePalette(0xD6F8);
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[4].data, 0x100 + paletteNum * 16, 32);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
+ taskId = CreateTask(sub_81595EC, 5);
+ gTasks[taskId].data[0] = gActiveBattler;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
+ gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
+ gBattlerControllerFuncs[gActiveBattler] = nullsub_99;
+}
+
+static void sub_8159478(u8 battlerId)
+{
+ u16 species;
+
+ gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = SPECIES_NONE;
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C);
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ GetBattlerSpriteSubpriority(battlerId));
+ gSprites[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
+ gSprites[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+}
+
+static void sub_81595EC(u8 taskId)
+{
+ if (gTasks[taskId].data[1] < 31)
+ {
+ ++gTasks[taskId].data[1];
+ }
+ else
+ {
+ u8 savedActiveBattler = gActiveBattler;
+
+ gActiveBattler = gTasks[taskId].data[0];
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ sub_8159478(gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = sub_8156624;
+ gActiveBattler = savedActiveBattler;
+ DestroyTask(taskId);
+ }
+}
+
+static void PokedudeHandleDrawPartyStatusSummary(void)
+{
+ if (gBattleBufferA[gActiveBattler][1] != 0
+ && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ PokedudeBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = TRUE;
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler,
+ (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4],
+ gBattleBufferA[gActiveBattler][1],
+ gBattleBufferA[gActiveBattler][2]);
+ PokedudeBufferExecCompleted();
+ }
+}
+
+static void PokedudeHandleHidePartyStatusSummary(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleEndBounceEffect(void)
+{
+ EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
+ EndBounceEffect(gActiveBattler, BOUNCE_MON);
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleSpriteInvisibility(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleBattleAnimation(void)
+{
+ u8 animationId = gBattleBufferA[gActiveBattler][1];
+ u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+
+ if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
+ PokedudeBufferExecCompleted();
+ else
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
+}
+
+static void PokedudeHandleLinkStandbyMsg(void)
+{
+ switch (gBattleBufferA[gActiveBattler][1])
+ {
+ case 0:
+ case 1:
+ EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
+ EndBounceEffect(gActiveBattler, BOUNCE_MON);
+ break;
+ case 2:
+ break;
+ }
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleResetActionMoveSelection(void)
+{
+ PokedudeBufferExecCompleted();
+}
+
+static void PokedudeHandleCmd55(void)
+{
+ gBattleOutcome = gBattleBufferA[gActiveBattler][1];
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ PokedudeBufferExecCompleted();
+ if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) && gBattleTypeFlags & BATTLE_TYPE_LINK)
+ gBattlerControllerFuncs[gActiveBattler] = sub_8156254;
+}
+
+static void PokedudeCmdEnd(void)
+{
+}
+
+static void sub_8159824(void)
+{
+ const u8 (*r7)[8] = gUnknown_8479060[gBattleStruct->field_96];
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
+ DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
+ }
+ if (*(r7[gUnknown_3005EE0[gActiveBattler][0]] + gActiveBattler + 4) == gUnknown_3005EE0[gActiveBattler][2])
+ {
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ PlaySE(SE_SELECT);
+ gUnknown_3005EE0[gActiveBattler][2] = 0;
+ switch (r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler])
+ {
+ case 0:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_USE_MOVE, 0);
+ break;
+ case 1:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_USE_ITEM, 0);
+ break;
+ case 2:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
+ break;
+ case 3:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_RUN, 0);
+ break;
+ }
+ PokedudeBufferExecCompleted();
+ ++gUnknown_3005EE0[gActiveBattler][0];
+ if (r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler] == 4)
+ gUnknown_3005EE0[gActiveBattler][0] = 0;
+ }
+ else
+ {
+ if (gActionSelectionCursor[gActiveBattler] != r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler]
+ && r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler + 4] / 2 == gUnknown_3005EE0[gActiveBattler][2])
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
+ gActionSelectionCursor[gActiveBattler] = r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler];
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ }
+ ++gUnknown_3005EE0[gActiveBattler][2];
+ }
+}
+
+static void sub_8159998(void)
+{
+ const u8 (*r7)[8] = gUnknown_84790D8[gBattleStruct->field_96];
+
+ if (*(r7[gUnknown_3005EE0[gActiveBattler][1]] + gActiveBattler + 4) == gUnknown_3005EE0[gActiveBattler][2])
+ {
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ PlaySE(SE_SELECT);
+ gUnknown_3005EE0[gActiveBattler][2] = 0;
+ BtlController_EmitTwoReturnValues(1,
+ B_ACTION_EXEC_SCRIPT,
+ r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler] | ((gActiveBattler ^ BIT_SIDE) << 8));
+ PokedudeBufferExecCompleted();
+ ++gUnknown_3005EE0[gActiveBattler][1];
+ if (r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler] == 255)
+ gUnknown_3005EE0[gActiveBattler][1] = 0;
+ }
+ else
+ {
+ if (r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler] != gMoveSelectionCursor[gActiveBattler]
+ && r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler + 4] / 2 == gUnknown_3005EE0[gActiveBattler][2])
+ {
+ PlaySE(SE_SELECT);
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] = r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler];
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ }
+ ++gUnknown_3005EE0[gActiveBattler][2];
+ }
+}
+
+#ifdef NONMATCHING
+static bool8 sub_8159AB8(void)
+{
+ const struct Unk_84790E8 *r6 = gUnknown_8479198[gBattleStruct->field_96];
+ // why is address of unk_2 loaded first?
+ const struct Unk_84790E8 *r12 = (const struct Unk_84790E8 *)gBattleBufferA[gActiveBattler];
+
+ if (r12->unk_0 == r6[gBattleStruct->field_97].unk_0
+ && gActiveBattler == r6[gBattleStruct->field_97].unk_1
+ && (r12->unk_0 != 16 || r6[gBattleStruct->field_97].unk_2 == r12->unk_2))
+ {
+ // why is mem reloaded here?
+ // asm("":::"memory");
+ if (r6[gBattleStruct->field_97].unk_4 != NULL)
+ {
+ gBattlerControllerFuncs[gActiveBattler] = r6[gBattleStruct->field_97].unk_4;
+ gUnknown_3005EE0[gActiveBattler][2] = 0;
+ gUnknown_3005EE0[gActiveBattler][3] = r6[gBattleStruct->field_97].unk_2;
+ ++gBattleStruct->field_97;
+ return TRUE;
+ }
+ ++gBattleStruct->field_97;
+ }
+ return FALSE;
+}
+#else
+NAKED
+static bool8 sub_8159AB8(void)
+{
+ asm_unified("\n\
+ push {r4-r7,lr}\n\
+ ldr r1, _08159B54 @ =gUnknown_8479198\n\
+ ldr r4, _08159B58 @ =gBattleStruct\n\
+ ldr r2, [r4]\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x96\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r6, [r0]\n\
+ ldr r3, _08159B5C @ =gActiveBattler\n\
+ ldrb r5, [r3]\n\
+ lsls r1, r5, 9\n\
+ ldr r0, _08159B60 @ =gBattleBufferA + 2\n\
+ adds r7, r1, r0\n\
+ mov r12, r7\n\
+ subs r0, 0x2\n\
+ adds r1, r0\n\
+ adds r2, 0x97\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 3\n\
+ adds r0, r6\n\
+ ldrb r1, [r1]\n\
+ adds r7, r4, 0\n\
+ adds r4, r3, 0\n\
+ ldrb r2, [r0]\n\
+ cmp r1, r2\n\
+ bne _08159B70\n\
+ ldrb r2, [r0, 0x1]\n\
+ cmp r5, r2\n\
+ bne _08159B70\n\
+ cmp r1, 0x10\n\
+ bne _08159B04\n\
+ ldrh r0, [r0, 0x2]\n\
+ mov r1, r12\n\
+ ldrh r1, [r1]\n\
+ cmp r0, r1\n\
+ bne _08159B70\n\
+ _08159B04:\n\
+ ldr r0, [r7]\n\
+ adds r3, r0, 0\n\
+ adds r3, 0x97\n\
+ ldrb r1, [r3]\n\
+ lsls r0, r1, 3\n\
+ adds r0, r6\n\
+ ldr r2, [r0, 0x4]\n\
+ cmp r2, 0\n\
+ beq _08159B6C\n\
+ ldr r1, _08159B64 @ =gBattlerControllerFuncs\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ str r2, [r0]\n\
+ ldr r2, _08159B68 @ =gUnknown_3005EE0\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldr r1, [r0]\n\
+ movs r0, 0\n\
+ strb r0, [r1, 0x2]\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldr r1, [r0]\n\
+ ldr r0, [r7]\n\
+ adds r0, 0x97\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 3\n\
+ adds r0, r6\n\
+ ldrh r0, [r0, 0x2]\n\
+ strb r0, [r1, 0x3]\n\
+ ldr r1, [r7]\n\
+ adds r1, 0x97\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+ movs r0, 0x1\n\
+ b _08159B72\n\
+ .align 2, 0\n\
+ _08159B54: .4byte gUnknown_8479198\n\
+ _08159B58: .4byte gBattleStruct\n\
+ _08159B5C: .4byte gActiveBattler\n\
+ _08159B60: .4byte gBattleBufferA + 2\n\
+ _08159B64: .4byte gBattlerControllerFuncs\n\
+ _08159B68: .4byte gUnknown_3005EE0\n\
+ _08159B6C:\n\
+ adds r0, r1, 0x1\n\
+ strb r0, [r3]\n\
+ _08159B70:\n\
+ movs r0, 0\n\
+ _08159B72:\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ ");
+}
+#endif
+
+static void sub_8159B78(void)
+{
+ gUnknown_3005EE0[gActiveBattler][2] = 0;
+ gBattlerControllerFuncs[gActiveBattler] = PokedudeBufferRunCommand;
+}
+
+static void sub_8159BA8(void)
+{
+ switch (gUnknown_3005EE0[gActiveBattler][2])
+ {
+ case 0:
+ if (!gPaletteFade.active)
+ {
+ BeginNormalPaletteFade(0xFFFFFF7F, 4, 0, 8, RGB_BLACK);
+ ++gUnknown_3005EE0[gActiveBattler][2];
+ }
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ gUnknown_3005EE0[gActiveBattler][4] = gBattle_BG0_Y;
+ sub_80EB30C();
+ ++gUnknown_3005EE0[gActiveBattler][2];
+ }
+ break;
+ case 2:
+ gBattle_BG0_Y = 0;
+ BattleStringExpandPlaceholdersToDisplayedString(sub_8159EF0());
+ BattlePutTextOnWindow(gDisplayedStringBattle, 24);
+ ++gUnknown_3005EE0[gActiveBattler][2];
+ break;
+ case 3:
+ if (!IsTextPrinterActive(24) && JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ BeginNormalPaletteFade(0xFFFFFF7F, 4, 8, 0, RGB_BLACK);
+ ++gUnknown_3005EE0[gActiveBattler][2];
+ }
+ break;
+ case 4:
+ if (!gPaletteFade.active)
+ {
+ if (gUnknown_3005EE0[gActiveBattler][3] == 13)
+ {
+ BattleStopLowHpSound();
+ PlayBGM(MUS_WIN_YASEI);
+ }
+ gBattle_BG0_Y = gUnknown_3005EE0[gActiveBattler][4];
+ sub_80EB524();
+ sub_8159B78();
+ }
+ break;
+ }
+}
+
+static void sub_8159D04(void)
+{
+ switch (gUnknown_3005EE0[gActiveBattler][2])
+ {
+ case 0:
+ if (!gPaletteFade.active)
+ {
+ sub_80EEFC8(&gBattleStruct->field_95,
+ &gBattleStruct->field_94,
+ GetBattlerAtPosition(B_POSITION_PLAYER_LEFT));
+ BeginNormalPaletteFade(0xFFFFFF7F, 4, 0, 8, RGB_BLACK);
+ ++gUnknown_3005EE0[gActiveBattler][2];
+ }
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ u32 mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_94]) << 16;
+
+ ++mask; // It's possible that this is influenced by other functions, as
+ --mask; // this also striked in battle_controller_oak_old_man.c but was naturally fixed.
+ BeginNormalPaletteFade(mask, 4, 8, 0, RGB_BLACK);
+ ++gUnknown_3005EE0[gActiveBattler][2];
+ }
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ {
+ sub_80EB30C();
+ ++gUnknown_3005EE0[gActiveBattler][2];
+ }
+ break;
+ case 3:
+ BattleStringExpandPlaceholdersToDisplayedString(sub_8159EF0());
+ BattlePutTextOnWindow(gDisplayedStringBattle, 24);
+ ++gUnknown_3005EE0[gActiveBattler][2];
+ break;
+ case 4:
+ if (!IsTextPrinterActive(24) && JOY_NEW(A_BUTTON))
+ {
+ u32 mask;
+
+ PlaySE(SE_SELECT);
+ mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_94]) << 16;
+ ++mask;
+ --mask;
+ BeginNormalPaletteFade(mask, 4, 0, 8, RGB_BLACK);
+ ++gUnknown_3005EE0[gActiveBattler][2];
+ }
+ break;
+ case 5:
+ if (!gPaletteFade.active)
+ {
+ BeginNormalPaletteFade(0xFFFFFF7F, 4, 8, 0, RGB_BLACK);
+ ++gUnknown_3005EE0[gActiveBattler][2];
+ }
+ break;
+ case 6:
+ if (!gPaletteFade.active)
+ {
+ if (gUnknown_3005EE0[gActiveBattler][3] == 13)
+ {
+ BattleStopLowHpSound();
+ PlayBGM(MUS_WIN_YASEI);
+ }
+ sub_80EF0E0(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT));
+ sub_80EB524();
+ sub_8159B78();
+ }
+ break;
+ }
+}
+
+static const u8 *sub_8159EF0(void)
+{
+ switch (gBattleStruct->field_96)
+ {
+ case 0:
+ default:
+ return gUnknown_84791A8[gBattleStruct->field_97 - 1];
+ case 1:
+ return gUnknown_84791B8[gBattleStruct->field_97 - 1];
+ case 2:
+ return gUnknown_84791CC[gBattleStruct->field_97 - 1];
+ case 3:
+ return gUnknown_84791E8[gBattleStruct->field_97 - 1];
+ }
+}
+
+void InitPokedudePartyAndOpponent(void)
+{
+ s32 i, j;
+ struct Pokemon *mon;
+ s32 myIdx = 0;
+ s32 opIdx = 0;
+ const struct PokedudeBattlePartyInfo *data;
+
+ gBattleTypeFlags = BATTLE_TYPE_POKEDUDE;
+ ZeroPlayerPartyMons();
+ ZeroEnemyPartyMons();
+ data = sPokedudeBattlePartyPointers[gSpecialVar_0x8004];
+ i = 0;
+ do
+ {
+ if (data[i].side == B_SIDE_PLAYER)
+ mon = &gPlayerParty[myIdx++];
+ else
+ mon = &gEnemyParty[opIdx++];
+ CreateMonWithGenderNatureLetter(mon, data[i].species, data[i].level, 0, data[i].gender, data[i].nature, 0);
+ for (j = 0; j < 4; ++j)
+ SetMonMoveSlot(mon, data[i].moves[j], j);
+ } while (data[++i].side != 0xFF);
+}
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index f3530fc4b..6fb090307 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -85,9 +85,9 @@ static void InitSinglePlayerBtlControllers(void)
gBattleMainFunc = BeginBattleIntro;
if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)
{
- gBattlerControllerFuncs[0] = SetControllerToPokeDude;
+ gBattlerControllerFuncs[0] = SetControllerToPokedude;
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
- gBattlerControllerFuncs[1] = SetControllerToPokeDude;
+ gBattlerControllerFuncs[1] = SetControllerToPokedude;
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
gBattlersCount = 2;
}
@@ -110,13 +110,13 @@ static void InitSinglePlayerBtlControllers(void)
gBattleMainFunc = BeginBattleIntro;
if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)
{
- gBattlerControllerFuncs[0] = SetControllerToPokeDude;
+ gBattlerControllerFuncs[0] = SetControllerToPokedude;
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
- gBattlerControllerFuncs[1] = SetControllerToPokeDude;
+ gBattlerControllerFuncs[1] = SetControllerToPokedude;
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
- gBattlerControllerFuncs[2] = SetControllerToPokeDude;
+ gBattlerControllerFuncs[2] = SetControllerToPokedude;
gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
- gBattlerControllerFuncs[3] = SetControllerToPokeDude;
+ gBattlerControllerFuncs[3] = SetControllerToPokedude;
gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
gBattlersCount = MAX_BATTLERS_COUNT;
}
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 181f59b09..c5c8e89a4 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -7064,7 +7064,7 @@ static void atk8F_forcerandomswitch(void)
u8 valid;
u8 val;
- if (!GetBattlerSide(gBattlerTarget))
+ if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
diff --git a/src/battle_setup.c b/src/battle_setup.c
index b9da39ddb..9fef6a8a5 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -13,7 +13,6 @@
#include "strings.h"
#include "string_util.h"
#include "event_data.h"
-#include "unk_8159F40.h"
#include "map_obj_80688E4.h"
#include "metatile_behavior.h"
#include "event_scripts.h"
@@ -28,6 +27,7 @@
#include "battle.h"
#include "battle_setup.h"
#include "battle_transition.h"
+#include "battle_controllers.h"
#include "constants/battle_setup.h"
#include "constants/flags.h"
#include "constants/items.h"
diff --git a/src/bug.c b/src/bug.c
index 9b8935744..b9f1795ab 100644
--- a/src/bug.c
+++ b/src/bug.c
@@ -172,7 +172,7 @@ static const union AffineAnimCmd gUnknown_83E733C[] =
AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 18),
AFFINEANIMCMD_LOOP(0),
- AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 8),
+ AFFINEANIMCMD_FRAME(-0x5, -0x5, 0, 8),
AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 8),
AFFINEANIMCMD_LOOP(5),
AFFINEANIMCMD_END,
@@ -202,7 +202,7 @@ static void sub_80B3FAC(struct Sprite *sprite)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
}
- else if (!GetBattlerSide(gBattleAnimTarget))
+ else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
{
StartSpriteAffineAnim(sprite, 1);
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
@@ -226,7 +226,7 @@ static void sub_80B407C(struct Sprite *sprite)
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
StartSpriteAffineAnim(sprite, 2);
}
- else if (!GetBattlerSide(gBattleAnimTarget))
+ else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
{
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
@@ -283,12 +283,12 @@ static void sub_80B41C0(struct Sprite *sprite)
static void sub_80B41F8(struct Sprite *sprite)
{
SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
- if (GetBattlerSide(gBattleAnimAttacker))
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
sprite->pos1.x -= gBattleAnimArgs[0];
else
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
- if (!GetBattlerSide(gBattleAnimTarget))
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
sprite->pos1.y += 8;
sprite->callback = sub_80B4274;
}
@@ -356,7 +356,7 @@ static void AnimTranslateStinger(struct Sprite *sprite)
{
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
}
- else if (GetBattlerSide(gBattleAnimAttacker))
+ else if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
@@ -399,7 +399,7 @@ static void AnimTranslateStinger(struct Sprite *sprite)
static void AnimMissileArc(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, 1);
- if (GetBattlerSide(gBattleAnimAttacker))
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
diff --git a/src/electric.c b/src/electric.c
new file mode 100644
index 000000000..025eac48b
--- /dev/null
+++ b/src/electric.c
@@ -0,0 +1,1272 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "trig.h"
+#include "sound.h"
+#include "constants/songs.h"
+
+static void sub_80ADBEC(struct Sprite *sprite);
+static void sub_80ADC58(struct Sprite *sprite);
+static void sub_80ADCB8(struct Sprite *sprite);
+static void sub_80ADD4C(struct Sprite *sprite);
+static void sub_80ADEB0(struct Sprite *sprite);
+static void sub_80AE000(struct Sprite *sprite);
+static void sub_80AE06C(struct Sprite *sprite);
+static void sub_80AE1A0(struct Sprite *sprite);
+static void sub_80AE420(struct Sprite *sprite);
+static void sub_80AE470(struct Sprite *sprite);
+static void sub_80AE71C(struct Sprite *sprite);
+static void sub_80AE774(struct Sprite *sprite);
+static void sub_80AE7DC(struct Sprite *sprite);
+static void sub_80AEC34(struct Sprite *sprite);
+static void sub_80AEC80(struct Sprite *sprite);
+static void sub_80AEF60(struct Sprite *sprite);
+static void sub_80ADC3C(struct Sprite *sprite);
+static void sub_80ADC9C(struct Sprite *sprite);
+static void sub_80ADF38(struct Sprite *sprite);
+static void sub_80AE130(struct Sprite *sprite);
+static void sub_80AE278(u8 taskId);
+static void sub_80AE4F4(struct Sprite *sprite);
+static void sub_80AE5BC(u8 taskId);
+static void sub_80AE704(struct Sprite *sprite);
+static void sub_80AE83C(struct Sprite *sprite);
+static bool8 sub_80AEB98(struct Task *task, u8 taskId);
+static bool8 sub_80AEE74(struct Task *task, u8 taskId);
+static bool8 sub_80AF058(struct Task *task, u8 taskId);
+static void sub_80AF0C8(struct Sprite *sprite);
+
+static const union AnimCmd gUnknown_83E5F1C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 8),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_83E5F34[] =
+{
+ gUnknown_83E5F1C,
+};
+
+const struct SpriteTemplate gUnknown_83E5F38 =
+{
+ .tileTag = ANIM_TAG_LIGHTNING,
+ .paletteTag = ANIM_TAG_LIGHTNING,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5F34,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80ADBEC,
+};
+
+static const union AffineAnimCmd gUnknown_83E5F50[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 20),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 60),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gUnknown_83E5F70[] =
+{
+ gUnknown_83E5F50,
+};
+
+const struct SpriteTemplate gUnknown_83E5F74 =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_83ACA38,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_83E5F70,
+ .callback = sub_80ADC58,
+};
+
+static const union AnimCmd gUnknown_83E5F8C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_FRAME(80, 5),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gUnknown_83E5FA8[] =
+{
+ gUnknown_83E5F8C,
+};
+
+const struct SpriteTemplate gUnknown_83E5FAC =
+{
+ .tileTag = ANIM_TAG_SHOCK,
+ .paletteTag = ANIM_TAG_SHOCK,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5FA8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80ADCB8,
+};
+
+const struct SpriteTemplate gUnknown_83E5FC4 =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_83ACA30,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80ADD4C,
+};
+
+const struct SpriteTemplate gUnknown_83E5FDC =
+{
+ .tileTag = ANIM_TAG_BLACK_BALL_2,
+ .paletteTag = ANIM_TAG_BLACK_BALL_2,
+ .oam = &gOamData_83AC9D0,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+static const union AffineAnimCmd gUnknown_83E5FF4[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6004[] =
+{
+ gUnknown_83E5FF4,
+};
+
+const struct SpriteTemplate gUnknown_83E6008 =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_83ACA30,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6004,
+ .callback = sub_80ADEB0,
+};
+
+static const union AnimCmd gUnknown_83E6020[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gUnknown_83E6030[] =
+{
+ gUnknown_83E6020,
+};
+
+static const union AffineAnimCmd gUnknown_83E6034[] =
+{
+ AFFINEANIMCMD_FRAME(0xE8, 0xE8, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 10),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 10),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6054[] =
+{
+ gUnknown_83E6034,
+};
+
+const struct SpriteTemplate gUnknown_83E6058 =
+{
+ .tileTag = ANIM_TAG_SHOCK_3,
+ .paletteTag = ANIM_TAG_SHOCK_3,
+ .oam = &gOamData_83ACA38,
+ .anims = gUnknown_83E6030,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6054,
+ .callback = sub_80AE000,
+};
+
+const struct SpriteTemplate gUnknown_83E6070 =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_83ACA30,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6004,
+ .callback = sub_80AE06C,
+};
+
+const struct SpriteTemplate gElectricitySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_83AC9D0,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AE1A0,
+};
+
+static const struct SpriteTemplate gUnknown_83E60A0 =
+{
+ .tileTag = ANIM_TAG_SPARK,
+ .paletteTag = ANIM_TAG_SPARK,
+ .oam = &gOamData_83AC9C8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AE420,
+};
+
+const struct SpriteTemplate gUnknown_83E60B8 =
+{
+ .tileTag = ANIM_TAG_SPARK_H,
+ .paletteTag = ANIM_TAG_SPARK_H,
+ .oam = &gOamData_83AC9F8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AE470,
+};
+
+static const s8 gUnknown_83E60D0[][2] =
+{
+ { 58, -60},
+ {-56, -36},
+ { 8, -56},
+ {-16, 56},
+ { 58, -10},
+ {-58, 10},
+ { 48, -18},
+ {-8, 56},
+ { 16, -56},
+ {-58, -42},
+ { 58, 30},
+ {-48, 40},
+ { 12, -48},
+ { 48, -12},
+ {-56, 18},
+ { 48, 48},
+};
+
+static const union AnimCmd gUnknown_83E60F0[] =
+{
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E6104[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_83E6118[] =
+{
+ gUnknown_83E60F0,
+ gUnknown_83E6104,
+};
+
+static const struct SpriteTemplate gUnknown_83E6120 =
+{
+ .tileTag = ANIM_TAG_ELECTRIC_ORBS,
+ .paletteTag = ANIM_TAG_ELECTRIC_ORBS,
+ .oam = &gOamData_83AC9C8,
+ .anims = gUnknown_83E6118,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static const union AffineAnimCmd gUnknown_83E6138[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 60),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(-0x4, -0x4, 0, 5),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5),
+ AFFINEANIMCMD_LOOP(10),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd gUnknown_83E6178[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 30),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x4, -0x4, 0, 5),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5),
+ AFFINEANIMCMD_JUMP(3),
+};
+
+static const union AffineAnimCmd gUnknown_83E61A8[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 30),
+ AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 30),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gUnknown_83E61C8[] =
+{
+ gUnknown_83E6138,
+ gUnknown_83E6178,
+ gUnknown_83E61A8,
+};
+
+const struct SpriteTemplate gUnknown_83E61D4 =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_83ACB60,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_83E61C8,
+ .callback = sub_80AE71C,
+};
+
+static const union AnimCmd gUnknown_83E61EC[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_83E6200[] =
+{
+ gUnknown_83E61EC,
+};
+
+const struct SpriteTemplate gUnknown_83E6204 =
+{
+ .tileTag = ANIM_TAG_ELECTRICITY,
+ .paletteTag = ANIM_TAG_ELECTRICITY,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E6200,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AE774,
+};
+
+const struct SpriteTemplate gUnknown_83E621C =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_83ACB60,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_83E61C8,
+ .callback = sub_80AE7DC,
+};
+
+static const union AnimCmd gUnknown_83E6234[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E623C[] =
+{
+ ANIMCMD_FRAME(2, 3),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E6244[] =
+{
+ ANIMCMD_FRAME(4, 3),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E624C[] =
+{
+ ANIMCMD_FRAME(6, 3),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_83E6254[] =
+{
+ gUnknown_83E6234,
+ gUnknown_83E623C,
+ gUnknown_83E6244,
+ gUnknown_83E624C,
+};
+
+static const union AffineAnimCmd gUnknown_83E6264[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6274[] =
+{
+ gUnknown_83E6264,
+};
+
+static const struct SpriteTemplate gUnknown_83E6278 =
+{
+ .tileTag = ANIM_TAG_SPARK,
+ .paletteTag = ANIM_TAG_SPARK,
+ .oam = &gOamData_83ACAC8,
+ .anims = gUnknown_83E6254,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6274,
+ .callback = sub_80AEC34,
+};
+
+const struct SpriteTemplate gUnknown_83E6290 =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_83ACB60,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_83E61C8,
+ .callback = sub_80AEC80,
+};
+
+static const struct SpriteTemplate gUnknown_83E62A8 =
+{
+ .tileTag = ANIM_TAG_SPARK,
+ .paletteTag = ANIM_TAG_SPARK,
+ .oam = &gOamData_83AC9C8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AEF60,
+};
+
+static void sub_80ADBEC(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->callback = sub_80ADC3C;
+}
+
+static void sub_80ADC3C(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_80ADC58(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->callback = sub_80ADC9C;
+}
+
+static void sub_80ADC9C(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ DestroySpriteAndMatrix(sprite);
+}
+
+static void sub_80ADCB8(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ sprite->pos1.y -= gBattleAnimArgs[1];
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[3];
+ sprite->data[3] = gBattleAnimArgs[4];
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = TranslateSpriteInCircleOverDuration;
+}
+
+static void sub_80ADD4C(struct Sprite *sprite)
+{
+ u8 battler;
+ u32 matrixNum;
+ s16 sineVal;
+
+ switch (gBattleAnimArgs[4])
+ {
+ case 0:
+ battler = gBattleAnimAttacker;
+ break;
+ case 1:
+ default:
+ battler = gBattleAnimTarget;
+ break;
+ case 2:
+ if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
+ battler = gBattleAnimAttacker;
+ else
+ battler = BATTLE_PARTNER(gBattleAnimAttacker);
+ break;
+ case 3:
+ if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
+ battler = BATTLE_PARTNER(gBattleAnimTarget);
+ else
+ battler = gBattleAnimTarget;
+ break;
+ }
+ if (gBattleAnimArgs[5] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X);
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+ sprite->pos2.x = (gSineTable[gBattleAnimArgs[0]] * gBattleAnimArgs[1]) >> 8;
+ sprite->pos2.y = (gSineTable[gBattleAnimArgs[0] + 64] * gBattleAnimArgs[1]) >> 8;
+ if (gBattleAnimArgs[6] & 1)
+ sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1;
+ matrixNum = sprite->oam.matrixNum;
+ sineVal = gSineTable[gBattleAnimArgs[2]];
+ gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[gBattleAnimArgs[2] + 64];
+ gOamMatrices[matrixNum].b = sineVal;
+ gOamMatrices[matrixNum].c = -sineVal;
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->callback = sub_80B1D3C;
+}
+
+static void sub_80ADEB0(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, 1);
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = gBattleAnimArgs[2];
+ sprite->data[6] = gBattleAnimArgs[5];
+ sprite->data[7] = gBattleAnimArgs[4];
+ sprite->oam.tileNum += gBattleAnimArgs[6] * 4;
+ sprite->callback = sub_80ADF38;
+ sprite->callback(sprite);
+}
+
+static void sub_80ADF38(struct Sprite *sprite)
+{
+ if (!AnimTranslateLinear(sprite))
+ {
+ sprite->pos2.x += Sin(sprite->data[7], sprite->data[5]);
+ sprite->pos2.y += Cos(sprite->data[7], sprite->data[5]);
+ sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF;
+ if(!(sprite->data[7] % 3))
+ sprite->invisible ^= 1;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+static void sub_80ADFB0(struct Sprite *sprite)
+{
+ if (--sprite->data[5] == -1)
+ {
+ sprite->invisible ^= 1;
+ sprite->data[5] = sprite->data[4];
+ }
+ if (sprite->data[3]-- <= 0)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_80AE000(struct Sprite *sprite)
+{
+ if (IsContest() || GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
+ sprite->data[3] = gBattleAnimArgs[0];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->data[5] = gBattleAnimArgs[3];
+ sprite->callback = sub_80ADFB0;
+}
+
+static void sub_80AE06C(struct Sprite *sprite)
+{
+ u8 battler;
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ if (gBattleAnimArgs[7] & 0x8000)
+ battler = gBattleAnimTarget;
+ else
+ battler = gBattleAnimAttacker;
+ if (IsContest() || GetBattlerSide(battler) == B_SIDE_PLAYER)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
+ sprite->data[4] = gBattleAnimArgs[7] & 0x7FFF;
+ sprite->data[5] = gBattleAnimArgs[2];
+ sprite->data[6] = gBattleAnimArgs[5];
+ sprite->data[7] = gBattleAnimArgs[4];
+ sprite->oam.tileNum += gBattleAnimArgs[6] * 4;
+ sprite->callback = sub_80AE130;
+ sprite->callback(sprite);
+}
+
+static void sub_80AE130(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[7], sprite->data[5]);
+ sprite->pos2.y = Cos(sprite->data[7], sprite->data[5]);
+ sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF;
+ if (sprite->data[7] % sprite->data[4] == 0)
+ sprite->invisible ^= 1;
+ if (sprite->data[0]-- <= 0)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_80AE1A0(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, FALSE);
+ sprite->oam.tileNum += gBattleAnimArgs[3] * 4;
+ if (gBattleAnimArgs[3] == 1)
+ sprite->oam.matrixNum = ST_OAM_HFLIP;
+ else if (gBattleAnimArgs[3] == 2)
+ sprite->oam.matrixNum = ST_OAM_VFLIP;
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_80AE220(u8 taskId)
+{
+ gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[0];
+ gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[1];
+ gTasks[taskId].data[2] = gBattleAnimArgs[2];
+ gTasks[taskId].func = sub_80AE278;
+}
+
+static void sub_80AE278(u8 taskId)
+{
+ u16 r8;
+ u16 r2;
+ s16 r12;
+ u8 spriteId = 0;
+ u8 r7 = 0;
+ u8 sp = gTasks[taskId].data[2];
+ s16 x = gTasks[taskId].data[0];
+ s16 y = gTasks[taskId].data[1];
+
+ if (!gTasks[taskId].data[2])
+ {
+ r8 = 0;
+ r2 = 1;
+ r12 = 16;
+ }
+ else
+ {
+ r12 = 16;
+ r8 = 8;
+ r2 = 4;
+ }
+ switch (gTasks[taskId].data[10])
+ {
+ case 0:
+ r12 *= 1;
+ spriteId = CreateSprite(&gUnknown_83E60A0, x, y + r12, 2);
+ ++r7;
+ break;
+ case 2:
+ r12 *= 2;
+ r8 += r2;
+ spriteId = CreateSprite(&gUnknown_83E60A0, x, y + r12, 2);
+ ++r7;
+ break;
+ case 4:
+ r12 *= 3;
+ r8 += r2 * 2;
+ spriteId = CreateSprite(&gUnknown_83E60A0, x, y + r12, 2);
+ ++r7;
+ break;
+ case 6:
+ r12 *= 4;
+ r8 += r2 * 3;
+ spriteId = CreateSprite(&gUnknown_83E60A0, x, y + r12, 2);
+ ++r7;
+ break;
+ case 8:
+ r12 *= 5;
+ spriteId = CreateSprite(&gUnknown_83E60A0, x, y + r12, 2);
+ ++r7;
+ break;
+ case 10:
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+ if (r7)
+ {
+ gSprites[spriteId].oam.tileNum += r8;
+ gSprites[spriteId].data[0] = sp;
+ gSprites[spriteId].callback(&gSprites[spriteId]);
+ }
+ ++gTasks[taskId].data[10];
+}
+
+static void sub_80AE420(struct Sprite *sprite)
+{
+ if (!sprite->data[0])
+ {
+ sprite->oam.shape = ST_OAM_V_RECTANGLE;
+ sprite->oam.size = ST_OAM_SIZE_0;
+ }
+ else
+ {
+ sprite->oam.shape = ST_OAM_SQUARE;
+ sprite->oam.size = ST_OAM_SIZE_1;
+ }
+ if (++sprite->data[1] == 15)
+ DestroySprite(sprite);
+}
+
+static void sub_80AE470(struct Sprite *sprite)
+{
+ u8 spriteId;
+
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ spriteId = CreateSprite(&gUnknown_83E60B8, sprite->pos1.x + 32, sprite->pos1.y, sprite->subpriority);
+ gSprites[spriteId].oam.tileNum += 8;
+ ++gAnimVisualTaskCount;
+ gSprites[spriteId].callback = sub_80AE4F4;
+ sprite->callback = sub_80AE4F4;
+}
+
+static void sub_80AE4F4(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 3)
+ {
+ sprite->data[0] = 0;
+ sprite->invisible ^= 1;
+ }
+ if (++sprite->data[1] == 51)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80AE540(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (!gBattleAnimArgs[0])
+ {
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+ else
+ {
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+ task->data[6] = gBattleAnimArgs[1];
+ task->data[7] = 0;
+ task->data[8] = 0;
+ task->data[9] = 0;
+ task->data[10] = 0;
+ task->data[11] = gBattleAnimArgs[3];
+ task->data[12] = 0;
+ task->data[13] = gBattleAnimArgs[2];
+ task->func = sub_80AE5BC;
+}
+
+static void sub_80AE5BC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (task->data[6])
+ {
+ if (++task->data[12] > task->data[13])
+ {
+ u8 spriteId;
+
+ task->data[12] = 0;
+ spriteId = CreateSprite(&gUnknown_83E6120, task->data[14], task->data[15], 2);
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+
+ sprite->pos1.x += gUnknown_83E60D0[task->data[9]][0];
+ sprite->pos1.y += gUnknown_83E60D0[task->data[9]][1];
+ sprite->data[0] = 40 - task->data[8] * 5;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = task->data[14];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = task->data[15];
+ sprite->data[5] = taskId;
+ InitAnimLinearTranslation(sprite);
+ StoreSpriteCallbackInData6(sprite, sub_80AE704);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ if (++task->data[9] > 15)
+ task->data[9] = 0;
+ if (++task->data[10] >= task->data[11])
+ {
+ task->data[10] = 0;
+ if (task->data[8] <= 5)
+ ++task->data[8];
+ }
+ ++task->data[7];
+ --task->data[6];
+ }
+ }
+ }
+ else if(task->data[7] == 0)
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+static void sub_80AE6D0(struct Sprite *sprite)
+{
+ if (AnimTranslateLinear(sprite))
+ {
+ --gTasks[sprite->data[5]].data[7];
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_80AE704(struct Sprite *sprite)
+{
+ StartSpriteAnim(sprite, 1);
+ sprite->callback = sub_80AE6D0;
+}
+
+static void sub_80AE71C(struct Sprite *sprite)
+{
+ if (!gBattleAnimArgs[0])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+}
+
+static void sub_80AE774(struct Sprite *sprite)
+{
+ if (!gBattleAnimArgs[0])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+ sprite->pos2.x = gBattleAnimArgs[1];
+ sprite->pos2.y = gBattleAnimArgs[2];
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+}
+
+static void sub_80AE7DC(struct Sprite *sprite)
+{
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->data[6] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ sprite->data[7] = 16;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ sprite->data[7] *= -1;
+ sprite->callback = sub_80AE83C;
+}
+
+static void sub_80AE83C(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[1] > 40)
+ ++sprite->data[0];
+ break;
+ case 1:
+ sprite->pos1.x += sprite->data[7];
+ gSprites[sprite->data[6]].pos2.x += sprite->data[7];
+ if ((u16)(sprite->pos1.x + 80) > 400)
+ DestroySpriteAndMatrix(sprite);
+ break;
+ }
+}
+
+void sub_80AE8A0(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ task->data[14] = -32;
+ task->data[13] = 2;
+ }
+ else
+ {
+ task->data[14] = 32;
+ task->data[13] = -2;
+ }
+ gSprites[task->data[15]].pos2.x = task->data[14];
+ ++task->data[0];
+ break;
+ case 1:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ gSprites[task->data[15]].invisible ^= 1;
+
+ if (task->data[14])
+ {
+ task->data[14] += task->data[13];
+ gSprites[task->data[15]].pos2.x = task->data[14];
+ }
+ else
+ {
+ ++task->data[0];
+ }
+ }
+ break;
+ case 2:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ gSprites[task->data[15]].invisible ^= 1;
+ if (++task->data[2] == 8)
+ ++task->data[0];
+ }
+ break;
+ case 3:
+ gSprites[task->data[15]].invisible = FALSE;
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_80AEA10(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch(task->data[0])
+ {
+ case 0:
+ task->data[1] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER ? 1 : -1;
+ switch (gBattleAnimArgs[0])
+ {
+ case 0:
+ task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ task->data[5] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ task->data[4] = (task->data[1] * 128) + 120;
+ break;
+ case 4:
+ task->data[3] = 120 - (task->data[1] * 128);
+ task->data[5] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ task->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - (task->data[1] * 32);
+ break;
+ default:
+ if ((gBattleAnimArgs[0] & 1) != 0)
+ {
+ task->data[3] = 256;
+ task->data[4] = -16;
+ }
+ else
+ {
+ task->data[3] = -16;
+ task->data[4] = 256;
+ }
+ if (task->data[1] == 1)
+ {
+ task->data[5] = 80 - gBattleAnimArgs[0] * 10;
+ }
+ else
+ {
+ u16 temp;
+
+ task->data[5] = gBattleAnimArgs[0] * 10 + 40;
+ temp = task->data[3];
+ task->data[3] = task->data[4];
+ task->data[4] = temp;
+ }
+ }
+ if (task->data[3] < task->data[4])
+ {
+ task->data[1] = 1;
+ task->data[6] = 0;
+ }
+ else
+ {
+ task->data[1] = -1;
+ task->data[6] = 3;
+ }
+ ++task->data[0];
+ break;
+ case 1:
+ if (++task->data[2] > 0)
+ {
+ task->data[2] = 0;
+ if (sub_80AEB98(task, taskId) || sub_80AEB98(task, taskId))
+ ++task->data[0];
+ }
+ break;
+ case 2:
+ if (task->data[7] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static bool8 sub_80AEB98(struct Task *task, u8 taskId)
+{
+ u8 spriteId = CreateSprite(&gUnknown_83E6278, task->data[3], task->data[5], 35);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[6] = taskId;
+ gSprites[spriteId].data[7] = 7;
+ ++task->data[7];
+ }
+ task->data[6] += task->data[1];
+ if (task->data[6] < 0)
+ task->data[6] = 3;
+ if (task->data[6] > 3)
+ task->data[6] = 0;
+ task->data[3] += task->data[1] * 16;
+ if ((task->data[1] == 1 && task->data[3] >= task->data[4])
+ || (task->data[1] == -1 && task->data[3] <= task->data[4]))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void sub_80AEC34(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 12)
+ {
+ --gTasks[sprite->data[6]].data[sprite->data[7]];
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_80AEC80(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ StartSpriteAffineAnim(sprite, 2);
+ ++sprite->data[0];
+ break;
+ case 1:
+ if (sprite->affineAnimEnded)
+ DestroySpriteAndMatrix(sprite);
+ break;
+ }
+}
+
+void sub_80AECE0(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[6] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ task->data[7] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ task->data[8] = 4;
+ task->data[10] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ task->data[9] = (task->data[10] - task->data[6]) / 5;
+ task->data[4] = 7;
+ task->data[5] = -1;
+ task->data[11] = 12;
+ task->data[12] = BattleAnimAdjustPanning(task->data[11] - 76);
+ task->data[13] = BattleAnimAdjustPanning(SOUND_PAN_TARGET);
+ task->data[14] = task->data[12];
+ task->data[15] = (task->data[13] - task->data[12]) / 3;
+ ++task->data[0];
+ break;
+ case 1:
+ if (++task->data[1] > 0)
+ {
+ task->data[1] = 0;
+ if (sub_80AEE74(task, taskId))
+ {
+ if (task->data[2] == 5)
+ task->data[0] = 3;
+ else
+ ++task->data[0];
+ }
+ }
+ if (task->data[11])
+ --task->data[11];
+ break;
+ case 2:
+ if (task->data[11])
+ --task->data[11];
+ if (++task->data[1] > 4)
+ {
+ task->data[1] = 0;
+ if (task->data[2] & 1)
+ {
+ task->data[7] = 4;
+ task->data[8] = 68;
+ task->data[4] = 0;
+ task->data[5] = 1;
+ }
+ else
+ {
+ task->data[7] = 68;
+ task->data[8] = 4;
+ task->data[4] = 7;
+ task->data[5] = -1;
+ }
+ if (task->data[11])
+ task->data[0] = 4;
+ else
+ task->data[0] = 1;
+ }
+ break;
+ case 3:
+ if (task->data[3] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ case 4:
+ if (task->data[11])
+ --task->data[11];
+ else
+ task->data[0] = 1;
+ break;
+ }
+}
+
+static bool8 sub_80AEE74(struct Task *task, u8 taskId)
+{
+ u8 spriteId = CreateSprite(&gUnknown_83E62A8, task->data[6], task->data[7], 35);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.tileNum += task->data[4];
+ task->data[4] += task->data[5];
+ if (task->data[4] < 0)
+ task->data[4] = 7;
+ if (task->data[4] > 7)
+ task->data[4] = 0;
+ gSprites[spriteId].data[6] = taskId;
+ gSprites[spriteId].data[7] = 3;
+ ++task->data[3];
+ }
+ if (task->data[4] == 0 && task->data[5] > 0)
+ {
+ task->data[14] += task->data[15];
+ PlaySE12WithPanning(SE_W085, task->data[14]);
+ }
+ if ((task->data[5] < 0 && task->data[7] <= task->data[8])
+ || (task->data[5] > 0 && task->data[7] >= task->data[8]))
+ {
+ ++task->data[2];
+ task->data[6] += task->data[9];
+ return TRUE;
+ }
+ else
+ {
+ task->data[7] += task->data[5] * 8;
+ return FALSE;
+ }
+}
+
+static void sub_80AEF60(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 12)
+ {
+ --gTasks[sprite->data[6]].data[sprite->data[7]];
+ DestroySprite(sprite);
+ }
+}
+
+void sub_80AEFA0(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 32;
+ task->data[14] = task->data[15];
+ while (task->data[14] > 16)
+ task->data[14] -= 32;
+ task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ task->data[12] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2;
+ ++task->data[0];
+ break;
+ case 1:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ if (sub_80AF058(task, taskId))
+ ++task->data[0];
+ }
+ break;
+ case 2:
+ if (task->data[10] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static bool8 sub_80AF058(struct Task *task, u8 taskId)
+{
+ u8 spriteId = CreateSprite(&gUnknown_83E5F38, task->data[13], task->data[14], task->data[12]);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].callback = sub_80AF0C8;
+ gSprites[spriteId].data[6] = taskId;
+ gSprites[spriteId].data[7] = 10;
+ ++task->data[10];
+ }
+ if (task->data[14] >= task->data[15])
+ return TRUE;
+ task->data[14] += 32;
+ return FALSE;
+}
+
+static void sub_80AF0C8(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ --gTasks[sprite->data[6]].data[sprite->data[7]];
+ DestroySprite(sprite);
+ }
+}
diff --git a/src/fighting.c b/src/fighting.c
new file mode 100644
index 000000000..496f752ef
--- /dev/null
+++ b/src/fighting.c
@@ -0,0 +1,971 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "gpu_regs.h"
+#include "random.h"
+#include "task.h"
+#include "trig.h"
+
+static void unc_080B08A0(struct Sprite *sprite);
+static void sub_80B08DC(struct Sprite *sprite);
+static void sub_80B0928(struct Sprite *sprite);
+static void AnimBasicFistOrFoot(struct Sprite *sprite);
+static void sub_80B09A4(struct Sprite *sprite);
+static void sub_80B0B80(struct Sprite *sprite);
+static void sub_80B0C28(struct Sprite *sprite);
+static void AnimSpinningKickOrPunch(struct Sprite *sprite);
+static void AnimStompFoot(struct Sprite *sprite);
+static void sub_80B0DF0(struct Sprite *sprite);
+static void sub_80B0E80(struct Sprite *sprite);
+static void sub_80B0F68(struct Sprite *sprite);
+static void sub_80B107C(struct Sprite *sprite);
+static void sub_80B1188(struct Sprite *sprite);
+static void sub_80B12E8(struct Sprite *sprite);
+static void sub_80B13F8(struct Sprite *sprite);
+static void sub_80B1484(struct Sprite *sprite);
+static void sub_80B14F0(struct Sprite *sprite);
+static void sub_80B0B2C(struct Sprite *sprite);
+static void sub_80B0BD8(struct Sprite *sprite);
+static void sub_80B0CB4(struct Sprite *sprite);
+static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite);
+static void AnimStompFootStep(struct Sprite *sprite);
+static void AnimStompFootEnd(struct Sprite *sprite);
+static void sub_80B0EF0(struct Sprite *sprite);
+static void sub_80B1050(struct Sprite *sprite);
+static void sub_80B111C(struct Sprite *sprite);
+static void sub_80B11E4(struct Sprite *sprite);
+static void sub_80B12A4(struct Sprite *sprite);
+
+const struct SpriteTemplate gUnknown_83E668C =
+{
+ .tileTag = ANIM_TAG_HUMANOID_FOOT,
+ .paletteTag = ANIM_TAG_HUMANOID_FOOT,
+ .oam = &gOamData_83AC9D8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = unc_080B08A0,
+};
+
+static const union AnimCmd gUnknown_83E66A4[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E66AC[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E66B4[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E66BC[] =
+{
+ ANIMCMD_FRAME(48, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E66C4[] =
+{
+ ANIMCMD_FRAME(48, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_83E66CC[] =
+{
+ gUnknown_83E66A4,
+};
+
+static const union AnimCmd *const gUnknown_83E66D0[] =
+{
+ gUnknown_83E66AC,
+ gUnknown_83E66B4,
+};
+
+static const union AnimCmd *const gUnknown_83E66D8[] =
+{
+ gUnknown_83E66BC,
+ gUnknown_83E66C4,
+};
+
+const struct SpriteTemplate gUnknown_83E66E0 =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E66CC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B08DC,
+};
+
+const struct SpriteTemplate gUnknown_83E66F8 =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E66CC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B0928,
+};
+
+const struct SpriteTemplate gFistFootSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E66CC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBasicFistOrFoot,
+};
+
+const struct SpriteTemplate gUnknown_83E6728 =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E66CC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B09A4,
+};
+
+const struct SpriteTemplate gUnknown_83E6740 =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E66D8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B0B80,
+};
+
+const struct SpriteTemplate gUnknown_83E6758 =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E66D0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B0C28,
+};
+
+static const union AffineAnimCmd gUnknown_83E6770[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x8, -0x8, 20, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6788[] =
+{
+ gUnknown_83E6770,
+};
+
+const struct SpriteTemplate gUnknown_83E678C =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_83ACA98,
+ .anims = gUnknown_83E66CC,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6788,
+ .callback = AnimSpinningKickOrPunch,
+};
+
+static const union AffineAnimCmd gUnknown_83E67A4[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x4, -0x4, 20, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+static const union AffineAnimCmd *const gUnknown_83E67BC[] =
+{
+ gUnknown_83E67A4,
+};
+
+const struct SpriteTemplate gMegaPunchKickSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_83ACA98,
+ .anims = gUnknown_83E66CC,
+ .images = NULL,
+ .affineAnims = gUnknown_83E67BC,
+ .callback = AnimSpinningKickOrPunch,
+};
+
+const struct SpriteTemplate gUnknown_83E67D8 =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E66D0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimStompFoot,
+};
+
+const struct SpriteTemplate gUnknown_83E67F0 =
+{
+ .tileTag = ANIM_TAG_DUCK,
+ .paletteTag = ANIM_TAG_DUCK,
+ .oam = &gOamData_83AC9D0,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B0DF0,
+};
+
+const struct SpriteTemplate gUnknown_83E6808 =
+{
+ .tileTag = ANIM_TAG_BLUE_LIGHT_WALL,
+ .paletteTag = ANIM_TAG_BLUE_LIGHT_WALL,
+ .oam = &gOamData_83ACB00,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B0E80,
+};
+
+const struct SpriteTemplate gUnknown_83E6820 =
+{
+ .tileTag = ANIM_TAG_TORN_METAL,
+ .paletteTag = ANIM_TAG_TORN_METAL,
+ .oam = &gOamData_83AC9D8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B0F68,
+};
+
+static const union AffineAnimCmd gUnknown_83E6838[] =
+{
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 64),
+ AFFINEANIMCMD_FRAME(-0x6, -0x6, 0, 8),
+ AFFINEANIMCMD_FRAME(0x6, 0x6, 0, 8),
+ AFFINEANIMCMD_JUMP(2),
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6860[] =
+{
+ gUnknown_83E6838,
+};
+
+const struct SpriteTemplate gUnknown_83E6864 =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_83ACBC0,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6860,
+ .callback = sub_80B107C,
+};
+
+const struct SpriteTemplate gUnknown_83E687C =
+{
+ .tileTag = ANIM_TAG_FLAT_ROCK,
+ .paletteTag = ANIM_TAG_FLAT_ROCK,
+ .oam = &gOamData_83AC9D0,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B1188,
+};
+
+const struct SpriteTemplate gUnknown_83E6894 =
+{
+ .tileTag = ANIM_TAG_METEOR,
+ .paletteTag = ANIM_TAG_METEOR,
+ .oam = &gOamData_83AC9E0,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B12E8,
+};
+
+const struct SpriteTemplate gUnknown_83E68AC =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E66CC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B13F8,
+};
+
+static const union AnimCmd gUnknown_83E68C4[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E68D4[] =
+{
+ ANIMCMD_FRAME(0, 4, .vFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .vFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E68E4[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_83E68F4[] =
+{
+ gUnknown_83E68C4,
+ gUnknown_83E68D4,
+ gUnknown_83E68E4,
+};
+
+const struct SpriteTemplate gUnknown_83E6900 =
+{
+ .tileTag = ANIM_TAG_PURPLE_SCRATCH,
+ .paletteTag = ANIM_TAG_PURPLE_SCRATCH,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E68F4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B1484,
+};
+
+static const union AnimCmd gUnknown_83E6918[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(64, 6),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E6924[] =
+{
+ ANIMCMD_FRAME(0, 6, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 6, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E6930[] =
+{
+ ANIMCMD_FRAME(0, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 6, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_83E693C[] =
+{
+ gUnknown_83E6918,
+ gUnknown_83E6924,
+ gUnknown_83E6930,
+};
+
+const struct SpriteTemplate gUnknown_83E6948 =
+{
+ .tileTag = ANIM_TAG_PURPLE_SWIPE,
+ .paletteTag = ANIM_TAG_PURPLE_SWIPE,
+ .oam = &gOamData_83AC9E0,
+ .anims = gUnknown_83E693C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B1484,
+};
+
+static const union AffineAnimCmd gUnknown_83E6960[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x20, -0x20, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6978[] =
+{
+ gUnknown_83E6960,
+};
+
+const struct SpriteTemplate gUnknown_83E697C =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_83ACA98,
+ .anims = gUnknown_83E66CC,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6978,
+ .callback = sub_80B14F0,
+};
+
+static void unc_080B08A0(struct Sprite *sprite)
+{
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = 15;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+static void sub_80B08DC(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[7] == 1 && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ }
+ StartSpriteAnim(sprite, gBattleAnimArgs[6]);
+ gBattleAnimArgs[6] = 0;
+ AnimSnoreZ(sprite);
+}
+
+static void sub_80B0928(struct Sprite *sprite)
+{
+ if (IsContest())
+ {
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ }
+ sub_80B08DC(sprite);
+}
+
+// Displays a basic fist or foot sprite for a given duration.
+// Used by many fighting moves (and elemental "punch" moves).
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration
+// arg 3: ? (todo: related to initial pixel offsets)
+// arg 4: anim num
+static void AnimBasicFistOrFoot(struct Sprite *sprite)
+{
+ StartSpriteAnim(sprite, gBattleAnimArgs[4]);
+ if (gBattleAnimArgs[3] == 0)
+ InitSpritePosToAnimAttacker(sprite, 1);
+ else
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+static void sub_80B09A4(struct Sprite *sprite)
+{
+ u8 battler;
+ s16 xMod, yMod;
+ s16 x, y;
+
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ if (gBattleAnimArgs[2] < 0)
+ gBattleAnimArgs[2] = Random() % 5;
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 3);
+ xMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 2;
+ yMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4;
+ x = Random() % xMod;
+ y = Random() % yMod;
+ if (Random() & 1)
+ x *= -1;
+ if (Random() & 1)
+ y *= -1;
+ if ((gBattlerPositions[battler] & BIT_SIDE) == B_SIDE_PLAYER)
+ y += 0xFFF0;
+ sprite->pos1.x += x;
+ sprite->pos1.y += y;
+ sprite->data[0] = gBattleAnimArgs[1];
+ sprite->data[7] = CreateSprite(&gBasicHitSplatSpriteTemplate, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1);
+ if (sprite->data[7] != 64)
+ {
+ StartSpriteAffineAnim(&gSprites[sprite->data[7]], 0);
+ gSprites[sprite->data[7]].callback = SpriteCallbackDummy;
+ }
+ sprite->callback = sub_80B0B2C;
+}
+
+static void sub_80B0B2C(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ if (sprite->data[7] != 64)
+ {
+ FreeOamMatrix(gSprites[sprite->data[7]].oam.matrixNum);
+ DestroySprite(&gSprites[sprite->data[7]]);
+ }
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ --sprite->data[0];
+ }
+}
+
+static void sub_80B0B80(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->data[0] = 30;
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sprite->data[2] = sprite->pos1.x - 20;
+ }
+ else
+ {
+ sprite->data[2] = sprite->pos1.x + 20;
+ sprite->hFlip = 1;
+ }
+ sprite->data[4] = sprite->pos1.y - 20;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, sub_80B0BD8);
+}
+
+static void sub_80B0BD8(struct Sprite *sprite)
+{
+ if (++sprite->data[5] == 11)
+ {
+ sprite->data[2] = sprite->pos1.x - sprite->pos2.x;
+ sprite->data[4] = sprite->pos1.y - sprite->pos2.y;
+ sprite->data[0] = 8;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ }
+}
+
+static void sub_80B0C28(struct Sprite *sprite)
+{
+ if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT)
+ gBattleAnimArgs[0] *= -1;
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->pos1.y;
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = gBattleAnimArgs[5];
+ sprite->data[6] = gBattleAnimArgs[4];
+ sprite->data[7] = 0;
+ sprite->callback = sub_80B0CB4;
+}
+
+static void sub_80B0CB4(struct Sprite *sprite)
+{
+ if (!AnimTranslateLinear(sprite))
+ {
+ sprite->pos2.y += Sin(sprite->data[7] >> 8, sprite->data[5]);
+ sprite->data[7] += sprite->data[6];
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Animates the spinning, shrinking kick or punch, which then
+// reappears at full size. Used by moves such as MOVE_MEGA_PUNCH and MOVE_MEGA_KICK.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: anim num
+// arg 3: spin duration
+static void AnimSpinningKickOrPunch(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, AnimSpinningKickOrPunchFinish);
+}
+
+static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite)
+{
+ StartSpriteAffineAnim(sprite, 0);
+ sprite->affineAnimPaused = 1;
+ sprite->data[0] = 20;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// Animates MOVE_STOMP's foot that slides downward.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: initial wait duration
+static void AnimStompFoot(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->callback = AnimStompFootStep;
+}
+
+static void AnimStompFootStep(struct Sprite *sprite)
+{
+ if (--sprite->data[0] == -1)
+ {
+ sprite->data[0] = 6;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, AnimStompFootEnd);
+ }
+}
+
+static void AnimStompFootEnd(struct Sprite *sprite)
+{
+ sprite->data[0] = 15;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+static void sub_80B0DF0(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[3];
+ ++sprite->data[0];
+ }
+ else
+ {
+ sprite->data[4] += sprite->data[1];
+ sprite->pos2.x = sprite->data[4] >> 8;
+ sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]);
+ sprite->data[3] = (sprite->data[3] + 3) & 0xFF;
+ if (sprite->data[3] > 100)
+ sprite->invisible = sprite->data[3] % 2;
+ if (sprite->data[3] > 120)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+static void sub_80B0E80(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ }
+ sprite->pos1.x += gBattleAnimArgs[1];
+ sprite->pos1.y += gBattleAnimArgs[2];
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = gBattleAnimArgs[4];
+ sprite->data[3] = 0;
+ sprite->callback = sub_80B0EF0;
+}
+
+static void sub_80B0EF0(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (--sprite->data[1] == 0)
+ {
+ if (sprite->data[2] == 0)
+ DestroyAnimSprite(sprite);
+ else
+ ++sprite->data[0];
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ ++sprite->data[3];
+ if (sprite->data[3] & 1)
+ sprite->pos2.x = 2;
+ else
+ sprite->pos2.x = -2;
+ }
+
+ if (--sprite->data[2] == 0)
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+static void sub_80B0F68(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3];
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[2];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[3];
+ }
+ sprite->oam.tileNum += gBattleAnimArgs[1] * 16;
+ sprite->data[0] = 0;
+ switch (gBattleAnimArgs[1])
+ {
+ case 0:
+ sprite->data[6] = -3;
+ sprite->data[7] = -3;
+ break;
+ case 1:
+ sprite->data[6] = 3;
+ sprite->data[7] = -3;
+ break;
+ case 2:
+ sprite->data[6] = -3;
+ sprite->data[7] = 3;
+ break;
+ case 3:
+ sprite->data[6] = 3;
+ sprite->data[7] = 3;
+ break;
+ default:
+ DestroyAnimSprite(sprite);
+ return;
+ }
+ sprite->callback = sub_80B1050;
+}
+
+static void sub_80B1050(struct Sprite *sprite)
+{
+ sprite->pos1.x += sprite->data[6];
+ sprite->pos1.y += sprite->data[7];
+ if (++sprite->data[0] > 40)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_80B107C(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
+ sprite->data[7] = gBattleAnimTarget;
+ }
+ else
+ {
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
+ sprite->data[7] = gBattleAnimAttacker;
+ }
+ sprite->data[0] = 0;
+ sprite->data[1] = 12;
+ sprite->data[2] = 8;
+ sprite->callback = sub_80B111C;
+}
+
+static void sub_80B111C(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 180)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ sprite->data[0] = 16;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3);
+ InitAnimLinearTranslation(sprite);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = sub_807563C;
+ }
+}
+
+static void sub_80B1188(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = 120;
+ sprite->data[0] = gBattleAnimArgs[3];
+ StorePointerInVars(&sprite->data[4], &sprite->data[5], (void *)(sprite->pos1.y << 8));
+ sprite->data[6] = gBattleAnimArgs[1];
+ sprite->oam.tileNum += gBattleAnimArgs[2] * 4;
+ sprite->callback = sub_80B11E4;
+}
+
+static void sub_80B11E4(struct Sprite *sprite)
+{
+ void *var0;
+
+ if (sprite->data[0] != 0)
+ {
+ var0 = LoadPointerFromVars(sprite->data[4], sprite->data[5]);
+ var0 -= sprite->data[6];
+ StorePointerInVars(&sprite->data[4], &sprite->data[5], var0);
+ var0 = (void *)(((intptr_t)var0) >> 8);
+ sprite->pos1.y = (intptr_t)var0;
+ if (sprite->pos1.y < -8)
+ DestroyAnimSprite(sprite);
+ else
+ --sprite->data[0];
+ }
+ else
+ {
+ s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+
+ sprite->data[0] = pos2 - pos0;
+ sprite->data[1] = pos3 - pos1;
+ sprite->data[2] = sprite->pos1.x << 4;
+ sprite->data[3] = sprite->pos1.y << 4;
+ sprite->callback = sub_80B12A4;
+ }
+}
+
+static void sub_80B12A4(struct Sprite *sprite)
+{
+ u16 edgeX;
+
+ sprite->data[2] += sprite->data[0];
+ sprite->data[3] += sprite->data[1];
+ sprite->pos1.x = sprite->data[2] >> 4;
+ sprite->pos1.y = sprite->data[3] >> 4;
+ edgeX = sprite->pos1.x + 8;
+ if (edgeX > 256 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_80B12E8(struct Sprite *sprite)
+{
+ u8 battler;
+
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
+ battler = gBattleAnimTarget;
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
+ }
+ else
+ {
+ battler = gBattleAnimAttacker;
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
+ }
+ if (IsContest())
+ sprite->oam.matrixNum |= ST_OAM_HFLIP;
+ else if (GetBattlerSide(battler) == B_SIDE_PLAYER)
+ sprite->oam.matrixNum |= (ST_OAM_HFLIP | ST_OAM_VFLIP);
+ sprite->data[0] = 16;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(battler, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(battler, 3);
+ InitAnimLinearTranslation(sprite);
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = sub_807563C;
+}
+
+static void sub_80B13D4(struct Sprite *sprite)
+{
+ if (sprite->data[0] == sprite->data[4])
+ DestroyAnimSprite(sprite);
+ ++sprite->data[0];
+}
+
+static void sub_80B13F8(struct Sprite *sprite)
+{
+ u8 turn;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = gBattleAnimArgs[0];
+ sprite->data[3] = gBattleAnimArgs[1];
+ sprite->data[4] = gBattleAnimArgs[2];
+ turn = gAnimMoveTurn;
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ ++turn;
+ if (turn & 1)
+ {
+ sprite->data[2] = -sprite->data[2];
+ ++sprite->data[1];
+ }
+ StartSpriteAnim(sprite, sprite->data[1]);
+ sprite->pos2.x = sprite->data[2];
+ sprite->pos2.y = sprite->data[3];
+ sprite->callback = sub_80B13D4;
+}
+
+static void sub_80B1484(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[2] == 0)
+ InitSpritePosToAnimAttacker(sprite, 0);
+ else
+ InitSpritePosToAnimTarget(sprite, FALSE);
+ if (IsContest())
+ StartSpriteAnim(sprite, 2);
+ else if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ StartSpriteAnim(sprite, 1);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+static void sub_80B14F0(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ sprite->data[1] = (sprite->data[1] + 40) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], 2);
+ if (++sprite->data[0] > 40)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_80B1530(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ sub_8075458(0);
+ task->data[8] = gBattleAnimArgs[0];
+ ++task->data[0];
+ break;
+ case 1:
+ if (--task->data[8] == -1)
+ ++task->data[0];
+ break;
+ case 2:
+ default:
+ task->data[9] += 1280;
+ break;
+ }
+ task->data[10] += 2816;
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ gBattle_BG3_X += task->data[9] >> 8;
+ else
+ gBattle_BG3_X -= task->data[9] >> 8;
+ gBattle_BG3_Y += task->data[10] >> 8;
+ task->data[9] &= 0xFF;
+ task->data[10] &= 0xFF;
+ if (gBattleAnimArgs[7] == -1)
+ {
+ gBattle_BG3_X = 0;
+ gBattle_BG3_Y = 0;
+ sub_8075458(1);
+ DestroyAnimVisualTask(taskId);
+ }
+}
diff --git a/src/fire.c b/src/fire.c
new file mode 100644
index 000000000..014413f5b
--- /dev/null
+++ b/src/fire.c
@@ -0,0 +1,1193 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "sound.h"
+#include "util.h"
+#include "task.h"
+#include "trig.h"
+#include "constants/songs.h"
+
+static void sub_80AC90C(struct Sprite *sprite);
+static void sub_80AC94C(struct Sprite *sprite);
+static void sub_80ACA00(struct Sprite *sprite);
+static void sub_80AC990(struct Sprite *sprite);
+static void sub_80ACAA8(struct Sprite *sprite);
+static void sub_80ACBB0(struct Sprite *sprite);
+static void AnimEmberFlare(struct Sprite *sprite);
+static void sub_80ACC44(struct Sprite *sprite);
+static void AnimFireRing(struct Sprite *sprite);
+static void AnimFireCross(struct Sprite *sprite);
+static void sub_80ACDE8(struct Sprite *sprite);
+static void sub_80AD330(struct Sprite *sprite);
+static void sub_80AD454(struct Sprite *sprite);
+static void sub_80AD540(struct Sprite *sprite);
+static void sub_80AD6F4(struct Sprite *sprite);
+static void sub_80ACA6C(struct Sprite *sprite);
+static void sub_80ACB1C(struct Sprite *sprite);
+static void AnimFireRing_Step1(struct Sprite *sprite);
+static void AnimFireRing_Step2(struct Sprite *sprite);
+static void AnimFireRing_Step3(struct Sprite *sprite);
+static void UpdateFireRingCircleOffset(struct Sprite *sprite);
+static void sub_80ACE28(struct Sprite *sprite);
+static void sub_80ACE50(struct Sprite *sprite);
+static void sub_80ACF14(u8 taskId);
+static void sub_80AD1F8(u8 spriteId, u8 taskId, u8 a3);
+static u16 sub_80AD374(u8 spriteId);
+static void sub_80AD3C8(struct Sprite *sprite, s16 x, s16 y);
+static void sub_80AD3E4(struct Sprite *sprite);
+static void sub_80AD4A8(struct Sprite *sprite);
+static void sub_80AD690(struct Sprite *sprite);
+static void sub_80AD870(u8 taskId);
+
+static const union AnimCmd gUnknown_83E5BB8[] =
+{
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd gUnknown_83E5BC8[] =
+{
+ ANIMCMD_FRAME(16, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gUnknown_83E5BD8[] =
+{
+ gUnknown_83E5BB8,
+ gUnknown_83E5BC8,
+};
+
+const struct SpriteTemplate gUnknown_83E5BE0 =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5BD8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AC90C,
+};
+
+const struct SpriteTemplate gUnknown_83E5BF8 =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5BD8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AC94C,
+};
+
+static const union AnimCmd gUnknown_83E5C10[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_FRAME(80, 3),
+ ANIMCMD_FRAME(96, 3),
+ ANIMCMD_FRAME(112, 3),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gUnknown_83E5C34[] =
+{
+ gUnknown_83E5C10,
+};
+
+static const union AnimCmd gUnknown_83E5C38[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gUnknown_83E5C50[] =
+{
+ gUnknown_83E5C38,
+};
+
+static const union AffineAnimCmd gUnknown_83E5C54[] =
+{
+ AFFINEANIMCMD_FRAME(0x32, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x20, 0x0, 0, 7),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gUnknown_83E5C6C[] =
+{
+ gUnknown_83E5C54,
+};
+
+const struct SpriteTemplate gUnknown_83E5C70 =
+{
+ .tileTag = ANIM_TAG_FIRE,
+ .paletteTag = ANIM_TAG_FIRE,
+ .oam = &gOamData_83ACA38,
+ .anims = gUnknown_83E5C34,
+ .images = NULL,
+ .affineAnims = gUnknown_83E5C6C,
+ .callback = sub_80ACA00,
+};
+
+const struct SpriteTemplate gUnknown_83E5C88 =
+{
+ .tileTag = ANIM_TAG_FIRE,
+ .paletteTag = ANIM_TAG_FIRE,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5C34,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80ACA00,
+};
+
+const struct SpriteTemplate gUnknown_83E5CA0 =
+{
+ .tileTag = ANIM_TAG_FIRE_PLUME,
+ .paletteTag = ANIM_TAG_FIRE_PLUME,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5C50,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AC990,
+};
+
+const struct SpriteTemplate gUnknown_83E5CB8 =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5C50,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AC990,
+};
+
+static const union AnimCmd gUnknown_83E5CD0[] =
+{
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gUnknown_83E5CE0[] =
+{
+ gUnknown_83E5CD0,
+};
+
+const struct SpriteTemplate gUnknown_83E5CE4 =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5CE0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80ACAA8,
+};
+
+static const union AffineAnimCmd gUnknown_83E5CFC[] =
+{
+ AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0),
+ AFFINEANIMCMD_FRAME(0x2, 0x2, 10, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+static const union AffineAnimCmd *const gUnknown_83E5D14[] =
+{
+ gUnknown_83E5CFC,
+};
+
+const struct SpriteTemplate gUnknown_83E5D18 =
+{
+ .tileTag = ANIM_TAG_SUNLIGHT,
+ .paletteTag = ANIM_TAG_SUNLIGHT,
+ .oam = &gOamData_83ACB58,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_83E5D14,
+ .callback = sub_80ACBB0,
+};
+
+static const union AnimCmd gUnknown_83E5D30[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_83E5D48[] =
+{
+ gUnknown_83E5D30,
+};
+
+const struct SpriteTemplate gEmberSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_83AC9D8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gEmberFlareSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5D48,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEmberFlare,
+};
+
+const struct SpriteTemplate gUnknown_83E5D7C =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5D48,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80ACC44,
+};
+
+const struct SpriteTemplate gUnknown_83E5D94 =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5D48,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireRing,
+};
+
+static const union AnimCmd gUnknown_83E5DAC[] =
+{
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gUnknown_83E5DB8[] =
+{
+ gUnknown_83E5DAC,
+};
+
+static const union AffineAnimCmd gUnknown_83E5DBC[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd gUnknown_83E5DCC[] =
+{
+ AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gUnknown_83E5DDC[] =
+{
+ gUnknown_83E5DBC,
+ gUnknown_83E5DCC,
+};
+
+const struct SpriteTemplate gUnknown_83E5DE4 =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5DB8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireCross,
+};
+
+const struct SpriteTemplate gUnknown_83E5DFC =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5D48,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80ACDE8,
+};
+
+const struct SpriteTemplate gUnknown_83E5E14 =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5D48,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8077350,
+};
+
+static const struct SpriteTemplate gUnknown_83E5E2C =
+{
+ .tileTag = ANIM_TAG_WARM_ROCK,
+ .paletteTag = ANIM_TAG_WARM_ROCK,
+ .oam = &gOamData_83AC9D0,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AD330,
+};
+
+static const s16 sHeatedRockCoords[][2] =
+{
+ {-2, -5},
+ {-1, -1},
+ { 3, -6},
+ { 4, -2},
+ { 2, -8},
+ {-5, -5},
+ { 4, -7},
+};
+
+const struct SpriteTemplate gUnknown_83E5E60 =
+{
+ .tileTag = ANIM_TAG_WARM_ROCK,
+ .paletteTag = ANIM_TAG_WARM_ROCK,
+ .oam = &gOamData_83AC9D8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AD454,
+};
+
+static const union AnimCmd gUnknown_83E5E78[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd gUnknown_83E5E8C[] =
+{
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E5E94[] =
+{
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E5E9C[] =
+{
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_83E5EA4[] =
+{
+ gUnknown_83E5E78,
+ gUnknown_83E5E8C,
+ gUnknown_83E5E94,
+ gUnknown_83E5E9C,
+};
+
+const struct SpriteTemplate gUnknown_83E5EB4 =
+{
+ .tileTag = ANIM_TAG_WISP_ORB,
+ .paletteTag = ANIM_TAG_WISP_ORB,
+ .oam = &gOamData_83AC9D0,
+ .anims = gUnknown_83E5EA4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AD540,
+};
+
+static const union AnimCmd gUnknown_83E5ECC[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gUnknown_83E5EE0[] =
+{
+ gUnknown_83E5ECC,
+};
+
+const struct SpriteTemplate gUnknown_83E5EE4 =
+{
+ .tileTag = ANIM_TAG_WISP_FIRE,
+ .paletteTag = ANIM_TAG_WISP_FIRE,
+ .oam = &gOamData_83AC9D8,
+ .anims = gUnknown_83E5EE0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AD6F4,
+};
+
+static const s8 gUnknown_83E5EFC[16] =
+{
+ -1, -1, 0, 1, 1, 0, 0, -1, -1, 1, 1, 0, 0, -1, 0, 1,
+};
+
+static const s8 gUnknown_83E5F0C[16] =
+{
+ -1, 0, 1, 0, -1, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, 1,
+};
+
+static void sub_80AC90C(struct Sprite *sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = 0x3C;
+ sprite->data[2] = 0x9;
+ sprite->data[3] = 0x1E;
+ sprite->data[4] = 0xFE00;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
+ sprite->callback(sprite);
+}
+
+static void sub_80AC94C(struct Sprite *sprite)
+{
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[3];
+ sprite->callback = TranslateSpriteLinearFixedPoint;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+static void sub_80AC990(struct Sprite *sprite)
+{
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[2] = -gBattleAnimArgs[4];
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[2] = gBattleAnimArgs[4];
+ }
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->data[3] = gBattleAnimArgs[5];
+ sprite->callback = sub_80ACA6C;
+}
+
+static void sub_80ACA00(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[2] = gBattleAnimArgs[4];
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[2] = -gBattleAnimArgs[4];
+ }
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->data[3] = gBattleAnimArgs[5];
+ sprite->callback = sub_80ACA6C;
+}
+
+static void sub_80ACA6C(struct Sprite *sprite)
+{
+ if (++sprite->data[0] < sprite->data[4])
+ {
+ sprite->pos2.x += sprite->data[2];
+ sprite->pos2.y += sprite->data[3];
+ }
+ if (sprite->data[0] == sprite->data[1])
+ DestroySpriteAndMatrix(sprite);
+}
+
+static void sub_80ACAA8(struct Sprite *sprite)
+{
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->subpriority = 8;
+ }
+ 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->data[4] = gBattleAnimArgs[6];
+ sprite->data[5] = 0;
+ sprite->callback = sub_80ACB1C;
+}
+
+static void sub_80ACB1C(struct Sprite *sprite)
+{
+ if (sprite->data[3])
+ {
+ if(sprite->data[5] > 10000)
+ sprite->subpriority = 1;
+ sprite->pos2.x = Sin(sprite->data[0], sprite->data[1] + (sprite->data[5] >> 8));
+ sprite->pos2.y = Cos(sprite->data[0], sprite->data[1] + (sprite->data[5] >> 8));
+ sprite->data[0] += sprite->data[2];
+ sprite->data[5] += sprite->data[4];
+ if (sprite->data[0] > 255)
+ sprite->data[0] -= 256;
+ else if (sprite->data[0] < 0)
+ sprite->data[0] += 256;
+ --sprite->data[3];
+ }
+ else
+ {
+ DestroySpriteAndMatrix(sprite);
+ }
+}
+
+//sunlight
+static void sub_80ACBB0(struct Sprite *sprite)
+{
+ sprite->pos1.x = 0;
+ sprite->pos1.y = 0;
+ sprite->data[0] = 60;
+ sprite->data[2] = 140;
+ sprite->data[4] = 80;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+//fire 2
+
+// Animates the secondary effect of MOVE_EMBER, where the flames grow and slide
+// horizontally a bit.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x pixel offset
+// arg 3: target y pixel offset
+// arg 4: duration
+// arg 5: ? (TODO: something related to which mon the pixel offsets are based on)
+// arg 6: ? (TODO: something related to which mon the pixel offsets are based on)
+static void AnimEmberFlare(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)
+ && (gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)
+ || gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)))
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ sprite->callback = AnimSnoreZ;
+ sprite->callback(sprite);
+}
+
+static void sub_80ACC44(struct Sprite *sprite)
+{
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ sprite->callback = AnimSnoreZ;
+}
+
+// Animates the a fire sprite in the first-half of the MOVE_FIRE_BLAST
+// animation. The fire sprite first moves in a circle around the mon,
+// and then it is translated towards the target mon, while still rotating.
+// Lastly, it moves in a circle around the target mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: initial wave offset
+//void AnimFireRing(struct Sprite *sprite)
+static void AnimFireRing(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, 1);
+ sprite->data[7] = gBattleAnimArgs[2];
+ sprite->data[0] = 0;
+ sprite->callback = AnimFireRing_Step1;
+}
+
+static void AnimFireRing_Step1(struct Sprite *sprite)
+{
+ UpdateFireRingCircleOffset(sprite);
+
+ if (++sprite->data[0] == 0x12)
+ {
+ sprite->data[0] = 0x19;
+ 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->callback = AnimFireRing_Step2;
+ }
+}
+
+static void AnimFireRing_Step2(struct Sprite *sprite)
+{
+ if (AnimTranslateLinear(sprite))
+ {
+ sprite->data[0] = 0;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->pos2.x = sprite->pos2.y = 0;
+ sprite->callback = AnimFireRing_Step3;
+ sprite->callback(sprite);
+ }
+ else
+ {
+ sprite->pos2.x += Sin(sprite->data[7], 28);
+ sprite->pos2.y += Cos(sprite->data[7], 28);
+ sprite->data[7] = (sprite->data[7] + 20) & 0xFF;
+ }
+}
+
+static void AnimFireRing_Step3(struct Sprite *sprite)
+{
+ UpdateFireRingCircleOffset(sprite);
+ if (++sprite->data[0] == 0x1F)
+ DestroyAnimSprite(sprite);
+}
+
+static void UpdateFireRingCircleOffset(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[7], 28);
+ sprite->pos2.y = Cos(sprite->data[7], 28);
+ sprite->data[7] = (sprite->data[7] + 20) & 0xFF;
+}
+
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration
+// arg 3: x delta
+// arg 4: y delta
+// AnimFireCross(struct Sprite *sprite)
+static void AnimFireCross(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];
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = TranslateSpriteLinear;
+}
+
+static void sub_80ACDE8(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, 1);
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->invisible = TRUE;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_80ACE28);
+}
+
+static void sub_80ACE28(struct Sprite *sprite)
+{
+ sprite->invisible = FALSE;
+ sprite->data[0] = sprite->data[1];
+ sprite->data[1] = 0;
+ sprite->callback = sub_80ACE50;
+ sprite->callback(sprite);
+}
+
+static void sub_80ACE50(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
+ sprite->pos2.y = Cos(sprite->data[1], sprite->data[2] >> 8);
+ sprite->data[1] = (sprite->data[1] + 10) & 0xFF;
+ sprite->data[2] += 0xD0;
+ if (--sprite->data[0] == -1)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80ACEA4(u8 taskId) // initialize animation task for Move_ERUPTION?
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[4] = gSprites[task->data[15]].pos1.y;
+ task->data[5] = GetBattlerSide(gBattleAnimAttacker);
+ task->data[6] = 0;
+ PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
+ task->func = sub_80ACF14;
+}
+
+static void sub_80ACF14(u8 taskId) // animate Move_ERUPTION?
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ sub_80765D4(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 0x20);
+ ++task->data[0];
+ // fall through
+ case 1:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ if (++task->data[2] & 0x1)
+ gSprites[task->data[15]].pos2.x = 3;
+ else
+ gSprites[task->data[15]].pos2.x = -3;
+ }
+ if (task->data[5])
+ {
+ if (++task->data[3] > 4)
+ {
+ task->data[3] = 0;
+ ++gSprites[task->data[15]].pos1.y;
+ }
+ }
+ if(!sub_8076640(task))
+ {
+ SetBattlerSpriteYOffsetFromYScale(task->data[15]);
+ gSprites[task->data[15]].pos2.x = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ ++task->data[0];
+ }
+ break;
+ case 2:
+ if (++task->data[1] > 4)
+ {
+ if (task->data[5])
+ sub_80765D4(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 0x6);
+ else
+ sub_80765D4(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 0x6);
+ task->data[1] = 0;
+ ++task->data[0];
+ }
+ break;
+ case 3:
+ if (!sub_8076640(task))
+ {
+ sub_80AD1F8(task->data[15], taskId, 6);
+ ++task->data[0];
+ }
+ break;
+ case 4:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ if (++task->data[2] & 1)
+ gSprites[task->data[15]].pos2.y += 3;
+ else
+ gSprites[task->data[15]].pos2.y -= 3;
+ }
+ if (++task->data[3] > 0x18)
+ {
+ if (task->data[5])
+ sub_80765D4(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 0x8);
+ else
+ sub_80765D4(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 0x8);
+ if (task->data[2] & 1)
+ gSprites[task->data[15]].pos2.y -= 3;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ ++task->data[0];
+ }
+ break;
+ case 5:
+ if (task->data[5])
+ --gSprites[task->data[15]].pos1.y;
+ if (!sub_8076640(task))
+ {
+ gSprites[task->data[15]].pos1.y = task->data[4];
+ ResetSpriteRotScale(task->data[15]);
+
+ task->data[2] = 0;
+ ++task->data[0];
+ }
+ break;
+ case 6:
+ if (!task->data[6])
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_80AD1F8(u8 spriteId, u8 taskId, u8 a3)
+{
+ u16 i, j;
+ s8 sign;
+ u16 y = sub_80AD374(spriteId);
+ u16 x = gSprites[spriteId].pos1.x;
+
+ if(GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ x -= 0xC;
+ sign = 1;
+ }
+ else
+ {
+ x += 0x10;
+ sign = -1;
+ }
+ for (i = 0, j = 0; i <= 6; ++i)
+ {
+ u8 spriteId = CreateSprite(&gUnknown_83E5E2C, x, y, 2);
+
+ if (spriteId != 0x40)
+ {
+ gSprites[spriteId].oam.tileNum += j * 4 + 0x40;
+ if (++j >= 5)
+ j = 0;
+ sub_80AD3C8(&gSprites[spriteId], sHeatedRockCoords[i][0] * sign, sHeatedRockCoords[i][1]);
+ gSprites[spriteId].data[6] = taskId;
+ gSprites[spriteId].data[7] = a3;
+ ++gTasks[taskId].data[a3];
+ }
+ }
+}
+
+static void sub_80AD330(struct Sprite *sprite)
+{
+ sub_80AD3E4(sprite);
+ if (sprite->invisible)
+ {
+ --gTasks[sprite->data[6]].data[sprite->data[7]];
+ DestroySprite(sprite);
+ }
+}
+
+static u16 sub_80AD374(u8 spriteId)
+{
+ u16 var1 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y + gSprites[spriteId].centerToCornerVecY;
+
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ var1 = ((var1 << 16) + 0x4A0000) >> 16;
+ else
+ var1 = ((var1 << 16) + 0x2C0000) >> 16;
+ return var1;
+}
+
+static void sub_80AD3C8(struct Sprite *sprite, s16 x, s16 y)
+{
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = (u16)sprite->pos1.x * 8;
+ sprite->data[3] = (u16)sprite->pos1.y * 8;
+ sprite->data[4] = x * 8;
+ sprite->data[5] = y * 8;
+}
+
+static void sub_80AD3E4(struct Sprite *sprite)
+{
+ s32 var1;
+
+ if (++sprite->data[0] > 2)
+ {
+ sprite->data[0] = 0;
+ ++sprite->data[1];
+ var1 = (u16)sprite->data[1] * (u16)sprite->data[1];
+ sprite->data[3] += var1;
+ }
+ sprite->data[2] += sprite->data[4];
+ sprite->pos1.x = sprite->data[2] >> 3;
+ sprite->data[3] += sprite->data[5];
+ sprite->pos1.y = sprite->data[3] >> 3;
+ if (sprite->pos1.x < -8 || sprite->pos1.x > 0xf8 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
+ sprite->invisible = TRUE;
+}
+
+static void sub_80AD454(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = gBattleAnimArgs[1];
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[6] = gBattleAnimArgs[2];
+ sprite->data[7] = gBattleAnimArgs[3];
+ sprite->oam.tileNum += gBattleAnimArgs[4] * 16;
+ sprite->callback = sub_80AD4A8;
+}
+
+static void sub_80AD4A8(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (sprite->data[6] != 0)
+ {
+ --sprite->data[6];
+ return;
+ }
+ ++sprite->data[0];
+ // fall through
+ case 1:
+ sprite->pos1.y += 8;
+ if (sprite->pos1.y >= sprite->data[7])
+ {
+ sprite->pos1.y = sprite->data[7];
+ ++sprite->data[0];
+ }
+ break;
+ case 2:
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ if ((++sprite->data[2] & 1) != 0)
+ sprite->pos2.y = -3;
+ else
+ sprite->pos2.y = 3;
+ }
+ if (++sprite->data[3] > 16)
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+//wisp orb
+static void sub_80AD540(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ InitSpritePosToAnimAttacker(sprite, 0);
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ sprite->data[7] = gBattleAnimArgs[2];
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->data[4] = 4;
+ else
+ sprite->data[4] = -4;
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
+ ++sprite->data[0];
+ break;
+ case 1:
+ sprite->data[1] += 192;
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos2.y = -(sprite->data[1] >> 8);
+ else
+ sprite->pos2.y = sprite->data[1] >> 8;
+ sprite->pos2.x = Sin(sprite->data[2], sprite->data[4]);
+ sprite->data[2] = (sprite->data[2] + 4) & 0xFF;
+ if (++sprite->data[3] == 1)
+ {
+ sprite->data[3] = 0;
+ ++sprite->data[0];
+ }
+ break;
+ case 2:
+ sprite->pos2.x = Sin(sprite->data[2], sprite->data[4]);
+ sprite->data[2] = (sprite->data[2] + 4) & 0xFF;
+ if (++sprite->data[3] == 31)
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = sprite->pos2.y = 0;
+ sprite->data[0] = 256;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sub_8075678(sprite);
+ sprite->callback = sub_80AD690;
+ }
+ break;
+ }
+}
+
+static void sub_80AD690(struct Sprite *sprite)
+{
+ s16 initialData5, newData5;
+
+ if (!AnimTranslateLinear(sprite))
+ {
+ sprite->pos2.x += Sin(sprite->data[5], 16);
+ initialData5 = sprite->data[5];
+ sprite->data[5] = (sprite->data[5] + 4) & 0xFF;
+ newData5 = sprite->data[5];
+ if ((initialData5 == 0 || initialData5 > 196) && newData5 > 0 && sprite->data[7] == 0)
+ PlaySE12WithPanning(SE_W172, gUnknown_2037F24);
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+//wisp fire
+static void sub_80AD6F4(struct Sprite *sprite)
+{
+ if (!sprite->data[0])
+ {
+ sprite->data[1] = gBattleAnimArgs[0];
+ ++sprite->data[0];
+ }
+ sprite->data[3] += 0xC0 * 2;
+ sprite->data[4] += 0xA0;
+ sprite->pos2.x = Sin(sprite->data[1], sprite->data[3] >> 8);
+ sprite->pos2.y = Cos(sprite->data[1], sprite->data[4] >> 8);
+ sprite->data[1] = (sprite->data[1] + 7) & 0xFF;
+ if (!IsContest())
+ {
+ if (sprite->data[1] < 64 || sprite->data[1] > 195)
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
+ else
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) + 1;
+ }
+ else
+ {
+ if (sprite->data[1] < 64 || sprite->data[1] > 195)
+ sprite->subpriority = 0x1D;
+ else
+ sprite->subpriority = 0x1F;
+ }
+ if (++sprite->data[2] > 0x14)
+ sprite->invisible ^= 1;
+ if (sprite->data[2] == 0x1E)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80AD800(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[12] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER ? 1 : -1;
+ task->data[13] = IsBattlerSpriteVisible(gBattleAnimTarget ^ BIT_FLANK) + 1;
+ task->data[14] = GetAnimBattlerSpriteId(ANIM_TARGET);
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER);
+ task->func = sub_80AD870;
+}
+
+static void sub_80AD870(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[10] += task->data[12] * 2;
+ if (++task->data[1] >= 2)
+ {
+ task->data[1] = 0;
+ ++task->data[2];
+ if (task->data[2] & 1)
+ task->data[11] = 2;
+ else
+ task->data[11] = -2;
+ }
+ for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++)
+ gSprites[task->data[task->data[3] + 14]].pos2.x = task->data[10] + task->data[11];
+ if (++task->data[9] == 16)
+ {
+ task->data[9] = 0;
+ ++task->data[0];
+ }
+ break;
+ case 1:
+ if (++task->data[1] >= 5)
+ {
+ task->data[1] = 0;
+ ++task->data[2];
+ if (task->data[2] & 1)
+ task->data[11] = 2;
+ else
+ task->data[11] = -2;
+ }
+ for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++)
+ gSprites[task->data[task->data[3] + 14]].pos2.x = task->data[10] + task->data[11];
+ if (++task->data[9] == 96)
+ {
+ task->data[9] = 0;
+ ++task->data[0];
+ }
+ break;
+ case 2:
+ task->data[10] -= task->data[12] * 2;
+ if (++task->data[1] >= 2)
+ {
+ task->data[1] = 0;
+ ++task->data[2];
+ if (task->data[2] & 1)
+ task->data[11] = 2;
+ else
+ task->data[11] = -2;
+ }
+ for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++)
+ gSprites[task->data[task->data[3] + 14]].pos2.x = task->data[10] + task->data[11];
+ if (++task->data[9] == 16)
+ ++task->data[0];
+ break;
+ case 3:
+ for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++)
+ gSprites[task->data[task->data[3] + 14]].pos2.x = 0;
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+// Used to add a color mask to the battle interface / HUD in Heat Wave.
+// arg 0: opacity
+// arg 1: color code
+void AnimTask_BlendBackground(u8 taskId)
+{
+ struct BattleAnimBgData animBg;
+
+ sub_80752A0(&animBg);
+ BlendPalette(animBg.paletteId * 16, 16, gBattleAnimArgs[0], gBattleAnimArgs[1]);
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_80ADAD8(u8 taskId)
+{
+ s8 unk;
+ u8 spriteId;
+
+ 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[4] = gBattleAnimArgs[3];
+ }
+ ++gTasks[taskId].data[0];
+ spriteId = gBattlerSpriteIds[gBattleAnimTarget];
+ if (!gTasks[taskId].data[4])
+ unk = gUnknown_83E5EFC[gTasks[taskId].data[0] % 10];
+ else
+ unk = gUnknown_83E5F0C[gTasks[taskId].data[0] % 10];
+ if (gTasks[taskId].data[3] == 1)
+ gSprites[spriteId].pos2.y = gBattleAnimArgs[1] * unk < 0 ? -(gBattleAnimArgs[1] * unk) : gBattleAnimArgs[1] * unk;
+ else
+ gSprites[spriteId].pos2.x = gBattleAnimArgs[1] * unk;
+ if (gTasks[taskId].data[0] == gTasks[taskId].data[1])
+ {
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+}
diff --git a/src/flying.c b/src/flying.c
index 8c3ccb52a..59378c2f1 100644
--- a/src/flying.c
+++ b/src/flying.c
@@ -98,8 +98,8 @@ static const union AffineAnimCmd gUnknown_83E6B64[] =
{
AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6),
- AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5),
- AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10),
+ AFFINEANIMCMD_FRAME(0x0, -0x20, 0, 5),
+ AFFINEANIMCMD_FRAME(-0x10, 0x20, 0, 10),
AFFINEANIMCMD_END,
};
@@ -232,9 +232,9 @@ static const union AffineAnimCmd gUnknown_83E6C9C[] =
{
AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6),
- AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5),
- AFFINEANIMCMD_FRAME(0xFFEC, 0x0, 0, 7),
- AFFINEANIMCMD_FRAME(0xFFEC, 0xFFEC, 0, 5),
+ AFFINEANIMCMD_FRAME(0x0, -0x20, 0, 5),
+ AFFINEANIMCMD_FRAME(-0x14, 0x0, 0, 7),
+ AFFINEANIMCMD_FRAME(-0x14, -0x14, 0, 5),
AFFINEANIMCMD_END,
};
@@ -280,8 +280,8 @@ static const union AffineAnimCmd gUnknown_83E6D14[] =
{
AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6),
- AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5),
- AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10),
+ AFFINEANIMCMD_FRAME(0x0, -0x20, 0, 5),
+ AFFINEANIMCMD_FRAME(-0x10, 0x20, 0, 10),
AFFINEANIMCMD_END,
};
@@ -306,7 +306,7 @@ static const union AffineAnimCmd gUnknown_83E6D58[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x0, 0, 0),
AFFINEANIMCMD_FRAME(0x0, 0x20, 0, 12),
- AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 11),
+ AFFINEANIMCMD_FRAME(0x0, -0x20, 0, 11),
AFFINEANIMCMD_END,
};
@@ -995,8 +995,8 @@ static void sub_80B2780(struct Sprite *sprite)
InitSpritePosToAnimAttacker(sprite, 0);
else
InitSpritePosToAnimTarget(sprite, FALSE);
- if ((!gBattleAnimArgs[2] && !GetBattlerSide(gBattleAnimAttacker))
- || (gBattleAnimArgs[2] == 1 && !GetBattlerSide(gBattleAnimTarget)))
+ if ((!gBattleAnimArgs[2] && GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ || (gBattleAnimArgs[2] == 1 && GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER))
sprite->pos1.x += 8;
SeekSpriteAnim(sprite, gBattleAnimArgs[4]);
sprite->pos1.x -= 32;
@@ -1048,7 +1048,7 @@ static void sub_80B2914(struct Sprite *sprite)
{
case 0:
InitSpritePosToAnimAttacker(sprite, 1);
- gSprites[GetAnimBattlerSpriteId(0)].invisible = TRUE;
+ gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE;
++sprite->data[0];
break;
case 1:
@@ -1076,7 +1076,7 @@ static void sub_80B2974(struct Sprite *sprite)
sprite->pos2.y -= 10;
if (sprite->pos1.y + sprite->pos2.y < -32)
{
- gSprites[GetAnimBattlerSpriteId(0)].invisible = FALSE;
+ gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = FALSE;
DestroyAnimSprite(sprite);
}
break;
@@ -1089,7 +1089,7 @@ static void sub_80B2A08(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[3];
sprite->callback = sub_80B2A50;
- gSprites[GetAnimBattlerSpriteId(0)].invisible = TRUE;
+ gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE;
}
static void sub_80B2A50(struct Sprite *sprite)
@@ -1275,13 +1275,13 @@ static void sub_80B2E64(u8 taskId)
{
if (gBattleAnimArgs[0] == 0)
{
- u8 spriteId = GetAnimBattlerSpriteId(0);
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
gSprites[spriteId].invisible = TRUE;
}
else
{
- u8 spriteId = GetAnimBattlerSpriteId(0);
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
gSprites[spriteId].invisible = FALSE;
}
diff --git a/src/ghost.c b/src/ghost.c
index fbf452af6..30430309e 100644
--- a/src/ghost.c
+++ b/src/ghost.c
@@ -50,7 +50,7 @@ static void sub_80B71B0(struct Sprite *sprite);
static const union AffineAnimCmd gUnknown_83E75A8[] =
{
AFFINEANIMCMD_FRAME(0x1E, 0x1E, 10, 5),
- AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 10, 5),
+ AFFINEANIMCMD_FRAME(-0x1E, -0x1E, 10, 5),
AFFINEANIMCMD_JUMP(0),
};
@@ -342,7 +342,7 @@ void sub_80B54E8(u8 taskId)
SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10));
- spriteId = GetAnimBattlerSpriteId(0);
+ spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND);
SetSpriteRotScale(spriteId, 128, 128, 0);
gSprites[spriteId].invisible = FALSE;
@@ -377,7 +377,7 @@ static void sub_80B55C8(u8 taskId)
gTasks[taskId].data[1] -= 1;
return;
}
- spriteId = GetAnimBattlerSpriteId(0);
+ spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
gTasks[taskId].data[0] += 8;
if (gTasks[taskId].data[0] <= 0xFF)
{
@@ -626,7 +626,7 @@ static void sub_80B5AD4(u8 taskId)
task->data[1] = 0;
task->data[2] = 0;
task->data[3] = 16;
- task->data[13] = GetAnimBattlerSpriteId(1);
+ task->data[13] = GetAnimBattlerSpriteId(ANIM_TARGET);
task->data[4] = (gSprites[task->data[13]].oam.paletteNum + 16) * 16;
if (position == 1)
{
@@ -711,7 +711,7 @@ static void sub_80B5DCC(u8 taskId)
{
case 0:
gScanlineEffect.state = 3;
- task->data[14] = GetAnimBattlerSpriteId(1);
+ task->data[14] = GetAnimBattlerSpriteId(ANIM_TARGET);
if (rank == 1)
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
else
@@ -1288,7 +1288,7 @@ static void sub_80B6BE4(u8 taskId)
task->data[1] = 0;
task->data[2] = 0;
task->data[3] = 16;
- task->data[4] = GetAnimBattlerSpriteId(0);
+ task->data[4] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->data[5] = gSprites[task->data[4]].oam.priority;
task->data[6] = (gSprites[task->data[4]].oam.paletteNum + 16) << 4;
gSprites[task->data[4]].oam.objMode = ST_OAM_OBJ_BLEND;
diff --git a/src/ground.c b/src/ground.c
index 97f42e5c5..7ab6b6e95 100644
--- a/src/ground.c
+++ b/src/ground.c
@@ -298,7 +298,7 @@ static void sub_80B8ED4(u8 taskId)
switch (task->data[0])
{
case 0:
- task->data[10] = GetAnimBattlerSpriteId(0);
+ task->data[10] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->data[11] = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker);
if (task->data[11] == 1)
{
@@ -360,7 +360,7 @@ static void sub_80B8ED4(u8 taskId)
static void sub_80B908C(u8 taskId)
{
- u8 spriteId = GetAnimBattlerSpriteId(0);
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
gSprites[spriteId].invisible = TRUE;
gSprites[spriteId].pos2.x = 0;
@@ -391,7 +391,7 @@ static void sub_80B912C(u8 taskId)
switch (task->data[0])
{
case 0:
- task->data[10] = GetAnimBattlerSpriteId(0);
+ task->data[10] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
gSprites[task->data[10]].invisible = FALSE;
gSprites[task->data[10]].pos2.x = 0;
gSprites[task->data[10]].pos2.y = 160 - gSprites[task->data[10]].pos1.y;
@@ -410,7 +410,7 @@ static void sub_80B91B0(u8 taskId)
switch (task->data[0])
{
case 0:
- task->data[10] = GetAnimBattlerSpriteId(0);
+ task->data[10] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->data[11] = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker);
if (task->data[11] == 1)
task->data[12] = gBattle_BG1_X;
diff --git a/src/ice.c b/src/ice.c
new file mode 100644
index 000000000..9914a6992
--- /dev/null
+++ b/src/ice.c
@@ -0,0 +1,1477 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "bg.h"
+#include "field_weather.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "main.h"
+#include "palette.h"
+#include "random.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "constants/battle_anim.h"
+
+struct HailStruct
+{
+ s32 unk0:10;
+ s32 unk1:10;
+ s32 unk2:8;
+ s32 unk3:4;
+};
+
+static void sub_80AF108(struct Sprite *sprite);
+static void sub_80AF28C(struct Sprite *sprite);
+static void AnimIcePunchSwirlingParticle(struct Sprite *sprite);
+static void AnimIceBeamParticle(struct Sprite *sprite);
+static void AnimIceEffectParticle(struct Sprite *sprite);
+static void AnimFlickerIceEffectParticle(struct Sprite *sprite);
+static void AnimSwirlingSnowball_Step1(struct Sprite *sprite);
+static void AnimSwirlingSnowball_Step2(struct Sprite *sprite);
+static void AnimSwirlingSnowball_Step3(struct Sprite *sprite);
+static void AnimSwirlingSnowball_End(struct Sprite *sprite);
+static void AnimMoveParticleBeyondTarget(struct Sprite *sprite);
+static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite);
+static void AnimWaveFromCenterOfTarget(struct Sprite *sprite);
+static void InitSwirlingFogAnim(struct Sprite *sprite);
+static void AnimSwirlingFogAnim(struct Sprite *sprite);
+static void AnimThrowMistBall(struct Sprite *sprite);
+static void InitPoisonGasCloudAnim(struct Sprite *sprite);
+static void MovePoisonGasCloud(struct Sprite *sprite);
+static void AnimHailBegin(struct Sprite *sprite);
+static void AnimHailContinue(struct Sprite *sprite);
+static void InitIceBallAnim(struct Sprite *sprite);
+static void AnimThrowIceBall(struct Sprite *sprite);
+static void InitIceBallParticle(struct Sprite *sprite);
+static void AnimIceBallParticle(struct Sprite *sprite);
+static void AnimTask_Haze2(u8 taskId);
+static void AnimTask_OverlayFogTiles(u8 taskId);
+static void AnimTask_Hail2(u8 taskId);
+static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c);
+
+static const union AnimCmd gUnknown_83E62C0[] =
+{
+ ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(1, 5, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gUnknown_83E62CC[] =
+{
+ gUnknown_83E62C0,
+};
+
+// not used
+static const struct SpriteTemplate gUnknown_83E62D0 =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_83AC9C8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AF108,
+};
+
+static const union AnimCmd gUnknown_83E62E8[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E62F0[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E62F8[] =
+{
+ ANIMCMD_FRAME(6, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E6300[] =
+{
+ ANIMCMD_FRAME(7, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E6308[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E6310[] =
+{
+ ANIMCMD_FRAME(12, 6),
+ ANIMCMD_FRAME(13, 6),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gUnknown_83E631C[] =
+{
+ gUnknown_83E62E8,
+};
+
+static const union AnimCmd *const gUnknown_83E6320[] =
+{
+ gUnknown_83E62F0,
+};
+
+static const union AnimCmd *const gUnknown_83E6324[] =
+{
+ gUnknown_83E62F8,
+};
+
+static const union AnimCmd *const gUnknown_83E6328[] =
+{
+ gUnknown_83E6300,
+};
+
+static const union AnimCmd *const gUnknown_83E632C[] =
+{
+ gUnknown_83E6308,
+};
+
+static const union AnimCmd *const gUnknown_83E6330[] =
+{
+ gUnknown_83E6310,
+};
+
+static const union AffineAnimCmd gUnknown_83E6334[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 40, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6344[] =
+{
+ gUnknown_83E6334,
+};
+
+const struct SpriteTemplate gUnknown_83E6348 =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_83ACBE8,
+ .anims = gUnknown_83E6320,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6344,
+ .callback = AnimIcePunchSwirlingParticle,
+};
+
+const struct SpriteTemplate gUnknown_83E6360 =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_83ACAE8,
+ .anims = gUnknown_83E6324,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimIcePunchSwirlingParticle,
+};
+
+static const union AffineAnimCmd gUnknown_83E6378[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6388[] =
+{
+ gUnknown_83E6378,
+};
+
+const struct SpriteTemplate gUnknown_83E638C =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_83ACB88,
+ .anims = gUnknown_83E6320,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6388,
+ .callback = AnimIceBeamParticle,
+};
+
+const struct SpriteTemplate gUnknown_83E63A4 =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_83ACAE8,
+ .anims = gUnknown_83E6324,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimIceBeamParticle,
+};
+
+static const union AffineAnimCmd gUnknown_83E63BC[] =
+{
+ AFFINEANIMCMD_FRAME(0xCE, 0xCE, 0, 0),
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gUnknown_83E63DC[] =
+{
+ gUnknown_83E63BC,
+};
+
+const struct SpriteTemplate gUnknown_83E63E0 =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_83ACB88,
+ .anims = gUnknown_83E6320,
+ .images = NULL,
+ .affineAnims = gUnknown_83E63DC,
+ .callback = AnimIceEffectParticle,
+};
+
+const struct SpriteTemplate gUnknown_83E63F8 =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_83ACB48,
+ .anims = gUnknown_83E6324,
+ .images = NULL,
+ .affineAnims = gUnknown_83E63DC,
+ .callback = AnimIceEffectParticle,
+};
+
+const struct SpriteTemplate gUnknown_83E6410 =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_83AC9C8,
+ .anims = gUnknown_83E6328,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSwirlingSnowball_Step1,
+};
+
+const struct SpriteTemplate gUnknown_83E6428 =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_83AC9D0,
+ .anims = gUnknown_83E632C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveParticleBeyondTarget,
+};
+
+const struct SpriteTemplate gUnknown_83E6440 =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_83AC9C8,
+ .anims = gUnknown_83E6328,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveParticleBeyondTarget,
+};
+
+static const union AnimCmd gUnknown_83E6458[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(6, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_83E6478[] =
+{
+ gUnknown_83E6458,
+};
+
+const struct SpriteTemplate gUnknown_83E647C =
+{
+ .tileTag = ANIM_TAG_ICE_SPIKES,
+ .paletteTag = ANIM_TAG_ICE_SPIKES,
+ .oam = &gOamData_83ACB28,
+ .anims = gUnknown_83E6478,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimWaveFromCenterOfTarget,
+};
+
+static const union AnimCmd gUnknown_83E6494[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(8, 8),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gUnknown_83E64A0[] =
+{
+ gUnknown_83E6494,
+};
+
+const struct SpriteTemplate gUnknown_83E64A4 =
+{
+ .tileTag = ANIM_TAG_MIST_CLOUD,
+ .paletteTag = ANIM_TAG_MIST_CLOUD,
+ .oam = &gOamData_83ACB18,
+ .anims = gUnknown_83E64A0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = InitSwirlingFogAnim,
+};
+
+const struct SpriteTemplate gUnknown_83E64BC =
+{
+ .tileTag = ANIM_TAG_PURPLE_GAS_CLOUD,
+ .paletteTag = ANIM_TAG_PURPLE_GAS_CLOUD,
+ .oam = &gOamData_83ACB18,
+ .anims = gUnknown_83E64A0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = InitSwirlingFogAnim,
+};
+
+static const u8 gUnknown_83E64D4[] =
+{
+ 0, 1, 2, 2, 2, 2, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 8, 9,
+};
+
+const struct SpriteTemplate gUnknown_83E64E8 =
+{
+ .tileTag = ANIM_TAG_SMALL_BUBBLES,
+ .paletteTag = ANIM_TAG_SMALL_BUBBLES,
+ .oam = &gOamData_83AC9D0,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimThrowMistBall,
+};
+
+static const u8 gUnknown_83E6500[] =
+{
+ 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5,
+};
+
+const struct SpriteTemplate gUnknown_83E6514 =
+{
+ .tileTag = ANIM_TAG_PURPLE_GAS_CLOUD,
+ .paletteTag = ANIM_TAG_PURPLE_GAS_CLOUD,
+ .oam = &gOamData_83ACB18,
+ .anims = gUnknown_83E64A0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = InitPoisonGasCloudAnim,
+};
+
+static const struct HailStruct gUnknown_83E652C[] =
+{
+ {100, 120, 0, 2},
+ {85, 120, 0, 0},
+ {242, 120, 1, 1},
+ {66, 120, 2, 1},
+ {182, 120, 3, 0},
+ {60, 120, 0, 2},
+ {214, 120, 1, 0},
+ {113, 120, 0, 1},
+ {210, 120, 3, 1},
+ {38, 120, 2, 0},
+};
+
+static const union AffineAnimCmd gUnknown_83E6554[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd gUnknown_83E6564[] =
+{
+ AFFINEANIMCMD_FRAME(0xF0, 0xF0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd gUnknown_83E6574[] =
+{
+ AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd gUnknown_83E6584[] =
+{
+ AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6594[] =
+{
+ gUnknown_83E6554,
+ gUnknown_83E6564,
+ gUnknown_83E6574,
+};
+
+static const union AffineAnimCmd *const gUnknown_83E65A0[] =
+{
+ gUnknown_83E6584,
+};
+
+static const struct SpriteTemplate gUnknown_83E65A4 =
+{
+ .tileTag = ANIM_TAG_HAIL,
+ .paletteTag = ANIM_TAG_HAIL,
+ .oam = &gOamData_83ACA30,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6594,
+ .callback = AnimHailBegin,
+};
+
+const struct SpriteTemplate gUnknown_83E65BC =
+{
+ .tileTag = ANIM_TAG_HAIL,
+ .paletteTag = ANIM_TAG_HAIL,
+ .oam = &gOamData_83ACA30,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_83E65A0,
+ .callback = sub_8077350,
+};
+
+static const union AnimCmd gUnknown_83E65D4[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E65DC[] =
+{
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_83E65F0[] =
+{
+ gUnknown_83E65D4,
+ gUnknown_83E65DC,
+};
+
+static const union AffineAnimCmd gUnknown_83E65F8[] =
+{
+ AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd gUnknown_83E6608[] =
+{
+ AFFINEANIMCMD_FRAME(0x118, 0x118, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd gUnknown_83E6618[] =
+{
+ AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd gUnknown_83E6628[] =
+{
+ AFFINEANIMCMD_FRAME(0x180, 0x180, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd gUnknown_83E6638[] =
+{
+ AFFINEANIMCMD_FRAME(0x1C0, 0x1C0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6648[] =
+{
+ gUnknown_83E65F8,
+ gUnknown_83E6608,
+ gUnknown_83E6618,
+ gUnknown_83E6628,
+ gUnknown_83E6638,
+};
+
+const struct SpriteTemplate gUnknown_83E665C =
+{
+ .tileTag = ANIM_TAG_ICE_CHUNK,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_83ACA98,
+ .anims = gUnknown_83E65F0,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6648,
+ .callback = InitIceBallAnim,
+};
+
+const struct SpriteTemplate gUnknown_83E6674 =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_83AC9C8,
+ .anims = gUnknown_83E6324,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = InitIceBallParticle,
+};
+
+// not used
+static void sub_80AF108(struct Sprite *sprite)
+{
+ s16 targetX, targetY, attackerX, attackerY;
+
+ sprite->oam.tileNum += 7;
+ targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = gBattleAnimArgs[0] + attackerX;
+ sprite->data[2] = gBattleAnimArgs[2] + targetX;
+ sprite->data[3] = gBattleAnimArgs[1] + attackerY;
+ sprite->data[4] = gBattleAnimArgs[3] + targetY;
+ sub_8074C80(sprite);
+ // won't match with while loop
+ for (; (targetX >= -32 && targetX <= 272) && (targetY >= -32 && targetY <= 192); targetX += sprite->data[1], targetY += sprite->data[2])
+ ;
+ sprite->data[1] = -sprite->data[1];
+ sprite->data[2] = -sprite->data[2];
+ for (; (attackerX >= -32 && attackerX <= 272) && (attackerY >= -32 && attackerY <= 192); attackerX += sprite->data[1], attackerY += sprite->data[2])
+ ;
+ sprite->pos1.x = attackerX;
+ sprite->pos1.y = attackerY;
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = attackerX;
+ sprite->data[2] = targetX;
+ sprite->data[3] = attackerY;
+ sprite->data[4] = targetY;
+ sub_8074C80(sprite);
+ sprite->data[3] = gBattleAnimArgs[5];
+ sprite->data[4] = gBattleAnimArgs[6];
+ sprite->callback = sub_80AF28C;
+}
+
+// not used
+static void sub_80AF28C(struct Sprite *sprite)
+{
+ if (sprite->data[0] != 0)
+ {
+ sprite->data[5] += sprite->data[1];
+ sprite->data[6] += sprite->data[2];
+ sprite->pos2.x = sprite->data[5];
+ sprite->pos2.y = sprite->data[6];
+ sprite->pos2.x += Sin(sprite->data[7], sprite->data[3]);
+ sprite->pos2.y += Sin(sprite->data[7], sprite->data[3]);
+ sprite->data[7] = (sprite->data[7] + sprite->data[4]) & 0xFF;
+ --sprite->data[0];
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Animates the swirling ice crystals in Ice Punch.
+// arg 0: initial position angle around circle (0-256)
+static void AnimIcePunchSwirlingParticle(struct Sprite *sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = 60;
+ sprite->data[2] = 9;
+ sprite->data[3] = 30;
+ sprite->data[4] = -512;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
+ sprite->callback(sprite);
+}
+
+// Animates the ice particles in Ice Beam.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: duration
+static void AnimIceBeamParticle(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->data[2] -= gBattleAnimArgs[2];
+ else
+ sprite->data[2] += gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
+ sprite->data[0] = gBattleAnimArgs[4];
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = StartAnimLinearTranslation;
+}
+
+// Animates the ice crystals at the end of Ice Punch, Ice Beam, Tri Attack,
+// Weather Ball (Hail), Blizzard, and Powder Snow.
+// arg 0: target x offset
+// arg 1: target y offset
+// arg 2: ??? unknown boolean
+static void AnimIceEffectParticle(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[2] == 0)
+ {
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->pos1.x, &sprite->pos1.y);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+ StoreSpriteCallbackInData6(sprite, AnimFlickerIceEffectParticle);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+}
+
+static void AnimFlickerIceEffectParticle(struct Sprite *sprite)
+{
+ sprite->invisible ^= 1;
+ if (++sprite->data[0] == 20)
+ DestroySpriteAndMatrix(sprite);
+}
+
+// Animates the small snowballs that swirl around the target in Blizzard and Icy Wind.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: particle speed
+// arg 5: multiple targets? (boolean)
+static void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
+{
+ s32 i;
+ s16 tempDataHolder[8];
+
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+ if (!gBattleAnimArgs[5])
+ {
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
+ }
+ else
+ {
+ SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]);
+ }
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->data[2] -= gBattleAnimArgs[2];
+ else
+ sprite->data[2] += gBattleAnimArgs[2];
+ for (i = 0; i < 8; ++i)
+ tempDataHolder[i] = sprite->data[i];
+ InitAnimFastLinearTranslationWithSpeed(sprite);
+ sprite->data[1] ^= 1;
+ sprite->data[2] ^= 1;
+ while (1)
+ {
+ sprite->data[0] = 1;
+ AnimFastTranslateLinear(sprite);
+ if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272
+ || sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ break;
+ }
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = sprite->pos2.y = 0;
+ for (i = 0; i < 8; ++i)
+ sprite->data[i] = tempDataHolder[i];
+ sprite->callback = sub_8075830;
+ StoreSpriteCallbackInData6(sprite, AnimSwirlingSnowball_Step2);
+}
+
+static void AnimSwirlingSnowball_Step2(struct Sprite *sprite)
+{
+ s16 tempVar;
+
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[0] = 128;
+ tempVar = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 20 : -20;
+ sprite->data[3] = Sin(sprite->data[0], tempVar);
+ sprite->data[4] = Cos(sprite->data[0], 0xF);
+ sprite->data[5] = 0;
+ sprite->callback = AnimSwirlingSnowball_Step3;
+ sprite->callback(sprite);
+}
+
+static void AnimSwirlingSnowball_Step3(struct Sprite *sprite)
+{
+ s16 tempVar = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 20 : -20;
+
+ if (sprite->data[5] <= 31)
+ {
+ sprite->pos2.x = Sin(sprite->data[0], tempVar) - sprite->data[3];
+ sprite->pos2.y = Cos(sprite->data[0], 15) - sprite->data[4];
+ sprite->data[0] = (sprite->data[0] + 16) & 0xFF;
+ sprite->data[5] += 1;
+ }
+ else
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = sprite->pos2.y = 0;
+ sprite->data[3] = sprite->data[4] = 0;
+ sprite->callback = AnimSwirlingSnowball_End;
+ }
+}
+
+static void AnimSwirlingSnowball_End(struct Sprite *sprite)
+{
+ sprite->data[0] = 1;
+ AnimFastTranslateLinear(sprite);
+ if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272
+ || sprite->pos1.y + sprite->pos2.y > 256
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ DestroyAnimSprite(sprite);
+}
+
+// Moves particles towards the target mon and off the screen. Used to animate
+// the large snowballs in Blizzard and the small snowballs in Powder Snow.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: speed
+// arg 5: wave amplitude
+// arg 6: wave frequency
+// arg 7: multiple targets? (boolean)
+static void AnimMoveParticleBeyondTarget(struct Sprite *sprite)
+{
+ s32 i;
+ s16 tempDataHolder[8];
+
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+ if (!gBattleAnimArgs[7])
+ {
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]);
+ }
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->data[2] -= gBattleAnimArgs[2];
+ else
+ sprite->data[2] += gBattleAnimArgs[2];
+ sprite->data[4] += gBattleAnimArgs[3];
+ InitAnimFastLinearTranslationWithSpeed(sprite);
+ for (i = 0; i < 8; ++i)
+ tempDataHolder[i] = sprite->data[i];
+ sprite->data[1] ^= 1;
+ sprite->data[2] ^= 1;
+ while (1)
+ {
+ sprite->data[0] = 1;
+ AnimFastTranslateLinear(sprite);
+ if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272
+ || sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ break;
+ }
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ for (i = 0; i < 8; ++i)
+ sprite->data[i] = tempDataHolder[i];
+ sprite->data[5] = gBattleAnimArgs[5];
+ sprite->data[6] = gBattleAnimArgs[6];
+ sprite->callback = AnimWiggleParticleTowardsTarget;
+}
+
+// Moves particles in a sine wave towards the target.
+static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite)
+{
+ AnimFastTranslateLinear(sprite);
+ if (sprite->data[0] == 0)
+ sprite->data[0] = 1;
+ sprite->pos2.y += Sin(sprite->data[7], sprite->data[5]);
+ sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF;
+ if (sprite->data[0] == 1)
+ {
+ if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272
+ || sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Animates the ice pilar wave used by Icy Wind.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: ??? unknown boolean
+static void AnimWaveFromCenterOfTarget(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ if (gBattleAnimArgs[2] == 0)
+ {
+ InitSpritePosToAnimTarget(sprite, FALSE);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+ ++sprite->data[0];
+ }
+ else
+ {
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Animates the fog that swirls around the mon in Mist and Smog.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: change in y pixels per rotation
+// arg 3: duration
+// arg 4: animate on opponent? (boolean)
+// arg 5: ??? unknown boolean
+static void InitSwirlingFogAnim(struct Sprite *sprite)
+{
+ s16 tempVar;
+ u8 battler;
+
+ if (gBattleAnimArgs[4] == 0)
+ {
+ if (gBattleAnimArgs[5] == 0)
+ {
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gBattleAnimAttacker, 0, &sprite->pos1.x, &sprite->pos1.y);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+ battler = gBattleAnimAttacker;
+ }
+ else
+ {
+ if (gBattleAnimArgs[5] == 0)
+ {
+ InitSpritePosToAnimTarget(sprite, FALSE);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
+ if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+ battler = gBattleAnimTarget;
+ }
+ sprite->data[7] = battler;
+ if (gBattleAnimArgs[5] == 0 || !IsDoubleBattle())
+ tempVar = 0x20;
+ else
+ tempVar = 0x40;
+ sprite->data[6] = tempVar;
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ sprite->pos1.y += 8;
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[2];
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = 64;
+ sprite->callback = AnimSwirlingFogAnim;
+ sprite->callback(sprite);
+}
+
+// Animates swirling fog initialized by InitSwirlingFogAnim.
+static void AnimSwirlingFogAnim(struct Sprite *sprite)
+{
+ if (!AnimTranslateLinear(sprite))
+ {
+ sprite->pos2.x += Sin(sprite->data[5], sprite->data[6]);
+ sprite->pos2.y += Cos(sprite->data[5], -6);
+ if ((u16)(sprite->data[5] - 64) <= 0x7F)
+ sprite->oam.priority = GetBattlerSpriteBGPriority(sprite->data[7]);
+ else
+ sprite->oam.priority = GetBattlerSpriteBGPriority(sprite->data[7]) + 1;
+ sprite->data[5] = (sprite->data[5] + 3) & 0xFF;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Fades mons to black and places foggy overlay in Haze.
+void AnimTask_Haze1(u8 taskId)
+{
+ struct BattleAnimBgData animBg;
+
+ 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, 0);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ sub_80752A0(&animBg);
+ LoadBgTiles(animBg.bgId, gWeatherFog1Tiles, 0x800, animBg.tilesOffset);
+ AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimFogTilemap);
+ LoadPalette(&gUnknown_83C2CE0, animBg.paletteId * 16, 32);
+ if (IsContest())
+ sub_80730C0(animBg.paletteId, animBg.bgTilemap, 0, 0);
+ gTasks[taskId].func = AnimTask_Haze2;
+}
+
+static void AnimTask_Haze2(u8 taskId)
+{
+ struct BattleAnimBgData animBg;
+
+ gBattle_BG1_X += -1;
+ switch (gTasks[taskId].data[12])
+ {
+ case 0:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ ++gTasks[taskId].data[9];
+ gTasks[taskId].data[11] = gUnknown_83E64D4[gTasks[taskId].data[9]];
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 9)
+ {
+ ++gTasks[taskId].data[12];
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 0x51)
+ {
+ gTasks[taskId].data[11] = 9;
+ ++gTasks[taskId].data[12];
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ --gTasks[taskId].data[11];
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 0)
+ {
+ ++gTasks[taskId].data[12];
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 3:
+ sub_80752A0(&animBg);
+ sub_8075358(1);
+ sub_8075358(2);
+ ++gTasks[taskId].data[12];
+ // fall through
+ case 4:
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+// Throws the ball in Mist Ball.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: targey x offset
+// arg 3: target y offset
+// arg 4: duration
+// arg 5: ??? unknown (seems to vibrate target mon somehow)
+static void AnimThrowMistBall(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->callback = TranslateAnimSpriteToTargetMonLocation;
+}
+
+// Displays misty background in Mist Ball.
+void AnimTask_LoadMistTiles(u8 taskId)
+{
+ struct BattleAnimBgData animBg;
+
+ 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, 0);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ sub_80752A0(&animBg);
+ LoadBgTiles(animBg.bgId, gWeatherFog1Tiles, 0x800, animBg.tilesOffset);
+ AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimFogTilemap);
+ LoadPalette(&gUnknown_83C2CE0, animBg.paletteId * 16, 32);
+ if (IsContest())
+ sub_80730C0(animBg.paletteId, animBg.bgTilemap, 0, 0);
+ gTasks[taskId].data[15] = -1;
+ gTasks[taskId].func = AnimTask_OverlayFogTiles;
+}
+
+static void AnimTask_OverlayFogTiles(u8 taskId)
+{
+ struct BattleAnimBgData animBg;
+
+ gBattle_BG1_X += gTasks[taskId].data[15];
+ switch (gTasks[taskId].data[12])
+ {
+ case 0:
+ gTasks[taskId].data[9] += 1;
+ gTasks[taskId].data[11] = gUnknown_83E6500[gTasks[taskId].data[9]];
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 17 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 5)
+ {
+ ++gTasks[taskId].data[12];
+ gTasks[taskId].data[11] = 0;
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 0x51)
+ {
+ gTasks[taskId].data[11] = 5;
+ ++gTasks[taskId].data[12];
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11] -= 1;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 0)
+ {
+ ++gTasks[taskId].data[12];
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 3:
+ sub_80752A0(&animBg);
+ sub_8075358(1);
+ sub_8075358(2);
+ ++gTasks[taskId].data[12];
+ // fall through
+ case 4:
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+// Initializes gas clouds in the Poison Gas animation.
+// arg 0: duration
+// arg 1: ? target x offset
+// arg 2: ? target y offset
+// arg 3: ? swirl start x
+// arg 4: ? swirl start y
+// arg 5: ??? unknown
+// arg 6: ??? unknown
+// arg 7: ??? unknown boolean
+static void InitPoisonGasCloudAnim(struct Sprite *sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[0];
+ if (GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) < GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2))
+ sprite->data[7] = 0x8000;
+ if ((gBattlerPositions[gBattleAnimTarget] & BIT_SIDE) == B_SIDE_PLAYER)
+ {
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ if ((sprite->data[7] & 0x8000) && (gBattlerPositions[gBattleAnimAttacker] & BIT_SIDE) == B_SIDE_PLAYER)
+ sprite->subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1;
+ sprite->data[6] = 1;
+ }
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ if (gBattleAnimArgs[7])
+ {
+ sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[3];
+ sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[4];
+ sprite->data[7] |= GetBattlerSpriteBGPriority(gBattleAnimTarget) << 8;
+ }
+ else
+ {
+ sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[3];
+ sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[4];
+ sprite->data[7] |= GetBattlerSpriteBGPriority(gBattleAnimTarget) << 8;
+ }
+ if (IsContest())
+ {
+ sprite->data[6] = 1;
+ sprite->subpriority = 0x80;
+ }
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = MovePoisonGasCloud;
+}
+
+static void MovePoisonGasCloud(struct Sprite *sprite)
+{
+ s32 value;
+
+ switch (sprite->data[7] & 0xFF)
+ {
+ case 0:
+ AnimTranslateLinear(sprite);
+ value = gSineTable[sprite->data[5]];
+ sprite->pos2.x += value >> 4;
+ if (sprite->data[6])
+ sprite->data[5] = (sprite->data[5] - 8) & 0xFF;
+ else
+ sprite->data[5] = (sprite->data[5] + 8) & 0xFF;
+ if (sprite->data[0] <= 0)
+ {
+ sprite->data[0] = 80;
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->pos1.y + 29;
+ ++sprite->data[7];
+ if (IsContest())
+ sprite->data[5] = 80;
+ else if (GET_BATTLER_SIDE2(gBattleAnimTarget) != B_SIDE_PLAYER)
+ sprite->data[5] = 204;
+ else
+ sprite->data[5] = 80;
+ sprite->pos2.y = 0;
+ value = gSineTable[sprite->data[5]];
+ sprite->pos2.x = value >> 3;
+ sprite->data[5] = (sprite->data[5] + 2) & 0xFF;
+ InitAnimLinearTranslation(sprite);
+ }
+ break;
+ case 1:
+ AnimTranslateLinear(sprite);
+ value = gSineTable[sprite->data[5]];
+ sprite->pos2.x += value >> 3;
+ sprite->pos2.y += (gSineTable[sprite->data[5] + 0x40] * -3) >> 8;
+ if (!IsContest())
+ {
+ u16 var0 = sprite->data[5] - 0x40;
+
+ if (var0 <= 0x7F)
+ sprite->oam.priority = sprite->data[7] >> 8;
+ else
+ sprite->oam.priority = (sprite->data[7] >> 8) + 1;
+ sprite->data[5] = (sprite->data[5] + 4) & 0xFF;
+ }
+ else
+ {
+ u16 var0 = sprite->data[5] - 0x40;
+
+ if (var0 <= 0x7F)
+ sprite->subpriority = 128;
+ else
+ sprite->subpriority = 140;
+ sprite->data[5] = (sprite->data[5] - 4) & 0xFF;
+ }
+ if (sprite->data[0] <= 0)
+ {
+ sprite->data[0] = 0x300;
+ sprite->data[1] = sprite->pos1.x += sprite->pos2.x;
+ sprite->data[3] = sprite->pos1.y += sprite->pos2.y;
+ sprite->data[4] = sprite->pos1.y + 4;
+ if (IsContest())
+ sprite->data[2] = -0x10;
+ else if (GET_BATTLER_SIDE2(gBattleAnimTarget) != B_SIDE_PLAYER)
+ sprite->data[2] = 0x100;
+ else
+ sprite->data[2] = -0x10;
+ ++sprite->data[7];
+ sprite->pos2.x = sprite->pos2.y = 0;
+ sub_8075678(sprite);
+ }
+ break;
+ case 2:
+ if (AnimTranslateLinear(sprite))
+ {
+ if (sprite->oam.affineMode & 1)
+ {
+ FreeOamMatrix(sprite->oam.matrixNum);
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
+ }
+ DestroySprite(sprite);
+ --gAnimVisualTaskCount;
+ }
+ break;
+ }
+}
+
+// Creates Hail.
+void AnimTask_Hail1(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->func = AnimTask_Hail2;
+}
+
+static void AnimTask_Hail2(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[4] > 2)
+ {
+ task->data[4] = 0;
+ task->data[5] = 0;
+ task->data[2] = 0;
+ ++task->data[0];
+ }
+ break;
+ case 1:
+ if (task->data[5] == 0)
+ {
+ if (GenerateHailParticle(task->data[3], task->data[2], taskId, 1))
+ ++task->data[1];
+ if (++task->data[2] == 3)
+ {
+ if (++task->data[3] == 10)
+ ++task->data[0];
+ else
+ --task->data[0];
+ }
+ else
+ {
+ task->data[5] = 1;
+ }
+ }
+ else
+ {
+ --task->data[5];
+ }
+ break;
+ case 2:
+ if (task->data[1] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c)
+{
+ u8 id;
+ s16 battlerX, battlerY;
+ s16 spriteX;
+ bool8 possibleBool = FALSE;
+ s8 unk = gUnknown_83E652C[hailStructId].unk3;
+
+ if (unk != 2)
+ {
+ id = GetBattlerAtPosition(gUnknown_83E652C[hailStructId].unk2);
+ if (IsBattlerSpriteVisible(id))
+ {
+ possibleBool = TRUE;
+ battlerX = GetBattlerSpriteCoord(id, BATTLER_COORD_X_2);
+ battlerY = GetBattlerSpriteCoord(id, BATTLER_COORD_Y_PIC_OFFSET);
+ switch (unk)
+ {
+ case 0:
+ battlerX -= GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_WIDTH) / 6;
+ battlerY -= GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_HEIGHT) / 6;
+ break;
+ case 1:
+ battlerX += GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_WIDTH) / 6;
+ battlerY += GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_HEIGHT) / 6;
+ break;
+ }
+ }
+ else
+ {
+ battlerX = (gUnknown_83E652C[hailStructId].unk0);
+ battlerY = (gUnknown_83E652C[hailStructId].unk1);
+ }
+ }
+ else
+ {
+ battlerX = (gUnknown_83E652C[hailStructId].unk0);
+ battlerY = (gUnknown_83E652C[hailStructId].unk1);
+ }
+ spriteX = battlerX - ((battlerY + 8) / 2);
+ id = CreateSprite(&gUnknown_83E65A4, spriteX, -8, 18);
+ if (id == MAX_SPRITES)
+ {
+ return FALSE;
+ }
+ else
+ {
+ StartSpriteAffineAnim(&gSprites[id], affineAnimNum);
+ gSprites[id].data[0] = possibleBool;
+ gSprites[id].data[3] = battlerX;
+ gSprites[id].data[4] = battlerY;
+ gSprites[id].data[5] = affineAnimNum;
+ gSprites[id].data[6] = taskId;
+ gSprites[id].data[7] = c;
+ return TRUE;
+ }
+}
+
+static void AnimHailBegin(struct Sprite *sprite)
+{
+ u8 spriteId;
+
+ sprite->pos1.x += 4;
+ sprite->pos1.y += 8;
+ if (sprite->pos1.x < sprite->data[3] && sprite->pos1.y < sprite->data[4])
+ return;
+ if (sprite->data[0] == 1 && sprite->data[5] == 0)
+ {
+ spriteId = CreateSprite(&gUnknown_83E63E0, sprite->data[3], sprite->data[4], sprite->subpriority);
+ sprite->data[0] = spriteId;
+ if (spriteId != 64)
+ {
+ gSprites[sprite->data[0]].callback = AnimHailContinue;
+ gSprites[sprite->data[0]].data[6] = sprite->data[6];
+ gSprites[sprite->data[0]].data[7] = sprite->data[7];
+ }
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+ }
+ else
+ {
+ --gTasks[sprite->data[6]].data[sprite->data[7]];
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+ }
+}
+
+static void AnimHailContinue(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 20)
+ {
+ --gTasks[sprite->data[6]].data[sprite->data[7]];
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+ }
+}
+
+// Initializes the animation for Ice Ball.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: duration
+// arg 5: arc height (negative)
+static void InitIceBallAnim(struct Sprite *sprite)
+{
+ u8 animNum = gAnimDisableStructPtr->rolloutTimerStartValue - gAnimDisableStructPtr->rolloutTimer - 1;
+
+ if (animNum > 4)
+ animNum = 4;
+ StartSpriteAffineAnim(sprite, animNum);
+ InitSpritePosToAnimAttacker(sprite, 1);
+ sprite->data[0] = gBattleAnimArgs[4];
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
+ sprite->data[5] = gBattleAnimArgs[5];
+ InitAnimArcTranslation(sprite);
+ sprite->callback = AnimThrowIceBall;
+}
+
+// Throws the ball of ice in Ice Ball.
+static void AnimThrowIceBall(struct Sprite *sprite)
+{
+ if (TranslateAnimHorizontalArc(sprite))
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ }
+}
+
+// Initializes the particles that scatter at the end of the Ice Ball animation.
+static void InitIceBallParticle(struct Sprite *sprite)
+{
+ s16 randA, randB;
+
+ sprite->oam.tileNum += 8;
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ randA = (Random() & 0xFF) + 256;
+ randB = Random() & 0x1FF;
+ if (randB > 0xFF)
+ randB = 256 - randB;
+ sprite->data[1] = randA;
+ sprite->data[2] = randB;
+ sprite->callback = AnimIceBallParticle;
+}
+
+// Animates the particles created by InitIceBallParticle.
+static void AnimIceBallParticle(struct Sprite *sprite)
+{
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+ if (sprite->data[1] & 1)
+ sprite->pos2.x = -(sprite->data[3] >> 8);
+ else
+ sprite->pos2.x = sprite->data[3] >> 8;
+ sprite->pos2.y = sprite->data[4] >> 8;
+ if (++sprite->data[0] == 21)
+ DestroyAnimSprite(sprite);
+}
+
+// Counter for Ice Ball.
+void AnimTask_GetRolloutCounter(u8 taskId)
+{
+ u8 arg = gBattleAnimArgs[0];
+
+ gBattleAnimArgs[arg] = gAnimDisableStructPtr->rolloutTimerStartValue - gAnimDisableStructPtr->rolloutTimer - 1;
+ DestroyAnimVisualTask(taskId);
+}
diff --git a/src/poison.c b/src/poison.c
new file mode 100644
index 000000000..004e9aa98
--- /dev/null
+++ b/src/poison.c
@@ -0,0 +1,298 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "trig.h"
+
+static void sub_80B1620(struct Sprite *sprite);
+static void sub_80B16A0(struct Sprite *sprite);
+static void sub_80B1744(struct Sprite *sprite);
+static void sub_80B17C4(struct Sprite *sprite);
+static void AnimBubbleEffect(struct Sprite *sprite);
+static void sub_80B1684(struct Sprite *sprite);
+static void sub_80B1728(struct Sprite *sprite);
+static void sub_80B1798(struct Sprite *sprite);
+static void AnimBubbleEffectStep(struct Sprite *sprite);
+
+static const union AnimCmd gUnknown_83E6994[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_83E69A8[] =
+{
+ gUnknown_83E6994,
+};
+
+const struct SpriteTemplate gUnknown_83E69AC =
+{
+ .tileTag = ANIM_TAG_TOXIC_BUBBLE,
+ .paletteTag = ANIM_TAG_TOXIC_BUBBLE,
+ .oam = &gOamData_83ACA18,
+ .anims = gUnknown_83E69A8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos,
+};
+
+static const union AnimCmd gUnknown_83E69C4[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E69CC[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_83E69D4[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_83E69DC[] =
+{
+ gUnknown_83E69C4,
+};
+
+static const union AnimCmd *const gUnknown_83E69E0[] =
+{
+ gUnknown_83E69CC,
+};
+
+static const union AnimCmd *const gUnknown_83E69E4[] =
+{
+ gUnknown_83E69D4,
+};
+
+static const union AffineAnimCmd gUnknown_83E69E8[] =
+{
+ AFFINEANIMCMD_FRAME(0x160, 0x160, 0, 0),
+ AFFINEANIMCMD_FRAME(-0xA, -0xA, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd gUnknown_83E6A08[] =
+{
+ AFFINEANIMCMD_FRAME(0xEC, 0xEC, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6A18[] =
+{
+ gUnknown_83E69E8,
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6A1C[] =
+{
+ gUnknown_83E6A08,
+};
+
+const struct SpriteTemplate gUnknown_83E6A20 =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_83ACA90,
+ .anims = gUnknown_83E69DC,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6A18,
+ .callback = sub_80B1620,
+};
+
+const struct SpriteTemplate gUnknown_83E6A38 =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_83ACA90,
+ .anims = gUnknown_83E69DC,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6A18,
+ .callback = sub_80B16A0,
+};
+
+const struct SpriteTemplate gUnknown_83E6A50 =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_83ACA30,
+ .anims = gUnknown_83E69E4,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6A1C,
+ .callback = sub_80B1744,
+};
+
+static const union AffineAnimCmd gUnknown_83E6A68[] =
+{
+ AFFINEANIMCMD_FRAME(-0x10, 0x10, 0, 6),
+ AFFINEANIMCMD_FRAME(0x10, -0x10, 0, 6),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6A80[] =
+{
+ gUnknown_83E6A68,
+};
+
+const struct SpriteTemplate gUnknown_83E6A84 =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_83ACA90,
+ .anims = gUnknown_83E69E0,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6A80,
+ .callback = sub_80B17C4,
+};
+
+static const union AffineAnimCmd gUnknown_83E6A9C[] =
+{
+ AFFINEANIMCMD_FRAME(0x9C, 0x9C, 0, 0),
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 20),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gUnknown_83E6AB4[] =
+{
+ gUnknown_83E6A9C,
+};
+
+const struct SpriteTemplate gPoisonBubbleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_83ACA30,
+ .anims = gUnknown_83E69DC,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6AB4,
+ .callback = AnimBubbleEffect,
+};
+
+const struct SpriteTemplate gWaterBubbleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_BUBBLES,
+ .paletteTag = ANIM_TAG_SMALL_BUBBLES,
+ .oam = &gOamData_83ACB50,
+ .anims = gUnknown_83E5A78,
+ .images = NULL,
+ .affineAnims = gUnknown_83E6AB4,
+ .callback = AnimBubbleEffect,
+};
+
+static void sub_80B1620(struct Sprite *sprite)
+{
+ if (!gBattleAnimArgs[3])
+ StartSpriteAnim(sprite, 2);
+ InitSpritePosToAnimAttacker(sprite, 1);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[5] = -30;
+ InitAnimArcTranslation(sprite);
+ sprite->callback = sub_80B1684;
+}
+
+static void sub_80B1684(struct Sprite *sprite)
+{
+ if (TranslateAnimHorizontalArc(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_80B16A0(struct Sprite *sprite)
+{
+ s16 l1, l2;
+
+ if (!gBattleAnimArgs[3])
+ StartSpriteAnim(sprite, 2);
+ InitSpritePosToAnimAttacker(sprite, 1);
+ SetAverageBattlerPositions(gBattleAnimTarget, 1, &l1, &l2);
+ if (GetBattlerSide(gBattleAnimAttacker))
+ gBattleAnimArgs[4] = -gBattleAnimArgs[4];
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = l1 + gBattleAnimArgs[4];
+ sprite->data[4] = l2 + gBattleAnimArgs[5];
+ sprite->data[5] = -30;
+ InitAnimArcTranslation(sprite);
+ sprite->callback = sub_80B1728;
+}
+
+static void sub_80B1728(struct Sprite *sprite)
+{
+ if (TranslateAnimHorizontalArc(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_80B1744(struct Sprite *sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[0];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[1];
+ InitSpriteDataForLinearTranslation(sprite);
+ sprite->data[5] = sprite->data[1] / gBattleAnimArgs[2];
+ sprite->data[6] = sprite->data[2] / gBattleAnimArgs[2];
+ sprite->callback = sub_80B1798;
+}
+
+static void sub_80B1798(struct Sprite *sprite)
+{
+ TranslateSpriteLinearFixedPoint(sprite);
+ sprite->data[1] -= sprite->data[5];
+ sprite->data[2] -= sprite->data[6];
+ if (!sprite->data[0])
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_80B17C4(struct Sprite *sprite)
+{
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
+ sprite->data[4] = sprite->pos1.y + sprite->data[0];
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// Animates a bubble by rising upward, swaying side to side, and
+// enlarging the sprite. This is used as an after-effect by poison-type
+// moves, along with MOVE_BUBBLE, and MOVE_BUBBLEBEAM.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: 0 = single-target, 1 = multi-target
+static void AnimBubbleEffect(struct Sprite *sprite)
+{
+ if (!gBattleAnimArgs[2])
+ {
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y);
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+ sprite->callback = AnimBubbleEffectStep;
+}
+
+static void AnimBubbleEffectStep(struct Sprite *sprite)
+{
+ sprite->data[0] = (sprite->data[0] + 0xB) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[0], 4);
+ sprite->data[1] += 0x30;
+ sprite->pos2.y = -(sprite->data[1] >> 8);
+ if (sprite->affineAnimEnded)
+ DestroyAnimSprite(sprite);
+}
diff --git a/src/pokemon.c b/src/pokemon.c
index c4ae0c4da..57633dbad 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -2365,25 +2365,25 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | /*BATTLE_TYPE_BATTLE_TOWER |*/ BATTLE_TYPE_EREADER_TRAINER)))
{
if (FlagGet(FLAG_BADGE01_GET)
- && !GetBattlerSide(battlerIdAtk))
+ && GetBattlerSide(battlerIdAtk) == B_SIDE_PLAYER)
attack = (110 * attack) / 100;
}
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | /*BATTLE_TYPE_BATTLE_TOWER |*/ BATTLE_TYPE_EREADER_TRAINER)))
{
if (FlagGet(FLAG_BADGE05_GET)
- && !GetBattlerSide(battlerIdDef))
+ && GetBattlerSide(battlerIdDef) == B_SIDE_PLAYER)
defense = (110 * defense) / 100;
}
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | /*BATTLE_TYPE_BATTLE_TOWER |*/ BATTLE_TYPE_EREADER_TRAINER)))
{
if (FlagGet(FLAG_BADGE07_GET)
- && !GetBattlerSide(battlerIdAtk))
+ && GetBattlerSide(battlerIdAtk) == B_SIDE_PLAYER)
spAttack = (110 * spAttack) / 100;
}
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | /*BATTLE_TYPE_BATTLE_TOWER |*/ BATTLE_TYPE_EREADER_TRAINER)))
{
if (FlagGet(FLAG_BADGE07_GET)
- && !GetBattlerSide(battlerIdDef))
+ && GetBattlerSide(battlerIdDef) == B_SIDE_PLAYER)
spDefense = (110 * spDefense) / 100;
}
@@ -3917,7 +3917,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
if (gMain.inBattle)
{
gActiveBattler = gBattlerInMenuId;
- cmdIndex = (GetBattlerSide(gActiveBattler) != 0);
+ cmdIndex = (GetBattlerSide(gActiveBattler) != B_SIDE_PLAYER);
while (cmdIndex < gBattlersCount)
{
if (gBattlerPartyIndexes[cmdIndex] == partyIndex)
@@ -4118,13 +4118,13 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
gAbsentBattlerFlags &= ~gBitTable[sp34];
CopyPlayerPartyMonToBattleData(sp34, pokemon_order_func(gBattlerPartyIndexes[sp34]));
- if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.numRevivesUsed < 255)
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255)
gBattleResults.numRevivesUsed++;
}
else
{
gAbsentBattlerFlags &= ~gBitTable[gActiveBattler ^ 2];
- if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.numRevivesUsed < 255)
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255)
gBattleResults.numRevivesUsed++;
}
}
@@ -4163,7 +4163,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
if (gMain.inBattle && sp34 != 4)
{
gBattleMons[sp34].hp = data;
- if (!(r10 & 0x10) && GetBattlerSide(gActiveBattler) == 0)
+ if (!(r10 & 0x10) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
if (gBattleResults.numHealingItemsUsed < 255)
gBattleResults.numHealingItemsUsed++;
@@ -6039,11 +6039,11 @@ void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality)
}
}
-bool8 CheckBattleTypeGhost(struct Pokemon *mon, u8 bank)
+bool8 CheckBattleTypeGhost(struct Pokemon *mon, u8 battlerId)
{
u8 buffer[12];
- if (gBattleTypeFlags & BATTLE_TYPE_GHOST && GetBattlerSide(bank))
+ if (gBattleTypeFlags & BATTLE_TYPE_GHOST && GetBattlerSide(battlerId) != B_SIDE_PLAYER)
{
GetMonData(mon, MON_DATA_NICKNAME, buffer);
StringGetEnd10(buffer);
diff --git a/src/psychic.c b/src/psychic.c
index a8108c55a..bbb6c3ed5 100644
--- a/src/psychic.c
+++ b/src/psychic.c
@@ -30,7 +30,7 @@ static void sub_80B3D78(u8 taskId);
static const union AffineAnimCmd gUnknown_83E6DDC[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0xFFFE, 0xFFFE, -10, 120),
+ AFFINEANIMCMD_FRAME(-0x2, -0x2, -10, 120),
AFFINEANIMCMD_END,
};
@@ -305,7 +305,7 @@ const struct SpriteTemplate gUnknown_83E705C =
static const union AffineAnimCmd gUnknown_83E7074[] =
{
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 8),
+ AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 8),
AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
AFFINEANIMCMD_JUMP(0),
};
@@ -313,27 +313,27 @@ static const union AffineAnimCmd gUnknown_83E7074[] =
static const union AffineAnimCmd gUnknown_83E708C[] =
{
AFFINEANIMCMD_FRAME(0xF0, 0xF0, 0, 0),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6),
+ AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 6),
AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2),
+ AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 2),
AFFINEANIMCMD_JUMP(1),
};
static const union AffineAnimCmd gUnknown_83E70B4[] =
{
AFFINEANIMCMD_FRAME(0xD0, 0xD0, 0, 0),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4),
+ AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 4),
AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4),
+ AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 4),
AFFINEANIMCMD_JUMP(1),
};
static const union AffineAnimCmd gUnknown_83E70DC[] =
{
AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2),
+ AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 2),
AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6),
+ AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 6),
AFFINEANIMCMD_JUMP(1),
};
@@ -384,11 +384,11 @@ static const union AffineAnimCmd gUnknown_83E7160[] =
AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 17),
AFFINEANIMCMD_LOOP(0),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 10),
+ AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 10),
AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 10),
AFFINEANIMCMD_LOOP(4),
AFFINEANIMCMD_LOOP(0),
- AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 5),
+ AFFINEANIMCMD_FRAME(-0x10, -0x10, 0, 5),
AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 5),
AFFINEANIMCMD_LOOP(7),
AFFINEANIMCMD_END,
@@ -396,7 +396,7 @@ static const union AffineAnimCmd gUnknown_83E7160[] =
static const union AffineAnimCmd gUnknown_83E71B8[] =
{
- AFFINEANIMCMD_FRAME(0xFFEC, 0x18, 0, 15),
+ AFFINEANIMCMD_FRAME(-0x14, 0x18, 0, 15),
AFFINEANIMCMD_END,
};
diff --git a/src/quest_log.c b/src/quest_log.c
index 78fa73de7..d7b544882 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -31,10 +31,10 @@
#include "wild_encounter.h"
#include "help_system.h"
#include "party_menu.h"
-#include "unk_8159F40.h"
#include "pokemon_storage_system.h"
#include "save.h"
#include "link.h"
+#include "quest_log_815A008.h"
#include "quest_log_8150454.h"
#include "quest_log.h"
#include "new_menu_helpers.h"
diff --git a/src/unk_8159F40.c b/src/quest_log_815A008.c
index ef21d19d0..2d488a845 100644
--- a/src/unk_8159F40.c
+++ b/src/quest_log_815A008.c
@@ -1,5 +1,4 @@
#include "global.h"
-#include "battle.h"
#include "event_data.h"
#include "quest_log.h"
#include "fieldmap.h"
@@ -7,152 +6,6 @@
#include "metatile_behavior.h"
#include "link.h"
#include "link_rfu.h"
-#include "constants/species.h"
-#include "constants/moves.h"
-#include "constants/pokemon.h"
-
-struct PokedudeBattlePartyInfo
-{
- u8 side;
- u8 level;
- u16 species;
- u16 moves[4];
- u8 nature;
- u8 gender;
-};
-
-static const struct PokedudeBattlePartyInfo sParties_Battle[] = {
- {
- .side = 0,
- .level = 15,
- .species = SPECIES_RATTATA,
- .moves = {MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK},
- .nature = NATURE_LONELY,
- .gender = MALE
- },
- {
- .side = 1,
- .level = 18,
- .species = SPECIES_PIDGEY,
- .moves = {MOVE_TACKLE, MOVE_SAND_ATTACK, MOVE_GUST, MOVE_QUICK_ATTACK},
- .nature = NATURE_NAUGHTY,
- .gender = MALE
- },
- {0xFF}
-};
-
-static const struct PokedudeBattlePartyInfo sParties_Status[] = {
- {
- .side = 0,
- .level = 15,
- .species = SPECIES_RATTATA,
- .moves = {MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK},
- .nature = NATURE_LONELY,
- .gender = MALE
- },
- {
- .side = 1,
- .level = 14,
- .species = SPECIES_ODDISH,
- .moves = {MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER},
- .nature = NATURE_RASH,
- .gender = MALE
- },
- {0xFF}
-};
-
-static const struct PokedudeBattlePartyInfo sParties_Matchups[] = {
- {
- .side = 0,
- .level = 15,
- .species = SPECIES_POLIWAG,
- .moves = {MOVE_WATER_GUN, MOVE_HYPNOSIS, MOVE_BUBBLE},
- .nature = NATURE_RASH,
- .gender = MALE
- },
- {
- .side = 0,
- .level = 15,
- .species = SPECIES_BUTTERFREE,
- .moves = {MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_STUN_SPORE, MOVE_SLEEP_POWDER},
- .nature = NATURE_RASH,
- .gender = MALE
- },
- {
- .side = 1,
- .level = 14,
- .species = SPECIES_ODDISH,
- .moves = {MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER},
- .nature = NATURE_RASH,
- .gender = MALE
- },
- {0xFF}
-};
-
-static const struct PokedudeBattlePartyInfo sParties_Catching[] = {
- {
- .side = 0,
- .level = 15,
- .species = SPECIES_BUTTERFREE,
- .moves = {MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_SLEEP_POWDER, MOVE_STUN_SPORE},
- .nature = NATURE_RASH,
- .gender = MALE
- },
- {
- .side = 1,
- .level = 11,
- .species = SPECIES_JIGGLYPUFF,
- .moves = {MOVE_SING, MOVE_DEFENSE_CURL, MOVE_POUND},
- .nature = NATURE_CAREFUL,
- .gender = MALE
- },
- {0xFF}
-};
-
-
-static const struct PokedudeBattlePartyInfo *const sPokedudeBattlePartyPointers[] = {
- sParties_Battle,
- sParties_Status,
- sParties_Matchups,
- sParties_Catching
-};
-
-void InitPokedudePartyAndOpponent(void)
-{
- s32 i, j;
- struct Pokemon * mon;
- s32 myIdx = 0;
- s32 opIdx = 0;
- const struct PokedudeBattlePartyInfo * data;
-
- gBattleTypeFlags = BATTLE_TYPE_POKEDUDE;
- ZeroPlayerPartyMons();
- ZeroEnemyPartyMons();
- data = sPokedudeBattlePartyPointers[gSpecialVar_0x8004];
-
- i = 0;
- do
- {
- if (data[i].side == 0)
- {
- mon = &gPlayerParty[myIdx];
- myIdx++;
- }
- else
- {
- mon = &gEnemyParty[opIdx];
- opIdx++;
- }
- CreateMonWithGenderNatureLetter(mon, data[i].species, data[i].level, 0, data[i].gender, data[i].nature, 0);
- for (j = 0; j < 4; j++)
- {
- SetMonMoveSlot(mon, data[i].moves[j], j);
- }
- i++;
- } while (data[i].side != 0xFF);
-}
-
-// file boundary?
void sub_815A008(struct QuestLog * questLog)
{
diff --git a/src/rock.c b/src/rock.c
index 4db903344..c4b668941 100644
--- a/src/rock.c
+++ b/src/rock.c
@@ -87,8 +87,8 @@ const struct SpriteTemplate gUnknown_83E73E4 =
static const union AffineAnimCmd gUnknown_83E73FC[] =
{
AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
- AFFINEANIMCMD_FRAME(0x2, 0xFFFD, 0, 5),
- AFFINEANIMCMD_FRAME(0xFFFE, 0x3, 0, 5),
+ AFFINEANIMCMD_FRAME(0x2, -0x3, 0, 5),
+ AFFINEANIMCMD_FRAME(-0x2, 0x3, 0, 5),
AFFINEANIMCMD_JUMP(1),
};
@@ -152,7 +152,7 @@ static const struct Subsprite gUnknown_83E7468[] =
static const struct SubspriteTable gUnknown_83E7470[] =
{
- { ARRAY_COUNT(gUnknown_83E7468), gUnknown_83E7468 },
+ { NELEMS(gUnknown_83E7468), gUnknown_83E7468 },
};
static const union AnimCmd gUnknown_83E7478[] =
@@ -588,7 +588,7 @@ void sub_80B4BD0(u8 taskId)
task->data[13] = pan1;
task->data[14] = (pan2 - pan1) / task->data[8];
task->data[1] = var4;
- task->data[15] = GetAnimBattlerSpriteId(0);
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->func = sub_80B4D00;
}
diff --git a/src/teachy_tv.c b/src/teachy_tv.c
index e33cb9d2e..2720f3204 100644
--- a/src/teachy_tv.c
+++ b/src/teachy_tv.c
@@ -25,11 +25,11 @@
#include "battle_transition.h"
#include "battle_main.h"
#include "battle.h"
+#include "battle_controllers.h"
#include "global.fieldmap.h"
#include "teachy_tv.h"
#include "help_system.h"
#include "overworld.h"
-#include "unk_8159F40.h"
#include "graphics.h"
#include "fieldmap.h"
#include "strings.h"
diff --git a/sym_common.txt b/sym_common.txt
index 79ccc190d..def8fff58 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -192,10 +192,7 @@ gUnknown_3005E98: @ 3005E98
.include "mevent.o"
.align 4
-gUnknown_3005EE0: @ 3005EE0
-@ const u8 *gUnknown_3005EE0[4]
- .space 0x10
-
+ .include "battle_controller_pokedude.o"
.align 4
.include "berry_fix_program.o"
.include "m4a.o"