summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_controller_pokedude.s7632
-rw-r--r--asm/clear_save_data_screen.s5
-rw-r--r--asm/electric.s2675
-rw-r--r--asm/evolution_graphics.s1825
-rw-r--r--asm/evolution_scene.s14
-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--baserom.ipsbin298582 -> 279787 bytes
-rw-r--r--common_syms/battle_controller_pokedude.txt1
-rw-r--r--data/battle_anim_effects_misc.s2022
-rw-r--r--data/battle_anim_scripts.s140
-rw-r--r--data/battle_anim_special.s131
-rw-r--r--data/data_8471F00.s24
-rw-r--r--data/evolution_graphics.s22
-rw-r--r--data/field_weather.s2
-rw-r--r--data/graphics.s2
-rw-r--r--data/strings.s8
-rw-r--r--graphics/battle_anims/unk_83E4874.binbin0 -> 4096 bytes
-rw-r--r--graphics/battle_anims/unk_83E4874.pngbin0 -> 286 bytes
-rw-r--r--graphics/misc/evolution_sprite_841EEA4.pngbin0 -> 167 bytes
-rw-r--r--graphics/unknown/unk_841EF48.pngbin0 -> 230 bytes
-rw-r--r--include/battle.h2
-rw-r--r--include/battle_anim.h118
-rw-r--r--include/battle_controllers.h17
-rw-r--r--include/dynamic_placeholder_text_util.h6
-rw-r--r--include/evolution_graphics.h2
-rw-r--r--include/evolution_scene.h1
-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.h25
-rw-r--r--include/unk_8159F40.h10
-rw-r--r--ld_script.txt25
-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/dark.c2
-rw-r--r--src/electric.c1272
-rw-r--r--src/evolution_graphics.c638
-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/new_menu_helpers.c50
-rw-r--r--src/option_menu.c440
-rw-r--r--src/poison.c298
-rw-r--r--src/pokemon.c376
-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
-rw-r--r--sym_ewram.txt3
67 files changed, 10808 insertions, 21394 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/clear_save_data_screen.s b/asm/clear_save_data_screen.s
index 5d9d2ac03..367f12814 100644
--- a/asm/clear_save_data_screen.s
+++ b/asm/clear_save_data_screen.s
@@ -466,9 +466,4 @@ _080F5944: .4byte gUnknown_841EE64
_080F5948: .4byte gUnknown_841EE68
thumb_func_end sub_80F5820
- thumb_func_start nullsub_85
-nullsub_85: @ 80F594C
- bx lr
- thumb_func_end nullsub_85
-
.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/evolution_graphics.s b/asm/evolution_graphics.s
deleted file mode 100644
index 64edbdf7a..000000000
--- a/asm/evolution_graphics.s
+++ /dev/null
@@ -1,1825 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start SetEvoSparklesMatrices
-SetEvoSparklesMatrices: @ 80F5950
- push {r4,r5,lr}
- sub sp, 0x4
- movs r4, 0
- ldr r5, _080F5984 @ =gUnknown_841EF10
-_080F5958:
- adds r0, r4, 0
- adds r0, 0x14
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r4, 1
- adds r1, r5
- ldrh r1, [r1]
- str r1, [sp]
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0xB
- bls _080F5958
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5984: .4byte gUnknown_841EF10
- thumb_func_end SetEvoSparklesMatrices
-
- thumb_func_start SpriteCB_PreEvoSparkleSet1
-SpriteCB_PreEvoSparkleSet1: @ 80F5988
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- cmp r0, 0x8
- ble _080F5A36
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- adds r1, r0, 0
- muls r1, r0
- adds r0, r1, 0
- movs r1, 0x50
- bl __divsi3
- movs r1, 0x58
- subs r1, r0
- strh r1, [r4, 0x22]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0
- bge _080F59C2
- adds r0, 0x3
-_080F59C2:
- asrs r0, 2
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Cos
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x3A]
- adds r0, 0x4
- strh r0, [r4, 0x3A]
- ldrh r1, [r4, 0x3C]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F59EC
- ldrh r0, [r4, 0x38]
- subs r0, 0x1
- strh r0, [r4, 0x38]
-_080F59EC:
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- movs r1, 0x26
- ldrsh r0, [r4, r1]
- cmp r0, 0
- ble _080F5A02
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1
- b _080F5A08
-_080F5A02:
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x14
-_080F5A08:
- strb r0, [r1]
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bge _080F5A14
- adds r0, 0x3
-_080F5A14:
- asrs r0, 2
- adds r0, 0x14
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1F
- bls _080F5A22
- movs r2, 0x1F
-_080F5A22:
- movs r0, 0x1F
- ands r2, r0
- lsls r2, 1
- ldrb r1, [r4, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x3]
- b _080F5A3C
-_080F5A36:
- adds r0, r4, 0
- bl DestroySprite
-_080F5A3C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_PreEvoSparkleSet1
-
- thumb_func_start CreatePreEvoSparkleSet1
-CreatePreEvoSparkleSet1: @ 80F5A44
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080F5A94 @ =gUnknown_841EEF8
- movs r1, 0x78
- movs r2, 0x58
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080F5A8E
- ldr r4, _080F5A98 @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r2, r3, r4
- movs r1, 0
- movs r0, 0x30
- strh r0, [r2, 0x38]
- strh r5, [r2, 0x3A]
- strh r1, [r2, 0x3C]
- ldrb r1, [r2, 0x1]
- subs r0, 0x34
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r2, 0x3]
- movs r1, 0x3E
- orrs r0, r1
- strb r0, [r2, 0x3]
- adds r4, 0x1C
- adds r3, r4
- ldr r0, _080F5A9C @ =SpriteCB_PreEvoSparkleSet1
- str r0, [r3]
-_080F5A8E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5A94: .4byte gUnknown_841EEF8
-_080F5A98: .4byte gSprites
-_080F5A9C: .4byte SpriteCB_PreEvoSparkleSet1
- thumb_func_end CreatePreEvoSparkleSet1
-
- thumb_func_start SpriteCB_PreEvoSparkleSet2
-SpriteCB_PreEvoSparkleSet2: @ 80F5AA0
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- cmp r0, 0x57
- bgt _080F5B06
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- adds r1, r0, 0
- muls r1, r0
- adds r0, r1, 0
- movs r1, 0x5
- bl __divsi3
- adds r0, 0x8
- strh r0, [r4, 0x22]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0
- bge _080F5AD8
- adds r0, 0x3
-_080F5AD8:
- asrs r0, 2
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Cos
- strh r0, [r4, 0x24]
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- lsls r0, 26
- lsrs r0, 24
- movs r1, 0x28
- bl Sin
- adds r0, 0x8
- strh r0, [r4, 0x38]
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- b _080F5B0C
-_080F5B06:
- adds r0, r4, 0
- bl DestroySprite
-_080F5B0C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_PreEvoSparkleSet2
-
- thumb_func_start CreatePreEvoSparkleSet2
-CreatePreEvoSparkleSet2: @ 80F5B14
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080F5B70 @ =gUnknown_841EEF8
- movs r1, 0x78
- movs r2, 0x8
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080F5B6A
- ldr r4, _080F5B74 @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r2, r3, r4
- movs r1, 0
- movs r0, 0x8
- strh r0, [r2, 0x38]
- strh r5, [r2, 0x3A]
- strh r1, [r2, 0x3C]
- ldrb r1, [r2, 0x1]
- subs r0, 0xC
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r1, [r2, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- movs r1, 0x32
- orrs r0, r1
- strb r0, [r2, 0x3]
- adds r2, 0x43
- movs r0, 0x1
- strb r0, [r2]
- adds r4, 0x1C
- adds r3, r4
- ldr r0, _080F5B78 @ =SpriteCB_PreEvoSparkleSet2
- str r0, [r3]
-_080F5B6A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5B70: .4byte gUnknown_841EEF8
-_080F5B74: .4byte gSprites
-_080F5B78: .4byte SpriteCB_PreEvoSparkleSet2
- thumb_func_end CreatePreEvoSparkleSet2
-
- thumb_func_start SpriteCB_PostEvoSparkleSet1
-SpriteCB_PostEvoSparkleSet1: @ 80F5B7C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- cmp r0, 0x8
- ble _080F5BB8
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Cos
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x38]
- ldrh r1, [r4, 0x34]
- subs r0, r1
- strh r0, [r4, 0x38]
- ldrh r0, [r4, 0x3A]
- adds r0, 0x4
- strh r0, [r4, 0x3A]
- b _080F5BBE
-_080F5BB8:
- adds r0, r4, 0
- bl DestroySprite
-_080F5BBE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_PostEvoSparkleSet1
-
- thumb_func_start CreatePostEvoSparkleSet1
-CreatePostEvoSparkleSet1: @ 80F5BC4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, _080F5C20 @ =gUnknown_841EEF8
- movs r1, 0x78
- movs r2, 0x38
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080F5C1A
- ldr r4, _080F5C24 @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r2, r3, r4
- movs r1, 0
- strh r5, [r2, 0x34]
- movs r0, 0x78
- strh r0, [r2, 0x38]
- strh r6, [r2, 0x3A]
- strh r1, [r2, 0x3C]
- ldrb r1, [r2, 0x1]
- subs r0, 0x7C
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r2, 0x3]
- movs r1, 0x3E
- orrs r0, r1
- strb r0, [r2, 0x3]
- adds r2, 0x43
- movs r0, 0x1
- strb r0, [r2]
- adds r4, 0x1C
- adds r3, r4
- ldr r0, _080F5C28 @ =SpriteCB_PostEvoSparkleSet1
- str r0, [r3]
-_080F5C1A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5C20: .4byte gUnknown_841EEF8
-_080F5C24: .4byte gSprites
-_080F5C28: .4byte SpriteCB_PostEvoSparkleSet1
- thumb_func_end CreatePostEvoSparkleSet1
-
- thumb_func_start SpriteCB_PostEvoSparkleSet2
-SpriteCB_PostEvoSparkleSet2: @ 80F5C2C
- push {r4,r5,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x3C]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- bne _080F5C40
- ldrh r0, [r4, 0x22]
- adds r0, 0x1
- strh r0, [r4, 0x22]
-_080F5C40:
- ldrh r1, [r4, 0x3A]
- movs r2, 0x3A
- ldrsh r0, [r4, r2]
- cmp r0, 0x7F
- bgt _080F5CF0
- lsls r0, r1, 24
- lsrs r0, 24
- movs r5, 0x38
- ldrsh r1, [r4, r5]
- bl Sin
- negs r0, r0
- strh r0, [r4, 0x26]
- movs r0, 0x34
- ldrsh r1, [r4, r0]
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- muls r0, r1
- movs r1, 0x3
- bl __divsi3
- adds r0, 0x78
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x3A]
- adds r3, r0, 0x1
- strh r3, [r4, 0x3A]
- movs r5, 0x3A
- ldrsh r1, [r4, r5]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- cmp r0, 0
- bge _080F5C84
- adds r0, 0x7F
-_080F5C84:
- asrs r0, 7
- movs r1, 0x1F
- subs r1, r0
- lsls r1, 24
- lsrs r2, r1, 24
- lsls r0, r3, 16
- asrs r0, 16
- cmp r0, 0x40
- ble _080F5CA0
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1
- strb r0, [r1]
- b _080F5CD0
-_080F5CA0:
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x14
- strb r0, [r1]
- ldrh r1, [r4, 0x3A]
- movs r5, 0x3A
- ldrsh r0, [r4, r5]
- cmp r0, 0x70
- ble _080F5CD0
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F5CD0
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
-_080F5CD0:
- cmp r2, 0x13
- bhi _080F5CD6
- movs r2, 0x14
-_080F5CD6:
- movs r0, 0x1F
- ands r2, r0
- lsls r2, 1
- ldrb r1, [r4, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x3]
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- b _080F5CF6
-_080F5CF0:
- adds r0, r4, 0
- bl DestroySprite
-_080F5CF6:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_PostEvoSparkleSet2
-
- thumb_func_start CreatePostEvoSparkleSet2
-CreatePostEvoSparkleSet2: @ 80F5CFC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- ldr r0, _080F5D78 @ =gUnknown_841EEF8
- movs r1, 0x78
- movs r2, 0x38
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x40
- beq _080F5D6C
- bl Random
- ldr r6, _080F5D7C @ =gSprites
- lsls r5, r4, 4
- adds r5, r4
- lsls r5, 2
- adds r4, r5, r6
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x7
- bl __umodsi3
- movs r1, 0x3
- subs r1, r0
- movs r0, 0
- mov r8, r0
- strh r1, [r4, 0x34]
- bl Random
- movs r1, 0x3F
- ands r1, r0
- adds r1, 0x30
- strh r1, [r4, 0x38]
- mov r0, r8
- strh r0, [r4, 0x3C]
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x3]
- movs r1, 0x3E
- orrs r0, r1
- strb r0, [r4, 0x3]
- adds r4, 0x43
- movs r0, 0x14
- strb r0, [r4]
- adds r6, 0x1C
- adds r5, r6
- ldr r0, _080F5D80 @ =SpriteCB_PostEvoSparkleSet2
- str r0, [r5]
-_080F5D6C:
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5D78: .4byte gUnknown_841EEF8
-_080F5D7C: .4byte gSprites
-_080F5D80: .4byte SpriteCB_PostEvoSparkleSet2
- thumb_func_end CreatePostEvoSparkleSet2
-
- thumb_func_start LoadEvoSparkleSpriteAndPal
-LoadEvoSparkleSpriteAndPal: @ 80F5D84
- push {lr}
- ldr r0, _080F5D98 @ =gUnknown_841EEC4
- bl LoadCompressedSpriteSheetUsingHeap
- ldr r0, _080F5D9C @ =gUnknown_841EED4
- bl LoadSpritePalettes
- pop {r0}
- bx r0
- .align 2, 0
-_080F5D98: .4byte gUnknown_841EEC4
-_080F5D9C: .4byte gUnknown_841EED4
- thumb_func_end LoadEvoSparkleSpriteAndPal
-
- thumb_func_start LaunchTask_PreEvoSparklesSet1
-LaunchTask_PreEvoSparklesSet1: @ 80F5DA0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r0, _080F5DC8 @ =sub_80F5DD0
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080F5DCC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xA]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080F5DC8: .4byte sub_80F5DD0
-_080F5DCC: .4byte gTasks
- thumb_func_end LaunchTask_PreEvoSparklesSet1
-
- thumb_func_start sub_80F5DD0
-sub_80F5DD0: @ 80F5DD0
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl SetEvoSparklesMatrices
- ldr r0, _080F5E14 @ =gTasks
- lsls r5, r4, 2
- adds r5, r4
- lsls r5, 3
- adds r5, r0
- movs r0, 0
- strh r0, [r5, 0x26]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x3
- lsls r0, r1
- ldr r1, _080F5E18 @ =0x00007fff
- str r1, [sp]
- movs r1, 0xA
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _080F5E1C @ =EvoTask_CreatePreEvoSparkleSet1
- str r0, [r5]
- movs r0, 0x85
- bl PlaySE
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5E14: .4byte gTasks
-_080F5E18: .4byte 0x00007fff
-_080F5E1C: .4byte EvoTask_CreatePreEvoSparkleSet1
- thumb_func_end sub_80F5DD0
-
- thumb_func_start EvoTask_CreatePreEvoSparkleSet1
-EvoTask_CreatePreEvoSparkleSet1: @ 80F5E20
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080F5E78 @ =gTasks
- lsls r3, r5, 2
- adds r0, r3, r5
- lsls r0, 3
- adds r1, r0, r1
- ldrh r2, [r1, 0x26]
- movs r4, 0x26
- ldrsh r0, [r1, r4]
- cmp r0, 0x3F
- bgt _080F5E7C
- movs r0, 0x7
- ands r0, r2
- adds r7, r3, 0
- cmp r0, 0
- bne _080F5E66
- movs r4, 0
- adds r6, r1, 0
-_080F5E48:
- ldrh r1, [r6, 0x26]
- movs r0, 0x78
- ands r0, r1
- lsls r0, 1
- lsls r1, r4, 6
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl CreatePreEvoSparkleSet1
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _080F5E48
-_080F5E66:
- ldr r0, _080F5E78 @ =gTasks
- adds r1, r7, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _080F5E84
- .align 2, 0
-_080F5E78: .4byte gTasks
-_080F5E7C:
- movs r0, 0x60
- strh r0, [r1, 0x26]
- ldr r0, _080F5E8C @ =EvoTask_WaitForPre1SparklesToGoUp
- str r0, [r1]
-_080F5E84:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5E8C: .4byte EvoTask_WaitForPre1SparklesToGoUp
- thumb_func_end EvoTask_CreatePreEvoSparkleSet1
-
- thumb_func_start EvoTask_WaitForPre1SparklesToGoUp
-EvoTask_WaitForPre1SparklesToGoUp: @ 80F5E90
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _080F5EB0 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0, r1
- ldrh r3, [r1, 0x26]
- movs r4, 0x26
- ldrsh r0, [r1, r4]
- cmp r0, 0
- beq _080F5EB4
- subs r0, r3, 0x1
- strh r0, [r1, 0x26]
- b _080F5EBA
- .align 2, 0
-_080F5EB0: .4byte gTasks
-_080F5EB4:
- adds r0, r2, 0
- bl DestroyTask
-_080F5EBA:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end EvoTask_WaitForPre1SparklesToGoUp
-
- thumb_func_start sub_80F5EC0
-sub_80F5EC0: @ 80F5EC0
- push {lr}
- ldr r0, _080F5ED4 @ =sub_80F5ED8
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_080F5ED4: .4byte sub_80F5ED8
- thumb_func_end sub_80F5EC0
-
- thumb_func_start sub_80F5ED8
-sub_80F5ED8: @ 80F5ED8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl SetEvoSparklesMatrices
- ldr r1, _080F5F04 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x26]
- ldr r1, _080F5F08 @ =EvoTask_CreatePreEvoSparklesSet2
- str r1, [r0]
- movs r0, 0xB0
- bl PlaySE
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5F04: .4byte gTasks
-_080F5F08: .4byte EvoTask_CreatePreEvoSparklesSet2
- thumb_func_end sub_80F5ED8
-
- thumb_func_start EvoTask_CreatePreEvoSparklesSet2
-EvoTask_CreatePreEvoSparklesSet2: @ 80F5F0C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080F5F50 @ =gTasks
- lsls r2, r5, 2
- adds r0, r2, r5
- lsls r0, 3
- adds r1, r0, r1
- movs r3, 0x26
- ldrsh r0, [r1, r3]
- cmp r0, 0x5F
- bgt _080F5F54
- adds r6, r2, 0
- cmp r0, 0x5
- bgt _080F5F3E
- movs r4, 0
-_080F5F2C:
- lsls r0, r4, 28
- lsrs r0, 24
- bl CreatePreEvoSparkleSet2
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x8
- bls _080F5F2C
-_080F5F3E:
- ldr r0, _080F5F50 @ =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _080F5F58
- .align 2, 0
-_080F5F50: .4byte gTasks
-_080F5F54:
- ldr r0, _080F5F60 @ =sub_80F5F64
- str r0, [r1]
-_080F5F58:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5F60: .4byte sub_80F5F64
- thumb_func_end EvoTask_CreatePreEvoSparklesSet2
-
- thumb_func_start sub_80F5F64
-sub_80F5F64: @ 80F5F64
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- pop {r0}
- bx r0
- thumb_func_end sub_80F5F64
-
- thumb_func_start sub_80F5F74
-sub_80F5F74: @ 80F5F74
- push {lr}
- ldr r0, _080F5F88 @ =sub_80F5F8C
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_080F5F88: .4byte sub_80F5F8C
- thumb_func_end sub_80F5F74
-
- thumb_func_start sub_80F5F8C
-sub_80F5F8C: @ 80F5F8C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl SetEvoSparklesMatrices
- ldr r1, _080F5FB8 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x26]
- ldr r1, _080F5FBC @ =EvoTask_CreatePostEvoSparklesSet1
- str r1, [r0]
- movs r0, 0x5F
- bl PlaySE
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5FB8: .4byte gTasks
-_080F5FBC: .4byte EvoTask_CreatePostEvoSparklesSet1
- thumb_func_end sub_80F5F8C
-
- thumb_func_start EvoTask_CreatePostEvoSparklesSet1
-EvoTask_CreatePostEvoSparklesSet1: @ 80F5FC0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080F602C @ =gTasks
- lsls r2, r5, 2
- adds r0, r2, r5
- lsls r0, 3
- adds r1, r0, r1
- movs r3, 0x26
- ldrsh r0, [r1, r3]
- cmp r0, 0x2F
- bgt _080F6030
- adds r6, r2, 0
- cmp r0, 0
- bne _080F5FF4
- movs r4, 0
-_080F5FE0:
- lsls r0, r4, 28
- lsrs r0, 24
- movs r1, 0x4
- bl CreatePostEvoSparkleSet1
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _080F5FE0
-_080F5FF4:
- ldr r0, _080F602C @ =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r0
- movs r2, 0x26
- ldrsh r0, [r1, r2]
- cmp r0, 0x20
- bne _080F601A
- movs r4, 0
-_080F6006:
- lsls r0, r4, 28
- lsrs r0, 24
- movs r1, 0x8
- bl CreatePostEvoSparkleSet1
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _080F6006
-_080F601A:
- ldr r0, _080F602C @ =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _080F6034
- .align 2, 0
-_080F602C: .4byte gTasks
-_080F6030:
- ldr r0, _080F603C @ =sub_80F6040
- str r0, [r1]
-_080F6034:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F603C: .4byte sub_80F6040
- thumb_func_end EvoTask_CreatePostEvoSparklesSet1
-
- thumb_func_start sub_80F6040
-sub_80F6040: @ 80F6040
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- pop {r0}
- bx r0
- thumb_func_end sub_80F6040
-
- thumb_func_start LaunchTask_PostEvoSparklesSet2AndFlash
-LaunchTask_PostEvoSparklesSet2AndFlash: @ 80F6050
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r0, _080F6078 @ =sub_80F6080
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080F607C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xC]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080F6078: .4byte sub_80F6080
-_080F607C: .4byte gTasks
- thumb_func_end LaunchTask_PostEvoSparklesSet2AndFlash
-
- thumb_func_start sub_80F6080
-sub_80F6080: @ 80F6080
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl SetEvoSparklesMatrices
- ldr r0, _080F60CC @ =gTasks
- lsls r5, r4, 2
- adds r5, r4
- lsls r5, 3
- adds r5, r0
- movs r0, 0
- strh r0, [r5, 0x26]
- bl sub_80D0474
- ldr r0, _080F60D0 @ =gPlttBufferFaded + 0x40
- ldr r1, _080F60D4 @ =gPlttBufferUnfaded + 0x40
- movs r2, 0x30
- bl CpuSet
- ldr r0, _080F60D8 @ =0xfff90f1c
- ldr r1, _080F60DC @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _080F60E0 @ =sub_80F60E4
- str r0, [r5]
- movs r0, 0xC3
- bl PlaySE
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F60CC: .4byte gTasks
-_080F60D0: .4byte gPlttBufferFaded + 0x40
-_080F60D4: .4byte gPlttBufferUnfaded + 0x40
-_080F60D8: .4byte 0xfff90f1c
-_080F60DC: .4byte 0x00007fff
-_080F60E0: .4byte sub_80F60E4
- thumb_func_end sub_80F6080
-
- thumb_func_start sub_80F60E4
-sub_80F60E4: @ 80F60E4
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _080F611C @ =gTasks
- lsls r5, r6, 2
- adds r0, r5, r6
- lsls r0, 3
- adds r1, r0, r1
- movs r0, 0x26
- ldrsh r2, [r1, r0]
- cmp r2, 0x7F
- bgt _080F6160
- adds r0, r2, 0
- cmp r0, 0
- beq _080F6120
- cmp r0, 0x20
- beq _080F6134
- cmp r2, 0x31
- bgt _080F6144
- bl Random
- movs r1, 0x7
- ands r0, r1
- bl CreatePostEvoSparkleSet2
- b _080F6144
- .align 2, 0
-_080F611C: .4byte gTasks
-_080F6120:
- movs r4, 0
-_080F6122:
- adds r0, r4, 0
- bl CreatePostEvoSparkleSet2
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _080F6122
- b _080F6144
-_080F6134:
- ldr r0, _080F6154 @ =0xffff0f1c
- ldr r1, _080F6158 @ =0x00007fff
- str r1, [sp]
- movs r1, 0x10
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_080F6144:
- ldr r0, _080F615C @ =gTasks
- adds r1, r5, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _080F6164
- .align 2, 0
-_080F6154: .4byte 0xffff0f1c
-_080F6158: .4byte 0x00007fff
-_080F615C: .4byte gTasks
-_080F6160:
- ldr r0, _080F616C @ =sub_80F6170
- str r0, [r1]
-_080F6164:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F616C: .4byte sub_80F6170
- thumb_func_end sub_80F60E4
-
- thumb_func_start sub_80F6170
-sub_80F6170: @ 80F6170
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _080F618C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080F6188
- adds r0, r2, 0
- bl DestroyTask
-_080F6188:
- pop {r0}
- bx r0
- .align 2, 0
-_080F618C: .4byte gPaletteFade
- thumb_func_end sub_80F6170
-
- thumb_func_start sub_80F6190
-sub_80F6190: @ 80F6190
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r0, _080F61B8 @ =sub_80F61C0
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080F61BC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xC]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080F61B8: .4byte sub_80F61C0
-_080F61BC: .4byte gTasks
- thumb_func_end sub_80F6190
-
- thumb_func_start sub_80F61C0
-sub_80F61C0: @ 80F61C0
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl SetEvoSparklesMatrices
- ldr r0, _080F620C @ =gTasks
- lsls r5, r4, 2
- adds r5, r4
- lsls r5, 3
- adds r5, r0
- movs r0, 0
- strh r0, [r5, 0x26]
- bl sub_80D0474
- ldr r0, _080F6210 @ =gPlttBufferFaded + 0x40
- ldr r1, _080F6214 @ =gPlttBufferUnfaded + 0x40
- movs r2, 0x30
- bl CpuSet
- ldr r0, _080F6218 @ =0xfff90f00
- ldr r1, _080F621C @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _080F6220 @ =sub_80F6224
- str r0, [r5]
- movs r0, 0xC3
- bl PlaySE
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F620C: .4byte gTasks
-_080F6210: .4byte gPlttBufferFaded + 0x40
-_080F6214: .4byte gPlttBufferUnfaded + 0x40
-_080F6218: .4byte 0xfff90f00
-_080F621C: .4byte 0x00007fff
-_080F6220: .4byte sub_80F6224
- thumb_func_end sub_80F61C0
-
- thumb_func_start sub_80F6224
-sub_80F6224: @ 80F6224
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _080F625C @ =gTasks
- lsls r5, r6, 2
- adds r0, r5, r6
- lsls r0, 3
- adds r1, r0, r1
- movs r0, 0x26
- ldrsh r2, [r1, r0]
- cmp r2, 0x7F
- bgt _080F62A0
- adds r0, r2, 0
- cmp r0, 0
- beq _080F6260
- cmp r0, 0x20
- beq _080F6274
- cmp r2, 0x31
- bgt _080F6284
- bl Random
- movs r1, 0x7
- ands r0, r1
- bl CreatePostEvoSparkleSet2
- b _080F6284
- .align 2, 0
-_080F625C: .4byte gTasks
-_080F6260:
- movs r4, 0
-_080F6262:
- adds r0, r4, 0
- bl CreatePostEvoSparkleSet2
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _080F6262
- b _080F6284
-_080F6274:
- ldr r0, _080F6294 @ =0xffff0f00
- ldr r1, _080F6298 @ =0x00007fff
- str r1, [sp]
- movs r1, 0x10
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_080F6284:
- ldr r0, _080F629C @ =gTasks
- adds r1, r5, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _080F62A4
- .align 2, 0
-_080F6294: .4byte 0xffff0f00
-_080F6298: .4byte 0x00007fff
-_080F629C: .4byte gTasks
-_080F62A0:
- ldr r0, _080F62AC @ =sub_80F6170
- str r0, [r1]
-_080F62A4:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F62AC: .4byte sub_80F6170
- thumb_func_end sub_80F6224
-
- thumb_func_start nullsub_86
-nullsub_86: @ 80F62B0
- bx lr
- thumb_func_end nullsub_86
-
- thumb_func_start sub_80F62B4
-sub_80F62B4: @ 80F62B4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x28
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- movs r1, 0
- ldr r3, _080F63E8 @ =sub_80F6400
- ldr r2, _080F63EC @ =0x00007fff
-_080F62CE:
- lsls r0, r1, 1
- add r0, sp
- adds r0, 0x4
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0xF
- bls _080F62CE
- adds r0, r3, 0
- movs r1, 0
- bl CreateTask
- mov r8, r0
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, _080F63F0 @ =gTasks
- mov r1, r8
- lsls r6, r1, 2
- add r6, r8
- lsls r6, 3
- adds r6, r0
- strh r5, [r6, 0xA]
- strh r7, [r6, 0xC]
- movs r1, 0x80
- lsls r1, 1
- strh r1, [r6, 0xE]
- movs r0, 0x10
- strh r0, [r6, 0x10]
- movs r4, 0x80
- lsls r4, 9
- str r1, [sp]
- movs r0, 0x1E
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- movs r0, 0x10
- ldrsh r1, [r6, r0]
- adds r0, r4, 0
- bl __divsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- movs r0, 0x1F
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- ldr r1, _080F63F4 @ =gSprites
- mov r9, r1
- lsls r2, r5, 4
- adds r2, r5
- lsls r2, 2
- mov r3, r9
- adds r3, 0x1C
- adds r0, r2, r3
- ldr r1, _080F63F8 @ =nullsub_86
- str r1, [r0]
- add r2, r9
- ldrb r1, [r2, 0x1]
- movs r4, 0x4
- negs r4, r4
- adds r0, r4, 0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r1, [r2, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- movs r1, 0x3C
- orrs r0, r1
- strb r0, [r2, 0x3]
- movs r0, 0x3E
- adds r0, r2
- mov r10, r0
- ldrb r1, [r0]
- movs r5, 0x5
- negs r5, r5
- adds r0, r5, 0
- ands r0, r1
- mov r1, r10
- strb r0, [r1]
- ldrb r1, [r2, 0x5]
- lsrs r1, 4
- lsls r1, 5
- ldr r0, _080F63FC @ =gPlttBufferFaded + 0x200
- mov r10, r0
- add r1, r10
- add r0, sp, 0x4
- movs r2, 0x10
- str r3, [sp, 0x24]
- bl CpuSet
- lsls r1, r7, 4
- adds r1, r7
- lsls r1, 2
- ldr r3, [sp, 0x24]
- adds r3, r1, r3
- ldr r0, _080F63F8 @ =nullsub_86
- str r0, [r3]
- add r1, r9
- ldrb r0, [r1, 0x1]
- ands r4, r0
- movs r0, 0x1
- orrs r4, r0
- strb r4, [r1, 0x1]
- ldrb r0, [r1, 0x3]
- movs r2, 0x3E
- orrs r0, r2
- strb r0, [r1, 0x3]
- adds r2, r1, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- ands r5, r0
- strb r5, [r2]
- ldrb r1, [r1, 0x5]
- lsrs r1, 4
- lsls r1, 5
- add r1, r10
- add r0, sp, 0x4
- movs r2, 0x10
- bl CpuSet
- movs r1, 0
- strh r1, [r6, 0x18]
- mov r0, r8
- add sp, 0x28
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080F63E8: .4byte sub_80F6400
-_080F63EC: .4byte 0x00007fff
-_080F63F0: .4byte gTasks
-_080F63F4: .4byte gSprites
-_080F63F8: .4byte nullsub_86
-_080F63FC: .4byte gPlttBufferFaded + 0x200
- thumb_func_end sub_80F62B4
-
- thumb_func_start sub_80F6400
-sub_80F6400: @ 80F6400
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080F641C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0x12]
- movs r0, 0x8
- strh r0, [r1, 0x14]
- ldr r0, _080F6420 @ =sub_80F6424
- str r0, [r1]
- bx lr
- .align 2, 0
-_080F641C: .4byte gTasks
-_080F6420: .4byte sub_80F6424
- thumb_func_end sub_80F6400
-
- thumb_func_start sub_80F6424
-sub_80F6424: @ 80F6424
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r1, _080F6444 @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r2, r0, r1
- movs r1, 0x18
- ldrsh r0, [r2, r1]
- cmp r0, 0
- beq _080F6448
- adds r0, r3, 0
- bl PreEvoVisible_PostEvoInvisible_KillTask
- b _080F646A
- .align 2, 0
-_080F6444: .4byte gTasks
-_080F6448:
- ldrh r1, [r2, 0x14]
- movs r4, 0x14
- ldrsh r0, [r2, r4]
- cmp r0, 0x80
- bne _080F645A
- adds r0, r3, 0
- bl PreEvoInvisible_PostEvoVisible_KillTask
- b _080F646A
-_080F645A:
- adds r0, r1, 0x2
- strh r0, [r2, 0x14]
- ldrh r0, [r2, 0x12]
- movs r1, 0x1
- eors r0, r1
- strh r0, [r2, 0x12]
- ldr r0, _080F6470 @ =sub_80F6474
- str r0, [r2]
-_080F646A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F6470: .4byte sub_80F6474
- thumb_func_end sub_80F6424
-
- thumb_func_start sub_80F6474
-sub_80F6474: @ 80F6474
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _080F6498 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r2, r0, r1
- movs r3, 0x18
- ldrsh r0, [r2, r3]
- adds r5, r1, 0
- cmp r0, 0
- beq _080F64A0
- ldr r0, _080F649C @ =PreEvoVisible_PostEvoInvisible_KillTask
- str r0, [r2]
- b _080F6584
- .align 2, 0
-_080F6498: .4byte gTasks
-_080F649C: .4byte PreEvoVisible_PostEvoInvisible_KillTask
-_080F64A0:
- movs r6, 0
- movs r7, 0x12
- ldrsh r0, [r2, r7]
- cmp r0, 0
- bne _080F64F0
- movs r0, 0xE
- ldrsh r1, [r2, r0]
- movs r3, 0x14
- ldrsh r0, [r2, r3]
- movs r3, 0x80
- lsls r3, 1
- subs r0, r3, r0
- cmp r1, r0
- bge _080F64C6
- ldrh r0, [r2, 0x14]
- ldrh r7, [r2, 0xE]
- adds r0, r7
- strh r0, [r2, 0xE]
- b _080F64CA
-_080F64C6:
- strh r3, [r2, 0xE]
- movs r6, 0x1
-_080F64CA:
- lsls r2, r4, 2
- adds r0, r2, r4
- lsls r0, 3
- adds r3, r0, r5
- movs r0, 0x10
- ldrsh r1, [r3, r0]
- movs r7, 0x14
- ldrsh r0, [r3, r7]
- adds r0, 0x10
- cmp r1, r0
- ble _080F64EA
- ldrh r0, [r3, 0x10]
- ldrh r1, [r3, 0x14]
- subs r0, r1
- strh r0, [r3, 0x10]
- b _080F653A
-_080F64EA:
- movs r0, 0x10
- strh r0, [r3, 0x10]
- b _080F6534
-_080F64F0:
- movs r0, 0x10
- ldrsh r1, [r2, r0]
- movs r3, 0x14
- ldrsh r0, [r2, r3]
- movs r3, 0x80
- lsls r3, 1
- subs r0, r3, r0
- cmp r1, r0
- bge _080F650C
- ldrh r0, [r2, 0x14]
- ldrh r7, [r2, 0x10]
- adds r0, r7
- strh r0, [r2, 0x10]
- b _080F6510
-_080F650C:
- strh r3, [r2, 0x10]
- movs r6, 0x1
-_080F6510:
- lsls r2, r4, 2
- adds r0, r2, r4
- lsls r0, 3
- adds r3, r0, r5
- movs r0, 0xE
- ldrsh r1, [r3, r0]
- movs r7, 0x14
- ldrsh r0, [r3, r7]
- adds r0, 0x10
- cmp r1, r0
- ble _080F6530
- ldrh r0, [r3, 0xE]
- ldrh r1, [r3, 0x14]
- subs r0, r1
- strh r0, [r3, 0xE]
- b _080F653A
-_080F6530:
- movs r0, 0x10
- strh r0, [r3, 0xE]
-_080F6534:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_080F653A:
- adds r0, r2, r4
- lsls r0, 3
- adds r5, r0, r5
- movs r0, 0xE
- ldrsh r1, [r5, r0]
- movs r4, 0x80
- lsls r4, 9
- adds r0, r4, 0
- bl __divsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- movs r0, 0x1E
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- movs r3, 0x10
- ldrsh r1, [r5, r3]
- adds r0, r4, 0
- bl __divsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- movs r0, 0x1F
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- cmp r6, 0x2
- bne _080F6584
- ldr r0, _080F658C @ =sub_80F6424
- str r0, [r5]
-_080F6584:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F658C: .4byte sub_80F6424
- thumb_func_end sub_80F6474
-
- thumb_func_start PreEvoInvisible_PostEvoVisible_KillTask
-PreEvoInvisible_PostEvoVisible_KillTask: @ 80F6590
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080F6638 @ =gSprites
- mov r8, r1
- ldr r1, _080F663C @ =gTasks
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- adds r4, r1
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- add r2, r8
- ldrb r3, [r2, 0x1]
- movs r6, 0x4
- negs r6, r6
- adds r1, r6, 0
- ands r1, r3
- strb r1, [r2, 0x1]
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- add r2, r8
- ldrb r3, [r2, 0x3]
- movs r5, 0x3F
- negs r5, r5
- adds r1, r5, 0
- ands r1, r3
- strb r1, [r2, 0x3]
- movs r1, 0xA
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r3, 0x4
- orrs r2, r3
- strb r2, [r1]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- ldrb r2, [r1, 0x1]
- ands r6, r2
- strb r6, [r1, 0x1]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- ldrb r2, [r1, 0x3]
- ands r5, r2
- strb r5, [r1, 0x3]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- adds r1, 0x3E
- ldrb r3, [r1]
- movs r2, 0x5
- negs r2, r2
- ands r2, r3
- strb r2, [r1]
- bl DestroyTask
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F6638: .4byte gSprites
-_080F663C: .4byte gTasks
- thumb_func_end PreEvoInvisible_PostEvoVisible_KillTask
-
- thumb_func_start PreEvoVisible_PostEvoInvisible_KillTask
-PreEvoVisible_PostEvoInvisible_KillTask: @ 80F6640
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080F66E8 @ =gSprites
- mov r8, r1
- ldr r1, _080F66EC @ =gTasks
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- adds r4, r1
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- add r2, r8
- ldrb r3, [r2, 0x1]
- movs r6, 0x4
- negs r6, r6
- adds r1, r6, 0
- ands r1, r3
- strb r1, [r2, 0x1]
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- add r2, r8
- ldrb r3, [r2, 0x3]
- movs r5, 0x3F
- negs r5, r5
- adds r1, r5, 0
- ands r1, r3
- strb r1, [r2, 0x3]
- movs r1, 0xA
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- adds r1, 0x3E
- ldrb r3, [r1]
- movs r2, 0x5
- negs r2, r2
- ands r2, r3
- strb r2, [r1]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- ldrb r2, [r1, 0x1]
- ands r6, r2
- strb r6, [r1, 0x1]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- ldrb r2, [r1, 0x3]
- ands r5, r2
- strb r5, [r1, 0x3]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r3, 0x4
- orrs r2, r3
- strb r2, [r1]
- bl DestroyTask
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F66E8: .4byte gSprites
-_080F66EC: .4byte gTasks
- thumb_func_end PreEvoVisible_PostEvoInvisible_KillTask
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s
index dac85320e..efa6ccff7 100644
--- a/asm/evolution_scene.s
+++ b/asm/evolution_scene.s
@@ -1619,7 +1619,7 @@ _080CEBA6:
ldr r1, [r0]
movs r0, 0x1
strb r0, [r1, 0x3]
- bl sub_80F5EC0
+ bl LaunchTask_PreEvoSparklesSet2
strb r0, [r4, 0x2]
bl _080CF528
.align 2, 0
@@ -1641,7 +1641,7 @@ _080CEBE6:
ldr r1, [r0]
ldrb r0, [r1]
ldrb r1, [r1, 0x1]
- bl sub_80F62B4
+ bl LaunchTask_PrePostEvoMonSprites
strb r0, [r4, 0x2]
mov r0, r8
adds r1, r0, r7
@@ -1685,7 +1685,7 @@ _080CEC38:
_080CEC44: .4byte gUnknown_2039A20
_080CEC48: .4byte gBattleCommunication
_080CEC4C:
- bl sub_80F5F74
+ bl LaunchTask_PostEvoSparklesSet1
ldr r1, _080CEC60 @ =gBattleCommunication
strb r0, [r1, 0x2]
ldr r0, _080CEC64 @ =gTasks
@@ -2953,7 +2953,7 @@ _080CF752:
ldr r1, [r0]
movs r0, 0x1
strb r0, [r1, 0x3]
- bl sub_80F5EC0
+ bl LaunchTask_PreEvoSparklesSet2
strb r0, [r4, 0x2]
bl _080D003A
.align 2, 0
@@ -2975,7 +2975,7 @@ _080CF78E:
ldr r1, [r0]
ldrb r0, [r1]
ldrb r1, [r1, 0x1]
- bl sub_80F62B4
+ bl LaunchTask_PrePostEvoMonSprites
strb r0, [r4, 0x2]
adds r1, r7, r6
lsls r1, 3
@@ -3017,7 +3017,7 @@ _080CF7DC:
_080CF7E4: .4byte gUnknown_2039A20
_080CF7E8: .4byte gBattleCommunication
_080CF7EC:
- bl sub_80F5F74
+ bl LaunchTask_PostEvoSparklesSet1
ldr r1, _080CF800 @ =gBattleCommunication
strb r0, [r1, 0x2]
ldr r0, _080CF804 @ =gTasks
@@ -3045,7 +3045,7 @@ _080CF820:
lsls r4, 3
adds r4, r5
ldrh r0, [r4, 0xC]
- bl sub_80F6190
+ bl LaunchTask_PostEvoSparklesSet2AndFlash_Trade
mov r1, r8
strb r0, [r1, 0x2]
b _080CFA90
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/baserom.ips b/baserom.ips
index 1150e0779..21e4c79f1 100644
--- a/baserom.ips
+++ b/baserom.ips
Binary files differ
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..ff14e90a4 100644
--- a/data/battle_anim_effects_misc.s
+++ b/data/battle_anim_effects_misc.s
@@ -9,7 +9,7 @@
gUnknown_83E2964:: @ 83E2964
.byte 0x02, 0x04, 0x01, 0x03
-gUnknown_83E2968::
+gUnknown_83E2968:: @ 83E2968
obj_image_anim_frame 0x0000, 5
obj_image_anim_frame 0x0002, 5
obj_image_anim_frame 0x0004, 5
@@ -20,55 +20,55 @@ gUnknown_83E2968::
obj_image_anim_frame 0x000e, 5
obj_image_anim_jump 0x0000
-gUnknown_83E298C::
+gUnknown_83E298C:: @ 83E298C
.4byte gUnknown_83E2968
-gUnknown_83E2990::
+gUnknown_83E2990:: @ 83E2990
spr_template 10067, 10067, gOamData_83ACA08, gUnknown_83E298C, NULL, gDummySpriteAffineAnimTable, sub_80A22E8
-gUnknown_83E29A8::
+gUnknown_83E29A8:: @ 83E29A8
spr_template 10068, 10068, gOamData_83ACA08, gUnknown_83E298C, NULL, gDummySpriteAffineAnimTable, sub_80A22E8
-gUnknown_83E29C0::
+gUnknown_83E29C0:: @ 83E29C0
spr_template 10065, 10065, gOamData_83ACA08, gUnknown_83E298C, NULL, gDummySpriteAffineAnimTable, sub_80A22E8
-gAnimCmd_83E29D8::
+gAnimCmd_83E29D8:: @ 83E29D8
obj_image_anim_frame 0, 1
obj_image_anim_end
-gAnimCmd_83E29E0::
+gAnimCmd_83E29E0:: @ 83E29E0
obj_image_anim_frame 1, 1
obj_image_anim_end
-gAnimCmd_83E29E8::
+gAnimCmd_83E29E8:: @ 83E29E8
obj_image_anim_frame 2, 1
obj_image_anim_end
-gAnimCmd_83E29F0::
+gAnimCmd_83E29F0:: @ 83E29F0
obj_image_anim_frame 3, 1
obj_image_anim_end
-gAnimCmd_83E29F8::
+gAnimCmd_83E29F8:: @ 83E29F8
obj_image_anim_frame 4, 1
obj_image_anim_end
-gAnimCmd_83E2A00::
+gAnimCmd_83E2A00:: @ 83E2A00
obj_image_anim_frame 5, 1
obj_image_anim_end
-gAnimCmd_83E2A08::
+gAnimCmd_83E2A08:: @ 83E2A08
obj_image_anim_frame 6, 1
obj_image_anim_end
-gAnimCmd_83E2A10::
+gAnimCmd_83E2A10:: @ 83E2A10
obj_image_anim_frame 7, 1
obj_image_anim_end
-gAnimCmd_83E2A18::
+gAnimCmd_83E2A18:: @ 83E2A18
obj_image_anim_frame 8, 1
obj_image_anim_end
-gSpriteAnimTable_83E2A20::
+gSpriteAnimTable_83E2A20:: @ 83E2A20
.4byte gAnimCmd_83E29D8
.4byte gAnimCmd_83E29E0
.4byte gAnimCmd_83E29E8
@@ -77,710 +77,1792 @@ gSpriteAnimTable_83E2A20::
.4byte gAnimCmd_83E2A00
.4byte gAnimCmd_83E2A08
-gSpriteAnimTable_83E2A3C::
+gSpriteAnimTable_83E2A3C:: @ 83E2A3C
.4byte gAnimCmd_83E2A10
-gSpriteAnimTable_83E2A40::
+gSpriteAnimTable_83E2A40:: @ 83E2A40
.4byte gAnimCmd_83E2A18
-gAffineAnimCmd_83E2A44::
+gAffineAnimCmd_83E2A44:: @ 83E2A44
obj_rot_scal_anim_frame -5, -5, 0, 1
obj_rot_scal_anim_jump 0
-gSpriteAffineAnimTable_83E2A54::
+gSpriteAffineAnimTable_83E2A54:: @ 83E2A54
.4byte gAffineAnimCmd_83E2A44
-gUnknown_83E2A58::
+gUnknown_83E2A58:: @ 83E2A58
spr_template 10147, 10147, gOamData_83ACB50, gSpriteAnimTable_83E2A40, NULL, gSpriteAffineAnimTable_83E2A54, sub_80A2388
-gUnknown_83E2A70::
+gUnknown_83E2A70:: @ 83E2A70
spr_template 10147, 10147, gOamData_83AC9C8, gSpriteAnimTable_83E2A20, NULL, gDummySpriteAffineAnimTable, sub_80A23D8
gUnknown_83E2A88:: @ 83E2A88
spr_template 10147, 10147, gOamData_83AC9C8, gSpriteAnimTable_83E2A3C, NULL, gDummySpriteAffineAnimTable, sub_80A2430
-gSpriteTemplate_83E2AA0::
- .incbin "baserom.gba", 0x3E2AA0, 0x1C
+gUnknown_83E2AA0:: @ 83E2AA0
+ obj_rot_scal_anim_frame 320, 320, 0, 0
+ obj_rot_scal_anim_frame -14, -14, 0, 1
+ obj_rot_scal_anim_jump 1
-gUnknown_83E2ABC::
- .incbin "baserom.gba", 0x3E2ABC, 0x2C
+gUnknown_83E2AB8:: @ 83E2AB8
+ .4byte gUnknown_83E2AA0
-gUnknown_83E2AE8::
- .incbin "baserom.gba", 0x3E2AE8, 0x18
+gUnknown_83E2ABC:: @ 83E2ABC
+ spr_template 10235, 10235, gOamData_83ACA88, gDummySpriteAnimTable, NULL, gUnknown_83E2AB8, sub_80A2388
-gUnknown_83E2B00::
- .incbin "baserom.gba", 0x3E2B00, 0x34
+gUnknown_83E2AD4:: @ 83E2AD4
+ obj_rot_scal_anim_frame -5, -5, 0, 1
+ obj_rot_scal_anim_jump 0
+
+gUnknown_83E2AE4:: @ 83E2AE4
+ .4byte gUnknown_83E2AD4
+
+gUnknown_83E2AE8:: @ 83E2AE8
+ spr_template 10147, 10147, gOamData_83ACB50, gSpriteAnimTable_83E2A40, NULL, gUnknown_83E2AE4, sub_80A2580
+
+gUnknown_83E2B00:: @ 83E2B00
+ spr_template 10147, 10147, gOamData_83AC9C8, gSpriteAnimTable_83E2A20, NULL, gDummySpriteAffineAnimTable, sub_80A25EC
+
+gUnknown_83E2B18:: @ 83E2B18
+ obj_image_anim_frame 0, 1
+ obj_image_anim_end
+
+gUnknown_83E2B20:: @ 83E2B20
+ obj_image_anim_frame 4, 7
+ obj_image_anim_frame 8, 7
+ obj_image_anim_jump 0
+
+gUnknown_83E2B2C:: @ 83E2B2C
+ .4byte gUnknown_83E2B18
+ .4byte gUnknown_83E2B20
+
+gUnknown_83E2B34:: @ 83E2B34
+ spr_template 10006, 10006, gOamData_83AC9D0, gUnknown_83E2B2C, NULL, gDummySpriteAffineAnimTable, sub_80A26F0
+
+gUnknown_83E2B4C:: @ 83E2B4C
+ obj_image_anim_frame 0, 1
+ obj_image_anim_end
+
+gUnknown_83E2B54:: @ 83E2B54
+ obj_image_anim_frame 4, 7
+ obj_image_anim_end
+
+gUnknown_83E2B5C:: @ 83E2B5C
+ .4byte gUnknown_83E2B4C
+ .4byte gUnknown_83E2B54
+
+gUnknown_83E2B64:: @ 83E2B64
+ spr_template 10158, 10158, gOamData_83AC9D0, gUnknown_83E2B5C, NULL, gDummySpriteAffineAnimTable, sub_80A27D0
+
+gUnknown_83E2B7C:: @ 83E2B7C
+ obj_image_anim_frame 0, 1
+ obj_image_anim_end
+
+gUnknown_83E2B84:: @ 83E2B84
+ obj_image_anim_frame 4, 1
+ obj_image_anim_end
+
+gUnknown_83E2B8C:: @ 83E2B8C
+ .4byte gUnknown_83E2B7C
+
+gUnknown_83E2B90:: @ 83E2B90
+ .4byte gUnknown_83E2B84
+
+gUnknown_83E2B94:: @ 83E2B94
+ spr_template 10159, 10159, gOamData_83AC9D0, gUnknown_83E2B8C, NULL, gDummySpriteAffineAnimTable, sub_80A2920
+
+gUnknown_83E2BAC:: @ 83E2BAC
+ spr_template 10159, 10159, gOamData_83AC9C8, gUnknown_83E2B90, NULL, gDummySpriteAffineAnimTable, sub_80A29EC
+
+gUnknown_83E2BC4:: @ 83E2BC4
+ obj_image_anim_frame 0, 5
+ obj_image_anim_frame 4, 5
+ obj_image_anim_frame 8, 5
+ obj_image_anim_frame 12, 5
+ obj_image_anim_frame 16, 5
+ obj_image_anim_frame 20, 5
+ obj_image_anim_frame 16, 5
+ obj_image_anim_frame 12, 5
+ obj_image_anim_frame 8, 5
+ obj_image_anim_frame 4, 5
+ obj_image_anim_jump 0
+
+gUnknown_83E2BF0:: @ 83E2BF0
+ obj_image_anim_frame 24, 5
+ obj_image_anim_frame 28, 5
+ obj_image_anim_frame 32, 5
+ obj_image_anim_end
+
+gUnknown_83E2C00:: @ 83E2C00
+ .4byte gUnknown_83E2BC4
+ .4byte gUnknown_83E2BF0
+
+gUnknown_83E2C08:: @ 83E2C08
+ spr_template 10063, 10063, gOamData_83AC9D0, gUnknown_83E2C00, NULL, gDummySpriteAffineAnimTable, sub_80A2AA4
+
+gUnknown_83E2C20:: @ 83E2C20
+ spr_template 10063, 10063, gOamData_83AC9D0, gUnknown_83E2C00, NULL, gDummySpriteAffineAnimTable, AnimMoveTwisterParticle
+
+gUnknown_83E2C38:: @ 83E2C38
+ obj_image_anim_frame 0, 3
+ obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_jump 0
+
+gUnknown_83E2C4C:: @ 83E2C4C
+ .4byte gUnknown_83E2C38
+
+gUnknown_83E2C50:: @ 83E2C50
+ spr_template 10160, 10160, gOamData_83AC9F8, gUnknown_83E2C4C, NULL, gDummySpriteAffineAnimTable, sub_80A2B9C
+
+gUnknown_83E2C68:: @ 83E2C68
+ obj_rot_scal_anim_frame 0, 0, 0, 1
+ obj_rot_scal_anim_jump 0
-gUnknown_83E2B34::
- .incbin "baserom.gba", 0x3E2B34, 0x30
+gUnknown_83E2C78:: @ 83E2C78
+ .4byte gUnknown_83E2C68
-gUnknown_83E2B64::
- .incbin "baserom.gba", 0x3E2B64, 0x30
+gUnknown_83E2C7C:: @ 83E2C7C
+ spr_template 10174, 10174, gOamData_83ACA38, gDummySpriteAnimTable, NULL, gUnknown_83E2C78, sub_80A2B9C
-gUnknown_83E2B94::
- .incbin "baserom.gba", 0x3E2B94, 0x18
+gUnknown_83E2C94:: @ 83E2C94
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 32, 4
+ obj_image_anim_frame 64, 4
+ obj_image_anim_frame 96, 4
+ obj_image_anim_end
-gUnknown_83E2BAC::
- .incbin "baserom.gba", 0x3E2BAC, 0x5C
+gUnknown_83E2CA8:: @ 83E2CA8
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 64, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 96, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
-gUnknown_83E2C08::
- .incbin "baserom.gba", 0x3E2C08, 0x18
+gUnknown_83E2CBC:: @ 83E2CBC
+ .4byte gUnknown_83E2C94
+ .4byte gUnknown_83E2CA8
-gUnknown_83E2C20::
- .incbin "baserom.gba", 0x3E2C20, 0x30
+gUnknown_83E2CC4:: @ 83E2CC4
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_frame -11, 0, 0, 6
+ obj_rot_scal_anim_frame 11, 0, 0, 6
+ obj_rot_scal_anim_end
-gUnknown_83E2C50::
- .incbin "baserom.gba", 0x3E2C50, 0x2C
+gUnknown_83E2CE4:: @ 83E2CE4
+ obj_rot_scal_anim_frame -256, 256, 0, 0
+ obj_rot_scal_anim_frame 11, 0, 0, 6
+ obj_rot_scal_anim_frame -11, 0, 0, 6
+ obj_rot_scal_anim_end
-gUnknown_83E2C7C::
- .incbin "baserom.gba", 0x3E2C7C, 0x90
+gUnknown_83E2D04:: @ 83E2D04
+ .4byte gUnknown_83E2CC4
+ .4byte gUnknown_83E2CE4
-gUnknown_83E2D0C::
- .incbin "baserom.gba", 0x3E2D0C, 0x48
+gUnknown_83E2D0C:: @ 83E2D0C
+ spr_template 10186, 10186, gOamData_83ACA60, gUnknown_83E2CBC, NULL, gUnknown_83E2D04, sub_80A2E28
-gUnknown_83E2D54::
- .incbin "baserom.gba", 0x3E2D54, 0x70
+gUnknown_83E2D24:: @ 83E2D24
+ obj_rot_scal_anim_frame 0, 0, 0, 0
+ obj_rot_scal_anim_frame 48, 48, 0, 14
+ obj_rot_scal_anim_end
-gUnknown_83E2DC4::
- .incbin "baserom.gba", 0x3E2DC4, 0x18
+gUnknown_83E2D3C:: @ 83E2D3C
+ obj_rot_scal_anim_frame -16, -16, 0, 1
+ obj_rot_scal_anim_jump 0
-gUnknown_83E2DDC::
- .incbin "baserom.gba", 0x3E2DDC, 0x28
+gUnknown_83E2D4C:: @ 83E2D4C
+ .4byte gUnknown_83E2D24
+ .4byte gUnknown_83E2D3C
-gUnknown_83E2E04::
- .incbin "baserom.gba", 0x3E2E04, 0x84
+gUnknown_83E2D54:: @ 83E2D54
+ spr_template 10147, 10147, gOamData_83ACA90, gSpriteAnimTable_83E2A40, NULL, gUnknown_83E2D4C, sub_80A3098
-gUnknown_83E2E88::
- .incbin "baserom.gba", 0x3E2E88, 0x18
+gUnknown_83E2D6C:: @ 83E2D6C
+ obj_image_anim_frame 0, 7
+ obj_image_anim_frame 16, 7
+ obj_image_anim_frame 32, 7
+ obj_image_anim_frame 48, 7
+ obj_image_anim_end
-gUnknown_83E2EA0::
- .incbin "baserom.gba", 0x3E2EA0, 0x30
+gUnknown_83E2D80:: @ 83E2D80
+ obj_image_anim_frame 0, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 48, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E2D94:: @ 83E2D94
+ obj_image_anim_frame 0, 7
+ obj_image_anim_frame 16, 7
+ obj_image_anim_frame 32, 7
+ obj_image_anim_end
-gUnknown_83E2ED0::
- .incbin "baserom.gba", 0x3E2ED0, 0x18
+gUnknown_83E2DA4:: @ 83E2DA4
+ obj_image_anim_frame 0, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
-gUnknown_83E2EE8::
- .incbin "baserom.gba", 0x3E2EE8, 0x78
+gUnknown_83E2DB4:: @ 83E2DB4
+ .4byte gUnknown_83E2D6C
+ .4byte gUnknown_83E2D80
+ .4byte gUnknown_83E2D94
+ .4byte gUnknown_83E2DA4
-gUnknown_83E2F60::
- .incbin "baserom.gba", 0x3E2F60, 0x18
+gUnknown_83E2DC4:: @ 83E2DC4
+ spr_template 10223, 10223, gOamData_83AC9D8, gUnknown_83E2DB4, NULL, gDummySpriteAffineAnimTable, sub_80A3168
+
+gUnknown_83E2DDC:: @ 83E2DDC
+ spr_template 10223, 10223, gOamData_83AC9D8, gUnknown_83E2DB4, NULL, gDummySpriteAffineAnimTable, sub_80A31EC
+
+gUnknown_83E2DF4:: @ 83E2DF4
+ obj_image_anim_frame 3, 3
+ obj_image_anim_frame 0, 5
+ obj_image_anim_jump 0
+
+gUnknown_83E2E00:: @ 83E2E00
+ .4byte gUnknown_83E2DF4
+
+gUnknown_83E2E04:: @ 83E2E04
+ spr_template 10147, 10147, gOamData_83AC9C8, gUnknown_83E2E00, NULL, gDummySpriteAffineAnimTable, sub_80A3334
+
+gUnknown_83E2E1C:: @ 83E2E1C
+ obj_image_anim_frame 0, 30
+ obj_image_anim_end
+
+gUnknown_83E2E24:: @ 83E2E24
+ .4byte gUnknown_83E2E1C
+
+gUnknown_83E2E28:: @ 83E2E28
+ obj_rot_scal_anim_frame 0, 0, 252, 10
+ obj_rot_scal_anim_frame 0, 0, 4, 20
+ obj_rot_scal_anim_frame 0, 0, 252, 10
+ obj_rot_scal_anim_end
+
+gUnknown_83E2E48:: @ 83E2E48
+ obj_rot_scal_anim_frame 0, 0, 255, 2
+ obj_rot_scal_anim_frame 0, 0, 1, 4
+ obj_rot_scal_anim_frame 0, 0, 255, 4
+ obj_rot_scal_anim_frame 0, 0, 1, 4
+ obj_rot_scal_anim_frame 0, 0, 255, 4
+ obj_rot_scal_anim_frame 0, 0, 1, 2
+ obj_rot_scal_anim_end
+
+gUnknown_83E2E80:: @ 83E2E80
+ .4byte gUnknown_83E2E28
+ .4byte gUnknown_83E2E48
+
+gUnknown_83E2E88:: @ 83E2E88
+ spr_template 10224, 10224, gOamData_83ACA38, gUnknown_83E2E24, NULL, gUnknown_83E2E80, sub_80A3518
+
+gUnknown_83E2EA0:: @ 83E2EA0
+ spr_template 10224, 10224, gOamData_83ACA38, gUnknown_83E2E24, NULL, gUnknown_83E2E80, sub_80A35F4
+
+gUnknown_83E2EB8:: @ 83E2EB8
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 4, 4
+ obj_image_anim_frame 8, 4
+ obj_image_anim_frame 12, 4
+ obj_image_anim_end
+
+gUnknown_83E2ECC:: @ 83E2ECC
+ .4byte gUnknown_83E2EB8
+
+gUnknown_83E2ED0:: @ 83E2ED0
+ spr_template 10195, 10195, gOamData_83AC9D0, gUnknown_83E2ECC, NULL, gDummySpriteAffineAnimTable, sub_80A3670
+
+gUnknown_83E2EE8:: @ 83E2EE8
+ spr_template 10224, 10224, gOamData_83ACA38, gUnknown_83E2E24, NULL, gUnknown_83E2E80, sub_80A36B4
+
+gUnknown_83E2F00:: @ 83E2F00
+ obj_rot_scal_anim_frame 0, 0, 0, 3
+ obj_rot_scal_anim_end
+
+gUnknown_83E2F10:: @ 83E2F10
+ obj_rot_scal_anim_frame 0, -10, 0, 3
+ obj_rot_scal_anim_frame 0, -6, 0, 3
+ obj_rot_scal_anim_frame 0, -2, 0, 3
+ obj_rot_scal_anim_frame 0, 0, 0, 3
+ obj_rot_scal_anim_frame 0, 2, 0, 3
+ obj_rot_scal_anim_frame 0, 6, 0, 3
+ obj_rot_scal_anim_frame 0, 10, 0, 3
+ obj_rot_scal_anim_end
+
+gUnknown_83E2F50:: @ 83E2F50
+ .4byte gUnknown_83E2F00
+ .4byte gUnknown_83E2F10
+ .4byte gUnknown_83E2E28
+ .4byte gUnknown_83E2E48
+
+gUnknown_83E2F60:: @ 83E2F60
+ spr_template 10224, 10224, gOamData_83ACA38, gUnknown_83E2E24, NULL, gUnknown_83E2F50, sub_80A37BC
gUnknown_83E2F78:: @ 83E2F78
- .incbin "baserom.gba", 0x3E2F78, 0x78
+ .byte 0x05, 0x18, 0x01, 0x00, 0x04, 0x00, 0x08, 0x10, 0xff, 0x00, 0x02, 0x00, 0x08, 0x10, 0x01, 0x00, 0x02, 0x00, 0x08, 0x10, 0x01, 0x00, 0x02, 0x00, 0x08, 0x10, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00
+ .byte 0x7f, 0x00, 0x00, 0x00
+
+gUnknown_83E2F9C:: @ 83E2F9C
+ obj_image_anim_frame 28, 1
+ obj_image_anim_end
+
+gUnknown_83E2FA4:: @ 83E2FA4
+ obj_image_anim_frame 32, 1
+ obj_image_anim_end
+
+gUnknown_83E2FAC:: @ 83E2FAC
+ obj_image_anim_frame 20, 1
+ obj_image_anim_end
+
+gUnknown_83E2FB4:: @ 83E2FB4
+ obj_image_anim_frame 28, 1, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E2FBC:: @ 83E2FBC
+ obj_image_anim_frame 16, 1
+ obj_image_anim_end
+
+gUnknown_83E2FC4:: @ 83E2FC4
+ obj_image_anim_frame 16, 1, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E2FCC:: @ 83E2FCC
+ obj_image_anim_frame 28, 1
+ obj_image_anim_end
+
+gUnknown_83E2FD4:: @ 83E2FD4
+ .4byte gUnknown_83E2F9C
+ .4byte gUnknown_83E2FA4
+ .4byte gUnknown_83E2FAC
+ .4byte gUnknown_83E2FB4
+ .4byte gUnknown_83E2FBC
+ .4byte gUnknown_83E2FC4
+ .4byte gUnknown_83E2FCC
gUnknown_83E2FF0:: @ 83E2FF0
- .incbin "baserom.gba", 0x3E2FF0, 0x34
+ spr_template 10063, 10063, gOamData_83AC9D0, gUnknown_83E2FD4, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+
+gUnknown_83E3008:: @ 83E3008
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_frame 0, 0, 4, 1
+ obj_rot_scal_anim_jump 1
+
+gUnknown_83E3020:: @ 83E3020
+ .4byte gUnknown_83E3008
+
+gUnknown_83E3024:: @ 83E3024
+ spr_template 10159, 10159, gOamData_83AC9C8, gUnknown_83E2B90, NULL, gDummySpriteAffineAnimTable, sub_80A4040
-gUnknown_83E3024::
- .incbin "baserom.gba", 0x3E3024, 0x18
+gUnknown_83E303C:: @ 83E303C
+ spr_template 10159, 10159, gOamData_83ACA30, gUnknown_83E2B8C, NULL, gUnknown_83E3020, sub_80A4040
-gUnknown_83E303C::
- .incbin "baserom.gba", 0x3E303C, 0x6C
+gUnknown_83E3054:: @ 83E3054
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_frame 0, 0, 246, 1
+ obj_rot_scal_anim_jump 1
-gUnknown_83E30A8::
- .incbin "baserom.gba", 0x3E30A8, 0x18
+gUnknown_83E306C:: @ 83E306C
+ obj_rot_scal_anim_frame 192, 192, 0, 0
+ obj_rot_scal_anim_frame 0, 0, 244, 1
+ obj_rot_scal_anim_jump 1
-gUnknown_83E30C0::
- .incbin "baserom.gba", 0x3E30C0, 0x18
+gUnknown_83E3084:: @ 83E3084
+ obj_rot_scal_anim_frame 143, 143, 0, 0
+ obj_rot_scal_anim_frame 0, 0, 241, 1
+ obj_rot_scal_anim_jump 1
-gUnknown_83E30D8::
- .incbin "baserom.gba", 0x3E30D8, 0x18
+gUnknown_83E309C:: @ 83E309C
+ .4byte gUnknown_83E3054
+
+gUnknown_83E30A0:: @ 83E30A0
+ .4byte gUnknown_83E306C
+
+gUnknown_83E30A4:: @ 83E30A4
+ .4byte gUnknown_83E3084
+
+gUnknown_83E30A8:: @ 83E30A8
+ spr_template 10271, 10271, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gUnknown_83E309C, sub_80A4040
+
+gUnknown_83E30C0:: @ 83E30C0
+ spr_template 10271, 10271, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gUnknown_83E30A0, sub_80A4040
+
+gUnknown_83E30D8:: @ 83E30D8
+ spr_template 10271, 10271, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gUnknown_83E30A4, sub_80A4040
gUnknown_83E30F0:: @ 83E30F0
- .incbin "baserom.gba", 0x3E30F0, 0x10
+ .2byte 0x001f, 0x027f, 0x03ff, 0x03e0, 0x7dc5, 0x7d56, 0x7eb6, 0x0000
-gUnknown_83E3100::
- .incbin "baserom.gba", 0x3E3100, 0x48
+gUnknown_83E3100:: @ 83E3100
+ spr_template 10266, 10266, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A4298
-gUnknown_83E3148::
- .incbin "baserom.gba", 0x3E3148, 0x18
+gUnknown_83E3118:: @ 83E3118
+ obj_image_anim_frame 64, 3
+ obj_image_anim_frame 80, 3
+ obj_image_anim_frame 96, 3
+ obj_image_anim_frame 112, 6
+ obj_image_anim_end
-gUnknown_83E3160::
- .incbin "baserom.gba", 0x3E3160, 0x134
+gUnknown_83E312C:: @ 83E312C
+ obj_image_anim_frame 64, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 80, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 96, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 112, 6, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
-gUnknown_83E3294::
- .incbin "baserom.gba", 0x3E3294, 0x18
+gUnknown_83E3140:: @ 83E3140
+ .4byte gUnknown_83E3118
+ .4byte gUnknown_83E312C
-gUnknown_83E32AC::
- .incbin "baserom.gba", 0x3E32AC, 0xA8
+gUnknown_83E3148:: @ 83E3148
+ spr_template 10056, 10056, gOamData_83AC9D8, gUnknown_83E3140, NULL, gDummySpriteAffineAnimTable, sub_80A4450
-gUnknown_83E3354::
- .incbin "baserom.gba", 0x3E3354, 0x60
+gUnknown_83E3160:: @ 83E3160
+ spr_template 10287, 10287, gOamData_83AC9D8, gUnknown_83E3140, NULL, gDummySpriteAffineAnimTable, sub_80A4450
-gUnknown_83E33B4::
- .incbin "baserom.gba", 0x3E33B4, 0x40
+gUnknown_83E3178:: @ 83E3178
+ obj_image_anim_frame 0x0000, 4
+ obj_image_anim_frame 0x0010, 4
+ obj_image_anim_frame 0x0020, 4
+ obj_image_anim_frame 0x0030, 4
+ obj_image_anim_frame 0x0040, 5
+ obj_image_anim_end
-gUnknown_83E33F4::
- .incbin "baserom.gba", 0x3E33F4, 0x18
+gUnknown_83E3190:: @ 83E3190
+ .4byte gUnknown_83E3178
+
+gUnknown_83E3194:: @ 83E3194
+ spr_template 10021, 10021, gOamData_83AC9D8, gUnknown_83E3190, NULL, gDummySpriteAffineAnimTable, sub_80A43F8
+
+gUnknown_83E31AC:: @ 83E31AC
+ spr_template 10022, 10022, gOamData_83AC9D8, gUnknown_83E3190, NULL, gDummySpriteAffineAnimTable, sub_80A43F8
+
+gUnknown_83E31C4:: @ 83E31C4
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E31D4::
+ obj_rot_scal_anim_frame 256, 256, 32, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E31E4::
+ obj_rot_scal_anim_frame 256, 256, 64, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E31F4::
+ obj_rot_scal_anim_frame 256, 256, 96, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E3204::
+ obj_rot_scal_anim_frame 256, 256, 128, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E3214::
+ obj_rot_scal_anim_frame 256, 256, 160, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E3224::
+ obj_rot_scal_anim_frame 256, 256, 192, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E3234::
+ obj_rot_scal_anim_frame 256, 256, 224, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E3244::
+ .4byte gUnknown_83E31C4
+ .4byte gUnknown_83E31D4
+ .4byte gUnknown_83E31E4
+ .4byte gUnknown_83E31F4
+ .4byte gUnknown_83E3204
+ .4byte gUnknown_83E3214
+ .4byte gUnknown_83E3224
+ .4byte gUnknown_83E3234
+
+gUnknown_83E3264::
+ spr_template 10143, 10143, gOamData_83ACA38, gDummySpriteAnimTable, NULL, gUnknown_83E3244, sub_80A4494
+
+gUnknown_83E327C:: @ 83E327C
+ obj_image_anim_frame 0, 5
+ obj_image_anim_frame 16, 5
+ obj_image_anim_frame 32, 5
+ obj_image_anim_frame 48, 5
+ obj_image_anim_end
+
+gUnknown_83E3290:: @ 83E3290
+ .4byte gUnknown_83E327C
+
+gUnknown_83E3294:: @ 83E3294
+ spr_template 10138, 10138, gOamData_83ACAF8, gUnknown_83E3290, NULL, gDummySpriteAffineAnimTable, sub_80A44E0
+
+gUnknown_83E32AC:: @ 83E32AC
+ spr_template 10138, 10138, gOamData_83ACAF8, gUnknown_83E3290, NULL, gDummySpriteAffineAnimTable, sub_80A4588
+
+gUnknown_83E32C4:: @ 83E32C4
+ obj_image_anim_frame 0x0000, 1
+ obj_image_anim_end
+
+gUnknown_83E32CC::
+ obj_image_anim_frame 0x0004, 1
+ obj_image_anim_end
-gUnknown_83E340C::
- .incbin "baserom.gba", 0x3E340C, 0xF4
+gUnknown_83E32D4::
+ obj_image_anim_frame 0x0008, 1
+ obj_image_anim_end
+
+gUnknown_83E32DC::
+ obj_image_anim_frame 0x000c, 1
+ obj_image_anim_end
+
+gUnknown_83E32E4::
+ obj_image_anim_frame 0x0010, 1
+ obj_image_anim_end
-gUnknown_83E3500::
- .incbin "baserom.gba", 0x3E3500, 0x18
+gUnknown_83E32EC::
+ obj_image_anim_frame 0x0014, 1
+ obj_image_anim_end
-gUnknown_83E3518::
- .incbin "baserom.gba", 0x3E3518, 0x18
+gUnknown_83E32F4::
+ obj_image_anim_frame 0x0000, 1, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
-gUnknown_83E3530::
- .incbin "baserom.gba", 0x3E3530, 0x18
+gUnknown_83E32FC::
+ obj_image_anim_frame 0x0004, 1, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+
+gUnknown_83E3304::
+ obj_image_anim_frame 0x0008, 1, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+
+gUnknown_83E330C::
+ obj_image_anim_frame 0x000c, 1, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+
+gUnknown_83E3314::
+ .4byte gUnknown_83E32C4
+ .4byte gUnknown_83E32CC
+ .4byte gUnknown_83E32D4
+ .4byte gUnknown_83E32DC
+ .4byte gUnknown_83E32E4
+ .4byte gUnknown_83E32EC
+ .4byte gUnknown_83E32F4
+ .4byte gUnknown_83E32FC
+ .4byte gUnknown_83E3304
+ .4byte gUnknown_83E330C
+
+gUnknown_83E333C::
+ spr_template 10072, 10072, gOamData_83AC9D0, gUnknown_83E3314, NULL, gDummySpriteAffineAnimTable, sub_80A481C
+
+gUnknown_83E3354:: @ 83E3354
+ spr_template 10280, 10280, gOamData_83ACB00, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A48F0
+
+gUnknown_83E336C:: @ 83E336C
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E337C:: @ 83E337C
+ obj_rot_scal_anim_frame 0, 0, 2, 12
+ obj_rot_scal_anim_frame 0, 0, 0, 6
+ obj_rot_scal_anim_frame 0, 0, 254, 24
+ obj_rot_scal_anim_frame 0, 0, 0, 6
+ obj_rot_scal_anim_frame 0, 0, 2, 12
+ obj_rot_scal_anim_jump 0
+
+gUnknown_83E33AC:: @ 83E33AC
+ .4byte gUnknown_83E336C
+ .4byte gUnknown_83E337C
+
+gUnknown_83E33B4:: @ 83E33B4
+ spr_template 10099, 10099, gOamData_83ACB58, gDummySpriteAnimTable, NULL, gUnknown_83E33AC, sub_80A4ACC
+
+gUnknown_83E33CC:: @ 83E33CC
+ obj_image_anim_frame 0, 7
+ obj_image_anim_frame 16, 7
+ obj_image_anim_frame 32, 7
+ obj_image_anim_frame 48, 7
+ obj_image_anim_frame 64, 7
+ obj_image_anim_frame 80, 7
+ obj_image_anim_frame 96, 7
+ obj_image_anim_frame 112, 7
+ obj_image_anim_jump 0
+
+gUnknown_83E33F0:: @ 83E33F0
+ .4byte gUnknown_83E33CC
+
+gUnknown_83E33F4:: @ 83E33F4
+ spr_template 10049, 10049, gOamData_83AC9D8, gUnknown_83E33F0, NULL, gDummySpriteAffineAnimTable, sub_80A4D0C
+
+gUnknown_83E340C:: @ 83E340C
+ spr_template 10049, 10049, gOamData_83AC9D8, gUnknown_83E33F0, NULL, gDummySpriteAffineAnimTable, sub_80A4D5C
+
+gUnknown_83E3424:: @ 83E3424
+ obj_image_anim_frame 0x0000, 10
+ obj_image_anim_frame 0x0004, 10
+ obj_image_anim_frame 0x0008, 10
+ obj_image_anim_frame 0x000c, 10
+ obj_image_anim_frame 0x0010, 26
+ obj_image_anim_frame 0x0010, 5
+ obj_image_anim_frame 0x0014, 5
+ obj_image_anim_frame 0x0018, 15
+ obj_image_anim_end
+
+gUnknown_83E3448::
+ obj_image_anim_frame 0x0000, 10, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0004, 10, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0008, 10, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x000c, 10, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0010, 26, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0010, 5, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0014, 5, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0018, 15, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E346C::
+ .4byte gUnknown_83E3424
+ .4byte gUnknown_83E3448
+
+gUnknown_83E3474::
+ spr_template 10032, 10032, gOamData_83AC9D0, gUnknown_83E346C, NULL, gDummySpriteAffineAnimTable, sub_80A4E40
+
+gUnknown_83E348C:: @ 83E348C
+ obj_image_anim_frame 0, 40
+ obj_image_anim_end
+
+gUnknown_83E3494:: @ 83E3494
+ .4byte gUnknown_83E348C
+
+gUnknown_83E3498:: @ 83E3498
+ obj_rot_scal_anim_frame 20, 20, 226, 0
+ obj_rot_scal_anim_frame 8, 8, 1, 24
+ obj_rot_scal_anim_end
+
+gUnknown_83E34B0:: @ 83E34B0
+ obj_rot_scal_anim_loop 0
+ obj_rot_scal_anim_frame 0, 0, 1, 24
+ obj_rot_scal_anim_loop 10
+
+gUnknown_83E34C8:: @ 83E34C8
+ obj_rot_scal_anim_frame 20, 20, 30, 0
+ obj_rot_scal_anim_frame 8, 8, 255, 24
+ obj_rot_scal_anim_end
+
+gUnknown_83E34E0:: @ 83E34E0
+ obj_rot_scal_anim_loop 0
+ obj_rot_scal_anim_frame 0, 0, 255, 24
+ obj_rot_scal_anim_loop 10
+
+gUnknown_83E34F8:: @ 83E34F8
+ .4byte gUnknown_83E3498
+ .4byte gUnknown_83E34C8
+
+gUnknown_83E3500:: @ 83E3500
+ spr_template 10228, 10228, gOamData_83ACA38, gUnknown_83E3494, NULL, gUnknown_83E34F8, sub_80A4EF4
+
+gUnknown_83E3518:: @ 83E3518
+ spr_template 10014, 10014, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A4FAC
+
+gUnknown_83E3530:: @ 83E3530
+ spr_template 10014, 10014, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A5298
gUnknown_83E3548:: @ 83E3548
- .incbin "baserom.gba", 0x3E3548, 0x8
+ .byte 0x40, 0x40, 0x00, 0xc0, 0xc0, 0x40, 0x20, 0xe0
+
+gUnknown_83E3550:: @ 83E3550
+ spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A5340
+ spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A5590
+
+gUnknown_83E3580:: @ 83E3580
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 16, 4
+ obj_image_anim_frame 32, 4
+ obj_image_anim_frame 48, 4
+ obj_image_anim_end
+
+gUnknown_83E3594:: @ 83E3594
+ obj_image_anim_frame 48, 4
+ obj_image_anim_end
+
+gUnknown_83E359C:: @ 83E359C
+ .4byte gUnknown_83E3580
+ .4byte gUnknown_83E3594
+
+gUnknown_83E35A4:: @ 83E35A4
+ spr_template 10183, 10183, gOamData_83AC9D8, gUnknown_83E359C, NULL, gDummySpriteAffineAnimTable, sub_80A5940
+
+gUnknown_83E35BC:: @ 83E35BC
+ spr_template 10286, 10286, gOamData_83AC9D8, gUnknown_83E359C, NULL, gDummySpriteAffineAnimTable, sub_80A59A8
+
+gUnknown_83E35D4:: @ 83E35D4
+ spr_template 10286, 10286, gOamData_83AC9D8, gUnknown_83E359C, NULL, gDummySpriteAffineAnimTable, sub_80A59F0
-gUnknown_83E3550::
- .incbin "baserom.gba", 0x3E3550, 0x54
+gUnknown_83E35EC:: @ 83E35EC
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 8, 12
+ obj_image_anim_frame 16, 4
+ obj_image_anim_frame 24, 4
+ obj_image_anim_end
-gUnknown_83E35A4::
- .incbin "baserom.gba", 0x3E35A4, 0x18
+gUnknown_83E3600:: @ 83E3600
+ .4byte gUnknown_83E35EC
+
+gUnknown_83E3604:: @ 83E3604
+ spr_template 10184, 10184, gOamData_83ACA18, gUnknown_83E3600, NULL, gDummySpriteAffineAnimTable, sub_80A5AD8
+
+gUnknown_83E361C:: @ 83E361C
+ obj_image_anim_frame 0, 18
+ obj_image_anim_frame 0, 6
+ obj_image_anim_frame 16, 18
+ obj_image_anim_frame 0, 6
+ obj_image_anim_frame 16, 6
+ obj_image_anim_frame 32, 18
+ obj_image_anim_frame 16, 6
+ obj_image_anim_frame 32, 6
+ obj_image_anim_frame 48, 18
+ obj_image_anim_frame 32, 6
+ obj_image_anim_frame 48, 6
+ obj_image_anim_frame 64, 18
+ obj_image_anim_frame 48, 6
+ obj_image_anim_frame 64, 54
+ obj_image_anim_end
-gUnknown_83E35BC::
- .incbin "baserom.gba", 0x3E35BC, 0x18
+gUnknown_83E3658:: @ 83E3658
+ .4byte gUnknown_83E361C
-gUnknown_83E35D4::
- .incbin "baserom.gba", 0x3E35D4, 0x30
+gUnknown_83E365C:: @ 83E365C
+ spr_template 10185, 10185, gOamData_83AC9D8, gUnknown_83E3658, NULL, gDummySpriteAffineAnimTable, sub_80A5B7C
-gUnknown_83E3604::
- .incbin "baserom.gba", 0x3E3604, 0x58
+gUnknown_83E3674:: @ 83E3674
+ spr_template 10017, 10017, gOamData_83AC9C8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, TranslateAnimSpriteToTargetMonLocation
-gUnknown_83E365C::
- .incbin "baserom.gba", 0x3E365C, 0x18
+gUnknown_83E368C:: @ 83E368C
+ obj_image_anim_frame 0, 3
+ obj_image_anim_frame 16, 3
+ obj_image_anim_frame 32, 3
+ obj_image_anim_frame 48, 3
+ obj_image_anim_frame 64, 3
+ obj_image_anim_end
-gUnknown_83E3674::
- .incbin "baserom.gba", 0x3E3674, 0x34
+gUnknown_83E36A4:: @ 83E36A4
+ .4byte gUnknown_83E368C
-gUnknown_83E36A8::
- .incbin "baserom.gba", 0x3E36A8, 0x44
+gUnknown_83E36A8:: @ 83E36A8
+ spr_template 10030, 10030, gOamData_83AC9D8, gUnknown_83E36A4, NULL, gDummySpriteAffineAnimTable, AnimSpriteOnMonPos
+
+gUnknown_83E36C0:: @ 83E36C0
+ obj_image_anim_frame 3, 5
+ obj_image_anim_frame 2, 5
+ obj_image_anim_frame 1, 5
+ obj_image_anim_frame 0, 5
+ obj_image_anim_end
-gUnknown_83E36EC::
- .incbin "baserom.gba", 0x3E36EC, 0x30
+gUnknown_83E36D4:: @ 83E36D4
+ .4byte gUnknown_83E36C0
-gUnknown_83E371C::
- .incbin "baserom.gba", 0x3E371C, 0x18
+gUnknown_83E36D8:: @ 83E36D8
+ obj_rot_scal_anim_frame 512, 512, 0, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E36E8:: @ 83E36E8
+ .4byte gUnknown_83E36D8
+
+gUnknown_83E36EC:: @ 83E36EC
+ spr_template 10018, 10018, gOamData_83ACBA8, gUnknown_83E36D4, NULL, gUnknown_83E36E8, sub_80A5C68
+
+gUnknown_83E3704:: @ 83E3704
+ obj_image_anim_frame 0, 5
+ obj_image_anim_frame 1, 5
+ obj_image_anim_frame 2, 5
+ obj_image_anim_frame 3, 5
+ obj_image_anim_end
+
+gUnknown_83E3718:: @ 83E3718
+ .4byte gUnknown_83E3704
+
+gUnknown_83E371C:: @ 83E371C
+ spr_template 10018, 10018, gOamData_83ACBA8, gUnknown_83E3718, NULL, gUnknown_83E36E8, sub_80A5D4C
gUnknown_83E3734:: @ 83E3734
- .incbin "baserom.gba", 0x3E3734, 0x30
+ spr_template 10194, 10194, gOamData_83ACB00, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A5EE0
+
+gUnknown_83E374C:: @ 83E374C
+ obj_image_anim_frame 0, 8
+ obj_image_anim_frame 4, 8
+ obj_image_anim_frame 8, 8
+ obj_image_anim_frame 12, 8
+ obj_image_anim_jump 0
+
+gUnknown_83E3760:: @ 83E3760
+ .4byte gUnknown_83E374C
gUnknown_83E3764:: @ 83E3764
- .incbin "baserom.gba", 0x3E3764, 0x40
+ spr_template 10195, 10195, gOamData_83AC9D0, gUnknown_83E3760, NULL, gDummySpriteAffineAnimTable, sub_80A5F40
+
+gUnknown_83E377C:: @ 83E377C
+ obj_image_anim_frame 0, 2
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 32, 2
+ obj_image_anim_frame 48, 3
+ obj_image_anim_frame 64, 5
+ obj_image_anim_frame 80, 3
+ obj_image_anim_frame 96, 2
+ obj_image_anim_frame 0, 2
+ obj_image_anim_end
+
+gUnknown_83E37A0:: @ 83E37A0
+ .4byte gUnknown_83E377C
+
+gUnknown_83E37A4:: @ 83E37A4
+ spr_template 10031, 10031, gOamData_83AC9D8, gUnknown_83E37A0, NULL, gDummySpriteAffineAnimTable, AnimSpriteOnMonPos
+
+gUnknown_83E37BC:: @ 83E37BC
+ spr_template 10020, 10020, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A6244
+
+gUnknown_83E37D4:: @ 83E37D4
+ obj_image_anim_frame 0, 2
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 32, 2
+ obj_image_anim_frame 48, 2
+ obj_image_anim_end
+
+gUnknown_83E37E8:: @ 83E37E8
+ .4byte gUnknown_83E37D4
+
+gUnknown_83E37EC:: @ 83E37EC
+ spr_template 10192, 10192, gOamData_83AC9D8, gUnknown_83E37E8, NULL, gDummySpriteAffineAnimTable, sub_80A65CC
+
+gUnknown_83E3804:: @ 83E3804
+ obj_image_anim_frame 0x0000, 10
+ obj_image_anim_end
+
+gOamData_83E380C::
+ obj_image_anim_frame 0x0004, 10
+ obj_image_anim_end
+
+gUnknown_83E3814:: @ 83E3814
+ obj_image_anim_frame 0x0008, 41
+ obj_image_anim_end
+
+gUnknown_83E381C:: @ 83E381C
+ obj_image_anim_frame 0x000c, 10
+ obj_image_anim_end
+
+gUnknown_83E3824:: @ 83E3824
+ obj_image_anim_frame 0x0010, 10
+ obj_image_anim_end
+
+gUnknown_83E382C:: @ 83E382C
+ obj_image_anim_frame 0x0014, 10
+ obj_image_anim_end
+ obj_image_anim_frame 0x0000, 10, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+ obj_image_anim_frame 0x0004, 10, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
-gUnknown_83E37A4::
- .incbin "baserom.gba", 0x3E37A4, 0x18
+gUnknown_83E3844:: @ 83E3844
+ spr_template 14340, 2110, gOamData_83E380C, gUnknown_83E3814, gUnknown_83E381C, gUnknown_83E3824, gUnknown_83E382C
-gUnknown_83E37BC::
- .incbin "baserom.gba", 0x3E37BC, 0x30
+gUnknown_83E385C:: @ 83E385C
+ .4byte 0x83e3834
+ .4byte 0x83e383c
-gUnknown_83E37EC::
- .incbin "baserom.gba", 0x3E37EC, 0x94
+gUnknown_83E3864:: @ 83E3864
+ obj_rot_scal_anim_frame 12, 12, 0, 16
+ obj_rot_scal_anim_frame -12, -12, 0, 16
+ obj_rot_scal_anim_jump 0
-gUnknown_83E3880::
- .incbin "baserom.gba", 0x3E3880, 0x18
+gUnknown_83E387C:: @ 83E387C
+ .4byte gUnknown_83E3864
+
+gUnknown_83E3880:: @ 83E3880
+ spr_template 10072, 10072, gOamData_83ACA90, gUnknown_83E3844, NULL, gUnknown_83E387C, sub_80A66D4
gUnknown_83E3898:: @ 83E3898
- .incbin "baserom.gba", 0x3E3898, 0x30
+ .2byte 0x2758, 0x7fff, 0x735f, 0x6adf, 0x623f, 0x59bf, 0x2771, 0x7fff, 0x6bf9, 0x57f4, 0x43ef, 0x33ea, 0x27c9, 0x7fff, 0x63ff, 0x47ff
+ .2byte 0x2bff, 0x0fff, 0x27bf, 0x7fff, 0x7f9a, 0x7f55, 0x7f10, 0x7ecc
+
+gUnknown_83E38C8:: @ 83E38C8
+ spr_template 10072, 10072, gOamData_83ACA90, gUnknown_83E3844, NULL, gUnknown_83E387C, sub_80A68B0
-gUnknown_83E38C8::
- .incbin "baserom.gba", 0x3E38C8, 0x18
+gUnknown_83E38E0:: @ 83E38E0
+ spr_template 10193, 10193, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A69B8
-gUnknown_83E38E0::
- .incbin "baserom.gba", 0x3E38E0, 0x34
+gUnknown_83E38F8:: @ 83E38F8
+ obj_rot_scal_anim_frame 160, 160, 0, 0
+ obj_rot_scal_anim_frame 4, 4, 0, 1
+ obj_rot_scal_anim_jump 1
-gUnknown_83E3914::
- .incbin "baserom.gba", 0x3E3914, 0x78
+gUnknown_83E3910:: @ 83E3910
+ .4byte gUnknown_83E38F8
+
+gUnknown_83E3914:: @ 83E3914
+ spr_template 10072, 10072, gOamData_83ACA90, gUnknown_83E3844, NULL, gUnknown_83E3910, sub_80A6A28
+
+gUnknown_83E392C:: @ 83E392C
+ obj_image_anim_frame 0, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 48, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E3940:: @ 83E3940
+ obj_image_anim_frame 48, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E3954:: @ 83E3954
+ obj_image_anim_frame 0, 2
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 32, 2
+ obj_image_anim_frame 48, 2
+ obj_image_anim_end
+
+gUnknown_83E3968:: @ 83E3968
+ obj_image_anim_frame 48, 2
+ obj_image_anim_frame 32, 2
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 0, 2
+ obj_image_anim_end
+
+gUnknown_83E397C:: @ 83E397C
+ .4byte gUnknown_83E392C
+ .4byte gUnknown_83E3954
+ .4byte gUnknown_83E3940
+ .4byte gUnknown_83E3968
gUnknown_83E398C:: @ 83E398C
- .incbin "baserom.gba", 0x3E398C, 0xA8
+ spr_template 10209, 10209, gOamData_83AC9D8, gUnknown_83E397C, NULL, gDummySpriteAffineAnimTable, sub_80A6B64
+
+gUnknown_83E39A4:: @ 83E39A4
+ obj_rot_scal_anim_frame 16, 16, 0, 0
+ obj_rot_scal_anim_frame 30, 30, 0, 8
+ obj_rot_scal_anim_end
+
+gUnknown_83E39BC:: @ 83E39BC
+ obj_rot_scal_anim_frame 0, 0, 4, 11
+ obj_rot_scal_anim_frame 0, 0, 252, 11
+ obj_rot_scal_anim_loop 2
+ obj_rot_scal_anim_frame -30, -30, 0, 8
+ obj_rot_scal_anim_end
+
+gUnknown_83E39E4:: @ 83E39E4
+ obj_rot_scal_anim_frame 16, 16, 0, 0
+ obj_rot_scal_anim_frame 30, 30, 0, 8
+ obj_rot_scal_anim_frame 0, 0, 0, 16
+ obj_rot_scal_anim_loop 0
+ obj_rot_scal_anim_frame 0, 0, 4, 11
+ obj_rot_scal_anim_frame 0, 0, 252, 11
+ obj_rot_scal_anim_loop 2
+ obj_rot_scal_anim_frame -30, -30, 0, 8
+ obj_rot_scal_anim_end
+
+gUnknown_83E3A2C:: @ 83E3A2C
+ .4byte gUnknown_83E39A4
+ .4byte gUnknown_83E39BC
+
+gUnknown_83E3A34:: @ 83E3A34
+ spr_template 10064, 10064, gOamData_83ACA98, gDummySpriteAnimTable, NULL, gUnknown_83E3A2C, sub_80A6C08
+
+gUnknown_83E3A4C:: @ 83E3A4C
+ spr_template 10064, 10064, gOamData_83ACA38, gDummySpriteAnimTable, NULL, gUnknown_83E3A2C, sub_80A6C84
+
+gUnknown_83E3A64:: @ 83E3A64
+ obj_image_anim_frame 0, 1
+ obj_image_anim_end
-gUnknown_83E3A34::
- .incbin "baserom.gba", 0x3E3A34, 0x18
+gUnknown_83E3A6C:: @ 83E3A6C
+ obj_image_anim_frame 0, 1, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
-gUnknown_83E3A4C::
- .incbin "baserom.gba", 0x3E3A4C, 0x78
+gUnknown_83E3A74:: @ 83E3A74
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 16, 4
+ obj_image_anim_frame 32, 4
+ obj_image_anim_frame 16, 4
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 16, 4
+ obj_image_anim_frame 32, 4
+ obj_image_anim_end
-gUnknown_83E3AC4::
- .incbin "baserom.gba", 0x3E3AC4, 0xF8
+gUnknown_83E3A94:: @ 83E3A94
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
-gUnknown_83E3BBC::
- .incbin "baserom.gba", 0x3E3BBC, 0x3C
+gUnknown_83E3AB4:: @ 83E3AB4
+ .4byte gUnknown_83E3A64
+ .4byte gUnknown_83E3A6C
+ .4byte gUnknown_83E3A74
+ .4byte gUnknown_83E3A94
-gUnknown_83E3BF8::
- .incbin "baserom.gba", 0x3E3BF8, 0x18
+gUnknown_83E3AC4:: @ 83E3AC4
+ spr_template 10214, 10214, gOamData_83AC9D8, gUnknown_83E3AB4, NULL, gDummySpriteAffineAnimTable, sub_80A6D90
-gUnknown_83E3C10::
- .incbin "baserom.gba", 0x3E3C10, 0x18
+gUnknown_83E3ADC::
+ spr_template 10064, 10064, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A6E48
-gUnknown_83E3C28:: @ 83E3C28
- .incbin "baserom.gba", 0x3E3C28, 0x78
+gUnknown_83E3AF4:: @ 83E3AF4
+ obj_image_anim_frame 0x0004, 1
+ obj_image_anim_end
-gUnknown_83E3CA0::
- .incbin "baserom.gba", 0x3E3CA0, 0x18
+gUnknown_83E3AFC::
+ .4byte gUnknown_83E3AF4
-gUnknown_83E3CB8::
- .incbin "baserom.gba", 0x3E3CB8, 0x18
+gUnknown_83E3B00::
+ spr_template 10072, 10072, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A6E98
-gUnknown_83E3CD0::
- .incbin "baserom.gba", 0x3E3CD0, 0x18
+gUnknown_83E3B18::
+ spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A6F8C
-gUnknown_83E3CE8::
- .incbin "baserom.gba", 0x3E3CE8, 0x18
+gUnknown_83E3B30::
+ spr_template 10145, 10145, gOamData_83ACB60, gDummySpriteAnimTable, NULL, gUnknown_83E7910, sub_80A7020
-gUnknown_83E3D00::
- .incbin "baserom.gba", 0x3E3D00, 0x18
+gUnknown_83E3B48::
+ obj_image_anim_frame 0x0000, 9
+ obj_image_anim_frame 0x0010, 3
+ obj_image_anim_frame 0x0020, 3
+ obj_image_anim_frame 0x0030, 3
+ obj_image_anim_end
-gUnknown_83E3D18:: @ 83E3D18
- .incbin "baserom.gba", 0x3E3D18, 0x38
+gUnknown_83E3B5C::
+ .4byte gUnknown_83E3B48
+
+gUnknown_83E3B60::
+ obj_rot_scal_anim_frame 80, 80, 0, 0
+ obj_rot_scal_anim_frame 9, 9, 0, 18
+ obj_rot_scal_anim_end
+
+gUnknown_83E3B78::
+ .4byte gUnknown_83E3B60
+
+gUnknown_83E3B7C::
+ spr_template 10007, 10007, gOamData_83ACA38, gUnknown_83E3B5C, NULL, gUnknown_83E3B78, AnimSpriteOnMonPos
+
+gUnknown_83E3B94:: @ 83E3B94
+ obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 8, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 24, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 40, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 48, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_loop 1
+ obj_image_anim_end
-gUnknown_83E3D50::
- .incbin "baserom.gba", 0x3E3D50, 0x18
+gUnknown_83E3BB8:: @ 83E3BB8
+ .4byte gUnknown_83E3B94
-gUnknown_83E3D68::
- .incbin "baserom.gba", 0x3E3D68, 0x2C
+gUnknown_83E3BBC:: @ 83E3BBC
+ spr_template 10075, 10075, gOamData_83AC9F8, gUnknown_83E3BB8, NULL, gDummySpriteAffineAnimTable, sub_80A71D8
-gUnknown_83E3D94::
- .incbin "baserom.gba", 0x3E3D94, 0x34
+gUnknown_83E3BD4:: @ 83E3BD4
+ obj_rot_scal_anim_frame 16, 256, 0, 0
+ obj_rot_scal_anim_frame 20, 0, 0, 12
+ obj_rot_scal_anim_frame 0, 0, 0, 32
+ obj_rot_scal_anim_end
-gUnknown_83E3DC8::
- .incbin "baserom.gba", 0x3E3DC8, 0x40
+gUnknown_83E3BF4:: @ 83E3BF4
+ .4byte gUnknown_83E3BD4
-gUnknown_83E3E08::
- .incbin "baserom.gba", 0x3E3E08, 0x40
+gUnknown_83E3BF8:: @ 83E3BF8
+ spr_template 10005, 10005, gOamData_83ACBA0, gDummySpriteAnimTable, NULL, gUnknown_83E3BF4, sub_80A727C
-gUnknown_83E3E48::
- .incbin "baserom.gba", 0x3E3E48, 0x18
+gUnknown_83E3C10:: @ 83E3C10
+ spr_template 10003, 10003, gOamData_83ACBD8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A72C8
-gUnknown_83E3E60:: @ 83E3E60
- .incbin "baserom.gba", 0x3E3E60, 0x20
+gUnknown_83E3C28:: @ 83E3C28
+ spr_template 10003, 10003, gOamData_83ACB18, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A74A4
-gUnknown_83E3E80:: @ 83E3E80
- .incbin "baserom.gba", 0x3E3E80, 0x50
+gUnknown_83E3C40:: @ 83E3C40
+ obj_rot_scal_anim_frame 32, 32, 0, 0
+ obj_rot_scal_anim_frame 7, 7, 0, 200
+ obj_rot_scal_anim_end
-gUnknown_83E3ED0::
- .incbin "baserom.gba", 0x3E3ED0, 0x34
+gUnknown_83E3C58:: @ 83E3C58
+ obj_rot_scal_anim_frame 5, 5, 0, 10
+ obj_rot_scal_anim_frame -10, -10, 0, 10
+ obj_rot_scal_anim_frame 10, 10, 0, 10
+ obj_rot_scal_anim_frame -10, -10, 0, 10
+ obj_rot_scal_anim_frame 10, 10, 0, 10
+ obj_rot_scal_anim_frame -10, -10, 0, 10
+ obj_rot_scal_anim_frame 10, 10, 0, 10
+ obj_rot_scal_anim_end
-gUnknown_83E3F04::
- .incbin "baserom.gba", 0x3E3F04, 0x18
+gUnknown_83E3C98:: @ 83E3C98
+ .4byte gUnknown_83E3C40
-gUnknown_83E3F1C:: @ 83E3F1C
- .incbin "baserom.gba", 0x3E3F1C, 0x30
+gUnknown_83E3C9C:: @ 83E3C9C
+ .4byte gUnknown_83E3C58
-gUnknown_83E3F4C::
- .incbin "baserom.gba", 0x3E3F4C, 0x18
+gUnknown_83E3CA0:: @ 83E3CA0
+ spr_template 10163, 10163, gOamData_83ACAD8, gDummySpriteAnimTable, NULL, gUnknown_83E3C98, TranslateAnimSpriteToTargetMonLocation
-gUnknown_83E3F64::
- .incbin "baserom.gba", 0x3E3F64, 0x30
+gUnknown_83E3CB8:: @ 83E3CB8
+ spr_template 10164, 10164, gOamData_83ACAD8, gDummySpriteAnimTable, NULL, gUnknown_83E3C98, TranslateAnimSpriteToTargetMonLocation
-gUnknown_83E3F94::
- .incbin "baserom.gba", 0x3E3F94, 0x94
+gUnknown_83E3CD0:: @ 83E3CD0
+ spr_template 10260, 10260, gOamData_83ACAE0, gDummySpriteAnimTable, NULL, gUnknown_83E3C98, TranslateAnimSpriteToTargetMonLocation
-gUnknown_83E4028::
- .incbin "baserom.gba", 0x3E4028, 0x6C
+gUnknown_83E3CE8:: @ 83E3CE8
+ spr_template 10288, 10288, gOamData_83ACAD8, gDummySpriteAnimTable, NULL, gUnknown_83E3C9C, sub_80AC6D8
-gUnknown_83E4094::
- .incbin "baserom.gba", 0x3E4094, 0x34
+gUnknown_83E3D00:: @ 83E3D00
+ spr_template 10175, 10175, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, AnimThrowProjectile
-gUnknown_83E40C8::
- .incbin "baserom.gba", 0x3E40C8, 0x18
+gUnknown_83E3D18:: @ 83E3D18
+ spr_template 10178, 10178, gOamData_83ACB00, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A79E8
-gUnknown_83E40E0::
- .incbin "baserom.gba", 0x3E40E0, 0x18
+gUnknown_83E3D30:: @ 83E3D30
+ obj_image_anim_frame 8, 1
+ obj_image_anim_end
-gUnknown_83E40F8::
- .incbin "baserom.gba", 0x3E40F8, 0x18
+gUnknown_83E3D38:: @ 83E3D38
+ .4byte gUnknown_83E3D30
-gUnknown_83E4110::
- .incbin "baserom.gba", 0x3E4110, 0x18
+gUnknown_83E3D3C:: @ 83E3D3C
+ obj_rot_scal_anim_frame 0, 0, 10, 1
+ obj_rot_scal_anim_jump 0
-gUnknown_83E4128:: @ 83E4128
- .incbin "baserom.gba", 0x3E4128, 0x2C
+gUnknown_83E3D4C:: @ 83E3D4C
+ .4byte gUnknown_83E3D3C
-gUnknown_83E4154:: @ 83E4154
- .incbin "baserom.gba", 0x3E4154, 0x18
+gUnknown_83E3D50:: @ 83E3D50
+ spr_template 10100, 10100, gOamData_83ACA30, gUnknown_83E3D38, NULL, gDummySpriteAffineAnimTable, sub_80A7A88
-gUnknown_83E416C:: @ 83E416C
- .incbin "baserom.gba", 0x3E416C, 0x44
+gUnknown_83E3D68:: @ 83E3D68
+ spr_template 10100, 10100, gOamData_83ACA30, gUnknown_83E3D38, NULL, gUnknown_83E3D4C, sub_80A7B3C
-gUnknown_83E41B0::
- .incbin "baserom.gba", 0x3E41B0, 0x18
+gUnknown_83E3D80:: @ 83E3D80
+ obj_rot_scal_anim_frame 0, 0, 20, 1
+ obj_rot_scal_anim_jump 0
-gUnknown_83E41C8:: @ 83E41C8
- .incbin "baserom.gba", 0x3E41C8, 0x8
+gUnknown_83E3D90:: @ 83E3D90
+ .4byte gUnknown_83E3D80
-gUnknown_83E41D0::
- .incbin "baserom.gba", 0x3E41D0, 0x18
+gUnknown_83E3D94:: @ 83E3D94
+ spr_template 10006, 10006, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gUnknown_83E3D90, sub_80A7BC4
-gUnknown_83E41E8::
- .incbin "baserom.gba", 0x3E41E8, 0x18
+gUnknown_83E3DAC:: @ 83E3DAC
+ obj_rot_scal_anim_frame 16, 256, 0, 0
+ obj_rot_scal_anim_frame 4, 0, 0, 40
+ obj_rot_scal_anim_end
-gUnknown_83E4200:: @ 83E4200
- .incbin "baserom.gba", 0x3E4200, 0x18
+gUnknown_83E3DC4:: @ 83E3DC4
+ .4byte gUnknown_83E3DAC
-gUnknown_83E4218::
- .incbin "baserom.gba", 0x3E4218, 0x18
+gUnknown_83E3DC8:: @ 83E3DC8
+ spr_template 10009, 10009, gOamData_83ACA80, gDummySpriteAnimTable, NULL, gUnknown_83E3DC4, sub_80A7D04
-gUnknown_83E4230::
- .incbin "baserom.gba", 0x3E4230, 0x18
+gUnknown_83E3DE0:: @ 83E3DE0
+ obj_image_anim_frame 0, 3
+ obj_image_anim_frame 16, 3
+ obj_image_anim_frame 32, 20
+ obj_image_anim_end
-gUnknown_83E4248::
- .incbin "baserom.gba", 0x3E4248, 0x34
+gUnknown_83E3DF0:: @ 83E3DF0
+ obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 16, 3, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 32, 20, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
-gUnknown_83E427C::
- .incbin "baserom.gba", 0x3E427C, 0x18
+gUnknown_83E3E00:: @ 83E3E00
+ .4byte gUnknown_83E3DE0
+ .4byte gUnknown_83E3DF0
-gUnknown_83E4294::
- .incbin "baserom.gba", 0x3E4294, 0x34
+gUnknown_83E3E08:: @ 83E3E08
+ spr_template 10138, 10138, gOamData_83ACAF8, gUnknown_83E3E00, NULL, gDummySpriteAffineAnimTable, sub_80A7D64
-gUnknown_83E42C8::
- .incbin "baserom.gba", 0x3E42C8, 0x34
+gUnknown_83E3E20:: @ 83E3E20
+ obj_image_anim_frame 0, 2
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 32, 1
+ obj_image_anim_end
-gUnknown_83E42FC::
- .incbin "baserom.gba", 0x3E42FC, 0x24
+gUnknown_83E3E30:: @ 83E3E30
+ obj_image_anim_frame 0, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 16, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 32, 1, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
-gUnknown_83E4320::
- .incbin "baserom.gba", 0x3E4320, 0x18
+gUnknown_83E3E40:: @ 83E3E40
+ .4byte gUnknown_83E3E20
+ .4byte gUnknown_83E3E30
-gUnknown_83E4338::
- .incbin "baserom.gba", 0x3E4338, 0x30
+gUnknown_83E3E48:: @ 83E3E48
+ spr_template 10138, 10138, gOamData_83ACAF8, gUnknown_83E3E40, NULL, gDummySpriteAffineAnimTable, sub_80A7E14
-gUnknown_83E4368::
- .incbin "baserom.gba", 0x3E4368, 0x48
+gUnknown_83E3E60:: @ 83E3E60
+ obj_rot_scal_anim_frame -6, 4, 0, 8
+ obj_rot_scal_anim_frame 10, -10, 0, 8
+ obj_rot_scal_anim_frame -4, 6, 0, 8
+ obj_rot_scal_anim_end
-gUnknown_83E43B0::
- .incbin "baserom.gba", 0x3E43B0, 0x48
+gUnknown_83E3E80:: @ 83E3E80
+ obj_rot_scal_anim_frame -4, -5, 0, 12
+ obj_rot_scal_anim_frame 0, 0, 0, 24
+ obj_rot_scal_anim_frame 4, 5, 0, 12
+ obj_rot_scal_anim_end
+
+gUnknown_83E3EA0:: @ 83E3EA0
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 4, 40, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 12, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
-gUnknown_83E43F8::
- .incbin "baserom.gba", 0x3E43F8, 0x18
+gUnknown_83E3EB4:: @ 83E3EB4
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 4, 40
+ obj_image_anim_frame 8, 4
+ obj_image_anim_frame 12, 4
+ obj_image_anim_end
-gUnknown_83E4410:: @ 83E4410
- .incbin "baserom.gba", 0x3E4410, 0x20
+gUnknown_83E3EC8:: @ 83E3EC8
+ .4byte gUnknown_83E3EA0
+ .4byte gUnknown_83E3EB4
-gUnknown_83E4430::
- .incbin "baserom.gba", 0x3E4430, 0x54
+gUnknown_83E3ED0:: @ 83E3ED0
+ spr_template 10086, 10086, gOamData_83AC9D0, gUnknown_83E3EC8, NULL, gDummySpriteAffineAnimTable, sub_80A851C
-gUnknown_83E4484::
- .incbin "baserom.gba", 0x3E4484, 0x18
+gUnknown_83E3EE8:: @ 83E3EE8
+ obj_rot_scal_anim_frame 11, 11, 0, 8
+ obj_rot_scal_anim_frame -11, -11, 0, 8
+ obj_rot_scal_anim_end
-gUnknown_83E449C::
- .incbin "baserom.gba", 0x3E449C, 0x40
+gUnknown_83E3F00:: @ 83E3F00
+ .4byte gUnknown_83E3EE8
-gUnknown_83E44DC::
- .incbin "baserom.gba", 0x3E44DC, 0x13BC
+gUnknown_83E3F04:: @ 83E3F04
+ spr_template 10087, 10087, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gUnknown_83E3F00, sub_80A85AC
-gUnknown_83E5898:: @ 83E5898
- .incbin "baserom.gba", 0x3E5898, 0x48
+gUnknown_83E3F1C:: @ 83E3F1C
+ obj_rot_scal_anim_frame -10, 9, 0, 7
+ obj_rot_scal_anim_frame 20, -20, 0, 7
+ obj_rot_scal_anim_frame -20, 20, 0, 7
+ obj_rot_scal_anim_frame 10, -9, 0, 7
+ obj_rot_scal_anim_loop 2
+ obj_rot_scal_anim_end
+
+gUnknown_83E3F4C:: @ 83E3F4C
+ spr_template 10002, 10002, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A8A1C
+
+gUnknown_83E3F64:: @ 83E3F64
+ spr_template 10197, 10197, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, AnimSnoreZ
+
+gUnknown_83E3F7C:: @ 83E3F7C
+ obj_image_anim_frame 0, 5
+ obj_image_anim_frame 16, 5
+ obj_image_anim_frame 32, 5
+ obj_image_anim_frame 48, 5
+ obj_image_anim_end
-gUnknown_83E58E0::
- .incbin "baserom.gba", 0x3E58E0, 0x4C
+gUnknown_83E3F90:: @ 83E3F90
+ .4byte gUnknown_83E3F7C
-gUnknown_83E592C::
- .incbin "baserom.gba", 0x3E592C, 0x2C
+gUnknown_83E3F94:: @ 83E3F94
+ spr_template 10198, 10198, gOamData_83AC9D8, gUnknown_83E3F90, NULL, gDummySpriteAffineAnimTable, AnimSpriteOnMonPos
-gUnknown_83E5958:: @ 83E5958
- .incbin "baserom.gba", 0x3E5958, 0x4
+gUnknown_83E3FAC:: @ 83E3FAC
+ obj_rot_scal_anim_frame 0, 0, 248, 2
+ obj_rot_scal_anim_frame 0, 0, 8, 4
+ obj_rot_scal_anim_frame 0, 0, 248, 2
+ obj_rot_scal_anim_jump 0
-gUnknown_83E595C::
- .incbin "baserom.gba", 0x3E595C, 0x18
+gUnknown_83E3FCC:: @ 83E3FCC
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_end
-gUnknown_83E5974::
- .incbin "baserom.gba", 0x3E5974, 0x18
+gUnknown_83E3FDC:: @ 83E3FDC
+ obj_rot_scal_anim_frame -8, 4, 0, 8
+ obj_rot_scal_anim_loop 0
+ obj_rot_scal_anim_frame 16, -8, 0, 8
+ obj_rot_scal_anim_frame -16, 8, 0, 8
+ obj_rot_scal_anim_loop 1
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_frame 0, 0, 0, 15
+ obj_rot_scal_anim_end
-gUnknown_83E598C::
- .incbin "baserom.gba", 0x3E598C, 0x18
+gUnknown_83E401C:: @ 83E401C
+ .4byte gUnknown_83E3FAC
+ .4byte gUnknown_83E3FCC
+ .4byte gUnknown_83E3FDC
-gUnknown_83E59A4::
- .incbin "baserom.gba", 0x3E59A4, 0x2C
+gUnknown_83E4028:: @ 83E4028
+ spr_template 10202, 10202, gOamData_83ACBB8, gDummySpriteAnimTable, NULL, gUnknown_83E401C, sub_80A8F38
-gUnknown_83E59D0::
- .incbin "baserom.gba", 0x3E59D0, 0x18
+gUnknown_83E4040:: @ 83E4040
+ obj_rot_scal_anim_frame 16, 16, 0, 0
+ obj_rot_scal_anim_frame 16, 16, 0, 30
+ obj_rot_scal_anim_end 1
-gUnknown_83E59E8::
- .incbin "baserom.gba", 0x3E59E8, 0x50
+gUnknown_83E4058:: @ 83E4058
+ obj_rot_scal_anim_frame 16, 16, 0, 0
+ obj_rot_scal_anim_frame 32, 32, 0, 15
+ obj_rot_scal_anim_end 1
-gUnknown_83E5A38::
- .incbin "baserom.gba", 0x3E5A38, 0x18
+gUnknown_83E4070:: @ 83E4070
+ obj_rot_scal_anim_frame 16, 16, 0, 0
+ obj_rot_scal_anim_frame 11, 11, 0, 45
+ obj_rot_scal_anim_end 1
-gUnknown_83E5A50::
- .incbin "baserom.gba", 0x3E5A50, 0x30
+gUnknown_83E4088:: @ 83E4088
+ .4byte gUnknown_83E4040
+ .4byte gUnknown_83E4058
-gUnknown_83E5A80::
- .incbin "baserom.gba", 0x3E5A80, 0x18
+gUnknown_83E4090:: @ 83E4090
+ .4byte gUnknown_83E4070
-gUnknown_83E5A98::
- .incbin "baserom.gba", 0x3E5A98, 0x18
+gUnknown_83E4094:: @ 83E4094
+ spr_template 10203, 10203, gOamData_83ACAA0, gDummySpriteAnimTable, NULL, gUnknown_83E4088, AnimSpriteOnMonPos
-gUnknown_83E5AB0::
- .incbin "baserom.gba", 0x3E5AB0, 0x18
+gUnknown_83E40AC:: @ 83E40AC
+ obj_rot_scal_anim_frame 512, 512, 0, 0
+ obj_rot_scal_anim_frame -16, -16, 0, 30
+ obj_rot_scal_anim_end 1
-gUnknown_83E5AC8::
- .incbin "baserom.gba", 0x3E5AC8, 0x18
+gUnknown_83E40C4:: @ 83E40C4
+ .4byte gUnknown_83E40AC
-gUnknown_83E5AE0:: @ 83E5AE0
- .incbin "baserom.gba", 0x3E5AE0, 0x90
+gUnknown_83E40C8:: @ 83E40C8
+ spr_template 10203, 10203, gOamData_83ACBC0, gDummySpriteAnimTable, NULL, gUnknown_83E40C4, AnimSpriteOnMonPos
-gUnknown_83E5B70::
- .incbin "baserom.gba", 0x3E5B70, 0x18
+gUnknown_83E40E0:: @ 83E40E0
+ spr_template 10203, 10203, gOamData_83ACBC0, gDummySpriteAnimTable, NULL, gUnknown_83E4088, sub_80A8BC4
-gUnknown_83E5B88:: @ 83E5B88
- .incbin "baserom.gba", 0x3E5B88, 0x18
+gUnknown_83E40F8:: @ 83E40F8
+ spr_template 10203, 10203, gOamData_83ACBC0, gDummySpriteAnimTable, NULL, gUnknown_83E4090, sub_80A8CA4
-gUnknown_83E5BA0::
- .incbin "baserom.gba", 0x3E5BA0, 0x40
+gUnknown_83E4110:: @ 83E4110
+ spr_template 10203, 10203, gOamData_83ACBC0, gDummySpriteAnimTable, NULL, gUnknown_83E4088, sub_80A8EE8
-gUnknown_83E5BE0::
- .incbin "baserom.gba", 0x3E5BE0, 0x18
+gUnknown_83E4128:: @ 83E4128
+ obj_rot_scal_anim_frame 96, -13, 0, 8
+ obj_rot_scal_anim_end
+
+gUnknown_83E4138:: @ 83E4138
+ obj_image_anim_frame 0, 3
+ obj_image_anim_frame 4, 3
+ obj_image_anim_frame 8, 3
+ obj_image_anim_frame 4, 3
+ obj_image_anim_frame 0, 3
+ obj_image_anim_end
-gUnknown_83E5BF8::
- .incbin "baserom.gba", 0x3E5BF8, 0x78
+gUnknown_83E4150:: @ 83E4150
+ .4byte gUnknown_83E4138
-gUnknown_83E5C70::
- .incbin "baserom.gba", 0x3E5C70, 0x18
+gUnknown_83E4154:: @ 83E4154
+ spr_template 10207, 10207, gOamData_83AC9D0, gUnknown_83E4150, NULL, gDummySpriteAffineAnimTable, sub_80A9648
-gUnknown_83E5C88::
- .incbin "baserom.gba", 0x3E5C88, 0x18
+gUnknown_83E416C:: @ 83E416C
+ .byte 0x1e, 0x1c, 0xec, 0x18, 0x10, 0x1a, 0xf6, 0x1c
+
+gUnknown_83E4174:: @ 83E4174
+ obj_image_anim_frame 0, 6
+ obj_image_anim_frame 16, 6
+ obj_image_anim_frame 32, 15
+ obj_image_anim_frame 16, 6
+ obj_image_anim_frame 0, 6
+ obj_image_anim_frame 16, 6, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 15, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 6, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0, 6
+ obj_image_anim_frame 16, 6
+ obj_image_anim_frame 32, 15
+ obj_image_anim_frame 16, 6
+ obj_image_anim_frame 0, 6
+ obj_image_anim_end
-gUnknown_83E5CA0::
- .incbin "baserom.gba", 0x3E5CA0, 0x78
+gUnknown_83E41AC:: @ 83E41AC
+ .4byte gUnknown_83E4174
-gUnknown_83E5D18::
- .incbin "baserom.gba", 0x3E5D18, 0x30
+gUnknown_83E41B0:: @ 83E41B0
+ spr_template 10205, 10205, gOamData_83AC9D8, gUnknown_83E41AC, NULL, gDummySpriteAffineAnimTable, AnimSpriteOnMonPos
-@ ================
-gUnknown_83E5D48:: @ 83E5D48
- .incbin "baserom.gba", 0x3E5D48, 0x4
+gUnknown_83E41C8:: @ 83E41C8
+ .2byte 10206, 9999, 9998
-gUnknown_83E5D4C::
- .incbin "baserom.gba", 0x3E5D4C, 0x18
+ .align 2
+gUnknown_83E41D0:: @ 83E41D0
+ spr_template 10206, 10206, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A97E8
-gUnknown_83E5D64::
- .incbin "baserom.gba", 0x3E5D64, 0x18
+gUnknown_83E41E8:: @ 83E41E8
+ spr_template 10210, 10210, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A9860
-gUnknown_83E5D7C::
- .incbin "baserom.gba", 0x3E5D7C, 0x18
+gUnknown_83E4200:: @ 83E4200
+ obj_rot_scal_anim_frame 10, -13, 0, 10
+ obj_rot_scal_anim_frame -10, 13, 0, 10
+ obj_rot_scal_anim_end
-gUnknown_83E5D94::
- .incbin "baserom.gba", 0x3E5D94, 0x50
+gUnknown_83E4218:: @ 83E4218
+ spr_template 10216, 10216, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A9B40
-gUnknown_83E5DE4::
- .incbin "baserom.gba", 0x3E5DE4, 0x18
+gUnknown_83E4230:: @ 83E4230
+ spr_template 10216, 10216, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A9BC4
-gUnknown_83E5DFC::
- .incbin "baserom.gba", 0x3E5DFC, 0x18
+gUnknown_83E4248:: @ 83E4248
+ spr_template 10216, 10216, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A9C4C
-gUnknown_83E5E14::
- .incbin "baserom.gba", 0x3E5E14, 0x18
+gUnknown_83E4260:: @ 83E4260
+ obj_rot_scal_anim_frame 128, 128, 0, 0
+ obj_rot_scal_anim_frame 8, 8, 0, 1
+ obj_rot_scal_anim_jump 1
-gUnknown_83E5E2C:: @ 83E5E2C
- .incbin "baserom.gba", 0x3E5E2C, 0x18
+gUnknown_83E4278:: @ 83E4278
+ .4byte gUnknown_83E4260
-gUnknown_83E5E44:: @ 83E5E44
- .incbin "baserom.gba", 0x3E5E44, 0x2
+gUnknown_83E427C:: @ 83E427C
+ spr_template 10217, 10217, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gUnknown_83E4278, sub_80AA174
-gUnknown_83E5E46:: @ 83E5E46
- .incbin "baserom.gba", 0x3E5E46, 0x1A
+gUnknown_83E4294:: @ 83E4294
+ spr_template 10217, 10217, gOamData_83ACA90, gDummySpriteAnimTable, NULL, gUnknown_83E4278, sub_80AA2B0
-gUnknown_83E5E60::
- .incbin "baserom.gba", 0x3E5E60, 0x54
+gUnknown_83E42AC:: @ 83E42AC
+ obj_rot_scal_anim_frame 128, 128, 0, 0
+ obj_rot_scal_anim_frame 8, 8, 0, 1
+ obj_rot_scal_anim_jump 1
-gUnknown_83E5EB4::
- .incbin "baserom.gba", 0x3E5EB4, 0x30
+gUnknown_83E42C4:: @ 83E42C4
+ .4byte gUnknown_83E42AC
-gUnknown_83E5EE4::
- .incbin "baserom.gba", 0x3E5EE4, 0x18
+gUnknown_83E42C8:: @ 83E42C8
+ spr_template 10237, 10237, gOamData_83ACA88, gDummySpriteAnimTable, NULL, gUnknown_83E42C4, sub_80AA37C
-gUnknown_83E5EFC:: @ 83E5EFC
- .incbin "baserom.gba", 0x3E5EFC, 0x10
+gUnknown_83E42E0:: @ 83E42E0
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 4, 4
+ obj_image_anim_frame 8, 4
+ obj_image_anim_frame 4, 4
+ obj_image_anim_frame 0, 4
+ obj_image_anim_end
-gUnknown_83E5F0C:: @ 83E5F0C
- .incbin "baserom.gba", 0x3E5F0C, 0x2C
+gUnknown_83E42F8:: @ 83E42F8
+ .4byte gUnknown_83E42E0
-gUnknown_83E5F38:: @ 83E5F38
- .incbin "baserom.gba", 0x3E5F38, 0x8C
+gUnknown_83E42FC:: @ 83E42FC
+ spr_template 10218, 10218, gOamData_83AC9D0, gUnknown_83E42F8, NULL, gDummySpriteAffineAnimTable, sub_80AA3F0
-gUnknown_83E5FC4::
- .incbin "baserom.gba", 0x3E5FC4, 0x18
+gUnknown_83E4314:: @ 83E4314
+ obj_image_anim_frame 0, 24
+ obj_image_anim_end
-gUnknown_83E5FDC::
- .incbin "baserom.gba", 0x3E5FDC, 0x2C
+gUnknown_83E431C:: @ 83E431C
+ .4byte gUnknown_83E4314
-gUnknown_83E6008::
- .incbin "baserom.gba", 0x3E6008, 0x50
+gUnknown_83E4320:: @ 83E4320
+ spr_template 10220, 10220, gOamData_83AC9D8, gUnknown_83E431C, NULL, gDummySpriteAffineAnimTable, sub_80AA408
-gUnknown_83E6058::
- .incbin "baserom.gba", 0x3E6058, 0x18
+gUnknown_83E4338:: @ 83E4338
+ spr_template 10219, 10219, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80AA508
-gUnknown_83E6070::
- .incbin "baserom.gba", 0x3E6070, 0x18
+gUnknown_83E4350:: @ 83E4350
+ obj_image_anim_frame 0, 3
+ obj_image_anim_jump 0
-gUnknown_83E6088::
- .incbin "baserom.gba", 0x3E6088, 0x18
+gUnknown_83E4358:: @ 83E4358
+ obj_image_anim_frame 16, 3
+ obj_image_anim_jump 0
-gUnknown_83E60A0:: @ 83E60A0
- .incbin "baserom.gba", 0x3E60A0, 0x18
+gUnknown_83E4360:: @ 83E4360
+ .4byte gUnknown_83E4350
+ .4byte gUnknown_83E4358
-gUnknown_83E60B8:: @ 83E60B8
- .incbin "baserom.gba", 0x3E60B8, 0x18
+gUnknown_83E4368:: @ 83E4368
+ spr_template 10221, 10221, gOamData_83AC9D8, gUnknown_83E4360, NULL, gDummySpriteAffineAnimTable, sub_80AA58C
-gUnknown_83E60D0:: @ 83E60D0
- .incbin "baserom.gba", 0x3E60D0, 0x50
+gUnknown_83E4380:: @ 83E4380
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 16, 4
+ obj_image_anim_frame 32, 4
+ obj_image_anim_frame 48, 4
+ obj_image_anim_end
-gUnknown_83E6120:: @ 83E6120
- .incbin "baserom.gba", 0x3E6120, 0xB4
+gUnknown_83E4394:: @ 83E4394
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 48, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E43A8:: @ 83E43A8
+ .4byte gUnknown_83E4380
+ .4byte gUnknown_83E4394
+
+gUnknown_83E43B0:: @ 83E43B0
+ spr_template 10222, 10222, gOamData_83AC9D8, gUnknown_83E43A8, NULL, gDummySpriteAffineAnimTable, sub_80AA6B8
+
+gUnknown_83E43C8:: @ 83E43C8
+ obj_image_anim_frame 0, 8
+ obj_image_anim_frame 16, 8
+ obj_image_anim_frame 32, 8
+ obj_image_anim_frame 16, 8
+ obj_image_anim_end
+
+gUnknown_83E43DC:: @ 83E43DC
+ obj_image_anim_frame 16, 8, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 8, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 8, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0, 8, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
-gUnknown_83E61D4::
- .incbin "baserom.gba", 0x3E61D4, 0x30
+gUnknown_83E43F0:: @ 83E43F0
+ .4byte gUnknown_83E43C8
+ .4byte gUnknown_83E43DC
-gUnknown_83E6204::
- .incbin "baserom.gba", 0x3E6204, 0x18
+gUnknown_83E43F8:: @ 83E43F8
+ spr_template 10215, 10215, gOamData_83AC9D8, gUnknown_83E43F0, NULL, gDummySpriteAffineAnimTable, sub_80AA708
-gUnknown_83E621C::
- .incbin "baserom.gba", 0x3E621C, 0x5C
+gUnknown_83E4410:: @ 83E4410
+ obj_rot_scal_anim_frame -12, 8, 0, 4
+ obj_rot_scal_anim_frame 20, -20, 0, 4
+ obj_rot_scal_anim_frame -8, 12, 0, 4
+ obj_rot_scal_anim_end
+
+gUnknown_83E4430:: @ 83E4430
+ spr_template 10225, 10225, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80AA838
+
+gUnknown_83E4448:: @ 83E4448
+ obj_rot_scal_anim_frame 0, 0, 0, 5
+ obj_rot_scal_anim_end
+
+gUnknown_83E4458:: @ 83E4458
+ obj_rot_scal_anim_frame 0, 0, 248, 16
+ obj_rot_scal_anim_end 1
+
+gUnknown_83E4468:: @ 83E4468
+ obj_rot_scal_anim_frame 0, 0, 8, 16
+ obj_rot_scal_anim_end 1
+
+gUnknown_83E4478:: @ 83E4478
+ .4byte gUnknown_83E4448
+ .4byte gUnknown_83E4458
+ .4byte gUnknown_83E4468
+
+gUnknown_83E4484:: @ 83E4484
+ spr_template 10206, 10206, gOamData_83ACA30, gUnknown_83E3844, NULL, gUnknown_83E4478, sub_80AA998
+
+gUnknown_83E449C:: @ 83E449C
+ spr_template 10206, 10206, gOamData_83ACA30, gUnknown_83E3844, NULL, gUnknown_83E4478, sub_80AA938
+
+gUnknown_83E44B4:: @ 83E44B4
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E44C4:: @ 83E44C4
+ obj_rot_scal_anim_frame 512, 256, 0, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E44D4:: @ 83E44D4
+ .4byte gUnknown_83E44B4
+ .4byte gUnknown_83E44C4
+
+gUnknown_83E44DC:: @ 83E44DC
+ spr_template 10244, 10244, gOamData_83ACBE0, gDummySpriteAnimTable, NULL, gUnknown_83E44D4, sub_80AAAE4
+
+gUnknown_83E44F4:: @ 83E44F4
+ .incbin "graphics/battle_anims/unk_83E4874.4bpp"
+
+gUnknown_83E4874::
+ .incbin "graphics/battle_anims/unk_83E4874.bin"
+
+gUnknown_83E5874:: @ 83E5874
+ obj_image_anim_frame 0, 2
+ obj_image_anim_frame 8, 2
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 24, 6
+ obj_image_anim_frame 32, 2
+ obj_image_anim_frame 40, 2
+ obj_image_anim_frame 48, 2
+ obj_image_anim_end
-gUnknown_83E6278:: @ 83E6278
- .incbin "baserom.gba", 0x3E6278, 0x18
+gUnknown_83E5894:: @ 83E5894
+ .4byte gUnknown_83E5874
-gUnknown_83E6290::
- .incbin "baserom.gba", 0x3E6290, 0x18
+gUnknown_83E5898:: @ 83E5898
+ spr_template 10115, 10115, gOamData_83ACA18, gUnknown_83E5894, NULL, gDummySpriteAffineAnimTable, sub_80AAC54
-gUnknown_83E62A8:: @ 83E62A8
- .incbin "baserom.gba", 0x3E62A8, 0xA0
+gUnknown_83E58B0:: @ 83E58B0
+ obj_rot_scal_anim_frame -5, -5, 0, 10
+ obj_rot_scal_anim_frame 5, 5, 0, 10
+ obj_rot_scal_anim_jump 0
-gUnknown_83E6348::
- .incbin "baserom.gba", 0x3E6348, 0x18
+gUnknown_83E58C8:: @ 83E58C8
+ .4byte gUnknown_83E58B0
-gUnknown_83E6360::
- .incbin "baserom.gba", 0x3E6360, 0x2C
+gUnknown_83E58CC:: @ 83E58CC
+ obj_image_anim_frame 0, 1
+ obj_image_anim_frame 4, 5
+ obj_image_anim_frame 8, 5
+ obj_image_anim_end
-gUnknown_83E638C::
- .incbin "baserom.gba", 0x3E638C, 0x18
+gUnknown_83E58DC:: @ 83E58DC
+ .4byte gUnknown_83E58CC
-gUnknown_83E63A4::
- .incbin "baserom.gba", 0x3E63A4, 0x3C
+gUnknown_83E58E0:: @ 83E58E0
+ spr_template 10146, 10146, gOamData_83ACB50, gUnknown_83E58DC, NULL, gUnknown_83E58C8, sub_80AAC98
-gUnknown_83E63E0:: @ 83E63E0
- .incbin "baserom.gba", 0x3E63E0, 0x18
+gUnknown_83E58F8:: @ 83E58F8
+ obj_image_anim_frame 0, 1
+ obj_image_anim_end
-gUnknown_83E63F8::
- .incbin "baserom.gba", 0x3E63F8, 0x18
+gUnknown_83E5900:: @ 83E5900
+ obj_image_anim_frame 4, 1
+ obj_image_anim_end
-gUnknown_83E6410::
- .incbin "baserom.gba", 0x3E6410, 0x18
+gUnknown_83E5908:: @ 83E5908
+ .4byte gUnknown_83E58F8
+ .4byte gUnknown_83E5900
-gUnknown_83E6428::
- .incbin "baserom.gba", 0x3E6428, 0x18
+gUnknown_83E5910:: @ 83E5910
+ obj_rot_scal_anim_frame 0, 0, 0, 1
+ obj_rot_scal_anim_frame 96, 96, 0, 1
+ obj_rot_scal_anim_end
-gUnknown_83E6440::
- .incbin "baserom.gba", 0x3E6440, 0x3C
+gUnknown_83E5928:: @ 83E5928
+ .4byte gUnknown_83E5910
-gUnknown_83E647C::
- .incbin "baserom.gba", 0x3E647C, 0x28
+gUnknown_83E592C:: @ 83E592C
+ spr_template 10140, 10140, gOamData_83ACAC8, gUnknown_83E5908, NULL, gUnknown_83E5928, sub_80AAE84
-gUnknown_83E64A4::
- .incbin "baserom.gba", 0x3E64A4, 0x18
+gUnknown_83E5944:: @ 83E5944
+ obj_image_anim_frame 0, 1
+ obj_image_anim_frame 4, 1
+ obj_image_anim_frame 8, 1
+ obj_image_anim_frame 12, 1
+ obj_image_anim_jump 0
-gUnknown_83E64BC::
- .incbin "baserom.gba", 0x3E64BC, 0x18
+gUnknown_83E5958:: @ 83E5958
+ .4byte gUnknown_83E5944
-gUnknown_83E64D4:: @ 83E64D4
- .incbin "baserom.gba", 0x3E64D4, 0x14
+gUnknown_83E595C:: @ 83E595C
+ spr_template 10149, 10149, gOamData_83ACAF0, gUnknown_83E5958, NULL, gDummySpriteAffineAnimTable, sub_80AB024
-gUnknown_83E64E8::
- .incbin "baserom.gba", 0x3E64E8, 0x18
+gUnknown_83E5974:: @ 83E5974
+ spr_template 10259, 10259, gOamData_83ACAF0, gUnknown_83E5958, NULL, gDummySpriteAffineAnimTable, sub_80AB024
-gUnknown_83E6500:: @ 83E6500
- .incbin "baserom.gba", 0x3E6500, 0x14
+gUnknown_83E598C:: @ 83E598C
+ spr_template 10264, 10264, gOamData_83AC9C8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80AB024
-gUnknown_83E6514::
- .incbin "baserom.gba", 0x3E6514, 0x18
+gUnknown_83E59A4:: @ 83E59A4
+ spr_template 10265, 10265, gOamData_83AC9C8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80AB024
-gUnknown_83E652C:: @ 83E652C
- .incbin "baserom.gba", 0x3E652C, 0x78
+gUnknown_83E59BC:: @ 83E59BC
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 32, 2
+ obj_image_anim_frame 48, 2
+ obj_image_anim_jump 0
-gUnknown_83E65A4:: @ 83E65A4
- .incbin "baserom.gba", 0x3E65A4, 0x18
+gUnknown_83E59CC:: @ 83E59CC
+ .4byte gUnknown_83E59BC
-gUnknown_83E65BC::
- .incbin "baserom.gba", 0x3E65BC, 0xA0
+gUnknown_83E59D0:: @ 83E59D0
+ spr_template 10029, 10029, gOamData_83AC9D8, gUnknown_83E59CC, NULL, gDummySpriteAffineAnimTable, sub_80AB024
-gUnknown_83E665C::
- .incbin "baserom.gba", 0x3E665C, 0x18
+gUnknown_83E59E8:: @ 83E59E8
+ spr_template 10165, 10165, gOamData_83ACAD8, gDummySpriteAnimTable, NULL, gUnknown_83E3C98, sub_80AB024
-gUnknown_83E6674::
- .incbin "baserom.gba", 0x3E6674, 0x6C
+gUnknown_83E5A00:: @ 83E5A00
+ obj_rot_scal_anim_frame 3, 3, 10, 50
+ obj_rot_scal_anim_frame 0, 0, 0, 10
+ obj_rot_scal_anim_frame -20, -20, 246, 20
+ obj_rot_scal_anim_end
-gUnknown_83E66E0::
- .incbin "baserom.gba", 0x3E66E0, 0x18
+gUnknown_83E5A20:: @ 83E5A20
+ obj_rot_scal_anim_frame 336, 336, 0, 0
+ obj_rot_scal_anim_end
-gUnknown_83E66F8::
- .incbin "baserom.gba", 0x3E66F8, 0x18
+gUnknown_83E5A30:: @ 83E5A30
+ .4byte gUnknown_83E5A00
-gUnknown_83E6710::
- .incbin "baserom.gba", 0x3E6710, 0x18
+gUnknown_83E5A34:: @ 83E5A34
+ .4byte gUnknown_83E5A20
-gUnknown_83E6728::
- .incbin "baserom.gba", 0x3E6728, 0x18
+gUnknown_83E5A38:: @ 83E5A38
+ spr_template 10149, 10149, gOamData_83ACBB0, gUnknown_83E5958, NULL, gUnknown_83E5A30, sub_80AB168
-gUnknown_83E6740::
- .incbin "baserom.gba", 0x3E6740, 0x18
+gUnknown_83E5A50:: @ 83E5A50
+ spr_template 10149, 10149, gOamData_83ACBB0, gUnknown_83E5958, NULL, gUnknown_83E5A34, sub_80AB1F8
-gUnknown_83E6758::
- .incbin "baserom.gba", 0x3E6758, 0x34
+gUnknown_83E5A68:: @ 83E5A68
+ obj_image_anim_frame 0, 1
+ obj_image_anim_end
-gUnknown_83E678C::
- .incbin "baserom.gba", 0x3E678C, 0x34
+gUnknown_83E5A70:: @ 83E5A70
+ obj_image_anim_frame 4, 1
+ obj_image_anim_end
-gUnknown_83E67C0::
- .incbin "baserom.gba", 0x3E67C0, 0x18
+gUnknown_83E5A78:: @ 83E5A78
+ .4byte gUnknown_83E5A68
-gUnknown_83E67D8::
- .incbin "baserom.gba", 0x3E67D8, 0x18
+gUnknown_83E5A7C:: @ 83E5A7C
+ .4byte gUnknown_83E5A70
-gUnknown_83E67F0::
- .incbin "baserom.gba", 0x3E67F0, 0x18
+gUnknown_83E5A80:: @ 83E5A80
+ spr_template 10155, 10155, gOamData_83ACAF0, gUnknown_83E5A78, NULL, gDummySpriteAffineAnimTable, AnimThrowProjectile
-gUnknown_83E6808::
- .incbin "baserom.gba", 0x3E6808, 0x18
+gUnknown_83E5A98:: @ 83E5A98
+ spr_template 10155, 10155, gOamData_83ACBB0, gUnknown_83E5A7C, NULL, gUnknown_83E6A80, sub_80AB2CC
-gUnknown_83E6820::
- .incbin "baserom.gba", 0x3E6820, 0x44
+gUnknown_83E5AB0:: @ 83E5AB0
+ spr_template 10141, 10141, gOamData_83AC9C8, gUnknown_83E6330, NULL, gDummySpriteAffineAnimTable, sub_80AB308
-gUnknown_83E6864::
- .incbin "baserom.gba", 0x3E6864, 0x18
+gUnknown_83E5AC8:: @ 83E5AC8
+ spr_template 10155, 10155, gOamData_83AC9C8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80ABA78
-gUnknown_83E687C::
- .incbin "baserom.gba", 0x3E687C, 0x18
+gUnknown_83E5AE0:: @ 83E5AE0
+ spr_template 10268, 10268, gOamData_83AC9C8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80ABF60
-gUnknown_83E6894::
- .incbin "baserom.gba", 0x3E6894, 0x18
+gUnknown_83E5AF8:: @ 83E5AF8
+ obj_image_anim_frame 8, 1
+ obj_image_anim_end
-gUnknown_83E68AC::
- .incbin "baserom.gba", 0x3E68AC, 0x54
+gUnknown_83E5B00:: @ 83E5B00
+ obj_image_anim_frame 9, 1
+ obj_image_anim_end
-gUnknown_83E6900::
- .incbin "baserom.gba", 0x3E6900, 0x48
+gUnknown_83E5B08:: @ 83E5B08
+ obj_image_anim_frame 4, 1
+ obj_image_anim_end
-gUnknown_83E6948::
- .incbin "baserom.gba", 0x3E6948, 0x34
+gUnknown_83E5B10:: @ 83E5B10
+ .4byte gUnknown_83E5AF8
+ .4byte gUnknown_83E5B00
-gUnknown_83E697C::
- .incbin "baserom.gba", 0x3E697C, 0x30
+gUnknown_83E5B18:: @ 83E5B18
+ .4byte gUnknown_83E5B08
-gUnknown_83E69AC::
- .incbin "baserom.gba", 0x3E69AC, 0x74
+gUnknown_83E5B1C:: @ 83E5B1C
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_frame -10, -10, 0, 15
+ obj_rot_scal_anim_end
-gUnknown_83E6A20::
- .incbin "baserom.gba", 0x3E6A20, 0x18
+gUnknown_83E5B34:: @ 83E5B34
+ obj_rot_scal_anim_frame 224, 224, 0, 0
+ obj_rot_scal_anim_frame -8, -8, 0, 15
+ obj_rot_scal_anim_end
-gUnknown_83E6A38::
- .incbin "baserom.gba", 0x3E6A38, 0x18
+gUnknown_83E5B4C:: @ 83E5B4C
+ obj_rot_scal_anim_frame 336, 336, 0, 0
+ obj_rot_scal_anim_frame 0, 0, 0, 15
+ obj_rot_scal_anim_end
-gUnknown_83E6A50::
- .incbin "baserom.gba", 0x3E6A50, 0x34
+gUnknown_83E5B64:: @ 83E5B64
+ .4byte gUnknown_83E5B1C
+ .4byte gUnknown_83E5B34
-gUnknown_83E6A84::
- .incbin "baserom.gba", 0x3E6A84, 0x34
+gUnknown_83E5B6C:: @ 83E5B6C
+ .4byte gUnknown_83E5B4C
-gUnknown_83E6AB8::
- .incbin "baserom.gba", 0x3E6AB8, 0x18
+gUnknown_83E5B70:: @ 83E5B70
+ spr_template 10155, 10155, gOamData_83AC9C8, gUnknown_83E5B10, NULL, gDummySpriteAffineAnimTable, sub_80AC624
-gUnknown_83E6AD0::
- .incbin "baserom.gba", 0x3E6AD0, 0x18
+gUnknown_83E5B88:: @ 83E5B88
+ spr_template 10155, 10155, gOamData_83ACA28, gUnknown_83E5B10, NULL, gUnknown_83E5B64, sub_80AC698
+gUnknown_83E5BA0:: @ 83E5BA0
+ spr_template 10155, 10155, gOamData_83ACA30, gUnknown_83E5B18, NULL, gUnknown_83E5B6C, sub_8077350
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/battle_anim_special.s b/data/battle_anim_special.s
index 341f6b4df..967e27674 100644
--- a/data/battle_anim_special.s
+++ b/data/battle_anim_special.s
@@ -1,37 +1,148 @@
#include "constants/region_map.h"
#include "constants/flags.h"
#include "constants/moves.h"
+#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnknown_840BF3C:: @ 840BF3C
- .incbin "baserom.gba", 0x40BF3C, 0xC
+ .byte 10, 2, -3, 0
+ .byte 15, 0, -4, 0
+ .byte -10, 2, -4, 0
gUnknown_840BF48:: @ 840BF48
- .incbin "baserom.gba", 0x40BF48, 0x60
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55020
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55021
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55022
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55023
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55024
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55025
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55026
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55027
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55028
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55029
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55030
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55031
gUnknown_840BFA8:: @ 840BFA8
- .incbin "baserom.gba", 0x40BFA8, 0xC0
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55020
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55021
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55022
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55023
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55024
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55025
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55026
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55027
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55028
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55029
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55030
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55031
+
+gAnimCmd_840C008:: @ 840C008
+ obj_image_anim_frame 0x0000, 1
+ obj_image_anim_frame 0x0001, 1
+ obj_image_anim_frame 0x0002, 1
+ obj_image_anim_frame 0x0000, 1, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0002, 1
+ obj_image_anim_frame 0x0001, 1
+ obj_image_anim_jump 0x0000
+
+gAnimCmd_840C024:: @ 840C024
+ obj_image_anim_frame 0x0003, 1
+ obj_image_anim_end
+
+gAnimCmd_840C02C:: @ 840C02C
+ obj_image_anim_frame 0x0004, 1
+ obj_image_anim_end
+
+gAnimCmd_840C034:: @ 840C034
+ obj_image_anim_frame 0x0005, 1
+ obj_image_anim_end
+
+gAnimCmd_840C03C:: @ 840C03C
+ obj_image_anim_frame 0x0006, 4
+ obj_image_anim_frame 0x0007, 4
+ obj_image_anim_jump 0x0000
+
+gAnimCmd_840C048:: @ 840C048
+ obj_image_anim_frame 0x0007, 4
+ obj_image_anim_end
+
+gSpriteAnimTable_840C050::
+ .4byte gAnimCmd_840C008
+ .4byte gAnimCmd_840C024
+ .4byte gAnimCmd_840C02C
+ .4byte gAnimCmd_840C034
+ .4byte gAnimCmd_840C03C
+ .4byte gAnimCmd_840C048
gUnknown_840C068:: @ 840C068
- .incbin "baserom.gba", 0x40C068, 0xC
+ .byte 0x00, 0x00, 0x00, 0x05, 0x01, 0x02, 0x02, 0x03, 0x05, 0x05, 0x04, 0x04
gUnknown_840C074:: @ 840C074
- .incbin "baserom.gba", 0x40C074, 0x30
+ .4byte sub_80F06A4
+ .4byte sub_80F0C28
+ .4byte sub_80F0A20
+ .4byte sub_80F0B20
+ .4byte sub_80F0F10
+ .4byte sub_80F0A20
+ .4byte sub_80F091C
+ .4byte sub_80F0B20
+ .4byte sub_80F0DB4
+ .4byte sub_80F0818
+ .4byte sub_80F0C28
+ .4byte sub_80F103C
gUnknown_840C0A4:: @ 840C0A4
- .incbin "baserom.gba", 0x40C0A4, 0x60
+ spr_template 55020, 55020, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+
+gUnknown_840C0BC::
+ spr_template 55021, 55021, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55022, 55022, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55023, 55023, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_840C104:: @ 840C104
- .incbin "baserom.gba", 0x40C104, 0xC0
+ spr_template 55024, 55024, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55025, 55025, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55026, 55026, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55027, 55027, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55028, 55028, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55029, 55029, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55030, 55030, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55031, 55031, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_840C1C4:: @ 840C1C4
- .incbin "baserom.gba", 0x40C1C4, 0x28
+ .2byte RGB(31, 22, 30)
+ .2byte RGB(16, 23, 30)
+ .2byte RGB(23, 30, 20)
+ .2byte RGB(31, 31, 15)
+ .2byte RGB(23, 20, 28)
+ .2byte RGB(21, 31, 25)
+ .2byte RGB(12, 25, 30)
+ .2byte RGB(30, 27, 10)
+ .2byte RGB(31, 24, 16)
+ .2byte RGB(29, 30, 30)
+ .2byte RGB(31, 17, 10)
+ .2byte RGB(31, 9, 10)
+
+gUnknown_840C1DC:: @ 840C1DC
+ .byte 0x00, 0x00, 0x01, 0x02, 0x03
+ .byte 0x04, 0x01, 0x01, 0x00, 0x01
+ .byte 0x03, 0x05, 0x06, 0x05, 0x04
+ .align 2
gUnknown_840C1EC::
- .incbin "baserom.gba", 0x40C1EC, 0x24
+ spr_template 10269, 10269, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80F1B3C
+
+gUnknown_840C204::
+ obj_image_anim_frame 0x0040, 1
+ obj_image_anim_end
+
+gSpriteAnimTable_840C20C::
+ .4byte gUnknown_840C204
gUnknown_840C210::
- .incbin "baserom.gba", 0x40C210, 0x18
+ spr_template 10058, 10058, gOamData_83AC9D8, gSpriteAnimTable_840C20C, NULL, gDummySpriteAffineAnimTable, sub_80F1B3C
+
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/evolution_graphics.s b/data/evolution_graphics.s
deleted file mode 100644
index 08276557a..000000000
--- a/data/evolution_graphics.s
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "constants/region_map.h"
-#include "constants/flags.h"
-#include "constants/moves.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-
-gUnknown_841EE84:: @ 841EE84
- .incbin "baserom.gba", 0x41EE84, 0x40
-
-gUnknown_841EEC4:: @ 841EEC4
- .incbin "baserom.gba", 0x41EEC4, 0x10
-
-gUnknown_841EED4:: @ 841EED4
- .incbin "baserom.gba", 0x41EED4, 0x24
-
-gUnknown_841EEF8:: @ 841EEF8
- .incbin "baserom.gba", 0x41EEF8, 0x18
-
-gUnknown_841EF10:: @ 841EF10
- .incbin "baserom.gba", 0x41EF10, 0x2B8
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/data/strings.s b/data/strings.s
index a75671090..fd38b48cf 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -2904,7 +2904,7 @@ gUnknown_8419D89:: @ 8419D89
.string "Waiting for the other TRAINER to\n"
.string "finish reading your TRAINER CARD.$"
-gText_MenuOptionOption:: @ 8419DCC
+gText_MenuOption:: @ 8419DCC
.string "OPTION$"
gText_TextSpeed:: @ 0x8419DD3
@@ -2955,16 +2955,16 @@ gText_SoundMono:: @ 0x8419E36
gText_SoundStereo:: @ 0x8419E3B
.string "STEREO$"
-gUnknown_8419E42:: @ 0x8419E42
+gTextJP_Type:: @ 0x8419E42
.string "タイプ$"
gText_ButtonTypeNormal:: @ 0x8419E46
.string "HELP$"
-gText_ButtonTypeLR:: @ 0x8419E4B
+gText_ButtonTypeLEqualsA:: @ 0x8419E4B
.string "LゅA$"
-gText_ButtonTypeLEqualsA:: @ 0x8419E4F
+gText_ButtonTypeLR:: @ 0x8419E4F
.string "LR$"
gText_FrameType:: @ 8419E52
diff --git a/graphics/battle_anims/unk_83E4874.bin b/graphics/battle_anims/unk_83E4874.bin
new file mode 100644
index 000000000..dc2990b0a
--- /dev/null
+++ b/graphics/battle_anims/unk_83E4874.bin
Binary files differ
diff --git a/graphics/battle_anims/unk_83E4874.png b/graphics/battle_anims/unk_83E4874.png
new file mode 100644
index 000000000..c4a27b929
--- /dev/null
+++ b/graphics/battle_anims/unk_83E4874.png
Binary files differ
diff --git a/graphics/misc/evolution_sprite_841EEA4.png b/graphics/misc/evolution_sprite_841EEA4.png
new file mode 100644
index 000000000..c942e5b4f
--- /dev/null
+++ b/graphics/misc/evolution_sprite_841EEA4.png
Binary files differ
diff --git a/graphics/unknown/unk_841EF48.png b/graphics/unknown/unk_841EF48.png
new file mode 100644
index 000000000..a61833c0a
--- /dev/null
+++ b/graphics/unknown/unk_841EF48.png
Binary files differ
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/dynamic_placeholder_text_util.h b/include/dynamic_placeholder_text_util.h
index 31cfe8d30..bae92eb01 100644
--- a/include/dynamic_placeholder_text_util.h
+++ b/include/dynamic_placeholder_text_util.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_UNK_TEXT_UTIL_H
-#define GUARD_UNK_TEXT_UTIL_H
+#ifndef GUARD_DYNAMIC_PLACEHOLDER_TEXT_UTIL_H
+#define GUARD_DYNAMIC_PLACEHOLDER_TEXT_UTIL_H
#include "global.h"
@@ -9,4 +9,4 @@ u8 *DynamicPlaceholderTextUtil_ExpandPlaceholders(u8 *dest, const u8 *src);
const u8 *DynamicPlaceholderTextUtil_GetPlaceholderPtr(u8 idx);
u8 GetColorFromTextColorTable(u16 graphicId);
-#endif //GUARD_UNK_TEXT_UTIL_H
+#endif //GUARD_DYNAMIC_PLACEHOLDER_TEXT_UTIL_H
diff --git a/include/evolution_graphics.h b/include/evolution_graphics.h
index 21f133872..e4fbf0fc0 100644
--- a/include/evolution_graphics.h
+++ b/include/evolution_graphics.h
@@ -10,7 +10,7 @@ u8 LaunchTask_PreEvoSparklesSet2(void);
u8 LaunchTask_PostEvoSparklesSet1(void);
u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 species);
u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 species);
-u8 sub_817C3A0(u8 preEvoSpriteID, u8 postEvoSpriteID);
+u8 LaunchTask_PrePostEvoMonSprites(u8 preEvoSpriteId, u8 postEvoSpriteId);
#define EvoGraphicsTaskEvoStop data[8]
diff --git a/include/evolution_scene.h b/include/evolution_scene.h
index 6ceed99c1..75b64dadc 100644
--- a/include/evolution_scene.h
+++ b/include/evolution_scene.h
@@ -8,5 +8,6 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyID);
void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID);
extern void (*gCB2_AfterEvolution)(void);
+void sub_80D0474(void);
#endif // GUARD_EVOLUTION_SCENE_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 1170c6f30..327d3cfcb 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
@@ -761,8 +783,9 @@ extern const u8 gText_SoundStereo[];
extern const u8 gText_ButtonTypeNormal[];
extern const u8 gText_ButtonTypeLR[];
extern const u8 gText_ButtonTypeLEqualsA[];
-extern const u8 gText_MenuOptionOption[];
+extern const u8 gText_MenuOption[];
extern const u8 gText_FrameType[];
+extern const u8 gTextJP_Type[];
extern const u8 gText_PickSwitchCancel[];
#endif //GUARD_STRINGS_H
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 92efeabda..9144c4a2d 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);
@@ -218,7 +218,7 @@ SECTIONS {
src/diploma.o(.text);
asm/save_failed_screen.o(.text);
asm/clear_save_data_screen.o(.text);
- asm/evolution_graphics.o(.text);
+ src/evolution_graphics.o(.text);
src/fldeff_teleport.o(.text);
src/new_menu_helpers.o(.text);
asm/box_party_pokemon_dropdown.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);
@@ -489,7 +494,7 @@ SECTIONS {
data/strings.o(.rodata);
data/save_failed_screen.o(.rodata);
data/clear_save_data_screen.o(.rodata);
- data/evolution_graphics.o(.rodata);
+ src/evolution_graphics.o(.rodata);
src/new_menu_helpers.o(.rodata);
data/box_party_pokemon_dropdown.o(.rodata);
src/map_preview_screen.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/dark.c b/src/dark.c
index b6d13afe3..368f5cbd5 100644
--- a/src/dark.c
+++ b/src/dark.c
@@ -82,7 +82,7 @@ static const union AffineAnimCmd gUnknown_83E7900[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const gUnknown_83E7910[] =
+const union AffineAnimCmd *const gUnknown_83E7910[] =
{
gUnknown_83E7890,
gUnknown_83E78A0,
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/evolution_graphics.c b/src/evolution_graphics.c
new file mode 100644
index 000000000..175ebf81e
--- /dev/null
+++ b/src/evolution_graphics.c
@@ -0,0 +1,638 @@
+#include "global.h"
+#include "trig.h"
+#include "random.h"
+#include "decompress.h"
+#include "palette.h"
+#include "sound.h"
+#include "task.h"
+#include "evolution_scene.h"
+#include "evolution_graphics.h"
+#include "constants/songs.h"
+
+static void SpriteCallbackDummy_EvoSparkles(struct Sprite * sprite);
+static void EvoTask_PreEvoSparkleSet1Init(u8 taskId);
+static void EvoTask_CreatePreEvoSparkleSet1(u8 taskId);
+static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskId);
+static void EvoTask_PreEvoSparkleSet2Init(u8 taskId);
+static void EvoTask_CreatePreEvoSparklesSet2(u8 taskId);
+static void EvoTask_PreEvoSparkleSet2Teardown(u8 taskId);
+static void EvoTask_PostEvoSparklesSet1Init(u8 taskId);
+static void EvoTask_CreatePostEvoSparklesSet1(u8 taskId);
+static void EvoTask_PostEvoSparklesSet1Teardown(u8 taskId);
+static void EvoTask_PostEvoSparklesSet2Init(u8 taskId);
+static void EvoTask_CreatePostEvoSparklesSet2(u8 taskId);
+static void EvoTask_PostEvoSparklesSet2Teardown(u8 taskId);
+static void EvoTask_PostEvoSparklesSet2TradeInit(u8 taskId);
+static void EvoTask_CreatePostEvoSparklesSet2Trade(u8 taskId);
+static void EvoTask_PrePostEvoMonSpritesInit(u8 taskId);
+static void EvoTask_ChooseNextEvoSpriteAnim(u8 taskId);
+static void EvoTask_ShrinkOrExpandEvoSprites(u8 taskId);
+static void PreEvoInvisible_PostEvoVisible_KillTask(u8 taskId);
+static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskId);
+
+static const u16 sEvolutionSparklesPalData[] = INCBIN_U16("graphics/misc/evolution_sprite_841EEA4.gbapal");
+static const u32 sEvolutionSparklesTileData[] = INCBIN_U32("graphics/misc/evolution_sprite_841EEA4.4bpp.lz");
+
+static const struct CompressedSpriteSheet sSpriteSheet_EvolutionSparkles[] = {
+ { sEvolutionSparklesTileData, 0x20, 1001 },
+ {}
+};
+static const struct SpritePalette sSpritePalette_EvolutionSparkles[] = {
+ { sEvolutionSparklesPalData, 1001 },
+ {}
+};
+
+static const struct OamData sOamData_EvolutionSparkles = {
+ .y = 160,
+ .priority = 1
+};
+
+static const union AnimCmd sSpriteAnim_EvolutionSparkles_0[] = {
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_EvolutionSparkles[] = {
+ sSpriteAnim_EvolutionSparkles_0
+};
+
+static const struct SpriteTemplate sSpriteTemplate_EvolutionSparkles = {
+ .tileTag = 1001,
+ .paletteTag = 1001,
+ .oam = &sOamData_EvolutionSparkles,
+ .anims = sSpriteAnimTable_EvolutionSparkles,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy_EvoSparkles
+};
+
+static const u16 sEvolutionSparkleMatrixScales[12] = {
+ 0x3C0,
+ 0x380,
+ 0x340,
+ 0x300,
+ 0x2C0,
+ 0x280,
+ 0x240,
+ 0x200,
+ 0x1C0,
+ 0x180,
+ 0x140,
+ 0x100
+};
+
+static const s16 sUnref_841EF28[][2] = {
+ {-4, 0x10},
+ {-3, 0x30},
+ {-2, 0x50},
+ {-1, 0x70},
+ { 1, 0x70},
+ { 2, 0x50},
+ { 3, 0x30},
+ { 4, 0x10}
+};
+
+static void SpriteCallbackDummy_EvoSparkles(struct Sprite * sprite)
+{
+
+}
+
+static void SetEvoSparklesMatrices(void)
+{
+ u16 i;
+ for (i = 0; i < NELEMS(sEvolutionSparkleMatrixScales); i++)
+ SetOamMatrix(i + 20, sEvolutionSparkleMatrixScales[i], 0, 0, sEvolutionSparkleMatrixScales[i]);
+}
+
+static void SpriteCB_PreEvoSparkleSet1(struct Sprite * sprite)
+{
+ u8 mnum;
+ if (sprite->pos1.y > 8)
+ {
+ sprite->pos1.y = 88 - sprite->data[7] * sprite->data[7] / 80;
+ sprite->pos2.y = Sin((u8)sprite->data[6], sprite->data[5]) / 4;
+ sprite->pos2.x = Cos((u8) sprite->data[6], sprite->data[5]);
+ sprite->data[6] += 4;
+ if (sprite->data[7] & 1)
+ sprite->data[5]--;
+ sprite->data[7]++;
+ if (sprite->pos2.y > 0)
+ sprite->subpriority = 1;
+ else
+ sprite->subpriority = 20;
+ mnum = sprite->data[5] / 4 + 20;
+ if (mnum > 31)
+ mnum = 31;
+ sprite->oam.matrixNum = mnum;
+ }
+ else
+ {
+ DestroySprite(sprite);
+ }
+}
+
+static void CreatePreEvoSparkleSet1(u8 a0)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_EvolutionSparkles, 120, 88, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[5] = 48;
+ gSprites[spriteId].data[6] = a0;
+ gSprites[spriteId].data[7] = 0;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ gSprites[spriteId].oam.matrixNum = 31;
+ gSprites[spriteId].callback = SpriteCB_PreEvoSparkleSet1;
+ }
+}
+
+static void SpriteCB_PreEvoSparkleSet2(struct Sprite * sprite)
+{
+ if (sprite->pos1.y < 88)
+ {
+ sprite->pos1.y = 8 + sprite->data[7] * sprite->data[7] / 5;
+ sprite->pos2.y = Sin((u8)sprite->data[6], sprite->data[5]) / 4;
+ sprite->pos2.x = Cos((u8)sprite->data[6], sprite->data[5]);
+ sprite->data[5] = Sin((u8)(sprite->data[7] * 4), 40) + 8;
+ sprite->data[7]++;
+ }
+ else
+ {
+ DestroySprite(sprite);
+ }
+}
+
+static void CreatePreEvoSparkleSet2(u8 a0)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_EvolutionSparkles, 120, 8, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[5] = 8;
+ gSprites[spriteId].data[6] = a0;
+ gSprites[spriteId].data[7] = 0;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ gSprites[spriteId].oam.matrixNum = 25;
+ gSprites[spriteId].subpriority = 1;
+ gSprites[spriteId].callback = SpriteCB_PreEvoSparkleSet2;
+ }
+}
+
+static void SpriteCB_PostEvoSparkleSet1(struct Sprite * sprite)
+{
+ if (sprite->data[5] > 8)
+ {
+ sprite->pos2.y = Sin((u8)sprite->data[6], sprite->data[5]);
+ sprite->pos2.x = Cos((u8)sprite->data[6], sprite->data[5]);
+ sprite->data[5] -= sprite->data[3];
+ sprite->data[6] += 4;
+ }
+ else
+ {
+ DestroySprite(sprite);
+ }
+}
+
+static void CreatePostEvoSparkleSet1(u8 a0, u8 a1)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_EvolutionSparkles, 120, 56, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[3] = a1;
+ gSprites[spriteId].data[5] = 120;
+ gSprites[spriteId].data[6] = a0;
+ gSprites[spriteId].data[7] = 0;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ gSprites[spriteId].oam.matrixNum = 31;
+ gSprites[spriteId].subpriority = 1;
+ gSprites[spriteId].callback = SpriteCB_PostEvoSparkleSet1;
+ }
+}
+
+static void SpriteCB_PostEvoSparkleSet2(struct Sprite * sprite)
+{
+ u8 mnum;
+ if ((sprite->data[7] & 3) == 0)
+ sprite->pos1.y++;
+ if (sprite->data[6] < 128)
+ {
+ sprite->pos2.y = -Sin((u8)sprite->data[6], sprite->data[5]);
+ sprite->pos1.x = 120 + sprite->data[3] * sprite->data[7] / 3;
+ sprite->data[6]++;
+ mnum = 31 - sprite->data[6] * 12 / 128;
+ if (sprite->data[6] > 64)
+ {
+ sprite->subpriority = 1;
+ }
+ else
+ {
+ sprite->invisible = FALSE;
+ sprite->subpriority = 20;
+ if (sprite->data[6] > 112 && (sprite->data[6] & 1))
+ sprite->invisible = TRUE;
+ }
+ if (mnum < 20)
+ mnum = 20;
+ sprite->oam.matrixNum = mnum;
+ sprite->data[7]++;
+ }
+ else
+ {
+ DestroySprite(sprite);
+ }
+}
+
+static void CreatePostEvoSparkleSet2(u8 unused)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_EvolutionSparkles, 120, 56, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[3] = 3 - (Random() % 7);
+ gSprites[spriteId].data[5] = 48 + (Random() & 63);
+ gSprites[spriteId].data[7] = 0;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ gSprites[spriteId].oam.matrixNum = 31;
+ gSprites[spriteId].subpriority = 20;
+ gSprites[spriteId].callback = SpriteCB_PostEvoSparkleSet2;
+ }
+}
+
+void LoadEvoSparkleSpriteAndPal(void)
+{
+ LoadCompressedSpriteSheetUsingHeap(sSpriteSheet_EvolutionSparkles);
+ LoadSpritePalettes(sSpritePalette_EvolutionSparkles);
+}
+
+u8 LaunchTask_PreEvoSparklesSet1(u16 a0)
+{
+ u8 taskId = CreateTask(EvoTask_PreEvoSparkleSet1Init, 0);
+ gTasks[taskId].data[1] = a0;
+ return taskId;
+}
+
+static void EvoTask_PreEvoSparkleSet1Init(u8 taskId)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskId].data[15] = 0;
+ BeginNormalPaletteFade(3 << gTasks[taskId].data[1], 10, 0, 16, RGB_WHITE);
+ gTasks[taskId].func = EvoTask_CreatePreEvoSparkleSet1;
+ PlaySE(SE_W025);
+}
+
+static void EvoTask_CreatePreEvoSparkleSet1(u8 taskId)
+{
+ u8 i;
+ if (gTasks[taskId].data[15] < 64)
+ {
+ if ((gTasks[taskId].data[15] & 7) == 0)
+ {
+ for (i = 0; i < 4; i++)
+ CreatePreEvoSparkleSet1(2 * (gTasks[taskId].data[15] & 0x78) + 64 * i);
+ }
+ gTasks[taskId].data[15]++;
+ }
+ else
+ {
+ gTasks[taskId].data[15] = 96;
+ gTasks[taskId].func = EvoTask_WaitForPre1SparklesToGoUp;
+ }
+}
+
+static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskId)
+{
+ if (gTasks[taskId].data[15] != 0)
+ gTasks[taskId].data[15]--;
+ else
+ DestroyTask(taskId);
+}
+
+u8 LaunchTask_PreEvoSparklesSet2(void)
+{
+ u8 taskId = CreateTask(EvoTask_PreEvoSparkleSet2Init, 0);
+ return taskId;
+}
+
+static void EvoTask_PreEvoSparkleSet2Init(u8 taskId)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskId].data[15] = 0;
+ gTasks[taskId].func = EvoTask_CreatePreEvoSparklesSet2;
+ PlaySE(SE_W062B);
+}
+
+static void EvoTask_CreatePreEvoSparklesSet2(u8 taskId)
+{
+ u8 i;
+ if (gTasks[taskId].data[15] < 96)
+ {
+ if (gTasks[taskId].data[15] < 6)
+ {
+ for (i = 0; i < 9; i++)
+ CreatePreEvoSparkleSet2(16 * i);
+ }
+ gTasks[taskId].data[15]++;
+ }
+ else
+ {
+ gTasks[taskId].func = EvoTask_PreEvoSparkleSet2Teardown;
+ }
+}
+
+static void EvoTask_PreEvoSparkleSet2Teardown(u8 taskId)
+{
+ DestroyTask(taskId);
+}
+
+u8 LaunchTask_PostEvoSparklesSet1(void)
+{
+ u8 taskId = CreateTask(EvoTask_PostEvoSparklesSet1Init, 0);
+ return taskId;
+}
+
+static void EvoTask_PostEvoSparklesSet1Init(u8 taskId)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskId].data[15] = 0;
+ gTasks[taskId].func = EvoTask_CreatePostEvoSparklesSet1;
+ PlaySE(SE_REAPOKE);
+}
+
+static void EvoTask_CreatePostEvoSparklesSet1(u8 taskId)
+{
+ u8 i;
+ if (gTasks[taskId].data[15] < 48)
+ {
+ if (gTasks[taskId].data[15] == 0)
+ {
+ for (i = 0; i < 16; i++)
+ {
+ CreatePostEvoSparkleSet1(i * 16, 4);
+ }
+ }
+ if (gTasks[taskId].data[15] == 32)
+ {
+ for (i = 0; i < 16; i++)
+ {
+ CreatePostEvoSparkleSet1(i * 16, 8);
+ }
+ }
+ gTasks[taskId].data[15]++;
+ }
+ else
+ {
+ gTasks[taskId].func = EvoTask_PostEvoSparklesSet1Teardown;
+ }
+}
+
+static void EvoTask_PostEvoSparklesSet1Teardown(u8 taskId)
+{
+ DestroyTask(taskId);
+}
+
+u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 species)
+{
+ u8 taskId = CreateTask(EvoTask_PostEvoSparklesSet2Init, 0);
+ gTasks[taskId].data[2] = species;
+ return taskId;
+}
+
+static void EvoTask_PostEvoSparklesSet2Init(u8 taskId)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskId].data[15] = 0;
+ sub_80D0474();
+ CpuCopy16(&gPlttBufferFaded[32], &gPlttBufferUnfaded[32], 96);
+ BeginNormalPaletteFade(0xFFF90F1C, 0, 0, 16, RGB_WHITE);
+ gTasks[taskId].func = EvoTask_CreatePostEvoSparklesSet2;
+ PlaySE(SE_W080);
+}
+
+static void EvoTask_CreatePostEvoSparklesSet2(u8 taskId)
+{
+ u8 i;
+ if (gTasks[taskId].data[15] < 128)
+ {
+ switch (gTasks[taskId].data[15])
+ {
+ default:
+ if (gTasks[taskId].data[15] < 50)
+ CreatePostEvoSparkleSet2(Random() & 7);
+ break;
+ case 0:
+ for (i = 0; i < 8; i++)
+ CreatePostEvoSparkleSet2(i);
+ break;
+ case 32:
+ BeginNormalPaletteFade(0xFFFF0F1C, 16, 16, 0, RGB_WHITE);
+ break;
+ }
+ gTasks[taskId].data[15]++;
+ }
+ else
+ {
+ gTasks[taskId].func = EvoTask_PostEvoSparklesSet2Teardown;
+ }
+}
+
+static void EvoTask_PostEvoSparklesSet2Teardown(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ DestroyTask(taskId);
+}
+
+u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 species)
+{
+ u8 taskId = CreateTask(EvoTask_PostEvoSparklesSet2TradeInit, 0);
+ gTasks[taskId].data[2] = species;
+ return taskId;
+}
+
+static void EvoTask_PostEvoSparklesSet2TradeInit(u8 taskId)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskId].data[15] = 0;
+ sub_80D0474();
+ CpuCopy16(&gPlttBufferFaded[32], &gPlttBufferUnfaded[32], 96);
+ BeginNormalPaletteFade(0xFFF90F00, 0, 0, 16, RGB_WHITE);
+ gTasks[taskId].func = EvoTask_CreatePostEvoSparklesSet2Trade;
+ PlaySE(SE_W080);
+}
+
+static void EvoTask_CreatePostEvoSparklesSet2Trade(u8 taskId)
+{
+ u8 i;
+ if (gTasks[taskId].data[15] < 128)
+ {
+ switch (gTasks[taskId].data[15])
+ {
+ default:
+ if (gTasks[taskId].data[15] < 50)
+ CreatePostEvoSparkleSet2(Random() & 7);
+ break;
+ case 0:
+ for (i = 0; i < 8; i++)
+ CreatePostEvoSparkleSet2(i);
+ break;
+ case 32:
+ BeginNormalPaletteFade(0xFFFF0F00, 16, 16, 0, RGB_WHITE);
+ break;
+ }
+ gTasks[taskId].data[15]++;
+ }
+ else
+ {
+ gTasks[taskId].func = EvoTask_PostEvoSparklesSet2Teardown;
+ }
+}
+
+static void SpriteCallbackDummy_MonSprites(struct Sprite * sprite)
+{
+
+}
+
+#define tPreEvoSpriteId data[1]
+#define tPostEvoSpriteId data[2]
+#define tPreEvoScale data[3]
+#define tPostEvoScale data[4]
+#define tDirection data[5]
+#define tSpeed data[6]
+
+u8 LaunchTask_PrePostEvoMonSprites(u8 preEvoSpriteId, u8 postEvoSpriteId)
+{
+ u16 i;
+ u8 taskId;
+ u16 palette[16];
+ for (i = 0; i < 16; i++)
+ palette[i] = RGB_WHITE;
+ taskId = CreateTask(EvoTask_PrePostEvoMonSpritesInit, 0);
+ gTasks[taskId].tPreEvoSpriteId = preEvoSpriteId;
+ gTasks[taskId].tPostEvoSpriteId = postEvoSpriteId;
+ gTasks[taskId].tPreEvoScale = 256;
+ gTasks[taskId].tPostEvoScale = 16;
+ SetOamMatrix(30, 0x10000 / gTasks[taskId].tPreEvoScale, 0, 0, 0x10000 / gTasks[taskId].tPreEvoScale);
+ SetOamMatrix(31, 0x10000 / gTasks[taskId].tPostEvoScale, 0, 0, 0x10000 / gTasks[taskId].tPostEvoScale);
+ gSprites[preEvoSpriteId].callback = SpriteCallbackDummy_MonSprites;
+ gSprites[preEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ gSprites[preEvoSpriteId].oam.matrixNum = 30;
+ gSprites[preEvoSpriteId].invisible = FALSE;
+ CpuCopy16(palette, &gPlttBufferFaded[256 + 16 * gSprites[preEvoSpriteId].oam.paletteNum], 32);
+ gSprites[postEvoSpriteId].callback = SpriteCallbackDummy_MonSprites;
+ gSprites[postEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ gSprites[postEvoSpriteId].oam.matrixNum = 31;
+ gSprites[postEvoSpriteId].invisible = FALSE;
+ CpuCopy16(palette, &gPlttBufferFaded[256 + 16 * gSprites[postEvoSpriteId].oam.paletteNum], 32);
+ gTasks[taskId].EvoGraphicsTaskEvoStop = FALSE;
+ return taskId;
+}
+
+static void EvoTask_PrePostEvoMonSpritesInit(u8 taskId)
+{
+ gTasks[taskId].tDirection = FALSE;
+ gTasks[taskId].tSpeed = 8;
+ gTasks[taskId].func = EvoTask_ChooseNextEvoSpriteAnim;
+}
+
+static void EvoTask_ChooseNextEvoSpriteAnim(u8 taskId)
+{
+ if (gTasks[taskId].EvoGraphicsTaskEvoStop)
+ {
+ PreEvoVisible_PostEvoInvisible_KillTask(taskId);
+ }
+ else if (gTasks[taskId].tSpeed == 128)
+ {
+ PreEvoInvisible_PostEvoVisible_KillTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].tSpeed += 2;
+ gTasks[taskId].tDirection ^= TRUE;
+ gTasks[taskId].func = EvoTask_ShrinkOrExpandEvoSprites;
+ }
+}
+
+static void EvoTask_ShrinkOrExpandEvoSprites(u8 taskId)
+{
+ u8 r6;
+ if (gTasks[taskId].EvoGraphicsTaskEvoStop)
+ {
+ gTasks[taskId].func = PreEvoVisible_PostEvoInvisible_KillTask;
+ }
+ else
+ {
+ r6 = 0;
+ if (!gTasks[taskId].tDirection)
+ {
+ if (gTasks[taskId].tPreEvoScale < 0x100 - gTasks[taskId].tSpeed)
+ {
+ gTasks[taskId].tPreEvoScale += gTasks[taskId].tSpeed;
+ }
+ else
+ {
+ gTasks[taskId].tPreEvoScale = 0x100;
+ r6 = 1;
+ }
+ if (gTasks[taskId].tPostEvoScale > 0x10 + gTasks[taskId].tSpeed)
+ {
+ gTasks[taskId].tPostEvoScale -= gTasks[taskId].tSpeed;
+ }
+ else
+ {
+ gTasks[taskId].tPostEvoScale = 0x10;
+ r6++;
+ }
+ }
+ else
+ {
+ if (gTasks[taskId].tPostEvoScale < 0x100 - gTasks[taskId].tSpeed)
+ {
+ gTasks[taskId].tPostEvoScale += gTasks[taskId].tSpeed;
+ }
+ else
+ {
+ gTasks[taskId].tPostEvoScale = 0x100;
+ r6 = 1;
+ }
+ if (gTasks[taskId].tPreEvoScale > 0x10 + gTasks[taskId].tSpeed)
+ {
+ gTasks[taskId].tPreEvoScale -= gTasks[taskId].tSpeed;
+ }
+ else
+ {
+ gTasks[taskId].tPreEvoScale = 0x10;
+ r6++;
+ }
+ }
+ SetOamMatrix(30, 0x10000 / gTasks[taskId].tPreEvoScale, 0, 0, 0x10000 / gTasks[taskId].tPreEvoScale);
+ SetOamMatrix(31, 0x10000 / gTasks[taskId].tPostEvoScale, 0, 0, 0x10000 / gTasks[taskId].tPostEvoScale);
+ if (r6 == 2)
+ {
+ gTasks[taskId].func = EvoTask_ChooseNextEvoSpriteAnim;
+ }
+ }
+}
+
+static void PreEvoInvisible_PostEvoVisible_KillTask(u8 taskId)
+{
+ gSprites[gTasks[taskId].tPreEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_OFF;
+ gSprites[gTasks[taskId].tPreEvoSpriteId].oam.matrixNum = 0;
+ gSprites[gTasks[taskId].tPreEvoSpriteId].invisible = TRUE;
+ gSprites[gTasks[taskId].tPostEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_OFF;
+ gSprites[gTasks[taskId].tPostEvoSpriteId].oam.matrixNum = 0;
+ gSprites[gTasks[taskId].tPostEvoSpriteId].invisible = FALSE;
+ DestroyTask(taskId);
+}
+
+static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskId)
+{
+ gSprites[gTasks[taskId].tPreEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_OFF;
+ gSprites[gTasks[taskId].tPreEvoSpriteId].oam.matrixNum = 0;
+ gSprites[gTasks[taskId].tPreEvoSpriteId].invisible = FALSE;
+ gSprites[gTasks[taskId].tPostEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_OFF;
+ gSprites[gTasks[taskId].tPostEvoSpriteId].oam.matrixNum = 0;
+ gSprites[gTasks[taskId].tPostEvoSpriteId].invisible = TRUE;
+ DestroyTask(taskId);
+}
+
+#undef tPreEvoSpriteId
+#undef tPostEvoSpriteId
+#undef tPreEvoScale
+#undef tPostEvoScale
+#undef tDirection
+#undef tSpeed
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..79966e597
--- /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,
+};
+
+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/new_menu_helpers.c b/src/new_menu_helpers.c
index 84befe63e..f879e6810 100644
--- a/src/new_menu_helpers.c
+++ b/src/new_menu_helpers.c
@@ -21,11 +21,13 @@
#define STD_WINDOW_PALETTE_NUM 14
#define STD_WINDOW_BASE_TILE_NUM 0x214
-static EWRAM_DATA bool8 gUnknown_203AB58[4] = {FALSE}; // knizz: bgmaps_that_need_syncing
-static EWRAM_DATA u16 gUnknown_203AB5C = {0};
-static EWRAM_DATA void *gUnknown_203AB60[0x20] = {NULL};
+static EWRAM_DATA bool8 sScheduledBgCopiesToVram[4] = {FALSE};
+static EWRAM_DATA u16 sTempTileDataBufferCursor = {0};
+static EWRAM_DATA void *sTempTileDataBuffers[0x20] = {NULL};
static EWRAM_DATA u8 sStartMenuWindowId = {0};
+static const u16 gUnknown_841EF48[] = INCBIN_U16("graphics/unknown/unk_841EF48.4bpp");
+
const u16 gUnknown_841F1C8[] = INCBIN_U16("graphics/text_window/unk_841F1C8.4bpp");
const u16 gTMCaseMainWindowPalette[] = INCBIN_U16("graphics/tm_case/unk_841F408.gbapal");
@@ -169,35 +171,35 @@ static void TaskFreeBufAfterCopyingTileDataToVram(u8 taskId);
void ClearScheduledBgCopiesToVram(void)
{
- memset(gUnknown_203AB58, 0, sizeof(gUnknown_203AB58));
+ memset(sScheduledBgCopiesToVram, 0, sizeof(sScheduledBgCopiesToVram));
}
void ScheduleBgCopyTilemapToVram(u8 bgId)
{
- gUnknown_203AB58[bgId] = TRUE;
+ sScheduledBgCopiesToVram[bgId] = TRUE;
}
void DoScheduledBgTilemapCopiesToVram(void)
{
- if (gUnknown_203AB58[0] == TRUE)
+ if (sScheduledBgCopiesToVram[0] == TRUE)
{
CopyBgTilemapBufferToVram(0);
- gUnknown_203AB58[0] = FALSE;
+ sScheduledBgCopiesToVram[0] = FALSE;
}
- if (gUnknown_203AB58[1] == TRUE)
+ if (sScheduledBgCopiesToVram[1] == TRUE)
{
CopyBgTilemapBufferToVram(1);
- gUnknown_203AB58[1] = FALSE;
+ sScheduledBgCopiesToVram[1] = FALSE;
}
- if (gUnknown_203AB58[2] == TRUE)
+ if (sScheduledBgCopiesToVram[2] == TRUE)
{
CopyBgTilemapBufferToVram(2);
- gUnknown_203AB58[2] = FALSE;
+ sScheduledBgCopiesToVram[2] = FALSE;
}
- if (gUnknown_203AB58[3] == TRUE)
+ if (sScheduledBgCopiesToVram[3] == TRUE)
{
CopyBgTilemapBufferToVram(3);
- gUnknown_203AB58[3] = FALSE;
+ sScheduledBgCopiesToVram[3] = FALSE;
}
}
@@ -205,11 +207,11 @@ void ResetTempTileDataBuffers(void)
{
int i;
- for (i = 0; i < (s32)NELEMS(gUnknown_203AB60); i++)
+ for (i = 0; i < (s32)NELEMS(sTempTileDataBuffers); i++)
{
- gUnknown_203AB60[i] = NULL;
+ sTempTileDataBuffers[i] = NULL;
}
- gUnknown_203AB5C = 0;
+ sTempTileDataBufferCursor = 0;
}
bool8 FreeTempTileDataBuffersIfPossible(void)
@@ -218,13 +220,13 @@ bool8 FreeTempTileDataBuffersIfPossible(void)
if (!IsDma3ManagerBusyWithBgCopy())
{
- if (gUnknown_203AB5C)
+ if (sTempTileDataBufferCursor)
{
- for (i = 0; i < gUnknown_203AB5C; i++)
+ for (i = 0; i < sTempTileDataBufferCursor; i++)
{
- FREE_AND_SET_NULL(gUnknown_203AB60[i]);
+ FREE_AND_SET_NULL(sTempTileDataBuffers[i]);
}
- gUnknown_203AB5C = 0;
+ sTempTileDataBufferCursor = 0;
}
return FALSE;
}
@@ -238,7 +240,7 @@ void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 of
{
u32 sizeOut;
- if (gUnknown_203AB5C < NELEMS(gUnknown_203AB60))
+ if (sTempTileDataBufferCursor < NELEMS(sTempTileDataBuffers))
{
void *ptr = MallocAndDecompress(src, &sizeOut);
if (!size)
@@ -246,7 +248,7 @@ void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 of
if (ptr)
{
CopyDecompressedTileDataToVram(bgId, ptr, size, offset, mode);
- gUnknown_203AB60[gUnknown_203AB5C++] = ptr;
+ sTempTileDataBuffers[sTempTileDataBufferCursor++] = ptr;
}
return ptr;
}
@@ -257,7 +259,7 @@ void *DecompressAndCopyTileDataToVram2(u8 bgId, const void *src, u32 size, u16 o
{
u32 sizeOut;
- if (gUnknown_203AB5C < NELEMS(gUnknown_203AB60))
+ if (sTempTileDataBufferCursor < NELEMS(sTempTileDataBuffers))
{
void *ptr = MallocAndDecompress(src, &sizeOut);
if (sizeOut > size)
@@ -265,7 +267,7 @@ void *DecompressAndCopyTileDataToVram2(u8 bgId, const void *src, u32 size, u16 o
if (ptr)
{
CopyDecompressedTileDataToVram(bgId, ptr, sizeOut, offset, mode);
- gUnknown_203AB60[gUnknown_203AB5C++] = ptr;
+ sTempTileDataBuffers[sTempTileDataBufferCursor++] = ptr;
}
return ptr;
}
diff --git a/src/option_menu.c b/src/option_menu.c
index 8450633f5..1729b36d1 100644
--- a/src/option_menu.c
+++ b/src/option_menu.c
@@ -29,16 +29,51 @@ enum
MENUITEM_BUTTONMODE,
MENUITEM_FRAMETYPE,
MENUITEM_CANCEL,
- MENUITEM_COUNT,
+ MENUITEM_COUNT
};
+
// Window Ids
enum
{
WIN_TEXT_OPTION,
- WIN_OPTIONS,
+ WIN_OPTIONS
};
-static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8
+// RAM sumbols
+struct OptionMenu
+{
+ /*0x00*/ u16 option[MENUITEM_COUNT];
+ /*0x0E*/ u16 unkE;
+ /*0x10*/ u8 state3;
+ /*0x11*/ u8 state;
+ /*0x12*/ u8 state2;
+ /*0x13*/ u8 unk13;
+};
+
+EWRAM_DATA struct OptionMenu *sOptionMenuPtr = NULL;
+
+//Function Declarataions
+static void CB2_InitOptionMenu(void);
+static void VBlankCB_OptionMenu(void);
+static void OptionMenu_InitCallbacks(void);
+static void OptionMenu_SetVBlankCallback(void);
+static void CB2_OptionMenu(void);
+static void SetOptionMenuTask(void);
+static void InitOptionMenuBg(void);
+static void OptionMenu_PickSwitchCancel(void);
+static void OptionMenu_ResetSpriteData(void);
+static bool8 LoadOptionMenuPalette(void);
+static void Task_OptionMenu(u8 taskId);
+static u8 OptionMenu_ProcessInput(void);
+static void BufferOptionMenuString(u8 selection);
+static void CloseAndSaveOptionMenu(u8 taskId);
+static void PrintOptionMenuHeader(void);
+static void sub_8088C0C(void);
+static void LoadOptionMenuItemNames(void);
+static void sub_8088DE0(u16 selection);
+
+// Data Definitions
+static const struct WindowTemplate sOptionMenuWinTemplates[] =
{
{
.bg = 1,
@@ -47,7 +82,7 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8
.width = 26,
.height = 2,
.paletteNum = 1,
- .baseBlock = 2,
+ .baseBlock = 2
},
{
.bg = 0,
@@ -56,7 +91,7 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8
.width = 26,
.height = 12,
.paletteNum = 1,
- .baseBlock = 0x36,
+ .baseBlock = 0x36
},
{
.bg = 2,
@@ -65,11 +100,12 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8
.width = 30,
.height = 2,
.paletteNum = 0xF,
- .baseBlock = 0x16e,
+ .baseBlock = 0x16e
},
- DUMMY_WIN_TEMPLATE,
+ DUMMY_WIN_TEMPLATE
};
-static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8
+
+static const struct BgTemplate sOptionMenuBgTemplates[] =
{
{
.bg = 1,
@@ -78,7 +114,7 @@ static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8
.screenSize = 0,
.paletteMode = 0,
.priority = 0,
- .baseTile = 0,
+ .baseTile = 0
},
{
.bg = 0,
@@ -87,7 +123,7 @@ static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8
.screenSize = 0,
.paletteMode = 0,
.priority = 1,
- .baseTile = 0,
+ .baseTile = 0
},
{
.bg = 2,
@@ -96,12 +132,14 @@ static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8
.screenSize = 0,
.paletteMode = 0,
.priority = 2,
- .baseTile = 0,
+ .baseTile = 0
},
};
-static const u16 sOptionsMenuPalette[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); //3CC2E4
-static const u16 sOptionsMenuItemCounts[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //3CC304
-static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = //3CC314
+
+static const u16 sOptionMenuPalette[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal");
+static const u16 sOptionMenuItemCounts[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0};
+
+static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] =
{
[MENUITEM_TEXTSPEED] = gText_TextSpeed,
[MENUITEM_BATTLESCENE] = gText_BattleScene,
@@ -111,73 +149,44 @@ static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = //3CC314
[MENUITEM_FRAMETYPE] = gText_Frame,
[MENUITEM_CANCEL] = gText_OptionMenuCancel,
};
-static const u8 *const sTextSpeedOptions[] = //3CC330
+
+static const u8 *const sTextSpeedOptions[] =
{
gText_TextSpeedSlow,
gText_TextSpeedMid,
gText_TextSpeedFast
};
-static const u8 *const sBattleSceneOptions[] = //3CC33C
+
+static const u8 *const sBattleSceneOptions[] =
{
gText_BattleSceneOn,
gText_BattleSceneOff
};
-static const u8 *const sBattleStyleOptions[] = //3CC344
+
+static const u8 *const sBattleStyleOptions[] =
{
gText_BattleStyleShift,
gText_BattleStyleSet
};
-static const u8 *const sSoundOptions[] = //3CC34C
+
+static const u8 *const sSoundOptions[] =
{
gText_SoundMono,
gText_SoundStereo
};
-static const u8 *const sButtonTypeOptions[] = //3CC354
-{
- gText_ButtonTypeNormal,
- gText_ButtonTypeLEqualsA,
- gText_ButtonTypeLR,
-};
-static const u8 sOptionsMenuPickSwitchCancelTextColor[] = {TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; //3CC360
-static const u8 sOptionsMenuTextColor[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED}; //3CC363
-
-
-//This file's functions
-static void sub_808835C(void);
-static void sub_8088374(void);
-static void sub_8088430(void);
-static void sub_8088444(void);
-static void sub_8088454(void);
-static void sub_8088514(void);
-static void sub_8088530(void);
-static void sub_8088680(void);
-static void sub_80886D4(void);
-static bool8 sub_80886F0(void);
-static void sub_8088780(u8 taskId);
-static u8 sub_80888C0(void);
-static void sub_80889A8(u8 selection);
-static void sub_8088B00(u8 taskId);
-static void sub_8088BD0(void);
-static void sub_8088C0C(void);
-static void sub_8088D8C(void);
-static void sub_8088DE0(u16 selection);
-struct OptionsMenu
+static const u8 *const sButtonTypeOptions[] =
{
- /*0x00*/ u16 option[MENUITEM_COUNT]; //0,2,4,6,8,a,c
- /*0x0E*/ u16 unkE;
- /*0x10*/ u8 state3;
- /*0x11*/ u8 state;
- /*0x12*/ u8 state2;
- /*0x13*/ u8 unk13;
+ gText_ButtonTypeNormal,
+ gText_ButtonTypeLR,
+ gText_ButtonTypeLEqualsA
};
-EWRAM_DATA struct OptionsMenu *sOptionsMenuPtr = {0};
-
+static const u8 sOptionMenuPickSwitchCancelTextColor[] = {TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY};
+static const u8 sOptionMenuTextColor[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED};
-
-//CB2_InitOptionsMenu
-static void sub_808835C(void)
+// Functions
+static void CB2_InitOptionMenu(void)
{
RunTasks();
AnimateSprites();
@@ -185,123 +194,110 @@ static void sub_808835C(void)
UpdatePaletteFade();
}
-
-//VBlankCB_OptionsMenu
-static void sub_8088374(void)
+static void VBlankCB_OptionMenu(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-
-//sub_8088388
void CB2_OptionsMenuFromStartMenu(void)
{
u8 i;
if (gMain.savedCallback == NULL)
gMain.savedCallback = CB2_ReturnToStartMenu;
- sOptionsMenuPtr = AllocZeroed(sizeof(struct OptionsMenu));
- sOptionsMenuPtr->state3 = 0;
- sOptionsMenuPtr->state2 = 0;
- sOptionsMenuPtr->state = 0;
- sOptionsMenuPtr->unkE = 0;
- sOptionsMenuPtr->option[MENUITEM_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed;
- sOptionsMenuPtr->option[MENUITEM_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff;
- sOptionsMenuPtr->option[MENUITEM_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle;
- sOptionsMenuPtr->option[MENUITEM_SOUND] = gSaveBlock2Ptr->optionsSound;
- sOptionsMenuPtr->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode;
- sOptionsMenuPtr->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType;
+ sOptionMenuPtr = AllocZeroed(sizeof(struct OptionMenu));
+ sOptionMenuPtr->state3 = 0;
+ sOptionMenuPtr->state2 = 0;
+ sOptionMenuPtr->state = 0;
+ sOptionMenuPtr->unkE = 0;
+ sOptionMenuPtr->option[MENUITEM_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed;
+ sOptionMenuPtr->option[MENUITEM_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff;
+ sOptionMenuPtr->option[MENUITEM_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle;
+ sOptionMenuPtr->option[MENUITEM_SOUND] = gSaveBlock2Ptr->optionsSound;
+ sOptionMenuPtr->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode;
+ sOptionMenuPtr->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType;
for (i = 0; i < MENUITEM_COUNT-1; i++)
{
- if (sOptionsMenuPtr->option[i] > (sOptionsMenuItemCounts[i])-1)
- sOptionsMenuPtr->option[i] = 0;
+ if (sOptionMenuPtr->option[i] > (sOptionMenuItemCounts[i])-1)
+ sOptionMenuPtr->option[i] = 0;
}
HelpSystem_SetSomeVariable2(0xD);
- SetMainCallback2(sub_8088454);
+ SetMainCallback2(CB2_OptionMenu);
}
-
-//sub_8088430
-static void sub_8088430(void)
+static void OptionMenu_InitCallbacks(void)
{
SetVBlankCallback(0);
SetHBlankCallback(0);
}
-
-//sub_8088444
-static void sub_8088444(void)
+static void OptionMenu_SetVBlankCallback(void)
{
- SetVBlankCallback(sub_8088374);
+ SetVBlankCallback(VBlankCB_OptionMenu);
}
-//sub_8088454
-static void sub_8088454(void)
+static void CB2_OptionMenu(void)
{
u8 i, state;
- state = sOptionsMenuPtr->state;
+ state = sOptionMenuPtr->state;
switch (state)
{
case 0:
- sub_8088430();
+ OptionMenu_InitCallbacks();
break;
case 1:
- sub_8088530();
+ InitOptionMenuBg();
break;
case 2:
- sub_80886D4();
+ OptionMenu_ResetSpriteData();
break;
case 3:
- if (sub_80886F0() != TRUE) //silly matching quirk
+ if (LoadOptionMenuPalette() != TRUE)
return;
break;
case 4:
- sub_8088BD0();
+ PrintOptionMenuHeader();
break;
case 5:
sub_8088C0C();
break;
case 6:
- sub_8088D8C();
+ LoadOptionMenuItemNames();
break;
case 7:
for (i = 0; i < MENUITEM_COUNT; i++)
- sub_80889A8(i);
+ BufferOptionMenuString(i);
break;
case 8:
- sub_8088DE0(sOptionsMenuPtr->unkE);
+ sub_8088DE0(sOptionMenuPtr->unkE);
break;
case 9:
- sub_8088680();
+ OptionMenu_PickSwitchCancel();
break;
default:
- sub_8088514();
+ SetOptionMenuTask();
}
- sOptionsMenuPtr->state++;
+ sOptionMenuPtr->state++;
}
-//sub_8088514
-static void sub_8088514(void)
+static void SetOptionMenuTask(void)
{
- CreateTask(sub_8088780, 0);
- SetMainCallback2(sub_808835C);
+ CreateTask(Task_OptionMenu, 0);
+ SetMainCallback2(CB2_InitOptionMenu);
}
-
-//sub_8088530
-static void sub_8088530(void)
+static void InitOptionMenuBg(void)
{
void * dest = (void *) VRAM;
- DmaClearLarge16(3, dest, VRAM_SIZE, 0x1000);
-
+ DmaClearLarge16(3, dest, VRAM_SIZE, 0x1000);
DmaClear32(3, (void *)OAM, OAM_SIZE);
DmaClear16(3, (void *)PLTT, PLTT_SIZE);
- SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, sOptionMenuBgTemplates, ARRAY_COUNT(sOptionMenuBgTemplates));
+ InitBgsFromTemplates(0, sOptionMenuBgTemplates, NELEMS(sOptionMenuBgTemplates));
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
@@ -312,30 +308,27 @@ static void sub_8088530(void)
ChangeBgY(3, 0, 0);
InitWindows(sOptionMenuWinTemplates);
DeactivateAllTextPrinters();
- SetGpuReg(REG_OFFSET_BLDCNT, 0xC1);
- SetGpuReg(REG_OFFSET_BLDY, 2);
- SetGpuReg(REG_OFFSET_WININ, 1);
- SetGpuReg(REG_OFFSET_WINOUT, 0x27);
- SetGpuReg(0, 0x3040);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_EFFECT_LIGHTEN);
+ SetGpuReg(REG_OFFSET_BLDY, BLDCNT_TGT1_BG1);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON);
ShowBg(0);
ShowBg(1);
ShowBg(2);
};
-//sub_8088680
-static void sub_8088680(void)
+static void OptionMenu_PickSwitchCancel(void)
{
s32 x;
x = 0xE4 - GetStringWidth(0, gText_PickSwitchCancel, 0);
- FillWindowPixelBuffer(2, 0xFF);
- AddTextPrinterParameterized3(2, 0, x, 0, sOptionsMenuPickSwitchCancelTextColor, 0, gText_PickSwitchCancel);
+ FillWindowPixelBuffer(2, PIXEL_FILL(15));
+ AddTextPrinterParameterized3(2, 0, x, 0, sOptionMenuPickSwitchCancelTextColor, 0, gText_PickSwitchCancel);
PutWindowTilemap(2);
CopyWindowToVram(2, 3);
}
-
-//sub_80886D4
-static void sub_80886D4(void)
+static void OptionMenu_ResetSpriteData(void)
{
ResetSpriteData();
ResetPaletteFade();
@@ -344,19 +337,18 @@ static void sub_80886D4(void)
ScanlineEffect_Stop();
}
-//sub_80886F0
-static bool8 sub_80886F0(void)
+static bool8 LoadOptionMenuPalette(void)
{
- switch (sOptionsMenuPtr->state2)
+ switch (sOptionMenuPtr->state2)
{
case 0:
- LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA);
+ LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA);
break;
case 1:
- LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20);
+ LoadPalette(GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20);
break;
case 2:
- LoadPalette(sOptionsMenuPalette, 0x10, 0x20);
+ LoadPalette(sOptionMenuPalette, 0x10, 0x20);
LoadPalette(stdpal_get(2), 0xF0, 0x20);
break;
case 3:
@@ -365,60 +357,58 @@ static bool8 sub_80886F0(void)
default:
return TRUE;
}
- sOptionsMenuPtr->state2++;
+ sOptionMenuPtr->state2++;
return FALSE;
}
-
-
// I could not get this function to match. GOTO statements weren't even compiling correctly.
#ifdef NONMATCHING
-static void sub_8088780(u8 taskId)
+static void Task_OptionMenu(u8 taskId)
{
u8 v2, v5;
- struct OptionsMenu v4;
+ struct OptionMenu v4;
- switch (sOptionsMenuPtr->state3)
+ switch (sOptionMenuPtr->state3)
{
case 0:
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- sub_8088444();
- sOptionsMenuPtr->state3++;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ OptionMenu_SetVBlankCallback();
+ sOptionMenuPtr->state3++;
break;
case 2:
if ((bool32) sub_80BF72C() == TRUE) //cast to bool32 to remove the lsl/lsr 0x18 after func call
return;
- switch (sub_80888C0())
+ switch (OptionMenu_ProcessInput())
{
case 1:
- sOptionsMenuPtr->state3++;
+ sOptionMenuPtr->state3++;
break;
case 2:
- LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA);
- LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20);
- sub_80889A8(sOptionsMenuPtr->unkE);
- sOptionsMenuPtr->state3++;
+ LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA);
+ LoadPalette(GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20);
+ BufferOptionMenuString(sOptionMenuPtr->unkE);
+ sOptionMenuPtr->state3++;
break;
case 3:
- sub_8088DE0(sOptionsMenuPtr->unkE);
+ sub_8088DE0(sOptionMenuPtr->unkE);
break;
case 4:
- sub_80889A8(sOptionsMenuPtr->unkE);
- sOptionsMenuPtr->state3++;
+ BufferOptionMenuString(sOptionMenuPtr->unkE);
+ sOptionMenuPtr->state3++;
break;
default:
return;
}
case 3:
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- sOptionsMenuPtr->state3++;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ sOptionMenuPtr->state3++;
case 1:
case 4:
if (gPaletteFade.active)
return;
- sOptionsMenuPtr->state3++;
+ sOptionMenuPtr->state3++;
case 5:
- sub_8088B00(taskId);
+ CloseAndSaveOptionMenu(taskId);
break;
default:
return;
@@ -426,13 +416,13 @@ static void sub_8088780(u8 taskId)
}
#else
NAKED
-static void sub_8088780(u8 taskId)
+static void Task_OptionMenu(u8 taskId)
{
asm_unified("\tpush {r4,lr}\n"
"\tsub sp, 0x4\n"
"\tlsls r0, 24\n"
"\tlsrs r2, r0, 24\n"
- "\tldr r1, _080887A0 @ =sOptionsMenuPtr\n"
+ "\tldr r1, _080887A0 @ =sOptionMenuPtr\n"
"\tldr r0, [r1]\n"
"\tldrb r0, [r0, 0x10]\n"
"\tadds r3, r1, 0\n"
@@ -446,7 +436,7 @@ static void sub_8088780(u8 taskId)
"\tldr r0, [r0]\n"
"\tmov pc, r0\n"
"\t.align 2, 0\n"
- "_080887A0: .4byte sOptionsMenuPtr\n"
+ "_080887A0: .4byte sOptionMenuPtr\n"
"_080887A4: .4byte _080887A8\n"
"\t.align 2, 0\n"
"_080887A8:\n"
@@ -464,17 +454,17 @@ static void sub_8088780(u8 taskId)
"\tmovs r2, 0x10\n"
"\tmovs r3, 0\n"
"\tbl BeginNormalPaletteFade\n"
- "\tbl sub_8088444\n"
- "\tldr r0, _080887DC @ =sOptionsMenuPtr\n"
+ "\tbl OptionMenu_SetVBlankCallback\n"
+ "\tldr r0, _080887DC @ =sOptionMenuPtr\n"
"\tldr r1, [r0]\n"
"\tb _080888A2\n"
"\t.align 2, 0\n"
- "_080887DC: .4byte sOptionsMenuPtr\n"
+ "_080887DC: .4byte sOptionMenuPtr\n"
"_080887E0:\n"
"\tbl sub_80BF72C\n"
"\tcmp r0, 0x1\n"
"\tbeq _080888B6\n"
- "\tbl sub_80888C0\n"
+ "\tbl OptionMenu_ProcessInput\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tcmp r0, 0x4\n"
@@ -494,13 +484,13 @@ static void sub_8088780(u8 taskId)
"\t.4byte _08088858\n"
"\t.4byte _08088868\n"
"_08088818:\n"
- "\tldr r0, _08088820 @ =sOptionsMenuPtr\n"
+ "\tldr r0, _08088820 @ =sOptionMenuPtr\n"
"\tldr r1, [r0]\n"
"\tb _080888A2\n"
"\t.align 2, 0\n"
- "_08088820: .4byte sOptionsMenuPtr\n"
+ "_08088820: .4byte sOptionMenuPtr\n"
"_08088824:\n"
- "\tldr r4, _08088854 @ =sOptionsMenuPtr\n"
+ "\tldr r4, _08088854 @ =sOptionMenuPtr\n"
"\tldr r0, [r4]\n"
"\tldrb r0, [r0, 0xA]\n"
"\tbl GetUserFrameGraphicsInfo\n"
@@ -521,24 +511,24 @@ static void sub_8088780(u8 taskId)
"\tldr r0, [r4]\n"
"\tb _0808886C\n"
"\t.align 2, 0\n"
- "_08088854: .4byte sOptionsMenuPtr\n"
+ "_08088854: .4byte sOptionMenuPtr\n"
"_08088858:\n"
- "\tldr r0, _08088864 @ =sOptionsMenuPtr\n"
+ "\tldr r0, _08088864 @ =sOptionMenuPtr\n"
"\tldr r0, [r0]\n"
"\tldrh r0, [r0, 0xE]\n"
"\tbl sub_8088DE0\n"
"\tb _080888B6\n"
"\t.align 2, 0\n"
- "_08088864: .4byte sOptionsMenuPtr\n"
+ "_08088864: .4byte sOptionMenuPtr\n"
"_08088868:\n"
- "\tldr r0, _08088874 @ =sOptionsMenuPtr\n"
+ "\tldr r0, _08088874 @ =sOptionMenuPtr\n"
"\tldr r0, [r0]\n"
"_0808886C:\n"
"\tldrb r0, [r0, 0xE]\n"
- "\tbl sub_80889A8\n"
+ "\tbl BufferOptionMenuString\n"
"\tb _080888B6\n"
"\t.align 2, 0\n"
- "_08088874: .4byte sOptionsMenuPtr\n"
+ "_08088874: .4byte sOptionMenuPtr\n"
"_08088878:\n"
"\tmovs r0, 0x1\n"
"\tnegs r0, r0\n"
@@ -547,11 +537,11 @@ static void sub_8088780(u8 taskId)
"\tmovs r2, 0\n"
"\tmovs r3, 0x10\n"
"\tbl BeginNormalPaletteFade\n"
- "\tldr r0, _08088890 @ =sOptionsMenuPtr\n"
+ "\tldr r0, _08088890 @ =sOptionMenuPtr\n"
"\tldr r1, [r0]\n"
"\tb _080888A2\n"
"\t.align 2, 0\n"
- "_08088890: .4byte sOptionsMenuPtr\n"
+ "_08088890: .4byte sOptionMenuPtr\n"
"_08088894:\n"
"\tldr r0, _080888AC @ =gPaletteFade\n"
"\tldrb r1, [r0, 0x7]\n"
@@ -569,7 +559,7 @@ static void sub_8088780(u8 taskId)
"_080888AC: .4byte gPaletteFade\n"
"_080888B0:\n"
"\tadds r0, r2, 0\n"
- "\tbl sub_8088B00\n"
+ "\tbl CloseAndSaveOptionMenu\n"
"_080888B6:\n"
"\tadd sp, 0x4\n"
"\tpop {r4}\n"
@@ -578,53 +568,52 @@ static void sub_8088780(u8 taskId)
}
#endif
-//OptionsMenu_ProcessInput
-static u8 sub_80888C0(void)
+static u8 OptionMenu_ProcessInput(void)
{
u16 current;
u16* curr;
- if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+ if (JOY_REPT(DPAD_RIGHT))
{
- current = sOptionsMenuPtr->option[(sOptionsMenuPtr->unkE)];
- if (current == (sOptionsMenuItemCounts[sOptionsMenuPtr->unkE] - 1))
- sOptionsMenuPtr->option[sOptionsMenuPtr->unkE] = 0;
+ current = sOptionMenuPtr->option[(sOptionMenuPtr->unkE)];
+ if (current == (sOptionMenuItemCounts[sOptionMenuPtr->unkE] - 1))
+ sOptionMenuPtr->option[sOptionMenuPtr->unkE] = 0;
else
- sOptionsMenuPtr->option[sOptionsMenuPtr->unkE] = current + 1;
- if (sOptionsMenuPtr->unkE == MENUITEM_FRAMETYPE)
+ sOptionMenuPtr->option[sOptionMenuPtr->unkE] = current + 1;
+ if (sOptionMenuPtr->unkE == MENUITEM_FRAMETYPE)
return 2;
else
return 4;
}
- else if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+ else if (JOY_REPT(DPAD_LEFT))
{
- curr = &sOptionsMenuPtr->option[sOptionsMenuPtr->unkE];
+ curr = &sOptionMenuPtr->option[sOptionMenuPtr->unkE];
if (*curr == 0)
- *curr = sOptionsMenuItemCounts[sOptionsMenuPtr->unkE] - 1;
+ *curr = sOptionMenuItemCounts[sOptionMenuPtr->unkE] - 1;
else
- --*(curr);
+ --*curr;
- if (sOptionsMenuPtr->unkE == MENUITEM_FRAMETYPE)
+ if (sOptionMenuPtr->unkE == MENUITEM_FRAMETYPE)
return 2;
else
return 4;
}
- else if (gMain.newAndRepeatedKeys & DPAD_UP)
+ else if (JOY_REPT(DPAD_UP))
{
- if (sOptionsMenuPtr->unkE == MENUITEM_TEXTSPEED)
- sOptionsMenuPtr->unkE = MENUITEM_CANCEL;
+ if (sOptionMenuPtr->unkE == MENUITEM_TEXTSPEED)
+ sOptionMenuPtr->unkE = MENUITEM_CANCEL;
else
- sOptionsMenuPtr->unkE = sOptionsMenuPtr->unkE - 1;
+ sOptionMenuPtr->unkE = sOptionMenuPtr->unkE - 1;
return 3;
}
- else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ else if (JOY_REPT(DPAD_DOWN))
{
- if (sOptionsMenuPtr->unkE == MENUITEM_CANCEL)
- sOptionsMenuPtr->unkE = MENUITEM_TEXTSPEED;
+ if (sOptionMenuPtr->unkE == MENUITEM_CANCEL)
+ sOptionMenuPtr->unkE = MENUITEM_TEXTSPEED;
else
- sOptionsMenuPtr->unkE = sOptionsMenuPtr->unkE + 1;
+ sOptionMenuPtr->unkE = sOptionMenuPtr->unkE + 1;
return 3;
}
- else if ((gMain.newKeys & B_BUTTON) || (gMain.newKeys & A_BUTTON))
+ else if (JOY_NEW(B_BUTTON) || JOY_NEW(A_BUTTON))
{
return 1;
}
@@ -634,17 +623,15 @@ static u8 sub_80888C0(void)
}
}
-
-//sub_80889A8
#ifdef NONMATCHING // could not get it to match perfectly, no idea how they put so many vars on the stack
-static void sub_80889A8(u8 selection)
+static void BufferOptionMenuString(u8 selection)
{
- u8* dst;
+ u8 dst[3];
u8* str;
u8* v8;
u8 x, y;
- memcpy(&dst, sOptionsMenuTextColor, 3);
+ memcpy(&dst, sOptionMenuTextColor, 3);
y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2;
x = 0x82;
FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT));
@@ -668,7 +655,7 @@ static void sub_80889A8(u8 selection)
break;
case MENUITEM_FRAMETYPE:
StringCopy(str, gText_FrameType);
- ConvertIntToDecimalStringN(v8, sOptionsMenuPtr->option[2*selection] + 1, 1, 2);
+ ConvertIntToDecimalStringN(v8, sOptionMenuPtr->option[2 * selection] + 1, 1, 2);
StringAppendN(str, v8, 3);
AddTextPrinterParameterized3(1, 2, x, y, dst, -1, str);
break;
@@ -680,7 +667,7 @@ static void sub_80889A8(u8 selection)
}
#else
NAKED
-static void sub_80889A8(u8 selection)
+static void BufferOptionMenuString(u8 selection)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r8\n"
@@ -689,7 +676,7 @@ static void sub_80889A8(u8 selection)
"\tlsls r0, 24\n"
"\tlsrs r5, r0, 24\n"
"\tadd r4, sp, 0x2C\n"
- "\tldr r1, _08088A08 @ =sOptionsMenuTextColor\n"
+ "\tldr r1, _08088A08 @ =sOptionMenuTextColor\n"
"\tadds r0, r4, 0\n"
"\tmovs r2, 0x3\n"
"\tbl memcpy\n"
@@ -727,7 +714,7 @@ static void sub_80889A8(u8 selection)
"\tldr r0, [r0]\n"
"\tmov pc, r0\n"
"\t.align 2, 0\n"
- "_08088A08: .4byte sOptionsMenuTextColor\n"
+ "_08088A08: .4byte sOptionMenuTextColor\n"
"_08088A0C: .4byte _08088A10\n"
"\t.align 2, 0\n"
"_08088A10:\n"
@@ -780,7 +767,7 @@ static void sub_80889A8(u8 selection)
"\tstr r0, [sp, 0x4]\n"
"\tldr r2, _08088A94 @ =sButtonTypeOptions\n"
"_08088A72:\n"
- "\tldr r0, _08088A98 @ =sOptionsMenuPtr\n"
+ "\tldr r0, _08088A98 @ =sOptionMenuPtr\n"
"\tldr r0, [r0]\n"
"\tlsls r1, r5, 1\n"
"\tadds r0, r1\n"
@@ -797,13 +784,13 @@ static void sub_80889A8(u8 selection)
"\tb _08088ADE\n"
"\t.align 2, 0\n"
"_08088A94: .4byte sButtonTypeOptions\n"
- "_08088A98: .4byte sOptionsMenuPtr\n"
+ "_08088A98: .4byte sOptionMenuPtr\n"
"_08088A9C:\n"
"\tldr r1, _08088AF8 @ =gText_FrameType\n"
"\tadd r0, sp, 0xC\n"
"\tbl StringCopy\n"
"\tadd r4, sp, 0x20\n"
- "\tldr r0, _08088AFC @ =sOptionsMenuPtr\n"
+ "\tldr r0, _08088AFC @ =sOptionMenuPtr\n"
"\tldr r0, [r0]\n"
"\tlsls r1, r5, 1\n"
"\tadds r0, r1\n"
@@ -842,43 +829,34 @@ static void sub_80889A8(u8 selection)
"\tbx r0\n"
"\t.align 2, 0\n"
"_08088AF8: .4byte gText_FrameType\n"
- "_08088AFC: .4byte sOptionsMenuPtr\n");
+ "_08088AFC: .4byte sOptionMenuPtr\n");
}
#endif
-
-//sub_8088B00
-static void sub_8088B00(u8 taskId)
+static void CloseAndSaveOptionMenu(u8 taskId)
{
gFieldCallback = sub_807DF64;
SetMainCallback2(gMain.savedCallback);
FreeAllWindowBuffers();
-
- gSaveBlock2Ptr->optionsTextSpeed = (u8) sOptionsMenuPtr->option[MENUITEM_TEXTSPEED];
- gSaveBlock2Ptr->optionsBattleSceneOff = (u8) sOptionsMenuPtr->option[MENUITEM_BATTLESCENE];
- gSaveBlock2Ptr->optionsBattleStyle = (u8) sOptionsMenuPtr->option[MENUITEM_BATTLESTYLE];
- gSaveBlock2Ptr->optionsSound = sOptionsMenuPtr->option[MENUITEM_SOUND];
- gSaveBlock2Ptr->optionsButtonMode = (u8) sOptionsMenuPtr->option[MENUITEM_BUTTONMODE];
- gSaveBlock2Ptr->optionsWindowFrameType = (u8) sOptionsMenuPtr->option[MENUITEM_FRAMETYPE];
+ gSaveBlock2Ptr->optionsTextSpeed = (u8) sOptionMenuPtr->option[MENUITEM_TEXTSPEED];
+ gSaveBlock2Ptr->optionsBattleSceneOff = (u8) sOptionMenuPtr->option[MENUITEM_BATTLESCENE];
+ gSaveBlock2Ptr->optionsBattleStyle = (u8) sOptionMenuPtr->option[MENUITEM_BATTLESTYLE];
+ gSaveBlock2Ptr->optionsSound = sOptionMenuPtr->option[MENUITEM_SOUND];
+ gSaveBlock2Ptr->optionsButtonMode = (u8) sOptionMenuPtr->option[MENUITEM_BUTTONMODE];
+ gSaveBlock2Ptr->optionsWindowFrameType = (u8) sOptionMenuPtr->option[MENUITEM_FRAMETYPE];
SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound);
- Free(sOptionsMenuPtr);
- sOptionsMenuPtr = NULL;
+ FREE_AND_SET_NULL(sOptionMenuPtr);
DestroyTask(taskId);
}
-
-
-//sub_8088BD0
-static void sub_8088BD0(void)
+static void PrintOptionMenuHeader(void)
{
- FillWindowPixelBuffer(0, 0x11);
- AddTextPrinterParameterized(WIN_TEXT_OPTION, 2, gText_MenuOptionOption, 8, 1, TEXT_SPEED_FF, NULL);
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ AddTextPrinterParameterized(WIN_TEXT_OPTION, 2, gText_MenuOption, 8, 1, TEXT_SPEED_FF, NULL);
PutWindowTilemap(0);
CopyWindowToVram(0, 3);
}
-
-//sub_8088C0C
static void sub_8088C0C(void)
{
u8 h;
@@ -903,27 +881,23 @@ static void sub_8088C0C(void)
CopyBgTilemapBufferToVram(1);
}
-//sub_8088D8C
-static void sub_8088D8C(void)
+static void LoadOptionMenuItemNames(void)
{
u8 i;
- FillWindowPixelBuffer(1, 0x11);
+ FillWindowPixelBuffer(1, PIXEL_FILL(1));
for (i = 0; i < MENUITEM_COUNT; i++)
{
- AddTextPrinterParameterized(1, 2, sOptionMenuItemsNames[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0);
+ AddTextPrinterParameterized(WIN_OPTIONS, 2, sOptionMenuItemsNames[i], 8, (u8) ((i * (GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, TEXT_SPEED_FF, NULL);
}
}
-
-//sub_8088DE0
static void sub_8088DE0(u16 selection)
{
u16 v1, v2;
v1 = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT);
v2 = selection * (v1 - 1) + 0x3A;
- SetGpuReg(0x44, (v2 << 8) | (v2 + v1));
- SetGpuReg(0x40, 0x10E0);
+ SetGpuReg(REG_OFFSET_WIN0V, (v2 << 8) | (v2 + v1));
+ SetGpuReg(REG_OFFSET_WIN0H, WINOUT_WINOBJ_OBJ | WIN_RANGE(0, 0xE0));
}
-
diff --git a/src/poison.c b/src/poison.c
new file mode 100644
index 000000000..7a0788c29
--- /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),
+};
+
+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..7989045c2 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);
@@ -6094,7 +6094,6 @@ static void OakSpeechNidoranFSetupTemplateDummy(struct OakSpeechNidoranFStruct *
}
}
-#ifdef NONMATCHING
struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8 enable)
{
s32 size;
@@ -6134,8 +6133,7 @@ struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8
battlePosition = 1;
if (battlePosition > 8)
battlePosition = 8;
- // The following two statements refused to cooperate.
- sOakSpeechNidoranResources->spriteCount = battlePosition;
+ sOakSpeechNidoranResources->spriteCount = (battlePosition << 16) >> 16;
sOakSpeechNidoranResources->battlePosition = battlePosition;
sOakSpeechNidoranResources->frameCount = 4;
sOakSpeechNidoranResources->enable2 = FALSE;
@@ -6151,8 +6149,11 @@ struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8
}
else
{
- for (i = 0; i < (s8)sOakSpeechNidoranResources->spriteCount; ++i)
- sOakSpeechNidoranResources->bufferPtrs[i] = &sOakSpeechNidoranResources->dataBuffer[sOakSpeechNidoranResources->sizePerSprite * i];
+ do
+ {
+ for (i = 0; i < (s8)sOakSpeechNidoranResources->spriteCount; ++i)
+ sOakSpeechNidoranResources->bufferPtrs[i] = &sOakSpeechNidoranResources->dataBuffer[sOakSpeechNidoranResources->sizePerSprite * i];
+ } while (0);
}
sOakSpeechNidoranResources->templates = AllocZeroed(sizeof(struct SpriteTemplate) * sOakSpeechNidoranResources->spriteCount);
sOakSpeechNidoranResources->frameImages = AllocZeroed(sOakSpeechNidoranResources->spriteCount * sizeof(struct SpriteFrameImage) * sOakSpeechNidoranResources->frameCount);
@@ -6200,351 +6201,6 @@ struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8
}
return sOakSpeechNidoranResources;
}
-#else
-NAKED
-struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8 enable)
-{
- asm_unified("\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- lsls r1, 24\n\
- lsrs r5, r1, 24\n\
- movs r0, 0\n\
- mov r8, r0\n\
- ldr r4, _08044B34 @ =sOakSpeechNidoranResources\n\
- ldr r1, [r4]\n\
- cmp r1, 0\n\
- beq _08044B1E\n\
- ldrb r0, [r1, 0x2]\n\
- cmp r0, 0xA3\n\
- beq _08044B2E\n\
- adds r0, r1, 0\n\
- movs r1, 0\n\
- movs r2, 0x18\n\
- bl memset\n\
- mov r1, r8\n\
- str r1, [r4]\n\
- _08044B1E:\n\
- ldr r4, _08044B34 @ =sOakSpeechNidoranResources\n\
- movs r0, 0x18\n\
- bl AllocZeroed\n\
- adds r2, r0, 0\n\
- str r2, [r4]\n\
- cmp r2, 0\n\
- bne _08044B38\n\
- _08044B2E:\n\
- movs r0, 0\n\
- b _08044D70\n\
- .align 2, 0\n\
- _08044B34: .4byte sOakSpeechNidoranResources\n\
- _08044B38:\n\
- cmp r5, 0\n\
- beq _08044B94\n\
- cmp r5, 0x1\n\
- bne _08044B94\n\
- cmp r6, 0x4\n\
- bne _08044B5E\n\
- ldrb r1, [r2]\n\
- movs r0, 0x10\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldr r2, [r4]\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF\n\
- ands r0, r1\n\
- movs r1, 0x40\n\
- b _08044B7C\n\
- _08044B5E:\n\
- cmp r6, 0x4\n\
- bls _08044B64\n\
- movs r6, 0\n\
- _08044B64:\n\
- ldrb r1, [r2]\n\
- movs r0, 0x10\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x1\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldr r2, [r4]\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF\n\
- ands r0, r1\n\
- movs r1, 0x10\n\
- _08044B7C:\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldr r2, _08044B90 @ =sOakSpeechNidoranResources\n\
- ldr r1, [r2]\n\
- movs r0, 0x4\n\
- strb r0, [r1, 0x1]\n\
- ldr r1, [r2]\n\
- movs r0, 0x1\n\
- strb r0, [r1, 0x3]\n\
- b _08044BD0\n\
- .align 2, 0\n\
- _08044B90: .4byte sOakSpeechNidoranResources\n\
- _08044B94:\n\
- cmp r6, 0\n\
- bne _08044B9A\n\
- movs r6, 0x1\n\
- _08044B9A:\n\
- cmp r6, 0x8\n\
- bls _08044BA0\n\
- movs r6, 0x8\n\
- _08044BA0:\n\
- ldr r4, _08044C10 @ =sOakSpeechNidoranResources\n\
- ldr r3, [r4]\n\
- movs r0, 0xF\n\
- adds r1, r6, 0\n\
- ands r1, r0\n\
- ldrb r2, [r3]\n\
- movs r0, 0x10\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r3]\n\
- ldr r2, [r4]\n\
- lsls r3, r6, 4\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF\n\
- ands r0, r1\n\
- orrs r0, r3\n\
- strb r0, [r2]\n\
- ldr r1, [r4]\n\
- movs r2, 0\n\
- movs r0, 0x4\n\
- strb r0, [r1, 0x1]\n\
- ldr r0, [r4]\n\
- strb r2, [r0, 0x3]\n\
- _08044BD0:\n\
- ldr r5, _08044C10 @ =sOakSpeechNidoranResources\n\
- ldr r0, [r5]\n\
- ldrb r1, [r0, 0x1]\n\
- lsls r1, 11\n\
- str r1, [r0, 0x4]\n\
- ldrb r0, [r0]\n\
- lsls r0, 28\n\
- lsrs r0, 28\n\
- muls r0, r1\n\
- bl AllocZeroed\n\
- ldr r1, [r5]\n\
- str r0, [r1, 0x8]\n\
- ldrb r0, [r1]\n\
- lsls r0, 28\n\
- lsrs r0, 23\n\
- bl AllocZeroed\n\
- adds r2, r0, 0\n\
- ldr r1, [r5]\n\
- str r2, [r1, 0xC]\n\
- ldr r0, [r1, 0x8]\n\
- cmp r0, 0\n\
- beq _08044C04\n\
- cmp r2, 0\n\
- bne _08044C14\n\
- _08044C04:\n\
- movs r0, 0x1\n\
- mov r1, r8\n\
- orrs r1, r0\n\
- mov r8, r1\n\
- b _08044C44\n\
- .align 2, 0\n\
- _08044C10: .4byte sOakSpeechNidoranResources\n\
- _08044C14:\n\
- ldrb r0, [r1]\n\
- lsls r0, 28\n\
- movs r4, 0\n\
- adds r3, r5, 0\n\
- cmp r0, 0\n\
- beq _08044C44\n\
- _08044C20:\n\
- ldr r3, [r5]\n\
- ldr r0, [r3, 0xC]\n\
- lsls r1, r4, 2\n\
- adds r1, r0\n\
- ldr r0, [r3, 0x4]\n\
- adds r2, r0, 0\n\
- muls r2, r4\n\
- ldr r0, [r3, 0x8]\n\
- adds r0, r2\n\
- str r0, [r1]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- ldrb r0, [r3]\n\
- lsls r0, 28\n\
- lsrs r0, 28\n\
- cmp r4, r0\n\
- blt _08044C20\n\
- _08044C44:\n\
- ldr r5, _08044C8C @ =sOakSpeechNidoranResources\n\
- ldr r0, [r5]\n\
- ldrb r1, [r0]\n\
- lsls r1, 28\n\
- lsrs r1, 28\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 3\n\
- bl AllocZeroed\n\
- ldr r2, [r5]\n\
- str r0, [r2, 0x10]\n\
- ldrb r1, [r2]\n\
- lsls r1, 28\n\
- lsrs r1, 28\n\
- ldrb r0, [r2, 0x1]\n\
- lsls r0, 3\n\
- muls r0, r1\n\
- bl AllocZeroed\n\
- adds r2, r0, 0\n\
- ldr r1, [r5]\n\
- str r2, [r1, 0x14]\n\
- ldr r0, [r1, 0x10]\n\
- cmp r0, 0\n\
- beq _08044C7C\n\
- cmp r2, 0\n\
- bne _08044C90\n\
- _08044C7C:\n\
- movs r0, 0x2\n\
- mov r1, r8\n\
- orrs r1, r0\n\
- lsls r0, r1, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- b _08044CE2\n\
- .align 2, 0\n\
- _08044C8C: .4byte sOakSpeechNidoranResources\n\
- _08044C90:\n\
- movs r4, 0\n\
- ldrb r0, [r1, 0x1]\n\
- ldrb r1, [r1]\n\
- lsls r1, 28\n\
- lsrs r1, 28\n\
- muls r0, r1\n\
- adds r3, r5, 0\n\
- cmp r4, r0\n\
- bge _08044CC6\n\
- adds r7, r3, 0\n\
- movs r5, 0x80\n\
- lsls r5, 4\n\
- _08044CA8:\n\
- ldr r2, [r7]\n\
- ldr r1, [r2, 0x14]\n\
- lsls r0, r4, 3\n\
- adds r0, r1\n\
- strh r5, [r0, 0x4]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- ldrb r1, [r2, 0x1]\n\
- ldrb r0, [r2]\n\
- lsls r0, 28\n\
- lsrs r0, 28\n\
- muls r0, r1\n\
- cmp r4, r0\n\
- blt _08044CA8\n\
- _08044CC6:\n\
- ldr r0, [r3]\n\
- ldrb r4, [r0, 0x3]\n\
- cmp r4, 0\n\
- beq _08044CDA\n\
- cmp r4, 0x1\n\
- bne _08044CDA\n\
- adds r1, r6, 0\n\
- bl OakSpeechNidoranFSetupTemplate\n\
- b _08044CE2\n\
- _08044CDA:\n\
- ldr r0, _08044D60 @ =sOakSpeechNidoranResources\n\
- ldr r0, [r0]\n\
- bl OakSpeechNidoranFSetupTemplateDummy\n\
- _08044CE2:\n\
- movs r0, 0x2\n\
- mov r1, r8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08044D12\n\
- ldr r4, _08044D60 @ =sOakSpeechNidoranResources\n\
- ldr r0, [r4]\n\
- ldr r0, [r0, 0x14]\n\
- cmp r0, 0\n\
- beq _08044D00\n\
- bl Free\n\
- ldr r1, [r4]\n\
- movs r0, 0\n\
- str r0, [r1, 0x14]\n\
- _08044D00:\n\
- ldr r0, [r4]\n\
- ldr r0, [r0, 0x10]\n\
- cmp r0, 0\n\
- beq _08044D12\n\
- bl Free\n\
- ldr r1, [r4]\n\
- movs r0, 0\n\
- str r0, [r1, 0x10]\n\
- _08044D12:\n\
- movs r0, 0x1\n\
- mov r1, r8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08044D42\n\
- ldr r4, _08044D60 @ =sOakSpeechNidoranResources\n\
- ldr r0, [r4]\n\
- ldr r0, [r0, 0xC]\n\
- cmp r0, 0\n\
- beq _08044D30\n\
- bl Free\n\
- ldr r1, [r4]\n\
- movs r0, 0\n\
- str r0, [r1, 0xC]\n\
- _08044D30:\n\
- ldr r0, [r4]\n\
- ldr r0, [r0, 0x8]\n\
- cmp r0, 0\n\
- beq _08044D42\n\
- bl Free\n\
- ldr r1, [r4]\n\
- movs r0, 0\n\
- str r0, [r1, 0x8]\n\
- _08044D42:\n\
- mov r0, r8\n\
- cmp r0, 0\n\
- beq _08044D64\n\
- ldr r4, _08044D60 @ =sOakSpeechNidoranResources\n\
- ldr r0, [r4]\n\
- movs r1, 0\n\
- movs r2, 0x18\n\
- bl memset\n\
- ldr r0, [r4]\n\
- bl Free\n\
- movs r0, 0\n\
- str r0, [r4]\n\
- b _08044D6C\n\
- .align 2, 0\n\
- _08044D60: .4byte sOakSpeechNidoranResources\n\
- _08044D64:\n\
- ldr r0, _08044D7C @ =sOakSpeechNidoranResources\n\
- ldr r1, [r0]\n\
- movs r0, 0xA3\n\
- strb r0, [r1, 0x2]\n\
- _08044D6C:\n\
- ldr r0, _08044D7C @ =sOakSpeechNidoranResources\n\
- ldr r0, [r0]\n\
- _08044D70:\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
- _08044D7C: .4byte sOakSpeechNidoranResources\n\
- ");
-}
-#endif
void OakSpeechNidoranFFreeResources(void)
{
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"
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 8ff8247d9..6c022ca96 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -226,8 +226,7 @@ gFieldEffectArguments: @ 20386E0
.include "src/scanline_effect.o"
.align 2
-sOptionsMenuPtr: @ 2039620
- .space 0x4
+ .include "src/option_menu.o"
gTrainerCards: @ 2039624
.space 0x180